From c6b35eff2537f0b07ceb9aca499e8f76b3d33710 Mon Sep 17 00:00:00 2001
From: Adam Lopez <alopez@cs.jhu.edu>
Date: Wed, 5 Sep 2012 11:49:33 -0400
Subject: Fix bug in initialization of FeatureContext.input_span

---
 python/src/sa/_sa.c           | 24817 ++++++++++++++++++----------------------
 python/src/sa/rulefactory.pxi |     2 +-
 2 files changed, 10862 insertions(+), 13957 deletions(-)

(limited to 'python/src/sa')

diff --git a/python/src/sa/_sa.c b/python/src/sa/_sa.c
index a1530dda..7753341b 100644
--- a/python/src/sa/_sa.c
+++ b/python/src/sa/_sa.c
@@ -1,16 +1,16 @@
-/* Generated by Cython 0.17 on Wed Sep  5 12:38:10 2012 */
+/* Generated by Cython 0.15.1 on Wed Sep  5 11:46:33 2012 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #ifndef Py_PYTHON_H
     #error Python headers needed to compile C extensions, please install development version of Python.
-#elif PY_VERSION_HEX < 0x02040000
-    #error Cython requires Python 2.4+.
 #else
+
 #include <stddef.h> /* For offsetof */
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #endif
+
 #if !defined(WIN32) && !defined(MS_WINDOWS)
   #ifndef __stdcall
     #define __stdcall
@@ -22,44 +22,36 @@
     #define __fastcall
   #endif
 #endif
+
 #ifndef DL_IMPORT
   #define DL_IMPORT(t) t
 #endif
 #ifndef DL_EXPORT
   #define DL_EXPORT(t) t
 #endif
+
 #ifndef PY_LONG_LONG
   #define PY_LONG_LONG LONG_LONG
 #endif
-#ifndef Py_HUGE_VAL
-  #define Py_HUGE_VAL HUGE_VAL
-#endif
-#ifdef PYPY_VERSION
-#define CYTHON_COMPILING_IN_PYPY 1
-#define CYTHON_COMPILING_IN_CPYTHON 0
-#else
-#define CYTHON_COMPILING_IN_PYPY 0
-#define CYTHON_COMPILING_IN_CPYTHON 1
+
+#if PY_VERSION_HEX < 0x02040000
+  #define METH_COEXIST 0
+  #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
+  #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
 #endif
+
 #if PY_VERSION_HEX < 0x02050000
   typedef int Py_ssize_t;
   #define PY_SSIZE_T_MAX INT_MAX
   #define PY_SSIZE_T_MIN INT_MIN
   #define PY_FORMAT_SIZE_T ""
-  #define CYTHON_FORMAT_SSIZE_T ""
   #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
   #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
-  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
-                                (PyErr_Format(PyExc_TypeError, \
-                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
-                                 (PyObject*)0))
-  #define PyIndex_Check(o)     (PyNumber_Check(o) && !PyFloat_Check(o) && !PyComplex_Check(o))
+  #define PyNumber_Index(o)    PyNumber_Int(o)
+  #define PyIndex_Check(o)     PyNumber_Check(o)
   #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
-  #define __PYX_BUILD_PY_SSIZE_T "i"
-#else
-  #define __PYX_BUILD_PY_SSIZE_T "n"
-  #define CYTHON_FORMAT_SSIZE_T "z"
 #endif
+
 #if PY_VERSION_HEX < 0x02060000
   #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
   #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
@@ -67,6 +59,7 @@
   #define PyVarObject_HEAD_INIT(type, size) \
           PyObject_HEAD_INIT(type) size,
   #define PyType_Modified(t)
+
   typedef struct {
      void *buf;
      PyObject *obj;
@@ -80,6 +73,7 @@
      Py_ssize_t *suboffsets;
      void *internal;
   } Py_buffer;
+
   #define PyBUF_SIMPLE 0
   #define PyBUF_WRITABLE 0x0001
   #define PyBUF_FORMAT 0x0004
@@ -89,44 +83,24 @@
   #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
   #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
   #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
-  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
-  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
-  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
-  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
+
 #endif
+
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
-          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
-          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
-#endif
-#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
-  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
 #endif
+
 #if PY_MAJOR_VERSION >= 3
   #define Py_TPFLAGS_CHECKTYPES 0
   #define Py_TPFLAGS_HAVE_INDEX 0
 #endif
+
 #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
   #define Py_TPFLAGS_HAVE_NEWBUFFER 0
 #endif
-#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
-  #define CYTHON_PEP393_ENABLED 1
-  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
-                                              0 : _PyUnicode_Ready((PyObject *)(op)))
-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
-  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
-  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
-#else
-  #define CYTHON_PEP393_ENABLED 0
-  #define __Pyx_PyUnicode_READY(op)       (0)
-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
-  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
-  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
-#endif
+
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyStringObject               PyUnicodeObject
@@ -134,6 +108,7 @@
   #define PyString_Check               PyUnicode_Check
   #define PyString_CheckExact          PyUnicode_CheckExact
 #endif
+
 #if PY_VERSION_HEX < 0x02060000
   #define PyBytesObject                PyStringObject
   #define PyBytes_Type                 PyString_Type
@@ -152,6 +127,7 @@
   #define PyBytes_Concat               PyString_Concat
   #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
 #endif
+
 #if PY_VERSION_HEX < 0x02060000
   #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
   #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
@@ -159,7 +135,9 @@
 #ifndef PySet_CheckExact
   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
 #endif
+
 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+
 #if PY_MAJOR_VERSION >= 3
   #define PyIntObject                  PyLongObject
   #define PyInt_Type                   PyLong_Type
@@ -176,9 +154,11 @@
   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
 #endif
+
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
+
 #if PY_VERSION_HEX < 0x03020000
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
@@ -187,6 +167,16 @@
   #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
   #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
 #endif
+
+
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#endif
+
 #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
   #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
   #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
@@ -205,9 +195,11 @@
         (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
             (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
 #endif
+
 #if PY_MAJOR_VERSION >= 3
   #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
 #endif
+
 #if PY_VERSION_HEX < 0x02050000
   #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
   #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
@@ -217,6 +209,7 @@
   #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
   #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
 #endif
+
 #if PY_VERSION_HEX < 0x02050000
   #define __Pyx_NAMESTR(n) ((char *)(n))
   #define __Pyx_DOCSTR(n)  ((char *)(n))
@@ -225,15 +218,6 @@
   #define __Pyx_DOCSTR(n)  (n)
 #endif
 
-
-#if PY_MAJOR_VERSION >= 3
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
-#else
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
-#endif
-
 #ifndef __PYX_EXTERN_C
   #ifdef __cplusplus
     #define __PYX_EXTERN_C extern "C"
@@ -283,7 +267,7 @@
 #   else
 #     define CYTHON_UNUSED
 #   endif
-# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+# elif defined(__ICC) || defined(__INTEL_COMPILER)
 #   define CYTHON_UNUSED __attribute__ ((__unused__))
 # else
 #   define CYTHON_UNUSED
@@ -307,12 +291,8 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
 
-#if CYTHON_COMPILING_IN_CPYTHON
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
-#else
-#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
-#endif
-#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+
 
 #ifdef __GNUC__
   /* Test for GCC > 2.95 */
@@ -356,8 +336,16 @@ static const char *__pyx_f[] = {
   "str_map.pxi",
 };
 
+static PyObject *__Pyx_Generator_Next(PyObject *self);
+static PyObject *__Pyx_Generator_Send(PyObject *self, PyObject *value);
+static PyObject *__Pyx_Generator_Close(PyObject *self);
+static PyObject *__Pyx_Generator_Throw(PyObject *gen, PyObject *args, CYTHON_UNUSED PyObject *kwds);
+
+typedef PyObject *(*__pyx_generator_body_t)(PyObject *, PyObject *);
+
 /*--- Type declarations ---*/
 struct __pyx_obj_3_sa_HieroCachingRuleFactory;
+struct __pyx_Generator_object;
 struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__;
 struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats;
 struct __pyx_obj_3_sa_IntList;
@@ -402,7 +390,7 @@ struct __pyx_t_3_sa__Trie_Node;
 struct __pyx_t_3_sa_match_node;
 struct __pyx_t_3_sa_Matching;
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":9
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":9
  * from libc.string cimport memset, strcpy
  * 
  * cdef struct _node:             # <<<<<<<<<<<<<<
@@ -416,7 +404,7 @@ struct __pyx_t_3_sa__node {
   int val;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":30
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":30
  * _init_lower_mask()
  * 
  * cdef struct _BitSet:             # <<<<<<<<<<<<<<
@@ -430,7 +418,7 @@ struct __pyx_t_3_sa__BitSet {
   int size;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":168
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":168
  *     return result
  * 
  * cdef struct _VEB:             # <<<<<<<<<<<<<<
@@ -447,7 +435,7 @@ struct __pyx_t_3_sa__VEB {
   void **bottom;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":10
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":10
  * cdef struct _Trie_Node    # forward decl
  * 
  * cdef struct _Trie_Edge:             # <<<<<<<<<<<<<<
@@ -461,7 +449,7 @@ struct __pyx_t_3_sa__Trie_Edge {
   struct __pyx_t_3_sa__Trie_Edge *smaller;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":8
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":8
  * from libc.string cimport memset, memcpy
  * 
  * cdef struct _Trie_Node    # forward decl             # <<<<<<<<<<<<<<
@@ -474,7 +462,7 @@ struct __pyx_t_3_sa__Trie_Node {
   int arr_len;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":62
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":62
  * 
  * # linked list structure for storing matches in BaselineRuleFactory
  * cdef struct match_node:             # <<<<<<<<<<<<<<
@@ -486,7 +474,7 @@ struct __pyx_t_3_sa_match_node {
   struct __pyx_t_3_sa_match_node *next;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":158
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":158
  * 
  * # struct used to encapsulate a single matching
  * cdef struct Matching:             # <<<<<<<<<<<<<<
@@ -501,7 +489,7 @@ struct __pyx_t_3_sa_Matching {
   int size;
 };
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":214
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":214
  * 
  * 
  * cdef class HieroCachingRuleFactory:             # <<<<<<<<<<<<<<
@@ -550,7 +538,25 @@ struct __pyx_obj_3_sa_HieroCachingRuleFactory {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":141
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":81
+ *         free(self.arr)
+ * 
+ *     def __iter__(self):             # <<<<<<<<<<<<<<
+ *         cdef int i
+ *         for i in range(self.len):
+ */
+struct __pyx_Generator_object {
+  PyObject_HEAD
+  __pyx_generator_body_t body;
+  int is_running;
+  int resume_label;
+  PyObject *exc_type;
+  PyObject *exc_value;
+  PyObject *exc_traceback;
+};
+
+
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":141
  *         return self.syms[i]
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -558,14 +564,14 @@ struct __pyx_obj_3_sa_HieroCachingRuleFactory {
  *         for i from 0 <= i < self.n:
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   int __pyx_v_i;
-  struct __pyx_obj_3_sa_Phrase *__pyx_v_self;
+  PyObject *__pyx_v_self;
   int __pyx_t_0;
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":36
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":36
  *         logger.info("LCP array completed")
  * 
  *     def compute_stats(self, int max_n):             # <<<<<<<<<<<<<<
@@ -573,7 +579,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ {
  *         particular, the frequency associated with each word is
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   int __pyx_v_N;
   int __pyx_v_freq;
   int __pyx_v_h;
@@ -589,7 +595,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats {
   PyObject *__pyx_v_ngram_starts;
   int __pyx_v_rs;
   struct __pyx_obj_3_sa_IntList *__pyx_v_run_start;
-  struct __pyx_obj_3_sa_LCP *__pyx_v_self;
+  PyObject *__pyx_v_self;
   int __pyx_v_valid;
   struct __pyx_obj_3_sa_VEB *__pyx_v_veb;
   int __pyx_t_0;
@@ -613,7 +619,7 @@ struct __pyx_obj_3_sa_IntList {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":340
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":340
  * 
  * 
  * cdef class VEBIterator:             # <<<<<<<<<<<<<<
@@ -627,7 +633,7 @@ struct __pyx_obj_3_sa_VEBIterator {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":47
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":47
  * 
  * 
  * cdef class BiLex:             # <<<<<<<<<<<<<<
@@ -648,7 +654,7 @@ struct __pyx_obj_3_sa_BiLex {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":354
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":354
  * 
  * 
  * cdef class VEB:             # <<<<<<<<<<<<<<
@@ -662,7 +668,7 @@ struct __pyx_obj_3_sa_VEB {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":5
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":5
  * as k most frequent n-grams"""
  * 
  * cdef class LCP:             # <<<<<<<<<<<<<<
@@ -676,7 +682,7 @@ struct __pyx_obj_3_sa_LCP {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":9
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":9
  * from libc.string cimport memset, strcpy
  * 
  * cdef class DataArray:             # <<<<<<<<<<<<<<
@@ -695,7 +701,7 @@ struct __pyx_obj_3_sa_DataArray {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":100
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":100
  * 
  * 
  * cdef class BitSetIterator:             # <<<<<<<<<<<<<<
@@ -709,7 +715,7 @@ struct __pyx_obj_3_sa_BitSetIterator {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":188
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":188
  * 
  * 
  * cdef class Precomputation:             # <<<<<<<<<<<<<<
@@ -730,7 +736,7 @@ struct __pyx_obj_3_sa_Precomputation {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":935
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":935
  *         return sorted(result);
  * 
  *     def input(self, fwords):             # <<<<<<<<<<<<<<
@@ -738,7 +744,7 @@ struct __pyx_obj_3_sa_Precomputation {
  *         it looks up all of the rules that can be used to translate
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_8_input {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   PyObject *__pyx_v_alignment;
   PyObject *__pyx_v_als;
   PyObject *__pyx_v_alslist;
@@ -787,7 +793,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_8_input {
   PyObject *__pyx_v_sa_range;
   struct __pyx_obj_3_sa_IntList *__pyx_v_sample;
   struct __pyx_obj_3_sa_FeatureVector *__pyx_v_scores;
-  struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self;
+  PyObject *__pyx_v_self;
   PyObject *__pyx_v_spanlen;
   float __pyx_v_start_time;
   PyObject *__pyx_v_stop_time;
@@ -801,19 +807,17 @@ struct __pyx_obj_3_sa___pyx_scope_struct_8_input {
   PyObject *__pyx_v_xnode;
   PyObject *__pyx_v_xroot;
   Py_ssize_t __pyx_t_0;
-  PyObject *__pyx_t_1;
-  Py_ssize_t __pyx_t_2;
-  int __pyx_t_3;
+  Py_ssize_t __pyx_t_1;
+  PyObject *__pyx_t_2;
+  PyObject *__pyx_t_3;
   PyObject *__pyx_t_4;
-  PyObject *__pyx_t_5;
-  int __pyx_t_6;
-  Py_ssize_t __pyx_t_7;
-  Py_ssize_t __pyx_t_8;
-  Py_ssize_t __pyx_t_9;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  Py_ssize_t __pyx_t_6;
+  PyObject *(*__pyx_t_7)(PyObject *);
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":6
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":6
  * from libc.stdio cimport FILE, fclose, fopen
  * 
  * cdef class SuffixArray:             # <<<<<<<<<<<<<<
@@ -829,7 +833,7 @@ struct __pyx_obj_3_sa_SuffixArray {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":7
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":7
  * cdef int INDEX_MASK = (1<<INDEX_SHIFT)-1
  * 
  * cdef class Alphabet:             # <<<<<<<<<<<<<<
@@ -865,7 +869,7 @@ struct __pyx_obj_3_sa_Rule {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":187
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":187
  *         fields = [sym_tostring(self.lhs), str(self.f), str(self.e), str(self.scores)]
  *         if self.word_alignments is not None:
  *             fields.append(' '.join('%d-%d' % a for a in self.alignments()))             # <<<<<<<<<<<<<<
@@ -873,7 +877,7 @@ struct __pyx_obj_3_sa_Rule {
  * 
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *__pyx_outer_scope;
   PyObject *__pyx_v_a;
   PyObject *__pyx_t_0;
@@ -882,7 +886,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":73
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":73
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:
  *             data = (line.split(' ||| ')[side] for line in fp)             # <<<<<<<<<<<<<<
@@ -890,7 +894,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr {
  * 
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *__pyx_outer_scope;
   PyObject *__pyx_v_line;
   PyObject *__pyx_t_0;
@@ -899,7 +903,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":70
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":70
  * # in the suffix array; if discontiguous, it is the set of
  * # actual locations (packed into an array)
  * cdef class PhraseLocation:             # <<<<<<<<<<<<<<
@@ -918,7 +922,7 @@ struct __pyx_obj_3_sa_PhraseLocation {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":21
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":21
  * 
  *     def __str__(self):
  *         return ' '.join('%s=%s' % feat for feat in self)             # <<<<<<<<<<<<<<
@@ -926,7 +930,7 @@ struct __pyx_obj_3_sa_PhraseLocation {
  * cdef class Scorer:
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *__pyx_outer_scope;
   PyObject *__pyx_v_feat;
   PyObject *__pyx_t_0;
@@ -935,7 +939,7 @@ struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":20
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":20
  *             yield (FD.word(self.names[i]), self.values[i])
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -944,11 +948,11 @@ struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr {
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ {
   PyObject_HEAD
-  struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self;
+  PyObject *__pyx_v_self;
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":71
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":71
  *             self.read_text_data(fp)
  * 
  *     def read_bitext(self, char* filename, int side):             # <<<<<<<<<<<<<<
@@ -976,7 +980,7 @@ struct __pyx_obj_3_sa_FeatureVector {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":190
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":190
  *         return ' ||| '.join(fields)
  * 
  *     def alignments(self):             # <<<<<<<<<<<<<<
@@ -984,16 +988,16 @@ struct __pyx_obj_3_sa_FeatureVector {
  *             yield point/65536, point%65536
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   PyObject *__pyx_v_point;
-  struct __pyx_obj_3_sa_Rule *__pyx_v_self;
+  PyObject *__pyx_v_self;
   PyObject *__pyx_t_0;
   Py_ssize_t __pyx_t_1;
   PyObject *(*__pyx_t_2)(PyObject *);
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":23
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":23
  *         return ' '.join('%s=%s' % feat for feat in self)
  * 
  * cdef class Scorer:             # <<<<<<<<<<<<<<
@@ -1007,7 +1011,7 @@ struct __pyx_obj_3_sa_Scorer {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":8
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":8
  * # May need to revisit if things get really tight, though.
  * 
  * cdef class Alignment:             # <<<<<<<<<<<<<<
@@ -1022,7 +1026,7 @@ struct __pyx_obj_3_sa_Alignment {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":15
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":15
  *         self.values.append(value)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -1030,15 +1034,15 @@ struct __pyx_obj_3_sa_Alignment {
  *         for i in range(self.names.len):
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   unsigned int __pyx_v_i;
-  struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self;
+  PyObject *__pyx_v_self;
   int __pyx_t_0;
   unsigned int __pyx_t_1;
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":118
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":118
  * # (entirely C-implemented) _BitSet struct.
  * # Very slow; use only for debugging
  * cdef class BitSet:             # <<<<<<<<<<<<<<
@@ -1051,7 +1055,7 @@ struct __pyx_obj_3_sa_BitSet {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":92
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":92
  * 
  * 
  * cdef class Sampler:             # <<<<<<<<<<<<<<
@@ -1065,7 +1069,7 @@ struct __pyx_obj_3_sa_Sampler {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":8
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":8
  *     char* stringmap_word(StrMap *vocab, int i)
  * 
  * cdef class StringMap:             # <<<<<<<<<<<<<<
@@ -1079,7 +1083,7 @@ struct __pyx_obj_3_sa_StringMap {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":32
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":32
  * cdef int EPSILON = sym_fromstring('*EPS*', True)
  * 
  * cdef class TrieNode:             # <<<<<<<<<<<<<<
@@ -1092,7 +1096,7 @@ struct __pyx_obj_3_sa_TrieNode {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":38
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":38
  *         self.children = {}
  * 
  * cdef class ExtendedTrieNode(TrieNode):             # <<<<<<<<<<<<<<
@@ -1107,7 +1111,7 @@ struct __pyx_obj_3_sa_ExtendedTrieNode {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":109
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":109
  *         trie_node_to_map(edge.node, result, prefix, include_zeros)
  * 
  * cdef class TrieMap:             # <<<<<<<<<<<<<<
@@ -1139,7 +1143,7 @@ struct __pyx_obj_3_sa_Phrase {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":81
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":81
  *         free(self.arr)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -1147,15 +1151,15 @@ struct __pyx_obj_3_sa_Phrase {
  *         for i in range(self.len):
  */
 struct __pyx_obj_3_sa___pyx_scope_struct____iter__ {
-  PyObject_HEAD
+  struct __pyx_Generator_object __pyx_base;
   int __pyx_v_i;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_self;
+  PyObject *__pyx_v_self;
   int __pyx_t_0;
   int __pyx_t_1;
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":49
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":49
  * 
  * 
  * cdef class TrieTable:             # <<<<<<<<<<<<<<
@@ -1170,7 +1174,7 @@ struct __pyx_obj_3_sa_TrieTable {
 };
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":183
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":183
  *         return self.f.arity()
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -1179,7 +1183,7 @@ struct __pyx_obj_3_sa_TrieTable {
  */
 struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ {
   PyObject_HEAD
-  struct __pyx_obj_3_sa_Rule *__pyx_v_self;
+  PyObject *__pyx_v_self;
 };
 
 
@@ -1201,7 +1205,7 @@ struct __pyx_obj_3_sa_FloatList {
 
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":8
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":8
  *     char* stringmap_word(StrMap *vocab, int i)
  * 
  * cdef class StringMap:             # <<<<<<<<<<<<<<
@@ -1216,7 +1220,7 @@ struct __pyx_vtabstruct_3_sa_StringMap {
 static struct __pyx_vtabstruct_3_sa_StringMap *__pyx_vtabptr_3_sa_StringMap;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":9
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":9
  * from libc.string cimport memset, strcpy
  * 
  * cdef class DataArray:             # <<<<<<<<<<<<<<
@@ -1231,7 +1235,7 @@ struct __pyx_vtabstruct_3_sa_DataArray {
 static struct __pyx_vtabstruct_3_sa_DataArray *__pyx_vtabptr_3_sa_DataArray;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":109
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":109
  *         trie_node_to_map(edge.node, result, prefix, include_zeros)
  * 
  * cdef class TrieMap:             # <<<<<<<<<<<<<<
@@ -1246,7 +1250,7 @@ struct __pyx_vtabstruct_3_sa_TrieMap {
 static struct __pyx_vtabstruct_3_sa_TrieMap *__pyx_vtabptr_3_sa_TrieMap;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":8
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":8
  * # May need to revisit if things get really tight, though.
  * 
  * cdef class Alignment:             # <<<<<<<<<<<<<<
@@ -1262,7 +1266,7 @@ struct __pyx_vtabstruct_3_sa_Alignment {
 static struct __pyx_vtabstruct_3_sa_Alignment *__pyx_vtabptr_3_sa_Alignment;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":47
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":47
  * 
  * 
  * cdef class BiLex:             # <<<<<<<<<<<<<<
@@ -1281,7 +1285,7 @@ struct __pyx_vtabstruct_3_sa_BiLex {
 static struct __pyx_vtabstruct_3_sa_BiLex *__pyx_vtabptr_3_sa_BiLex;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":9
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":9
  * from libc.string cimport memset, memcpy
  * 
  * cdef class IntList:             # <<<<<<<<<<<<<<
@@ -1301,7 +1305,7 @@ struct __pyx_vtabstruct_3_sa_IntList {
 static struct __pyx_vtabstruct_3_sa_IntList *__pyx_vtabptr_3_sa_IntList;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":4
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":4
  * from libc.string cimport strsep, strcpy, strlen
  * 
  * cdef class Phrase:             # <<<<<<<<<<<<<<
@@ -1316,7 +1320,7 @@ struct __pyx_vtabstruct_3_sa_Phrase {
 static struct __pyx_vtabstruct_3_sa_Phrase *__pyx_vtabptr_3_sa_Phrase;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":70
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":70
  * # in the suffix array; if discontiguous, it is the set of
  * # actual locations (packed into an array)
  * cdef class PhraseLocation:             # <<<<<<<<<<<<<<
@@ -1330,7 +1334,7 @@ struct __pyx_vtabstruct_3_sa_PhraseLocation {
 static struct __pyx_vtabstruct_3_sa_PhraseLocation *__pyx_vtabptr_3_sa_PhraseLocation;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":188
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":188
  * 
  * 
  * cdef class Precomputation:             # <<<<<<<<<<<<<<
@@ -1345,7 +1349,7 @@ struct __pyx_vtabstruct_3_sa_Precomputation {
 static struct __pyx_vtabstruct_3_sa_Precomputation *__pyx_vtabptr_3_sa_Precomputation;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":23
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":23
  *         return ' '.join('%s=%s' % feat for feat in self)
  * 
  * cdef class Scorer:             # <<<<<<<<<<<<<<
@@ -1359,7 +1363,7 @@ struct __pyx_vtabstruct_3_sa_Scorer {
 static struct __pyx_vtabstruct_3_sa_Scorer *__pyx_vtabptr_3_sa_Scorer;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":9
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":9
  * from libc.string cimport memset, strcpy, strlen
  * 
  * cdef class FloatList:             # <<<<<<<<<<<<<<
@@ -1375,7 +1379,7 @@ struct __pyx_vtabstruct_3_sa_FloatList {
 static struct __pyx_vtabstruct_3_sa_FloatList *__pyx_vtabptr_3_sa_FloatList;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":354
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":354
  * 
  * 
  * cdef class VEB:             # <<<<<<<<<<<<<<
@@ -1391,7 +1395,7 @@ struct __pyx_vtabstruct_3_sa_VEB {
 static struct __pyx_vtabstruct_3_sa_VEB *__pyx_vtabptr_3_sa_VEB;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":7
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":7
  * cdef int INDEX_MASK = (1<<INDEX_SHIFT)-1
  * 
  * cdef class Alphabet:             # <<<<<<<<<<<<<<
@@ -1414,7 +1418,7 @@ struct __pyx_vtabstruct_3_sa_Alphabet {
 static struct __pyx_vtabstruct_3_sa_Alphabet *__pyx_vtabptr_3_sa_Alphabet;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":214
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":214
  * 
  * 
  * cdef class HieroCachingRuleFactory:             # <<<<<<<<<<<<<<
@@ -1442,7 +1446,7 @@ struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory {
 static struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *__pyx_vtabptr_3_sa_HieroCachingRuleFactory;
 
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":6
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":6
  * from libc.stdio cimport FILE, fclose, fopen
  * 
  * cdef class SuffixArray:             # <<<<<<<<<<<<<<
@@ -1451,15 +1455,17 @@ static struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *__pyx_vtabptr_3_sa_
  */
 
 struct __pyx_vtabstruct_3_sa_SuffixArray {
-  int (*__pyx___search_high)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int);
-  int (*__pyx___search_low)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int);
-  PyObject *(*__pyx___get_range)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int, int);
-  PyObject *(*__pyx___lookup_helper)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int);
+  int (*__search_high)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int);
+  int (*__search_low)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int);
+  PyObject *(*__get_range)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int, int);
+  PyObject *(*__lookup_helper)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int);
 };
 static struct __pyx_vtabstruct_3_sa_SuffixArray *__pyx_vtabptr_3_sa_SuffixArray;
+
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
+
 #if CYTHON_REFNANNY
   typedef struct {
     void (*INCREF)(void*, PyObject*, int);
@@ -1472,21 +1478,8 @@ static struct __pyx_vtabstruct_3_sa_SuffixArray *__pyx_vtabptr_3_sa_SuffixArray;
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
-#ifdef WITH_THREAD
-  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
-          if (acquire_gil) { \
-              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
-              PyGILState_Release(__pyx_gilstate_save); \
-          } else { \
-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
-          }
-#else
-  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
-          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
-#endif
-  #define __Pyx_RefNannyFinishContext() \
-          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+  #define __Pyx_RefNannySetupContext(name)           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+  #define __Pyx_RefNannyFinishContext()           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
   #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
   #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
   #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
@@ -1497,7 +1490,7 @@ static struct __pyx_vtabstruct_3_sa_SuffixArray *__pyx_vtabptr_3_sa_SuffixArray;
   #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
 #else
   #define __Pyx_RefNannyDeclarations
-  #define __Pyx_RefNannySetupContext(name, acquire_gil)
+  #define __Pyx_RefNannySetupContext(name)
   #define __Pyx_RefNannyFinishContext()
   #define __Pyx_INCREF(r) Py_INCREF(r)
   #define __Pyx_DECREF(r) Py_DECREF(r)
@@ -1508,97 +1501,16 @@ static struct __pyx_vtabstruct_3_sa_SuffixArray *__pyx_vtabptr_3_sa_SuffixArray;
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
 #endif /* CYTHON_REFNANNY */
-#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
-#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
 
-static int __Pyx_PyBytes_SingleTailmatch(PyObject* self, PyObject* arg, Py_ssize_t start,
-                                         Py_ssize_t end, int direction)
-{
-    const char* self_ptr = PyBytes_AS_STRING(self);
-    Py_ssize_t self_len = PyBytes_GET_SIZE(self);
-    const char* sub_ptr;
-    Py_ssize_t sub_len;
-    int retval;
-#if PY_VERSION_HEX >= 0x02060000
-    Py_buffer view;
-    view.obj = NULL;
-#endif
-    if ( PyBytes_Check(arg) ) {
-        sub_ptr = PyBytes_AS_STRING(arg);
-        sub_len = PyBytes_GET_SIZE(arg);
-    }
-#if PY_MAJOR_VERSION < 3
-    else if ( PyUnicode_Check(arg) ) {
-        return PyUnicode_Tailmatch(self, arg, start, end, direction);
-    }
-#endif
-    else {
-#if PY_VERSION_HEX < 0x02060000
-        if (unlikely(PyObject_AsCharBuffer(arg, &sub_ptr, &sub_len)))
-            return -1;
-#else
-        if (unlikely(PyObject_GetBuffer(self, &view, PyBUF_SIMPLE) == -1))
-            return -1;
-        sub_ptr = (const char*) view.buf;
-        sub_len = view.len;
-#endif
-    }
-    if (end > self_len)
-        end = self_len;
-    else if (end < 0)
-        end += self_len;
-    if (end < 0)
-        end = 0;
-    if (start < 0)
-        start += self_len;
-    if (start < 0)
-        start = 0;
-    if (direction > 0) {
-        if (end-sub_len > start)
-            start = end - sub_len;
-    }
-    if (start + sub_len <= end)
-        retval = !memcmp(self_ptr+start, sub_ptr, sub_len);
-    else
-        retval = 0;
-#if PY_VERSION_HEX >= 0x02060000
-    if (view.obj)
-        PyBuffer_Release(&view);
-#endif
-    return retval;
-}
-static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr, Py_ssize_t start,
-                                   Py_ssize_t end, int direction)
-{
-    if (unlikely(PyTuple_Check(substr))) {
-        Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
-        for (i = 0; i < count; i++) {
-            int result;
-#if CYTHON_COMPILING_IN_CPYTHON
-            result = __Pyx_PyBytes_SingleTailmatch(self, PyTuple_GET_ITEM(substr, i),
-                                                   start, end, direction);
-#else
-            PyObject* sub = PySequence_GetItem(substr, i);
-            if (unlikely(!sub)) return -1;
-            result = __Pyx_PyBytes_SingleTailmatch(self, sub, start, end, direction);
-            Py_DECREF(sub);
-#endif
-            if (result) {
-                return result;
-            }
-        }
-        return 0;
-    }
-    return __Pyx_PyBytes_SingleTailmatch(self, substr, start, end, direction);
-}
+static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* arg, Py_ssize_t start,
+                                   Py_ssize_t end, int direction);
 
-static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
 
-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
-    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
-    const char* function_name); /*proto*/
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
 
 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
     Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
@@ -1610,7 +1522,9 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
 
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
 
-static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/
+static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
+    const char* function_name, int kw_allowed); /*proto*/
+
 
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
     PyObject *r;
@@ -1619,96 +1533,86 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
     Py_DECREF(j);
     return r;
 }
+
+
 #define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                     __Pyx_GetItemInt_List_Fast(o, i) : \
                                                     __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
-        PyObject *r = PyList_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
-        PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
-        Py_INCREF(r);
-        return r;
+    if (likely(o != Py_None)) {
+        if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+            PyObject *r = PyList_GET_ITEM(o, i);
+            Py_INCREF(r);
+            return r;
+        }
+        else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
+            PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
+            Py_INCREF(r);
+            return r;
+        }
     }
     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
-#endif
 }
+
 #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                     __Pyx_GetItemInt_Tuple_Fast(o, i) : \
                                                     __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
-        PyObject *r = PyTuple_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
-        PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
-        Py_INCREF(r);
-        return r;
+    if (likely(o != Py_None)) {
+        if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, i);
+            Py_INCREF(r);
+            return r;
+        }
+        else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
+            PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
+            Py_INCREF(r);
+            return r;
+        }
     }
     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
-#endif
 }
+
+
 #define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                     __Pyx_GetItemInt_Fast(o, i) : \
                                                     __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (PyList_CheckExact(o)) {
-        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
-        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
-            PyObject *r = PyList_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
+    PyObject *r;
+    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
     }
-    else if (PyTuple_CheckExact(o)) {
-        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
-        if (likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
-            PyObject *r = PyTuple_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    } else {  /* inlined PySequence_GetItem() */
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_item)) {
-            if (unlikely(i < 0) && likely(m->sq_length)) {
-                Py_ssize_t l = m->sq_length(o);
-                if (unlikely(l < 0)) return NULL;
-                i += l;
-            }
-            return m->sq_item(o, i);
-        }
+    else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
     }
-#else
-    if (PySequence_Check(o)) {
-        return PySequence_GetItem(o, i);
+    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) {
+        r = PySequence_GetItem(o, i);
     }
-#endif
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+    else {
+        r = __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+    }
+    return r;
 }
 
-static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) {
-    int result = PySequence_Contains(seq, item);
-    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+static CYTHON_INLINE int __Pyx_NegateNonNeg(int b) { 
+    return unlikely(b < 0) ? b : !b; 
+}
+static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) {
+    return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b);
 }
 
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
     if (likely(PyList_CheckExact(L))) {
-        if (unlikely(PyList_Append(L, x) < 0)) return NULL;
+        if (PyList_Append(L, x) < 0) return NULL;
         Py_INCREF(Py_None);
         return Py_None; /* this is just to have an accurate signature */
-    } else {
+    }
+    else {
         PyObject *r, *m;
         m = __Pyx_GetAttrString(L, "append");
         if (!m) return NULL;
@@ -1726,17 +1630,16 @@ static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
 
 static CYTHON_INLINE long __Pyx_mod_long(long, long); /* proto */
 
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
-
 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
 
-static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
 
 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
 
 #define __Pyx_SetItemInt(o, i, v, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                     __Pyx_SetItemInt_Fast(o, i, v) : \
                                                     __Pyx_SetItemInt_Generic(o, to_py_func(i), v))
+
 static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
     int r;
     if (!j) return -1;
@@ -1744,126 +1647,130 @@ static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyOb
     Py_DECREF(j);
     return r;
 }
+
 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (PyList_CheckExact(o)) {
-        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
-        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
-            PyObject* old = PyList_GET_ITEM(o, n);
-            Py_INCREF(v);
-            PyList_SET_ITEM(o, n, v);
-            Py_DECREF(old);
-            return 1;
-        }
-    } else {  /* inlined PySequence_SetItem() */
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_ass_item)) {
-            if (unlikely(i < 0) && likely(m->sq_length)) {
-                Py_ssize_t l = m->sq_length(o);
-                if (unlikely(l < 0)) return -1;
-                i += l;
-            }
-            return m->sq_ass_item(o, i, v);
-        }
+    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        Py_INCREF(v);
+        Py_DECREF(PyList_GET_ITEM(o, i));
+        PyList_SET_ITEM(o, i, v);
+        return 1;
     }
-#else
-#if CYTHON_COMPILING_IN_PYPY
-    if (PySequence_Check(o) && !PyDict_Check(o)) {
-#else
-    if (PySequence_Check(o)) {
-#endif
+    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_ass_item && (likely(i >= 0)))
         return PySequence_SetItem(o, i, v);
+    else {
+        PyObject *j = PyInt_FromSsize_t(i);
+        return __Pyx_SetItemInt_Generic(o, j, v);
     }
-#endif
-    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
 }
 
 static double __Pyx__PyObject_AsDouble(PyObject* obj); /* proto */
-#if CYTHON_COMPILING_IN_PYPY
-#define __Pyx_PyObject_AsDouble(obj) \
-(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) : \
- likely(PyInt_CheckExact(obj)) ? \
- PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj))
-#else
+
 #define __Pyx_PyObject_AsDouble(obj) \
-((likely(PyFloat_CheckExact(obj))) ? \
- PyFloat_AS_DOUBLE(obj) : __Pyx__PyObject_AsDouble(obj))
-#endif
+    ((likely(PyFloat_CheckExact(obj))) ? \
+     PyFloat_AS_DOUBLE(obj) : __Pyx__PyObject_AsDouble(obj))
 
 static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
 
 static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact); /*proto*/
 
-#if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
-    PyListObject* L = (PyListObject*) list;
-    Py_ssize_t len = Py_SIZE(list);
-    if (likely(L->allocated > len)) {
-        Py_INCREF(x);
-        PyList_SET_ITEM(list, len, x);
-        Py_SIZE(list) = len+1;
-        return 0;
-    }
-    return PyList_Append(list, x);
-}
-#else
-#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
-#endif
-
-static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, int eq) {
-    int result = PyDict_Contains(dict, item);
-    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
-}
-
-static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
-
-static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
-
-static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
-                                             int is_tuple, int has_known_size, int decref_tuple);
-
-static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
-                                                   Py_ssize_t* p_orig_length, int* p_is_dict);
-static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
-                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
-
 #if PY_VERSION_HEX < 0x02050000
 #ifndef PyAnySet_CheckExact
+
 #define PyAnySet_CheckExact(ob) \
     ((ob)->ob_type == &PySet_Type || \
      (ob)->ob_type == &PyFrozenSet_Type)
+
 #define PySet_New(iterable) \
     PyObject_CallFunctionObjArgs((PyObject *)&PySet_Type, (iterable), NULL)
+
 #define Pyx_PyFrozenSet_New(iterable) \
     PyObject_CallFunctionObjArgs((PyObject *)&PyFrozenSet_Type, (iterable), NULL)
+
 #define PySet_Size(anyset) \
     PyObject_Size((anyset))
+
 #define PySet_Contains(anyset, key) \
     PySequence_Contains((anyset), (key))
+
 #define PySet_Pop(set) \
     PyObject_CallMethod(set, (char *)"pop", NULL)
+
 static CYTHON_INLINE int PySet_Clear(PyObject *set) {
     PyObject *ret = PyObject_CallMethod(set, (char *)"clear", NULL);
     if (!ret) return -1;
     Py_DECREF(ret); return 0;
 }
+
 static CYTHON_INLINE int PySet_Discard(PyObject *set, PyObject *key) {
     PyObject *ret = PyObject_CallMethod(set, (char *)"discard", (char *)"O", key);
     if (!ret) return -1;
     Py_DECREF(ret); return 0;
 }
+
 static CYTHON_INLINE int PySet_Add(PyObject *set, PyObject *key) {
     PyObject *ret = PyObject_CallMethod(set, (char *)"add", (char *)"O", key);
     if (!ret) return -1;
     Py_DECREF(ret); return 0;
 }
+
 #endif /* PyAnySet_CheckExact (<= Py2.4) */
+
+#if PY_VERSION_HEX < 0x02040000
+#ifndef Py_SETOBJECT_H
+#define Py_SETOBJECT_H
+
+static PyTypeObject *__Pyx_PySet_Type = NULL;
+static PyTypeObject *__Pyx_PyFrozenSet_Type = NULL;
+
+#define PySet_Type (*__Pyx_PySet_Type)
+#define PyFrozenSet_Type (*__Pyx_PyFrozenSet_Type)
+
+#define PyAnySet_Check(ob) \
+    (PyAnySet_CheckExact(ob) || \
+     PyType_IsSubtype((ob)->ob_type, &PySet_Type) || \
+     PyType_IsSubtype((ob)->ob_type, &PyFrozenSet_Type))
+
+#define PyFrozenSet_CheckExact(ob) ((ob)->ob_type == &PyFrozenSet_Type)
+
+static int __Pyx_Py23SetsImport(void) {
+    PyObject *sets=0, *Set=0, *ImmutableSet=0;
+
+    sets = PyImport_ImportModule((char *)"sets");
+    if (!sets) goto bad;
+    Set = PyObject_GetAttrString(sets, (char *)"Set");
+    if (!Set) goto bad;
+    ImmutableSet = PyObject_GetAttrString(sets, (char *)"ImmutableSet");
+    if (!ImmutableSet) goto bad;
+    Py_DECREF(sets);
+
+    __Pyx_PySet_Type       = (PyTypeObject*) Set;
+    __Pyx_PyFrozenSet_Type = (PyTypeObject*) ImmutableSet;
+
+    return 0;
+
+ bad:
+    Py_XDECREF(sets);
+    Py_XDECREF(Set);
+    Py_XDECREF(ImmutableSet);
+    return -1;
+}
+
+#else
+static int __Pyx_Py23SetsImport(void) { return 0; }
+#endif /* !Py_SETOBJECT_H */
+#endif /* < Py2.4  */
 #endif /* < Py2.5  */
 
+static CYTHON_INLINE void __Pyx_RaiseNoneIndexingError(void);
+
 #if PY_MAJOR_VERSION >= 3
 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     PyObject *value;
+    if (unlikely(d == Py_None)) {
+        __Pyx_RaiseNoneIndexingError();
+        return NULL;
+    }
     value = PyDict_GetItemWithError(d, key);
     if (unlikely(!value)) {
         if (!PyErr_Occurred())
@@ -1882,9 +1789,10 @@ static CYTHON_INLINE int __Pyx_div_int(int, int); /* proto */
 #define UNARY_NEG_WOULD_OVERFLOW(x)            (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
 
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Pop(PyObject* L) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02040000
+#if PY_VERSION_HEX >= 0x02040000
     if (likely(PyList_CheckExact(L))
-        && likely(PyList_GET_SIZE(L) > (((PyListObject*)L)->allocated >> 1))) {
+            /* Check that both the size is positive and no reallocation shrinking needs to be done. */
+            && likely(PyList_GET_SIZE(L) > (((PyListObject*)L)->allocated >> 1))) {
         Py_SIZE(L) -= 1;
         return PyList_GET_ITEM(L, PyList_GET_SIZE(L));
     }
@@ -1902,49 +1810,31 @@ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/
 
-static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name);
-
-#define __Pyx_CyFunction_USED 1
-#include <structmember.h>
-#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
-#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
-#define __Pyx_CYFUNCTION_CCLASS        0x04
-#define __Pyx_CyFunction_GetClosure(f) \
-    (((__pyx_CyFunctionObject *) (f))->func_closure)
-#define __Pyx_CyFunction_GetClassObj(f) \
-    (((__pyx_CyFunctionObject *) (f))->func_classobj)
-#define __Pyx_CyFunction_Defaults(type, f) \
-    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
-#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \
-    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
+#include <string.h>
+
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/
+
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/
+
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+#else
+#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+#endif
+
+#define __pyx_binding_PyCFunctionType_USED 1
+
 typedef struct {
     PyCFunctionObject func;
-    int flags;
-    PyObject *func_dict;
-    PyObject *func_weakreflist;
-    PyObject *func_name;
-    PyObject *func_doc;
-    PyObject *func_code;
-    PyObject *func_closure;
-    PyObject *func_classobj; /* No-args super() class cell */
-    void *defaults;
-    int defaults_pyobjects;
-    PyObject *defaults_tuple; /* Const defaults tuple */
-    PyObject *(*defaults_getter)(PyObject *);
-} __pyx_CyFunctionObject;
-static PyTypeObject *__pyx_CyFunctionType = 0;
-#define __Pyx_CyFunction_NewEx(ml, flags, self, module, code) \
-    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, self, module, code)
-static PyObject *__Pyx_CyFunction_New(PyTypeObject *,
-                                      PyMethodDef *ml, int flags,
-                                      PyObject *self, PyObject *module,
-                                      PyObject* code);
-static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
-                                                         size_t size,
-                                                         int pyobjects);
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
-                                                            PyObject *tuple);
-static int __Pyx_CyFunction_init(void);
+} __pyx_binding_PyCFunctionType_object;
+
+static PyTypeObject __pyx_binding_PyCFunctionType_type;
+static PyTypeObject *__pyx_binding_PyCFunctionType = NULL;
+
+static PyObject *__pyx_binding_PyCFunctionType_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module); /* proto */
+#define __pyx_binding_PyCFunctionType_New(ml, self) __pyx_binding_PyCFunctionType_NewEx(ml, self, NULL)
+
+static int __pyx_binding_PyCFunctionType_init(void); /* proto */
 
 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
 
@@ -1983,59 +1873,17 @@ static void __Pyx_WriteUnraisable(const char *name, int clineno,
 
 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
-#define __Pyx_Generator_USED
-#include <structmember.h>
-#include <frameobject.h>
-typedef PyObject *(*__pyx_generator_body_t)(PyObject *, PyObject *);
-typedef struct {
-    PyObject_HEAD
-    __pyx_generator_body_t body;
-    PyObject *closure;
-    PyObject *exc_type;
-    PyObject *exc_value;
-    PyObject *exc_traceback;
-    PyObject *gi_weakreflist;
-    PyObject *classobj;
-    PyObject *yieldfrom;
-    int resume_label;
-    char is_running;  // using T_BOOL for property below requires char value
-} __pyx_GeneratorObject;
-static __pyx_GeneratorObject *__Pyx_Generator_New(__pyx_generator_body_t body,
-                                                  PyObject *closure);
-static int __pyx_Generator_init(void);
-static int __Pyx_Generator_clear(PyObject* self);
-#if 1 || PY_VERSION_HEX < 0x030300B0
-static int __Pyx_PyGen_FetchStopIterationValue(PyObject **pvalue);
-#else
-#define __Pyx_PyGen_FetchStopIterationValue(pvalue) PyGen_FetchStopIterationValue(pvalue)
-#endif
-
 static int __Pyx_check_binary_version(void);
 
 static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /*proto*/
 
 static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
 
-typedef struct {
-    int code_line;
-    PyCodeObject* code_object;
-} __Pyx_CodeObjectCacheEntry;
-struct __Pyx_CodeObjectCache {
-    int count;
-    int max_count;
-    __Pyx_CodeObjectCacheEntry* entries;
-};
-static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
-static PyCodeObject *__pyx_find_code_object(int code_line);
-static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
-
-static void __Pyx_AddTraceback(const char *funcname, int c_line,
-                               int py_line, const char *filename); /*proto*/
+static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
+                               int __pyx_lineno, const char *__pyx_filename); /*proto*/
 
 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
 
-
 /* Module declarations from 'libc.stdio' */
 
 /* Module declarations from 'libc.stdlib' */
@@ -2070,6 +1918,7 @@ static PyTypeObject *__pyx_ptype_3_sa_PhraseLocation = 0;
 static PyTypeObject *__pyx_ptype_3_sa_Sampler = 0;
 static PyTypeObject *__pyx_ptype_3_sa_HieroCachingRuleFactory = 0;
 static PyTypeObject *__pyx_ptype_3_sa_Scorer = 0;
+static PyTypeObject *__pyx_ptype_3_sa___pyx_Generator = 0;
 static PyTypeObject *__pyx_ptype_3_sa___pyx_scope_struct____iter__ = 0;
 static PyTypeObject *__pyx_ptype_3_sa___pyx_scope_struct_1_read_bitext = 0;
 static PyTypeObject *__pyx_ptype_3_sa___pyx_scope_struct_2_genexpr = 0;
@@ -2094,6 +1943,7 @@ static int __pyx_v_3_sa_BAEZA_YATES;
 static int __pyx_v_3_sa_EPSILON;
 static struct __pyx_obj_3_sa_StringMap *__pyx_v_3_sa_FD = 0;
 static char *__pyx_f_3_sa_sym_tostring(int); /*proto*/
+static char *__pyx_f_3_sa_sym_tocat(int); /*proto*/
 static int __pyx_f_3_sa_sym_isvar(int); /*proto*/
 static int __pyx_f_3_sa_sym_getindex(int); /*proto*/
 static float __pyx_f_3_sa_monitor_cpu(void); /*proto*/
@@ -2118,6 +1968,7 @@ static PyObject *__pyx_f_3_sa_free_trie_node(struct __pyx_t_3_sa__Trie_Node *);
 static PyObject *__pyx_f_3_sa_free_trie_edge(struct __pyx_t_3_sa__Trie_Edge *); /*proto*/
 static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_sa__Trie_Node *, int); /*proto*/
 static PyObject *__pyx_f_3_sa_trie_node_data_append(struct __pyx_t_3_sa__Trie_Node *, int); /*proto*/
+static PyObject *__pyx_f_3_sa_trie_node_data_extend(struct __pyx_t_3_sa__Trie_Node *, int *, int); /*proto*/
 static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3_sa__Trie_Node *, int); /*proto*/
 static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *, PyObject *, PyObject *, int); /*proto*/
 static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *, PyObject *, PyObject *, int); /*proto*/
@@ -2142,192 +1993,6 @@ static PyObject *__pyx_builtin_StopIteration;
 static PyObject *__pyx_builtin_cmp;
 static PyObject *__pyx_builtin_sorted;
 static PyObject *__pyx_builtin_max;
-static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_filename); /* proto */
-static int __pyx_pf_3_sa_9FloatList___cinit__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, int __pyx_v_size, int __pyx_v_increment, int __pyx_v_initial_len); /* proto */
-static void __pyx_pf_3_sa_9FloatList_2__dealloc__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static int __pyx_pf_3_sa_9FloatList_6__setitem__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val); /* proto */
-static Py_ssize_t __pyx_pf_3_sa_9FloatList_8__len__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_9FloatList_10append(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, float __pyx_v_val); /* proto */
-static PyObject *__pyx_pf_3_sa_9FloatList_12write(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9FloatList_14read(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static int __pyx_pf_3_sa_7IntList___cinit__(struct __pyx_obj_3_sa_IntList *__pyx_v_self, int __pyx_v_size, int __pyx_v_increment, int __pyx_v_initial_len); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_4index(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_val); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_end); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_end); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_10sort(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_12reset(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static void __pyx_pf_3_sa_7IntList_14__dealloc__(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_16__iter__(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
-static int __pyx_pf_3_sa_7IntList_21__setitem__(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val); /* proto */
-static Py_ssize_t __pyx_pf_3_sa_7IntList_23__len__(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_25getSize(struct __pyx_obj_3_sa_IntList *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_27append(struct __pyx_obj_3_sa_IntList *__pyx_v_self, int __pyx_v_val); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_29extend(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_31write(struct __pyx_obj_3_sa_IntList *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_7IntList_33read(struct __pyx_obj_3_sa_IntList *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static int __pyx_pf_3_sa_9StringMap___cinit__(struct __pyx_obj_3_sa_StringMap *__pyx_v_self); /* proto */
-static void __pyx_pf_3_sa_9StringMap_2__dealloc__(struct __pyx_obj_3_sa_StringMap *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_from_text, PyObject *__pyx_v_side, int __pyx_v_use_sent_id); /* proto */
-static Py_ssize_t __pyx_pf_3_sa_9DataArray_2__len__(struct __pyx_obj_3_sa_DataArray *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_4getSentId(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_8getSentPos(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_loc); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_10get_id(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_word); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_12get_word(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_id); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_11read_bitext_genexpr(PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename, int __pyx_v_side); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_data); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_22read_binary(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_24write_binary(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_f); /* proto */
-static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_unlink(CYTHON_UNUSED struct __pyx_obj_3_sa_Alignment *__pyx_v_self, PyObject *__pyx_v_link); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, int __pyx_v_sent_id); /* proto */
-static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_from_text); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_8read_binary(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_12write_binary(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_from_text, PyObject *__pyx_v_from_data, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_earray, PyObject *__pyx_v_fsarray, PyObject *__pyx_v_alignment); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_2write_binary(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_4read_binary(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_6get_e_id(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_eword); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_8get_f_id(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_fword); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_fword, PyObject *__pyx_v_eword, PyObject *__pyx_v_col); /* proto */
-static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(struct __pyx_obj_3_sa_BitSetIterator *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_6BitSet___cinit__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static void __pyx_pf_3_sa_6BitSet_2__dealloc__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6BitSet_4__iter__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6BitSet_6insert(struct __pyx_obj_3_sa_BitSet *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_6BitSet_8findsucc(struct __pyx_obj_3_sa_BitSet *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6BitSet_12min(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6BitSet_14max(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static Py_ssize_t __pyx_pf_3_sa_6BitSet_16__len__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_6BitSet_18__contains__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(struct __pyx_obj_3_sa_VEBIterator *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_3VEB___cinit__(struct __pyx_obj_3_sa_VEB *__pyx_v_self, int __pyx_v_size); /* proto */
-static void __pyx_pf_3_sa_3VEB_2__dealloc__(struct __pyx_obj_3_sa_VEB *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_3VEB_4__iter__(struct __pyx_obj_3_sa_VEB *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_3VEB_6insert(struct __pyx_obj_3_sa_VEB *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_3VEB_8findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static Py_ssize_t __pyx_pf_3_sa_3VEB_10__len__(struct __pyx_obj_3_sa_VEB *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_3VEB_12__contains__(struct __pyx_obj_3_sa_VEB *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_sa); /* proto */
-static PyObject *__pyx_pf_3_sa_3LCP_2compute_stats(struct __pyx_obj_3_sa_LCP *__pyx_v_self, int __pyx_v_max_n); /* proto */
-static int __pyx_pf_3_sa_8Alphabet___cinit__(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self); /* proto */
-static void __pyx_pf_3_sa_8Alphabet_2__dealloc__(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_8Alphabet_9terminals___get__(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_8Alphabet_12nonterminals___get__(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_2sym_fromstring(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_string, int __pyx_v_terminal); /* proto */
-static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_words); /* proto */
-static void __pyx_pf_3_sa_6Phrase_2__dealloc__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_4__str__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_10arity(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_12getvarpos(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_14getvar(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_16clen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_k); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_ci); /* proto */
-#if PY_MAJOR_VERSION < 3
-static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#endif
-static Py_hash_t __pyx_pf_3_sa_6Phrase_22__hash__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static Py_ssize_t __pyx_pf_3_sa_6Phrase_24__len__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_26__getitem__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_28__iter__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_31subst(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_children); /* proto */
-static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_self, int __pyx_v_lhs, struct __pyx_obj_3_sa_Phrase *__pyx_v_f, struct __pyx_obj_3_sa_Phrase *__pyx_v_e, PyObject *__pyx_v_scores, PyObject *__pyx_v_word_alignments); /* proto */
-static Py_hash_t __pyx_pf_3_sa_4Rule_2__hash__(struct __pyx_obj_3_sa_Rule *__pyx_v_self); /* proto */
-#if PY_MAJOR_VERSION < 3
-static int __pyx_pf_3_sa_4Rule_4__cmp__(struct __pyx_obj_3_sa_Rule *__pyx_v_self, struct __pyx_obj_3_sa_Rule *__pyx_v_other); /* proto */
-#endif
-static PyObject *__pyx_pf_3_sa_4Rule_6fmerge(struct __pyx_obj_3_sa_Rule *__pyx_v_self, struct __pyx_obj_3_sa_Phrase *__pyx_v_f); /* proto */
-static PyObject *__pyx_pf_3_sa_4Rule_8arity(struct __pyx_obj_3_sa_Rule *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_4Rule_7__str___genexpr(PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_4Rule_12alignments(struct __pyx_obj_3_sa_Rule *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_4Rule_1f___get__(struct __pyx_obj_3_sa_Rule *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_4Rule_1e___get__(struct __pyx_obj_3_sa_Rule *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_7TrieMap___cinit__(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, int __pyx_v_alphabet_size); /* proto */
-static void __pyx_pf_3_sa_7TrieMap_2__dealloc__(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, PyObject *__pyx_v_pattern); /* proto */
-static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, PyObject *__pyx_v_pattern); /* proto */
-static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, PyObject *__pyx_v_fsarray, PyObject *__pyx_v_from_stats, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_precompute_rank, PyObject *__pyx_v_precompute_secondary_rank, PyObject *__pyx_v_max_length, PyObject *__pyx_v_max_nonterminals, PyObject *__pyx_v_train_max_initial_size, PyObject *__pyx_v_train_min_gap_size); /* proto */
-static PyObject *__pyx_pf_3_sa_14Precomputation_2read_binary(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_14Precomputation_4write_binary(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, PyObject *__pyx_v_stats, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_sarray); /* proto */
-static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_from_text, PyObject *__pyx_v_side); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_2__getitem__(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentId(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_6getSent(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_8getSentPos(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_loc); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_side); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, int __pyx_v_i, int __pyx_v_j, int __pyx_v_h, struct __pyx_obj_3_sa_IntList *__pyx_v_isa, PyObject *__pyx_v_pad); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_14write_text(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_16read_binary(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_18write_binary(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename); /* proto */
-static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_word, int __pyx_v_offset, int __pyx_v_low, int __pyx_v_high); /* proto */
-static int __pyx_pf_3_sa_8TrieNode___cinit__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_8TrieNode_8children___get__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_8TrieNode_8children_2__set__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_3_sa_8TrieNode_8children_4__del__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_phrase, PyObject *__pyx_v_phrase_location, PyObject *__pyx_v_suffix_link); /* proto */
-static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_2__set__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_4__del__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_2__set__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_4__del__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_2__set__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_4__del__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_extended); /* proto */
-static PyObject *__pyx_pf_3_sa_9TrieTable_8extended___get__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_9TrieTable_8extended_2__set__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_3_sa_9TrieTable_5count___get__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_9TrieTable_5count_2__set__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_3_sa_9TrieTable_4root___get__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_9TrieTable_4root_2__set__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_3_sa_9TrieTable_4root_4__del__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_14PhraseLocation___cinit__(struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_self, int __pyx_v_sa_low, int __pyx_v_sa_high, int __pyx_v_arr_low, int __pyx_v_arr_high, PyObject *__pyx_v_arr, int __pyx_v_num_subpatterns); /* proto */
-static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx_v_self, int __pyx_v_sample_size, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_fsarray); /* proto */
-static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *__pyx_v_self, struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_phrase_location); /* proto */
-static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_Alignment *__pyx_v_alignment, float __pyx_v_by_slack_factor, char *__pyx_v_category, PyObject *__pyx_v_max_chunks, unsigned int __pyx_v_max_initial_size, unsigned int __pyx_v_max_length, unsigned int __pyx_v_max_nonterminals, PyObject *__pyx_v_max_target_chunks, PyObject *__pyx_v_max_target_length, unsigned int __pyx_v_min_gap_size, PyObject *__pyx_v_precompute_file, unsigned int __pyx_v_precompute_secondary_rank, unsigned int __pyx_v_precompute_rank, int __pyx_v_require_aligned_terminal, int __pyx_v_require_aligned_chunks, unsigned int __pyx_v_train_max_initial_size, unsigned int __pyx_v_train_min_gap_size, int __pyx_v_tight_phrases, int __pyx_v_use_baeza_yates, int __pyx_v_use_collocations, int __pyx_v_use_index); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_fsarray, struct __pyx_obj_3_sa_DataArray *__pyx_v_edarray, struct __pyx_obj_3_sa_Sampler *__pyx_v_sampler, struct __pyx_obj_3_sa_Scorer *__pyx_v_scorer); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_pattern); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_pattern); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_precomputed_collocation(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_phrase); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_frontier, PyObject *__pyx_v_res, PyObject *__pyx_v_fwords); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_away(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_skip, PyObject *__pyx_v_i, PyObject *__pyx_v_spanlen, PyObject *__pyx_v_pathlen, PyObject *__pyx_v_fwords, PyObject *__pyx_v_next_states, PyObject *__pyx_v_reachable_buffer); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_fwords, PyObject *__pyx_v_ifrom, PyObject *__pyx_v_dist); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_fwords, PyObject *__pyx_v_ifrom, PyObject *__pyx_v_ito); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v__columns, PyObject *__pyx_v_curr_idx, PyObject *__pyx_v_min_dist); /* proto */
-static PyObject *__pyx_lambda_funcdef_lambda2(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_22input(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_fwords); /* proto */
-static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_13FeatureVector_2set(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self, unsigned int __pyx_v_name, float __pyx_v_value); /* proto */
-static PyObject *__pyx_pf_3_sa_13FeatureVector_4__iter__(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str___genexpr(PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str__(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self); /* proto */
-static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_self, PyObject *__pyx_v_models); /* proto */
 static char __pyx_k_1[] = ".gz";
 static char __pyx_k_2[] = "Requested index %d of %d-length FloatList";
 static char __pyx_k_3[] = "IntList[";
@@ -2421,10 +2086,8 @@ static char __pyx_k_131[] = "Subphrase [%d, %d] failed integrity check";
 static char __pyx_k_132[] = "Didn't extract anything from [%d, %d] -> [%d, %d]";
 static char __pyx_k_133[] = "Unable to extract basic phrase";
 static char __pyx_k_134[] = "%s=%s";
-static char __pyx_k_137[] = "/Users/vchahun/Sandbox/cdec/python/src/sa/_sa.pyx";
-static char __pyx_k_138[] = "cdec.sa";
-static char __pyx_k_142[] = "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi";
-static char __pyx_k_143[] = "*EPS*";
+static char __pyx_k_135[] = "cdec.sa";
+static char __pyx_k_137[] = "*EPS*";
 static char __pyx_k__gc[] = "gc";
 static char __pyx_k__sa[] = "sa";
 static char __pyx_k___sa[] = "_sa";
@@ -2640,11 +2303,9 @@ static PyObject *__pyx_kp_s_131;
 static PyObject *__pyx_kp_s_132;
 static PyObject *__pyx_kp_s_133;
 static PyObject *__pyx_kp_s_134;
+static PyObject *__pyx_kp_s_135;
 static PyObject *__pyx_kp_s_137;
-static PyObject *__pyx_kp_s_138;
 static PyObject *__pyx_kp_s_14;
-static PyObject *__pyx_kp_s_142;
-static PyObject *__pyx_kp_s_143;
 static PyObject *__pyx_kp_s_18;
 static PyObject *__pyx_kp_s_2;
 static PyObject *__pyx_kp_s_21;
@@ -2943,11 +2604,7 @@ static PyObject *__pyx_k_tuple_98;
 static PyObject *__pyx_k_tuple_102;
 static PyObject *__pyx_k_tuple_107;
 static PyObject *__pyx_k_tuple_122;
-static PyObject *__pyx_k_tuple_135;
-static PyObject *__pyx_k_tuple_139;
-static PyObject *__pyx_k_tuple_140;
-static PyObject *__pyx_k_codeobj_136;
-static PyObject *__pyx_k_codeobj_141;
+static PyObject *__pyx_k_tuple_136;
 
 /* "_sa.pyx":5
  * import gzip
@@ -2968,7 +2625,7 @@ static float __pyx_f_3_sa_monitor_cpu(void) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("monitor_cpu", 0);
+  __Pyx_RefNannySetupContext("monitor_cpu");
 
   /* "_sa.pyx":6
  * 
@@ -2988,7 +2645,7 @@ static float __pyx_f_3_sa_monitor_cpu(void) {
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
@@ -3018,7 +2675,7 @@ static float __pyx_f_3_sa_monitor_cpu(void) {
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
@@ -3033,7 +2690,7 @@ static float __pyx_f_3_sa_monitor_cpu(void) {
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_4); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
@@ -3052,28 +2709,6 @@ static float __pyx_f_3_sa_monitor_cpu(void) {
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_1gzip_or_text(PyObject *__pyx_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyMethodDef __pyx_mdef_3_sa_1gzip_or_text = {__Pyx_NAMESTR("gzip_or_text"), (PyCFunction)__pyx_pw_3_sa_1gzip_or_text, METH_O, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_3_sa_1gzip_or_text(PyObject *__pyx_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("gzip_or_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.gzip_or_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_gzip_or_text(__pyx_self, ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
 /* "_sa.pyx":9
  *             resource.getrusage(resource.RUSAGE_SELF).ru_stime)
  * 
@@ -3082,7 +2717,10 @@ static PyObject *__pyx_pw_3_sa_1gzip_or_text(PyObject *__pyx_self, PyObject *__p
  *         return gzip.GzipFile(filename)
  */
 
-static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_gzip_or_text(PyObject *__pyx_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyMethodDef __pyx_mdef_3_sa_gzip_or_text = {__Pyx_NAMESTR("gzip_or_text"), (PyCFunction)__pyx_pf_3_sa_gzip_or_text, METH_O, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pf_3_sa_gzip_or_text(PyObject *__pyx_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3092,7 +2730,17 @@ static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("gzip_or_text", 0);
+  __Pyx_RefNannySetupContext("gzip_or_text");
+  __pyx_self = __pyx_self;
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.gzip_or_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
   /* "_sa.pyx":10
  * 
@@ -3123,7 +2771,7 @@ static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __pyx_t_1 = 0;
@@ -3134,7 +2782,7 @@ static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
   /*else*/ {
 
@@ -3149,7 +2797,7 @@ static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __pyx_t_1 = 0;
@@ -3160,7 +2808,7 @@ static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -3176,22 +2824,32 @@ static PyObject *__pyx_pf_3_sa_gzip_or_text(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9FloatList_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_9FloatList_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":11
+ * cdef class FloatList:
+ * 
+ *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):             # <<<<<<<<<<<<<<
+ *         if initial_len > size:
+ *             size = initial_len
+ */
+
+static int __pyx_pf_3_sa_9FloatList___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_9FloatList___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_size;
   int __pyx_v_increment;
   int __pyx_v_initial_len;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,&__pyx_n_s__increment,&__pyx_n_s__initial_len,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,&__pyx_n_s__increment,&__pyx_n_s__initial_len,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -3199,7 +2857,7 @@ static int __pyx_pw_3_sa_9FloatList_1__cinit__(PyObject *__pyx_v_self, PyObject
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
@@ -3217,7 +2875,7 @@ static int __pyx_pw_3_sa_9FloatList_1__cinit__(PyObject *__pyx_v_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3252,26 +2910,8 @@ static int __pyx_pw_3_sa_9FloatList_1__cinit__(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9FloatList___cinit__(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), __pyx_v_size, __pyx_v_increment, __pyx_v_initial_len);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":11
- * cdef class FloatList:
- * 
- *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):             # <<<<<<<<<<<<<<
- *         if initial_len > size:
- *             size = initial_len
- */
-
-static int __pyx_pf_3_sa_9FloatList___cinit__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, int __pyx_v_size, int __pyx_v_increment, int __pyx_v_initial_len) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":12
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":12
  * 
  *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):
  *         if initial_len > size:             # <<<<<<<<<<<<<<
@@ -3281,7 +2921,7 @@ static int __pyx_pf_3_sa_9FloatList___cinit__(struct __pyx_obj_3_sa_FloatList *_
   __pyx_t_1 = (__pyx_v_initial_len > __pyx_v_size);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":13
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":13
  *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):
  *         if initial_len > size:
  *             size = initial_len             # <<<<<<<<<<<<<<
@@ -3289,70 +2929,61 @@ static int __pyx_pf_3_sa_9FloatList___cinit__(struct __pyx_obj_3_sa_FloatList *_
  *         self.increment = increment
  */
     __pyx_v_size = __pyx_v_initial_len;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":14
  *         if initial_len > size:
  *             size = initial_len
  *         self.size = size             # <<<<<<<<<<<<<<
  *         self.increment = increment
  *         self.len = initial_len
  */
-  __pyx_v_self->size = __pyx_v_size;
+  ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->size = __pyx_v_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":15
  *             size = initial_len
  *         self.size = size
  *         self.increment = increment             # <<<<<<<<<<<<<<
  *         self.len = initial_len
  *         self.arr = <float*> malloc(size*sizeof(float))
  */
-  __pyx_v_self->increment = __pyx_v_increment;
+  ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->increment = __pyx_v_increment;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":16
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":16
  *         self.size = size
  *         self.increment = increment
  *         self.len = initial_len             # <<<<<<<<<<<<<<
  *         self.arr = <float*> malloc(size*sizeof(float))
  *         memset(self.arr, 0, initial_len*sizeof(float))
  */
-  __pyx_v_self->len = __pyx_v_initial_len;
+  ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len = __pyx_v_initial_len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":17
  *         self.increment = increment
  *         self.len = initial_len
  *         self.arr = <float*> malloc(size*sizeof(float))             # <<<<<<<<<<<<<<
  *         memset(self.arr, 0, initial_len*sizeof(float))
  * 
  */
-  __pyx_v_self->arr = ((float *)malloc((__pyx_v_size * (sizeof(float)))));
+  ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr = ((float *)malloc((__pyx_v_size * (sizeof(float)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":18
  *         self.len = initial_len
  *         self.arr = <float*> malloc(size*sizeof(float))
  *         memset(self.arr, 0, initial_len*sizeof(float))             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  memset(__pyx_v_self->arr, 0, (__pyx_v_initial_len * (sizeof(float))));
+  memset(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr, 0, (__pyx_v_initial_len * (sizeof(float))));
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_9FloatList_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_9FloatList_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_9FloatList_2__dealloc__(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":20
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":20
  *         memset(self.arr, 0, initial_len*sizeof(float))
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -3360,34 +2991,24 @@ static void __pyx_pw_3_sa_9FloatList_3__dealloc__(PyObject *__pyx_v_self) {
  * 
  */
 
-static void __pyx_pf_3_sa_9FloatList_2__dealloc__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self) {
+static void __pyx_pf_3_sa_9FloatList_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_9FloatList_1__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":21
  * 
  *     def __dealloc__(self):
  *         free(self.arr)             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, i):
  */
-  free(__pyx_v_self->arr);
+  free(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr);
 
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9FloatList_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_9FloatList_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9FloatList_4__getitem__(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":23
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":23
  *         free(self.arr)
  * 
  *     def __getitem__(self, i):             # <<<<<<<<<<<<<<
@@ -3395,7 +3016,8 @@ static PyObject *__pyx_pw_3_sa_9FloatList_5__getitem__(PyObject *__pyx_v_self, P
  *         if i<0:
  */
 
-static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_9FloatList_2__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_9FloatList_2__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_v_j = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3408,9 +3030,9 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__getitem__", 0);
+  __Pyx_RefNannySetupContext("__getitem__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":24
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":24
  * 
  *     def __getitem__(self, i):
  *         j = i             # <<<<<<<<<<<<<<
@@ -3420,26 +3042,27 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
   __Pyx_INCREF(__pyx_v_i);
   __pyx_v_j = __pyx_v_i;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":25
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":25
  *     def __getitem__(self, i):
  *         j = i
  *         if i<0:             # <<<<<<<<<<<<<<
  *             j = self.len + i
  *         if j<0 or j>=self.len:
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":26
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":26
  *         j = i
  *         if i<0:
  *             j = self.len + i             # <<<<<<<<<<<<<<
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length FloatList" % (i, self.len))
  */
-    __pyx_t_1 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
@@ -3447,24 +3070,26 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
     __Pyx_DECREF(__pyx_v_j);
     __pyx_v_j = __pyx_t_3;
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":27
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":27
  *         if i<0:
  *             j = self.len + i
  *         if j<0 or j>=self.len:             # <<<<<<<<<<<<<<
  *             raise IndexError("Requested index %d of %d-length FloatList" % (i, self.len))
  *         return self.arr[j]
  */
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_j, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_RichCompare(__pyx_v_j, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (!__pyx_t_2) {
-    __pyx_t_3 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyInt_FromLong(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyObject_RichCompare(__pyx_v_j, __pyx_t_3, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_j, __pyx_t_3, Py_GE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -3474,17 +3099,17 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
   }
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":28
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":28
  *             j = self.len + i
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length FloatList" % (i, self.len))             # <<<<<<<<<<<<<<
  *         return self.arr[j]
  * 
  */
-    __pyx_t_1 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_i);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_i);
     __Pyx_GIVEREF(__pyx_v_i);
@@ -3495,7 +3120,7 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __pyx_t_1 = 0;
@@ -3505,11 +3130,11 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    goto __pyx_L6;
   }
-  __pyx_L4:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":29
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":29
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length FloatList" % (i, self.len))
  *         return self.arr[j]             # <<<<<<<<<<<<<<
@@ -3518,7 +3143,7 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_j); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->arr[__pyx_t_6])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyFloat_FromDouble((((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr[__pyx_t_6])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3538,7 +3163,7 @@ static PyObject *__pyx_pf_3_sa_9FloatList_4__getitem__(struct __pyx_obj_3_sa_Flo
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":31
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":31
  *         return self.arr[j]
  * 
  *     cdef void set(self, int i, float v):             # <<<<<<<<<<<<<<
@@ -3558,9 +3183,9 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("set", 0);
+  __Pyx_RefNannySetupContext("set");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":32
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":32
  * 
  *     cdef void set(self, int i, float v):
  *         j = i             # <<<<<<<<<<<<<<
@@ -3569,7 +3194,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
  */
   __pyx_v_j = __pyx_v_i;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":33
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":33
  *     cdef void set(self, int i, float v):
  *         j = i
  *         if i<0:             # <<<<<<<<<<<<<<
@@ -3579,7 +3204,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
   __pyx_t_1 = (__pyx_v_i < 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":34
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":34
  *         j = i
  *         if i<0:
  *             j = self.len + i             # <<<<<<<<<<<<<<
@@ -3591,7 +3216,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":35
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":35
  *         if i<0:
  *             j = self.len + i
  *         if j<0 or j>=self.len:             # <<<<<<<<<<<<<<
@@ -3607,7 +3232,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":36
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":36
  *             j = self.len + i
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length FloatList" % (i, self.len))             # <<<<<<<<<<<<<<
@@ -3619,7 +3244,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
     __pyx_t_5 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
@@ -3630,7 +3255,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
     __pyx_t_5 = 0;
@@ -3644,7 +3269,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":37
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":37
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length FloatList" % (i, self.len))
  *         self.arr[j] = v             # <<<<<<<<<<<<<<
@@ -3663,18 +3288,7 @@ static void __pyx_f_3_sa_9FloatList_set(struct __pyx_obj_3_sa_FloatList *__pyx_v
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9FloatList_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val); /*proto*/
-static int __pyx_pw_3_sa_9FloatList_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9FloatList_6__setitem__(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), ((PyObject *)__pyx_v_i), ((PyObject *)__pyx_v_val));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":39
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":39
  *         self.arr[j] = v
  * 
  *     def __setitem__(self, i, val):             # <<<<<<<<<<<<<<
@@ -3682,7 +3296,8 @@ static int __pyx_pw_3_sa_9FloatList_7__setitem__(PyObject *__pyx_v_self, PyObjec
  * 
  */
 
-static int __pyx_pf_3_sa_9FloatList_6__setitem__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val) {
+static int __pyx_pf_3_sa_9FloatList_3__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val); /*proto*/
+static int __pyx_pf_3_sa_9FloatList_3__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -3690,9 +3305,9 @@ static int __pyx_pf_3_sa_9FloatList_6__setitem__(struct __pyx_obj_3_sa_FloatList
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__setitem__", 0);
+  __Pyx_RefNannySetupContext("__setitem__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":40
  * 
  *     def __setitem__(self, i, val):
  *         self.set(i, val)             # <<<<<<<<<<<<<<
@@ -3700,8 +3315,8 @@ static int __pyx_pf_3_sa_9FloatList_6__setitem__(struct __pyx_obj_3_sa_FloatList
  *     def __len__(self):
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_v_val); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->__pyx_vtab)->set(__pyx_v_self, __pyx_t_1, __pyx_t_2);
+  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_val); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->__pyx_vtab)->set(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), __pyx_t_1, __pyx_t_2);
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -3713,18 +3328,7 @@ static int __pyx_pf_3_sa_9FloatList_6__setitem__(struct __pyx_obj_3_sa_FloatList
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_ssize_t __pyx_pw_3_sa_9FloatList_9__len__(PyObject *__pyx_v_self); /*proto*/
-static Py_ssize_t __pyx_pw_3_sa_9FloatList_9__len__(PyObject *__pyx_v_self) {
-  Py_ssize_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9FloatList_8__len__(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":42
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":42
  *         self.set(i, val)
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -3732,19 +3336,20 @@ static Py_ssize_t __pyx_pw_3_sa_9FloatList_9__len__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_ssize_t __pyx_pf_3_sa_9FloatList_8__len__(struct __pyx_obj_3_sa_FloatList *__pyx_v_self) {
+static Py_ssize_t __pyx_pf_3_sa_9FloatList_4__len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_pf_3_sa_9FloatList_4__len__(PyObject *__pyx_v_self) {
   Py_ssize_t __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__", 0);
+  __Pyx_RefNannySetupContext("__len__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":43
  * 
  *     def __len__(self):
  *         return self.len             # <<<<<<<<<<<<<<
  * 
  *     def append(self, float val):
  */
-  __pyx_r = __pyx_v_self->len;
+  __pyx_r = ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len;
   goto __pyx_L0;
 
   __pyx_r = 0;
@@ -3753,28 +3358,7 @@ static Py_ssize_t __pyx_pf_3_sa_9FloatList_8__len__(struct __pyx_obj_3_sa_FloatL
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9FloatList_11append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val); /*proto*/
-static PyObject *__pyx_pw_3_sa_9FloatList_11append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val) {
-  float __pyx_v_val;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("append (wrapper)", 0);
-  assert(__pyx_arg_val); {
-    __pyx_v_val = __pyx_PyFloat_AsFloat(__pyx_arg_val); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.FloatList.append", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9FloatList_10append(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), ((float)__pyx_v_val));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":45
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":45
  *         return self.len
  * 
  *     def append(self, float val):             # <<<<<<<<<<<<<<
@@ -3782,60 +3366,74 @@ static PyObject *__pyx_pw_3_sa_9FloatList_11append(PyObject *__pyx_v_self, PyObj
  *             self.size = self.size + self.increment
  */
 
-static PyObject *__pyx_pf_3_sa_9FloatList_10append(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, float __pyx_v_val) {
+static PyObject *__pyx_pf_3_sa_9FloatList_5append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val); /*proto*/
+static PyObject *__pyx_pf_3_sa_9FloatList_5append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val) {
+  float __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("append", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("append");
+  assert(__pyx_arg_val); {
+    __pyx_v_val = __pyx_PyFloat_AsDouble(__pyx_arg_val); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.FloatList.append", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":46
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":46
  * 
  *     def append(self, float val):
  *         if self.len == self.size:             # <<<<<<<<<<<<<<
  *             self.size = self.size + self.increment
  *             self.arr = <float*> realloc(self.arr, self.size*sizeof(float))
  */
-  __pyx_t_1 = (__pyx_v_self->len == __pyx_v_self->size);
+  __pyx_t_1 = (((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len == ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->size);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":47
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":47
  *     def append(self, float val):
  *         if self.len == self.size:
  *             self.size = self.size + self.increment             # <<<<<<<<<<<<<<
  *             self.arr = <float*> realloc(self.arr, self.size*sizeof(float))
  *         self.arr[self.len] = val
  */
-    __pyx_v_self->size = (__pyx_v_self->size + __pyx_v_self->increment);
+    ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->size = (((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->size + ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->increment);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":48
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":48
  *         if self.len == self.size:
  *             self.size = self.size + self.increment
  *             self.arr = <float*> realloc(self.arr, self.size*sizeof(float))             # <<<<<<<<<<<<<<
  *         self.arr[self.len] = val
  *         self.len = self.len + 1
  */
-    __pyx_v_self->arr = ((float *)realloc(__pyx_v_self->arr, (__pyx_v_self->size * (sizeof(float)))));
-    goto __pyx_L3;
+    ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr = ((float *)realloc(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr, (((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->size * (sizeof(float)))));
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":49
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":49
  *             self.size = self.size + self.increment
  *             self.arr = <float*> realloc(self.arr, self.size*sizeof(float))
  *         self.arr[self.len] = val             # <<<<<<<<<<<<<<
  *         self.len = self.len + 1
  * 
  */
-  (__pyx_v_self->arr[__pyx_v_self->len]) = __pyx_v_val;
+  (((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->arr[((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len]) = __pyx_v_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":50
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":50
  *             self.arr = <float*> realloc(self.arr, self.size*sizeof(float))
  *         self.arr[self.len] = val
  *         self.len = self.len + 1             # <<<<<<<<<<<<<<
  * 
  *     cdef void write_handle(self, FILE* f):
  */
-  __pyx_v_self->len = (__pyx_v_self->len + 1);
+  ((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len = (((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->len + 1);
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   __Pyx_XGIVEREF(__pyx_r);
@@ -3843,7 +3441,7 @@ static PyObject *__pyx_pf_3_sa_9FloatList_10append(struct __pyx_obj_3_sa_FloatLi
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":52
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":52
  *         self.len = self.len + 1
  * 
  *     cdef void write_handle(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -3853,9 +3451,9 @@ static PyObject *__pyx_pf_3_sa_9FloatList_10append(struct __pyx_obj_3_sa_FloatLi
 
 static void __pyx_f_3_sa_9FloatList_write_handle(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, FILE *__pyx_v_f) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_handle", 0);
+  __Pyx_RefNannySetupContext("write_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":53
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":53
  * 
  *     cdef void write_handle(self, FILE* f):
  *         fwrite(&(self.len), sizeof(float), 1, f)             # <<<<<<<<<<<<<<
@@ -3864,7 +3462,7 @@ static void __pyx_f_3_sa_9FloatList_write_handle(struct __pyx_obj_3_sa_FloatList
  */
   fwrite((&__pyx_v_self->len), (sizeof(float)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":54
  *     cdef void write_handle(self, FILE* f):
  *         fwrite(&(self.len), sizeof(float), 1, f)
  *         fwrite(self.arr, sizeof(float), self.len, f)             # <<<<<<<<<<<<<<
@@ -3876,13 +3474,24 @@ static void __pyx_f_3_sa_9FloatList_write_handle(struct __pyx_obj_3_sa_FloatList
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9FloatList_13write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9FloatList_13write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":56
+ *         fwrite(self.arr, sizeof(float), self.len, f)
+ * 
+ *     def write(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "w")
+ */
+
+static PyObject *__pyx_pf_3_sa_9FloatList_6write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9FloatList_6write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -3892,26 +3501,8 @@ static PyObject *__pyx_pw_3_sa_9FloatList_13write(PyObject *__pyx_v_self, PyObje
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9FloatList_12write(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":56
- *         fwrite(self.arr, sizeof(float), self.len, f)
- * 
- *     def write(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "w")
- */
-
-static PyObject *__pyx_pf_3_sa_9FloatList_12write(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":58
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":58
  *     def write(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -3920,16 +3511,16 @@ static PyObject *__pyx_pf_3_sa_9FloatList_12write(struct __pyx_obj_3_sa_FloatLis
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":59
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":59
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         self.write_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->__pyx_vtab)->write_handle(__pyx_v_self, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":60
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":60
  *         f = fopen(filename, "w")
  *         self.write_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -3944,7 +3535,7 @@ static PyObject *__pyx_pf_3_sa_9FloatList_12write(struct __pyx_obj_3_sa_FloatLis
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":62
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":62
  *         fclose(f)
  * 
  *     cdef void read_handle(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -3954,9 +3545,9 @@ static PyObject *__pyx_pf_3_sa_9FloatList_12write(struct __pyx_obj_3_sa_FloatLis
 
 static void __pyx_f_3_sa_9FloatList_read_handle(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, FILE *__pyx_v_f) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_handle", 0);
+  __Pyx_RefNannySetupContext("read_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":63
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":63
  * 
  *     cdef void read_handle(self, FILE* f):
  *         free(self.arr)             # <<<<<<<<<<<<<<
@@ -3965,7 +3556,7 @@ static void __pyx_f_3_sa_9FloatList_read_handle(struct __pyx_obj_3_sa_FloatList
  */
   free(__pyx_v_self->arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":64
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":64
  *     cdef void read_handle(self, FILE* f):
  *         free(self.arr)
  *         fread(&(self.len), sizeof(float), 1, f)             # <<<<<<<<<<<<<<
@@ -3974,7 +3565,7 @@ static void __pyx_f_3_sa_9FloatList_read_handle(struct __pyx_obj_3_sa_FloatList
  */
   fread((&__pyx_v_self->len), (sizeof(float)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":65
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":65
  *         free(self.arr)
  *         fread(&(self.len), sizeof(float), 1, f)
  *         self.arr = <float*> malloc(self.len * sizeof(float))             # <<<<<<<<<<<<<<
@@ -3983,7 +3574,7 @@ static void __pyx_f_3_sa_9FloatList_read_handle(struct __pyx_obj_3_sa_FloatList
  */
   __pyx_v_self->arr = ((float *)malloc((__pyx_v_self->len * (sizeof(float)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":66
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":66
  *         fread(&(self.len), sizeof(float), 1, f)
  *         self.arr = <float*> malloc(self.len * sizeof(float))
  *         self.size = self.len             # <<<<<<<<<<<<<<
@@ -3992,7 +3583,7 @@ static void __pyx_f_3_sa_9FloatList_read_handle(struct __pyx_obj_3_sa_FloatList
  */
   __pyx_v_self->size = __pyx_v_self->len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":67
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":67
  *         self.arr = <float*> malloc(self.len * sizeof(float))
  *         self.size = self.len
  *         fread(self.arr, sizeof(float), self.len, f)             # <<<<<<<<<<<<<<
@@ -4004,13 +3595,24 @@ static void __pyx_f_3_sa_9FloatList_read_handle(struct __pyx_obj_3_sa_FloatList
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9FloatList_15read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9FloatList_15read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":69
+ *         fread(self.arr, sizeof(float), self.len, f)
+ * 
+ *     def read(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "r")
+ */
+
+static PyObject *__pyx_pf_3_sa_9FloatList_7read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9FloatList_7read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -4020,26 +3622,8 @@ static PyObject *__pyx_pw_3_sa_9FloatList_15read(PyObject *__pyx_v_self, PyObjec
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9FloatList_14read(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":69
- *         fread(self.arr, sizeof(float), self.len, f)
- * 
- *     def read(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "r")
- */
-
-static PyObject *__pyx_pf_3_sa_9FloatList_14read(struct __pyx_obj_3_sa_FloatList *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":71
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":71
  *     def read(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -4048,15 +3632,15 @@ static PyObject *__pyx_pf_3_sa_9FloatList_14read(struct __pyx_obj_3_sa_FloatList
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":72
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":72
  *         cdef FILE* f
  *         f = fopen(filename, "r")
  *         self.read_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->__pyx_vtab)->read_handle(__pyx_v_self, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self)->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_FloatList *)__pyx_v_self), __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/float_list.pxi":73
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/float_list.pxi":73
  *         f = fopen(filename, "r")
  *         self.read_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -4069,22 +3653,32 @@ static PyObject *__pyx_pf_3_sa_9FloatList_14read(struct __pyx_obj_3_sa_FloatList
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_7IntList_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_7IntList_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":11
+ * cdef class IntList:
+ * 
+ *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):             # <<<<<<<<<<<<<<
+ *         if initial_len > size:
+ *             size = initial_len
+ */
+
+static int __pyx_pf_3_sa_7IntList___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_7IntList___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_size;
   int __pyx_v_increment;
   int __pyx_v_initial_len;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,&__pyx_n_s__increment,&__pyx_n_s__initial_len,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,&__pyx_n_s__increment,&__pyx_n_s__initial_len,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -4092,7 +3686,7 @@ static int __pyx_pw_3_sa_7IntList_1__cinit__(PyObject *__pyx_v_self, PyObject *_
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
@@ -4110,7 +3704,7 @@ static int __pyx_pw_3_sa_7IntList_1__cinit__(PyObject *__pyx_v_self, PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4145,26 +3739,8 @@ static int __pyx_pw_3_sa_7IntList_1__cinit__(PyObject *__pyx_v_self, PyObject *_
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7IntList___cinit__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_v_size, __pyx_v_increment, __pyx_v_initial_len);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":11
- * cdef class IntList:
- * 
- *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):             # <<<<<<<<<<<<<<
- *         if initial_len > size:
- *             size = initial_len
- */
-
-static int __pyx_pf_3_sa_7IntList___cinit__(struct __pyx_obj_3_sa_IntList *__pyx_v_self, int __pyx_v_size, int __pyx_v_increment, int __pyx_v_initial_len) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":12
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":12
  * 
  *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):
  *         if initial_len > size:             # <<<<<<<<<<<<<<
@@ -4174,7 +3750,7 @@ static int __pyx_pf_3_sa_7IntList___cinit__(struct __pyx_obj_3_sa_IntList *__pyx
   __pyx_t_1 = (__pyx_v_initial_len > __pyx_v_size);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":13
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":13
  *     def __cinit__(self, int size=0, int increment=1, int initial_len=0):
  *         if initial_len > size:
  *             size = initial_len             # <<<<<<<<<<<<<<
@@ -4182,72 +3758,61 @@ static int __pyx_pf_3_sa_7IntList___cinit__(struct __pyx_obj_3_sa_IntList *__pyx
  *         self.increment = increment
  */
     __pyx_v_size = __pyx_v_initial_len;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":14
  *         if initial_len > size:
  *             size = initial_len
  *         self.size = size             # <<<<<<<<<<<<<<
  *         self.increment = increment
  *         self.len = initial_len
  */
-  __pyx_v_self->size = __pyx_v_size;
+  ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->size = __pyx_v_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":15
  *             size = initial_len
  *         self.size = size
  *         self.increment = increment             # <<<<<<<<<<<<<<
  *         self.len = initial_len
  *         self.arr = <int*> malloc(size*sizeof(int))
  */
-  __pyx_v_self->increment = __pyx_v_increment;
+  ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->increment = __pyx_v_increment;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":16
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":16
  *         self.size = size
  *         self.increment = increment
  *         self.len = initial_len             # <<<<<<<<<<<<<<
  *         self.arr = <int*> malloc(size*sizeof(int))
  *         memset(self.arr, 0, initial_len*sizeof(int))
  */
-  __pyx_v_self->len = __pyx_v_initial_len;
+  ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len = __pyx_v_initial_len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":17
  *         self.increment = increment
  *         self.len = initial_len
  *         self.arr = <int*> malloc(size*sizeof(int))             # <<<<<<<<<<<<<<
  *         memset(self.arr, 0, initial_len*sizeof(int))
  * 
  */
-  __pyx_v_self->arr = ((int *)malloc((__pyx_v_size * (sizeof(int)))));
+  ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr = ((int *)malloc((__pyx_v_size * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":18
  *         self.len = initial_len
  *         self.arr = <int*> malloc(size*sizeof(int))
  *         memset(self.arr, 0, initial_len*sizeof(int))             # <<<<<<<<<<<<<<
  * 
  *     def __str__(self):
  */
-  memset(__pyx_v_self->arr, 0, (__pyx_v_initial_len * (sizeof(int))));
+  memset(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr, 0, (__pyx_v_initial_len * (sizeof(int))));
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_3__str__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_3__str__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_2__str__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":20
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":20
  *         memset(self.arr, 0, initial_len*sizeof(int))
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -4255,7 +3820,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_3__str__(PyObject *__pyx_v_self) {
  *         ret = "IntList["
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_7IntList_1__str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_1__str__(PyObject *__pyx_v_self) {
   PyObject *__pyx_v_ret = NULL;
   int __pyx_v_idx;
   PyObject *__pyx_r = NULL;
@@ -4268,9 +3834,9 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__str__", 0);
+  __Pyx_RefNannySetupContext("__str__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":22
  *     def __str__(self):
  *         cdef unsigned i
  *         ret = "IntList["             # <<<<<<<<<<<<<<
@@ -4280,18 +3846,18 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
   __pyx_v_ret = ((PyObject *)__pyx_kp_s_3);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":23
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":23
  *         cdef unsigned i
  *         ret = "IntList["
  *         for idx in range(self.size):             # <<<<<<<<<<<<<<
  *             if idx>0:
  *                 ret += ","
  */
-  __pyx_t_1 = __pyx_v_self->size;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->size;
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_idx = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":24
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":24
  *         ret = "IntList["
  *         for idx in range(self.size):
  *             if idx>0:             # <<<<<<<<<<<<<<
@@ -4301,7 +3867,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
     __pyx_t_3 = (__pyx_v_idx > 0);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":25
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":25
  *         for idx in range(self.size):
  *             if idx>0:
  *                 ret += ","             # <<<<<<<<<<<<<<
@@ -4313,21 +3879,21 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
       __Pyx_DECREF(__pyx_v_ret);
       __pyx_v_ret = __pyx_t_4;
       __pyx_t_4 = 0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":26
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":26
  *             if idx>0:
  *                 ret += ","
  *             ret += str(self.arr[idx])             # <<<<<<<<<<<<<<
  *         ret += "]"
  *         ret += "len="
  */
-    __pyx_t_4 = PyInt_FromLong((__pyx_v_self->arr[__pyx_v_idx])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_v_idx])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
@@ -4342,7 +3908,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
     __pyx_t_5 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":27
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":27
  *                 ret += ","
  *             ret += str(self.arr[idx])
  *         ret += "]"             # <<<<<<<<<<<<<<
@@ -4355,7 +3921,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
   __pyx_v_ret = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":28
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":28
  *             ret += str(self.arr[idx])
  *         ret += "]"
  *         ret += "len="             # <<<<<<<<<<<<<<
@@ -4368,14 +3934,14 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
   __pyx_v_ret = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":29
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":29
  *         ret += "]"
  *         ret += "len="
  *         ret += self.len             # <<<<<<<<<<<<<<
  *         return ret
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyInt_FromLong(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_ret, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
@@ -4384,7 +3950,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
   __pyx_v_ret = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":30
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":30
  *         ret += "len="
  *         ret += self.len
  *         return ret             # <<<<<<<<<<<<<<
@@ -4410,18 +3976,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_2__str__(struct __pyx_obj_3_sa_IntList *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_5index(PyObject *__pyx_v_self, PyObject *__pyx_v_val); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_5index(PyObject *__pyx_v_self, PyObject *__pyx_v_val) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("index (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_4index(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((PyObject *)__pyx_v_val));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":32
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":32
  *         return ret
  * 
  *     def index(self, val):             # <<<<<<<<<<<<<<
@@ -4429,7 +3984,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_5index(PyObject *__pyx_v_self, PyObject
  *         for i in range(self.len):
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_4index(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_val) {
+static PyObject *__pyx_pf_3_sa_7IntList_2index(PyObject *__pyx_v_self, PyObject *__pyx_v_val); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_2index(PyObject *__pyx_v_self, PyObject *__pyx_v_val) {
   unsigned int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4441,35 +3997,36 @@ static PyObject *__pyx_pf_3_sa_7IntList_4index(struct __pyx_obj_3_sa_IntList *__
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("index", 0);
+  __Pyx_RefNannySetupContext("index");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":34
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":34
  *     def index(self, val):
  *         cdef unsigned i
  *         for i in range(self.len):             # <<<<<<<<<<<<<<
  *             if self.arr[i] == val:
  *                 return i
  */
-  __pyx_t_1 = __pyx_v_self->len;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len;
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_i = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":35
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":35
  *         cdef unsigned i
  *         for i in range(self.len):
  *             if self.arr[i] == val:             # <<<<<<<<<<<<<<
  *                 return i
  *         return IndexError
  */
-    __pyx_t_3 = PyInt_FromLong((__pyx_v_self->arr[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_val, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_val, Py_EQ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":36
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":36
  *         for i in range(self.len):
  *             if self.arr[i] == val:
  *                 return i             # <<<<<<<<<<<<<<
@@ -4482,12 +4039,12 @@ static PyObject *__pyx_pf_3_sa_7IntList_4index(struct __pyx_obj_3_sa_IntList *__
       __pyx_r = __pyx_t_4;
       __pyx_t_4 = 0;
       goto __pyx_L0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":37
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":37
  *             if self.arr[i] == val:
  *                 return i
  *         return IndexError             # <<<<<<<<<<<<<<
@@ -4512,39 +4069,60 @@ static PyObject *__pyx_pf_3_sa_7IntList_4index(struct __pyx_obj_3_sa_IntList *__
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_7partition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_7partition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":39
+ *         return IndexError
+ * 
+ *     def partition(self,start,end):             # <<<<<<<<<<<<<<
+ *         pivot = self.arr[end]
+ *         bottom = start-1
+ */
+
+static PyObject *__pyx_pf_3_sa_7IntList_3partition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_3partition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_start = 0;
   PyObject *__pyx_v_end = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_pivot = NULL;
+  PyObject *__pyx_v_bottom = NULL;
+  PyObject *__pyx_v_top = NULL;
+  long __pyx_v_done;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("partition (wrapper)", 0);
+  Py_ssize_t __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__end,0};
+  __Pyx_RefNannySetupContext("partition");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__end,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__end)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__end);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("partition", 1, 2, 2, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "partition") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "partition") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4563,38 +4141,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_7partition(PyObject *__pyx_v_self, PyObj
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7IntList_6partition(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_v_start, __pyx_v_end);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":39
- *         return IndexError
- * 
- *     def partition(self,start,end):             # <<<<<<<<<<<<<<
- *         pivot = self.arr[end]
- *         bottom = start-1
- */
-
-static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_end) {
-  PyObject *__pyx_v_pivot = NULL;
-  PyObject *__pyx_v_bottom = NULL;
-  PyObject *__pyx_v_top = NULL;
-  long __pyx_v_done;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  Py_ssize_t __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("partition", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":40
  * 
  *     def partition(self,start,end):
  *         pivot = self.arr[end]             # <<<<<<<<<<<<<<
@@ -4602,12 +4150,12 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  *         top = end
  */
   __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_end); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_pivot = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":41
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":41
  *     def partition(self,start,end):
  *         pivot = self.arr[end]
  *         bottom = start-1             # <<<<<<<<<<<<<<
@@ -4619,7 +4167,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
   __pyx_v_bottom = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":42
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":42
  *         pivot = self.arr[end]
  *         bottom = start-1
  *         top = end             # <<<<<<<<<<<<<<
@@ -4629,7 +4177,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
   __Pyx_INCREF(__pyx_v_end);
   __pyx_v_top = __pyx_v_end;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":43
  *         bottom = start-1
  *         top = end
  *         done = 0             # <<<<<<<<<<<<<<
@@ -4638,7 +4186,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  */
   __pyx_v_done = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":44
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":44
  *         top = end
  *         done = 0
  *         while not done:             # <<<<<<<<<<<<<<
@@ -4649,7 +4197,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
     __pyx_t_3 = (!__pyx_v_done);
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":45
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":45
  *         done = 0
  *         while not done:
  *             while not done:             # <<<<<<<<<<<<<<
@@ -4660,7 +4208,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
       __pyx_t_3 = (!__pyx_v_done);
       if (!__pyx_t_3) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":46
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":46
  *         while not done:
  *             while not done:
  *                 bottom += 1             # <<<<<<<<<<<<<<
@@ -4673,19 +4221,20 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
       __pyx_v_bottom = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":47
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":47
  *             while not done:
  *                 bottom += 1
  *                 if bottom == top:             # <<<<<<<<<<<<<<
  *                     done = 1
  *                     break
  */
-      __pyx_t_2 = PyObject_RichCompare(__pyx_v_bottom, __pyx_v_top, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyObject_RichCompare(__pyx_v_bottom, __pyx_v_top, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":48
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":48
  *                 bottom += 1
  *                 if bottom == top:
  *                     done = 1             # <<<<<<<<<<<<<<
@@ -4694,19 +4243,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  */
         __pyx_v_done = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":49
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":49
  *                 if bottom == top:
  *                     done = 1
  *                     break             # <<<<<<<<<<<<<<
  *                 if self.arr[bottom] > pivot:
  *                     self.arr[top] = self.arr[bottom]
  */
-        goto __pyx_L6_break;
-        goto __pyx_L7;
+        goto __pyx_L9_break;
+        goto __pyx_L10;
       }
-      __pyx_L7:;
+      __pyx_L10:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":50
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":50
  *                     done = 1
  *                     break
  *                 if self.arr[bottom] > pivot:             # <<<<<<<<<<<<<<
@@ -4714,15 +4263,16 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  *                     break
  */
       __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_bottom); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_2 = PyInt_FromLong((__pyx_v_self->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_v_pivot, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_v_pivot, Py_GT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":51
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":51
  *                     break
  *                 if self.arr[bottom] > pivot:
  *                     self.arr[top] = self.arr[bottom]             # <<<<<<<<<<<<<<
@@ -4731,23 +4281,23 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  */
         __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_bottom); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_top); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        (__pyx_v_self->arr[__pyx_t_5]) = (__pyx_v_self->arr[__pyx_t_1]);
+        (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_5]) = (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_1]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":52
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":52
  *                 if self.arr[bottom] > pivot:
  *                     self.arr[top] = self.arr[bottom]
  *                     break             # <<<<<<<<<<<<<<
  *             while not done:
  *                 top -= 1
  */
-        goto __pyx_L6_break;
-        goto __pyx_L8;
+        goto __pyx_L9_break;
+        goto __pyx_L11;
       }
-      __pyx_L8:;
+      __pyx_L11:;
     }
-    __pyx_L6_break:;
+    __pyx_L9_break:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":53
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":53
  *                     self.arr[top] = self.arr[bottom]
  *                     break
  *             while not done:             # <<<<<<<<<<<<<<
@@ -4758,7 +4308,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
       __pyx_t_3 = (!__pyx_v_done);
       if (!__pyx_t_3) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":54
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":54
  *                     break
  *             while not done:
  *                 top -= 1             # <<<<<<<<<<<<<<
@@ -4771,19 +4321,20 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
       __pyx_v_top = __pyx_t_4;
       __pyx_t_4 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":55
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":55
  *             while not done:
  *                 top -= 1
  *                 if top == bottom:             # <<<<<<<<<<<<<<
  *                     done = 1
  *                     break
  */
-      __pyx_t_4 = PyObject_RichCompare(__pyx_v_top, __pyx_v_bottom, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_top, __pyx_v_bottom, Py_EQ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":56
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":56
  *                 top -= 1
  *                 if top == bottom:
  *                     done = 1             # <<<<<<<<<<<<<<
@@ -4792,19 +4343,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  */
         __pyx_v_done = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":57
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":57
  *                 if top == bottom:
  *                     done = 1
  *                     break             # <<<<<<<<<<<<<<
  *                 if self.arr[top] < pivot:
  *                     self.arr[bottom] = self.arr[top]
  */
-        goto __pyx_L10_break;
-        goto __pyx_L11;
+        goto __pyx_L13_break;
+        goto __pyx_L14;
       }
-      __pyx_L11:;
+      __pyx_L14:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":58
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":58
  *                     done = 1
  *                     break
  *                 if self.arr[top] < pivot:             # <<<<<<<<<<<<<<
@@ -4812,15 +4363,16 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  *                     break
  */
       __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_top); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = PyInt_FromLong((__pyx_v_self->arr[__pyx_t_1])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_1])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_v_pivot, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_v_pivot, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":59
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":59
  *                     break
  *                 if self.arr[top] < pivot:
  *                     self.arr[bottom] = self.arr[top]             # <<<<<<<<<<<<<<
@@ -4829,24 +4381,24 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  */
         __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_top); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_bottom); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        (__pyx_v_self->arr[__pyx_t_5]) = (__pyx_v_self->arr[__pyx_t_1]);
+        (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_5]) = (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_1]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":60
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":60
  *                 if self.arr[top] < pivot:
  *                     self.arr[bottom] = self.arr[top]
  *                     break             # <<<<<<<<<<<<<<
  *         self.arr[top] = pivot
  *         return top
  */
-        goto __pyx_L10_break;
-        goto __pyx_L12;
+        goto __pyx_L13_break;
+        goto __pyx_L15;
       }
-      __pyx_L12:;
+      __pyx_L15:;
     }
-    __pyx_L10_break:;
+    __pyx_L13_break:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":61
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":61
  *                     self.arr[bottom] = self.arr[top]
  *                     break
  *         self.arr[top] = pivot             # <<<<<<<<<<<<<<
@@ -4855,9 +4407,9 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
  */
   __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_pivot); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_top); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  (__pyx_v_self->arr[__pyx_t_1]) = __pyx_t_6;
+  (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_t_1]) = __pyx_t_6;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":62
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":62
  *                     break
  *         self.arr[top] = pivot
  *         return top             # <<<<<<<<<<<<<<
@@ -4885,39 +4437,55 @@ static PyObject *__pyx_pf_3_sa_7IntList_6partition(struct __pyx_obj_3_sa_IntList
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_9_doquicksort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_9_doquicksort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":64
+ *         return top
+ * 
+ *     def _doquicksort(self,start,end):             # <<<<<<<<<<<<<<
+ *         if start < end:
+ *             split = self.partition(start,end)
+ */
+
+static PyObject *__pyx_pf_3_sa_7IntList_4_doquicksort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_4_doquicksort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_start = 0;
   PyObject *__pyx_v_end = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_split = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_doquicksort (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__end,0};
+  __Pyx_RefNannySetupContext("_doquicksort");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__end,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__end)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__end);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("_doquicksort", 1, 2, 2, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_doquicksort") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_doquicksort") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4936,55 +4504,31 @@ static PyObject *__pyx_pw_3_sa_7IntList_9_doquicksort(PyObject *__pyx_v_self, Py
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7IntList_8_doquicksort(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_v_start, __pyx_v_end);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":64
- *         return top
- * 
- *     def _doquicksort(self,start,end):             # <<<<<<<<<<<<<<
- *         if start < end:
- *             split = self.partition(start,end)
- */
-
-static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_end) {
-  PyObject *__pyx_v_split = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("_doquicksort", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":65
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":65
  * 
  *     def _doquicksort(self,start,end):
  *         if start < end:             # <<<<<<<<<<<<<<
  *             split = self.partition(start,end)
  *             self._doquicksort(start,split-1)
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_start, __pyx_v_end, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_start, __pyx_v_end, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":66
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":66
  *     def _doquicksort(self,start,end):
  *         if start < end:
  *             split = self.partition(start,end)             # <<<<<<<<<<<<<<
  *             self._doquicksort(start,split-1)
  *             self._doquicksort(split+1,end)
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__partition); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__partition); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_start);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_start);
     __Pyx_GIVEREF(__pyx_v_start);
@@ -4998,19 +4542,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntL
     __pyx_v_split = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":67
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":67
  *         if start < end:
  *             split = self.partition(start,end)
  *             self._doquicksort(start,split-1)             # <<<<<<<<<<<<<<
  *             self._doquicksort(split+1,end)
  *         else:
  */
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s___doquicksort); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___doquicksort); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = PyNumber_Subtract(__pyx_v_split, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(__pyx_v_start);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_start);
     __Pyx_GIVEREF(__pyx_v_start);
@@ -5023,19 +4567,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntL
     __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":68
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":68
  *             split = self.partition(start,end)
  *             self._doquicksort(start,split-1)
  *             self._doquicksort(split+1,end)             # <<<<<<<<<<<<<<
  *         else:
  *             return
  */
-    __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s___doquicksort); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___doquicksort); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = PyNumber_Add(__pyx_v_split, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_end);
@@ -5047,11 +4591,11 @@ static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntL
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":70
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":70
  *             self._doquicksort(split+1,end)
  *         else:
  *             return             # <<<<<<<<<<<<<<
@@ -5062,7 +4606,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntL
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -5079,18 +4623,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_8_doquicksort(struct __pyx_obj_3_sa_IntL
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_11sort(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_11sort(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sort (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_10sort(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":72
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":72
  *             return
  * 
  *     def sort(self):             # <<<<<<<<<<<<<<
@@ -5098,7 +4631,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_11sort(PyObject *__pyx_v_self, CYTHON_UN
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_10sort(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_7IntList_5sort(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_5sort(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -5107,21 +4641,21 @@ static PyObject *__pyx_pf_3_sa_7IntList_10sort(struct __pyx_obj_3_sa_IntList *__
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("sort", 0);
+  __Pyx_RefNannySetupContext("sort");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":73
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":73
  * 
  *     def sort(self):
  *         self._doquicksort(0,self.len-1)             # <<<<<<<<<<<<<<
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s___doquicksort); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___doquicksort); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->len - 1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len - 1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   __Pyx_INCREF(__pyx_int_0);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
   __Pyx_GIVEREF(__pyx_int_0);
@@ -5148,18 +4682,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_10sort(struct __pyx_obj_3_sa_IntList *__
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_13reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_13reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_12reset(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":75
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":75
  *         self._doquicksort(0,self.len-1)
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -5167,19 +4690,20 @@ static PyObject *__pyx_pw_3_sa_7IntList_13reset(PyObject *__pyx_v_self, CYTHON_U
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_12reset(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_7IntList_6reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_6reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset", 0);
+  __Pyx_RefNannySetupContext("reset");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":76
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":76
  * 
  *     def reset(self):
  *         self.len = 0             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_v_self->len = 0;
+  ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len = 0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   __Pyx_XGIVEREF(__pyx_r);
@@ -5187,16 +4711,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_12reset(struct __pyx_obj_3_sa_IntList *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_7IntList_15__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_7IntList_15__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_7IntList_14__dealloc__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":78
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":78
  *         self.len = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -5204,35 +4719,25 @@ static void __pyx_pw_3_sa_7IntList_15__dealloc__(PyObject *__pyx_v_self) {
  * 
  */
 
-static void __pyx_pf_3_sa_7IntList_14__dealloc__(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static void __pyx_pf_3_sa_7IntList_7__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_7IntList_7__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":79
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":79
  * 
  *     def __dealloc__(self):
  *         free(self.arr)             # <<<<<<<<<<<<<<
  * 
  *     def __iter__(self):
  */
-  free(__pyx_v_self->arr);
-
-  __Pyx_RefNannyFinishContext();
-}
-static PyObject *__pyx_gb_3_sa_7IntList_18generator(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
+  free(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr);
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_17__iter__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_17__iter__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_16__iter__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
 }
+static PyObject *__pyx_gb_3_sa_7IntList_9generator(struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":81
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":81
  *         free(self.arr)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -5240,52 +4745,43 @@ static PyObject *__pyx_pw_3_sa_7IntList_17__iter__(PyObject *__pyx_v_self) {
  *         for i in range(self.len):
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_16__iter__(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_7IntList_8__iter__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_8__iter__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__iter__", 0);
+  __Pyx_RefNannySetupContext("__iter__");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *)__pyx_ptype_3_sa___pyx_scope_struct____iter__->tp_new(__pyx_ptype_3_sa___pyx_scope_struct____iter__, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_7IntList_18generator, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_7IntList_9generator;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.IntList.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_7IntList_18generator(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_7IntList_9generator(struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -5295,25 +4791,25 @@ static PyObject *__pyx_gb_3_sa_7IntList_18generator(__pyx_GeneratorObject *__pyx
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":83
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":83
  *     def __iter__(self):
  *         cdef int i
  *         for i in range(self.len):             # <<<<<<<<<<<<<<
  *             yield self.arr[i]
  * 
  */
-  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->len;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_IntList *)__pyx_cur_scope->__pyx_v_self)->len;
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_cur_scope->__pyx_v_i = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":84
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":84
  *         cdef int i
  *         for i in range(self.len):
  *             yield self.arr[i]             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, index):
  */
-    __pyx_t_3 = PyInt_FromLong((__pyx_cur_scope->__pyx_v_self->arr[__pyx_cur_scope->__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_cur_scope->__pyx_v_self)->arr[__pyx_cur_scope->__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -5322,38 +4818,26 @@ static PyObject *__pyx_gb_3_sa_7IntList_18generator(__pyx_GeneratorObject *__pyx
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
     __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_20__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_20__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_19__getitem__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((PyObject *)__pyx_v_index));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":86
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":86
  *             yield self.arr[i]
  * 
  *     def __getitem__(self, index):             # <<<<<<<<<<<<<<
@@ -5361,7 +4845,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_20__getitem__(PyObject *__pyx_v_self, Py
  *         if isinstance(index, int):
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pf_3_sa_7IntList_10__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_10__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
   int __pyx_v_i;
   int __pyx_v_j;
   int __pyx_v_k;
@@ -5381,9 +4866,9 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__getitem__", 0);
+  __Pyx_RefNannySetupContext("__getitem__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":88
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":88
  *     def __getitem__(self, index):
  *         cdef int i, j, k
  *         if isinstance(index, int):             # <<<<<<<<<<<<<<
@@ -5396,7 +4881,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":89
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":89
  *         cdef int i, j, k
  *         if isinstance(index, int):
  *             j = index             # <<<<<<<<<<<<<<
@@ -5406,7 +4891,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_v_index); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_j = __pyx_t_3;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":90
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":90
  *         if isinstance(index, int):
  *             j = index
  *             if j < 0:             # <<<<<<<<<<<<<<
@@ -5416,19 +4901,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __pyx_t_2 = (__pyx_v_j < 0);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":91
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":91
  *             j = index
  *             if j < 0:
  *                 j = self.len + j             # <<<<<<<<<<<<<<
  *             if j<0 or j>=self.len:
  *                 raise IndexError("Requested index %d of %d-length IntList" % (index, self.len))
  */
-      __pyx_v_j = (__pyx_v_self->len + __pyx_v_j);
-      goto __pyx_L4;
+      __pyx_v_j = (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len + __pyx_v_j);
+      goto __pyx_L6;
     }
-    __pyx_L4:;
+    __pyx_L6:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":92
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":92
  *             if j < 0:
  *                 j = self.len + j
  *             if j<0 or j>=self.len:             # <<<<<<<<<<<<<<
@@ -5437,24 +4922,24 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
  */
     __pyx_t_2 = (__pyx_v_j < 0);
     if (!__pyx_t_2) {
-      __pyx_t_4 = (__pyx_v_j >= __pyx_v_self->len);
+      __pyx_t_4 = (__pyx_v_j >= ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len);
       __pyx_t_5 = __pyx_t_4;
     } else {
       __pyx_t_5 = __pyx_t_2;
     }
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":93
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":93
  *                 j = self.len + j
  *             if j<0 or j>=self.len:
  *                 raise IndexError("Requested index %d of %d-length IntList" % (index, self.len))             # <<<<<<<<<<<<<<
  *             return self.arr[j]
  *         elif isinstance(index, slice):
  */
-      __pyx_t_1 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_6));
       __Pyx_INCREF(__pyx_v_index);
       PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_index);
       __Pyx_GIVEREF(__pyx_v_index);
@@ -5465,7 +4950,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
       __Pyx_GOTREF(((PyObject *)__pyx_t_1));
       __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
       __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_6));
       PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_1));
       __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
       __pyx_t_1 = 0;
@@ -5475,11 +4960,11 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
       __Pyx_Raise(__pyx_t_1, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       {__pyx_filename = __pyx_f[2]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":94
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":94
  *             if j<0 or j>=self.len:
  *                 raise IndexError("Requested index %d of %d-length IntList" % (index, self.len))
  *             return self.arr[j]             # <<<<<<<<<<<<<<
@@ -5487,15 +4972,15 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
  *             i = index.start
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((__pyx_v_self->arr[__pyx_v_j])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_v_j])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":95
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":95
  *                 raise IndexError("Requested index %d of %d-length IntList" % (index, self.len))
  *             return self.arr[j]
  *         elif isinstance(index, slice):             # <<<<<<<<<<<<<<
@@ -5508,7 +4993,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":96
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":96
  *             return self.arr[j]
  *         elif isinstance(index, slice):
  *             i = index.start             # <<<<<<<<<<<<<<
@@ -5521,7 +5006,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_v_i = __pyx_t_3;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":97
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":97
  *         elif isinstance(index, slice):
  *             i = index.start
  *             j = index.stop             # <<<<<<<<<<<<<<
@@ -5534,7 +5019,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_v_j = __pyx_t_3;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":98
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":98
  *             i = index.start
  *             j = index.stop
  *             if i < 0:             # <<<<<<<<<<<<<<
@@ -5544,19 +5029,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __pyx_t_5 = (__pyx_v_i < 0);
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":99
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":99
  *             j = index.stop
  *             if i < 0:
  *                 i = self.len + i             # <<<<<<<<<<<<<<
  *             if j < 0:
  *                 j = self.len + j
  */
-      __pyx_v_i = (__pyx_v_self->len + __pyx_v_i);
-      goto __pyx_L6;
+      __pyx_v_i = (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len + __pyx_v_i);
+      goto __pyx_L8;
     }
-    __pyx_L6:;
+    __pyx_L8:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":100
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":100
  *             if i < 0:
  *                 i = self.len + i
  *             if j < 0:             # <<<<<<<<<<<<<<
@@ -5566,19 +5051,19 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __pyx_t_5 = (__pyx_v_j < 0);
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":101
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":101
  *                 i = self.len + i
  *             if j < 0:
  *                 j = self.len + j             # <<<<<<<<<<<<<<
  *             if i < 0 or i >= self.len or j < 0 or j > self.len:
  *                 raise IndexError("Requested index %d:%d of %d-length IntList" % (index.start, index.stop, self.len))
  */
-      __pyx_v_j = (__pyx_v_self->len + __pyx_v_j);
-      goto __pyx_L7;
+      __pyx_v_j = (((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len + __pyx_v_j);
+      goto __pyx_L9;
     }
-    __pyx_L7:;
+    __pyx_L9:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":102
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":102
  *             if j < 0:
  *                 j = self.len + j
  *             if i < 0 or i >= self.len or j < 0 or j > self.len:             # <<<<<<<<<<<<<<
@@ -5587,11 +5072,11 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
  */
     __pyx_t_5 = (__pyx_v_i < 0);
     if (!__pyx_t_5) {
-      __pyx_t_2 = (__pyx_v_i >= __pyx_v_self->len);
+      __pyx_t_2 = (__pyx_v_i >= ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len);
       if (!__pyx_t_2) {
         __pyx_t_4 = (__pyx_v_j < 0);
         if (!__pyx_t_4) {
-          __pyx_t_7 = (__pyx_v_j > __pyx_v_self->len);
+          __pyx_t_7 = (__pyx_v_j > ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len);
           __pyx_t_8 = __pyx_t_7;
         } else {
           __pyx_t_8 = __pyx_t_4;
@@ -5606,7 +5091,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     }
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":103
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":103
  *                 j = self.len + j
  *             if i < 0 or i >= self.len or j < 0 or j > self.len:
  *                 raise IndexError("Requested index %d:%d of %d-length IntList" % (index.start, index.stop, self.len))             # <<<<<<<<<<<<<<
@@ -5617,10 +5102,10 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_6 = PyObject_GetAttr(__pyx_v_index, __pyx_n_s__stop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_9 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyInt_FromLong(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_10));
       PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
@@ -5634,7 +5119,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
       __Pyx_GOTREF(((PyObject *)__pyx_t_9));
       __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
       __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_10));
       PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_9));
       __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
       __pyx_t_9 = 0;
@@ -5644,11 +5129,11 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
       __Pyx_Raise(__pyx_t_9, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L8;
+      goto __pyx_L10;
     }
-    __pyx_L8:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":104
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":104
  *             if i < 0 or i >= self.len or j < 0 or j > self.len:
  *                 raise IndexError("Requested index %d:%d of %d-length IntList" % (index.start, index.stop, self.len))
  *             result = ()             # <<<<<<<<<<<<<<
@@ -5658,7 +5143,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
     __pyx_v_result = __pyx_empty_tuple;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":105
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":105
  *                 raise IndexError("Requested index %d:%d of %d-length IntList" % (index.start, index.stop, self.len))
  *             result = ()
  *             for k from i <= k < j:             # <<<<<<<<<<<<<<
@@ -5668,17 +5153,17 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __pyx_t_3 = __pyx_v_j;
     for (__pyx_v_k = __pyx_v_i; __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":106
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":106
  *             result = ()
  *             for k from i <= k < j:
  *                 result = result + (self.arr[k],)             # <<<<<<<<<<<<<<
  *             return result
  *         else:
  */
-      __pyx_t_9 = PyInt_FromLong((__pyx_v_self->arr[__pyx_v_k])); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyInt_FromLong((((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->arr[__pyx_v_k])); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_10));
       PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_9);
       __pyx_t_9 = 0;
@@ -5690,7 +5175,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
       __pyx_t_9 = 0;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":107
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":107
  *             for k from i <= k < j:
  *                 result = result + (self.arr[k],)
  *             return result             # <<<<<<<<<<<<<<
@@ -5701,11 +5186,11 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __Pyx_INCREF(((PyObject *)__pyx_v_result));
     __pyx_r = ((PyObject *)__pyx_v_result);
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":109
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":109
  *             return result
  *         else:
  *             raise TypeError("Illegal key type %s for IntList" % type(index))             # <<<<<<<<<<<<<<
@@ -5715,7 +5200,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __pyx_t_9 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)Py_TYPE(__pyx_v_index))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_9));
     __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_10);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_10));
     PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_9));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
     __pyx_t_9 = 0;
@@ -5726,7 +5211,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -5744,7 +5229,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_19__getitem__(struct __pyx_obj_3_sa_IntL
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":111
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":111
  *             raise TypeError("Illegal key type %s for IntList" % type(index))
  * 
  *     cdef void set(self, int i, int val):             # <<<<<<<<<<<<<<
@@ -5764,9 +5249,9 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("set", 0);
+  __Pyx_RefNannySetupContext("set");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":112
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":112
  * 
  *     cdef void set(self, int i, int val):
  *         j = i             # <<<<<<<<<<<<<<
@@ -5775,7 +5260,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
  */
   __pyx_v_j = __pyx_v_i;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":113
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":113
  *     cdef void set(self, int i, int val):
  *         j = i
  *         if i<0:             # <<<<<<<<<<<<<<
@@ -5785,7 +5270,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
   __pyx_t_1 = (__pyx_v_i < 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":114
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":114
  *         j = i
  *         if i<0:
  *             j = self.len + i             # <<<<<<<<<<<<<<
@@ -5797,7 +5282,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":115
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":115
  *         if i<0:
  *             j = self.len + i
  *         if j<0 or j>=self.len:             # <<<<<<<<<<<<<<
@@ -5813,7 +5298,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":116
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":116
  *             j = self.len + i
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length IntList" % (i, self.len))             # <<<<<<<<<<<<<<
@@ -5825,7 +5310,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
     __pyx_t_5 = PyInt_FromLong(__pyx_v_self->len); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
@@ -5836,7 +5321,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
     __pyx_t_5 = 0;
@@ -5850,7 +5335,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":117
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":117
  *         if j<0 or j>=self.len:
  *             raise IndexError("Requested index %d of %d-length IntList" % (i, self.len))
  *         self.arr[j] = val             # <<<<<<<<<<<<<<
@@ -5869,18 +5354,7 @@ static void __pyx_f_3_sa_7IntList_set(struct __pyx_obj_3_sa_IntList *__pyx_v_sel
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_7IntList_22__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val); /*proto*/
-static int __pyx_pw_3_sa_7IntList_22__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_21__setitem__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((PyObject *)__pyx_v_i), ((PyObject *)__pyx_v_val));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":119
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":119
  *         self.arr[j] = val
  * 
  *     def __setitem__(self, i, val):             # <<<<<<<<<<<<<<
@@ -5888,7 +5362,8 @@ static int __pyx_pw_3_sa_7IntList_22__setitem__(PyObject *__pyx_v_self, PyObject
  * 
  */
 
-static int __pyx_pf_3_sa_7IntList_21__setitem__(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val) {
+static int __pyx_pf_3_sa_7IntList_11__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val); /*proto*/
+static int __pyx_pf_3_sa_7IntList_11__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_val) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -5896,9 +5371,9 @@ static int __pyx_pf_3_sa_7IntList_21__setitem__(struct __pyx_obj_3_sa_IntList *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__setitem__", 0);
+  __Pyx_RefNannySetupContext("__setitem__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":120
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":120
  * 
  *     def __setitem__(self, i, val):
  *         self.set(i, val)             # <<<<<<<<<<<<<<
@@ -5907,7 +5382,7 @@ static int __pyx_pf_3_sa_7IntList_21__setitem__(struct __pyx_obj_3_sa_IntList *_
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_v_val); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->__pyx_vtab)->set(__pyx_v_self, __pyx_t_1, __pyx_t_2);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->__pyx_vtab)->set(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_t_1, __pyx_t_2);
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -5919,18 +5394,7 @@ static int __pyx_pf_3_sa_7IntList_21__setitem__(struct __pyx_obj_3_sa_IntList *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_ssize_t __pyx_pw_3_sa_7IntList_24__len__(PyObject *__pyx_v_self); /*proto*/
-static Py_ssize_t __pyx_pw_3_sa_7IntList_24__len__(PyObject *__pyx_v_self) {
-  Py_ssize_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_23__len__(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":122
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":122
  *         self.set(i, val)
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -5938,19 +5402,20 @@ static Py_ssize_t __pyx_pw_3_sa_7IntList_24__len__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_ssize_t __pyx_pf_3_sa_7IntList_23__len__(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static Py_ssize_t __pyx_pf_3_sa_7IntList_12__len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_pf_3_sa_7IntList_12__len__(PyObject *__pyx_v_self) {
   Py_ssize_t __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__", 0);
+  __Pyx_RefNannySetupContext("__len__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":123
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":123
  * 
  *     def __len__(self):
  *         return self.len             # <<<<<<<<<<<<<<
  * 
  *     def getSize(self):
  */
-  __pyx_r = __pyx_v_self->len;
+  __pyx_r = ((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->len;
   goto __pyx_L0;
 
   __pyx_r = 0;
@@ -5959,18 +5424,7 @@ static Py_ssize_t __pyx_pf_3_sa_7IntList_23__len__(struct __pyx_obj_3_sa_IntList
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_26getSize(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_26getSize(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSize (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_25getSize(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":125
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":125
  *         return self.len
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -5978,16 +5432,17 @@ static PyObject *__pyx_pw_3_sa_7IntList_26getSize(PyObject *__pyx_v_self, CYTHON
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_25getSize(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_7IntList_13getSize(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_13getSize(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSize", 0);
+  __Pyx_RefNannySetupContext("getSize");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":126
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":126
  * 
  *     def getSize(self):
  *         return self.size             # <<<<<<<<<<<<<<
@@ -5995,7 +5450,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_25getSize(struct __pyx_obj_3_sa_IntList
  *     def append(self, int val):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6013,13 +5468,23 @@ static PyObject *__pyx_pf_3_sa_7IntList_25getSize(struct __pyx_obj_3_sa_IntList
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_28append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_28append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":128
+ *         return self.size
+ * 
+ *     def append(self, int val):             # <<<<<<<<<<<<<<
+ *         self._append(val)
+ * 
+ */
+
+static PyObject *__pyx_pf_3_sa_7IntList_14append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_14append(PyObject *__pyx_v_self, PyObject *__pyx_arg_val) {
   int __pyx_v_val;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("append (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("append");
   assert(__pyx_arg_val); {
     __pyx_v_val = __Pyx_PyInt_AsInt(__pyx_arg_val); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -6029,32 +5494,15 @@ static PyObject *__pyx_pw_3_sa_7IntList_28append(PyObject *__pyx_v_self, PyObjec
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7IntList_27append(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((int)__pyx_v_val));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":128
- *         return self.size
- * 
- *     def append(self, int val):             # <<<<<<<<<<<<<<
- *         self._append(val)
- * 
- */
 
-static PyObject *__pyx_pf_3_sa_7IntList_27append(struct __pyx_obj_3_sa_IntList *__pyx_v_self, int __pyx_v_val) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("append", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":129
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":129
  * 
  *     def append(self, int val):
  *         self._append(val)             # <<<<<<<<<<<<<<
  * 
  *     cdef void _append(self, int val):
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->__pyx_vtab)->_append(__pyx_v_self, __pyx_v_val);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->__pyx_vtab)->_append(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_v_val);
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   __Pyx_XGIVEREF(__pyx_r);
@@ -6062,7 +5510,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_27append(struct __pyx_obj_3_sa_IntList *
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":131
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":131
  *         self._append(val)
  * 
  *     cdef void _append(self, int val):             # <<<<<<<<<<<<<<
@@ -6073,9 +5521,9 @@ static PyObject *__pyx_pf_3_sa_7IntList_27append(struct __pyx_obj_3_sa_IntList *
 static void __pyx_f_3_sa_7IntList__append(struct __pyx_obj_3_sa_IntList *__pyx_v_self, int __pyx_v_val) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("_append", 0);
+  __Pyx_RefNannySetupContext("_append");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":132
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":132
  * 
  *     cdef void _append(self, int val):
  *         if self.len == self.size:             # <<<<<<<<<<<<<<
@@ -6085,7 +5533,7 @@ static void __pyx_f_3_sa_7IntList__append(struct __pyx_obj_3_sa_IntList *__pyx_v
   __pyx_t_1 = (__pyx_v_self->len == __pyx_v_self->size);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":133
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":133
  *     cdef void _append(self, int val):
  *         if self.len == self.size:
  *             self.size = self.size + self.increment             # <<<<<<<<<<<<<<
@@ -6094,7 +5542,7 @@ static void __pyx_f_3_sa_7IntList__append(struct __pyx_obj_3_sa_IntList *__pyx_v
  */
     __pyx_v_self->size = (__pyx_v_self->size + __pyx_v_self->increment);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":134
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":134
  *         if self.len == self.size:
  *             self.size = self.size + self.increment
  *             self.arr = <int*> realloc(self.arr, self.size*sizeof(int))             # <<<<<<<<<<<<<<
@@ -6106,7 +5554,7 @@ static void __pyx_f_3_sa_7IntList__append(struct __pyx_obj_3_sa_IntList *__pyx_v
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":135
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":135
  *             self.size = self.size + self.increment
  *             self.arr = <int*> realloc(self.arr, self.size*sizeof(int))
  *         self.arr[self.len] = val             # <<<<<<<<<<<<<<
@@ -6115,7 +5563,7 @@ static void __pyx_f_3_sa_7IntList__append(struct __pyx_obj_3_sa_IntList *__pyx_v
  */
   (__pyx_v_self->arr[__pyx_v_self->len]) = __pyx_v_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":136
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":136
  *             self.arr = <int*> realloc(self.arr, self.size*sizeof(int))
  *         self.arr[self.len] = val
  *         self.len = self.len + 1             # <<<<<<<<<<<<<<
@@ -6127,18 +5575,7 @@ static void __pyx_f_3_sa_7IntList__append(struct __pyx_obj_3_sa_IntList *__pyx_v
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_30extend(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_30extend(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("extend (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7IntList_29extend(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((PyObject *)__pyx_v_other));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":138
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":138
  *         self.len = self.len + 1
  * 
  *     def extend(self, other):             # <<<<<<<<<<<<<<
@@ -6146,16 +5583,17 @@ static PyObject *__pyx_pw_3_sa_7IntList_30extend(PyObject *__pyx_v_self, PyObjec
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_7IntList_29extend(struct __pyx_obj_3_sa_IntList *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_3_sa_7IntList_15extend(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_15extend(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("extend", 0);
+  __Pyx_RefNannySetupContext("extend");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":139
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":139
  * 
  *     def extend(self, other):
  *         self._extend(other)             # <<<<<<<<<<<<<<
@@ -6165,7 +5603,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_29extend(struct __pyx_obj_3_sa_IntList *
   if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_3_sa_IntList))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_other;
   __Pyx_INCREF(__pyx_t_1);
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->__pyx_vtab)->_extend(__pyx_v_self, ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1));
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->__pyx_vtab)->_extend(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -6180,7 +5618,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_29extend(struct __pyx_obj_3_sa_IntList *
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":141
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":141
  *         self._extend(other)
  * 
  *     cdef void _extend(self, IntList other):             # <<<<<<<<<<<<<<
@@ -6190,9 +5628,9 @@ static PyObject *__pyx_pf_3_sa_7IntList_29extend(struct __pyx_obj_3_sa_IntList *
 
 static void __pyx_f_3_sa_7IntList__extend(struct __pyx_obj_3_sa_IntList *__pyx_v_self, struct __pyx_obj_3_sa_IntList *__pyx_v_other) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_extend", 0);
+  __Pyx_RefNannySetupContext("_extend");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":142
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":142
  * 
  *     cdef void _extend(self, IntList other):
  *         self._extend_arr(other.arr, other.len)             # <<<<<<<<<<<<<<
@@ -6204,7 +5642,7 @@ static void __pyx_f_3_sa_7IntList__extend(struct __pyx_obj_3_sa_IntList *__pyx_v
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":144
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":144
  *         self._extend_arr(other.arr, other.len)
  * 
  *     cdef void _extend_arr(self, int* other, int other_len):             # <<<<<<<<<<<<<<
@@ -6215,9 +5653,9 @@ static void __pyx_f_3_sa_7IntList__extend(struct __pyx_obj_3_sa_IntList *__pyx_v
 static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__pyx_v_self, int *__pyx_v_other, int __pyx_v_other_len) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("_extend_arr", 0);
+  __Pyx_RefNannySetupContext("_extend_arr");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":145
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":145
  * 
  *     cdef void _extend_arr(self, int* other, int other_len):
  *         if self.size < self.len + other_len:             # <<<<<<<<<<<<<<
@@ -6227,7 +5665,7 @@ static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__p
   __pyx_t_1 = (__pyx_v_self->size < (__pyx_v_self->len + __pyx_v_other_len));
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":146
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":146
  *     cdef void _extend_arr(self, int* other, int other_len):
  *         if self.size < self.len + other_len:
  *             self.size = self.len + other_len             # <<<<<<<<<<<<<<
@@ -6236,7 +5674,7 @@ static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__p
  */
     __pyx_v_self->size = (__pyx_v_self->len + __pyx_v_other_len);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":147
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":147
  *         if self.size < self.len + other_len:
  *             self.size = self.len + other_len
  *             self.arr = <int*> realloc(self.arr, self.size*sizeof(int))             # <<<<<<<<<<<<<<
@@ -6248,7 +5686,7 @@ static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__p
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":148
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":148
  *             self.size = self.len + other_len
  *             self.arr = <int*> realloc(self.arr, self.size*sizeof(int))
  *         memcpy(self.arr+self.len, other, other_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -6257,7 +5695,7 @@ static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__p
  */
   memcpy((__pyx_v_self->arr + __pyx_v_self->len), __pyx_v_other, (__pyx_v_other_len * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":149
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":149
  *             self.arr = <int*> realloc(self.arr, self.size*sizeof(int))
  *         memcpy(self.arr+self.len, other, other_len*sizeof(int))
  *         self.len = self.len + other_len             # <<<<<<<<<<<<<<
@@ -6269,7 +5707,7 @@ static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__p
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":151
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":151
  *         self.len = self.len + other_len
  * 
  *     cdef void _clear(self):             # <<<<<<<<<<<<<<
@@ -6279,9 +5717,9 @@ static void __pyx_f_3_sa_7IntList__extend_arr(struct __pyx_obj_3_sa_IntList *__p
 
 static void __pyx_f_3_sa_7IntList__clear(struct __pyx_obj_3_sa_IntList *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_clear", 0);
+  __Pyx_RefNannySetupContext("_clear");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":152
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":152
  * 
  *     cdef void _clear(self):
  *         free(self.arr)             # <<<<<<<<<<<<<<
@@ -6290,7 +5728,7 @@ static void __pyx_f_3_sa_7IntList__clear(struct __pyx_obj_3_sa_IntList *__pyx_v_
  */
   free(__pyx_v_self->arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":153
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":153
  *     cdef void _clear(self):
  *         free(self.arr)
  *         self.len = 0             # <<<<<<<<<<<<<<
@@ -6299,7 +5737,7 @@ static void __pyx_f_3_sa_7IntList__clear(struct __pyx_obj_3_sa_IntList *__pyx_v_
  */
   __pyx_v_self->len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":154
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":154
  *         free(self.arr)
  *         self.len = 0
  *         self.size = 0             # <<<<<<<<<<<<<<
@@ -6308,7 +5746,7 @@ static void __pyx_f_3_sa_7IntList__clear(struct __pyx_obj_3_sa_IntList *__pyx_v_
  */
   __pyx_v_self->size = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":155
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":155
  *         self.len = 0
  *         self.size = 0
  *         self.arr = <int*> malloc(0)             # <<<<<<<<<<<<<<
@@ -6320,7 +5758,7 @@ static void __pyx_f_3_sa_7IntList__clear(struct __pyx_obj_3_sa_IntList *__pyx_v_
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":157
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":157
  *         self.arr = <int*> malloc(0)
  * 
  *     cdef void write_handle(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -6330,9 +5768,9 @@ static void __pyx_f_3_sa_7IntList__clear(struct __pyx_obj_3_sa_IntList *__pyx_v_
 
 static void __pyx_f_3_sa_7IntList_write_handle(struct __pyx_obj_3_sa_IntList *__pyx_v_self, FILE *__pyx_v_f) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_handle", 0);
+  __Pyx_RefNannySetupContext("write_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":158
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":158
  * 
  *     cdef void write_handle(self, FILE* f):
  *         fwrite(&(self.len), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -6341,7 +5779,7 @@ static void __pyx_f_3_sa_7IntList_write_handle(struct __pyx_obj_3_sa_IntList *__
  */
   fwrite((&__pyx_v_self->len), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":159
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":159
  *     cdef void write_handle(self, FILE* f):
  *         fwrite(&(self.len), sizeof(int), 1, f)
  *         fwrite(self.arr, sizeof(int), self.len, f)             # <<<<<<<<<<<<<<
@@ -6353,13 +5791,24 @@ static void __pyx_f_3_sa_7IntList_write_handle(struct __pyx_obj_3_sa_IntList *__
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_32write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_32write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":161
+ *         fwrite(self.arr, sizeof(int), self.len, f)
+ * 
+ *     def write(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "w")
+ */
+
+static PyObject *__pyx_pf_3_sa_7IntList_16write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_16write(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -6369,26 +5818,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_32write(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7IntList_31write(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":161
- *         fwrite(self.arr, sizeof(int), self.len, f)
- * 
- *     def write(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "w")
- */
-
-static PyObject *__pyx_pf_3_sa_7IntList_31write(struct __pyx_obj_3_sa_IntList *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":163
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":163
  *     def write(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -6397,16 +5828,16 @@ static PyObject *__pyx_pf_3_sa_7IntList_31write(struct __pyx_obj_3_sa_IntList *_
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":164
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":164
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         self.write_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->__pyx_vtab)->write_handle(__pyx_v_self, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":165
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":165
  *         f = fopen(filename, "w")
  *         self.write_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -6421,7 +5852,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_31write(struct __pyx_obj_3_sa_IntList *_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":167
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":167
  *         fclose(f)
  * 
  *     cdef void read_handle(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -6431,9 +5862,9 @@ static PyObject *__pyx_pf_3_sa_7IntList_31write(struct __pyx_obj_3_sa_IntList *_
 
 static void __pyx_f_3_sa_7IntList_read_handle(struct __pyx_obj_3_sa_IntList *__pyx_v_self, FILE *__pyx_v_f) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_handle", 0);
+  __Pyx_RefNannySetupContext("read_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":168
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":168
  * 
  *     cdef void read_handle(self, FILE* f):
  *         (self.arr)             # <<<<<<<<<<<<<<
@@ -6442,7 +5873,7 @@ static void __pyx_f_3_sa_7IntList_read_handle(struct __pyx_obj_3_sa_IntList *__p
  */
   __pyx_v_self->arr;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":169
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":169
  *     cdef void read_handle(self, FILE* f):
  *         (self.arr)
  *         fread(&(self.len), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -6451,7 +5882,7 @@ static void __pyx_f_3_sa_7IntList_read_handle(struct __pyx_obj_3_sa_IntList *__p
  */
   fread((&__pyx_v_self->len), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":170
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":170
  *         (self.arr)
  *         fread(&(self.len), sizeof(int), 1, f)
  *         self.arr = <int*> malloc(self.len * sizeof(int))             # <<<<<<<<<<<<<<
@@ -6460,7 +5891,7 @@ static void __pyx_f_3_sa_7IntList_read_handle(struct __pyx_obj_3_sa_IntList *__p
  */
   __pyx_v_self->arr = ((int *)malloc((__pyx_v_self->len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":171
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":171
  *         fread(&(self.len), sizeof(int), 1, f)
  *         self.arr = <int*> malloc(self.len * sizeof(int))
  *         self.size = self.len             # <<<<<<<<<<<<<<
@@ -6469,7 +5900,7 @@ static void __pyx_f_3_sa_7IntList_read_handle(struct __pyx_obj_3_sa_IntList *__p
  */
   __pyx_v_self->size = __pyx_v_self->len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":172
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":172
  *         self.arr = <int*> malloc(self.len * sizeof(int))
  *         self.size = self.len
  *         fread(self.arr, sizeof(int), self.len, f)             # <<<<<<<<<<<<<<
@@ -6481,13 +5912,24 @@ static void __pyx_f_3_sa_7IntList_read_handle(struct __pyx_obj_3_sa_IntList *__p
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7IntList_34read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_7IntList_34read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":174
+ *         fread(self.arr, sizeof(int), self.len, f)
+ * 
+ *     def read(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "r")
+ */
+
+static PyObject *__pyx_pf_3_sa_7IntList_17read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_7IntList_17read(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -6497,26 +5939,8 @@ static PyObject *__pyx_pw_3_sa_7IntList_34read(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7IntList_33read(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":174
- *         fread(self.arr, sizeof(int), self.len, f)
- * 
- *     def read(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "r")
- */
-
-static PyObject *__pyx_pf_3_sa_7IntList_33read(struct __pyx_obj_3_sa_IntList *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":176
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":176
  *     def read(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -6525,15 +5949,15 @@ static PyObject *__pyx_pf_3_sa_7IntList_33read(struct __pyx_obj_3_sa_IntList *__
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":177
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":177
  *         cdef FILE* f
  *         f = fopen(filename, "r")
  *         self.read_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->__pyx_vtab)->read_handle(__pyx_v_self, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_IntList *)__pyx_v_self)->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_IntList *)__pyx_v_self), __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/int_list.pxi":178
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/int_list.pxi":178
  *         f = fopen(filename, "r")
  *         self.read_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -6546,21 +5970,7 @@ static PyObject *__pyx_pf_3_sa_7IntList_33read(struct __pyx_obj_3_sa_IntList *__
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9StringMap_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_9StringMap_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_3_sa_9StringMap___cinit__(((struct __pyx_obj_3_sa_StringMap *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":13
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":13
  *     cdef int index(self, char *s)
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -6568,35 +5978,30 @@ static int __pyx_pw_3_sa_9StringMap_1__cinit__(PyObject *__pyx_v_self, PyObject
  * 
  */
 
-static int __pyx_pf_3_sa_9StringMap___cinit__(struct __pyx_obj_3_sa_StringMap *__pyx_v_self) {
+static int __pyx_pf_3_sa_9StringMap___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_9StringMap___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  __Pyx_RefNannySetupContext("__cinit__");
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":14
  * 
  *     def __cinit__(self):
  *         self.vocab = stringmap_new()             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_v_self->vocab = stringmap_new();
+  ((struct __pyx_obj_3_sa_StringMap *)__pyx_v_self)->vocab = stringmap_new();
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_9StringMap_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_9StringMap_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_9StringMap_2__dealloc__(((struct __pyx_obj_3_sa_StringMap *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":16
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":16
  *         self.vocab = stringmap_new()
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -6604,23 +6009,24 @@ static void __pyx_pw_3_sa_9StringMap_3__dealloc__(PyObject *__pyx_v_self) {
  * 
  */
 
-static void __pyx_pf_3_sa_9StringMap_2__dealloc__(struct __pyx_obj_3_sa_StringMap *__pyx_v_self) {
+static void __pyx_pf_3_sa_9StringMap_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_9StringMap_1__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":17
  * 
  *     def __dealloc__(self):
  *         stringmap_delete(self.vocab)             # <<<<<<<<<<<<<<
  * 
  *     cdef char *word(self, int i):
  */
-  stringmap_delete(__pyx_v_self->vocab);
+  stringmap_delete(((struct __pyx_obj_3_sa_StringMap *)__pyx_v_self)->vocab);
 
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":19
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":19
  *         stringmap_delete(self.vocab)
  * 
  *     cdef char *word(self, int i):             # <<<<<<<<<<<<<<
@@ -6631,9 +6037,9 @@ static void __pyx_pf_3_sa_9StringMap_2__dealloc__(struct __pyx_obj_3_sa_StringMa
 static char *__pyx_f_3_sa_9StringMap_word(struct __pyx_obj_3_sa_StringMap *__pyx_v_self, int __pyx_v_i) {
   char *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("word", 0);
+  __Pyx_RefNannySetupContext("word");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":20
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":20
  * 
  *     cdef char *word(self, int i):
  *         return stringmap_word(self.vocab, i)             # <<<<<<<<<<<<<<
@@ -6649,7 +6055,7 @@ static char *__pyx_f_3_sa_9StringMap_word(struct __pyx_obj_3_sa_StringMap *__pyx
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":22
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":22
  *         return stringmap_word(self.vocab, i)
  * 
  *     cdef int index(self, char *s):             # <<<<<<<<<<<<<<
@@ -6659,9 +6065,9 @@ static char *__pyx_f_3_sa_9StringMap_word(struct __pyx_obj_3_sa_StringMap *__pyx
 static int __pyx_f_3_sa_9StringMap_index(struct __pyx_obj_3_sa_StringMap *__pyx_v_self, char *__pyx_v_s) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("index", 0);
+  __Pyx_RefNannySetupContext("index");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/str_map.pxi":23
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/str_map.pxi":23
  * 
  *     cdef int index(self, char *s):
  *         return stringmap_index(self.vocab, s)             # <<<<<<<<<<<<<<
@@ -6675,34 +6081,40 @@ static int __pyx_f_3_sa_9StringMap_index(struct __pyx_obj_3_sa_StringMap *__pyx_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9DataArray_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_9DataArray_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":17
+ *     cdef bint use_sent_id
+ * 
+ *     def __cinit__(self, from_binary=None, from_text=None, side=None, bint use_sent_id=False):             # <<<<<<<<<<<<<<
+ *         self.word2id = {"END_OF_FILE":0, "END_OF_LINE":1}
+ *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]
+ */
+
+static int __pyx_pf_3_sa_9DataArray___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_9DataArray___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_from_binary = 0;
   PyObject *__pyx_v_from_text = 0;
   PyObject *__pyx_v_side = 0;
   int __pyx_v_use_sent_id;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  long __pyx_t_5;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_binary,&__pyx_n_s__from_text,&__pyx_n_s__side,&__pyx_n_s__use_sent_id,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_binary,&__pyx_n_s__from_text,&__pyx_n_s__side,&__pyx_n_s__use_sent_id,0};
     PyObject* values[4] = {0,0,0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":17
- *     cdef bint use_sent_id
- * 
- *     def __cinit__(self, from_binary=None, from_text=None, side=None, bint use_sent_id=False):             # <<<<<<<<<<<<<<
- *         self.word2id = {"END_OF_FILE":0, "END_OF_LINE":1}
- *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]
- */
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -6711,7 +6123,7 @@ static int __pyx_pw_3_sa_9DataArray_1__cinit__(PyObject *__pyx_v_self, PyObject
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__from_binary);
@@ -6734,7 +6146,7 @@ static int __pyx_pw_3_sa_9DataArray_1__cinit__(PyObject *__pyx_v_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6763,25 +6175,8 @@ static int __pyx_pw_3_sa_9DataArray_1__cinit__(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray___cinit__(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), __pyx_v_from_binary, __pyx_v_from_text, __pyx_v_side, __pyx_v_use_sent_id);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_from_text, PyObject *__pyx_v_side, int __pyx_v_use_sent_id) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  long __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":18
  * 
  *     def __cinit__(self, from_binary=None, from_text=None, side=None, bint use_sent_id=False):
  *         self.word2id = {"END_OF_FILE":0, "END_OF_LINE":1}             # <<<<<<<<<<<<<<
@@ -6793,12 +6188,12 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__END_OF_FILE), __pyx_int_0) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__END_OF_LINE), __pyx_int_1) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->word2id);
-  __Pyx_DECREF(__pyx_v_self->word2id);
-  __pyx_v_self->word2id = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id);
+  ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":19
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":19
  *     def __cinit__(self, from_binary=None, from_text=None, side=None, bint use_sent_id=False):
  *         self.word2id = {"END_OF_FILE":0, "END_OF_LINE":1}
  *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]             # <<<<<<<<<<<<<<
@@ -6806,7 +6201,7 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
  *         self.sent_id = IntList(1000,1000)
  */
   __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(((PyObject *)__pyx_n_s__END_OF_FILE));
   PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__END_OF_FILE));
   __Pyx_GIVEREF(((PyObject *)__pyx_n_s__END_OF_FILE));
@@ -6814,12 +6209,12 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_n_s__END_OF_LINE));
   __Pyx_GIVEREF(((PyObject *)__pyx_n_s__END_OF_LINE));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->id2word);
-  __Pyx_DECREF(__pyx_v_self->id2word);
-  __pyx_v_self->id2word = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word);
+  ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":20
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":20
  *         self.word2id = {"END_OF_FILE":0, "END_OF_LINE":1}
  *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]
  *         self.data = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -6829,12 +6224,12 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->data);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->data));
-  __pyx_v_self->data = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data));
+  ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":21
  *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]
  *         self.data = IntList(1000,1000)
  *         self.sent_id = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -6844,12 +6239,12 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->sent_id);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sent_id));
-  __pyx_v_self->sent_id = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id));
+  ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":22
  *         self.data = IntList(1000,1000)
  *         self.sent_id = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -6859,21 +6254,21 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->sent_index);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sent_index));
-  __pyx_v_self->sent_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index));
+  ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":23
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":23
  *         self.sent_id = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)
  *         self.use_sent_id = use_sent_id             # <<<<<<<<<<<<<<
  *         if from_binary:
  *             self.read_binary(from_binary)
  */
-  __pyx_v_self->use_sent_id = __pyx_v_use_sent_id;
+  ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->use_sent_id = __pyx_v_use_sent_id;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":24
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":24
  *         self.sent_index = IntList(1000,1000)
  *         self.use_sent_id = use_sent_id
  *         if from_binary:             # <<<<<<<<<<<<<<
@@ -6883,17 +6278,17 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_binary); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":25
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":25
  *         self.use_sent_id = use_sent_id
  *         if from_binary:
  *             self.read_binary(from_binary)             # <<<<<<<<<<<<<<
  *         elif from_text:
  *             if side:
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_from_binary);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_from_binary);
     __Pyx_GIVEREF(__pyx_v_from_binary);
@@ -6902,10 +6297,10 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":26
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":26
  *         if from_binary:
  *             self.read_binary(from_binary)
  *         elif from_text:             # <<<<<<<<<<<<<<
@@ -6915,7 +6310,7 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_text); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":27
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":27
  *             self.read_binary(from_binary)
  *         elif from_text:
  *             if side:             # <<<<<<<<<<<<<<
@@ -6925,18 +6320,16 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
     __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_side); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":28
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":28
  *         elif from_text:
  *             if side:
  *                 self.read_bitext(from_text, (0 if side == 'source' else 1))             # <<<<<<<<<<<<<<
  *             else:
  *                 self.read_text(from_text)
  */
-      __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_bitext); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_bitext); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_side, ((PyObject *)__pyx_n_s__source), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_2 = __Pyx_PyString_Equals(__pyx_v_side, ((PyObject *)__pyx_n_s__source), Py_EQ); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       if (__pyx_t_2) {
         __pyx_t_5 = 0;
       } else {
@@ -6945,7 +6338,7 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
       __pyx_t_3 = PyInt_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
       __Pyx_INCREF(__pyx_v_from_text);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_from_text);
       __Pyx_GIVEREF(__pyx_v_from_text);
@@ -6957,21 +6350,21 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      goto __pyx_L4;
+      goto __pyx_L7;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":30
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":30
  *                 self.read_bitext(from_text, (0 if side == 'source' else 1))
  *             else:
  *                 self.read_text(from_text)             # <<<<<<<<<<<<<<
  * 
  *     def __len__(self):
  */
-      __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_text); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_text); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
       __Pyx_INCREF(__pyx_v_from_text);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_from_text);
       __Pyx_GIVEREF(__pyx_v_from_text);
@@ -6981,10 +6374,10 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
       __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+    __pyx_L7:;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -6999,18 +6392,7 @@ static int __pyx_pf_3_sa_9DataArray___cinit__(struct __pyx_obj_3_sa_DataArray *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_ssize_t __pyx_pw_3_sa_9DataArray_3__len__(PyObject *__pyx_v_self); /*proto*/
-static Py_ssize_t __pyx_pw_3_sa_9DataArray_3__len__(PyObject *__pyx_v_self) {
-  Py_ssize_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_2__len__(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":32
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":32
  *                 self.read_text(from_text)
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -7018,7 +6400,8 @@ static Py_ssize_t __pyx_pw_3_sa_9DataArray_3__len__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_ssize_t __pyx_pf_3_sa_9DataArray_2__len__(struct __pyx_obj_3_sa_DataArray *__pyx_v_self) {
+static Py_ssize_t __pyx_pf_3_sa_9DataArray_1__len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_pf_3_sa_9DataArray_1__len__(PyObject *__pyx_v_self) {
   Py_ssize_t __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7026,16 +6409,16 @@ static Py_ssize_t __pyx_pf_3_sa_9DataArray_2__len__(struct __pyx_obj_3_sa_DataAr
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__len__", 0);
+  __Pyx_RefNannySetupContext("__len__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":33
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":33
  * 
  *     def __len__(self):
  *         return len(self.data)             # <<<<<<<<<<<<<<
  * 
  *     def getSentId(self, i):
  */
-  __pyx_t_1 = ((PyObject *)__pyx_v_self->data);
+  __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data);
   __Pyx_INCREF(__pyx_t_1);
   __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -7053,18 +6436,7 @@ static Py_ssize_t __pyx_pf_3_sa_9DataArray_2__len__(struct __pyx_obj_3_sa_DataAr
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_5getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_5getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSentId (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_4getSentId(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":35
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":35
  *         return len(self.data)
  * 
  *     def getSentId(self, i):             # <<<<<<<<<<<<<<
@@ -7072,7 +6444,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_5getSentId(PyObject *__pyx_v_self, PyO
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_4getSentId(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_9DataArray_2getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_2getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   Py_ssize_t __pyx_t_1;
@@ -7080,9 +6453,9 @@ static PyObject *__pyx_pf_3_sa_9DataArray_4getSentId(struct __pyx_obj_3_sa_DataA
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSentId", 0);
+  __Pyx_RefNannySetupContext("getSentId");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":36
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":36
  * 
  *     def getSentId(self, i):
  *         return self.sent_id.arr[i]             # <<<<<<<<<<<<<<
@@ -7091,7 +6464,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_4getSentId(struct __pyx_obj_3_sa_DataA
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->sent_id->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -7109,18 +6482,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_4getSentId(struct __pyx_obj_3_sa_DataA
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_7getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_7getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSent (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_6getSent(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":38
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":38
  *         return self.sent_id.arr[i]
  * 
  *     def getSent(self, i):             # <<<<<<<<<<<<<<
@@ -7128,7 +6490,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_7getSent(PyObject *__pyx_v_self, PyObj
  *         sent = []
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_9DataArray_3getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_3getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   int __pyx_v_start;
   int __pyx_v_stop;
   PyObject *__pyx_v_sent = NULL;
@@ -7142,10 +6505,10 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSent", 0);
+  __Pyx_RefNannySetupContext("getSent");
   __Pyx_INCREF(__pyx_v_i);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":40
  *     def getSent(self, i):
  *         cdef int j, start, stop
  *         sent = []             # <<<<<<<<<<<<<<
@@ -7153,11 +6516,11 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
  *         stop = self.sent_index.arr[i+1]
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_sent = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":41
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":41
  *         cdef int j, start, stop
  *         sent = []
  *         start = self.sent_index.arr[i]             # <<<<<<<<<<<<<<
@@ -7165,9 +6528,9 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
  *         for i from start <= i < stop:
  */
   __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_start = (__pyx_v_self->sent_index->arr[__pyx_t_2]);
+  __pyx_v_start = (((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index->arr[__pyx_t_2]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":42
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":42
  *         sent = []
  *         start = self.sent_index.arr[i]
  *         stop = self.sent_index.arr[i+1]             # <<<<<<<<<<<<<<
@@ -7178,9 +6541,9 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_stop = (__pyx_v_self->sent_index->arr[__pyx_t_2]);
+  __pyx_v_stop = (((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index->arr[__pyx_t_2]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":43
  *         start = self.sent_index.arr[i]
  *         stop = self.sent_index.arr[i+1]
  *         for i from start <= i < stop:             # <<<<<<<<<<<<<<
@@ -7195,22 +6558,25 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
     __pyx_v_i = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":44
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":44
  *         stop = self.sent_index.arr[i+1]
  *         for i from start <= i < stop:
  *             sent.append(self.id2word[self.data.arr[i]])             # <<<<<<<<<<<<<<
  *         return sent
  * 
  */
+    if (unlikely(((PyObject *)__pyx_v_sent) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_self->id2word, (__pyx_v_self->data->arr[__pyx_t_2]), sizeof(int), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetItemInt(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word, (((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data->arr[__pyx_t_2]), sizeof(int), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_5 = PyList_Append(__pyx_v_sent, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":43
  *         start = self.sent_index.arr[i]
  *         stop = self.sent_index.arr[i+1]
  *         for i from start <= i < stop:             # <<<<<<<<<<<<<<
@@ -7223,7 +6589,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
   __pyx_v_i = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":45
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":45
  *         for i from start <= i < stop:
  *             sent.append(self.id2word[self.data.arr[i]])
  *         return sent             # <<<<<<<<<<<<<<
@@ -7249,18 +6615,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_6getSent(struct __pyx_obj_3_sa_DataArr
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_9getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_9getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSentPos (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_8getSentPos(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_loc));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":47
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":47
  *         return sent
  * 
  *     def getSentPos(self, loc):             # <<<<<<<<<<<<<<
@@ -7268,7 +6623,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_9getSentPos(PyObject *__pyx_v_self, Py
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_8getSentPos(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_loc) {
+static PyObject *__pyx_pf_3_sa_9DataArray_4getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_4getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   Py_ssize_t __pyx_t_1;
@@ -7277,9 +6633,9 @@ static PyObject *__pyx_pf_3_sa_9DataArray_8getSentPos(struct __pyx_obj_3_sa_Data
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSentPos", 0);
+  __Pyx_RefNannySetupContext("getSentPos");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":48
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":48
  * 
  *     def getSentPos(self, loc):
  *         return loc - self.sent_index.arr[self.sent_id.arr[loc]]             # <<<<<<<<<<<<<<
@@ -7288,7 +6644,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_8getSentPos(struct __pyx_obj_3_sa_Data
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loc); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->sent_index->arr[(__pyx_v_self->sent_id->arr[__pyx_t_1])])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index->arr[(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id->arr[__pyx_t_1])])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyNumber_Subtract(__pyx_v_loc, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
@@ -7310,18 +6666,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_8getSentPos(struct __pyx_obj_3_sa_Data
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_11get_id(PyObject *__pyx_v_self, PyObject *__pyx_v_word); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_11get_id(PyObject *__pyx_v_self, PyObject *__pyx_v_word) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_id (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_10get_id(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_word));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":50
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":50
  *         return loc - self.sent_index.arr[self.sent_id.arr[loc]]
  * 
  *     def get_id(self, word):             # <<<<<<<<<<<<<<
@@ -7329,7 +6674,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_11get_id(PyObject *__pyx_v_self, PyObj
  *             self.word2id[word] = len(self.id2word)
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_10get_id(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_word) {
+static PyObject *__pyx_pf_3_sa_9DataArray_5get_id(PyObject *__pyx_v_self, PyObject *__pyx_v_word); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_5get_id(PyObject *__pyx_v_self, PyObject *__pyx_v_word) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7339,50 +6685,50 @@ static PyObject *__pyx_pf_3_sa_9DataArray_10get_id(struct __pyx_obj_3_sa_DataArr
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_id", 0);
+  __Pyx_RefNannySetupContext("get_id");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":51
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":51
  * 
  *     def get_id(self, word):
  *         if not word in self.word2id:             # <<<<<<<<<<<<<<
  *             self.word2id[word] = len(self.id2word)
  *             self.id2word.append(word)
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_word, __pyx_v_self->word2id, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PySequence_Contains(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id, __pyx_v_word))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = (!__pyx_t_1);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":52
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":52
  *     def get_id(self, word):
  *         if not word in self.word2id:
  *             self.word2id[word] = len(self.id2word)             # <<<<<<<<<<<<<<
  *             self.id2word.append(word)
  *         return self.word2id[word]
  */
-    __pyx_t_3 = __pyx_v_self->id2word;
+    __pyx_t_3 = ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word;
     __Pyx_INCREF(__pyx_t_3);
     __pyx_t_4 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    if (PyObject_SetItem(__pyx_v_self->word2id, __pyx_v_word, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetItem(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id, __pyx_v_word, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":53
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":53
  *         if not word in self.word2id:
  *             self.word2id[word] = len(self.id2word)
  *             self.id2word.append(word)             # <<<<<<<<<<<<<<
  *         return self.word2id[word]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_Append(__pyx_v_self->id2word, __pyx_v_word); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Append(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word, __pyx_v_word); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":54
  *             self.word2id[word] = len(self.id2word)
  *             self.id2word.append(word)
  *         return self.word2id[word]             # <<<<<<<<<<<<<<
@@ -7390,7 +6736,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_10get_id(struct __pyx_obj_3_sa_DataArr
  *     def get_word(self, id):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyObject_GetItem(__pyx_v_self->word2id, __pyx_v_word); if (!__pyx_t_3) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetItem(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id, __pyx_v_word); if (!__pyx_t_3) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -7408,18 +6754,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_10get_id(struct __pyx_obj_3_sa_DataArr
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_13get_word(PyObject *__pyx_v_self, PyObject *__pyx_v_id); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_13get_word(PyObject *__pyx_v_self, PyObject *__pyx_v_id) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_word (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_12get_word(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_id));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":56
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":56
  *         return self.word2id[word]
  * 
  *     def get_word(self, id):             # <<<<<<<<<<<<<<
@@ -7427,16 +6762,17 @@ static PyObject *__pyx_pw_3_sa_9DataArray_13get_word(PyObject *__pyx_v_self, PyO
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_12get_word(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_id) {
+static PyObject *__pyx_pf_3_sa_9DataArray_6get_word(PyObject *__pyx_v_self, PyObject *__pyx_v_id); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_6get_word(PyObject *__pyx_v_self, PyObject *__pyx_v_id) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_word", 0);
+  __Pyx_RefNannySetupContext("get_word");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":57
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":57
  * 
  *     def get_word(self, id):
  *         return self.id2word[id]             # <<<<<<<<<<<<<<
@@ -7444,7 +6780,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_12get_word(struct __pyx_obj_3_sa_DataA
  *     def write_text(self, char* filename):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyObject_GetItem(__pyx_v_self->id2word, __pyx_v_id); if (!__pyx_t_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetItem(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word, __pyx_v_id); if (!__pyx_t_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7462,28 +6798,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_12get_word(struct __pyx_obj_3_sa_DataA
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_15write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_15write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.DataArray.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray_14write_text(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":59
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":59
  *         return self.id2word[id]
  * 
  *     def write_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -7491,7 +6806,9 @@ static PyObject *__pyx_pw_3_sa_9DataArray_15write_text(PyObject *__pyx_v_self, P
  *             for w_id in self.data:
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_9DataArray_7write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_7write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
   PyObject *__pyx_v_w_id = NULL;
   PyObject *__pyx_r = NULL;
@@ -7502,10 +6819,10 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_7;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  int __pyx_t_9;
+  PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
@@ -7513,9 +6830,18 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_text", 0);
+  __Pyx_RefNannySetupContext("write_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.DataArray.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":60
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":60
  * 
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -7526,7 +6852,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -7538,160 +6864,153 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":61
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":61
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:
  *             for w_id in self.data:             # <<<<<<<<<<<<<<
  *                 if w_id > 1:
  *                     f.write("%s " % self.get_word(w_id))
  */
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->data)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->data))) {
-            __pyx_t_4 = ((PyObject *)__pyx_v_self->data); __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data))) {
+            __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data); __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(((PyObject *)__pyx_v_self->data)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++;
             } else {
-              __pyx_t_1 = __pyx_t_9(__pyx_t_4);
-              if (unlikely(!__pyx_t_1)) {
+              __pyx_t_2 = __pyx_t_8(__pyx_t_1);
+              if (unlikely(!__pyx_t_2)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_1);
+              __Pyx_GOTREF(__pyx_t_2);
             }
             __Pyx_XDECREF(__pyx_v_w_id);
-            __pyx_v_w_id = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_w_id = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":62
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":62
  *         with open(filename, "w") as f:
  *             for w_id in self.data:
  *                 if w_id > 1:             # <<<<<<<<<<<<<<
  *                     f.write("%s " % self.get_word(w_id))
  *                 if w_id == 1:
  */
-            __pyx_t_1 = PyObject_RichCompare(__pyx_v_w_id, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            if (__pyx_t_10) {
+            __pyx_t_2 = PyObject_RichCompare(__pyx_v_w_id, __pyx_int_1, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            if (__pyx_t_9) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":63
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":63
  *             for w_id in self.data:
  *                 if w_id > 1:
  *                     f.write("%s " % self.get_word(w_id))             # <<<<<<<<<<<<<<
  *                 if w_id == 1:
  *                     f.write("\n")
  */
-              __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_1);
-              __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_word); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_2);
-              __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_11);
+              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_word); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_10);
+              __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(((PyObject *)__pyx_t_11));
               __Pyx_INCREF(__pyx_v_w_id);
               PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_w_id);
               __Pyx_GIVEREF(__pyx_v_w_id);
-              __pyx_t_12 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_12 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
-              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
               __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
-              __pyx_t_11 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_13), __pyx_t_12); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_11 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_13), __pyx_t_12); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(((PyObject *)__pyx_t_11));
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-              __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_12);
+              __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(((PyObject *)__pyx_t_12));
               PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)__pyx_t_11));
               __Pyx_GIVEREF(((PyObject *)__pyx_t_11));
               __pyx_t_11 = 0;
-              __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_11 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_11);
-              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
               __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
               __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-              goto __pyx_L18;
+              goto __pyx_L19;
             }
-            __pyx_L18:;
+            __pyx_L19:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":64
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":64
  *                 if w_id > 1:
  *                     f.write("%s " % self.get_word(w_id))
  *                 if w_id == 1:             # <<<<<<<<<<<<<<
  *                     f.write("\n")
  * 
  */
-            __pyx_t_11 = PyObject_RichCompare(__pyx_v_w_id, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_11 = PyObject_RichCompare(__pyx_v_w_id, __pyx_int_1, Py_EQ); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_11);
+            __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-            if (__pyx_t_10) {
+            if (__pyx_t_9) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":65
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":65
  *                     f.write("%s " % self.get_word(w_id))
  *                 if w_id == 1:
  *                     f.write("\n")             # <<<<<<<<<<<<<<
  * 
  *     def read_text(self, char* filename):
  */
-              __pyx_t_11 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_11 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_11);
-              __pyx_t_12 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_k_tuple_15), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_12 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_k_tuple_15), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
               __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-              goto __pyx_L19;
+              goto __pyx_L20;
             }
-            __pyx_L19:;
+            __pyx_L20:;
           }
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
+        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":60
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":60
  * 
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -7700,75 +7019,75 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.DataArray.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_12, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_4);
+          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_12, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_12);
           __Pyx_GOTREF(__pyx_t_11);
-          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __Pyx_INCREF(__pyx_t_4);
-          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
-          __Pyx_GIVEREF(__pyx_t_4);
+          __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+          __Pyx_INCREF(__pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+          __Pyx_GIVEREF(__pyx_t_1);
           __Pyx_INCREF(__pyx_t_12);
-          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_12);
+          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_12);
           __Pyx_GIVEREF(__pyx_t_12);
           __Pyx_INCREF(__pyx_t_11);
-          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_11);
+          PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_11);
           __Pyx_GIVEREF(__pyx_t_11);
-          __pyx_t_13 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL);
+          __pyx_t_13 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_13);
-          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_13);
+          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_13);
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-          if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __pyx_t_14 = (!__pyx_t_10);
+          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __pyx_t_14 = (!__pyx_t_9);
           if (__pyx_t_14) {
-            __Pyx_GIVEREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_12);
             __Pyx_GIVEREF(__pyx_t_11);
-            __Pyx_ErrRestore(__pyx_t_4, __pyx_t_12, __pyx_t_11);
-            __pyx_t_4 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; 
-            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L22;
+            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_12, __pyx_t_11);
+            __pyx_t_1 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; 
+            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L23;
           }
-          __pyx_L22:;
-          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_L23:;
+          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_16, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_16, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L23;
-    __pyx_L3_error:;
+    goto __pyx_L24;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L23:;
+    __pyx_L24:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -7776,7 +7095,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_XDECREF(__pyx_t_11);
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_AddTraceback("_sa.DataArray.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -7789,28 +7108,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_14write_text(struct __pyx_obj_3_sa_Dat
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_17read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_17read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.DataArray.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray_16read_text(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":67
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":67
  *                     f.write("\n")
  * 
  *     def read_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -7818,7 +7116,9 @@ static PyObject *__pyx_pw_3_sa_9DataArray_17read_text(PyObject *__pyx_v_self, Py
  *             self.read_text_data(fp)
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_9DataArray_8read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_8read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_fp = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -7836,9 +7136,18 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_text", 0);
+  __Pyx_RefNannySetupContext("read_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.DataArray.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":68
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":68
  * 
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as fp:             # <<<<<<<<<<<<<<
@@ -7851,7 +7160,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
     __pyx_t_2 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
     __pyx_t_2 = 0;
@@ -7861,12 +7170,12 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____exit__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     /*try:*/ {
       {
         __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -7874,40 +7183,39 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
         __Pyx_XGOTREF(__pyx_t_6);
         __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_1);
-          __pyx_v_fp = __pyx_t_1;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_v_fp = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":69
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":69
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as fp:
  *             self.read_text_data(fp)             # <<<<<<<<<<<<<<
  * 
  *     def read_bitext(self, char* filename, int side):
  */
-          __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_text_data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_text_data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           __Pyx_INCREF(__pyx_v_fp);
-          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_fp);
+          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_fp);
           __Pyx_GIVEREF(__pyx_v_fp);
-          __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         }
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":68
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":68
  * 
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as fp:             # <<<<<<<<<<<<<<
@@ -7916,57 +7224,57 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.DataArray.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_8);
+          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_8));
+          __Pyx_INCREF(__pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
+          __Pyx_GIVEREF(__pyx_t_1);
           __Pyx_INCREF(__pyx_t_3);
-          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
+          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
           __Pyx_GIVEREF(__pyx_t_3);
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
           __pyx_t_10 = PyObject_Call(__pyx_t_4, __pyx_t_8, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_11 = (!__pyx_t_9);
           if (__pyx_t_11) {
+            __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_3);
             __Pyx_GIVEREF(__pyx_t_2);
-            __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1);
-            __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; 
-            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L18;
+            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_3, __pyx_t_2);
+            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; 
+            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L19;
           }
-          __pyx_L18:;
+          __pyx_L19:;
           __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
@@ -7980,11 +7288,11 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
         if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L19;
-    __pyx_L3_error:;
+    goto __pyx_L20;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L1_error;
-    __pyx_L19:;
+    __pyx_L20:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -8002,65 +7310,9 @@ static PyObject *__pyx_pf_3_sa_9DataArray_16read_text(struct __pyx_obj_3_sa_Data
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
+static PyObject *__pyx_gb_3_sa_11read_bitext_1generator6(struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_19read_bitext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_19read_bitext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  char *__pyx_v_filename;
-  int __pyx_v_side;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_bitext (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filename,&__pyx_n_s__side,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__side)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("read_bitext", 1, 2, 2, 1); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_bitext") < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_filename = PyBytes_AsString(values[0]); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_side = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_side == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_bitext", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.DataArray.read_bitext", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray_18read_bitext(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), __pyx_v_filename, __pyx_v_side);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":73
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":73
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:
  *             data = (line.split(' ||| ')[side] for line in fp)             # <<<<<<<<<<<<<<
@@ -8068,45 +7320,37 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_11read_bitext_genexpr(PyObject *__pyx_self) {
+static PyObject *__pyx_pf_3_sa_11read_bitext_genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_11read_bitext_genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("genexpr", 0);
+  __Pyx_RefNannySetupContext("genexpr");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *)__pyx_ptype_3_sa___pyx_scope_struct_2_genexpr->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_2_genexpr, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
-  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *) __pyx_self;
+  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *)__pyx_self;
   __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_9DataArray_11read_bitext_2generator6, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_self = __pyx_self;
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_11read_bitext_1generator6;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.DataArray.read_bitext.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_11read_bitext_1generator6(struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   PyObject *__pyx_t_1 = NULL;
   Py_ssize_t __pyx_t_2;
@@ -8114,8 +7358,8 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -8124,8 +7368,7 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
   }
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp)) { __Pyx_RaiseClosureNameError("fp"); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-  if (PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp)) {
+  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp)) { __Pyx_RaiseClosureNameError("fp"); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }if (PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp)) {
     __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_fp; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
@@ -8134,20 +7377,12 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -8181,7 +7416,7 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
@@ -8192,7 +7427,7 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -8201,13 +7436,12 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
   __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":71
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":71
  *             self.read_text_data(fp)
  * 
  *     def read_bitext(self, char* filename, int side):             # <<<<<<<<<<<<<<
@@ -8215,8 +7449,10 @@ static PyObject *__pyx_gb_3_sa_9DataArray_11read_bitext_2generator6(__pyx_Genera
  *             data = (line.split(' ||| ')[side] for line in fp)
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename, int __pyx_v_side) {
+static PyObject *__pyx_pf_3_sa_9DataArray_9read_bitext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_9read_bitext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *__pyx_cur_scope;
+  char *__pyx_v_filename;
   PyObject *__pyx_v_data = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -8234,16 +7470,60 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_bitext", 0);
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filename,&__pyx_n_s__side,0};
+  __Pyx_RefNannySetupContext("read_bitext");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *)__pyx_ptype_3_sa___pyx_scope_struct_1_read_bitext->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_1_read_bitext, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
-  __pyx_cur_scope->__pyx_v_side = __pyx_v_side;
+  {
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  0:
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename);
+        if (likely(values[0])) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__side);
+        if (likely(values[1])) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("read_bitext", 1, 2, 2, 1); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "read_bitext") < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_filename = PyBytes_AsString(values[0]); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_cur_scope->__pyx_v_side = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_cur_scope->__pyx_v_side == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("read_bitext", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.DataArray.read_bitext", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":72
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":72
  * 
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:             # <<<<<<<<<<<<<<
@@ -8256,7 +7536,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
     __pyx_t_2 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
     __pyx_t_2 = 0;
@@ -8266,12 +7546,12 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____exit__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     /*try:*/ {
       {
         __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -8279,53 +7559,52 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
         __Pyx_XGOTREF(__pyx_t_6);
         __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
-          __pyx_cur_scope->__pyx_v_fp = __pyx_t_1;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_GIVEREF(__pyx_t_2);
+          __pyx_cur_scope->__pyx_v_fp = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":73
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":73
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:
  *             data = (line.split(' ||| ')[side] for line in fp)             # <<<<<<<<<<<<<<
  *             self.read_text_data(data)
  * 
  */
-          __pyx_t_1 = __pyx_pf_3_sa_9DataArray_11read_bitext_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_v_data = __pyx_t_1;
-          __pyx_t_1 = 0;
+          __pyx_t_2 = __pyx_pf_3_sa_11read_bitext_genexpr(((PyObject*)__pyx_cur_scope), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+          __Pyx_GOTREF(__pyx_t_2);
+          __pyx_v_data = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":74
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":74
  *         with gzip_or_text(filename) as fp:
  *             data = (line.split(' ||| ')[side] for line in fp)
  *             self.read_text_data(data)             # <<<<<<<<<<<<<<
  * 
  *     def read_text_data(self, data):
  */
-          __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_text_data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_text_data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
           __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           __Pyx_INCREF(__pyx_v_data);
-          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_data);
+          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data);
           __Pyx_GIVEREF(__pyx_v_data);
-          __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         }
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        goto __pyx_L17_try_end;
+        __pyx_L10_error:;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":72
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":72
  * 
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:             # <<<<<<<<<<<<<<
@@ -8333,58 +7612,58 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
  *             self.read_text_data(data)
  */
         /*except:*/ {
-          __Pyx_AddTraceback("_sa.DataArray.read_bitext", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          __Pyx_AddTraceback("_sa.read_bitext", __pyx_clineno, __pyx_lineno, __pyx_filename);
+          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
+          __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_8);
+          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_8));
+          __Pyx_INCREF(__pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
+          __Pyx_GIVEREF(__pyx_t_1);
           __Pyx_INCREF(__pyx_t_3);
-          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
+          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
           __Pyx_GIVEREF(__pyx_t_3);
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
           __pyx_t_10 = PyObject_Call(__pyx_t_4, __pyx_t_8, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
           __pyx_t_11 = (!__pyx_t_9);
           if (__pyx_t_11) {
+            __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_3);
             __Pyx_GIVEREF(__pyx_t_2);
-            __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1);
-            __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; 
-            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L18;
+            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_3, __pyx_t_2);
+            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; 
+            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
+            goto __pyx_L20;
           }
-          __pyx_L18:;
+          __pyx_L20:;
           __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L11_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L12_except_error:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L11_exception_handled:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __pyx_L17_try_end:;
       }
     }
     /*finally:*/ {
@@ -8398,11 +7677,11 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
         if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L19;
-    __pyx_L3_error:;
+    goto __pyx_L21;
+    __pyx_L6_error:;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L1_error;
-    __pyx_L19:;
+    __pyx_L21:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -8422,18 +7701,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_18read_bitext(struct __pyx_obj_3_sa_Da
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_21read_text_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_21read_text_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_text_data (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_20read_text_data(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_data));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":76
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":76
  *             self.read_text_data(data)
  * 
  *     def read_text_data(self, data):             # <<<<<<<<<<<<<<
@@ -8441,7 +7709,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_21read_text_data(PyObject *__pyx_v_sel
  *         for line_num, line in enumerate(data):
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_data) {
+static PyObject *__pyx_pf_3_sa_9DataArray_10read_text_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_10read_text_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data) {
   int __pyx_v_word_count;
   PyObject *__pyx_v_line_num = NULL;
   PyObject *__pyx_v_line = NULL;
@@ -8461,9 +7730,9 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_text_data", 0);
+  __Pyx_RefNannySetupContext("read_text_data");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":77
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":77
  * 
  *     def read_text_data(self, data):
  *         cdef int word_count = 0             # <<<<<<<<<<<<<<
@@ -8472,7 +7741,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
  */
   __pyx_v_word_count = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":78
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":78
  *     def read_text_data(self, data):
  *         cdef int word_count = 0
  *         for line_num, line in enumerate(data):             # <<<<<<<<<<<<<<
@@ -8490,20 +7759,12 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
     __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
+    if (PyList_CheckExact(__pyx_t_2)) {
       if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++;
+    } else if (PyTuple_CheckExact(__pyx_t_2)) {
       if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++;
     } else {
       __pyx_t_5 = __pyx_t_4(__pyx_t_2);
       if (unlikely(!__pyx_t_5)) {
@@ -8527,7 +7788,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
     __pyx_t_1 = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":79
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":79
  *         cdef int word_count = 0
  *         for line_num, line in enumerate(data):
  *             self.sent_index.append(word_count)             # <<<<<<<<<<<<<<
@@ -8536,12 +7797,12 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
  */
     __pyx_t_5 = PyInt_FromLong(__pyx_v_word_count); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->sent_index), __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index), __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":80
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":80
  *         for line_num, line in enumerate(data):
  *             self.sent_index.append(word_count)
  *             for word in line.split():             # <<<<<<<<<<<<<<
@@ -8563,20 +7824,12 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     for (;;) {
-      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_6)) {
+      if (PyList_CheckExact(__pyx_t_6)) {
         if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
-      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_6)) {
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++;
+      } else if (PyTuple_CheckExact(__pyx_t_6)) {
         if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++;
       } else {
         __pyx_t_5 = __pyx_t_8(__pyx_t_6);
         if (unlikely(!__pyx_t_5)) {
@@ -8592,17 +7845,17 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
       __pyx_v_word = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":81
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":81
  *             self.sent_index.append(word_count)
  *             for word in line.split():
  *                 self.data.append(self.get_id(word))             # <<<<<<<<<<<<<<
  *                 if self.use_sent_id:
  *                     self.sent_id.append(line_num)
  */
-      __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_id); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_id); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_9));
       __Pyx_INCREF(__pyx_v_word);
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_word);
       __Pyx_GIVEREF(__pyx_v_word);
@@ -8610,35 +7863,35 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-      __pyx_t_9 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->data), __pyx_t_10); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data), __pyx_t_10); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":82
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":82
  *             for word in line.split():
  *                 self.data.append(self.get_id(word))
  *                 if self.use_sent_id:             # <<<<<<<<<<<<<<
  *                     self.sent_id.append(line_num)
  *                 word_count = word_count + 1
  */
-      if (__pyx_v_self->use_sent_id) {
+      if (((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->use_sent_id) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":83
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":83
  *                 self.data.append(self.get_id(word))
  *                 if self.use_sent_id:
  *                     self.sent_id.append(line_num)             # <<<<<<<<<<<<<<
  *                 word_count = word_count + 1
  *             self.data.append(1)
  */
-        __pyx_t_9 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->sent_id), __pyx_v_line_num); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id), __pyx_v_line_num); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        goto __pyx_L7;
+        goto __pyx_L9;
       }
-      __pyx_L7:;
+      __pyx_L9:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":84
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":84
  *                 if self.use_sent_id:
  *                     self.sent_id.append(line_num)
  *                 word_count = word_count + 1             # <<<<<<<<<<<<<<
@@ -8649,41 +7902,41 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":85
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":85
  *                     self.sent_id.append(line_num)
  *                 word_count = word_count + 1
  *             self.data.append(1)             # <<<<<<<<<<<<<<
  *             if self.use_sent_id:
  *                 self.sent_id.append(line_num)
  */
-    __pyx_t_6 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->data), __pyx_int_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data), __pyx_int_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":86
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":86
  *                 word_count = word_count + 1
  *             self.data.append(1)
  *             if self.use_sent_id:             # <<<<<<<<<<<<<<
  *                 self.sent_id.append(line_num)
  *             word_count = word_count + 1
  */
-    if (__pyx_v_self->use_sent_id) {
+    if (((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->use_sent_id) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":87
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":87
  *             self.data.append(1)
  *             if self.use_sent_id:
  *                 self.sent_id.append(line_num)             # <<<<<<<<<<<<<<
  *             word_count = word_count + 1
  *         self.data.append(0)
  */
-      __pyx_t_6 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->sent_id), __pyx_v_line_num); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id), __pyx_v_line_num); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      goto __pyx_L8;
+      goto __pyx_L10;
     }
-    __pyx_L8:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":88
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":88
  *             if self.use_sent_id:
  *                 self.sent_id.append(line_num)
  *             word_count = word_count + 1             # <<<<<<<<<<<<<<
@@ -8695,18 +7948,18 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":89
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":89
  *                 self.sent_id.append(line_num)
  *             word_count = word_count + 1
  *         self.data.append(0)             # <<<<<<<<<<<<<<
  *         self.sent_index.append(word_count)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->data), __pyx_int_0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data), __pyx_int_0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":90
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":90
  *             word_count = word_count + 1
  *         self.data.append(0)
  *         self.sent_index.append(word_count)             # <<<<<<<<<<<<<<
@@ -8715,7 +7968,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
  */
   __pyx_t_1 = PyInt_FromLong(__pyx_v_word_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->sent_index), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -8740,13 +7993,24 @@ static PyObject *__pyx_pf_3_sa_9DataArray_20read_text_data(struct __pyx_obj_3_sa
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_23read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_23read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":93
+ * 
+ * 
+ *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "r")
+ */
+
+static PyObject *__pyx_pf_3_sa_9DataArray_11read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_11read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read_binary");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -8756,26 +8020,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_23read_binary(PyObject *__pyx_v_self,
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray_22read_binary(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":93
- * 
- * 
- *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "r")
- */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_22read_binary(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":95
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":95
  *     def read_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -8784,16 +8030,16 @@ static PyObject *__pyx_pf_3_sa_9DataArray_22read_binary(struct __pyx_obj_3_sa_Da
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":96
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":96
  *         cdef FILE* f
  *         f = fopen(filename, "r")
  *         self.read_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_DataArray *)__pyx_v_self->__pyx_vtab)->read_handle(__pyx_v_self, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_DataArray *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":97
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":97
  *         f = fopen(filename, "r")
  *         self.read_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -8808,7 +8054,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_22read_binary(struct __pyx_obj_3_sa_Da
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":99
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":99
  *         fclose(f)
  * 
  *     cdef void read_handle(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -8819,7 +8065,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_22read_binary(struct __pyx_obj_3_sa_Da
 static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, FILE *__pyx_v_f) {
   int __pyx_v_num_words;
   int __pyx_v_word_len;
-  CYTHON_UNUSED unsigned int __pyx_v_i;
+  unsigned int __pyx_v_i;
   char *__pyx_v_word;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8831,9 +8077,9 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_handle", 0);
+  __Pyx_RefNannySetupContext("read_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":104
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":104
  *         cdef char* word
  * 
  *         self.data.read_handle(f)             # <<<<<<<<<<<<<<
@@ -8842,7 +8088,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->data->__pyx_vtab)->read_handle(__pyx_v_self->data, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":105
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":105
  * 
  *         self.data.read_handle(f)
  *         self.sent_index.read_handle(f)             # <<<<<<<<<<<<<<
@@ -8851,7 +8097,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sent_index->__pyx_vtab)->read_handle(__pyx_v_self->sent_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":106
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":106
  *         self.data.read_handle(f)
  *         self.sent_index.read_handle(f)
  *         self.sent_id.read_handle(f)             # <<<<<<<<<<<<<<
@@ -8860,7 +8106,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sent_id->__pyx_vtab)->read_handle(__pyx_v_self->sent_id, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":107
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":107
  *         self.sent_index.read_handle(f)
  *         self.sent_id.read_handle(f)
  *         fread(&(num_words), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -8869,7 +8115,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
   fread((&__pyx_v_num_words), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":108
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":108
  *         self.sent_id.read_handle(f)
  *         fread(&(num_words), sizeof(int), 1, f)
  *         for i in range(num_words):             # <<<<<<<<<<<<<<
@@ -8880,7 +8126,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_i = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":109
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":109
  *         fread(&(num_words), sizeof(int), 1, f)
  *         for i in range(num_words):
  *             fread(&(word_len), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -8889,7 +8135,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
     fread((&__pyx_v_word_len), (sizeof(int)), 1, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":110
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":110
  *         for i in range(num_words):
  *             fread(&(word_len), sizeof(int), 1, f)
  *             word = <char*> malloc (word_len * sizeof(char))             # <<<<<<<<<<<<<<
@@ -8898,7 +8144,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
     __pyx_v_word = ((char *)malloc((__pyx_v_word_len * (sizeof(char)))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":111
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":111
  *             fread(&(word_len), sizeof(int), 1, f)
  *             word = <char*> malloc (word_len * sizeof(char))
  *             fread(word, sizeof(char), word_len, f)             # <<<<<<<<<<<<<<
@@ -8907,7 +8153,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
  */
     fread(__pyx_v_word, (sizeof(char)), __pyx_v_word_len, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":112
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":112
  *             word = <char*> malloc (word_len * sizeof(char))
  *             fread(word, sizeof(char), word_len, f)
  *             self.word2id[word] = len(self.id2word)             # <<<<<<<<<<<<<<
@@ -8926,7 +8172,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":113
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":113
  *             fread(word, sizeof(char), word_len, f)
  *             self.word2id[word] = len(self.id2word)
  *             self.id2word.append(word)             # <<<<<<<<<<<<<<
@@ -8940,7 +8186,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":114
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":114
  *             self.word2id[word] = len(self.id2word)
  *             self.id2word.append(word)
  *             free(word)             # <<<<<<<<<<<<<<
@@ -8950,7 +8196,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
     free(__pyx_v_word);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":115
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":115
  *             self.id2word.append(word)
  *             free(word)
  *         if len(self.sent_id) == 0:             # <<<<<<<<<<<<<<
@@ -8964,7 +8210,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
   __pyx_t_6 = (__pyx_t_4 == 0);
   if (__pyx_t_6) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":116
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":116
  *             free(word)
  *         if len(self.sent_id) == 0:
  *             self.use_sent_id = False             # <<<<<<<<<<<<<<
@@ -8976,7 +8222,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":118
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":118
  *             self.use_sent_id = False
  *         else:
  *             self.use_sent_id = True             # <<<<<<<<<<<<<<
@@ -8996,7 +8242,7 @@ static void __pyx_f_3_sa_9DataArray_read_handle(struct __pyx_obj_3_sa_DataArray
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":120
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":120
  *             self.use_sent_id = True
  * 
  *     cdef void write_handle(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -9018,9 +8264,9 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_handle", 0);
+  __Pyx_RefNannySetupContext("write_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":124
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":124
  *         cdef int num_words
  * 
  *         self.data.write_handle(f)             # <<<<<<<<<<<<<<
@@ -9029,7 +8275,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->data->__pyx_vtab)->write_handle(__pyx_v_self->data, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":125
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":125
  * 
  *         self.data.write_handle(f)
  *         self.sent_index.write_handle(f)             # <<<<<<<<<<<<<<
@@ -9038,7 +8284,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sent_index->__pyx_vtab)->write_handle(__pyx_v_self->sent_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":126
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":126
  *         self.data.write_handle(f)
  *         self.sent_index.write_handle(f)
  *         self.sent_id.write_handle(f)             # <<<<<<<<<<<<<<
@@ -9047,7 +8293,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sent_id->__pyx_vtab)->write_handle(__pyx_v_self->sent_id, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":127
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":127
  *         self.sent_index.write_handle(f)
  *         self.sent_id.write_handle(f)
  *         num_words = len(self.id2word) - 2             # <<<<<<<<<<<<<<
@@ -9060,7 +8306,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_num_words = (__pyx_t_2 - 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":128
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":128
  *         self.sent_id.write_handle(f)
  *         num_words = len(self.id2word) - 2
  *         fwrite(&(num_words), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -9069,7 +8315,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
  */
   fwrite((&__pyx_v_num_words), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":129
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":129
  *         num_words = len(self.id2word) - 2
  *         fwrite(&(num_words), sizeof(int), 1, f)
  *         for word in self.id2word[2:]:             # <<<<<<<<<<<<<<
@@ -9088,20 +8334,12 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_3)) {
+    if (PyList_CheckExact(__pyx_t_3)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_3)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_3)) {
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_3)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++;
     } else {
       __pyx_t_1 = __pyx_t_4(__pyx_t_3);
       if (unlikely(!__pyx_t_1)) {
@@ -9117,7 +8355,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
     __pyx_v_word = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":130
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":130
  *         fwrite(&(num_words), sizeof(int), 1, f)
  *         for word in self.id2word[2:]:
  *             word_len = len(word) + 1             # <<<<<<<<<<<<<<
@@ -9127,7 +8365,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
     __pyx_t_5 = PyObject_Length(__pyx_v_word); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_word_len = (__pyx_t_5 + 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":131
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":131
  *         for word in self.id2word[2:]:
  *             word_len = len(word) + 1
  *             fwrite(&(word_len), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -9136,7 +8374,7 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
  */
     fwrite((&__pyx_v_word_len), (sizeof(int)), 1, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":132
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":132
  *             word_len = len(word) + 1
  *             fwrite(&(word_len), sizeof(int), 1, f)
  *             fwrite(<char *>word, sizeof(char), word_len, f)             # <<<<<<<<<<<<<<
@@ -9158,13 +8396,24 @@ static void __pyx_f_3_sa_9DataArray_write_handle(struct __pyx_obj_3_sa_DataArray
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_25write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_25write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":134
+ *             fwrite(<char *>word, sizeof(char), word_len, f)
+ * 
+ *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "w")
+ */
+
+static PyObject *__pyx_pf_3_sa_9DataArray_12write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_12write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write_binary");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -9174,26 +8423,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_25write_binary(PyObject *__pyx_v_self,
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray_24write_binary(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":134
- *             fwrite(<char *>word, sizeof(char), word_len, f)
- * 
- *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "w")
- */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_24write_binary(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":136
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":136
  *     def write_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -9202,16 +8433,16 @@ static PyObject *__pyx_pf_3_sa_9DataArray_24write_binary(struct __pyx_obj_3_sa_D
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":137
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":137
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         self.write_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_DataArray *)__pyx_v_self->__pyx_vtab)->write_handle(__pyx_v_self, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_DataArray *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":138
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":138
  *         f = fopen(filename, "w")
  *         self.write_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -9226,18 +8457,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_24write_binary(struct __pyx_obj_3_sa_D
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_27write_enhanced_handle(PyObject *__pyx_v_self, PyObject *__pyx_v_f); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_27write_enhanced_handle(PyObject *__pyx_v_self, PyObject *__pyx_v_f) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_enhanced_handle (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9DataArray_26write_enhanced_handle(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((PyObject *)__pyx_v_f));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":140
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":140
  *         fclose(f)
  * 
  *     def write_enhanced_handle(self, f):             # <<<<<<<<<<<<<<
@@ -9245,7 +8465,8 @@ static PyObject *__pyx_pw_3_sa_9DataArray_27write_enhanced_handle(PyObject *__py
  *             f.write("%d " %i)
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, PyObject *__pyx_v_f) {
+static PyObject *__pyx_pf_3_sa_9DataArray_13write_enhanced_handle(PyObject *__pyx_v_self, PyObject *__pyx_v_f); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_13write_enhanced_handle(PyObject *__pyx_v_self, PyObject *__pyx_v_f) {
   PyObject *__pyx_v_i = NULL;
   PyObject *__pyx_v_word = NULL;
   PyObject *__pyx_r = NULL;
@@ -9259,38 +8480,30 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_enhanced_handle", 0);
+  __Pyx_RefNannySetupContext("write_enhanced_handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":141
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":141
  * 
  *     def write_enhanced_handle(self, f):
  *         for i in self.data:             # <<<<<<<<<<<<<<
  *             f.write("%d " %i)
  *         f.write("\n")
  */
-  if (PyList_CheckExact(((PyObject *)__pyx_v_self->data)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->data))) {
-    __pyx_t_1 = ((PyObject *)__pyx_v_self->data); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
+  if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data))) {
+    __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_v_self->data)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->data)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -9306,7 +8519,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_v_i = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":142
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":142
  *     def write_enhanced_handle(self, f):
  *         for i in self.data:
  *             f.write("%d " %i)             # <<<<<<<<<<<<<<
@@ -9318,7 +8531,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
     __pyx_t_5 = 0;
@@ -9330,7 +8543,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":143
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":143
  *         for i in self.data:
  *             f.write("%d " %i)
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -9344,36 +8557,28 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":144
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":144
  *             f.write("%d " %i)
  *         f.write("\n")
  *         for i in self.sent_index:             # <<<<<<<<<<<<<<
  *             f.write("%d " %i)
  *         f.write("\n")
  */
-  if (PyList_CheckExact(((PyObject *)__pyx_v_self->sent_index)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->sent_index))) {
-    __pyx_t_5 = ((PyObject *)__pyx_v_self->sent_index); __Pyx_INCREF(__pyx_t_5); __pyx_t_2 = 0;
+  if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index))) {
+    __pyx_t_5 = ((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index); __Pyx_INCREF(__pyx_t_5); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_self->sent_index)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_index)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_3 = Py_TYPE(__pyx_t_5)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_5)) {
+    if (PyList_CheckExact(__pyx_t_5)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_5)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_5)) {
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_5)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++;
     } else {
       __pyx_t_1 = __pyx_t_3(__pyx_t_5);
       if (unlikely(!__pyx_t_1)) {
@@ -9389,7 +8594,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_v_i = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":145
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":145
  *         f.write("\n")
  *         for i in self.sent_index:
  *             f.write("%d " %i)             # <<<<<<<<<<<<<<
@@ -9401,7 +8606,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_6));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_6));
     __pyx_t_6 = 0;
@@ -9413,7 +8618,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":146
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":146
  *         for i in self.sent_index:
  *             f.write("%d " %i)
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -9427,36 +8632,28 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":147
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":147
  *             f.write("%d " %i)
  *         f.write("\n")
  *         for i in self.sent_id:             # <<<<<<<<<<<<<<
  *             f.write("%d " %i)
  *         f.write("\n")
  */
-  if (PyList_CheckExact(((PyObject *)__pyx_v_self->sent_id)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->sent_id))) {
-    __pyx_t_6 = ((PyObject *)__pyx_v_self->sent_id); __Pyx_INCREF(__pyx_t_6); __pyx_t_2 = 0;
+  if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id))) {
+    __pyx_t_6 = ((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id); __Pyx_INCREF(__pyx_t_6); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_6 = PyObject_GetIter(((PyObject *)__pyx_v_self->sent_id)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = -1; __pyx_t_6 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->sent_id)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_3 = Py_TYPE(__pyx_t_6)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_6)) {
+    if (PyList_CheckExact(__pyx_t_6)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_6)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_6)) {
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_6)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
     } else {
       __pyx_t_5 = __pyx_t_3(__pyx_t_6);
       if (unlikely(!__pyx_t_5)) {
@@ -9472,7 +8669,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_v_i = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":148
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":148
  *         f.write("\n")
  *         for i in self.sent_id:
  *             f.write("%d " %i)             # <<<<<<<<<<<<<<
@@ -9484,7 +8681,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_4));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
     __pyx_t_4 = 0;
@@ -9496,7 +8693,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":149
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":149
  *         for i in self.sent_id:
  *             f.write("%d " %i)
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -9510,36 +8707,28 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":150
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":150
  *             f.write("%d " %i)
  *         f.write("\n")
  *         for word in self.id2word:             # <<<<<<<<<<<<<<
  *             f.write("%s %d " % (word, self.word2id[word]))
  *         f.write("\n")
  */
-  if (PyList_CheckExact(__pyx_v_self->id2word) || PyTuple_CheckExact(__pyx_v_self->id2word)) {
-    __pyx_t_4 = __pyx_v_self->id2word; __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = 0;
+  if (PyList_CheckExact(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word) || PyTuple_CheckExact(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word)) {
+    __pyx_t_4 = ((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word; __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_self->id2word); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = -1; __pyx_t_4 = PyObject_GetIter(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->id2word); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = Py_TYPE(__pyx_t_4)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_4)) {
+    if (PyList_CheckExact(__pyx_t_4)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_4)) {
+      __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_4)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++;
     } else {
       __pyx_t_6 = __pyx_t_3(__pyx_t_4);
       if (unlikely(!__pyx_t_6)) {
@@ -9555,7 +8744,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __pyx_v_word = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":151
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":151
  *         f.write("\n")
  *         for word in self.id2word:
  *             f.write("%s %d " % (word, self.word2id[word]))             # <<<<<<<<<<<<<<
@@ -9564,10 +8753,10 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
  */
     __pyx_t_6 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_1 = PyObject_GetItem(__pyx_v_self->word2id, __pyx_v_word); if (!__pyx_t_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetItem(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self)->word2id, __pyx_v_word); if (!__pyx_t_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_INCREF(__pyx_v_word);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_word);
     __Pyx_GIVEREF(__pyx_v_word);
@@ -9578,7 +8767,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __pyx_t_1 = 0;
@@ -9590,7 +8779,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":152
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":152
  *         for word in self.id2word:
  *             f.write("%s %d " % (word, self.word2id[word]))
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -9621,28 +8810,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_26write_enhanced_handle(struct __pyx_o
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9DataArray_29write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9DataArray_29write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_enhanced (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.DataArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9DataArray_28write_enhanced(((struct __pyx_obj_3_sa_DataArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":154
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":154
  *         f.write("\n")
  * 
  *     def write_enhanced(self, char* filename):             # <<<<<<<<<<<<<<
@@ -9650,7 +8818,9 @@ static PyObject *__pyx_pw_3_sa_9DataArray_29write_enhanced(PyObject *__pyx_v_sel
  *             self.write_enhanced_handle(self, f)
  */
 
-static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa_DataArray *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_9DataArray_14write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9DataArray_14write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -9668,9 +8838,18 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_enhanced", 0);
+  __Pyx_RefNannySetupContext("write_enhanced");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.DataArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":155
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":155
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -9680,7 +8859,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -9692,54 +8871,53 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":156
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":156
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:
  *             self.write_enhanced_handle(self, f)             # <<<<<<<<<<<<<<
  */
-          __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s_27); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s_27); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __Pyx_INCREF(((PyObject *)__pyx_v_self));
-          PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-          __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+          __Pyx_INCREF(__pyx_v_self);
+          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
+          __Pyx_GIVEREF(__pyx_v_self);
           __Pyx_INCREF(__pyx_v_f);
-          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_f);
+          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_f);
           __Pyx_GIVEREF(__pyx_v_f);
-          __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":155
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":155
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -9747,75 +8925,75 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.DataArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_2, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(__pyx_t_7);
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GOTREF(__pyx_t_1);
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_8);
+          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_8));
+          __Pyx_INCREF(__pyx_t_7);
+          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
+          __Pyx_GIVEREF(__pyx_t_7);
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
           __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
           __Pyx_GIVEREF(__pyx_t_1);
-          __Pyx_INCREF(__pyx_t_4);
-          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_4);
-          __Pyx_GIVEREF(__pyx_t_4);
           __pyx_t_10 = PyObject_Call(__pyx_t_3, __pyx_t_8, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_11 = (!__pyx_t_9);
           if (__pyx_t_11) {
+            __Pyx_GIVEREF(__pyx_t_7);
             __Pyx_GIVEREF(__pyx_t_2);
             __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_GIVEREF(__pyx_t_4);
-            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_4);
-            __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_4 = 0; 
-            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L18;
+            __Pyx_ErrRestore(__pyx_t_7, __pyx_t_2, __pyx_t_1);
+            __pyx_t_7 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; 
+            {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L19;
           }
-          __pyx_L18:;
+          __pyx_L19:;
           __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_28, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_28, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L19;
-    __pyx_L3_error:;
+    goto __pyx_L20;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L19:;
+    __pyx_L20:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -9823,7 +9001,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("_sa.DataArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
@@ -9834,7 +9012,7 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":12
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":12
  *     cdef IntList sent_index
  * 
  *     cdef int link(self, int i, int j):             # <<<<<<<<<<<<<<
@@ -9842,12 +9020,12 @@ static PyObject *__pyx_pf_3_sa_9DataArray_28write_enhanced(struct __pyx_obj_3_sa
  *         return i*65536 + j
  */
 
-static int __pyx_f_3_sa_9Alignment_link(CYTHON_UNUSED struct __pyx_obj_3_sa_Alignment *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) {
+static int __pyx_f_3_sa_9Alignment_link(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("link", 0);
+  __Pyx_RefNannySetupContext("link");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":14
  *     cdef int link(self, int i, int j):
  *         """Integerizes an alignment link pair"""
  *         return i*65536 + j             # <<<<<<<<<<<<<<
@@ -9863,19 +9041,7 @@ static int __pyx_f_3_sa_9Alignment_link(CYTHON_UNUSED struct __pyx_obj_3_sa_Alig
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_1unlink(PyObject *__pyx_v_self, PyObject *__pyx_v_link); /*proto*/
-static char __pyx_doc_3_sa_9Alignment_unlink[] = "De-integerizes an alignment link pair";
-static PyObject *__pyx_pw_3_sa_9Alignment_1unlink(PyObject *__pyx_v_self, PyObject *__pyx_v_link) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("unlink (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9Alignment_unlink(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((PyObject *)__pyx_v_link));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":16
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":16
  *         return i*65536 + j
  * 
  *     def unlink(self, link):             # <<<<<<<<<<<<<<
@@ -9883,7 +9049,9 @@ static PyObject *__pyx_pw_3_sa_9Alignment_1unlink(PyObject *__pyx_v_self, PyObje
  *         return (link/65536, link%65536)
  */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_unlink(CYTHON_UNUSED struct __pyx_obj_3_sa_Alignment *__pyx_v_self, PyObject *__pyx_v_link) {
+static PyObject *__pyx_pf_3_sa_9Alignment_unlink(PyObject *__pyx_v_self, PyObject *__pyx_v_link); /*proto*/
+static char __pyx_doc_3_sa_9Alignment_unlink[] = "De-integerizes an alignment link pair";
+static PyObject *__pyx_pf_3_sa_9Alignment_unlink(PyObject *__pyx_v_self, PyObject *__pyx_v_link) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9892,9 +9060,9 @@ static PyObject *__pyx_pf_3_sa_9Alignment_unlink(CYTHON_UNUSED struct __pyx_obj_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("unlink", 0);
+  __Pyx_RefNannySetupContext("unlink");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":18
  *     def unlink(self, link):
  *         """De-integerizes an alignment link pair"""
  *         return (link/65536, link%65536)             # <<<<<<<<<<<<<<
@@ -9907,7 +9075,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_unlink(CYTHON_UNUSED struct __pyx_obj_
   __pyx_t_2 = PyNumber_Remainder(__pyx_v_link, __pyx_int_65536); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
@@ -9932,7 +9100,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_unlink(CYTHON_UNUSED struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":20
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":20
  *         return (link/65536, link%65536)
  * 
  *     cdef _unlink(self, int link, int* f, int* e):             # <<<<<<<<<<<<<<
@@ -9940,12 +9108,12 @@ static PyObject *__pyx_pf_3_sa_9Alignment_unlink(CYTHON_UNUSED struct __pyx_obj_
  *         e[0] = link%65536
  */
 
-static PyObject *__pyx_f_3_sa_9Alignment__unlink(CYTHON_UNUSED struct __pyx_obj_3_sa_Alignment *__pyx_v_self, int __pyx_v_link, int *__pyx_v_f, int *__pyx_v_e) {
+static PyObject *__pyx_f_3_sa_9Alignment__unlink(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, int __pyx_v_link, int *__pyx_v_f, int *__pyx_v_e) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_unlink", 0);
+  __Pyx_RefNannySetupContext("_unlink");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":21
  * 
  *     cdef _unlink(self, int link, int* f, int* e):
  *         f[0] = link/65536             # <<<<<<<<<<<<<<
@@ -9954,7 +9122,7 @@ static PyObject *__pyx_f_3_sa_9Alignment__unlink(CYTHON_UNUSED struct __pyx_obj_
  */
   (__pyx_v_f[0]) = __Pyx_div_long(__pyx_v_link, 65536);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":22
  *     cdef _unlink(self, int link, int* f, int* e):
  *         f[0] = link/65536
  *         e[0] = link%65536             # <<<<<<<<<<<<<<
@@ -9969,28 +9137,7 @@ static PyObject *__pyx_f_3_sa_9Alignment__unlink(CYTHON_UNUSED struct __pyx_obj_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_3get_sent_links(PyObject *__pyx_v_self, PyObject *__pyx_arg_sent_id); /*proto*/
-static PyObject *__pyx_pw_3_sa_9Alignment_3get_sent_links(PyObject *__pyx_v_self, PyObject *__pyx_arg_sent_id) {
-  int __pyx_v_sent_id;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_sent_links (wrapper)", 0);
-  assert(__pyx_arg_sent_id); {
-    __pyx_v_sent_id = __Pyx_PyInt_AsInt(__pyx_arg_sent_id); if (unlikely((__pyx_v_sent_id == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.Alignment.get_sent_links", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_2get_sent_links(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((int)__pyx_v_sent_id));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":24
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":24
  *         e[0] = link%65536
  * 
  *     def get_sent_links(self, int sent_id):             # <<<<<<<<<<<<<<
@@ -9998,7 +9145,9 @@ static PyObject *__pyx_pw_3_sa_9Alignment_3get_sent_links(PyObject *__pyx_v_self
  *         cdef int* arr
  */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, int __pyx_v_sent_id) {
+static PyObject *__pyx_pf_3_sa_9Alignment_1get_sent_links(PyObject *__pyx_v_self, PyObject *__pyx_arg_sent_id); /*proto*/
+static PyObject *__pyx_pf_3_sa_9Alignment_1get_sent_links(PyObject *__pyx_v_self, PyObject *__pyx_arg_sent_id) {
+  int __pyx_v_sent_id;
   struct __pyx_obj_3_sa_IntList *__pyx_v_sent_links = 0;
   int *__pyx_v_arr;
   int __pyx_v_arr_len;
@@ -10008,9 +9157,18 @@ static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_sent_links", 0);
+  __Pyx_RefNannySetupContext("get_sent_links");
+  assert(__pyx_arg_sent_id); {
+    __pyx_v_sent_id = __Pyx_PyInt_AsInt(__pyx_arg_sent_id); if (unlikely((__pyx_v_sent_id == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.Alignment.get_sent_links", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":28
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":28
  *         cdef int* arr
  *         cdef int arr_len
  *         sent_links = IntList()             # <<<<<<<<<<<<<<
@@ -10022,16 +9180,16 @@ static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_
   __pyx_v_sent_links = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":29
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":29
  *         cdef int arr_len
  *         sent_links = IntList()
  *         arr = self._get_sent_links(sent_id, &arr_len)             # <<<<<<<<<<<<<<
  *         sent_links._extend_arr(arr, arr_len*2)
  *         free(arr)
  */
-  __pyx_v_arr = ((struct __pyx_vtabstruct_3_sa_Alignment *)__pyx_v_self->__pyx_vtab)->_get_sent_links(__pyx_v_self, __pyx_v_sent_id, (&__pyx_v_arr_len));
+  __pyx_v_arr = ((struct __pyx_vtabstruct_3_sa_Alignment *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->__pyx_vtab)->_get_sent_links(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), __pyx_v_sent_id, (&__pyx_v_arr_len));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":30
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":30
  *         sent_links = IntList()
  *         arr = self._get_sent_links(sent_id, &arr_len)
  *         sent_links._extend_arr(arr, arr_len*2)             # <<<<<<<<<<<<<<
@@ -10040,7 +9198,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sent_links->__pyx_vtab)->_extend_arr(__pyx_v_sent_links, __pyx_v_arr, (__pyx_v_arr_len * 2));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":31
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":31
  *         arr = self._get_sent_links(sent_id, &arr_len)
  *         sent_links._extend_arr(arr, arr_len*2)
  *         free(arr)             # <<<<<<<<<<<<<<
@@ -10049,7 +9207,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_
  */
   free(__pyx_v_arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":32
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":32
  *         sent_links._extend_arr(arr, arr_len*2)
  *         free(arr)
  *         return sent_links             # <<<<<<<<<<<<<<
@@ -10074,7 +9232,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_2get_sent_links(struct __pyx_obj_3_sa_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":34
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":34
  *         return sent_links
  * 
  *     cdef int* _get_sent_links(self, int sent_id, int* num_links):             # <<<<<<<<<<<<<<
@@ -10094,9 +9252,9 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("_get_sent_links", 0);
+  __Pyx_RefNannySetupContext("_get_sent_links");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":37
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":37
  *         cdef int* sent_links
  *         cdef int i, start, end
  *         start = self.sent_index.arr[sent_id]             # <<<<<<<<<<<<<<
@@ -10105,7 +9263,7 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
  */
   __pyx_v_start = (__pyx_v_self->sent_index->arr[__pyx_v_sent_id]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":38
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":38
  *         cdef int i, start, end
  *         start = self.sent_index.arr[sent_id]
  *         end = self.sent_index.arr[sent_id+1]             # <<<<<<<<<<<<<<
@@ -10114,7 +9272,7 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
  */
   __pyx_v_end = (__pyx_v_self->sent_index->arr[(__pyx_v_sent_id + 1)]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":39
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":39
  *         start = self.sent_index.arr[sent_id]
  *         end = self.sent_index.arr[sent_id+1]
  *         num_links[0] = end - start             # <<<<<<<<<<<<<<
@@ -10123,7 +9281,7 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
  */
   (__pyx_v_num_links[0]) = (__pyx_v_end - __pyx_v_start);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":40
  *         end = self.sent_index.arr[sent_id+1]
  *         num_links[0] = end - start
  *         sent_links = <int*> malloc(2*num_links[0]*sizeof(int))             # <<<<<<<<<<<<<<
@@ -10132,7 +9290,7 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
  */
   __pyx_v_sent_links = ((int *)malloc(((2 * (__pyx_v_num_links[0])) * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":41
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":41
  *         num_links[0] = end - start
  *         sent_links = <int*> malloc(2*num_links[0]*sizeof(int))
  *         for i from 0 <= i < num_links[0]:             # <<<<<<<<<<<<<<
@@ -10142,7 +9300,7 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
   __pyx_t_1 = (__pyx_v_num_links[0]);
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":42
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":42
  *         sent_links = <int*> malloc(2*num_links[0]*sizeof(int))
  *         for i from 0 <= i < num_links[0]:
  *             self._unlink(self.links.arr[start + i], sent_links + (2*i), sent_links + (2*i) + 1)             # <<<<<<<<<<<<<<
@@ -10154,7 +9312,7 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":43
  *         for i from 0 <= i < num_links[0]:
  *             self._unlink(self.links.arr[start + i], sent_links + (2*i), sent_links + (2*i) + 1)
  *         return sent_links             # <<<<<<<<<<<<<<
@@ -10175,38 +9333,43 @@ static int *__pyx_f_3_sa_9Alignment__get_sent_links(struct __pyx_obj_3_sa_Alignm
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9Alignment_5__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_9Alignment_5__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_from_binary = 0;
-  PyObject *__pyx_v_from_text = 0;
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_binary,&__pyx_n_s__from_text,0};
-    PyObject* values[2] = {0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":45
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":45
  *         return sent_links
  * 
  *     def __cinit__(self, from_binary=None, from_text=None):             # <<<<<<<<<<<<<<
  *         self.links = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)
  */
+
+static int __pyx_pf_3_sa_9Alignment_2__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_9Alignment_2__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_from_binary = 0;
+  PyObject *__pyx_v_from_text = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_binary,&__pyx_n_s__from_text,0};
+  __Pyx_RefNannySetupContext("__cinit__");
+  {
+    PyObject* values[2] = {0,0};
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__from_binary);
@@ -10219,7 +9382,7 @@ static int __pyx_pw_3_sa_9Alignment_5__cinit__(PyObject *__pyx_v_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -10240,24 +9403,8 @@ static int __pyx_pw_3_sa_9Alignment_5__cinit__(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_4__cinit__(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), __pyx_v_from_binary, __pyx_v_from_text);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_from_text) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":46
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":46
  * 
  *     def __cinit__(self, from_binary=None, from_text=None):
  *         self.links = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -10267,12 +9414,12 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_k_tuple_29), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->links);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->links));
-  __pyx_v_self->links = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links));
+  ((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":47
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":47
  *     def __cinit__(self, from_binary=None, from_text=None):
  *         self.links = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -10282,12 +9429,12 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_k_tuple_30), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->sent_index);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sent_index));
-  __pyx_v_self->sent_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index));
+  ((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":48
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":48
  *         self.links = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)
  *         if from_binary:             # <<<<<<<<<<<<<<
@@ -10297,17 +9444,17 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_binary); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":49
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":49
  *         self.sent_index = IntList(1000,1000)
  *         if from_binary:
  *             self.read_binary(from_binary)             # <<<<<<<<<<<<<<
  *         elif from_text:
  *             self.read_text(from_text)
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_from_binary);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_from_binary);
     __Pyx_GIVEREF(__pyx_v_from_binary);
@@ -10316,10 +9463,10 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":50
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":50
  *         if from_binary:
  *             self.read_binary(from_binary)
  *         elif from_text:             # <<<<<<<<<<<<<<
@@ -10329,17 +9476,17 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_text); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":51
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":51
  *             self.read_binary(from_binary)
  *         elif from_text:
  *             self.read_text(from_text)             # <<<<<<<<<<<<<<
  * 
  *     def read_text(self, char* filename):
  */
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_text); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_text); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_from_text);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_from_text);
     __Pyx_GIVEREF(__pyx_v_from_text);
@@ -10348,9 +9495,9 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -10365,28 +9512,7 @@ static int __pyx_pf_3_sa_9Alignment_4__cinit__(struct __pyx_obj_3_sa_Alignment *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_7read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9Alignment_7read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.Alignment.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_6read_text(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":53
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":53
  *             self.read_text(from_text)
  * 
  *     def read_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -10394,7 +9520,9 @@ static PyObject *__pyx_pw_3_sa_9Alignment_7read_text(PyObject *__pyx_v_self, PyO
  *             for line in f:
  */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_9Alignment_3read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9Alignment_3read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
   PyObject *__pyx_v_line = NULL;
   PyObject *__pyx_v_pairs = NULL;
@@ -10426,9 +9554,18 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_text", 0);
+  __Pyx_RefNannySetupContext("read_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.Alignment.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":54
  * 
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as f:             # <<<<<<<<<<<<<<
@@ -10441,7 +9578,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
     __pyx_t_2 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
     __pyx_t_2 = 0;
@@ -10451,12 +9588,12 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____exit__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     /*try:*/ {
       {
         __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -10464,11 +9601,10 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
         __Pyx_XGOTREF(__pyx_t_6);
         __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_1);
-          __pyx_v_f = __pyx_t_1;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_v_f = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":55
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":55
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as f:
  *             for line in f:             # <<<<<<<<<<<<<<
@@ -10476,78 +9612,70 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
  *                 pairs = line.split()
  */
           if (PyList_CheckExact(__pyx_v_f) || PyTuple_CheckExact(__pyx_v_f)) {
-            __pyx_t_1 = __pyx_v_f; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
+            __pyx_t_2 = __pyx_v_f; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
             __pyx_t_9 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext;
+            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++;
+            } else if (PyTuple_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++;
             } else {
-              __pyx_t_2 = __pyx_t_9(__pyx_t_1);
-              if (unlikely(!__pyx_t_2)) {
+              __pyx_t_3 = __pyx_t_9(__pyx_t_2);
+              if (unlikely(!__pyx_t_3)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_2);
+              __Pyx_GOTREF(__pyx_t_3);
             }
             __Pyx_XDECREF(__pyx_v_line);
-            __pyx_v_line = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_line = __pyx_t_3;
+            __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":56
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":56
  *         with gzip_or_text(filename) as f:
  *             for line in f:
  *                 self.sent_index.append(len(self.links))             # <<<<<<<<<<<<<<
  *                 pairs = line.split()
  *                 for pair in pairs:
  */
-            __pyx_t_2 = ((PyObject *)__pyx_v_self->links);
-            __Pyx_INCREF(__pyx_t_2);
-            __pyx_t_10 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_3 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->sent_index), __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_3 = ((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links);
+            __Pyx_INCREF(__pyx_t_3);
+            __pyx_t_10 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_3);
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __pyx_t_1 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index), __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":57
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":57
  *             for line in f:
  *                 self.sent_index.append(len(self.links))
  *                 pairs = line.split()             # <<<<<<<<<<<<<<
  *                 for pair in pairs:
  *                     (i, j) = map(int, pair.split('-'))
  */
-            __pyx_t_3 = PyObject_GetAttr(__pyx_v_line, __pyx_n_s__split); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_1 = PyObject_GetAttr(__pyx_v_line, __pyx_n_s__split); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_XDECREF(__pyx_v_pairs);
-            __pyx_v_pairs = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_pairs = __pyx_t_3;
+            __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":58
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":58
  *                 self.sent_index.append(len(self.links))
  *                 pairs = line.split()
  *                 for pair in pairs:             # <<<<<<<<<<<<<<
@@ -10555,173 +9683,158 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
  *                     self.links.append(self.link(i, j))
  */
             if (PyList_CheckExact(__pyx_v_pairs) || PyTuple_CheckExact(__pyx_v_pairs)) {
-              __pyx_t_2 = __pyx_v_pairs; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
+              __pyx_t_3 = __pyx_v_pairs; __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = 0;
               __pyx_t_11 = NULL;
             } else {
-              __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_pairs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_2);
-              __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext;
+              __pyx_t_10 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_pairs); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext;
             }
             for (;;) {
-              if (!__pyx_t_11 && PyList_CheckExact(__pyx_t_2)) {
-                if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                #else
-                __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                #endif
-              } else if (!__pyx_t_11 && PyTuple_CheckExact(__pyx_t_2)) {
-                if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                #else
-                __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                #endif
+              if (PyList_CheckExact(__pyx_t_3)) {
+                if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_3)) break;
+                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++;
+              } else if (PyTuple_CheckExact(__pyx_t_3)) {
+                if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++;
               } else {
-                __pyx_t_3 = __pyx_t_11(__pyx_t_2);
-                if (unlikely(!__pyx_t_3)) {
+                __pyx_t_1 = __pyx_t_11(__pyx_t_3);
+                if (unlikely(!__pyx_t_1)) {
                   if (PyErr_Occurred()) {
                     if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                    else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                    else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                   }
                   break;
                 }
-                __Pyx_GOTREF(__pyx_t_3);
+                __Pyx_GOTREF(__pyx_t_1);
               }
               __Pyx_XDECREF(__pyx_v_pair);
-              __pyx_v_pair = __pyx_t_3;
-              __pyx_t_3 = 0;
+              __pyx_v_pair = __pyx_t_1;
+              __pyx_t_1 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":59
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":59
  *                 pairs = line.split()
  *                 for pair in pairs:
  *                     (i, j) = map(int, pair.split('-'))             # <<<<<<<<<<<<<<
  *                     self.links.append(self.link(i, j))
  *             self.sent_index.append(len(self.links))
  */
-              __pyx_t_3 = PyObject_GetAttr(__pyx_v_pair, __pyx_n_s__split); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_3);
-              __pyx_t_12 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_k_tuple_32), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_1 = PyObject_GetAttr(__pyx_v_pair, __pyx_n_s__split); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_12 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_32), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-              __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_3);
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+              __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(((PyObject *)__pyx_t_1));
               __Pyx_INCREF(((PyObject *)((PyObject*)(&PyInt_Type))));
-              PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)(&PyInt_Type))));
+              PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PyInt_Type))));
               __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyInt_Type))));
-              PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_12);
+              PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_12);
               __Pyx_GIVEREF(__pyx_t_12);
               __pyx_t_12 = 0;
-              __pyx_t_12 = PyObject_Call(__pyx_builtin_map, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_12 = PyObject_Call(__pyx_builtin_map, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
-              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+              __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
               if ((likely(PyTuple_CheckExact(__pyx_t_12))) || (PyList_CheckExact(__pyx_t_12))) {
                 PyObject* sequence = __pyx_t_12;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                Py_ssize_t size = Py_SIZE(sequence);
-                #else
-                Py_ssize_t size = PySequence_Size(sequence);
-                #endif
-                if (unlikely(size != 2)) {
-                  if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-                  else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                  {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                }
-                #if CYTHON_COMPILING_IN_CPYTHON
                 if (likely(PyTuple_CheckExact(sequence))) {
-                  __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+                  if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                    if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                    else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                  }
+                  __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
                   __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); 
                 } else {
-                  __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
+                  if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                    if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                    else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                  }
+                  __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
                   __pyx_t_13 = PyList_GET_ITEM(sequence, 1); 
                 }
-                __Pyx_INCREF(__pyx_t_3);
+                __Pyx_INCREF(__pyx_t_1);
                 __Pyx_INCREF(__pyx_t_13);
-                #else
-                __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                #endif
                 __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-              } else
-              {
+              } else {
                 Py_ssize_t index = -1;
-                __pyx_t_14 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                __pyx_t_14 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 __Pyx_GOTREF(__pyx_t_14);
                 __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                 __pyx_t_15 = Py_TYPE(__pyx_t_14)->tp_iternext;
-                index = 0; __pyx_t_3 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_3)) goto __pyx_L20_unpacking_failed;
-                __Pyx_GOTREF(__pyx_t_3);
-                index = 1; __pyx_t_13 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_13)) goto __pyx_L20_unpacking_failed;
+                index = 0; __pyx_t_1 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_1)) goto __pyx_L21_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_1);
+                index = 1; __pyx_t_13 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_13)) goto __pyx_L21_unpacking_failed;
                 __Pyx_GOTREF(__pyx_t_13);
-                if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_14), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                __pyx_t_15 = NULL;
+                if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_14), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-                goto __pyx_L21_unpacking_done;
-                __pyx_L20_unpacking_failed:;
+                goto __pyx_L22_unpacking_done;
+                __pyx_L21_unpacking_failed:;
                 __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-                __pyx_t_15 = NULL;
-                if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-                {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                __pyx_L21_unpacking_done:;
+                if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+                {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                __pyx_L22_unpacking_done:;
               }
               __Pyx_XDECREF(__pyx_v_i);
-              __pyx_v_i = __pyx_t_3;
-              __pyx_t_3 = 0;
+              __pyx_v_i = __pyx_t_1;
+              __pyx_t_1 = 0;
               __Pyx_XDECREF(__pyx_v_j);
               __pyx_v_j = __pyx_t_13;
               __pyx_t_13 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":60
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":60
  *                 for pair in pairs:
  *                     (i, j) = map(int, pair.split('-'))
  *                     self.links.append(self.link(i, j))             # <<<<<<<<<<<<<<
  *             self.sent_index.append(len(self.links))
  * 
  */
-              __pyx_t_16 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_17 = __Pyx_PyInt_AsInt(__pyx_v_j); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_12 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_Alignment *)__pyx_v_self->__pyx_vtab)->link(__pyx_v_self, __pyx_t_16, __pyx_t_17)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_16 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __pyx_t_17 = __Pyx_PyInt_AsInt(__pyx_v_j); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __pyx_t_12 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_Alignment *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->__pyx_vtab)->link(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), __pyx_t_16, __pyx_t_17)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
-              __pyx_t_13 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->links), __pyx_t_12); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_13 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links), __pyx_t_12); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_13);
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
               __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
             }
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           }
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":61
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":61
  *                     (i, j) = map(int, pair.split('-'))
  *                     self.links.append(self.link(i, j))
  *             self.sent_index.append(len(self.links))             # <<<<<<<<<<<<<<
  * 
  *     def read_binary(self, char* filename):
  */
-          __pyx_t_1 = ((PyObject *)__pyx_v_self->links);
-          __Pyx_INCREF(__pyx_t_1);
-          __pyx_t_8 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_2 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->sent_index), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = ((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links);
+          __Pyx_INCREF(__pyx_t_2);
+          __pyx_t_8 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index), __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         }
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
-        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":54
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":54
  * 
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as f:             # <<<<<<<<<<<<<<
@@ -10730,57 +9843,57 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.Alignment.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_13) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_13) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(__pyx_t_3);
           __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_13);
-          __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_12);
+          __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_12));
+          __Pyx_INCREF(__pyx_t_3);
+          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_3);
+          __Pyx_GIVEREF(__pyx_t_3);
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
           __Pyx_INCREF(__pyx_t_13);
           PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_13);
           __Pyx_GIVEREF(__pyx_t_13);
           __pyx_t_19 = PyObject_Call(__pyx_t_4, __pyx_t_12, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_19);
           __pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_19);
           __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
-          if (unlikely(__pyx_t_18 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_18 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_20 = (!__pyx_t_18);
           if (__pyx_t_20) {
+            __Pyx_GIVEREF(__pyx_t_3);
             __Pyx_GIVEREF(__pyx_t_2);
-            __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_13);
-            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_13);
-            __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_13 = 0; 
-            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L24;
+            __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_13);
+            __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_13 = 0; 
+            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L25;
           }
-          __pyx_L24:;
+          __pyx_L25:;
           __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
@@ -10794,11 +9907,11 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
         if (unlikely(__pyx_t_20 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L25;
-    __pyx_L3_error:;
+    goto __pyx_L26;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L1_error;
-    __pyx_L25:;
+    __pyx_L26:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -10824,13 +9937,24 @@ static PyObject *__pyx_pf_3_sa_9Alignment_6read_text(struct __pyx_obj_3_sa_Align
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_9read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9Alignment_9read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":63
+ *             self.sent_index.append(len(self.links))
+ * 
+ *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "r")
+ */
+
+static PyObject *__pyx_pf_3_sa_9Alignment_4read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9Alignment_4read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read_binary");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -10840,26 +9964,8 @@ static PyObject *__pyx_pw_3_sa_9Alignment_9read_binary(PyObject *__pyx_v_self, P
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_8read_binary(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":63
- *             self.sent_index.append(len(self.links))
- * 
- *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "r")
- */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_8read_binary(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":65
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":65
  *     def read_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -10868,25 +9974,25 @@ static PyObject *__pyx_pf_3_sa_9Alignment_8read_binary(struct __pyx_obj_3_sa_Ali
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":66
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":66
  *         cdef FILE* f
  *         f = fopen(filename, "r")
  *         self.links.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.sent_index.read_handle(f)
  *         fclose(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->links->__pyx_vtab)->read_handle(__pyx_v_self->links, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":67
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":67
  *         f = fopen(filename, "r")
  *         self.links.read_handle(f)
  *         self.sent_index.read_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sent_index->__pyx_vtab)->read_handle(__pyx_v_self->sent_index, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":68
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":68
  *         self.links.read_handle(f)
  *         self.sent_index.read_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -10901,28 +10007,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_8read_binary(struct __pyx_obj_3_sa_Ali
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_11write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9Alignment_11write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.Alignment.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_10write_text(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":70
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":70
  *         fclose(f)
  * 
  *     def write_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -10930,7 +10015,9 @@ static PyObject *__pyx_pw_3_sa_9Alignment_11write_text(PyObject *__pyx_v_self, P
  *             sent_num = 0
  */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_9Alignment_5write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9Alignment_5write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
   PyObject *__pyx_v_sent_num = NULL;
   PyObject *__pyx_v_i = NULL;
@@ -10943,9 +10030,9 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
+  Py_ssize_t __pyx_t_7;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
   PyObject *__pyx_t_12 = NULL;
@@ -10955,9 +10042,18 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_text", 0);
+  __Pyx_RefNannySetupContext("write_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.Alignment.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":71
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":71
  * 
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -10968,7 +10064,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -10980,24 +10076,23 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":72
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":72
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:
  *             sent_num = 0             # <<<<<<<<<<<<<<
@@ -11007,7 +10102,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
           __Pyx_INCREF(__pyx_int_0);
           __pyx_v_sent_num = __pyx_int_0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":73
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":73
  *         with open(filename, "w") as f:
  *             sent_num = 0
  *             for i, link in enumerate(self.links):             # <<<<<<<<<<<<<<
@@ -11015,54 +10110,46 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
  *                     f.write("\n")
  */
           __Pyx_INCREF(__pyx_int_0);
-          __pyx_t_4 = __pyx_int_0;
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->links)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->links))) {
-            __pyx_t_1 = ((PyObject *)__pyx_v_self->links); __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          __pyx_t_1 = __pyx_int_0;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links))) {
+            __pyx_t_2 = ((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links); __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_v_self->links)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_9 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++;
             } else {
-              __pyx_t_2 = __pyx_t_9(__pyx_t_1);
-              if (unlikely(!__pyx_t_2)) {
+              __pyx_t_9 = __pyx_t_8(__pyx_t_2);
+              if (unlikely(!__pyx_t_9)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_2);
+              __Pyx_GOTREF(__pyx_t_9);
             }
             __Pyx_XDECREF(__pyx_v_link);
-            __pyx_v_link = __pyx_t_2;
-            __pyx_t_2 = 0;
-            __Pyx_INCREF(__pyx_t_4);
+            __pyx_v_link = __pyx_t_9;
+            __pyx_t_9 = 0;
+            __Pyx_INCREF(__pyx_t_1);
             __Pyx_XDECREF(__pyx_v_i);
-            __pyx_v_i = __pyx_t_4;
-            __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __Pyx_DECREF(__pyx_t_4);
-            __pyx_t_4 = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_i = __pyx_t_1;
+            __pyx_t_9 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
+            __Pyx_DECREF(__pyx_t_1);
+            __pyx_t_1 = __pyx_t_9;
+            __pyx_t_9 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":74
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":74
  *             sent_num = 0
  *             for i, link in enumerate(self.links):
  *                 while i >= self.sent_index[sent_num]:             # <<<<<<<<<<<<<<
@@ -11070,106 +10157,107 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
  *                     sent_num = sent_num + 1
  */
             while (1) {
-              __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->sent_index), __pyx_v_sent_num); if (!__pyx_t_2) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_2);
-              __pyx_t_10 = PyObject_RichCompare(__pyx_v_i, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-              __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_9 = PyObject_GetItem(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index), __pyx_v_sent_num); if (!__pyx_t_9) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_9);
+              __pyx_t_10 = PyObject_RichCompare(__pyx_v_i, __pyx_t_9, Py_GE); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_10);
+              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+              __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
               if (!__pyx_t_11) break;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":75
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":75
  *             for i, link in enumerate(self.links):
  *                 while i >= self.sent_index[sent_num]:
  *                     f.write("\n")             # <<<<<<<<<<<<<<
  *                     sent_num = sent_num + 1
  *                 f.write("%d-%d " % self.unlink(link))
  */
-              __pyx_t_10 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_10 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_10);
-              __pyx_t_2 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_k_tuple_34), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_9 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_k_tuple_34), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_9);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":76
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":76
  *                 while i >= self.sent_index[sent_num]:
  *                     f.write("\n")
  *                     sent_num = sent_num + 1             # <<<<<<<<<<<<<<
  *                 f.write("%d-%d " % self.unlink(link))
  *             f.write("\n")
  */
-              __pyx_t_2 = PyNumber_Add(__pyx_v_sent_num, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_9 = PyNumber_Add(__pyx_v_sent_num, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_9);
               __Pyx_DECREF(__pyx_v_sent_num);
-              __pyx_v_sent_num = __pyx_t_2;
-              __pyx_t_2 = 0;
+              __pyx_v_sent_num = __pyx_t_9;
+              __pyx_t_9 = 0;
             }
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":77
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":77
  *                     f.write("\n")
  *                     sent_num = sent_num + 1
  *                 f.write("%d-%d " % self.unlink(link))             # <<<<<<<<<<<<<<
  *             f.write("\n")
  * 
  */
-            __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_10 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__unlink); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_9 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
+            __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__unlink); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_12);
+            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_12));
             __Pyx_INCREF(__pyx_v_link);
             PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_link);
             __Pyx_GIVEREF(__pyx_v_link);
-            __pyx_t_13 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_13 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_13);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
             __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
-            __pyx_t_12 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_35), __pyx_t_13); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_12 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_35), __pyx_t_13); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(((PyObject *)__pyx_t_12));
             __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-            __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_13);
+            __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_13));
             PyTuple_SET_ITEM(__pyx_t_13, 0, ((PyObject *)__pyx_t_12));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_12));
             __pyx_t_12 = 0;
-            __pyx_t_12 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_13), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_12 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_13), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_12);
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
           }
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":78
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":78
  *                     sent_num = sent_num + 1
  *                 f.write("%d-%d " % self.unlink(link))
  *             f.write("\n")             # <<<<<<<<<<<<<<
  * 
  *     def write_binary(self, char* filename):
  */
-          __pyx_t_4 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_k_tuple_36), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_36), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
         __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":71
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":71
  * 
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -11178,75 +10266,75 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.Alignment.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_12) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_12) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GOTREF(__pyx_t_1);
-          __Pyx_GOTREF(__pyx_t_4);
           __Pyx_GOTREF(__pyx_t_12);
-          __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_13);
+          __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_13));
+          __Pyx_INCREF(__pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_2);
+          __Pyx_GIVEREF(__pyx_t_2);
           __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1);
           __Pyx_GIVEREF(__pyx_t_1);
-          __Pyx_INCREF(__pyx_t_4);
-          PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_4);
-          __Pyx_GIVEREF(__pyx_t_4);
           __Pyx_INCREF(__pyx_t_12);
           PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_12);
           __Pyx_GIVEREF(__pyx_t_12);
           __pyx_t_14 = PyObject_Call(__pyx_t_3, __pyx_t_13, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_14);
           __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_14);
           __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_15 = (!__pyx_t_11);
           if (__pyx_t_15) {
+            __Pyx_GIVEREF(__pyx_t_2);
             __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_GIVEREF(__pyx_t_4);
             __Pyx_GIVEREF(__pyx_t_12);
-            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_4, __pyx_t_12);
-            __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_12 = 0; 
-            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L22;
+            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_12);
+            __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_12 = 0; 
+            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L23;
           }
-          __pyx_L22:;
+          __pyx_L23:;
           __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_37, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_37, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_15 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L23;
-    __pyx_L3_error:;
+    goto __pyx_L24;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L23:;
+    __pyx_L24:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -11254,7 +10342,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_XDECREF(__pyx_t_10);
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_XDECREF(__pyx_t_13);
@@ -11270,13 +10358,24 @@ static PyObject *__pyx_pf_3_sa_9Alignment_10write_text(struct __pyx_obj_3_sa_Ali
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_13write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9Alignment_13write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":80
+ *             f.write("\n")
+ * 
+ *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "w")
+ */
+
+static PyObject *__pyx_pf_3_sa_9Alignment_6write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9Alignment_6write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write_binary");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -11286,26 +10385,8 @@ static PyObject *__pyx_pw_3_sa_9Alignment_13write_binary(PyObject *__pyx_v_self,
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_12write_binary(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":80
- *             f.write("\n")
- * 
- *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "w")
- */
-
-static PyObject *__pyx_pf_3_sa_9Alignment_12write_binary(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":82
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":82
  *     def write_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -11314,25 +10395,25 @@ static PyObject *__pyx_pf_3_sa_9Alignment_12write_binary(struct __pyx_obj_3_sa_A
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":83
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":83
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         self.links.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.sent_index.write_handle(f)
  *         fclose(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->links->__pyx_vtab)->write_handle(__pyx_v_self->links, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":84
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":84
  *         f = fopen(filename, "w")
  *         self.links.write_handle(f)
  *         self.sent_index.write_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sent_index->__pyx_vtab)->write_handle(__pyx_v_self->sent_index, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":85
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":85
  *         self.links.write_handle(f)
  *         self.sent_index.write_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -11347,28 +10428,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_12write_binary(struct __pyx_obj_3_sa_A
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_15write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_9Alignment_15write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_enhanced (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.Alignment.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9Alignment_14write_enhanced(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":87
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":87
  *         fclose(f)
  * 
  *     def write_enhanced(self, char* filename):             # <<<<<<<<<<<<<<
@@ -11376,9 +10436,11 @@ static PyObject *__pyx_pw_3_sa_9Alignment_15write_enhanced(PyObject *__pyx_v_sel
  *             sent_num = 1
  */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_9Alignment_7write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_9Alignment_7write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
-  CYTHON_UNUSED long __pyx_v_sent_num;
+  long __pyx_v_sent_num;
   PyObject *__pyx_v_link = NULL;
   PyObject *__pyx_v_i = NULL;
   PyObject *__pyx_r = NULL;
@@ -11389,9 +10451,9 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
+  Py_ssize_t __pyx_t_7;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
   PyObject *__pyx_t_12 = NULL;
@@ -11399,9 +10461,18 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_enhanced", 0);
+  __Pyx_RefNannySetupContext("write_enhanced");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.Alignment.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":88
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":88
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -11412,7 +10483,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -11424,24 +10495,23 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":89
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":89
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:
  *             sent_num = 1             # <<<<<<<<<<<<<<
@@ -11450,183 +10520,167 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
  */
           __pyx_v_sent_num = 1;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":90
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":90
  *         with open(filename, "w") as f:
  *             sent_num = 1
  *             for link in self.links:             # <<<<<<<<<<<<<<
  *                 f.write("%d " % link)
  *             f.write("\n")
  */
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->links)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->links))) {
-            __pyx_t_4 = ((PyObject *)__pyx_v_self->links); __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links))) {
+            __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links); __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(((PyObject *)__pyx_v_self->links)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++;
             } else {
-              __pyx_t_1 = __pyx_t_9(__pyx_t_4);
-              if (unlikely(!__pyx_t_1)) {
+              __pyx_t_2 = __pyx_t_8(__pyx_t_1);
+              if (unlikely(!__pyx_t_2)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_1);
+              __Pyx_GOTREF(__pyx_t_2);
             }
             __Pyx_XDECREF(__pyx_v_link);
-            __pyx_v_link = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_link = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":91
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":91
  *             sent_num = 1
  *             for link in self.links:
  *                 f.write("%d " % link)             # <<<<<<<<<<<<<<
  *             f.write("\n")
  *             for i in self.sent_index:
  */
-            __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_link); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-            __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_10);
-            PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_2));
-            __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
-            __pyx_t_2 = 0;
-            __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_2);
-            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+            __pyx_t_9 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_link); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_9));
+            __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
+            PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_9));
+            __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
+            __pyx_t_9 = 0;
+            __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           }
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":92
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":92
  *             for link in self.links:
  *                 f.write("%d " % link)
  *             f.write("\n")             # <<<<<<<<<<<<<<
  *             for i in self.sent_index:
  *                 f.write("%d " % i)
  */
-          __pyx_t_4 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_k_tuple_38), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_38), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":93
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":93
  *                 f.write("%d " % link)
  *             f.write("\n")
  *             for i in self.sent_index:             # <<<<<<<<<<<<<<
  *                 f.write("%d " % i)
  *             f.write("\n")
  */
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->sent_index)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->sent_index))) {
-            __pyx_t_2 = ((PyObject *)__pyx_v_self->sent_index); __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index))) {
+            __pyx_t_9 = ((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index); __Pyx_INCREF(__pyx_t_9); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self->sent_index)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_9 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
+            __pyx_t_8 = Py_TYPE(__pyx_t_9)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_9)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_9)) break;
+              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_9)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
+              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++;
             } else {
-              __pyx_t_4 = __pyx_t_9(__pyx_t_2);
-              if (unlikely(!__pyx_t_4)) {
+              __pyx_t_1 = __pyx_t_8(__pyx_t_9);
+              if (unlikely(!__pyx_t_1)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GOTREF(__pyx_t_1);
             }
             __Pyx_XDECREF(__pyx_v_i);
-            __pyx_v_i = __pyx_t_4;
-            __pyx_t_4 = 0;
+            __pyx_v_i = __pyx_t_1;
+            __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":94
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":94
  *             f.write("\n")
  *             for i in self.sent_index:
  *                 f.write("%d " % i)             # <<<<<<<<<<<<<<
  *             f.write("\n")
  * 
  */
-            __pyx_t_4 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
-            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_1);
-            PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_10));
+            __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
+            __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+            PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_10));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
             __pyx_t_10 = 0;
-            __pyx_t_10 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           }
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":95
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":95
  *             for i in self.sent_index:
  *                 f.write("%d " % i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
  * 
  *     def alignment(self, i):
  */
-          __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_10 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_39), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_9 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_9);
+          __pyx_t_10 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_k_tuple_39), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":88
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":88
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -11635,75 +10689,75 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.Alignment.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_2, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_9, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GOTREF(__pyx_t_9);
           __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_4);
+          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
           __Pyx_INCREF(__pyx_t_10);
-          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10);
+          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10);
           __Pyx_GIVEREF(__pyx_t_10);
+          __Pyx_INCREF(__pyx_t_9);
+          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_9);
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
-          __pyx_t_12 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL);
+          __pyx_t_12 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_12);
           __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_13 = (!__pyx_t_11);
           if (__pyx_t_13) {
             __Pyx_GIVEREF(__pyx_t_10);
+            __Pyx_GIVEREF(__pyx_t_9);
             __Pyx_GIVEREF(__pyx_t_2);
-            __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_ErrRestore(__pyx_t_10, __pyx_t_2, __pyx_t_1);
-            __pyx_t_10 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; 
-            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L22;
+            __Pyx_ErrRestore(__pyx_t_10, __pyx_t_9, __pyx_t_2);
+            __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_2 = 0; 
+            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L23;
           }
-          __pyx_L22:;
-          __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+          __pyx_L23:;
+          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_40, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_40, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L23;
-    __pyx_L3_error:;
+    goto __pyx_L24;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L23:;
+    __pyx_L24:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -11711,7 +10765,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("_sa.Alignment.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
@@ -11724,19 +10778,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_14write_enhanced(struct __pyx_obj_3_sa
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9Alignment_17alignment(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static char __pyx_doc_3_sa_9Alignment_16alignment[] = "Return all (e,f) pairs for sentence i";
-static PyObject *__pyx_pw_3_sa_9Alignment_17alignment(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("alignment (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9Alignment_16alignment(((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":97
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":97
  *             f.write("\n")
  * 
  *     def alignment(self, i):             # <<<<<<<<<<<<<<
@@ -11744,7 +10786,9 @@ static PyObject *__pyx_pw_3_sa_9Alignment_17alignment(PyObject *__pyx_v_self, Py
  *         cdef int j, start, end
  */
 
-static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alignment *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_9Alignment_8alignment(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static char __pyx_doc_3_sa_9Alignment_8alignment[] = "Return all (e,f) pairs for sentence i";
+static PyObject *__pyx_pf_3_sa_9Alignment_8alignment(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   int __pyx_v_j;
   int __pyx_v_start;
   int __pyx_v_end;
@@ -11760,9 +10804,9 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("alignment", 0);
+  __Pyx_RefNannySetupContext("alignment");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":100
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":100
  *         """Return all (e,f) pairs for sentence i"""
  *         cdef int j, start, end
  *         result = []             # <<<<<<<<<<<<<<
@@ -11770,11 +10814,11 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
  *         end = self.sent_index.arr[i+1]
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_result = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":101
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":101
  *         cdef int j, start, end
  *         result = []
  *         start = self.sent_index.arr[i]             # <<<<<<<<<<<<<<
@@ -11782,9 +10826,9 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
  *         for j from start <= j < end:
  */
   __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_start = (__pyx_v_self->sent_index->arr[__pyx_t_2]);
+  __pyx_v_start = (((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index->arr[__pyx_t_2]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":102
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":102
  *         result = []
  *         start = self.sent_index.arr[i]
  *         end = self.sent_index.arr[i+1]             # <<<<<<<<<<<<<<
@@ -11795,9 +10839,9 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_end = (__pyx_v_self->sent_index->arr[__pyx_t_2]);
+  __pyx_v_end = (((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->sent_index->arr[__pyx_t_2]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":103
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":103
  *         start = self.sent_index.arr[i]
  *         end = self.sent_index.arr[i+1]
  *         for j from start <= j < end:             # <<<<<<<<<<<<<<
@@ -11807,18 +10851,21 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
   __pyx_t_3 = __pyx_v_end;
   for (__pyx_v_j = __pyx_v_start; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":104
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":104
  *         end = self.sent_index.arr[i+1]
  *         for j from start <= j < end:
  *             result.append(self.unlink(self.links.arr[j]))             # <<<<<<<<<<<<<<
  *         return result
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__unlink); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(((PyObject *)__pyx_v_result) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__unlink); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = PyInt_FromLong((__pyx_v_self->links->arr[__pyx_v_j])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyInt_FromLong((((struct __pyx_obj_3_sa_Alignment *)__pyx_v_self)->links->arr[__pyx_v_j])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
@@ -11830,7 +10877,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":105
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":105
  *         for j from start <= j < end:
  *             result.append(self.unlink(self.links.arr[j]))
  *         return result             # <<<<<<<<<<<<<<
@@ -11855,7 +10902,7 @@ static PyObject *__pyx_pf_3_sa_9Alignment_16alignment(struct __pyx_obj_3_sa_Alig
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":15
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":15
  *     int val
  * 
  * cdef _node* new_node(int key):             # <<<<<<<<<<<<<<
@@ -11867,9 +10914,9 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
   struct __pyx_t_3_sa__node *__pyx_v_n;
   struct __pyx_t_3_sa__node *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("new_node", 0);
+  __Pyx_RefNannySetupContext("new_node");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":17
  * cdef _node* new_node(int key):
  *     cdef _node* n
  *     n = <_node*> malloc(sizeof(_node))             # <<<<<<<<<<<<<<
@@ -11878,7 +10925,7 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
  */
   __pyx_v_n = ((struct __pyx_t_3_sa__node *)malloc((sizeof(struct __pyx_t_3_sa__node))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":18
  *     cdef _node* n
  *     n = <_node*> malloc(sizeof(_node))
  *     n.smaller = NULL             # <<<<<<<<<<<<<<
@@ -11887,7 +10934,7 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
  */
   __pyx_v_n->smaller = NULL;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":19
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":19
  *     n = <_node*> malloc(sizeof(_node))
  *     n.smaller = NULL
  *     n.bigger = NULL             # <<<<<<<<<<<<<<
@@ -11896,7 +10943,7 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
  */
   __pyx_v_n->bigger = NULL;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":20
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":20
  *     n.smaller = NULL
  *     n.bigger = NULL
  *     n.key = key             # <<<<<<<<<<<<<<
@@ -11905,7 +10952,7 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
  */
   __pyx_v_n->key = __pyx_v_key;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":21
  *     n.bigger = NULL
  *     n.key = key
  *     n.val = 0             # <<<<<<<<<<<<<<
@@ -11914,7 +10961,7 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
  */
   __pyx_v_n->val = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":22
  *     n.key = key
  *     n.val = 0
  *     return n             # <<<<<<<<<<<<<<
@@ -11930,7 +10977,7 @@ static struct __pyx_t_3_sa__node *__pyx_f_3_sa_new_node(int __pyx_v_key) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":25
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":25
  * 
  * 
  * cdef del_node(_node* n):             # <<<<<<<<<<<<<<
@@ -11946,9 +10993,9 @@ static PyObject *__pyx_f_3_sa_del_node(struct __pyx_t_3_sa__node *__pyx_v_n) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("del_node", 0);
+  __Pyx_RefNannySetupContext("del_node");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":26
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":26
  * 
  * cdef del_node(_node* n):
  *     if n.smaller != NULL:             # <<<<<<<<<<<<<<
@@ -11958,7 +11005,7 @@ static PyObject *__pyx_f_3_sa_del_node(struct __pyx_t_3_sa__node *__pyx_v_n) {
   __pyx_t_1 = (__pyx_v_n->smaller != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":27
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":27
  * cdef del_node(_node* n):
  *     if n.smaller != NULL:
  *         del_node(n.smaller)             # <<<<<<<<<<<<<<
@@ -11972,7 +11019,7 @@ static PyObject *__pyx_f_3_sa_del_node(struct __pyx_t_3_sa__node *__pyx_v_n) {
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":28
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":28
  *     if n.smaller != NULL:
  *         del_node(n.smaller)
  *     if n.bigger != NULL:             # <<<<<<<<<<<<<<
@@ -11982,7 +11029,7 @@ static PyObject *__pyx_f_3_sa_del_node(struct __pyx_t_3_sa__node *__pyx_v_n) {
   __pyx_t_1 = (__pyx_v_n->bigger != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":29
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":29
  *         del_node(n.smaller)
  *     if n.bigger != NULL:
  *         del_node(n.bigger)             # <<<<<<<<<<<<<<
@@ -11996,7 +11043,7 @@ static PyObject *__pyx_f_3_sa_del_node(struct __pyx_t_3_sa__node *__pyx_v_n) {
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":30
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":30
  *     if n.bigger != NULL:
  *         del_node(n.bigger)
  *     free(n)             # <<<<<<<<<<<<<<
@@ -12017,7 +11064,7 @@ static PyObject *__pyx_f_3_sa_del_node(struct __pyx_t_3_sa__node *__pyx_v_n) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":32
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":32
  *     free(n)
  * 
  * cdef int* get_val(_node* n, int key):             # <<<<<<<<<<<<<<
@@ -12029,9 +11076,9 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
   int *__pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("get_val", 0);
+  __Pyx_RefNannySetupContext("get_val");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":33
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":33
  * 
  * cdef int* get_val(_node* n, int key):
  *     if key == n.key:             # <<<<<<<<<<<<<<
@@ -12041,7 +11088,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
   __pyx_t_1 = (__pyx_v_key == __pyx_v_n->key);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":34
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":34
  * cdef int* get_val(_node* n, int key):
  *     if key == n.key:
  *         return &n.val             # <<<<<<<<<<<<<<
@@ -12053,7 +11100,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
     goto __pyx_L3;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":35
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":35
  *     if key == n.key:
  *         return &n.val
  *     elif key < n.key:             # <<<<<<<<<<<<<<
@@ -12063,7 +11110,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
   __pyx_t_1 = (__pyx_v_key < __pyx_v_n->key);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":36
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":36
  *         return &n.val
  *     elif key < n.key:
  *         if n.smaller == NULL:             # <<<<<<<<<<<<<<
@@ -12073,7 +11120,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
     __pyx_t_1 = (__pyx_v_n->smaller == NULL);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":37
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":37
  *     elif key < n.key:
  *         if n.smaller == NULL:
  *             n.smaller = new_node(key)             # <<<<<<<<<<<<<<
@@ -12082,7 +11129,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
  */
       __pyx_v_n->smaller = __pyx_f_3_sa_new_node(__pyx_v_key);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":38
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":38
  *         if n.smaller == NULL:
  *             n.smaller = new_node(key)
  *             return &(n.smaller.val)             # <<<<<<<<<<<<<<
@@ -12095,7 +11142,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
     }
     __pyx_L4:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":39
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":39
  *             n.smaller = new_node(key)
  *             return &(n.smaller.val)
  *         return get_val(n.smaller, key)             # <<<<<<<<<<<<<<
@@ -12108,7 +11155,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":41
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":41
  *         return get_val(n.smaller, key)
  *     else:
  *         if n.bigger == NULL:             # <<<<<<<<<<<<<<
@@ -12118,7 +11165,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
     __pyx_t_1 = (__pyx_v_n->bigger == NULL);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":42
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":42
  *     else:
  *         if n.bigger == NULL:
  *             n.bigger = new_node(key)             # <<<<<<<<<<<<<<
@@ -12127,7 +11174,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
  */
       __pyx_v_n->bigger = __pyx_f_3_sa_new_node(__pyx_v_key);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":43
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":43
  *         if n.bigger == NULL:
  *             n.bigger = new_node(key)
  *             return &(n.bigger.val)             # <<<<<<<<<<<<<<
@@ -12140,7 +11187,7 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
     }
     __pyx_L5:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":44
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":44
  *             n.bigger = new_node(key)
  *             return &(n.bigger.val)
  *         return get_val(n.bigger, key)             # <<<<<<<<<<<<<<
@@ -12158,9 +11205,16 @@ static int *__pyx_f_3_sa_get_val(struct __pyx_t_3_sa__node *__pyx_v_n, int __pyx
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":54
+ *     cdef id2eword, id2fword, eword2id, fword2id
+ * 
+ *     def __cinit__(self, from_text=None, from_data=False, from_binary=None,             # <<<<<<<<<<<<<<
+ *             earray=None, fsarray=None, alignment=None):
+ *         self.id2eword = []
+ */
+
+static int __pyx_pf_3_sa_5BiLex___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_5BiLex___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_from_text = 0;
   PyObject *__pyx_v_from_data = 0;
   PyObject *__pyx_v_from_binary = 0;
@@ -12169,23 +11223,23 @@ static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__p
   PyObject *__pyx_v_alignment = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_text,&__pyx_n_s__from_data,&__pyx_n_s__from_binary,&__pyx_n_s__earray,&__pyx_n_s__fsarray,&__pyx_n_s__alignment,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_text,&__pyx_n_s__from_data,&__pyx_n_s__from_binary,&__pyx_n_s__earray,&__pyx_n_s__fsarray,&__pyx_n_s__alignment,0};
     PyObject* values[6] = {0,0,0,0,0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":54
- *     cdef id2eword, id2fword, eword2id, fword2id
- * 
- *     def __cinit__(self, from_text=None, from_data=False, from_binary=None,             # <<<<<<<<<<<<<<
- *             earray=None, fsarray=None, alignment=None):
- *         self.id2eword = []
- */
     values[0] = ((PyObject *)Py_None);
     values[1] = __pyx_k_41;
     values[2] = ((PyObject *)Py_None);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":55
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":55
  * 
  *     def __cinit__(self, from_text=None, from_data=False, from_binary=None,
  *             earray=None, fsarray=None, alignment=None):             # <<<<<<<<<<<<<<
@@ -12197,8 +11251,7 @@ static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__p
     values[5] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
@@ -12209,7 +11262,7 @@ static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__p
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__from_text);
@@ -12242,7 +11295,7 @@ static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -12271,33 +11324,8 @@ static int __pyx_pw_3_sa_5BiLex_1__cinit__(PyObject *__pyx_v_self, PyObject *__p
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex___cinit__(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_v_from_text, __pyx_v_from_data, __pyx_v_from_binary, __pyx_v_earray, __pyx_v_fsarray, __pyx_v_alignment);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":54
- *     cdef id2eword, id2fword, eword2id, fword2id
- * 
- *     def __cinit__(self, from_text=None, from_data=False, from_binary=None,             # <<<<<<<<<<<<<<
- *             earray=None, fsarray=None, alignment=None):
- *         self.id2eword = []
- */
-
-static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_from_text, PyObject *__pyx_v_from_data, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_earray, PyObject *__pyx_v_fsarray, PyObject *__pyx_v_alignment) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":56
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":56
  *     def __cinit__(self, from_text=None, from_data=False, from_binary=None,
  *             earray=None, fsarray=None, alignment=None):
  *         self.id2eword = []             # <<<<<<<<<<<<<<
@@ -12305,14 +11333,14 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  *         self.eword2id = {}
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->id2eword);
-  __Pyx_DECREF(__pyx_v_self->id2eword);
-  __pyx_v_self->id2eword = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword);
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":57
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":57
  *             earray=None, fsarray=None, alignment=None):
  *         self.id2eword = []
  *         self.id2fword = []             # <<<<<<<<<<<<<<
@@ -12320,14 +11348,14 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  *         self.fword2id = {}
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->id2fword);
-  __Pyx_DECREF(__pyx_v_self->id2fword);
-  __pyx_v_self->id2fword = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword);
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":58
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":58
  *         self.id2eword = []
  *         self.id2fword = []
  *         self.eword2id = {}             # <<<<<<<<<<<<<<
@@ -12337,12 +11365,12 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->eword2id);
-  __Pyx_DECREF(__pyx_v_self->eword2id);
-  __pyx_v_self->eword2id = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id);
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":59
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":59
  *         self.id2fword = []
  *         self.eword2id = {}
  *         self.fword2id = {}             # <<<<<<<<<<<<<<
@@ -12352,12 +11380,12 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->fword2id);
-  __Pyx_DECREF(__pyx_v_self->fword2id);
-  __pyx_v_self->fword2id = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id);
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":60
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":60
  *         self.eword2id = {}
  *         self.fword2id = {}
  *         self.e_index = IntList()             # <<<<<<<<<<<<<<
@@ -12367,12 +11395,12 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->e_index);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->e_index));
-  __pyx_v_self->e_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index));
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":61
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":61
  *         self.fword2id = {}
  *         self.e_index = IntList()
  *         self.f_index = IntList()             # <<<<<<<<<<<<<<
@@ -12382,12 +11410,12 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->f_index);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->f_index));
-  __pyx_v_self->f_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index));
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":62
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":62
  *         self.e_index = IntList()
  *         self.f_index = IntList()
  *         self.col1 = FloatList()             # <<<<<<<<<<<<<<
@@ -12397,12 +11425,12 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->col1);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->col1));
-  __pyx_v_self->col1 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1));
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":63
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":63
  *         self.f_index = IntList()
  *         self.col1 = FloatList()
  *         self.col2 = FloatList()             # <<<<<<<<<<<<<<
@@ -12412,12 +11440,12 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->col2);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->col2));
-  __pyx_v_self->col2 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2));
+  ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":64
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":64
  *         self.col1 = FloatList()
  *         self.col2 = FloatList()
  *         if from_binary:             # <<<<<<<<<<<<<<
@@ -12427,17 +11455,17 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_binary); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":65
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":65
  *         self.col2 = FloatList()
  *         if from_binary:
  *             self.read_binary(from_binary)             # <<<<<<<<<<<<<<
  *         elif from_data:
  *             self.compute_from_data(fsarray, earray, alignment)
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_from_binary);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_from_binary);
     __Pyx_GIVEREF(__pyx_v_from_binary);
@@ -12446,10 +11474,10 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":66
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":66
  *         if from_binary:
  *             self.read_binary(from_binary)
  *         elif from_data:             # <<<<<<<<<<<<<<
@@ -12459,7 +11487,7 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_data); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":67
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":67
  *             self.read_binary(from_binary)
  *         elif from_data:
  *             self.compute_from_data(fsarray, earray, alignment)             # <<<<<<<<<<<<<<
@@ -12475,27 +11503,27 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
     if (!(likely(((__pyx_v_alignment) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_alignment, __pyx_ptype_3_sa_Alignment))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_1 = __pyx_v_alignment;
     __Pyx_INCREF(__pyx_t_1);
-    __pyx_t_5 = ((struct __pyx_vtabstruct_3_sa_BiLex *)__pyx_v_self->__pyx_vtab)->compute_from_data(__pyx_v_self, ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_t_4), ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_3), ((struct __pyx_obj_3_sa_Alignment *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_3_sa_BiLex *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->__pyx_vtab)->compute_from_data(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_t_4), ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_3), ((struct __pyx_obj_3_sa_Alignment *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":69
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":69
  *             self.compute_from_data(fsarray, earray, alignment)
  *         else:
  *             self.read_text(from_text)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_text); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_text); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(__pyx_v_from_text);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_from_text);
     __Pyx_GIVEREF(__pyx_v_from_text);
@@ -12505,7 +11533,7 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
     __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -12521,7 +11549,7 @@ static int __pyx_pf_3_sa_5BiLex___cinit__(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":72
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":72
  * 
  * 
  *     cdef compute_from_data(self, SuffixArray fsa, DataArray eda, Alignment aa):             # <<<<<<<<<<<<<<
@@ -12573,9 +11601,9 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("compute_from_data", 0);
+  __Pyx_RefNannySetupContext("compute_from_data");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":79
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":79
  *         cdef int null_word
  * 
  *         null_word = 0             # <<<<<<<<<<<<<<
@@ -12584,7 +11612,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   __pyx_v_null_word = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":80
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":80
  * 
  *         null_word = 0
  *         for word in fsa.darray.id2word: # I miss list comprehensions             # <<<<<<<<<<<<<<
@@ -12600,20 +11628,12 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -12629,7 +11649,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_v_word = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":81
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":81
  *         null_word = 0
  *         for word in fsa.darray.id2word: # I miss list comprehensions
  *             self.id2fword.append(word)             # <<<<<<<<<<<<<<
@@ -12642,7 +11662,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":82
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":82
  *         for word in fsa.darray.id2word: # I miss list comprehensions
  *             self.id2fword.append(word)
  *         self.id2fword[null_word] = "NULL"             # <<<<<<<<<<<<<<
@@ -12651,7 +11671,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   if (__Pyx_SetItemInt(__pyx_v_self->id2fword, __pyx_v_null_word, ((PyObject *)__pyx_n_s__NULL), sizeof(int), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":83
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":83
  *             self.id2fword.append(word)
  *         self.id2fword[null_word] = "NULL"
  *         for id, word in enumerate(self.id2fword):             # <<<<<<<<<<<<<<
@@ -12669,20 +11689,12 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_3 = Py_TYPE(__pyx_t_4)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_4)) {
+    if (PyList_CheckExact(__pyx_t_4)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_4)) {
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_4)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
     } else {
       __pyx_t_5 = __pyx_t_3(__pyx_t_4);
       if (unlikely(!__pyx_t_5)) {
@@ -12706,7 +11718,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_1 = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":84
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":84
  *         self.id2fword[null_word] = "NULL"
  *         for id, word in enumerate(self.id2fword):
  *             self.fword2id[word] = id             # <<<<<<<<<<<<<<
@@ -12718,7 +11730,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":86
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":86
  *             self.fword2id[word] = id
  * 
  *         for word in eda.id2word:             # <<<<<<<<<<<<<<
@@ -12734,20 +11746,12 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -12763,7 +11767,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_v_word = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":87
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":87
  * 
  *         for word in eda.id2word:
  *             self.id2eword.append(word)             # <<<<<<<<<<<<<<
@@ -12776,7 +11780,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":88
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":88
  *         for word in eda.id2word:
  *             self.id2eword.append(word)
  *         self.id2eword[null_word] = "NULL"             # <<<<<<<<<<<<<<
@@ -12785,7 +11789,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   if (__Pyx_SetItemInt(__pyx_v_self->id2eword, __pyx_v_null_word, ((PyObject *)__pyx_n_s__NULL), sizeof(int), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":89
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":89
  *             self.id2eword.append(word)
  *         self.id2eword[null_word] = "NULL"
  *         for id, word in enumerate(self.id2eword):             # <<<<<<<<<<<<<<
@@ -12803,20 +11807,12 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_3 = Py_TYPE(__pyx_t_4)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_4)) {
+    if (PyList_CheckExact(__pyx_t_4)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_4)) {
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_4)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
     } else {
       __pyx_t_5 = __pyx_t_3(__pyx_t_4);
       if (unlikely(!__pyx_t_5)) {
@@ -12840,7 +11836,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_1 = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":90
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":90
  *         self.id2eword[null_word] = "NULL"
  *         for id, word in enumerate(self.id2eword):
  *             self.eword2id[word] = id             # <<<<<<<<<<<<<<
@@ -12852,7 +11848,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":92
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":92
  *             self.eword2id[word] = id
  * 
  *         num_pairs = 0             # <<<<<<<<<<<<<<
@@ -12861,7 +11857,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   __pyx_v_num_pairs = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":94
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":94
  *         num_pairs = 0
  * 
  *         V_E = len(eda.id2word)             # <<<<<<<<<<<<<<
@@ -12874,7 +11870,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_V_E = __pyx_t_2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":95
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":95
  * 
  *         V_E = len(eda.id2word)
  *         V_F = len(fsa.darray.id2word)             # <<<<<<<<<<<<<<
@@ -12887,7 +11883,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_V_F = __pyx_t_2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":96
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":96
  *         V_E = len(eda.id2word)
  *         V_F = len(fsa.darray.id2word)
  *         fmargin = <int*> malloc(V_F*sizeof(int))             # <<<<<<<<<<<<<<
@@ -12896,7 +11892,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   __pyx_v_fmargin = ((int *)malloc((__pyx_v_V_F * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":97
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":97
  *         V_F = len(fsa.darray.id2word)
  *         fmargin = <int*> malloc(V_F*sizeof(int))
  *         emargin = <int*> malloc(V_E*sizeof(int))             # <<<<<<<<<<<<<<
@@ -12905,7 +11901,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   __pyx_v_emargin = ((int *)malloc((__pyx_v_V_E * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":98
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":98
  *         fmargin = <int*> malloc(V_F*sizeof(int))
  *         emargin = <int*> malloc(V_E*sizeof(int))
  *         memset(fmargin, 0, V_F*sizeof(int))             # <<<<<<<<<<<<<<
@@ -12914,7 +11910,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   memset(__pyx_v_fmargin, 0, (__pyx_v_V_F * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":99
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":99
  *         emargin = <int*> malloc(V_E*sizeof(int))
  *         memset(fmargin, 0, V_F*sizeof(int))
  *         memset(emargin, 0, V_E*sizeof(int))             # <<<<<<<<<<<<<<
@@ -12923,7 +11919,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   memset(__pyx_v_emargin, 0, (__pyx_v_V_E * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":101
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":101
  *         memset(emargin, 0, V_E*sizeof(int))
  * 
  *         dict = <_node**> malloc(V_F*sizeof(_node*))             # <<<<<<<<<<<<<<
@@ -12932,7 +11928,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   __pyx_v_dict = ((struct __pyx_t_3_sa__node **)malloc((__pyx_v_V_F * (sizeof(struct __pyx_t_3_sa__node *)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":102
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":102
  * 
  *         dict = <_node**> malloc(V_F*sizeof(_node*))
  *         memset(dict, 0, V_F*sizeof(_node*))             # <<<<<<<<<<<<<<
@@ -12941,7 +11937,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   memset(__pyx_v_dict, 0, (__pyx_v_V_F * (sizeof(struct __pyx_t_3_sa__node *))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":104
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":104
  *         memset(dict, 0, V_F*sizeof(_node*))
  * 
  *         num_sents = len(fsa.darray.sent_index)             # <<<<<<<<<<<<<<
@@ -12957,7 +11953,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __pyx_v_num_sents = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":105
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":105
  * 
  *         num_sents = len(fsa.darray.sent_index)
  *         for sent_id from 0 <= sent_id < num_sents-1:             # <<<<<<<<<<<<<<
@@ -12970,7 +11966,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (__pyx_v_sent_id = 0; __pyx_v_sent_id < __pyx_t_6; __pyx_v_sent_id++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":107
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":107
  *         for sent_id from 0 <= sent_id < num_sents-1:
  * 
  *             fsent = fsa.darray.data.arr + fsa.darray.sent_index.arr[sent_id]             # <<<<<<<<<<<<<<
@@ -12979,7 +11975,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_fsent = (__pyx_v_fsa->darray->data->arr + (__pyx_v_fsa->darray->sent_index->arr[__pyx_v_sent_id]));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":108
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":108
  * 
  *             fsent = fsa.darray.data.arr + fsa.darray.sent_index.arr[sent_id]
  *             I = fsa.darray.sent_index.arr[sent_id+1] - fsa.darray.sent_index.arr[sent_id] - 1             # <<<<<<<<<<<<<<
@@ -12988,7 +11984,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_I = (((__pyx_v_fsa->darray->sent_index->arr[(__pyx_v_sent_id + 1)]) - (__pyx_v_fsa->darray->sent_index->arr[__pyx_v_sent_id])) - 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":109
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":109
  *             fsent = fsa.darray.data.arr + fsa.darray.sent_index.arr[sent_id]
  *             I = fsa.darray.sent_index.arr[sent_id+1] - fsa.darray.sent_index.arr[sent_id] - 1
  *             faligned = <int*> malloc(I*sizeof(int))             # <<<<<<<<<<<<<<
@@ -12997,7 +11993,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_faligned = ((int *)malloc((__pyx_v_I * (sizeof(int)))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":110
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":110
  *             I = fsa.darray.sent_index.arr[sent_id+1] - fsa.darray.sent_index.arr[sent_id] - 1
  *             faligned = <int*> malloc(I*sizeof(int))
  *             memset(faligned, 0, I*sizeof(int))             # <<<<<<<<<<<<<<
@@ -13006,7 +12002,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     memset(__pyx_v_faligned, 0, (__pyx_v_I * (sizeof(int))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":112
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":112
  *             memset(faligned, 0, I*sizeof(int))
  * 
  *             esent = eda.data.arr + eda.sent_index.arr[sent_id]             # <<<<<<<<<<<<<<
@@ -13015,7 +12011,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_esent = (__pyx_v_eda->data->arr + (__pyx_v_eda->sent_index->arr[__pyx_v_sent_id]));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":113
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":113
  * 
  *             esent = eda.data.arr + eda.sent_index.arr[sent_id]
  *             J = eda.sent_index.arr[sent_id+1] - eda.sent_index.arr[sent_id] - 1             # <<<<<<<<<<<<<<
@@ -13024,7 +12020,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_J = (((__pyx_v_eda->sent_index->arr[(__pyx_v_sent_id + 1)]) - (__pyx_v_eda->sent_index->arr[__pyx_v_sent_id])) - 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":114
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":114
  *             esent = eda.data.arr + eda.sent_index.arr[sent_id]
  *             J = eda.sent_index.arr[sent_id+1] - eda.sent_index.arr[sent_id] - 1
  *             ealigned = <int*> malloc(J*sizeof(int))             # <<<<<<<<<<<<<<
@@ -13033,7 +12029,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_ealigned = ((int *)malloc((__pyx_v_J * (sizeof(int)))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":115
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":115
  *             J = eda.sent_index.arr[sent_id+1] - eda.sent_index.arr[sent_id] - 1
  *             ealigned = <int*> malloc(J*sizeof(int))
  *             memset(ealigned, 0, J*sizeof(int))             # <<<<<<<<<<<<<<
@@ -13042,7 +12038,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     memset(__pyx_v_ealigned, 0, (__pyx_v_J * (sizeof(int))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":117
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":117
  *             memset(ealigned, 0, J*sizeof(int))
  * 
  *             links = aa._get_sent_links(sent_id, &num_links)             # <<<<<<<<<<<<<<
@@ -13051,7 +12047,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     __pyx_v_links = ((struct __pyx_vtabstruct_3_sa_Alignment *)__pyx_v_aa->__pyx_vtab)->_get_sent_links(__pyx_v_aa, __pyx_v_sent_id, (&__pyx_v_num_links));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":119
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":119
  *             links = aa._get_sent_links(sent_id, &num_links)
  * 
  *             for l from 0 <= l < num_links:             # <<<<<<<<<<<<<<
@@ -13061,7 +12057,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_7 = __pyx_v_num_links;
     for (__pyx_v_l = 0; __pyx_v_l < __pyx_t_7; __pyx_v_l++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":120
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":120
  * 
  *             for l from 0 <= l < num_links:
  *                 i = links[l*2]             # <<<<<<<<<<<<<<
@@ -13070,7 +12066,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       __pyx_v_i = (__pyx_v_links[(__pyx_v_l * 2)]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":121
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":121
  *             for l from 0 <= l < num_links:
  *                 i = links[l*2]
  *                 j = links[l*2+1]             # <<<<<<<<<<<<<<
@@ -13079,7 +12075,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       __pyx_v_j = (__pyx_v_links[((__pyx_v_l * 2) + 1)]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":122
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":122
  *                 i = links[l*2]
  *                 j = links[l*2+1]
  *                 if i >= I or j >= J:             # <<<<<<<<<<<<<<
@@ -13095,7 +12091,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       }
       if (__pyx_t_10) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":123
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":123
  *                 j = links[l*2+1]
  *                 if i >= I or j >= J:
  *                     raise Exception("%d-%d out of bounds (I=%d,J=%d) in line %d\n" % (i,j,I,J,sent_id+1))             # <<<<<<<<<<<<<<
@@ -13113,7 +12109,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         __pyx_t_12 = PyInt_FromLong((__pyx_v_sent_id + 1)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_12);
         __pyx_t_13 = PyTuple_New(5); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_13);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_13));
         PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
         __Pyx_GIVEREF(__pyx_t_1);
         PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_4);
@@ -13133,7 +12129,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         __Pyx_GOTREF(((PyObject *)__pyx_t_12));
         __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
         __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_13);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_13));
         PyTuple_SET_ITEM(__pyx_t_13, 0, ((PyObject *)__pyx_t_12));
         __Pyx_GIVEREF(((PyObject *)__pyx_t_12));
         __pyx_t_12 = 0;
@@ -13147,7 +12143,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       }
       __pyx_L15:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":124
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":124
  *                 if i >= I or j >= J:
  *                     raise Exception("%d-%d out of bounds (I=%d,J=%d) in line %d\n" % (i,j,I,J,sent_id+1))
  *                 f_i = fsent[i]             # <<<<<<<<<<<<<<
@@ -13156,7 +12152,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       __pyx_v_f_i = (__pyx_v_fsent[__pyx_v_i]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":125
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":125
  *                     raise Exception("%d-%d out of bounds (I=%d,J=%d) in line %d\n" % (i,j,I,J,sent_id+1))
  *                 f_i = fsent[i]
  *                 e_j = esent[j]             # <<<<<<<<<<<<<<
@@ -13165,7 +12161,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       __pyx_v_e_j = (__pyx_v_esent[__pyx_v_j]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":126
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":126
  *                 f_i = fsent[i]
  *                 e_j = esent[j]
  *                 fmargin[f_i] = fmargin[f_i]+1             # <<<<<<<<<<<<<<
@@ -13174,7 +12170,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       (__pyx_v_fmargin[__pyx_v_f_i]) = ((__pyx_v_fmargin[__pyx_v_f_i]) + 1);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":127
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":127
  *                 e_j = esent[j]
  *                 fmargin[f_i] = fmargin[f_i]+1
  *                 emargin[e_j] = emargin[e_j]+1             # <<<<<<<<<<<<<<
@@ -13183,7 +12179,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       (__pyx_v_emargin[__pyx_v_e_j]) = ((__pyx_v_emargin[__pyx_v_e_j]) + 1);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":128
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":128
  *                 fmargin[f_i] = fmargin[f_i]+1
  *                 emargin[e_j] = emargin[e_j]+1
  *                 if dict[f_i] == NULL:             # <<<<<<<<<<<<<<
@@ -13193,7 +12189,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       __pyx_t_10 = ((__pyx_v_dict[__pyx_v_f_i]) == NULL);
       if (__pyx_t_10) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":129
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":129
  *                 emargin[e_j] = emargin[e_j]+1
  *                 if dict[f_i] == NULL:
  *                     dict[f_i] = new_node(e_j)             # <<<<<<<<<<<<<<
@@ -13202,7 +12198,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         (__pyx_v_dict[__pyx_v_f_i]) = __pyx_f_3_sa_new_node(__pyx_v_e_j);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":130
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":130
  *                 if dict[f_i] == NULL:
  *                     dict[f_i] = new_node(e_j)
  *                     dict[f_i].val = 1             # <<<<<<<<<<<<<<
@@ -13211,7 +12207,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         (__pyx_v_dict[__pyx_v_f_i])->val = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":131
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":131
  *                     dict[f_i] = new_node(e_j)
  *                     dict[f_i].val = 1
  *                     num_pairs = num_pairs + 1             # <<<<<<<<<<<<<<
@@ -13223,7 +12219,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":133
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":133
  *                     num_pairs = num_pairs + 1
  *                 else:
  *                     count = get_val(dict[f_i], e_j)             # <<<<<<<<<<<<<<
@@ -13232,7 +12228,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         __pyx_v_count = __pyx_f_3_sa_get_val((__pyx_v_dict[__pyx_v_f_i]), __pyx_v_e_j);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":134
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":134
  *                 else:
  *                     count = get_val(dict[f_i], e_j)
  *                     if count[0] == 0:             # <<<<<<<<<<<<<<
@@ -13242,7 +12238,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         __pyx_t_10 = ((__pyx_v_count[0]) == 0);
         if (__pyx_t_10) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":135
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":135
  *                     count = get_val(dict[f_i], e_j)
  *                     if count[0] == 0:
  *                         num_pairs = num_pairs + 1             # <<<<<<<<<<<<<<
@@ -13254,7 +12250,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         }
         __pyx_L17:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":136
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":136
  *                     if count[0] == 0:
  *                         num_pairs = num_pairs + 1
  *                     count[0] = count[0] + 1             # <<<<<<<<<<<<<<
@@ -13265,7 +12261,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       }
       __pyx_L16:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":138
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":138
  *                     count[0] = count[0] + 1
  *                 # add count
  *                 faligned[i] = 1             # <<<<<<<<<<<<<<
@@ -13274,7 +12270,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
       (__pyx_v_faligned[__pyx_v_i]) = 1;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":139
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":139
  *                 # add count
  *                 faligned[i] = 1
  *                 ealigned[j] = 1             # <<<<<<<<<<<<<<
@@ -13284,7 +12280,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       (__pyx_v_ealigned[__pyx_v_j]) = 1;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":140
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":140
  *                 faligned[i] = 1
  *                 ealigned[j] = 1
  *             for i from 0 <= i < I:             # <<<<<<<<<<<<<<
@@ -13294,7 +12290,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_7 = __pyx_v_I;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":141
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":141
  *                 ealigned[j] = 1
  *             for i from 0 <= i < I:
  *                 if faligned[i] == 0:             # <<<<<<<<<<<<<<
@@ -13304,7 +12300,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       __pyx_t_10 = ((__pyx_v_faligned[__pyx_v_i]) == 0);
       if (__pyx_t_10) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":142
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":142
  *             for i from 0 <= i < I:
  *                 if faligned[i] == 0:
  *                     f_i = fsent[i]             # <<<<<<<<<<<<<<
@@ -13313,7 +12309,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         __pyx_v_f_i = (__pyx_v_fsent[__pyx_v_i]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":143
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":143
  *                 if faligned[i] == 0:
  *                     f_i = fsent[i]
  *                     fmargin[f_i] = fmargin[f_i] + 1             # <<<<<<<<<<<<<<
@@ -13322,7 +12318,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         (__pyx_v_fmargin[__pyx_v_f_i]) = ((__pyx_v_fmargin[__pyx_v_f_i]) + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":144
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":144
  *                     f_i = fsent[i]
  *                     fmargin[f_i] = fmargin[f_i] + 1
  *                     emargin[null_word] = emargin[null_word] + 1             # <<<<<<<<<<<<<<
@@ -13331,7 +12327,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         (__pyx_v_emargin[__pyx_v_null_word]) = ((__pyx_v_emargin[__pyx_v_null_word]) + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":145
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":145
  *                     fmargin[f_i] = fmargin[f_i] + 1
  *                     emargin[null_word] = emargin[null_word] + 1
  *                     if dict[f_i] == NULL:             # <<<<<<<<<<<<<<
@@ -13341,7 +12337,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         __pyx_t_10 = ((__pyx_v_dict[__pyx_v_f_i]) == NULL);
         if (__pyx_t_10) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":146
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":146
  *                     emargin[null_word] = emargin[null_word] + 1
  *                     if dict[f_i] == NULL:
  *                         dict[f_i] = new_node(null_word)             # <<<<<<<<<<<<<<
@@ -13350,7 +12346,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
           (__pyx_v_dict[__pyx_v_f_i]) = __pyx_f_3_sa_new_node(__pyx_v_null_word);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":147
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":147
  *                     if dict[f_i] == NULL:
  *                         dict[f_i] = new_node(null_word)
  *                         dict[f_i].val = 1             # <<<<<<<<<<<<<<
@@ -13359,7 +12355,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
           (__pyx_v_dict[__pyx_v_f_i])->val = 1;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":148
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":148
  *                         dict[f_i] = new_node(null_word)
  *                         dict[f_i].val = 1
  *                         num_pairs = num_pairs + 1             # <<<<<<<<<<<<<<
@@ -13371,7 +12367,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":150
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":150
  *                         num_pairs = num_pairs + 1
  *                     else:
  *                         count = get_val(dict[f_i], null_word)             # <<<<<<<<<<<<<<
@@ -13380,7 +12376,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
           __pyx_v_count = __pyx_f_3_sa_get_val((__pyx_v_dict[__pyx_v_f_i]), __pyx_v_null_word);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":151
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":151
  *                     else:
  *                         count = get_val(dict[f_i], null_word)
  *                         if count[0] == 0:             # <<<<<<<<<<<<<<
@@ -13390,7 +12386,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
           __pyx_t_10 = ((__pyx_v_count[0]) == 0);
           if (__pyx_t_10) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":152
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":152
  *                         count = get_val(dict[f_i], null_word)
  *                         if count[0] == 0:
  *                             num_pairs = num_pairs + 1             # <<<<<<<<<<<<<<
@@ -13402,7 +12398,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
           }
           __pyx_L22:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":153
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":153
  *                         if count[0] == 0:
  *                             num_pairs = num_pairs + 1
  *                         count[0] = count[0] + 1             # <<<<<<<<<<<<<<
@@ -13417,7 +12413,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       __pyx_L20:;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":154
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":154
  *                             num_pairs = num_pairs + 1
  *                         count[0] = count[0] + 1
  *             for j from 0 <= j < J:             # <<<<<<<<<<<<<<
@@ -13427,7 +12423,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_7 = __pyx_v_J;
     for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_7; __pyx_v_j++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":155
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":155
  *                         count[0] = count[0] + 1
  *             for j from 0 <= j < J:
  *                 if ealigned[j] == 0:             # <<<<<<<<<<<<<<
@@ -13437,7 +12433,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       __pyx_t_10 = ((__pyx_v_ealigned[__pyx_v_j]) == 0);
       if (__pyx_t_10) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":156
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":156
  *             for j from 0 <= j < J:
  *                 if ealigned[j] == 0:
  *                     e_j = esent[j]             # <<<<<<<<<<<<<<
@@ -13446,7 +12442,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         __pyx_v_e_j = (__pyx_v_esent[__pyx_v_j]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":157
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":157
  *                 if ealigned[j] == 0:
  *                     e_j = esent[j]
  *                     fmargin[null_word] = fmargin[null_word] + 1             # <<<<<<<<<<<<<<
@@ -13455,7 +12451,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         (__pyx_v_fmargin[__pyx_v_null_word]) = ((__pyx_v_fmargin[__pyx_v_null_word]) + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":158
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":158
  *                     e_j = esent[j]
  *                     fmargin[null_word] = fmargin[null_word] + 1
  *                     emargin[e_j] = emargin[e_j] + 1             # <<<<<<<<<<<<<<
@@ -13464,7 +12460,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
         (__pyx_v_emargin[__pyx_v_e_j]) = ((__pyx_v_emargin[__pyx_v_e_j]) + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":159
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":159
  *                     fmargin[null_word] = fmargin[null_word] + 1
  *                     emargin[e_j] = emargin[e_j] + 1
  *                     if dict[null_word] == NULL:             # <<<<<<<<<<<<<<
@@ -13474,7 +12470,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         __pyx_t_10 = ((__pyx_v_dict[__pyx_v_null_word]) == NULL);
         if (__pyx_t_10) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":160
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":160
  *                     emargin[e_j] = emargin[e_j] + 1
  *                     if dict[null_word] == NULL:
  *                         dict[null_word] = new_node(e_j)             # <<<<<<<<<<<<<<
@@ -13483,7 +12479,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
           (__pyx_v_dict[__pyx_v_null_word]) = __pyx_f_3_sa_new_node(__pyx_v_e_j);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":161
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":161
  *                     if dict[null_word] == NULL:
  *                         dict[null_word] = new_node(e_j)
  *                         dict[null_word].val = 1             # <<<<<<<<<<<<<<
@@ -13492,7 +12488,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
           (__pyx_v_dict[__pyx_v_null_word])->val = 1;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":162
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":162
  *                         dict[null_word] = new_node(e_j)
  *                         dict[null_word].val = 1
  *                         num_pairs = num_pairs + 1             # <<<<<<<<<<<<<<
@@ -13504,7 +12500,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":164
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":164
  *                         num_pairs = num_pairs + 1
  *                     else:
  *                         count = get_val(dict[null_word], e_j)             # <<<<<<<<<<<<<<
@@ -13513,7 +12509,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
           __pyx_v_count = __pyx_f_3_sa_get_val((__pyx_v_dict[__pyx_v_null_word]), __pyx_v_e_j);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":165
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":165
  *                     else:
  *                         count = get_val(dict[null_word], e_j)
  *                         if count[0] == 0:             # <<<<<<<<<<<<<<
@@ -13523,7 +12519,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
           __pyx_t_10 = ((__pyx_v_count[0]) == 0);
           if (__pyx_t_10) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":166
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":166
  *                         count = get_val(dict[null_word], e_j)
  *                         if count[0] == 0:
  *                             num_pairs = num_pairs + 1             # <<<<<<<<<<<<<<
@@ -13535,7 +12531,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
           }
           __pyx_L27:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":167
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":167
  *                         if count[0] == 0:
  *                             num_pairs = num_pairs + 1
  *                         count[0] = count[0] + 1             # <<<<<<<<<<<<<<
@@ -13550,7 +12546,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       __pyx_L25:;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":168
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":168
  *                             num_pairs = num_pairs + 1
  *                         count[0] = count[0] + 1
  *             free(links)             # <<<<<<<<<<<<<<
@@ -13559,7 +12555,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     free(__pyx_v_links);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":169
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":169
  *                         count[0] = count[0] + 1
  *             free(links)
  *             free(faligned)             # <<<<<<<<<<<<<<
@@ -13568,7 +12564,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     free(__pyx_v_faligned);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":170
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":170
  *             free(links)
  *             free(faligned)
  *             free(ealigned)             # <<<<<<<<<<<<<<
@@ -13578,7 +12574,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     free(__pyx_v_ealigned);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":171
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":171
  *             free(faligned)
  *             free(ealigned)
  *         self.f_index = IntList(initial_len=V_F)             # <<<<<<<<<<<<<<
@@ -13591,7 +12587,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_GOTREF(__pyx_t_13);
   if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-  __pyx_t_13 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_13 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_13);
   __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
   __Pyx_GIVEREF(__pyx_t_13);
@@ -13600,7 +12596,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __pyx_v_self->f_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_13);
   __pyx_t_13 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":172
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":172
  *             free(ealigned)
  *         self.f_index = IntList(initial_len=V_F)
  *         self.e_index = IntList(initial_len=num_pairs)             # <<<<<<<<<<<<<<
@@ -13613,7 +12609,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_GOTREF(__pyx_t_12);
   if (PyDict_SetItem(__pyx_t_13, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __pyx_t_12 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_12);
   __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
   __Pyx_GIVEREF(__pyx_t_12);
@@ -13622,7 +12618,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __pyx_v_self->e_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_12);
   __pyx_t_12 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":173
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":173
  *         self.f_index = IntList(initial_len=V_F)
  *         self.e_index = IntList(initial_len=num_pairs)
  *         self.col1 = FloatList(initial_len=num_pairs)             # <<<<<<<<<<<<<<
@@ -13635,7 +12631,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_GOTREF(__pyx_t_13);
   if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-  __pyx_t_13 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_13 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_13);
   __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
   __Pyx_GIVEREF(__pyx_t_13);
@@ -13644,7 +12640,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __pyx_v_self->col1 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_13);
   __pyx_t_13 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":174
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":174
  *         self.e_index = IntList(initial_len=num_pairs)
  *         self.col1 = FloatList(initial_len=num_pairs)
  *         self.col2 = FloatList(initial_len=num_pairs)             # <<<<<<<<<<<<<<
@@ -13657,7 +12653,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __Pyx_GOTREF(__pyx_t_12);
   if (PyDict_SetItem(__pyx_t_13, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __pyx_t_12 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_12);
   __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
   __Pyx_GIVEREF(__pyx_t_12);
@@ -13666,7 +12662,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __pyx_v_self->col2 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_12);
   __pyx_t_12 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":176
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":176
  *         self.col2 = FloatList(initial_len=num_pairs)
  * 
  *         num_pairs = 0             # <<<<<<<<<<<<<<
@@ -13675,7 +12671,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   __pyx_v_num_pairs = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":177
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":177
  * 
  *         num_pairs = 0
  *         for i from 0 <= i < V_F:             # <<<<<<<<<<<<<<
@@ -13685,7 +12681,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   __pyx_t_6 = __pyx_v_V_F;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":179
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":179
  *         for i from 0 <= i < V_F:
  *             #self.f_index[i] = num_pairs
  *             self.f_index.set(i, num_pairs)             # <<<<<<<<<<<<<<
@@ -13694,7 +12690,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
     ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->f_index->__pyx_vtab)->set(__pyx_v_self->f_index, __pyx_v_i, __pyx_v_num_pairs);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":180
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":180
  *             #self.f_index[i] = num_pairs
  *             self.f_index.set(i, num_pairs)
  *             if dict[i] != NULL:             # <<<<<<<<<<<<<<
@@ -13704,7 +12700,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_t_10 = ((__pyx_v_dict[__pyx_v_i]) != NULL);
     if (__pyx_t_10) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":181
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":181
  *             self.f_index.set(i, num_pairs)
  *             if dict[i] != NULL:
  *                 self._add_node(dict[i], &num_pairs, float(fmargin[i]), emargin)             # <<<<<<<<<<<<<<
@@ -13715,7 +12711,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":182
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":182
  *             if dict[i] != NULL:
  *                 self._add_node(dict[i], &num_pairs, float(fmargin[i]), emargin)
  *                 del_node(dict[i])             # <<<<<<<<<<<<<<
@@ -13730,7 +12726,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
     __pyx_L30:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":183
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":183
  *                 self._add_node(dict[i], &num_pairs, float(fmargin[i]), emargin)
  *                 del_node(dict[i])
  *         free(fmargin)             # <<<<<<<<<<<<<<
@@ -13739,7 +12735,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   free(__pyx_v_fmargin);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":184
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":184
  *                 del_node(dict[i])
  *         free(fmargin)
  *         free(emargin)             # <<<<<<<<<<<<<<
@@ -13748,7 +12744,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   free(__pyx_v_emargin);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":185
  *         free(fmargin)
  *         free(emargin)
  *         free(dict)             # <<<<<<<<<<<<<<
@@ -13757,7 +12753,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
  */
   free(__pyx_v_dict);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":186
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":186
  *         free(emargin)
  *         free(dict)
  *         return             # <<<<<<<<<<<<<<
@@ -13788,7 +12784,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_compute_from_data(struct __pyx_obj_3_sa_BiL
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":189
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":189
  * 
  * 
  *     cdef _add_node(self, _node* n, int* num_pairs, float fmargin, int* emargin):             # <<<<<<<<<<<<<<
@@ -13805,9 +12801,9 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("_add_node", 0);
+  __Pyx_RefNannySetupContext("_add_node");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":191
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":191
  *     cdef _add_node(self, _node* n, int* num_pairs, float fmargin, int* emargin):
  *         cdef int loc
  *         if n.smaller != NULL:             # <<<<<<<<<<<<<<
@@ -13817,7 +12813,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   __pyx_t_1 = (__pyx_v_n->smaller != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":192
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":192
  *         cdef int loc
  *         if n.smaller != NULL:
  *             self._add_node(n.smaller, num_pairs, fmargin, emargin)             # <<<<<<<<<<<<<<
@@ -13831,7 +12827,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":193
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":193
  *         if n.smaller != NULL:
  *             self._add_node(n.smaller, num_pairs, fmargin, emargin)
  *         loc = num_pairs[0]             # <<<<<<<<<<<<<<
@@ -13840,7 +12836,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
  */
   __pyx_v_loc = (__pyx_v_num_pairs[0]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":194
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":194
  *             self._add_node(n.smaller, num_pairs, fmargin, emargin)
  *         loc = num_pairs[0]
  *         self.e_index.set(loc, n.key)             # <<<<<<<<<<<<<<
@@ -13849,7 +12845,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
  */
   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->e_index->__pyx_vtab)->set(__pyx_v_self->e_index, __pyx_v_loc, __pyx_v_n->key);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":195
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":195
  *         loc = num_pairs[0]
  *         self.e_index.set(loc, n.key)
  *         self.col1.set(loc, float(n.val)/fmargin)             # <<<<<<<<<<<<<<
@@ -13862,7 +12858,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   }
   ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->col1->__pyx_vtab)->set(__pyx_v_self->col1, __pyx_v_loc, (((double)__pyx_v_n->val) / __pyx_v_fmargin));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":196
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":196
  *         self.e_index.set(loc, n.key)
  *         self.col1.set(loc, float(n.val)/fmargin)
  *         self.col2.set(loc, float(n.val)/float(emargin[n.key]))             # <<<<<<<<<<<<<<
@@ -13875,7 +12871,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   }
   ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->col2->__pyx_vtab)->set(__pyx_v_self->col2, __pyx_v_loc, (((double)__pyx_v_n->val) / ((double)(__pyx_v_emargin[__pyx_v_n->key]))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":197
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":197
  *         self.col1.set(loc, float(n.val)/fmargin)
  *         self.col2.set(loc, float(n.val)/float(emargin[n.key]))
  *         num_pairs[0] = loc + 1             # <<<<<<<<<<<<<<
@@ -13884,7 +12880,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
  */
   (__pyx_v_num_pairs[0]) = (__pyx_v_loc + 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":198
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":198
  *         self.col2.set(loc, float(n.val)/float(emargin[n.key]))
  *         num_pairs[0] = loc + 1
  *         if n.bigger != NULL:             # <<<<<<<<<<<<<<
@@ -13894,7 +12890,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   __pyx_t_1 = (__pyx_v_n->bigger != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":199
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":199
  *         num_pairs[0] = loc + 1
  *         if n.bigger != NULL:
  *             self._add_node(n.bigger, num_pairs, fmargin, emargin)             # <<<<<<<<<<<<<<
@@ -13920,28 +12916,7 @@ static PyObject *__pyx_f_3_sa_5BiLex__add_node(struct __pyx_obj_3_sa_BiLex *__py
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_3write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_3write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.BiLex.write_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex_2write_binary(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":202
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":202
  * 
  * 
  *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
@@ -13949,7 +12924,9 @@ static PyObject *__pyx_pw_3_sa_5BiLex_3write_binary(PyObject *__pyx_v_self, PyOb
  *         f = fopen(filename, "w")
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_2write_binary(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_5BiLex_1write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_1write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   FILE *__pyx_v_f;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -13958,9 +12935,18 @@ static PyObject *__pyx_pf_3_sa_5BiLex_2write_binary(struct __pyx_obj_3_sa_BiLex
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_binary", 0);
+  __Pyx_RefNannySetupContext("write_binary");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.BiLex.write_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":204
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":204
  *     def write_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -13969,71 +12955,71 @@ static PyObject *__pyx_pf_3_sa_5BiLex_2write_binary(struct __pyx_obj_3_sa_BiLex
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":205
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":205
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         self.f_index.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.e_index.write_handle(f)
  *         self.col1.write_handle(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->f_index->__pyx_vtab)->write_handle(__pyx_v_self->f_index, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":206
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":206
  *         f = fopen(filename, "w")
  *         self.f_index.write_handle(f)
  *         self.e_index.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.col1.write_handle(f)
  *         self.col2.write_handle(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->e_index->__pyx_vtab)->write_handle(__pyx_v_self->e_index, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":207
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":207
  *         self.f_index.write_handle(f)
  *         self.e_index.write_handle(f)
  *         self.col1.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.col2.write_handle(f)
  *         self.write_wordlist(self.id2fword, f)
  */
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->col1->__pyx_vtab)->write_handle(__pyx_v_self->col1, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":208
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":208
  *         self.e_index.write_handle(f)
  *         self.col1.write_handle(f)
  *         self.col2.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.write_wordlist(self.id2fword, f)
  *         self.write_wordlist(self.id2eword, f)
  */
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->col2->__pyx_vtab)->write_handle(__pyx_v_self->col2, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":209
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":209
  *         self.col1.write_handle(f)
  *         self.col2.write_handle(f)
  *         self.write_wordlist(self.id2fword, f)             # <<<<<<<<<<<<<<
  *         self.write_wordlist(self.id2eword, f)
  *         fclose(f)
  */
-  __pyx_t_1 = __pyx_v_self->id2fword;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_BiLex *)__pyx_v_self->__pyx_vtab)->write_wordlist(__pyx_v_self, __pyx_t_1, __pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_BiLex *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->__pyx_vtab)->write_wordlist(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_t_1, __pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":210
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":210
  *         self.col2.write_handle(f)
  *         self.write_wordlist(self.id2fword, f)
  *         self.write_wordlist(self.id2eword, f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  __pyx_t_2 = __pyx_v_self->id2eword;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_BiLex *)__pyx_v_self->__pyx_vtab)->write_wordlist(__pyx_v_self, __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_BiLex *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->__pyx_vtab)->write_wordlist(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":211
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":211
  *         self.write_wordlist(self.id2fword, f)
  *         self.write_wordlist(self.id2eword, f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -14055,7 +13041,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_2write_binary(struct __pyx_obj_3_sa_BiLex
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":214
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":214
  * 
  * 
  *     cdef write_wordlist(self, wordlist, FILE* f):             # <<<<<<<<<<<<<<
@@ -14063,7 +13049,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_2write_binary(struct __pyx_obj_3_sa_BiLex
  *         cdef int num_words
  */
 
-static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_wordlist, FILE *__pyx_v_f) {
+static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_wordlist, FILE *__pyx_v_f) {
   int __pyx_v_word_len;
   int __pyx_v_num_words;
   PyObject *__pyx_v_word = NULL;
@@ -14078,9 +13064,9 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_wordlist", 0);
+  __Pyx_RefNannySetupContext("write_wordlist");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":218
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":218
  *         cdef int num_words
  * 
  *         num_words = len(wordlist)             # <<<<<<<<<<<<<<
@@ -14090,7 +13076,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
   __pyx_t_1 = PyObject_Length(__pyx_v_wordlist); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_num_words = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":219
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":219
  * 
  *         num_words = len(wordlist)
  *         fwrite(&(num_words), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -14099,7 +13085,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
  */
   fwrite((&__pyx_v_num_words), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":220
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":220
  *         num_words = len(wordlist)
  *         fwrite(&(num_words), sizeof(int), 1, f)
  *         for word in wordlist:             # <<<<<<<<<<<<<<
@@ -14115,20 +13101,12 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
     __pyx_t_3 = Py_TYPE(__pyx_t_2)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_2)) {
+    if (PyList_CheckExact(__pyx_t_2)) {
       if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_2)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_1++;
+    } else if (PyTuple_CheckExact(__pyx_t_2)) {
       if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_1++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_2);
       if (unlikely(!__pyx_t_4)) {
@@ -14144,7 +13122,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
     __pyx_v_word = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":221
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":221
  *         fwrite(&(num_words), sizeof(int), 1, f)
  *         for word in wordlist:
  *             word_len = len(word) + 1             # <<<<<<<<<<<<<<
@@ -14154,7 +13132,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
     __pyx_t_5 = PyObject_Length(__pyx_v_word); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_word_len = (__pyx_t_5 + 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":222
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":222
  *         for word in wordlist:
  *             word_len = len(word) + 1
  *             fwrite(&(word_len), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -14163,7 +13141,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
  */
     fwrite((&__pyx_v_word_len), (sizeof(int)), 1, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":223
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":223
  *             word_len = len(word) + 1
  *             fwrite(&(word_len), sizeof(int), 1, f)
  *             fwrite(<char *>word, sizeof(char), word_len, f)             # <<<<<<<<<<<<<<
@@ -14189,7 +13167,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":226
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":226
  * 
  * 
  *     cdef read_wordlist(self, word2id, id2word, FILE* f):             # <<<<<<<<<<<<<<
@@ -14197,11 +13175,11 @@ static PyObject *__pyx_f_3_sa_5BiLex_write_wordlist(CYTHON_UNUSED struct __pyx_o
  *         cdef int word_len
  */
 
-static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_word2id, PyObject *__pyx_v_id2word, FILE *__pyx_v_f) {
+static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_word2id, PyObject *__pyx_v_id2word, FILE *__pyx_v_f) {
   int __pyx_v_num_words;
   int __pyx_v_word_len;
   char *__pyx_v_word;
-  CYTHON_UNUSED long __pyx_v_i;
+  long __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -14211,9 +13189,9 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_wordlist", 0);
+  __Pyx_RefNannySetupContext("read_wordlist");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":231
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":231
  *         cdef char* word
  * 
  *         fread(&(num_words), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -14222,7 +13200,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
  */
   fread((&__pyx_v_num_words), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":232
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":232
  * 
  *         fread(&(num_words), sizeof(int), 1, f)
  *         for i from 0 <= i < num_words:             # <<<<<<<<<<<<<<
@@ -14232,7 +13210,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
   __pyx_t_1 = __pyx_v_num_words;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":233
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":233
  *         fread(&(num_words), sizeof(int), 1, f)
  *         for i from 0 <= i < num_words:
  *             fread(&(word_len), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -14241,7 +13219,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
  */
     fread((&__pyx_v_word_len), (sizeof(int)), 1, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":234
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":234
  *         for i from 0 <= i < num_words:
  *             fread(&(word_len), sizeof(int), 1, f)
  *             word = <char*> malloc (word_len * sizeof(char))             # <<<<<<<<<<<<<<
@@ -14250,7 +13228,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
  */
     __pyx_v_word = ((char *)malloc((__pyx_v_word_len * (sizeof(char)))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":235
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":235
  *             fread(&(word_len), sizeof(int), 1, f)
  *             word = <char*> malloc (word_len * sizeof(char))
  *             fread(word, sizeof(char), word_len, f)             # <<<<<<<<<<<<<<
@@ -14259,7 +13237,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
  */
     fread(__pyx_v_word, (sizeof(char)), __pyx_v_word_len, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":236
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":236
  *             word = <char*> malloc (word_len * sizeof(char))
  *             fread(word, sizeof(char), word_len, f)
  *             word2id[word] = len(id2word)             # <<<<<<<<<<<<<<
@@ -14275,7 +13253,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":237
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":237
  *             fread(word, sizeof(char), word_len, f)
  *             word2id[word] = len(id2word)
  *             id2word.append(word)             # <<<<<<<<<<<<<<
@@ -14289,7 +13267,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":238
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":238
  *             word2id[word] = len(id2word)
  *             id2word.append(word)
  *             free(word)             # <<<<<<<<<<<<<<
@@ -14312,28 +13290,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_read_wordlist(CYTHON_UNUSED struct __pyx_ob
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_5read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_5read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.BiLex.read_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex_4read_binary(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":240
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":240
  *             free(word)
  * 
  *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
@@ -14341,7 +13298,9 @@ static PyObject *__pyx_pw_3_sa_5BiLex_5read_binary(PyObject *__pyx_v_self, PyObj
  *         f = fopen(filename, "r")
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_4read_binary(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_5BiLex_2read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_2read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   FILE *__pyx_v_f;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -14351,9 +13310,18 @@ static PyObject *__pyx_pf_3_sa_5BiLex_4read_binary(struct __pyx_obj_3_sa_BiLex *
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_binary", 0);
+  __Pyx_RefNannySetupContext("read_binary");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.BiLex.read_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":242
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":242
  *     def read_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -14362,77 +13330,77 @@ static PyObject *__pyx_pf_3_sa_5BiLex_4read_binary(struct __pyx_obj_3_sa_BiLex *
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":243
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":243
  *         cdef FILE* f
  *         f = fopen(filename, "r")
  *         self.f_index.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.e_index.read_handle(f)
  *         self.col1.read_handle(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->f_index->__pyx_vtab)->read_handle(__pyx_v_self->f_index, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":244
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":244
  *         f = fopen(filename, "r")
  *         self.f_index.read_handle(f)
  *         self.e_index.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.col1.read_handle(f)
  *         self.col2.read_handle(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->e_index->__pyx_vtab)->read_handle(__pyx_v_self->e_index, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":245
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":245
  *         self.f_index.read_handle(f)
  *         self.e_index.read_handle(f)
  *         self.col1.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.col2.read_handle(f)
  *         self.read_wordlist(self.fword2id, self.id2fword, f)
  */
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->col1->__pyx_vtab)->read_handle(__pyx_v_self->col1, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":246
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":246
  *         self.e_index.read_handle(f)
  *         self.col1.read_handle(f)
  *         self.col2.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.read_wordlist(self.fword2id, self.id2fword, f)
  *         self.read_wordlist(self.eword2id, self.id2eword, f)
  */
-  ((struct __pyx_vtabstruct_3_sa_FloatList *)__pyx_v_self->col2->__pyx_vtab)->read_handle(__pyx_v_self->col2, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_FloatList *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":247
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":247
  *         self.col1.read_handle(f)
  *         self.col2.read_handle(f)
  *         self.read_wordlist(self.fword2id, self.id2fword, f)             # <<<<<<<<<<<<<<
  *         self.read_wordlist(self.eword2id, self.id2eword, f)
  *         fclose(f)
  */
-  __pyx_t_1 = __pyx_v_self->fword2id;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_v_self->id2fword;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = ((struct __pyx_vtabstruct_3_sa_BiLex *)__pyx_v_self->__pyx_vtab)->read_wordlist(__pyx_v_self, __pyx_t_1, __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_3_sa_BiLex *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->__pyx_vtab)->read_wordlist(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_t_1, __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":248
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":248
  *         self.col2.read_handle(f)
  *         self.read_wordlist(self.fword2id, self.id2fword, f)
  *         self.read_wordlist(self.eword2id, self.id2eword, f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  __pyx_t_3 = __pyx_v_self->eword2id;
+  __pyx_t_3 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_2 = __pyx_v_self->id2eword;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_BiLex *)__pyx_v_self->__pyx_vtab)->read_wordlist(__pyx_v_self, __pyx_t_3, __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_BiLex *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->__pyx_vtab)->read_wordlist(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_t_3, __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":249
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":249
  *         self.read_wordlist(self.fword2id, self.id2fword, f)
  *         self.read_wordlist(self.eword2id, self.id2eword, f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -14455,18 +13423,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_4read_binary(struct __pyx_obj_3_sa_BiLex *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_7get_e_id(PyObject *__pyx_v_self, PyObject *__pyx_v_eword); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_7get_e_id(PyObject *__pyx_v_self, PyObject *__pyx_v_eword) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_e_id (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_5BiLex_6get_e_id(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((PyObject *)__pyx_v_eword));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":252
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":252
  * 
  * 
  *     def get_e_id(self, eword):             # <<<<<<<<<<<<<<
@@ -14474,8 +13431,9 @@ static PyObject *__pyx_pw_3_sa_5BiLex_7get_e_id(PyObject *__pyx_v_self, PyObject
  *             e_id = len(self.id2eword)
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_6get_e_id(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_eword) {
-  PyObject *__pyx_v_e_id = NULL;
+static PyObject *__pyx_pf_3_sa_5BiLex_3get_e_id(PyObject *__pyx_v_self, PyObject *__pyx_v_eword); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_3get_e_id(PyObject *__pyx_v_self, PyObject *__pyx_v_eword) {
+  Py_ssize_t __pyx_v_e_id;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -14484,58 +13442,58 @@ static PyObject *__pyx_pf_3_sa_5BiLex_6get_e_id(struct __pyx_obj_3_sa_BiLex *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_e_id", 0);
+  __Pyx_RefNannySetupContext("get_e_id");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":253
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":253
  * 
  *     def get_e_id(self, eword):
  *         if eword not in self.eword2id:             # <<<<<<<<<<<<<<
  *             e_id = len(self.id2eword)
  *             self.id2eword.append(eword)
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_eword, __pyx_v_self->eword2id, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_NegateNonNeg(PySequence_Contains(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id, __pyx_v_eword))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":254
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":254
  *     def get_e_id(self, eword):
  *         if eword not in self.eword2id:
  *             e_id = len(self.id2eword)             # <<<<<<<<<<<<<<
  *             self.id2eword.append(eword)
  *             self.eword2id[eword] = e_id
  */
-    __pyx_t_2 = __pyx_v_self->id2eword;
+    __pyx_t_2 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword;
     __Pyx_INCREF(__pyx_t_2);
     __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_v_e_id = __pyx_t_2;
-    __pyx_t_2 = 0;
+    __pyx_v_e_id = __pyx_t_3;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":255
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":255
  *         if eword not in self.eword2id:
  *             e_id = len(self.id2eword)
  *             self.id2eword.append(eword)             # <<<<<<<<<<<<<<
  *             self.eword2id[eword] = e_id
  *         return self.eword2id[eword]
  */
-    __pyx_t_2 = __Pyx_PyObject_Append(__pyx_v_self->id2eword, __pyx_v_eword); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Append(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword, __pyx_v_eword); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":256
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":256
  *             e_id = len(self.id2eword)
  *             self.id2eword.append(eword)
  *             self.eword2id[eword] = e_id             # <<<<<<<<<<<<<<
  *         return self.eword2id[eword]
  * 
  */
-    if (PyObject_SetItem(__pyx_v_self->eword2id, __pyx_v_eword, __pyx_v_e_id) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_e_id); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    if (PyObject_SetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id, __pyx_v_eword, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":257
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":257
  *             self.id2eword.append(eword)
  *             self.eword2id[eword] = e_id
  *         return self.eword2id[eword]             # <<<<<<<<<<<<<<
@@ -14543,7 +13501,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_6get_e_id(struct __pyx_obj_3_sa_BiLex *__p
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyObject_GetItem(__pyx_v_self->eword2id, __pyx_v_eword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id, __pyx_v_eword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -14556,24 +13514,12 @@ static PyObject *__pyx_pf_3_sa_5BiLex_6get_e_id(struct __pyx_obj_3_sa_BiLex *__p
   __Pyx_AddTraceback("_sa.BiLex.get_e_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_e_id);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_9get_f_id(PyObject *__pyx_v_self, PyObject *__pyx_v_fword); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_9get_f_id(PyObject *__pyx_v_self, PyObject *__pyx_v_fword) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_f_id (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_5BiLex_8get_f_id(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((PyObject *)__pyx_v_fword));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":260
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":260
  * 
  * 
  *     def get_f_id(self, fword):             # <<<<<<<<<<<<<<
@@ -14581,8 +13527,9 @@ static PyObject *__pyx_pw_3_sa_5BiLex_9get_f_id(PyObject *__pyx_v_self, PyObject
  *             f_id = len(self.id2fword)
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_8get_f_id(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_fword) {
-  PyObject *__pyx_v_f_id = NULL;
+static PyObject *__pyx_pf_3_sa_5BiLex_4get_f_id(PyObject *__pyx_v_self, PyObject *__pyx_v_fword); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_4get_f_id(PyObject *__pyx_v_self, PyObject *__pyx_v_fword) {
+  Py_ssize_t __pyx_v_f_id;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -14591,58 +13538,58 @@ static PyObject *__pyx_pf_3_sa_5BiLex_8get_f_id(struct __pyx_obj_3_sa_BiLex *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_f_id", 0);
+  __Pyx_RefNannySetupContext("get_f_id");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":261
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":261
  * 
  *     def get_f_id(self, fword):
  *         if fword not in self.fword2id:             # <<<<<<<<<<<<<<
  *             f_id = len(self.id2fword)
  *             self.id2fword.append(fword)
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_fword, __pyx_v_self->fword2id, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_NegateNonNeg(PySequence_Contains(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id, __pyx_v_fword))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":262
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":262
  *     def get_f_id(self, fword):
  *         if fword not in self.fword2id:
  *             f_id = len(self.id2fword)             # <<<<<<<<<<<<<<
  *             self.id2fword.append(fword)
  *             self.fword2id[fword] = f_id
  */
-    __pyx_t_2 = __pyx_v_self->id2fword;
+    __pyx_t_2 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword;
     __Pyx_INCREF(__pyx_t_2);
     __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_v_f_id = __pyx_t_2;
-    __pyx_t_2 = 0;
+    __pyx_v_f_id = __pyx_t_3;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":263
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":263
  *         if fword not in self.fword2id:
  *             f_id = len(self.id2fword)
  *             self.id2fword.append(fword)             # <<<<<<<<<<<<<<
  *             self.fword2id[fword] = f_id
  *         return self.fword2id[fword]
  */
-    __pyx_t_2 = __Pyx_PyObject_Append(__pyx_v_self->id2fword, __pyx_v_fword); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Append(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword, __pyx_v_fword); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":264
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":264
  *             f_id = len(self.id2fword)
  *             self.id2fword.append(fword)
  *             self.fword2id[fword] = f_id             # <<<<<<<<<<<<<<
  *         return self.fword2id[fword]
  * 
  */
-    if (PyObject_SetItem(__pyx_v_self->fword2id, __pyx_v_fword, __pyx_v_f_id) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_f_id); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    if (PyObject_SetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id, __pyx_v_fword, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":265
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":265
  *             self.id2fword.append(fword)
  *             self.fword2id[fword] = f_id
  *         return self.fword2id[fword]             # <<<<<<<<<<<<<<
@@ -14650,7 +13597,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_8get_f_id(struct __pyx_obj_3_sa_BiLex *__p
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyObject_GetItem(__pyx_v_self->fword2id, __pyx_v_fword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id, __pyx_v_fword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -14663,34 +13610,12 @@ static PyObject *__pyx_pf_3_sa_5BiLex_8get_f_id(struct __pyx_obj_3_sa_BiLex *__p
   __Pyx_AddTraceback("_sa.BiLex.get_f_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_f_id);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_11read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_11read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.BiLex.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex_10read_text(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":268
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":268
  * 
  * 
  *     def read_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -14698,7 +13623,9 @@ static PyObject *__pyx_pw_3_sa_5BiLex_11read_text(PyObject *__pyx_v_self, PyObje
  *         cdef IntList fcount
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_5BiLex_5read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_5read_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_i = 0;
   PyObject *__pyx_v_j = 0;
   PyObject *__pyx_v_e_id = 0;
@@ -14743,9 +13670,18 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_text", 0);
+  __Pyx_RefNannySetupContext("read_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.BiLex.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":272
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":272
  *         cdef IntList fcount
  * 
  *         fcount = IntList()             # <<<<<<<<<<<<<<
@@ -14757,7 +13693,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
   __pyx_v_fcount = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":273
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":273
  * 
  *         fcount = IntList()
  *         with gzip_or_text(filename) as f:             # <<<<<<<<<<<<<<
@@ -14770,7 +13706,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
     __pyx_t_2 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
     __pyx_t_2 = 0;
@@ -14780,12 +13716,12 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____exit__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____enter__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     /*try:*/ {
       {
         __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -14793,11 +13729,10 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
         __Pyx_XGOTREF(__pyx_t_6);
         __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_1);
-          __pyx_v_f = __pyx_t_1;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_v_f = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":275
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":275
  *         with gzip_or_text(filename) as f:
  *             # first loop merely establishes size of array objects
  *             for line in f:             # <<<<<<<<<<<<<<
@@ -14805,119 +13740,102 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
  *                 f_id = self.get_f_id(fword)
  */
           if (PyList_CheckExact(__pyx_v_f) || PyTuple_CheckExact(__pyx_v_f)) {
-            __pyx_t_1 = __pyx_v_f; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
+            __pyx_t_2 = __pyx_v_f; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
             __pyx_t_9 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext;
+            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++;
+            } else if (PyTuple_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++;
             } else {
-              __pyx_t_2 = __pyx_t_9(__pyx_t_1);
-              if (unlikely(!__pyx_t_2)) {
+              __pyx_t_3 = __pyx_t_9(__pyx_t_2);
+              if (unlikely(!__pyx_t_3)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_2);
+              __Pyx_GOTREF(__pyx_t_3);
             }
             __Pyx_XDECREF(__pyx_v_line);
-            __pyx_v_line = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_line = __pyx_t_3;
+            __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":276
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":276
  *             # first loop merely establishes size of array objects
  *             for line in f:
  *                 (fword, eword, score1, score2) = line.split()             # <<<<<<<<<<<<<<
  *                 f_id = self.get_f_id(fword)
  *                 e_id = self.get_e_id(eword)
  */
-            __pyx_t_2 = PyObject_GetAttr(__pyx_v_line, __pyx_n_s__split); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_3 = PyObject_GetAttr(__pyx_v_line, __pyx_n_s__split); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_3);
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
-              PyObject* sequence = __pyx_t_3;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              Py_ssize_t size = Py_SIZE(sequence);
-              #else
-              Py_ssize_t size = PySequence_Size(sequence);
-              #endif
-              if (unlikely(size != 4)) {
-                if (size > 4) __Pyx_RaiseTooManyValuesError(4);
-                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              }
-              #if CYTHON_COMPILING_IN_CPYTHON
+            __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+            if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+              PyObject* sequence = __pyx_t_1;
               if (likely(PyTuple_CheckExact(sequence))) {
-                __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+                if (unlikely(PyTuple_GET_SIZE(sequence) != 4)) {
+                  if (PyTuple_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4);
+                  else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                }
+                __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
                 __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
                 __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
                 __pyx_t_12 = PyTuple_GET_ITEM(sequence, 3); 
               } else {
-                __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+                if (unlikely(PyList_GET_SIZE(sequence) != 4)) {
+                  if (PyList_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4);
+                  else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                }
+                __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
                 __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
                 __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
                 __pyx_t_12 = PyList_GET_ITEM(sequence, 3); 
               }
-              __Pyx_INCREF(__pyx_t_2);
+              __Pyx_INCREF(__pyx_t_3);
               __Pyx_INCREF(__pyx_t_10);
               __Pyx_INCREF(__pyx_t_11);
               __Pyx_INCREF(__pyx_t_12);
-              #else
-              Py_ssize_t i;
-              PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
-              for (i=0; i < 4; i++) {
-                PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                *(temps[i]) = item;
-              }
-              #endif
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            } else
-            {
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            } else {
               Py_ssize_t index = -1;
-              PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
-              __pyx_t_13 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_13 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_13);
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
               __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
-              for (index=0; index < 4; index++) {
-                PyObject* item = __pyx_t_14(__pyx_t_13); if (unlikely(!item)) goto __pyx_L18_unpacking_failed;
-                __Pyx_GOTREF(item);
-                *(temps[index]) = item;
-              }
-              if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 4) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_14 = NULL;
+              index = 0; __pyx_t_3 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_3)) goto __pyx_L19_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_3);
+              index = 1; __pyx_t_10 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_10)) goto __pyx_L19_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_10);
+              index = 2; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L19_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_11);
+              index = 3; __pyx_t_12 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L19_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_12);
+              if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 4) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              goto __pyx_L19_unpacking_done;
-              __pyx_L18_unpacking_failed:;
+              goto __pyx_L20_unpacking_done;
+              __pyx_L19_unpacking_failed:;
               __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              __pyx_t_14 = NULL;
-              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-              {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_L19_unpacking_done:;
+              if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+              if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+              {__pyx_filename = __pyx_f[5]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __pyx_L20_unpacking_done:;
             }
             __Pyx_XDECREF(__pyx_v_fword);
-            __pyx_v_fword = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_fword = __pyx_t_3;
+            __pyx_t_3 = 0;
             __Pyx_XDECREF(__pyx_v_eword);
             __pyx_v_eword = __pyx_t_10;
             __pyx_t_10 = 0;
@@ -14928,51 +13846,51 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
             __pyx_v_score2 = __pyx_t_12;
             __pyx_t_12 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":277
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":277
  *             for line in f:
  *                 (fword, eword, score1, score2) = line.split()
  *                 f_id = self.get_f_id(fword)             # <<<<<<<<<<<<<<
  *                 e_id = self.get_e_id(eword)
  *                 while f_id >= len(fcount):
  */
-            __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_f_id); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_12);
+            __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_f_id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_12));
             __Pyx_INCREF(__pyx_v_fword);
             PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_fword);
             __Pyx_GIVEREF(__pyx_v_fword);
-            __pyx_t_11 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
             __Pyx_XDECREF(__pyx_v_f_id);
             __pyx_v_f_id = __pyx_t_11;
             __pyx_t_11 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":278
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":278
  *                 (fword, eword, score1, score2) = line.split()
  *                 f_id = self.get_f_id(fword)
  *                 e_id = self.get_e_id(eword)             # <<<<<<<<<<<<<<
  *                 while f_id >= len(fcount):
  *                     fcount.append(0)
  */
-            __pyx_t_11 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_e_id); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_11 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_e_id); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_12);
+            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_12));
             __Pyx_INCREF(__pyx_v_eword);
             PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_eword);
             __Pyx_GIVEREF(__pyx_v_eword);
-            __pyx_t_3 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
             __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
             __Pyx_XDECREF(__pyx_v_e_id);
-            __pyx_v_e_id = __pyx_t_3;
-            __pyx_t_3 = 0;
+            __pyx_v_e_id = __pyx_t_1;
+            __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":279
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":279
  *                 f_id = self.get_f_id(fword)
  *                 e_id = self.get_e_id(eword)
  *                 while f_id >= len(fcount):             # <<<<<<<<<<<<<<
@@ -14980,41 +13898,42 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1
  */
             while (1) {
-              __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_fcount)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_3);
-              __pyx_t_12 = PyObject_RichCompare(__pyx_v_f_id, __pyx_t_3, Py_GE); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-              __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_fcount)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_12 = PyObject_RichCompare(__pyx_v_f_id, __pyx_t_1, Py_GE); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_12);
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+              __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
               if (!__pyx_t_16) break;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":280
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":280
  *                 e_id = self.get_e_id(eword)
  *                 while f_id >= len(fcount):
  *                     fcount.append(0)             # <<<<<<<<<<<<<<
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1
  * 
  */
-              __pyx_t_12 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_fcount), __pyx_int_0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_12 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_fcount), __pyx_int_0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
             }
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":281
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":281
  *                 while f_id >= len(fcount):
  *                     fcount.append(0)
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1             # <<<<<<<<<<<<<<
  * 
  *             # Allocate space for dictionary in arrays
  */
-            __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             (__pyx_v_fcount->arr[__pyx_t_17]) = ((__pyx_v_fcount->arr[__pyx_t_15]) + 1);
           }
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":284
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":284
  * 
  *             # Allocate space for dictionary in arrays
  *             N = 0             # <<<<<<<<<<<<<<
@@ -15024,192 +13943,192 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
           __Pyx_INCREF(__pyx_int_0);
           __pyx_v_N = __pyx_int_0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":285
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":285
  *             # Allocate space for dictionary in arrays
  *             N = 0
  *             n_f = len(fcount)             # <<<<<<<<<<<<<<
  *             self.f_index = IntList(initial_len=n_f+1)
  *             for i from 0 <= i < n_f:
  */
-          __pyx_t_8 = PyObject_Length(((PyObject *)__pyx_v_fcount)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_v_n_f = __pyx_t_1;
-          __pyx_t_1 = 0;
+          __pyx_t_8 = PyObject_Length(((PyObject *)__pyx_v_fcount)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_2);
+          __pyx_v_n_f = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":286
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":286
  *             N = 0
  *             n_f = len(fcount)
  *             self.f_index = IntList(initial_len=n_f+1)             # <<<<<<<<<<<<<<
  *             for i from 0 <= i < n_f:
  *                 self.f_index.arr[i] = N
  */
-          __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-          __pyx_t_12 = PyNumber_Add(__pyx_v_n_f, __pyx_int_1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+          __pyx_t_12 = PyNumber_Add(__pyx_v_n_f, __pyx_int_1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_12);
-          if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          __pyx_t_12 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_12 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_12);
-          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
           __Pyx_GIVEREF(__pyx_t_12);
-          __Pyx_GOTREF(__pyx_v_self->f_index);
-          __Pyx_DECREF(((PyObject *)__pyx_v_self->f_index));
-          __pyx_v_self->f_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_12);
+          __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index);
+          __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index));
+          ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_12);
           __pyx_t_12 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":287
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":287
  *             n_f = len(fcount)
  *             self.f_index = IntList(initial_len=n_f+1)
  *             for i from 0 <= i < n_f:             # <<<<<<<<<<<<<<
  *                 self.f_index.arr[i] = N
  *                 N = N + fcount.arr[i]
  */
-          __pyx_t_18 = __Pyx_PyInt_AsLong(__pyx_v_n_f); if (unlikely((__pyx_t_18 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_18 = __Pyx_PyInt_AsLong(__pyx_v_n_f); if (unlikely((__pyx_t_18 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19++) {
-            __pyx_t_12 = PyInt_FromLong(__pyx_t_19); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_12 = PyInt_FromLong(__pyx_t_19); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_12);
             __Pyx_XDECREF(__pyx_v_i);
             __pyx_v_i = __pyx_t_12;
             __pyx_t_12 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":288
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":288
  *             self.f_index = IntList(initial_len=n_f+1)
  *             for i from 0 <= i < n_f:
  *                 self.f_index.arr[i] = N             # <<<<<<<<<<<<<<
  *                 N = N + fcount.arr[i]
  *                 fcount.arr[i] = 0
  */
-            __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_v_N); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            (__pyx_v_self->f_index->arr[__pyx_t_8]) = __pyx_t_20;
+            __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_v_N); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            (((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_8]) = __pyx_t_20;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":289
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":289
  *             for i from 0 <= i < n_f:
  *                 self.f_index.arr[i] = N
  *                 N = N + fcount.arr[i]             # <<<<<<<<<<<<<<
  *                 fcount.arr[i] = 0
  *             self.f_index.arr[n_f] = N
  */
-            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_12 = PyInt_FromLong((__pyx_v_fcount->arr[__pyx_t_8])); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_12 = PyInt_FromLong((__pyx_v_fcount->arr[__pyx_t_8])); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_12);
-            __pyx_t_1 = PyNumber_Add(__pyx_v_N, __pyx_t_12); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = PyNumber_Add(__pyx_v_N, __pyx_t_12); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
             __Pyx_DECREF(__pyx_v_N);
-            __pyx_v_N = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_N = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":290
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":290
  *                 self.f_index.arr[i] = N
  *                 N = N + fcount.arr[i]
  *                 fcount.arr[i] = 0             # <<<<<<<<<<<<<<
  *             self.f_index.arr[n_f] = N
  *             self.e_index = IntList(initial_len=N)
  */
-            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             (__pyx_v_fcount->arr[__pyx_t_8]) = 0;
-            __pyx_t_19 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_19 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_19 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_19 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           }
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":287
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":287
  *             n_f = len(fcount)
  *             self.f_index = IntList(initial_len=n_f+1)
  *             for i from 0 <= i < n_f:             # <<<<<<<<<<<<<<
  *                 self.f_index.arr[i] = N
  *                 N = N + fcount.arr[i]
  */
-          __pyx_t_1 = PyInt_FromLong(__pyx_t_19); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_2 = PyInt_FromLong(__pyx_t_19); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_2);
           __Pyx_XDECREF(__pyx_v_i);
-          __pyx_v_i = __pyx_t_1;
-          __pyx_t_1 = 0;
+          __pyx_v_i = __pyx_t_2;
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":291
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":291
  *                 N = N + fcount.arr[i]
  *                 fcount.arr[i] = 0
  *             self.f_index.arr[n_f] = N             # <<<<<<<<<<<<<<
  *             self.e_index = IntList(initial_len=N)
  *             self.col1 = FloatList(initial_len=N)
  */
-          __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_v_N); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_n_f); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          (__pyx_v_self->f_index->arr[__pyx_t_8]) = __pyx_t_20;
+          __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_v_N); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_n_f); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          (((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_8]) = __pyx_t_20;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":292
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":292
  *                 fcount.arr[i] = 0
  *             self.f_index.arr[n_f] = N
  *             self.e_index = IntList(initial_len=N)             # <<<<<<<<<<<<<<
  *             self.col1 = FloatList(initial_len=N)
  *             self.col2 = FloatList(initial_len=N)
  */
-          __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-          if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_v_N) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __pyx_t_12 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+          if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_v_N) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __pyx_t_12 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_12);
-          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
           __Pyx_GIVEREF(__pyx_t_12);
-          __Pyx_GOTREF(__pyx_v_self->e_index);
-          __Pyx_DECREF(((PyObject *)__pyx_v_self->e_index));
-          __pyx_v_self->e_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_12);
+          __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index);
+          __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index));
+          ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_12);
           __pyx_t_12 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":293
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":293
  *             self.f_index.arr[n_f] = N
  *             self.e_index = IntList(initial_len=N)
  *             self.col1 = FloatList(initial_len=N)             # <<<<<<<<<<<<<<
  *             self.col2 = FloatList(initial_len=N)
  * 
  */
-          __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(((PyObject *)__pyx_t_12));
-          if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__initial_len), __pyx_v_N) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__initial_len), __pyx_v_N) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
-          __Pyx_GIVEREF(__pyx_t_1);
-          __Pyx_GOTREF(__pyx_v_self->col1);
-          __Pyx_DECREF(((PyObject *)__pyx_v_self->col1));
-          __pyx_v_self->col1 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_1);
-          __pyx_t_1 = 0;
+          __Pyx_GIVEREF(__pyx_t_2);
+          __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1);
+          __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1));
+          ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_2);
+          __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":294
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":294
  *             self.e_index = IntList(initial_len=N)
  *             self.col1 = FloatList(initial_len=N)
  *             self.col2 = FloatList(initial_len=N)             # <<<<<<<<<<<<<<
  * 
  *             # Re-read file, placing words into buckets
  */
-          __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-          if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_v_N) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __pyx_t_12 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+          if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_v_N) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __pyx_t_12 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_FloatList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_12);
-          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
           __Pyx_GIVEREF(__pyx_t_12);
-          __Pyx_GOTREF(__pyx_v_self->col2);
-          __Pyx_DECREF(((PyObject *)__pyx_v_self->col2));
-          __pyx_v_self->col2 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_12);
+          __Pyx_GOTREF(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2);
+          __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2));
+          ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2 = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_12);
           __pyx_t_12 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":297
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":297
  * 
  *             # Re-read file, placing words into buckets
  *             f.seek(0)             # <<<<<<<<<<<<<<
  *             for line in f:
  *                 (fword, eword, score1, score2) = line.split()
  */
-          __pyx_t_12 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__seek); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_12 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__seek); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_12);
-          __pyx_t_1 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_k_tuple_43), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_2 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_k_tuple_43), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":298
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":298
  *             # Re-read file, placing words into buckets
  *             f.seek(0)
  *             for line in f:             # <<<<<<<<<<<<<<
@@ -15217,34 +14136,26 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
  *                 f_id = self.get_f_id(fword)
  */
           if (PyList_CheckExact(__pyx_v_f) || PyTuple_CheckExact(__pyx_v_f)) {
-            __pyx_t_1 = __pyx_v_f; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
+            __pyx_t_2 = __pyx_v_f; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
             __pyx_t_9 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext;
+            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_12 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_12); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_12 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_12); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_12 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_12 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_12); __pyx_t_8++;
+            } else if (PyTuple_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_12); __pyx_t_8++;
             } else {
-              __pyx_t_12 = __pyx_t_9(__pyx_t_1);
+              __pyx_t_12 = __pyx_t_9(__pyx_t_2);
               if (unlikely(!__pyx_t_12)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
@@ -15254,78 +14165,69 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
             __pyx_v_line = __pyx_t_12;
             __pyx_t_12 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":299
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":299
  *             f.seek(0)
  *             for line in f:
  *                 (fword, eword, score1, score2) = line.split()             # <<<<<<<<<<<<<<
  *                 f_id = self.get_f_id(fword)
  *                 e_id = self.get_e_id(eword)
  */
-            __pyx_t_12 = PyObject_GetAttr(__pyx_v_line, __pyx_n_s__split); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_12 = PyObject_GetAttr(__pyx_v_line, __pyx_n_s__split); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_12);
-            __pyx_t_3 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-            if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
-              PyObject* sequence = __pyx_t_3;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              Py_ssize_t size = Py_SIZE(sequence);
-              #else
-              Py_ssize_t size = PySequence_Size(sequence);
-              #endif
-              if (unlikely(size != 4)) {
-                if (size > 4) __Pyx_RaiseTooManyValuesError(4);
-                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              }
-              #if CYTHON_COMPILING_IN_CPYTHON
+            if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+              PyObject* sequence = __pyx_t_1;
               if (likely(PyTuple_CheckExact(sequence))) {
+                if (unlikely(PyTuple_GET_SIZE(sequence) != 4)) {
+                  if (PyTuple_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4);
+                  else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                }
                 __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
                 __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
                 __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); 
-                __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); 
+                __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
               } else {
+                if (unlikely(PyList_GET_SIZE(sequence) != 4)) {
+                  if (PyList_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4);
+                  else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                }
                 __pyx_t_12 = PyList_GET_ITEM(sequence, 0); 
                 __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
                 __pyx_t_10 = PyList_GET_ITEM(sequence, 2); 
-                __pyx_t_2 = PyList_GET_ITEM(sequence, 3); 
+                __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
               }
               __Pyx_INCREF(__pyx_t_12);
               __Pyx_INCREF(__pyx_t_11);
               __Pyx_INCREF(__pyx_t_10);
-              __Pyx_INCREF(__pyx_t_2);
-              #else
-              Py_ssize_t i;
-              PyObject** temps[4] = {&__pyx_t_12,&__pyx_t_11,&__pyx_t_10,&__pyx_t_2};
-              for (i=0; i < 4; i++) {
-                PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-                *(temps[i]) = item;
-              }
-              #endif
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            } else
-            {
+              __Pyx_INCREF(__pyx_t_3);
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            } else {
               Py_ssize_t index = -1;
-              PyObject** temps[4] = {&__pyx_t_12,&__pyx_t_11,&__pyx_t_10,&__pyx_t_2};
-              __pyx_t_13 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_13 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_13);
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
               __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
-              for (index=0; index < 4; index++) {
-                PyObject* item = __pyx_t_14(__pyx_t_13); if (unlikely(!item)) goto __pyx_L26_unpacking_failed;
-                __Pyx_GOTREF(item);
-                *(temps[index]) = item;
-              }
-              if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 4) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_14 = NULL;
+              index = 0; __pyx_t_12 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L27_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_12);
+              index = 1; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L27_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_11);
+              index = 2; __pyx_t_10 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_10)) goto __pyx_L27_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_10);
+              index = 3; __pyx_t_3 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_3)) goto __pyx_L27_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_3);
+              if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 4) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              goto __pyx_L27_unpacking_done;
-              __pyx_L26_unpacking_failed:;
+              goto __pyx_L28_unpacking_done;
+              __pyx_L27_unpacking_failed:;
               __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              __pyx_t_14 = NULL;
-              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-              {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_L27_unpacking_done:;
+              if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+              if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+              {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __pyx_L28_unpacking_done:;
             }
             __Pyx_XDECREF(__pyx_v_fword);
             __pyx_v_fword = __pyx_t_12;
@@ -15337,141 +14239,141 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
             __pyx_v_score1 = __pyx_t_10;
             __pyx_t_10 = 0;
             __Pyx_XDECREF(__pyx_v_score2);
-            __pyx_v_score2 = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_score2 = __pyx_t_3;
+            __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":300
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":300
  *             for line in f:
  *                 (fword, eword, score1, score2) = line.split()
  *                 f_id = self.get_f_id(fword)             # <<<<<<<<<<<<<<
  *                 e_id = self.get_e_id(eword)
  *                 index = self.f_index.arr[f_id] + fcount.arr[f_id]
  */
-            __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_f_id); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_f_id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_3));
             __Pyx_INCREF(__pyx_v_fword);
-            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_fword);
+            PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_fword);
             __Pyx_GIVEREF(__pyx_v_fword);
-            __pyx_t_10 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
             __Pyx_XDECREF(__pyx_v_f_id);
             __pyx_v_f_id = __pyx_t_10;
             __pyx_t_10 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":301
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":301
  *                 (fword, eword, score1, score2) = line.split()
  *                 f_id = self.get_f_id(fword)
  *                 e_id = self.get_e_id(eword)             # <<<<<<<<<<<<<<
  *                 index = self.f_index.arr[f_id] + fcount.arr[f_id]
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1
  */
-            __pyx_t_10 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_e_id); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_e_id); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_3));
             __Pyx_INCREF(__pyx_v_eword);
-            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_eword);
+            PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_eword);
             __Pyx_GIVEREF(__pyx_v_eword);
-            __pyx_t_3 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
             __Pyx_XDECREF(__pyx_v_e_id);
-            __pyx_v_e_id = __pyx_t_3;
-            __pyx_t_3 = 0;
+            __pyx_v_e_id = __pyx_t_1;
+            __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":302
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":302
  *                 f_id = self.get_f_id(fword)
  *                 e_id = self.get_e_id(eword)
  *                 index = self.f_index.arr[f_id] + fcount.arr[f_id]             # <<<<<<<<<<<<<<
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1
  *                 self.e_index.arr[index] = int(e_id)
  */
-            __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_3 = PyInt_FromLong(((__pyx_v_self->f_index->arr[__pyx_t_15]) + (__pyx_v_fcount->arr[__pyx_t_17]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_1 = PyInt_FromLong(((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_15]) + (__pyx_v_fcount->arr[__pyx_t_17]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
             __Pyx_XDECREF(__pyx_v_index);
-            __pyx_v_index = __pyx_t_3;
-            __pyx_t_3 = 0;
+            __pyx_v_index = __pyx_t_1;
+            __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":303
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":303
  *                 e_id = self.get_e_id(eword)
  *                 index = self.f_index.arr[f_id] + fcount.arr[f_id]
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1             # <<<<<<<<<<<<<<
  *                 self.e_index.arr[index] = int(e_id)
  *                 self.col1[index] = float(score1)
  */
-            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             (__pyx_v_fcount->arr[__pyx_t_15]) = ((__pyx_v_fcount->arr[__pyx_t_17]) + 1);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":304
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":304
  *                 index = self.f_index.arr[f_id] + fcount.arr[f_id]
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1
  *                 self.e_index.arr[index] = int(e_id)             # <<<<<<<<<<<<<<
  *                 self.col1[index] = float(score1)
  *                 self.col2[index] = float(score2)
  */
-            __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
             __Pyx_INCREF(__pyx_v_e_id);
-            PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_e_id);
+            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_e_id);
             __Pyx_GIVEREF(__pyx_v_e_id);
-            __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-            __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            (__pyx_v_self->e_index->arr[__pyx_t_17]) = __pyx_t_20;
+            __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+            __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            (((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index->arr[__pyx_t_17]) = __pyx_t_20;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":305
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":305
  *                 fcount.arr[f_id] = fcount.arr[f_id] + 1
  *                 self.e_index.arr[index] = int(e_id)
  *                 self.col1[index] = float(score1)             # <<<<<<<<<<<<<<
  *                 self.col2[index] = float(score2)
  * 
  */
-            __pyx_t_21 = __Pyx_PyObject_AsDouble(__pyx_v_score1); if (unlikely(__pyx_t_21 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_2 = PyFloat_FromDouble(__pyx_t_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            if (PyObject_SetItem(((PyObject *)__pyx_v_self->col1), __pyx_v_index, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __pyx_t_21 = __Pyx_PyObject_AsDouble(__pyx_v_score1); if (unlikely(__pyx_t_21 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_3 = PyFloat_FromDouble(__pyx_t_21); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_3);
+            if (PyObject_SetItem(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1), __pyx_v_index, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":306
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":306
  *                 self.e_index.arr[index] = int(e_id)
  *                 self.col1[index] = float(score1)
  *                 self.col2[index] = float(score2)             # <<<<<<<<<<<<<<
  * 
  *         # Sort buckets by eword
  */
-            __pyx_t_21 = __Pyx_PyObject_AsDouble(__pyx_v_score2); if (unlikely(__pyx_t_21 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_2 = PyFloat_FromDouble(__pyx_t_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            if (PyObject_SetItem(((PyObject *)__pyx_v_self->col2), __pyx_v_index, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __pyx_t_21 = __Pyx_PyObject_AsDouble(__pyx_v_score2); if (unlikely(__pyx_t_21 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_3 = PyFloat_FromDouble(__pyx_t_21); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_3);
+            if (PyObject_SetItem(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2), __pyx_v_index, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           }
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         }
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
         __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":273
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":273
  * 
  *         fcount = IntList()
  *         with gzip_or_text(filename) as f:             # <<<<<<<<<<<<<<
@@ -15480,57 +14382,57 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.BiLex.read_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_10);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
+          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_10));
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
           __Pyx_INCREF(__pyx_t_3);
-          PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_3);
+          PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_3);
           __Pyx_GIVEREF(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_1);
+          __Pyx_GIVEREF(__pyx_t_1);
           __pyx_t_22 = PyObject_Call(__pyx_t_4, __pyx_t_10, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_22)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_22)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_22);
           __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_22);
           __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
-          if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_23 = (!__pyx_t_16);
           if (__pyx_t_23) {
-            __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_2);
             __Pyx_GIVEREF(__pyx_t_3);
-            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-            __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; 
-            {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L30;
+            __Pyx_GIVEREF(__pyx_t_1);
+            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_3, __pyx_t_1);
+            __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_1 = 0; 
+            {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L31;
           }
-          __pyx_L30:;
+          __pyx_L31:;
           __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          goto __pyx_L8_exception_handled;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
@@ -15544,30 +14446,29 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
         if (unlikely(__pyx_t_23 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L31;
-    __pyx_L3_error:;
+    goto __pyx_L32;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L1_error;
-    __pyx_L31:;
+    __pyx_L32:;
   }
+  if (unlikely(!__pyx_v_n_f)) { __Pyx_RaiseUnboundLocalError("n_f"); {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }__pyx_t_19 = __Pyx_PyInt_AsLong(__pyx_v_n_f); if (unlikely((__pyx_t_19 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":309
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":309
  * 
  *         # Sort buckets by eword
  *         for b from 0 <= b < n_f:             # <<<<<<<<<<<<<<
  *             i = self.f_index.arr[b]
  *             j = self.f_index.arr[b+1]
  */
-  if (unlikely(!__pyx_v_n_f)) { __Pyx_RaiseUnboundLocalError("n_f"); {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-  __pyx_t_19 = __Pyx_PyInt_AsLong(__pyx_v_n_f); if (unlikely((__pyx_t_19 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_19; __pyx_t_18++) {
-    __pyx_t_3 = PyInt_FromLong(__pyx_t_18); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_1 = PyInt_FromLong(__pyx_t_18); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_XDECREF(__pyx_v_b);
-    __pyx_v_b = __pyx_t_3;
-    __pyx_t_3 = 0;
+    __pyx_v_b = __pyx_t_1;
+    __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":310
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":310
  *         # Sort buckets by eword
  *         for b from 0 <= b < n_f:
  *             i = self.f_index.arr[b]             # <<<<<<<<<<<<<<
@@ -15575,30 +14476,30 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
  *             self.qsort(i,j, "")
  */
     __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_b); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = PyInt_FromLong((__pyx_v_self->f_index->arr[__pyx_t_8])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_8])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_XDECREF(__pyx_v_i);
-    __pyx_v_i = __pyx_t_3;
-    __pyx_t_3 = 0;
+    __pyx_v_i = __pyx_t_1;
+    __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":311
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":311
  *         for b from 0 <= b < n_f:
  *             i = self.f_index.arr[b]
  *             j = self.f_index.arr[b+1]             # <<<<<<<<<<<<<<
  *             self.qsort(i,j, "")
  * 
  */
-    __pyx_t_3 = PyNumber_Add(__pyx_v_b, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyInt_FromLong((__pyx_v_self->f_index->arr[__pyx_t_8])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_1 = PyNumber_Add(__pyx_v_b, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_8])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_XDECREF(__pyx_v_j);
-    __pyx_v_j = __pyx_t_3;
-    __pyx_t_3 = 0;
+    __pyx_v_j = __pyx_t_1;
+    __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":312
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":312
  *             i = self.f_index.arr[b]
  *             j = self.f_index.arr[b+1]
  *             self.qsort(i,j, "")             # <<<<<<<<<<<<<<
@@ -15607,27 +14508,27 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
  */
     __pyx_t_20 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_24 = __Pyx_PyInt_AsInt(__pyx_v_j); if (unlikely((__pyx_t_24 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_kp_s_45);
-    __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_BiLex *)__pyx_v_self->__pyx_vtab)->qsort(__pyx_v_self, __pyx_t_20, __pyx_t_24, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = ((PyObject *)__pyx_kp_s_45);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_t_3 = ((struct __pyx_vtabstruct_3_sa_BiLex *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->__pyx_vtab)->qsort(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_t_20, __pyx_t_24, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_18 = __Pyx_PyInt_AsLong(__pyx_v_b); if (unlikely((__pyx_t_18 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":309
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":309
  * 
  *         # Sort buckets by eword
  *         for b from 0 <= b < n_f:             # <<<<<<<<<<<<<<
  *             i = self.f_index.arr[b]
  *             j = self.f_index.arr[b+1]
  */
-  __pyx_t_2 = PyInt_FromLong(__pyx_t_18); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyInt_FromLong(__pyx_t_18); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_v_b);
-  __pyx_v_b = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_v_b = __pyx_t_3;
+  __pyx_t_3 = 0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -15662,7 +14563,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_10read_text(struct __pyx_obj_3_sa_BiLex *_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":315
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":315
  * 
  * 
  *     cdef swap(self, int i, int j):             # <<<<<<<<<<<<<<
@@ -15676,9 +14577,9 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("swap", 0);
+  __Pyx_RefNannySetupContext("swap");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":319
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":319
  *         cdef float ftmp
  * 
  *         if i == j:             # <<<<<<<<<<<<<<
@@ -15688,7 +14589,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   __pyx_t_1 = (__pyx_v_i == __pyx_v_j);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":320
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":320
  * 
  *         if i == j:
  *             return             # <<<<<<<<<<<<<<
@@ -15702,7 +14603,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":322
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":322
  *             return
  * 
  *         itmp = self.e_index.arr[i]             # <<<<<<<<<<<<<<
@@ -15711,7 +14612,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   __pyx_v_itmp = (__pyx_v_self->e_index->arr[__pyx_v_i]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":323
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":323
  * 
  *         itmp = self.e_index.arr[i]
  *         self.e_index.arr[i] = self.e_index.arr[j]             # <<<<<<<<<<<<<<
@@ -15720,7 +14621,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   (__pyx_v_self->e_index->arr[__pyx_v_i]) = (__pyx_v_self->e_index->arr[__pyx_v_j]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":324
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":324
  *         itmp = self.e_index.arr[i]
  *         self.e_index.arr[i] = self.e_index.arr[j]
  *         self.e_index.arr[j] = itmp             # <<<<<<<<<<<<<<
@@ -15729,7 +14630,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   (__pyx_v_self->e_index->arr[__pyx_v_j]) = __pyx_v_itmp;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":326
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":326
  *         self.e_index.arr[j] = itmp
  * 
  *         ftmp = self.col1.arr[i]             # <<<<<<<<<<<<<<
@@ -15738,7 +14639,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   __pyx_v_ftmp = (__pyx_v_self->col1->arr[__pyx_v_i]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":327
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":327
  * 
  *         ftmp = self.col1.arr[i]
  *         self.col1.arr[i] = self.col1.arr[j]             # <<<<<<<<<<<<<<
@@ -15747,7 +14648,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   (__pyx_v_self->col1->arr[__pyx_v_i]) = (__pyx_v_self->col1->arr[__pyx_v_j]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":328
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":328
  *         ftmp = self.col1.arr[i]
  *         self.col1.arr[i] = self.col1.arr[j]
  *         self.col1.arr[j] = ftmp             # <<<<<<<<<<<<<<
@@ -15756,7 +14657,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   (__pyx_v_self->col1->arr[__pyx_v_j]) = __pyx_v_ftmp;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":330
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":330
  *         self.col1.arr[j] = ftmp
  * 
  *         ftmp = self.col2.arr[i]             # <<<<<<<<<<<<<<
@@ -15765,7 +14666,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   __pyx_v_ftmp = (__pyx_v_self->col2->arr[__pyx_v_i]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":331
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":331
  * 
  *         ftmp = self.col2.arr[i]
  *         self.col2.arr[i] = self.col2.arr[j]             # <<<<<<<<<<<<<<
@@ -15774,7 +14675,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
  */
   (__pyx_v_self->col2->arr[__pyx_v_i]) = (__pyx_v_self->col2->arr[__pyx_v_j]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":332
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":332
  *         ftmp = self.col2.arr[i]
  *         self.col2.arr[i] = self.col2.arr[j]
  *         self.col2.arr[j] = ftmp             # <<<<<<<<<<<<<<
@@ -15790,7 +14691,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_swap(struct __pyx_obj_3_sa_BiLex *__pyx_v_s
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":335
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":335
  * 
  * 
  *     cdef qsort(self, int i, int j, pad):             # <<<<<<<<<<<<<<
@@ -15811,9 +14712,9 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("qsort", 0);
+  __Pyx_RefNannySetupContext("qsort");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":338
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":338
  *         cdef int pval, p
  * 
  *         if i > j:             # <<<<<<<<<<<<<<
@@ -15823,7 +14724,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   __pyx_t_1 = (__pyx_v_i > __pyx_v_j);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":339
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":339
  * 
  *         if i > j:
  *             raise Exception("Sort error in CLex")             # <<<<<<<<<<<<<<
@@ -15839,7 +14740,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":340
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":340
  *         if i > j:
  *             raise Exception("Sort error in CLex")
  *         if i == j: #empty interval             # <<<<<<<<<<<<<<
@@ -15849,7 +14750,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   __pyx_t_1 = (__pyx_v_i == __pyx_v_j);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":341
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":341
  *             raise Exception("Sort error in CLex")
  *         if i == j: #empty interval
  *             return             # <<<<<<<<<<<<<<
@@ -15863,7 +14764,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":342
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":342
  *         if i == j: #empty interval
  *             return
  *         if i == j-1: # singleton interval             # <<<<<<<<<<<<<<
@@ -15873,7 +14774,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   __pyx_t_1 = (__pyx_v_i == (__pyx_v_j - 1));
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":343
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":343
  *             return
  *         if i == j-1: # singleton interval
  *             return             # <<<<<<<<<<<<<<
@@ -15887,7 +14788,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":345
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":345
  *             return
  * 
  *         p = (i+j)/2             # <<<<<<<<<<<<<<
@@ -15896,7 +14797,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
  */
   __pyx_v_p = __Pyx_div_long((__pyx_v_i + __pyx_v_j), 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":346
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":346
  * 
  *         p = (i+j)/2
  *         pval = self.e_index.arr[p]             # <<<<<<<<<<<<<<
@@ -15905,7 +14806,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
  */
   __pyx_v_pval = (__pyx_v_self->e_index->arr[__pyx_v_p]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":347
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":347
  *         p = (i+j)/2
  *         pval = self.e_index.arr[p]
  *         self.swap(i, p)             # <<<<<<<<<<<<<<
@@ -15916,7 +14817,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":348
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":348
  *         pval = self.e_index.arr[p]
  *         self.swap(i, p)
  *         p = i             # <<<<<<<<<<<<<<
@@ -15925,7 +14826,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
  */
   __pyx_v_p = __pyx_v_i;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":349
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":349
  *         self.swap(i, p)
  *         p = i
  *         for k from i+1 <= k < j:             # <<<<<<<<<<<<<<
@@ -15935,7 +14836,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   __pyx_t_3 = __pyx_v_j;
   for (__pyx_v_k = (__pyx_v_i + 1); __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":350
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":350
  *         p = i
  *         for k from i+1 <= k < j:
  *             if pval >= self.e_index.arr[k]:             # <<<<<<<<<<<<<<
@@ -15945,7 +14846,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
     __pyx_t_1 = (__pyx_v_pval >= (__pyx_v_self->e_index->arr[__pyx_v_k]));
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":351
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":351
  *         for k from i+1 <= k < j:
  *             if pval >= self.e_index.arr[k]:
  *                 self.swap(p+1, k)             # <<<<<<<<<<<<<<
@@ -15956,7 +14857,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":352
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":352
  *             if pval >= self.e_index.arr[k]:
  *                 self.swap(p+1, k)
  *                 self.swap(p, p+1)             # <<<<<<<<<<<<<<
@@ -15967,7 +14868,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":353
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":353
  *                 self.swap(p+1, k)
  *                 self.swap(p, p+1)
  *                 p = p + 1             # <<<<<<<<<<<<<<
@@ -15980,7 +14881,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
     __pyx_L8:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":354
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":354
  *                 self.swap(p, p+1)
  *                 p = p + 1
  *         self.qsort(i,p, pad+"    ")             # <<<<<<<<<<<<<<
@@ -15994,7 +14895,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":355
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":355
  *                 p = p + 1
  *         self.qsort(i,p, pad+"    ")
  *         self.qsort(p+1,j, pad+"    ")             # <<<<<<<<<<<<<<
@@ -16021,28 +14922,7 @@ static PyObject *__pyx_f_3_sa_5BiLex_qsort(struct __pyx_obj_3_sa_BiLex *__pyx_v_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_13write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_13write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_enhanced (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.BiLex.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex_12write_enhanced(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":358
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":358
  * 
  * 
  *     def write_enhanced(self, char* filename):             # <<<<<<<<<<<<<<
@@ -16050,7 +14930,9 @@ static PyObject *__pyx_pw_3_sa_5BiLex_13write_enhanced(PyObject *__pyx_v_self, P
  *             for i in self.f_index:
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_5BiLex_6write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_6write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
   PyObject *__pyx_v_i = NULL;
   PyObject *__pyx_v_s1 = NULL;
@@ -16064,9 +14946,9 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
+  Py_ssize_t __pyx_t_7;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
@@ -16077,9 +14959,18 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_enhanced", 0);
+  __Pyx_RefNannySetupContext("write_enhanced");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.BiLex.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":359
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":359
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -16090,7 +14981,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -16102,238 +14993,213 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":360
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":360
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:
  *             for i in self.f_index:             # <<<<<<<<<<<<<<
  *                 f.write("%d " % i)
  *             f.write("\n")
  */
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->f_index)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->f_index))) {
-            __pyx_t_4 = ((PyObject *)__pyx_v_self->f_index); __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index))) {
+            __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index); __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(((PyObject *)__pyx_v_self->f_index)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++;
             } else {
-              __pyx_t_1 = __pyx_t_9(__pyx_t_4);
-              if (unlikely(!__pyx_t_1)) {
+              __pyx_t_2 = __pyx_t_8(__pyx_t_1);
+              if (unlikely(!__pyx_t_2)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_1);
+              __Pyx_GOTREF(__pyx_t_2);
             }
             __Pyx_XDECREF(__pyx_v_i);
-            __pyx_v_i = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_i = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":361
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":361
  *         with open(filename, "w") as f:
  *             for i in self.f_index:
  *                 f.write("%d " % i)             # <<<<<<<<<<<<<<
  *             f.write("\n")
  *             for i, s1, s2 in zip(self.e_index, self.col1, self.col2):
  */
-            __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-            __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_10);
-            PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_2));
-            __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
-            __pyx_t_2 = 0;
-            __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_2);
-            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+            __pyx_t_9 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_9));
+            __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
+            PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_9));
+            __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
+            __pyx_t_9 = 0;
+            __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           }
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":362
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":362
  *             for i in self.f_index:
  *                 f.write("%d " % i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
  *             for i, s1, s2 in zip(self.e_index, self.col1, self.col2):
  *                 f.write("%d %f %f " % (i, s1, s2))
  */
-          __pyx_t_4 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_k_tuple_49), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_49), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":363
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":363
  *                 f.write("%d " % i)
  *             f.write("\n")
  *             for i, s1, s2 in zip(self.e_index, self.col1, self.col2):             # <<<<<<<<<<<<<<
  *                 f.write("%d %f %f " % (i, s1, s2))
  *             f.write("\n")
  */
-          __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_INCREF(((PyObject *)__pyx_v_self->e_index));
-          PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self->e_index));
-          __Pyx_GIVEREF(((PyObject *)__pyx_v_self->e_index));
-          __Pyx_INCREF(((PyObject *)__pyx_v_self->col1));
-          PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->col1));
-          __Pyx_GIVEREF(((PyObject *)__pyx_v_self->col1));
-          __Pyx_INCREF(((PyObject *)__pyx_v_self->col2));
-          PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_self->col2));
-          __Pyx_GIVEREF(((PyObject *)__pyx_v_self->col2));
-          __pyx_t_4 = PyObject_Call(__pyx_builtin_zip, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-          if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
-            __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_9));
+          __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index));
+          PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index));
+          __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index));
+          __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1));
+          PyTuple_SET_ITEM(__pyx_t_9, 1, ((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1));
+          __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1));
+          __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2));
+          PyTuple_SET_ITEM(__pyx_t_9, 2, ((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2));
+          __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2));
+          __pyx_t_1 = PyObject_Call(__pyx_builtin_zip, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
+          if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
+            __pyx_t_9 = __pyx_t_1; __Pyx_INCREF(__pyx_t_9); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
+            __pyx_t_8 = Py_TYPE(__pyx_t_9)->tp_iternext;
           }
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_9)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_9)) break;
+              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_9)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
+              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++;
             } else {
-              __pyx_t_4 = __pyx_t_9(__pyx_t_2);
-              if (unlikely(!__pyx_t_4)) {
+              __pyx_t_1 = __pyx_t_8(__pyx_t_9);
+              if (unlikely(!__pyx_t_1)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GOTREF(__pyx_t_1);
             }
-            if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
-              PyObject* sequence = __pyx_t_4;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              Py_ssize_t size = Py_SIZE(sequence);
-              #else
-              Py_ssize_t size = PySequence_Size(sequence);
-              #endif
-              if (unlikely(size != 3)) {
-                if (size > 3) __Pyx_RaiseTooManyValuesError(3);
-                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              }
-              #if CYTHON_COMPILING_IN_CPYTHON
+            if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+              PyObject* sequence = __pyx_t_1;
               if (likely(PyTuple_CheckExact(sequence))) {
+                if (unlikely(PyTuple_GET_SIZE(sequence) != 3)) {
+                  if (PyTuple_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+                  else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                }
                 __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); 
-                __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
+                __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
                 __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
               } else {
+                if (unlikely(PyList_GET_SIZE(sequence) != 3)) {
+                  if (PyList_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+                  else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+                }
                 __pyx_t_10 = PyList_GET_ITEM(sequence, 0); 
-                __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
+                __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
                 __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
               }
               __Pyx_INCREF(__pyx_t_10);
-              __Pyx_INCREF(__pyx_t_1);
+              __Pyx_INCREF(__pyx_t_2);
               __Pyx_INCREF(__pyx_t_11);
-              #else
-              __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_11 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            } else
-            {
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            } else {
               Py_ssize_t index = -1;
-              __pyx_t_12 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_GOTREF(__pyx_t_12);
-              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
               __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
-              index = 0; __pyx_t_10 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_10)) goto __pyx_L20_unpacking_failed;
+              index = 0; __pyx_t_10 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_10)) goto __pyx_L21_unpacking_failed;
               __Pyx_GOTREF(__pyx_t_10);
-              index = 1; __pyx_t_1 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_1)) goto __pyx_L20_unpacking_failed;
-              __Pyx_GOTREF(__pyx_t_1);
-              index = 2; __pyx_t_11 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L20_unpacking_failed;
+              index = 1; __pyx_t_2 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_2)) goto __pyx_L21_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_2);
+              index = 2; __pyx_t_11 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L21_unpacking_failed;
               __Pyx_GOTREF(__pyx_t_11);
-              if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_t_13 = NULL;
+              if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-              goto __pyx_L21_unpacking_done;
-              __pyx_L20_unpacking_failed:;
+              goto __pyx_L22_unpacking_done;
+              __pyx_L21_unpacking_failed:;
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-              __pyx_t_13 = NULL;
-              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-              {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __pyx_L21_unpacking_done:;
+              if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+              if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+              {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __pyx_L22_unpacking_done:;
             }
             __Pyx_XDECREF(__pyx_v_i);
             __pyx_v_i = __pyx_t_10;
             __pyx_t_10 = 0;
             __Pyx_XDECREF(__pyx_v_s1);
-            __pyx_v_s1 = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_s1 = __pyx_t_2;
+            __pyx_t_2 = 0;
             __Pyx_XDECREF(__pyx_v_s2);
             __pyx_v_s2 = __pyx_t_11;
             __pyx_t_11 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":364
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":364
  *             f.write("\n")
  *             for i, s1, s2 in zip(self.e_index, self.col1, self.col2):
  *                 f.write("%d %f %f " % (i, s1, s2))             # <<<<<<<<<<<<<<
  *             f.write("\n")
  *             for i, w in enumerate(self.id2fword):
  */
-            __pyx_t_4 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_11);
+            __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_11));
             __Pyx_INCREF(__pyx_v_i);
             PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_i);
             __Pyx_GIVEREF(__pyx_v_i);
@@ -16343,37 +15209,37 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
             __Pyx_INCREF(__pyx_v_s2);
             PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_s2);
             __Pyx_GIVEREF(__pyx_v_s2);
-            __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_50), ((PyObject *)__pyx_t_11)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-            __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
-            __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_11);
-            PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_t_1));
-            __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-            __pyx_t_1 = 0;
-            __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+            __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_50), ((PyObject *)__pyx_t_11)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
             __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+            __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_11));
+            PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_t_2));
+            __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
+            __pyx_t_2 = 0;
+            __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           }
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":365
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":365
  *             for i, s1, s2 in zip(self.e_index, self.col1, self.col2):
  *                 f.write("%d %f %f " % (i, s1, s2))
  *             f.write("\n")             # <<<<<<<<<<<<<<
  *             for i, w in enumerate(self.id2fword):
  *                 f.write("%d %s " % (i, w))
  */
-          __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_9 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_9);
+          __pyx_t_2 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_k_tuple_51), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_51), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":366
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":366
  *                 f.write("%d %f %f " % (i, s1, s2))
  *             f.write("\n")
  *             for i, w in enumerate(self.id2fword):             # <<<<<<<<<<<<<<
@@ -16381,36 +15247,28 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
  *             f.write("\n")
  */
           __Pyx_INCREF(__pyx_int_0);
-          __pyx_t_1 = __pyx_int_0;
-          if (PyList_CheckExact(__pyx_v_self->id2fword) || PyTuple_CheckExact(__pyx_v_self->id2fword)) {
-            __pyx_t_2 = __pyx_v_self->id2fword; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          __pyx_t_2 = __pyx_int_0;
+          if (PyList_CheckExact(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword) || PyTuple_CheckExact(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword)) {
+            __pyx_t_9 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword; __Pyx_INCREF(__pyx_t_9); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self->id2fword); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_9 = PyObject_GetIter(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_9);
+            __pyx_t_8 = Py_TYPE(__pyx_t_9)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_11); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_11 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_11); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_11 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_9)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_9)) break;
+              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_9)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
+              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++;
             } else {
-              __pyx_t_11 = __pyx_t_9(__pyx_t_2);
+              __pyx_t_11 = __pyx_t_8(__pyx_t_9);
               if (unlikely(!__pyx_t_11)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
@@ -16419,64 +15277,64 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
             __Pyx_XDECREF(__pyx_v_w);
             __pyx_v_w = __pyx_t_11;
             __pyx_t_11 = 0;
-            __Pyx_INCREF(__pyx_t_1);
+            __Pyx_INCREF(__pyx_t_2);
             __Pyx_XDECREF(__pyx_v_i);
-            __pyx_v_i = __pyx_t_1;
-            __pyx_t_11 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_v_i = __pyx_t_2;
+            __pyx_t_11 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __Pyx_DECREF(__pyx_t_1);
-            __pyx_t_1 = __pyx_t_11;
+            __Pyx_DECREF(__pyx_t_2);
+            __pyx_t_2 = __pyx_t_11;
             __pyx_t_11 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":367
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":367
  *             f.write("\n")
  *             for i, w in enumerate(self.id2fword):
  *                 f.write("%d %s " % (i, w))             # <<<<<<<<<<<<<<
  *             f.write("\n")
  *             for i, w in enumerate(self.id2eword):
  */
-            __pyx_t_11 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_11 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
+            __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
             __Pyx_INCREF(__pyx_v_i);
-            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_i);
+            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_i);
             __Pyx_GIVEREF(__pyx_v_i);
             __Pyx_INCREF(__pyx_v_w);
-            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_w);
+            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_w);
             __Pyx_GIVEREF(__pyx_v_w);
-            __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_52), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_52), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(((PyObject *)__pyx_t_10));
-            __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-            __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_10));
+            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+            PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_10));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
             __pyx_t_10 = 0;
-            __pyx_t_10 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           }
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":368
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":368
  *             for i, w in enumerate(self.id2fword):
  *                 f.write("%d %s " % (i, w))
  *             f.write("\n")             # <<<<<<<<<<<<<<
  *             for i, w in enumerate(self.id2eword):
  *                 f.write("%d %s " % (i, w))
  */
-          __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_53), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_53), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":369
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":369
  *                 f.write("%d %s " % (i, w))
  *             f.write("\n")
  *             for i, w in enumerate(self.id2eword):             # <<<<<<<<<<<<<<
@@ -16484,36 +15342,28 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
  *             f.write("\n")
  */
           __Pyx_INCREF(__pyx_int_0);
-          __pyx_t_2 = __pyx_int_0;
-          if (PyList_CheckExact(__pyx_v_self->id2eword) || PyTuple_CheckExact(__pyx_v_self->id2eword)) {
-            __pyx_t_1 = __pyx_v_self->id2eword; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
-            __pyx_t_9 = NULL;
+          __pyx_t_9 = __pyx_int_0;
+          if (PyList_CheckExact(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword) || PyTuple_CheckExact(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword)) {
+            __pyx_t_2 = ((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
+            __pyx_t_8 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_self->id2eword); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext;
+            __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_10 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_1)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_10 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_10); __pyx_t_7++;
+            } else if (PyTuple_CheckExact(__pyx_t_2)) {
+              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+              __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_10); __pyx_t_7++;
             } else {
-              __pyx_t_10 = __pyx_t_9(__pyx_t_1);
+              __pyx_t_10 = __pyx_t_8(__pyx_t_2);
               if (unlikely(!__pyx_t_10)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
@@ -16522,76 +15372,76 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
             __Pyx_XDECREF(__pyx_v_w);
             __pyx_v_w = __pyx_t_10;
             __pyx_t_10 = 0;
-            __Pyx_INCREF(__pyx_t_2);
+            __Pyx_INCREF(__pyx_t_9);
             __Pyx_XDECREF(__pyx_v_i);
-            __pyx_v_i = __pyx_t_2;
-            __pyx_t_10 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_v_i = __pyx_t_9;
+            __pyx_t_10 = PyNumber_Add(__pyx_t_9, __pyx_int_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __Pyx_DECREF(__pyx_t_2);
-            __pyx_t_2 = __pyx_t_10;
+            __Pyx_DECREF(__pyx_t_9);
+            __pyx_t_9 = __pyx_t_10;
             __pyx_t_10 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":370
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":370
  *             f.write("\n")
  *             for i, w in enumerate(self.id2eword):
  *                 f.write("%d %s " % (i, w))             # <<<<<<<<<<<<<<
  *             f.write("\n")
  * 
  */
-            __pyx_t_10 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
+            __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
             __Pyx_INCREF(__pyx_v_i);
-            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_i);
+            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_i);
             __Pyx_GIVEREF(__pyx_v_i);
             __Pyx_INCREF(__pyx_v_w);
-            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_w);
+            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_w);
             __Pyx_GIVEREF(__pyx_v_w);
-            __pyx_t_11 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_52), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_11 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_52), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(((PyObject *)__pyx_t_11));
-            __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-            __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_11));
+            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+            PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_11));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_11));
             __pyx_t_11 = 0;
-            __pyx_t_11 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_11 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_11);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           }
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":371
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":371
  *             for i, w in enumerate(self.id2eword):
  *                 f.write("%d %s " % (i, w))
  *             f.write("\n")             # <<<<<<<<<<<<<<
  * 
  * 
  */
-          __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_9 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_9);
+          __pyx_t_2 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_k_tuple_54), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_54), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":359
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":359
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -16600,75 +15450,75 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.BiLex.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_9, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_GOTREF(__pyx_t_9);
           __Pyx_GOTREF(__pyx_t_11);
-          __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
+          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
           __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_9);
+          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_9);
           __Pyx_INCREF(__pyx_t_11);
-          PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_11);
+          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_11);
           __Pyx_GIVEREF(__pyx_t_11);
-          __pyx_t_15 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL);
+          __pyx_t_15 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_15);
           __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_15);
           __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-          if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_16 = (!__pyx_t_14);
           if (__pyx_t_16) {
-            __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_2);
+            __Pyx_GIVEREF(__pyx_t_9);
             __Pyx_GIVEREF(__pyx_t_11);
-            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_11);
-            __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_11 = 0; 
-            {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L28;
+            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_9, __pyx_t_11);
+            __pyx_t_2 = 0; __pyx_t_9 = 0; __pyx_t_11 = 0; 
+            {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L29;
           }
-          __pyx_L28:;
-          __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_L29:;
+          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-          goto __pyx_L8_exception_handled;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_55, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_55, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L29;
-    __pyx_L3_error:;
+    goto __pyx_L30;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L29:;
+    __pyx_L30:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -16676,7 +15526,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_XDECREF(__pyx_t_10);
   __Pyx_XDECREF(__pyx_t_11);
   __Pyx_XDECREF(__pyx_t_12);
@@ -16693,22 +15543,41 @@ static PyObject *__pyx_pf_3_sa_5BiLex_12write_enhanced(struct __pyx_obj_3_sa_BiL
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_15get_score(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_5BiLex_15get_score(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":374
+ * 
+ * 
+ *     def get_score(self, fword, eword, col):             # <<<<<<<<<<<<<<
+ *         cdef e_id, f_id, low, high, midpoint, val
+ * 
+ */
+
+static PyObject *__pyx_pf_3_sa_5BiLex_7get_score(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_5BiLex_7get_score(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fword = 0;
   PyObject *__pyx_v_eword = 0;
   PyObject *__pyx_v_col = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_e_id = 0;
+  PyObject *__pyx_v_f_id = 0;
+  PyObject *__pyx_v_low = 0;
+  PyObject *__pyx_v_high = 0;
+  PyObject *__pyx_v_midpoint = 0;
+  PyObject *__pyx_v_val = 0;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_score (wrapper)", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fword,&__pyx_n_s__eword,&__pyx_n_s__col,0};
+  __Pyx_RefNannySetupContext("get_score");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fword,&__pyx_n_s__eword,&__pyx_n_s__col,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -16716,23 +15585,26 @@ static PyObject *__pyx_pw_3_sa_5BiLex_15get_score(PyObject *__pyx_v_self, PyObje
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fword)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fword);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__eword)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__eword);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_score", 1, 3, 3, 1); {__pyx_filename = __pyx_f[5]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__col)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__col);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_score", 1, 3, 3, 2); {__pyx_filename = __pyx_f[5]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_score") < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "get_score") < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -16753,48 +15625,18 @@ static PyObject *__pyx_pw_3_sa_5BiLex_15get_score(PyObject *__pyx_v_self, PyObje
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex_14get_score(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), __pyx_v_fword, __pyx_v_eword, __pyx_v_col);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":374
- * 
- * 
- *     def get_score(self, fword, eword, col):             # <<<<<<<<<<<<<<
- *         cdef e_id, f_id, low, high, midpoint, val
- * 
- */
-
-static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, PyObject *__pyx_v_fword, PyObject *__pyx_v_eword, PyObject *__pyx_v_col) {
-  PyObject *__pyx_v_e_id = 0;
-  PyObject *__pyx_v_f_id = 0;
-  PyObject *__pyx_v_low = 0;
-  PyObject *__pyx_v_high = 0;
-  PyObject *__pyx_v_midpoint = 0;
-  PyObject *__pyx_v_val = 0;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_score", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":377
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":377
  *         cdef e_id, f_id, low, high, midpoint, val
  * 
  *         if eword not in self.eword2id:             # <<<<<<<<<<<<<<
  *             return None
  *         if fword not in self.fword2id:
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_eword, __pyx_v_self->eword2id, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_NegateNonNeg(PySequence_Contains(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id, __pyx_v_eword))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":378
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":378
  * 
  *         if eword not in self.eword2id:
  *             return None             # <<<<<<<<<<<<<<
@@ -16805,21 +15647,21 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":379
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":379
  *         if eword not in self.eword2id:
  *             return None
  *         if fword not in self.fword2id:             # <<<<<<<<<<<<<<
  *             return None
  *         f_id = self.fword2id[fword]
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_fword, __pyx_v_self->fword2id, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_NegateNonNeg(PySequence_Contains(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id, __pyx_v_fword))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":380
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":380
  *             return None
  *         if fword not in self.fword2id:
  *             return None             # <<<<<<<<<<<<<<
@@ -16830,35 +15672,35 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
-    goto __pyx_L4;
+    goto __pyx_L7;
   }
-  __pyx_L4:;
+  __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":381
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":381
  *         if fword not in self.fword2id:
  *             return None
  *         f_id = self.fword2id[fword]             # <<<<<<<<<<<<<<
  *         e_id = self.eword2id[eword]
  *         low = self.f_index.arr[f_id]
  */
-  __pyx_t_2 = PyObject_GetItem(__pyx_v_self->fword2id, __pyx_v_fword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->fword2id, __pyx_v_fword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_f_id = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":382
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":382
  *             return None
  *         f_id = self.fword2id[fword]
  *         e_id = self.eword2id[eword]             # <<<<<<<<<<<<<<
  *         low = self.f_index.arr[f_id]
  *         high = self.f_index.arr[f_id+1]
  */
-  __pyx_t_2 = PyObject_GetItem(__pyx_v_self->eword2id, __pyx_v_eword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->eword2id, __pyx_v_eword); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_e_id = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":383
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":383
  *         f_id = self.fword2id[fword]
  *         e_id = self.eword2id[eword]
  *         low = self.f_index.arr[f_id]             # <<<<<<<<<<<<<<
@@ -16866,12 +15708,12 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
  *         while high - low > 0:
  */
   __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_f_id); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->f_index->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_low = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":384
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":384
  *         e_id = self.eword2id[eword]
  *         low = self.f_index.arr[f_id]
  *         high = self.f_index.arr[f_id+1]             # <<<<<<<<<<<<<<
@@ -16882,12 +15724,12 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->f_index->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_high = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":385
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":385
  *         low = self.f_index.arr[f_id]
  *         high = self.f_index.arr[f_id+1]
  *         while high - low > 0:             # <<<<<<<<<<<<<<
@@ -16897,13 +15739,14 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
   while (1) {
     __pyx_t_2 = PyNumber_Subtract(__pyx_v_high, __pyx_v_low); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (!__pyx_t_1) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":386
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":386
  *         high = self.f_index.arr[f_id+1]
  *         while high - low > 0:
  *             midpoint = (low+high)/2             # <<<<<<<<<<<<<<
@@ -16919,7 +15762,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
     __pyx_v_midpoint = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":387
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":387
  *         while high - low > 0:
  *             midpoint = (low+high)/2
  *             val = self.e_index.arr[midpoint]             # <<<<<<<<<<<<<<
@@ -16927,37 +15770,39 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
  *                 if col == 0:
  */
     __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_midpoint); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_2 = PyInt_FromLong((__pyx_v_self->e_index->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_XDECREF(__pyx_v_val);
     __pyx_v_val = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":388
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":388
  *             midpoint = (low+high)/2
  *             val = self.e_index.arr[midpoint]
  *             if val == e_id:             # <<<<<<<<<<<<<<
  *                 if col == 0:
  *                     return self.col1.arr[midpoint]
  */
-    __pyx_t_2 = PyObject_RichCompare(__pyx_v_val, __pyx_v_e_id, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_v_val, __pyx_v_e_id, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":389
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":389
  *             val = self.e_index.arr[midpoint]
  *             if val == e_id:
  *                 if col == 0:             # <<<<<<<<<<<<<<
  *                     return self.col1.arr[midpoint]
  *                 if col == 1:
  */
-      __pyx_t_2 = PyObject_RichCompare(__pyx_v_col, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyObject_RichCompare(__pyx_v_col, __pyx_int_0, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":390
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":390
  *             if val == e_id:
  *                 if col == 0:
  *                     return self.col1.arr[midpoint]             # <<<<<<<<<<<<<<
@@ -16966,28 +15811,29 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
  */
         __Pyx_XDECREF(__pyx_r);
         __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_midpoint); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_2 = PyFloat_FromDouble((__pyx_v_self->col1->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyFloat_FromDouble((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_r = __pyx_t_2;
         __pyx_t_2 = 0;
         goto __pyx_L0;
-        goto __pyx_L8;
+        goto __pyx_L11;
       }
-      __pyx_L8:;
+      __pyx_L11:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":391
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":391
  *                 if col == 0:
  *                     return self.col1.arr[midpoint]
  *                 if col == 1:             # <<<<<<<<<<<<<<
  *                     return self.col2.arr[midpoint]
  *             if val > e_id:
  */
-      __pyx_t_2 = PyObject_RichCompare(__pyx_v_col, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyObject_RichCompare(__pyx_v_col, __pyx_int_1, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":392
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":392
  *                     return self.col1.arr[midpoint]
  *                 if col == 1:
  *                     return self.col2.arr[midpoint]             # <<<<<<<<<<<<<<
@@ -16996,31 +15842,32 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
  */
         __Pyx_XDECREF(__pyx_r);
         __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_midpoint); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_2 = PyFloat_FromDouble((__pyx_v_self->col2->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyFloat_FromDouble((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2->arr[__pyx_t_3])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_r = __pyx_t_2;
         __pyx_t_2 = 0;
         goto __pyx_L0;
-        goto __pyx_L9;
+        goto __pyx_L12;
       }
-      __pyx_L9:;
-      goto __pyx_L7;
+      __pyx_L12:;
+      goto __pyx_L10;
     }
-    __pyx_L7:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":393
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":393
  *                 if col == 1:
  *                     return self.col2.arr[midpoint]
  *             if val > e_id:             # <<<<<<<<<<<<<<
  *                 high = midpoint
  *             if val < e_id:
  */
-    __pyx_t_2 = PyObject_RichCompare(__pyx_v_val, __pyx_v_e_id, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_v_val, __pyx_v_e_id, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":394
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":394
  *                     return self.col2.arr[midpoint]
  *             if val > e_id:
  *                 high = midpoint             # <<<<<<<<<<<<<<
@@ -17030,23 +15877,24 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
       __Pyx_INCREF(__pyx_v_midpoint);
       __Pyx_DECREF(__pyx_v_high);
       __pyx_v_high = __pyx_v_midpoint;
-      goto __pyx_L10;
+      goto __pyx_L13;
     }
-    __pyx_L10:;
+    __pyx_L13:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":395
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":395
  *             if val > e_id:
  *                 high = midpoint
  *             if val < e_id:             # <<<<<<<<<<<<<<
  *                 low = midpoint + 1
  *         return None
  */
-    __pyx_t_2 = PyObject_RichCompare(__pyx_v_val, __pyx_v_e_id, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_v_val, __pyx_v_e_id, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":396
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":396
  *                 high = midpoint
  *             if val < e_id:
  *                 low = midpoint + 1             # <<<<<<<<<<<<<<
@@ -17058,12 +15906,12 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
       __Pyx_DECREF(__pyx_v_low);
       __pyx_v_low = __pyx_t_2;
       __pyx_t_2 = 0;
-      goto __pyx_L11;
+      goto __pyx_L14;
     }
-    __pyx_L11:;
+    __pyx_L14:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":397
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":397
  *             if val < e_id:
  *                 low = midpoint + 1
  *         return None             # <<<<<<<<<<<<<<
@@ -17094,29 +15942,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_14get_score(struct __pyx_obj_3_sa_BiLex *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_5BiLex_17write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static char __pyx_doc_3_sa_5BiLex_16write_text[] = "Note: does not guarantee writing the dictionary in the original order";
-static PyObject *__pyx_pw_3_sa_5BiLex_17write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.BiLex.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_5BiLex_16write_text(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":400
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":400
  * 
  * 
  *     def write_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -17124,7 +15950,10 @@ static PyObject *__pyx_pw_3_sa_5BiLex_17write_text(PyObject *__pyx_v_self, PyObj
  *         cdef i, N, e_id, f_id
  */
 
-static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_5BiLex_8write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static char __pyx_doc_3_sa_5BiLex_8write_text[] = "Note: does not guarantee writing the dictionary in the original order";
+static PyObject *__pyx_pf_3_sa_5BiLex_8write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_i = 0;
   PyObject *__pyx_v_N = 0;
   PyObject *__pyx_v_e_id = 0;
@@ -17140,20 +15969,29 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  Py_ssize_t __pyx_t_7;
+  long __pyx_t_8;
   long __pyx_t_9;
-  long __pyx_t_10;
-  int __pyx_t_11;
+  int __pyx_t_10;
+  PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
   int __pyx_t_14;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_text", 0);
+  __Pyx_RefNannySetupContext("write_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.BiLex.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":404
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":404
  *         cdef i, N, e_id, f_id
  * 
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -17164,7 +16002,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -17176,40 +16014,39 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":405
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":405
  * 
  *         with open(filename, "w") as f:
  *             N = len(self.e_index)             # <<<<<<<<<<<<<<
  *             f_id = 0
  *             for i from 0 <= i < N:
  */
-          __pyx_t_4 = ((PyObject *)__pyx_v_self->e_index);
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_v_N = __pyx_t_4;
-          __pyx_t_4 = 0;
+          __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index);
+          __Pyx_INCREF(__pyx_t_1);
+          __pyx_t_7 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_v_N = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":406
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":406
  *         with open(filename, "w") as f:
  *             N = len(self.e_index)
  *             f_id = 0             # <<<<<<<<<<<<<<
@@ -17219,22 +16056,22 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
           __Pyx_INCREF(__pyx_int_0);
           __pyx_v_f_id = __pyx_int_0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":407
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":407
  *             N = len(self.e_index)
  *             f_id = 0
  *             for i from 0 <= i < N:             # <<<<<<<<<<<<<<
  *                 while self.f_index.arr[f_id+1] == i:
  *                     f_id = f_id + 1
  */
-          __pyx_t_9 = __Pyx_PyInt_AsLong(__pyx_v_N); if (unlikely((__pyx_t_9 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10++) {
-            __pyx_t_4 = PyInt_FromLong(__pyx_t_10); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
+          __pyx_t_8 = __Pyx_PyInt_AsLong(__pyx_v_N); if (unlikely((__pyx_t_8 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9++) {
+            __pyx_t_1 = PyInt_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
             __Pyx_XDECREF(__pyx_v_i);
-            __pyx_v_i = __pyx_t_4;
-            __pyx_t_4 = 0;
+            __pyx_v_i = __pyx_t_1;
+            __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":408
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":408
  *             f_id = 0
  *             for i from 0 <= i < N:
  *                 while self.f_index.arr[f_id+1] == i:             # <<<<<<<<<<<<<<
@@ -17242,138 +16079,139 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
  *                 e_id = self.e_index.arr[i]
  */
             while (1) {
-              __pyx_t_4 = PyNumber_Add(__pyx_v_f_id, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_4);
-              __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-              __pyx_t_4 = PyInt_FromLong((__pyx_v_self->f_index->arr[__pyx_t_8])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_4);
-              __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_v_i, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-              __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_1 = PyNumber_Add(__pyx_v_f_id, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-              if (!__pyx_t_11) break;
+              __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->f_index->arr[__pyx_t_7])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_i, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_2);
+              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+              __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+              if (!__pyx_t_10) break;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":409
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":409
  *             for i from 0 <= i < N:
  *                 while self.f_index.arr[f_id+1] == i:
  *                     f_id = f_id + 1             # <<<<<<<<<<<<<<
  *                 e_id = self.e_index.arr[i]
  *                 score1 = self.col1.arr[i]
  */
-              __pyx_t_1 = PyNumber_Add(__pyx_v_f_id, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = PyNumber_Add(__pyx_v_f_id, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+              __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_v_f_id);
-              __pyx_v_f_id = __pyx_t_1;
-              __pyx_t_1 = 0;
+              __pyx_v_f_id = __pyx_t_2;
+              __pyx_t_2 = 0;
             }
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":410
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":410
  *                 while self.f_index.arr[f_id+1] == i:
  *                     f_id = f_id + 1
  *                 e_id = self.e_index.arr[i]             # <<<<<<<<<<<<<<
  *                 score1 = self.col1.arr[i]
  *                 score2 = self.col2.arr[i]
  */
-            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_1 = PyInt_FromLong((__pyx_v_self->e_index->arr[__pyx_t_8])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->e_index->arr[__pyx_t_7])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
             __Pyx_XDECREF(__pyx_v_e_id);
-            __pyx_v_e_id = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_e_id = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":411
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":411
  *                     f_id = f_id + 1
  *                 e_id = self.e_index.arr[i]
  *                 score1 = self.col1.arr[i]             # <<<<<<<<<<<<<<
  *                 score2 = self.col2.arr[i]
  *                 f.write("%s %s %.6f %.6f\n" % (self.id2fword[f_id], self.id2eword[e_id], score1, score2))
  */
-            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->col1->arr[__pyx_t_8])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_2 = PyFloat_FromDouble((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col1->arr[__pyx_t_7])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
             __Pyx_XDECREF(__pyx_v_score1);
-            __pyx_v_score1 = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_score1 = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":412
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":412
  *                 e_id = self.e_index.arr[i]
  *                 score1 = self.col1.arr[i]
  *                 score2 = self.col2.arr[i]             # <<<<<<<<<<<<<<
  *                 f.write("%s %s %.6f %.6f\n" % (self.id2fword[f_id], self.id2eword[e_id], score1, score2))
  */
-            __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->col2->arr[__pyx_t_8])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_2 = PyFloat_FromDouble((((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->col2->arr[__pyx_t_7])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
             __Pyx_XDECREF(__pyx_v_score2);
-            __pyx_v_score2 = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_score2 = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":413
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":413
  *                 score1 = self.col1.arr[i]
  *                 score2 = self.col2.arr[i]
  *                 f.write("%s %s %.6f %.6f\n" % (self.id2fword[f_id], self.id2eword[e_id], score1, score2))             # <<<<<<<<<<<<<<
  */
-            __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_4 = PyObject_GetItem(__pyx_v_self->id2fword, __pyx_v_f_id); if (!__pyx_t_4) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_2 = PyObject_GetItem(__pyx_v_self->id2eword, __pyx_v_e_id); if (!__pyx_t_2) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_12 = PyTuple_New(4); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_12);
-            PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4);
-            __Pyx_GIVEREF(__pyx_t_4);
-            PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_2);
-            __Pyx_GIVEREF(__pyx_t_2);
+            __pyx_t_1 = PyObject_GetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2fword, __pyx_v_f_id); if (!__pyx_t_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_11 = PyObject_GetItem(((struct __pyx_obj_3_sa_BiLex *)__pyx_v_self)->id2eword, __pyx_v_e_id); if (!__pyx_t_11) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_11);
+            __pyx_t_12 = PyTuple_New(4); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_12));
+            PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
+            __Pyx_GIVEREF(__pyx_t_11);
             __Pyx_INCREF(__pyx_v_score1);
             PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_score1);
             __Pyx_GIVEREF(__pyx_v_score1);
             __Pyx_INCREF(__pyx_v_score2);
             PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_v_score2);
             __Pyx_GIVEREF(__pyx_v_score2);
-            __pyx_t_4 = 0;
-            __pyx_t_2 = 0;
-            __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_56), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-            __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
-            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_12);
-            PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)__pyx_t_2));
-            __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
-            __pyx_t_2 = 0;
-            __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_11 = 0;
+            __pyx_t_11 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_56), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_11));
             __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
+            __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_12));
+            PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)__pyx_t_11));
+            __Pyx_GIVEREF(((PyObject *)__pyx_t_11));
+            __pyx_t_11 = 0;
+            __pyx_t_11 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_11);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __pyx_t_10 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_10 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
+            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+            __pyx_t_9 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_9 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           }
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":407
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":407
  *             N = len(self.e_index)
  *             f_id = 0
  *             for i from 0 <= i < N:             # <<<<<<<<<<<<<<
  *                 while self.f_index.arr[f_id+1] == i:
  *                     f_id = f_id + 1
  */
-          __pyx_t_2 = PyInt_FromLong(__pyx_t_10); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_11 = PyInt_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_11);
           __Pyx_XDECREF(__pyx_v_i);
-          __pyx_v_i = __pyx_t_2;
-          __pyx_t_2 = 0;
+          __pyx_v_i = __pyx_t_11;
+          __pyx_t_11 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":404
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":404
  *         cdef i, N, e_id, f_id
  * 
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -17382,75 +16220,75 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.BiLex.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_12, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_2);
+          if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(__pyx_t_11);
           __Pyx_GOTREF(__pyx_t_12);
-          __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_2);
-          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-          __Pyx_GIVEREF(__pyx_t_2);
+          __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+          __Pyx_INCREF(__pyx_t_11);
+          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11);
+          __Pyx_GIVEREF(__pyx_t_11);
           __Pyx_INCREF(__pyx_t_12);
-          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_12);
+          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_12);
           __Pyx_GIVEREF(__pyx_t_12);
-          __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_1);
-          __Pyx_GIVEREF(__pyx_t_1);
-          __pyx_t_13 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL);
+          __Pyx_INCREF(__pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);
+          __Pyx_GIVEREF(__pyx_t_2);
+          __pyx_t_13 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_13);
-          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_13);
+          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_13);
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-          __pyx_t_14 = (!__pyx_t_11);
+          if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __pyx_t_14 = (!__pyx_t_10);
           if (__pyx_t_14) {
-            __Pyx_GIVEREF(__pyx_t_2);
+            __Pyx_GIVEREF(__pyx_t_11);
             __Pyx_GIVEREF(__pyx_t_12);
-            __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_12, __pyx_t_1);
-            __pyx_t_2 = 0; __pyx_t_12 = 0; __pyx_t_1 = 0; 
-            {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L22;
+            __Pyx_GIVEREF(__pyx_t_2);
+            __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_2);
+            __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_2 = 0; 
+            {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L23;
           }
-          __pyx_L22:;
-          __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_L23:;
+          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          goto __pyx_L8_exception_handled;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_57, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_57, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L23;
-    __pyx_L3_error:;
+    goto __pyx_L24;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L23:;
+    __pyx_L24:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -17458,7 +16296,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_11);
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_AddTraceback("_sa.BiLex.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
@@ -17475,7 +16313,7 @@ static PyObject *__pyx_pf_3_sa_5BiLex_16write_text(struct __pyx_obj_3_sa_BiLex *
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":21
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":21
  * cdef int LOWER_MASK[32]
  * 
  * cdef void _init_lower_mask():             # <<<<<<<<<<<<<<
@@ -17489,9 +16327,9 @@ static void __pyx_f_3_sa__init_lower_mask(void) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   unsigned int __pyx_t_2;
-  __Pyx_RefNannySetupContext("_init_lower_mask", 0);
+  __Pyx_RefNannySetupContext("_init_lower_mask");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":23
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":23
  * cdef void _init_lower_mask():
  *     cdef unsigned i
  *     cdef int mask = 0             # <<<<<<<<<<<<<<
@@ -17500,7 +16338,7 @@ static void __pyx_f_3_sa__init_lower_mask(void) {
  */
   __pyx_v_mask = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":24
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":24
  *     cdef unsigned i
  *     cdef int mask = 0
  *     for i in range(MIN_BOTTOM_SIZE):             # <<<<<<<<<<<<<<
@@ -17511,7 +16349,7 @@ static void __pyx_f_3_sa__init_lower_mask(void) {
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_i = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":25
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":25
  *     cdef int mask = 0
  *     for i in range(MIN_BOTTOM_SIZE):
  *         mask = (mask << 1) + 1             # <<<<<<<<<<<<<<
@@ -17520,7 +16358,7 @@ static void __pyx_f_3_sa__init_lower_mask(void) {
  */
     __pyx_v_mask = ((__pyx_v_mask << 1) + 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":26
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":26
  *     for i in range(MIN_BOTTOM_SIZE):
  *         mask = (mask << 1) + 1
  *         LOWER_MASK[i] = mask             # <<<<<<<<<<<<<<
@@ -17533,7 +16371,7 @@ static void __pyx_f_3_sa__init_lower_mask(void) {
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":37
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":37
  * 
  * 
  * cdef _BitSet* new_BitSet():             # <<<<<<<<<<<<<<
@@ -17545,9 +16383,9 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
   struct __pyx_t_3_sa__BitSet *__pyx_v_b;
   struct __pyx_t_3_sa__BitSet *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("new_BitSet", 0);
+  __Pyx_RefNannySetupContext("new_BitSet");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":40
  *     cdef _BitSet* b
  * 
  *     b = <_BitSet*> malloc(sizeof(_BitSet))             # <<<<<<<<<<<<<<
@@ -17556,7 +16394,7 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
  */
   __pyx_v_b = ((struct __pyx_t_3_sa__BitSet *)malloc((sizeof(struct __pyx_t_3_sa__BitSet))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":41
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":41
  * 
  *     b = <_BitSet*> malloc(sizeof(_BitSet))
  *     b.bitset = 0             # <<<<<<<<<<<<<<
@@ -17565,7 +16403,7 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
  */
   __pyx_v_b->bitset = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":42
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":42
  *     b = <_BitSet*> malloc(sizeof(_BitSet))
  *     b.bitset = 0
  *     b.min_val = -1             # <<<<<<<<<<<<<<
@@ -17574,7 +16412,7 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
  */
   __pyx_v_b->min_val = -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":43
  *     b.bitset = 0
  *     b.min_val = -1
  *     b.max_val = -1             # <<<<<<<<<<<<<<
@@ -17583,7 +16421,7 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
  */
   __pyx_v_b->max_val = -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":44
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":44
  *     b.min_val = -1
  *     b.max_val = -1
  *     b.size = 0             # <<<<<<<<<<<<<<
@@ -17592,7 +16430,7 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
  */
   __pyx_v_b->size = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":45
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":45
  *     b.max_val = -1
  *     b.size = 0
  *     return b             # <<<<<<<<<<<<<<
@@ -17608,7 +16446,7 @@ static struct __pyx_t_3_sa__BitSet *__pyx_f_3_sa_new_BitSet(void) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":48
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":48
  * 
  * 
  * cdef int bitset_findsucc(_BitSet* b, int i):             # <<<<<<<<<<<<<<
@@ -17627,9 +16465,9 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("bitset_findsucc", 0);
+  __Pyx_RefNannySetupContext("bitset_findsucc");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":52
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":52
  *     cdef int low, high, mid
  * 
  *     if b.max_val == -1 or i >= b.max_val:             # <<<<<<<<<<<<<<
@@ -17645,7 +16483,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":53
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":53
  * 
  *     if b.max_val == -1 or i >= b.max_val:
  *         return -1             # <<<<<<<<<<<<<<
@@ -17658,7 +16496,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":54
  *     if b.max_val == -1 or i >= b.max_val:
  *         return -1
  *     if i < b.min_val:             # <<<<<<<<<<<<<<
@@ -17668,7 +16506,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   __pyx_t_3 = (__pyx_v_i < __pyx_v_b->min_val);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":55
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":55
  *         return -1
  *     if i < b.min_val:
  *         return b.min_val             # <<<<<<<<<<<<<<
@@ -17681,7 +16519,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":57
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":57
  *         return b.min_val
  * 
  *     bitset = b.bitset & ~LOWER_MASK[i]             # <<<<<<<<<<<<<<
@@ -17690,7 +16528,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
   __pyx_v_bitset = (__pyx_v_b->bitset & (~(__pyx_v_3_sa_LOWER_MASK[__pyx_v_i])));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":58
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":58
  * 
  *     bitset = b.bitset & ~LOWER_MASK[i]
  *     low = i+1             # <<<<<<<<<<<<<<
@@ -17699,7 +16537,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
   __pyx_v_low = (__pyx_v_i + 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":59
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":59
  *     bitset = b.bitset & ~LOWER_MASK[i]
  *     low = i+1
  *     high = b.max_val+1             # <<<<<<<<<<<<<<
@@ -17708,7 +16546,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
   __pyx_v_high = (__pyx_v_b->max_val + 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":60
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":60
  *     low = i+1
  *     high = b.max_val+1
  *     while low < high-1:             # <<<<<<<<<<<<<<
@@ -17719,7 +16557,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
     __pyx_t_3 = (__pyx_v_low < (__pyx_v_high - 1));
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":61
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":61
  *     high = b.max_val+1
  *     while low < high-1:
  *         mid = (high + low)/2             # <<<<<<<<<<<<<<
@@ -17728,7 +16566,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
     __pyx_v_mid = __Pyx_div_long((__pyx_v_high + __pyx_v_low), 2);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":62
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":62
  *     while low < high-1:
  *         mid = (high + low)/2
  *         mask = ~(LOWER_MASK[high-1] ^ LOWER_MASK[mid-1])             # <<<<<<<<<<<<<<
@@ -17737,7 +16575,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
     __pyx_v_mask = (~((__pyx_v_3_sa_LOWER_MASK[(__pyx_v_high - 1)]) ^ (__pyx_v_3_sa_LOWER_MASK[(__pyx_v_mid - 1)])));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":63
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":63
  *         mid = (high + low)/2
  *         mask = ~(LOWER_MASK[high-1] ^ LOWER_MASK[mid-1])
  *         if bitset & mask == 0:             # <<<<<<<<<<<<<<
@@ -17747,7 +16585,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
     __pyx_t_3 = ((__pyx_v_bitset & __pyx_v_mask) == 0);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":64
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":64
  *         mask = ~(LOWER_MASK[high-1] ^ LOWER_MASK[mid-1])
  *         if bitset & mask == 0:
  *             low = mid             # <<<<<<<<<<<<<<
@@ -17759,7 +16597,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":66
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":66
  *             low = mid
  *         else:
  *             bitset = bitset & mask             # <<<<<<<<<<<<<<
@@ -17768,7 +16606,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
       __pyx_v_bitset = (__pyx_v_bitset & __pyx_v_mask);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":67
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":67
  *         else:
  *             bitset = bitset & mask
  *             high = mid             # <<<<<<<<<<<<<<
@@ -17780,7 +16618,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
     __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":68
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":68
  *             bitset = bitset & mask
  *             high = mid
  *     return low             # <<<<<<<<<<<<<<
@@ -17796,7 +16634,7 @@ static int __pyx_f_3_sa_bitset_findsucc(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":71
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":71
  * 
  * 
  * cdef int bitset_insert(_BitSet* b, int i):             # <<<<<<<<<<<<<<
@@ -17809,9 +16647,9 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("bitset_insert", 0);
+  __Pyx_RefNannySetupContext("bitset_insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":74
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":74
  *     cdef int val
  * 
  *     val = 1 << i             # <<<<<<<<<<<<<<
@@ -17820,7 +16658,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
  */
   __pyx_v_val = (1 << __pyx_v_i);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":75
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":75
  * 
  *     val = 1 << i
  *     if b.bitset & val == 0:             # <<<<<<<<<<<<<<
@@ -17830,7 +16668,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
   __pyx_t_1 = ((__pyx_v_b->bitset & __pyx_v_val) == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":76
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":76
  *     val = 1 << i
  *     if b.bitset & val == 0:
  *         b.bitset = b.bitset | val             # <<<<<<<<<<<<<<
@@ -17839,7 +16677,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
  */
     __pyx_v_b->bitset = (__pyx_v_b->bitset | __pyx_v_val);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":77
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":77
  *     if b.bitset & val == 0:
  *         b.bitset = b.bitset | val
  *         if b.size == 0:             # <<<<<<<<<<<<<<
@@ -17849,7 +16687,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
     __pyx_t_1 = (__pyx_v_b->size == 0);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":78
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":78
  *         b.bitset = b.bitset | val
  *         if b.size == 0:
  *             b.min_val = i             # <<<<<<<<<<<<<<
@@ -17858,7 +16696,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
  */
       __pyx_v_b->min_val = __pyx_v_i;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":79
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":79
  *         if b.size == 0:
  *             b.min_val = i
  *             b.max_val = i             # <<<<<<<<<<<<<<
@@ -17870,7 +16708,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":81
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":81
  *             b.max_val = i
  *         else:
  *             if i < b.min_val:             # <<<<<<<<<<<<<<
@@ -17880,7 +16718,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
       __pyx_t_1 = (__pyx_v_i < __pyx_v_b->min_val);
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":82
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":82
  *         else:
  *             if i < b.min_val:
  *                 b.min_val = i             # <<<<<<<<<<<<<<
@@ -17892,7 +16730,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
       }
       __pyx_L5:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":83
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":83
  *             if i < b.min_val:
  *                 b.min_val = i
  *             if i > b.max_val:             # <<<<<<<<<<<<<<
@@ -17902,7 +16740,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
       __pyx_t_1 = (__pyx_v_i > __pyx_v_b->max_val);
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":84
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":84
  *                 b.min_val = i
  *             if i > b.max_val:
  *                 b.max_val = i             # <<<<<<<<<<<<<<
@@ -17916,7 +16754,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
     }
     __pyx_L4:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":85
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":85
  *             if i > b.max_val:
  *                 b.max_val = i
  *         b.size = b.size + 1             # <<<<<<<<<<<<<<
@@ -17925,7 +16763,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
  */
     __pyx_v_b->size = (__pyx_v_b->size + 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":86
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":86
  *                 b.max_val = i
  *         b.size = b.size + 1
  *         return 1             # <<<<<<<<<<<<<<
@@ -17938,7 +16776,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":87
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":87
  *         b.size = b.size + 1
  *         return 1
  *     return 0             # <<<<<<<<<<<<<<
@@ -17954,7 +16792,7 @@ static int __pyx_f_3_sa_bitset_insert(struct __pyx_t_3_sa__BitSet *__pyx_v_b, in
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":90
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":90
  * 
  * 
  * cdef int bitset_contains(_BitSet* b, int i):             # <<<<<<<<<<<<<<
@@ -17967,9 +16805,9 @@ static int __pyx_f_3_sa_bitset_contains(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("bitset_contains", 0);
+  __Pyx_RefNannySetupContext("bitset_contains");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":93
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":93
  *     cdef int val
  * 
  *     val = 1 << i             # <<<<<<<<<<<<<<
@@ -17978,7 +16816,7 @@ static int __pyx_f_3_sa_bitset_contains(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
  */
   __pyx_v_val = (1 << __pyx_v_i);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":94
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":94
  * 
  *     val = 1 << i
  *     if b.bitset & val == 0:             # <<<<<<<<<<<<<<
@@ -17988,7 +16826,7 @@ static int __pyx_f_3_sa_bitset_contains(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   __pyx_t_1 = ((__pyx_v_b->bitset & __pyx_v_val) == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":95
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":95
  *     val = 1 << i
  *     if b.bitset & val == 0:
  *         return 0             # <<<<<<<<<<<<<<
@@ -18001,7 +16839,7 @@ static int __pyx_f_3_sa_bitset_contains(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":97
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":97
  *         return 0
  *     else:
  *         return 1             # <<<<<<<<<<<<<<
@@ -18019,18 +16857,7 @@ static int __pyx_f_3_sa_bitset_contains(struct __pyx_t_3_sa__BitSet *__pyx_v_b,
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_14BitSetIterator_1__next__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_14BitSetIterator_1__next__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_14BitSetIterator___next__(((struct __pyx_obj_3_sa_BitSetIterator *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":104
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":104
  *     cdef int next_val
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -18038,7 +16865,8 @@ static PyObject *__pyx_pw_3_sa_14BitSetIterator_1__next__(PyObject *__pyx_v_self
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(struct __pyx_obj_3_sa_BitSetIterator *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(PyObject *__pyx_v_self) {
   int __pyx_v_ret_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -18047,19 +16875,19 @@ static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(struct __pyx_obj_3_sa_B
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__next__", 0);
+  __Pyx_RefNannySetupContext("__next__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":107
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":107
  *         cdef int ret_val
  * 
  *         if self.next_val == -1:             # <<<<<<<<<<<<<<
  *             raise StopIteration()
  *         ret_val = self.next_val
  */
-  __pyx_t_1 = (__pyx_v_self->next_val == -1);
+  __pyx_t_1 = (((struct __pyx_obj_3_sa_BitSetIterator *)__pyx_v_self)->next_val == -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":108
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":108
  * 
  *         if self.next_val == -1:
  *             raise StopIteration()             # <<<<<<<<<<<<<<
@@ -18071,29 +16899,29 @@ static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(struct __pyx_obj_3_sa_B
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     {__pyx_filename = __pyx_f[6]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":109
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":109
  *         if self.next_val == -1:
  *             raise StopIteration()
  *         ret_val = self.next_val             # <<<<<<<<<<<<<<
  *         self.next_val = bitset_findsucc(self.b, ret_val)
  *         return ret_val
  */
-  __pyx_v_ret_val = __pyx_v_self->next_val;
+  __pyx_v_ret_val = ((struct __pyx_obj_3_sa_BitSetIterator *)__pyx_v_self)->next_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":110
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":110
  *             raise StopIteration()
  *         ret_val = self.next_val
  *         self.next_val = bitset_findsucc(self.b, ret_val)             # <<<<<<<<<<<<<<
  *         return ret_val
  * 
  */
-  __pyx_v_self->next_val = __pyx_f_3_sa_bitset_findsucc(__pyx_v_self->b, __pyx_v_ret_val);
+  ((struct __pyx_obj_3_sa_BitSetIterator *)__pyx_v_self)->next_val = __pyx_f_3_sa_bitset_findsucc(((struct __pyx_obj_3_sa_BitSetIterator *)__pyx_v_self)->b, __pyx_v_ret_val);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":111
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":111
  *         ret_val = self.next_val
  *         self.next_val = bitset_findsucc(self.b, ret_val)
  *         return ret_val             # <<<<<<<<<<<<<<
@@ -18119,21 +16947,7 @@ static PyObject *__pyx_pf_3_sa_14BitSetIterator___next__(struct __pyx_obj_3_sa_B
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_6BitSet_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_6BitSet_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_3_sa_6BitSet___cinit__(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":122
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":122
  *     cdef _BitSet* b
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -18141,35 +16955,30 @@ static int __pyx_pw_3_sa_6BitSet_1__cinit__(PyObject *__pyx_v_self, PyObject *__
  * 
  */
 
-static int __pyx_pf_3_sa_6BitSet___cinit__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static int __pyx_pf_3_sa_6BitSet___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_6BitSet___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  __Pyx_RefNannySetupContext("__cinit__");
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":123
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":123
  * 
  *     def __cinit__(self):
  *         self.b = new_BitSet()             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_v_self->b = __pyx_f_3_sa_new_BitSet();
+  ((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b = __pyx_f_3_sa_new_BitSet();
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_6BitSet_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_6BitSet_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_6BitSet_2__dealloc__(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":125
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":125
  *         self.b = new_BitSet()
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -18177,34 +16986,24 @@ static void __pyx_pw_3_sa_6BitSet_3__dealloc__(PyObject *__pyx_v_self) {
  * 
  */
 
-static void __pyx_pf_3_sa_6BitSet_2__dealloc__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static void __pyx_pf_3_sa_6BitSet_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_6BitSet_1__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":126
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":126
  * 
  *     def __dealloc__(self):
  *         free(self.b)             # <<<<<<<<<<<<<<
  * 
  *     def __iter__(self):
  */
-  free(__pyx_v_self->b);
-
-  __Pyx_RefNannyFinishContext();
-}
+  free(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b);
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6BitSet_5__iter__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_6BitSet_5__iter__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_4__iter__(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":128
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":128
  *         free(self.b)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -18212,7 +17011,8 @@ static PyObject *__pyx_pw_3_sa_6BitSet_5__iter__(PyObject *__pyx_v_self) {
  *         it = BitSetIterator()
  */
 
-static PyObject *__pyx_pf_3_sa_6BitSet_4__iter__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6BitSet_2__iter__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_6BitSet_2__iter__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa_BitSetIterator *__pyx_v_it = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -18220,9 +17020,9 @@ static PyObject *__pyx_pf_3_sa_6BitSet_4__iter__(struct __pyx_obj_3_sa_BitSet *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__iter__", 0);
+  __Pyx_RefNannySetupContext("__iter__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":130
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":130
  *     def __iter__(self):
  *         cdef BitSetIterator it
  *         it = BitSetIterator()             # <<<<<<<<<<<<<<
@@ -18234,25 +17034,25 @@ static PyObject *__pyx_pf_3_sa_6BitSet_4__iter__(struct __pyx_obj_3_sa_BitSet *_
   __pyx_v_it = ((struct __pyx_obj_3_sa_BitSetIterator *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":131
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":131
  *         cdef BitSetIterator it
  *         it = BitSetIterator()
  *         it.b = self.b             # <<<<<<<<<<<<<<
  *         it.next_val = self.b.min_val
  *         return it
  */
-  __pyx_v_it->b = __pyx_v_self->b;
+  __pyx_v_it->b = ((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":132
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":132
  *         it = BitSetIterator()
  *         it.b = self.b
  *         it.next_val = self.b.min_val             # <<<<<<<<<<<<<<
  *         return it
  * 
  */
-  __pyx_v_it->next_val = __pyx_v_self->b->min_val;
+  __pyx_v_it->next_val = ((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->min_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":133
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":133
  *         it.b = self.b
  *         it.next_val = self.b.min_val
  *         return it             # <<<<<<<<<<<<<<
@@ -18277,18 +17077,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_4__iter__(struct __pyx_obj_3_sa_BitSet *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6BitSet_7insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_6BitSet_7insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_6insert(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":135
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":135
  *         return it
  * 
  *     def insert(self, i):             # <<<<<<<<<<<<<<
@@ -18296,7 +17085,8 @@ static PyObject *__pyx_pw_3_sa_6BitSet_7insert(PyObject *__pyx_v_self, PyObject
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6BitSet_6insert(struct __pyx_obj_3_sa_BitSet *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_6BitSet_3insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_6BitSet_3insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -18304,9 +17094,9 @@ static PyObject *__pyx_pf_3_sa_6BitSet_6insert(struct __pyx_obj_3_sa_BitSet *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("insert", 0);
+  __Pyx_RefNannySetupContext("insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":136
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":136
  * 
  *     def insert(self, i):
  *         return bitset_insert(self.b, i)             # <<<<<<<<<<<<<<
@@ -18315,7 +17105,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_6insert(struct __pyx_obj_3_sa_BitSet *__p
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_bitset_insert(__pyx_v_self->b, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_bitset_insert(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -18333,18 +17123,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_6insert(struct __pyx_obj_3_sa_BitSet *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6BitSet_9findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_6BitSet_9findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("findsucc (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_8findsucc(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":138
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":138
  *         return bitset_insert(self.b, i)
  * 
  *     def findsucc(self, i):             # <<<<<<<<<<<<<<
@@ -18352,7 +17131,8 @@ static PyObject *__pyx_pw_3_sa_6BitSet_9findsucc(PyObject *__pyx_v_self, PyObjec
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6BitSet_8findsucc(struct __pyx_obj_3_sa_BitSet *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_6BitSet_4findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_6BitSet_4findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -18360,9 +17140,9 @@ static PyObject *__pyx_pf_3_sa_6BitSet_8findsucc(struct __pyx_obj_3_sa_BitSet *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("findsucc", 0);
+  __Pyx_RefNannySetupContext("findsucc");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":139
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":139
  * 
  *     def findsucc(self, i):
  *         return bitset_findsucc(self.b, i)             # <<<<<<<<<<<<<<
@@ -18371,7 +17151,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_8findsucc(struct __pyx_obj_3_sa_BitSet *_
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_bitset_findsucc(__pyx_v_self->b, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_bitset_findsucc(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -18389,18 +17169,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_8findsucc(struct __pyx_obj_3_sa_BitSet *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6BitSet_11__str__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_6BitSet_11__str__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_10__str__(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":141
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":141
  *         return bitset_findsucc(self.b, i)
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -18408,7 +17177,8 @@ static PyObject *__pyx_pw_3_sa_6BitSet_11__str__(PyObject *__pyx_v_self) {
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6BitSet_5__str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_6BitSet_5__str__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -18417,9 +17187,9 @@ static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__str__", 0);
+  __Pyx_RefNannySetupContext("__str__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":142
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":142
  * 
  *     def __str__(self):
  *         return dec2bin(self.b.bitset)+"  ("+str(self.b.size)+","+str(self.b.min_val)+","+str(self.b.max_val)+")"             # <<<<<<<<<<<<<<
@@ -18427,15 +17197,15 @@ static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *_
  *     def min(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_3_sa_dec2bin(__pyx_v_self->b->bitset)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_3_sa_dec2bin(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->bitset)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyNumber_Add(__pyx_t_1, ((PyObject *)__pyx_kp_s_58)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->b->size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -18449,10 +17219,10 @@ static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *_
   __pyx_t_1 = PyNumber_Add(__pyx_t_3, ((PyObject *)__pyx_kp_s_4)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_self->b->min_val); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyInt_FromLong(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->min_val); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
@@ -18466,10 +17236,10 @@ static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *_
   __pyx_t_3 = PyNumber_Add(__pyx_t_2, ((PyObject *)__pyx_kp_s_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_self->b->max_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->max_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
@@ -18501,18 +17271,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_10__str__(struct __pyx_obj_3_sa_BitSet *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6BitSet_13min(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_6BitSet_13min(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("min (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_12min(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":144
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":144
  *         return dec2bin(self.b.bitset)+"  ("+str(self.b.size)+","+str(self.b.min_val)+","+str(self.b.max_val)+")"
  * 
  *     def min(self):             # <<<<<<<<<<<<<<
@@ -18520,16 +17279,17 @@ static PyObject *__pyx_pw_3_sa_6BitSet_13min(PyObject *__pyx_v_self, CYTHON_UNUS
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6BitSet_12min(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6BitSet_6min(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_6BitSet_6min(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("min", 0);
+  __Pyx_RefNannySetupContext("min");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":145
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":145
  * 
  *     def min(self):
  *         return self.b.min_val             # <<<<<<<<<<<<<<
@@ -18537,7 +17297,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_12min(struct __pyx_obj_3_sa_BitSet *__pyx
  *     def max(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->b->min_val); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->min_val); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -18555,18 +17315,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_12min(struct __pyx_obj_3_sa_BitSet *__pyx
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6BitSet_15max(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_6BitSet_15max(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("max (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_14max(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":147
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":147
  *         return self.b.min_val
  * 
  *     def max(self):             # <<<<<<<<<<<<<<
@@ -18574,16 +17323,17 @@ static PyObject *__pyx_pw_3_sa_6BitSet_15max(PyObject *__pyx_v_self, CYTHON_UNUS
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6BitSet_14max(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6BitSet_7max(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_6BitSet_7max(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("max", 0);
+  __Pyx_RefNannySetupContext("max");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":148
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":148
  * 
  *     def max(self):
  *         return self.b.max_val             # <<<<<<<<<<<<<<
@@ -18591,7 +17341,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_14max(struct __pyx_obj_3_sa_BitSet *__pyx
  *     def __len__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->b->max_val); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->max_val); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -18609,18 +17359,7 @@ static PyObject *__pyx_pf_3_sa_6BitSet_14max(struct __pyx_obj_3_sa_BitSet *__pyx
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_ssize_t __pyx_pw_3_sa_6BitSet_17__len__(PyObject *__pyx_v_self); /*proto*/
-static Py_ssize_t __pyx_pw_3_sa_6BitSet_17__len__(PyObject *__pyx_v_self) {
-  Py_ssize_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_16__len__(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":150
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":150
  *         return self.b.max_val
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -18628,19 +17367,20 @@ static Py_ssize_t __pyx_pw_3_sa_6BitSet_17__len__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_ssize_t __pyx_pf_3_sa_6BitSet_16__len__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self) {
+static Py_ssize_t __pyx_pf_3_sa_6BitSet_8__len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_pf_3_sa_6BitSet_8__len__(PyObject *__pyx_v_self) {
   Py_ssize_t __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__", 0);
+  __Pyx_RefNannySetupContext("__len__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":151
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":151
  * 
  *     def __len__(self):
  *         return self.b.size             # <<<<<<<<<<<<<<
  * 
  *     def __contains__(self, i):
  */
-  __pyx_r = __pyx_v_self->b->size;
+  __pyx_r = ((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b->size;
   goto __pyx_L0;
 
   __pyx_r = 0;
@@ -18649,18 +17389,7 @@ static Py_ssize_t __pyx_pf_3_sa_6BitSet_16__len__(struct __pyx_obj_3_sa_BitSet *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_6BitSet_19__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static int __pyx_pw_3_sa_6BitSet_19__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6BitSet_18__contains__(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":153
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":153
  *         return self.b.size
  * 
  *     def __contains__(self, i):             # <<<<<<<<<<<<<<
@@ -18668,7 +17397,8 @@ static int __pyx_pw_3_sa_6BitSet_19__contains__(PyObject *__pyx_v_self, PyObject
  * 
  */
 
-static int __pyx_pf_3_sa_6BitSet_18__contains__(struct __pyx_obj_3_sa_BitSet *__pyx_v_self, PyObject *__pyx_v_i) {
+static int __pyx_pf_3_sa_6BitSet_9__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static int __pyx_pf_3_sa_6BitSet_9__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -18677,9 +17407,9 @@ static int __pyx_pf_3_sa_6BitSet_18__contains__(struct __pyx_obj_3_sa_BitSet *__
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__contains__", 0);
+  __Pyx_RefNannySetupContext("__contains__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":154
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":154
  * 
  *     def __contains__(self, i):
  *         return bool(bitset_contains(self.b, i))             # <<<<<<<<<<<<<<
@@ -18687,7 +17417,7 @@ static int __pyx_pf_3_sa_6BitSet_18__contains__(struct __pyx_obj_3_sa_BitSet *__
  * 
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_bitset_contains(__pyx_v_self->b, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_bitset_contains(((struct __pyx_obj_3_sa_BitSet *)__pyx_v_self)->b, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -18705,7 +17435,7 @@ static int __pyx_pf_3_sa_6BitSet_18__contains__(struct __pyx_obj_3_sa_BitSet *__
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":157
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":157
  * 
  * 
  * cdef str dec2bin(long i):             # <<<<<<<<<<<<<<
@@ -18715,7 +17445,7 @@ static int __pyx_pf_3_sa_6BitSet_18__contains__(struct __pyx_obj_3_sa_BitSet *__
 
 static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
   PyObject *__pyx_v_result = 0;
-  CYTHON_UNUSED unsigned int __pyx_v_d;
+  unsigned int __pyx_v_d;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -18725,9 +17455,9 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("dec2bin", 0);
+  __Pyx_RefNannySetupContext("dec2bin");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":158
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":158
  * 
  * cdef str dec2bin(long i):
  *     cdef str result = ""             # <<<<<<<<<<<<<<
@@ -18737,7 +17467,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_45));
   __pyx_v_result = __pyx_kp_s_45;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":160
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":160
  *     cdef str result = ""
  *     cdef unsigned d
  *     for d in range(MIN_BOTTOM_SIZE):             # <<<<<<<<<<<<<<
@@ -18748,7 +17478,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_d = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":161
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":161
  *     cdef unsigned d
  *     for d in range(MIN_BOTTOM_SIZE):
  *         if i & LOWER_MASK[0] == 0:             # <<<<<<<<<<<<<<
@@ -18758,7 +17488,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
     __pyx_t_3 = ((__pyx_v_i & (__pyx_v_3_sa_LOWER_MASK[0])) == 0);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":162
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":162
  *     for d in range(MIN_BOTTOM_SIZE):
  *         if i & LOWER_MASK[0] == 0:
  *             result = "0"+result             # <<<<<<<<<<<<<<
@@ -18774,7 +17504,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":164
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":164
  *             result = "0"+result
  *         else:
  *             result = "1"+result             # <<<<<<<<<<<<<<
@@ -18789,7 +17519,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
     }
     __pyx_L5:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":165
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":165
  *         else:
  *             result = "1"+result
  *         i = i >> 1             # <<<<<<<<<<<<<<
@@ -18799,7 +17529,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
     __pyx_v_i = (__pyx_v_i >> 1);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":166
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":166
  *             result = "1"+result
  *         i = i >> 1
  *     return result             # <<<<<<<<<<<<<<
@@ -18824,7 +17554,7 @@ static PyObject *__pyx_f_3_sa_dec2bin(long __pyx_v_i) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":177
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":177
  *     void** bottom
  * 
  * cdef _VEB* new_VEB(int n):             # <<<<<<<<<<<<<<
@@ -18843,9 +17573,9 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("new_VEB", 0);
+  __Pyx_RefNannySetupContext("new_VEB");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":181
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":181
  *     cdef int num_bits, num_top_bits, i
  * 
  *     veb = <_VEB*> malloc(sizeof(_VEB))             # <<<<<<<<<<<<<<
@@ -18854,7 +17584,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb = ((struct __pyx_t_3_sa__VEB *)malloc((sizeof(struct __pyx_t_3_sa__VEB))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":183
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":183
  *     veb = <_VEB*> malloc(sizeof(_VEB))
  * 
  *     num_bits = int(ceil(log(n) / log(2)))             # <<<<<<<<<<<<<<
@@ -18869,7 +17599,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   }
   __pyx_v_num_bits = ((int)ceil((__pyx_t_1 / __pyx_t_2)));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":184
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":184
  * 
  *     num_bits = int(ceil(log(n) / log(2)))
  *     veb.num_bottom_bits = num_bits/2             # <<<<<<<<<<<<<<
@@ -18878,7 +17608,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb->num_bottom_bits = __Pyx_div_long(__pyx_v_num_bits, 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":185
  *     num_bits = int(ceil(log(n) / log(2)))
  *     veb.num_bottom_bits = num_bits/2
  *     if veb.num_bottom_bits < MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -18888,7 +17618,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   __pyx_t_3 = (__pyx_v_veb->num_bottom_bits < __pyx_v_3_sa_MIN_BOTTOM_BITS);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":186
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":186
  *     veb.num_bottom_bits = num_bits/2
  *     if veb.num_bottom_bits < MIN_BOTTOM_BITS:
  *         veb.num_bottom_bits = MIN_BOTTOM_BITS             # <<<<<<<<<<<<<<
@@ -18900,7 +17630,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":187
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":187
  *     if veb.num_bottom_bits < MIN_BOTTOM_BITS:
  *         veb.num_bottom_bits = MIN_BOTTOM_BITS
  *     veb.top_universe_size = (n >> veb.num_bottom_bits) + 1             # <<<<<<<<<<<<<<
@@ -18909,7 +17639,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb->top_universe_size = ((__pyx_v_n >> __pyx_v_veb->num_bottom_bits) + 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":189
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":189
  *     veb.top_universe_size = (n >> veb.num_bottom_bits) + 1
  * 
  *     veb.bottom = <void**> malloc(veb.top_universe_size * sizeof(void*))             # <<<<<<<<<<<<<<
@@ -18918,7 +17648,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb->bottom = ((void **)malloc((__pyx_v_veb->top_universe_size * (sizeof(void *)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":190
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":190
  * 
  *     veb.bottom = <void**> malloc(veb.top_universe_size * sizeof(void*))
  *     memset(veb.bottom, 0, veb.top_universe_size * sizeof(void*))             # <<<<<<<<<<<<<<
@@ -18927,7 +17657,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   memset(__pyx_v_veb->bottom, 0, (__pyx_v_veb->top_universe_size * (sizeof(void *))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":192
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":192
  *     memset(veb.bottom, 0, veb.top_universe_size * sizeof(void*))
  * 
  *     if veb.top_universe_size > MIN_BOTTOM_SIZE:             # <<<<<<<<<<<<<<
@@ -18937,7 +17667,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   __pyx_t_3 = (__pyx_v_veb->top_universe_size > __pyx_v_3_sa_MIN_BOTTOM_SIZE);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":193
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":193
  * 
  *     if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *         veb.top = new_VEB(veb.top_universe_size)             # <<<<<<<<<<<<<<
@@ -18949,7 +17679,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":195
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":195
  *         veb.top = new_VEB(veb.top_universe_size)
  *     else:
  *         veb.top = new_BitSet()             # <<<<<<<<<<<<<<
@@ -18960,7 +17690,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":197
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":197
  *         veb.top = new_BitSet()
  * 
  *     veb.max_val = -1             # <<<<<<<<<<<<<<
@@ -18969,7 +17699,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb->max_val = -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":198
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":198
  * 
  *     veb.max_val = -1
  *     veb.min_val = -1             # <<<<<<<<<<<<<<
@@ -18978,7 +17708,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb->min_val = -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":199
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":199
  *     veb.max_val = -1
  *     veb.min_val = -1
  *     veb.size = 0             # <<<<<<<<<<<<<<
@@ -18987,7 +17717,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
  */
   __pyx_v_veb->size = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":200
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":200
  *     veb.min_val = -1
  *     veb.size = 0
  *     return veb             # <<<<<<<<<<<<<<
@@ -19007,7 +17737,7 @@ static struct __pyx_t_3_sa__VEB *__pyx_f_3_sa_new_VEB(int __pyx_v_n) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":203
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":203
  * 
  * 
  * cdef int VEB_insert(_VEB* veb, int i):             # <<<<<<<<<<<<<<
@@ -19026,9 +17756,9 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("VEB_insert", 0);
+  __Pyx_RefNannySetupContext("VEB_insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":208
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":208
  *     cdef int a, b, tmp
  * 
  *     if veb.size == 0:             # <<<<<<<<<<<<<<
@@ -19038,7 +17768,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
   __pyx_t_1 = (__pyx_v_veb->size == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":209
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":209
  * 
  *     if veb.size == 0:
  *         veb.min_val = i             # <<<<<<<<<<<<<<
@@ -19047,7 +17777,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
     __pyx_v_veb->min_val = __pyx_v_i;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":210
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":210
  *     if veb.size == 0:
  *         veb.min_val = i
  *         veb.max_val = i             # <<<<<<<<<<<<<<
@@ -19058,7 +17788,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     goto __pyx_L3;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":211
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":211
  *         veb.min_val = i
  *         veb.max_val = i
  *     elif i == veb.min_val or i == veb.max_val:             # <<<<<<<<<<<<<<
@@ -19074,7 +17804,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":212
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":212
  *         veb.max_val = i
  *     elif i == veb.min_val or i == veb.max_val:
  *         return 0             # <<<<<<<<<<<<<<
@@ -19087,7 +17817,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":214
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":214
  *         return 0
  *     else:
  *         if i < veb.min_val:             # <<<<<<<<<<<<<<
@@ -19097,7 +17827,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     __pyx_t_3 = (__pyx_v_i < __pyx_v_veb->min_val);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":215
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":215
  *     else:
  *         if i < veb.min_val:
  *             tmp = i             # <<<<<<<<<<<<<<
@@ -19106,7 +17836,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
       __pyx_v_tmp = __pyx_v_i;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":216
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":216
  *         if i < veb.min_val:
  *             tmp = i
  *             i = veb.min_val             # <<<<<<<<<<<<<<
@@ -19115,7 +17845,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
       __pyx_v_i = __pyx_v_veb->min_val;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":217
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":217
  *             tmp = i
  *             i = veb.min_val
  *             veb.min_val = tmp             # <<<<<<<<<<<<<<
@@ -19127,7 +17857,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     }
     __pyx_L4:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":218
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":218
  *             i = veb.min_val
  *             veb.min_val = tmp
  *         a = i >> veb.num_bottom_bits             # <<<<<<<<<<<<<<
@@ -19136,7 +17866,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
     __pyx_v_a = (__pyx_v_i >> __pyx_v_veb->num_bottom_bits);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":219
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":219
  *             veb.min_val = tmp
  *         a = i >> veb.num_bottom_bits
  *         b = i & LOWER_MASK[veb.num_bottom_bits-1]             # <<<<<<<<<<<<<<
@@ -19145,7 +17875,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
     __pyx_v_b = (__pyx_v_i & (__pyx_v_3_sa_LOWER_MASK[(__pyx_v_veb->num_bottom_bits - 1)]));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":220
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":220
  *         a = i >> veb.num_bottom_bits
  *         b = i & LOWER_MASK[veb.num_bottom_bits-1]
  *         if veb.bottom[a] == NULL:             # <<<<<<<<<<<<<<
@@ -19155,7 +17885,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     __pyx_t_3 = ((__pyx_v_veb->bottom[__pyx_v_a]) == NULL);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":221
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":221
  *         b = i & LOWER_MASK[veb.num_bottom_bits-1]
  *         if veb.bottom[a] == NULL:
  *             if veb.top_universe_size > MIN_BOTTOM_SIZE:             # <<<<<<<<<<<<<<
@@ -19165,7 +17895,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       __pyx_t_3 = (__pyx_v_veb->top_universe_size > __pyx_v_3_sa_MIN_BOTTOM_SIZE);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":222
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":222
  *         if veb.bottom[a] == NULL:
  *             if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *                 subv = <_VEB*> veb.top             # <<<<<<<<<<<<<<
@@ -19174,7 +17904,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
         __pyx_v_subv = ((struct __pyx_t_3_sa__VEB *)__pyx_v_veb->top);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":223
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":223
  *             if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *                 subv = <_VEB*> veb.top
  *                 VEB_insert(subv, a)             # <<<<<<<<<<<<<<
@@ -19186,7 +17916,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":225
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":225
  *                 VEB_insert(subv, a)
  *             else:
  *                 subb = <_BitSet*> veb.top             # <<<<<<<<<<<<<<
@@ -19195,7 +17925,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
         __pyx_v_subb = ((struct __pyx_t_3_sa__BitSet *)__pyx_v_veb->top);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":226
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":226
  *             else:
  *                 subb = <_BitSet*> veb.top
  *                 bitset_insert(subb, a)             # <<<<<<<<<<<<<<
@@ -19206,7 +17936,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       }
       __pyx_L6:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":227
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":227
  *                 subb = <_BitSet*> veb.top
  *                 bitset_insert(subb, a)
  *             if veb.num_bottom_bits > MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -19216,7 +17946,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       __pyx_t_3 = (__pyx_v_veb->num_bottom_bits > __pyx_v_3_sa_MIN_BOTTOM_BITS);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":228
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":228
  *                 bitset_insert(subb, a)
  *             if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *                 veb.bottom[a] = new_VEB(1 << veb.num_bottom_bits)             # <<<<<<<<<<<<<<
@@ -19228,7 +17958,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":230
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":230
  *                 veb.bottom[a] = new_VEB(1 << veb.num_bottom_bits)
  *             else:
  *                 veb.bottom[a] = new_BitSet()             # <<<<<<<<<<<<<<
@@ -19242,7 +17972,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     }
     __pyx_L5:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":231
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":231
  *             else:
  *                 veb.bottom[a] = new_BitSet()
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -19252,7 +17982,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     __pyx_t_3 = (__pyx_v_veb->num_bottom_bits > __pyx_v_3_sa_MIN_BOTTOM_BITS);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":232
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":232
  *                 veb.bottom[a] = new_BitSet()
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[a]             # <<<<<<<<<<<<<<
@@ -19261,7 +17991,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
       __pyx_v_subv = ((struct __pyx_t_3_sa__VEB *)(__pyx_v_veb->bottom[__pyx_v_a]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":233
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":233
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[a]
  *             if VEB_insert(subv, b) == 0:             # <<<<<<<<<<<<<<
@@ -19271,7 +18001,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       __pyx_t_3 = (__pyx_f_3_sa_VEB_insert(__pyx_v_subv, __pyx_v_b) == 0);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":234
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":234
  *             subv = <_VEB*> veb.bottom[a]
  *             if VEB_insert(subv, b) == 0:
  *                 return 0             # <<<<<<<<<<<<<<
@@ -19287,7 +18017,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":236
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":236
  *                 return 0
  *         else:
  *             subb = <_BitSet*> veb.bottom[a]             # <<<<<<<<<<<<<<
@@ -19296,7 +18026,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
       __pyx_v_subb = ((struct __pyx_t_3_sa__BitSet *)(__pyx_v_veb->bottom[__pyx_v_a]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":237
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":237
  *         else:
  *             subb = <_BitSet*> veb.bottom[a]
  *             if bitset_insert(subb, b) == 0:             # <<<<<<<<<<<<<<
@@ -19306,7 +18036,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
       __pyx_t_3 = (__pyx_f_3_sa_bitset_insert(__pyx_v_subb, __pyx_v_b) == 0);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":238
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":238
  *             subb = <_BitSet*> veb.bottom[a]
  *             if bitset_insert(subb, b) == 0:
  *                 return 0             # <<<<<<<<<<<<<<
@@ -19321,7 +18051,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     }
     __pyx_L8:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":240
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":240
  *                 return 0
  * 
  *         if i > veb.max_val:             # <<<<<<<<<<<<<<
@@ -19331,7 +18061,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
     __pyx_t_3 = (__pyx_v_i > __pyx_v_veb->max_val);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":241
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":241
  * 
  *         if i > veb.max_val:
  *             veb.max_val = i             # <<<<<<<<<<<<<<
@@ -19345,7 +18075,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":242
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":242
  *         if i > veb.max_val:
  *             veb.max_val = i
  *     veb.size = veb.size + 1             # <<<<<<<<<<<<<<
@@ -19354,7 +18084,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
  */
   __pyx_v_veb->size = (__pyx_v_veb->size + 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":243
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":243
  *             veb.max_val = i
  *     veb.size = veb.size + 1
  *     return 1             # <<<<<<<<<<<<<<
@@ -19370,7 +18100,7 @@ static int __pyx_f_3_sa_VEB_insert(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int __
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":246
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":246
  * 
  * 
  * cdef del_VEB(_VEB* veb):             # <<<<<<<<<<<<<<
@@ -19387,9 +18117,9 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("del_VEB", 0);
+  __Pyx_RefNannySetupContext("del_VEB");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":249
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":249
  *     cdef int i
  * 
  *     if veb.top_universe_size > MIN_BOTTOM_SIZE:             # <<<<<<<<<<<<<<
@@ -19399,7 +18129,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   __pyx_t_1 = (__pyx_v_veb->top_universe_size > __pyx_v_3_sa_MIN_BOTTOM_SIZE);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":250
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":250
  * 
  *     if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *         i = (<_VEB*> veb.top).min_val             # <<<<<<<<<<<<<<
@@ -19411,7 +18141,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":252
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":252
  *         i = (<_VEB*> veb.top).min_val
  *     else:
  *         i = (<_BitSet*> veb.top).min_val             # <<<<<<<<<<<<<<
@@ -19422,7 +18152,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":254
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":254
  *         i = (<_BitSet*> veb.top).min_val
  * 
  *     while i != -1:             # <<<<<<<<<<<<<<
@@ -19433,7 +18163,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     __pyx_t_1 = (__pyx_v_i != -1);
     if (!__pyx_t_1) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":255
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":255
  * 
  *     while i != -1:
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -19443,7 +18173,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     __pyx_t_1 = (__pyx_v_veb->num_bottom_bits > __pyx_v_3_sa_MIN_BOTTOM_BITS);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":256
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":256
  *     while i != -1:
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             del_VEB(<_VEB*> veb.bottom[i])             # <<<<<<<<<<<<<<
@@ -19457,7 +18187,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":258
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":258
  *             del_VEB(<_VEB*> veb.bottom[i])
  *         else:
  *             free(<_BitSet*> veb.bottom[i])             # <<<<<<<<<<<<<<
@@ -19468,7 +18198,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     }
     __pyx_L6:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":260
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":260
  *             free(<_BitSet*> veb.bottom[i])
  * 
  *         if veb.top_universe_size > MIN_BOTTOM_SIZE:             # <<<<<<<<<<<<<<
@@ -19478,7 +18208,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     __pyx_t_1 = (__pyx_v_veb->top_universe_size > __pyx_v_3_sa_MIN_BOTTOM_SIZE);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":261
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":261
  * 
  *         if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *             i = VEB_findsucc(<_VEB*> veb.top, i)             # <<<<<<<<<<<<<<
@@ -19490,7 +18220,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":263
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":263
  *             i = VEB_findsucc(<_VEB*> veb.top, i)
  *         else:
  *             i = bitset_findsucc(<_BitSet*> veb.top, i)             # <<<<<<<<<<<<<<
@@ -19502,7 +18232,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
     __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":265
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":265
  *             i = bitset_findsucc(<_BitSet*> veb.top, i)
  * 
  *     if veb.top_universe_size > MIN_BOTTOM_SIZE:             # <<<<<<<<<<<<<<
@@ -19512,7 +18242,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   __pyx_t_1 = (__pyx_v_veb->top_universe_size > __pyx_v_3_sa_MIN_BOTTOM_SIZE);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":266
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":266
  * 
  *     if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *         del_VEB(<_VEB*> veb.top)             # <<<<<<<<<<<<<<
@@ -19526,7 +18256,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":268
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":268
  *         del_VEB(<_VEB*> veb.top)
  *     else:
  *         free(<_BitSet*> veb.top)             # <<<<<<<<<<<<<<
@@ -19537,7 +18267,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   }
   __pyx_L8:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":269
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":269
  *     else:
  *         free(<_BitSet*> veb.top)
  *     free(veb.bottom)             # <<<<<<<<<<<<<<
@@ -19546,7 +18276,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
  */
   free(__pyx_v_veb->bottom);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":270
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":270
  *         free(<_BitSet*> veb.top)
  *     free(veb.bottom)
  *     free(veb)             # <<<<<<<<<<<<<<
@@ -19567,7 +18297,7 @@ static PyObject *__pyx_f_3_sa_del_VEB(struct __pyx_t_3_sa__VEB *__pyx_v_veb) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":273
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":273
  * 
  * 
  * cdef int VEB_findsucc(_VEB* veb, int i):             # <<<<<<<<<<<<<<
@@ -19588,9 +18318,9 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("VEB_findsucc", 0);
+  __Pyx_RefNannySetupContext("VEB_findsucc");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":278
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":278
  *     cdef int a, b, j, c, found
  * 
  *     if veb.max_val == -1 or i>=veb.max_val:             # <<<<<<<<<<<<<<
@@ -19606,7 +18336,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":279
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":279
  * 
  *     if veb.max_val == -1 or i>=veb.max_val:
  *         return -1             # <<<<<<<<<<<<<<
@@ -19619,7 +18349,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":280
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":280
  *     if veb.max_val == -1 or i>=veb.max_val:
  *         return -1
  *     if i < veb.min_val:             # <<<<<<<<<<<<<<
@@ -19629,7 +18359,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   __pyx_t_3 = (__pyx_v_i < __pyx_v_veb->min_val);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":281
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":281
  *         return -1
  *     if i < veb.min_val:
  *         return veb.min_val             # <<<<<<<<<<<<<<
@@ -19642,7 +18372,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":283
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":283
  *         return veb.min_val
  * 
  *     a = i >> veb.num_bottom_bits             # <<<<<<<<<<<<<<
@@ -19651,7 +18381,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
   __pyx_v_a = (__pyx_v_i >> __pyx_v_veb->num_bottom_bits);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":284
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":284
  * 
  *     a = i >> veb.num_bottom_bits
  *     b = i & LOWER_MASK[veb.num_bottom_bits-1]             # <<<<<<<<<<<<<<
@@ -19660,7 +18390,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
   __pyx_v_b = (__pyx_v_i & (__pyx_v_3_sa_LOWER_MASK[(__pyx_v_veb->num_bottom_bits - 1)]));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":285
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":285
  *     a = i >> veb.num_bottom_bits
  *     b = i & LOWER_MASK[veb.num_bottom_bits-1]
  *     found = 0             # <<<<<<<<<<<<<<
@@ -19669,7 +18399,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
   __pyx_v_found = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":286
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":286
  *     b = i & LOWER_MASK[veb.num_bottom_bits-1]
  *     found = 0
  *     if veb.bottom[a] != NULL:             # <<<<<<<<<<<<<<
@@ -19679,7 +18409,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   __pyx_t_3 = ((__pyx_v_veb->bottom[__pyx_v_a]) != NULL);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":287
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":287
  *     found = 0
  *     if veb.bottom[a] != NULL:
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -19689,7 +18419,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     __pyx_t_3 = (__pyx_v_veb->num_bottom_bits > __pyx_v_3_sa_MIN_BOTTOM_BITS);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":288
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":288
  *     if veb.bottom[a] != NULL:
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[a]             # <<<<<<<<<<<<<<
@@ -19698,7 +18428,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subv = ((struct __pyx_t_3_sa__VEB *)(__pyx_v_veb->bottom[__pyx_v_a]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":289
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":289
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[a]
  *             if subv.max_val > b:             # <<<<<<<<<<<<<<
@@ -19708,7 +18438,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
       __pyx_t_3 = (__pyx_v_subv->max_val > __pyx_v_b);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":290
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":290
  *             subv = <_VEB*> veb.bottom[a]
  *             if subv.max_val > b:
  *                 j = (a << veb.num_bottom_bits) + VEB_findsucc(subv, b)             # <<<<<<<<<<<<<<
@@ -19717,7 +18447,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
         __pyx_v_j = ((__pyx_v_a << __pyx_v_veb->num_bottom_bits) + __pyx_f_3_sa_VEB_findsucc(__pyx_v_subv, __pyx_v_b));
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":291
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":291
  *             if subv.max_val > b:
  *                 j = (a << veb.num_bottom_bits) + VEB_findsucc(subv, b)
  *                 found = 1             # <<<<<<<<<<<<<<
@@ -19732,7 +18462,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":293
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":293
  *                 found = 1
  *         else:
  *             subb = <_BitSet*> veb.bottom[a]             # <<<<<<<<<<<<<<
@@ -19741,7 +18471,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subb = ((struct __pyx_t_3_sa__BitSet *)(__pyx_v_veb->bottom[__pyx_v_a]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":294
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":294
  *         else:
  *             subb = <_BitSet*> veb.bottom[a]
  *             if subb.max_val > b:             # <<<<<<<<<<<<<<
@@ -19751,7 +18481,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
       __pyx_t_3 = (__pyx_v_subb->max_val > __pyx_v_b);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":295
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":295
  *             subb = <_BitSet*> veb.bottom[a]
  *             if subb.max_val > b:
  *                 j = (a << veb.num_bottom_bits) + bitset_findsucc(subb, b)             # <<<<<<<<<<<<<<
@@ -19760,7 +18490,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
         __pyx_v_j = ((__pyx_v_a << __pyx_v_veb->num_bottom_bits) + __pyx_f_3_sa_bitset_findsucc(__pyx_v_subb, __pyx_v_b));
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":296
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":296
  *             if subb.max_val > b:
  *                 j = (a << veb.num_bottom_bits) + bitset_findsucc(subb, b)
  *                 found = 1             # <<<<<<<<<<<<<<
@@ -19777,7 +18507,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":297
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":297
  *                 j = (a << veb.num_bottom_bits) + bitset_findsucc(subb, b)
  *                 found = 1
  *     if found==0:             # <<<<<<<<<<<<<<
@@ -19787,7 +18517,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   __pyx_t_3 = (__pyx_v_found == 0);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":298
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":298
  *                 found = 1
  *     if found==0:
  *         if veb.top_universe_size > MIN_BOTTOM_SIZE:             # <<<<<<<<<<<<<<
@@ -19797,7 +18527,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     __pyx_t_3 = (__pyx_v_veb->top_universe_size > __pyx_v_3_sa_MIN_BOTTOM_SIZE);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":299
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":299
  *     if found==0:
  *         if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *             subv = <_VEB*> veb.top             # <<<<<<<<<<<<<<
@@ -19806,7 +18536,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subv = ((struct __pyx_t_3_sa__VEB *)__pyx_v_veb->top);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":300
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":300
  *         if veb.top_universe_size > MIN_BOTTOM_SIZE:
  *             subv = <_VEB*> veb.top
  *             c = VEB_findsucc(subv, a)             # <<<<<<<<<<<<<<
@@ -19818,7 +18548,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":302
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":302
  *             c = VEB_findsucc(subv, a)
  *         else:
  *             subb = <_BitSet*> veb.top             # <<<<<<<<<<<<<<
@@ -19827,7 +18557,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subb = ((struct __pyx_t_3_sa__BitSet *)__pyx_v_veb->top);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":303
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":303
  *         else:
  *             subb = <_BitSet*> veb.top
  *             c = bitset_findsucc(subb, a)             # <<<<<<<<<<<<<<
@@ -19838,7 +18568,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     }
     __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":304
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":304
  *             subb = <_BitSet*> veb.top
  *             c = bitset_findsucc(subb, a)
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -19848,7 +18578,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     __pyx_t_3 = (__pyx_v_veb->num_bottom_bits > __pyx_v_3_sa_MIN_BOTTOM_BITS);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":305
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":305
  *             c = bitset_findsucc(subb, a)
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[c]             # <<<<<<<<<<<<<<
@@ -19857,7 +18587,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subv = ((struct __pyx_t_3_sa__VEB *)(__pyx_v_veb->bottom[__pyx_v_c]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":306
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":306
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[c]
  *             j = (c << veb.num_bottom_bits) + subv.min_val             # <<<<<<<<<<<<<<
@@ -19869,7 +18599,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":308
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":308
  *             j = (c << veb.num_bottom_bits) + subv.min_val
  *         else:
  *             subb = <_BitSet*> veb.bottom[c]             # <<<<<<<<<<<<<<
@@ -19878,7 +18608,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subb = ((struct __pyx_t_3_sa__BitSet *)(__pyx_v_veb->bottom[__pyx_v_c]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":309
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":309
  *         else:
  *             subb = <_BitSet*> veb.bottom[c]
  *             j = (c << veb.num_bottom_bits) + subb.min_val             # <<<<<<<<<<<<<<
@@ -19892,7 +18622,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   __pyx_L9:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":310
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":310
  *             subb = <_BitSet*> veb.bottom[c]
  *             j = (c << veb.num_bottom_bits) + subb.min_val
  *     return j             # <<<<<<<<<<<<<<
@@ -19908,7 +18638,7 @@ static int __pyx_f_3_sa_VEB_findsucc(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":313
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":313
  * 
  * 
  * cdef int VEB_contains(_VEB* veb, int i):             # <<<<<<<<<<<<<<
@@ -19927,9 +18657,9 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   int __pyx_t_2;
   int __pyx_t_3;
   int __pyx_t_4;
-  __Pyx_RefNannySetupContext("VEB_contains", 0);
+  __Pyx_RefNannySetupContext("VEB_contains");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":318
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":318
  *     cdef int a, b
  * 
  *     if veb.size == 0 or i < veb.min_val or i > veb.max_val:             # <<<<<<<<<<<<<<
@@ -19951,7 +18681,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":319
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":319
  * 
  *     if veb.size == 0 or i < veb.min_val or i > veb.max_val:
  *         return 0             # <<<<<<<<<<<<<<
@@ -19964,7 +18694,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":321
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":321
  *         return 0
  * 
  *     if veb.min_val == i:             # <<<<<<<<<<<<<<
@@ -19974,7 +18704,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   __pyx_t_2 = (__pyx_v_veb->min_val == __pyx_v_i);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":322
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":322
  * 
  *     if veb.min_val == i:
  *         return 1             # <<<<<<<<<<<<<<
@@ -19987,7 +18717,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":324
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":324
  *         return 1
  *     else:
  *         if veb.size == 1:             # <<<<<<<<<<<<<<
@@ -19997,7 +18727,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     __pyx_t_2 = (__pyx_v_veb->size == 1);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":325
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":325
  *     else:
  *         if veb.size == 1:
  *             return 0             # <<<<<<<<<<<<<<
@@ -20012,7 +18742,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":327
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":327
  *             return 0
  * 
  *     a = i >> veb.num_bottom_bits             # <<<<<<<<<<<<<<
@@ -20021,7 +18751,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
   __pyx_v_a = (__pyx_v_i >> __pyx_v_veb->num_bottom_bits);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":328
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":328
  * 
  *     a = i >> veb.num_bottom_bits
  *     b = i & LOWER_MASK[veb.num_bottom_bits-1]             # <<<<<<<<<<<<<<
@@ -20030,7 +18760,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
   __pyx_v_b = (__pyx_v_i & (__pyx_v_3_sa_LOWER_MASK[(__pyx_v_veb->num_bottom_bits - 1)]));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":329
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":329
  *     a = i >> veb.num_bottom_bits
  *     b = i & LOWER_MASK[veb.num_bottom_bits-1]
  *     if veb.bottom[a] == NULL:             # <<<<<<<<<<<<<<
@@ -20040,7 +18770,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   __pyx_t_2 = ((__pyx_v_veb->bottom[__pyx_v_a]) == NULL);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":330
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":330
  *     b = i & LOWER_MASK[veb.num_bottom_bits-1]
  *     if veb.bottom[a] == NULL:
  *         return 0             # <<<<<<<<<<<<<<
@@ -20053,7 +18783,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":332
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":332
  *         return 0
  *     else:
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:             # <<<<<<<<<<<<<<
@@ -20063,7 +18793,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     __pyx_t_2 = (__pyx_v_veb->num_bottom_bits > __pyx_v_3_sa_MIN_BOTTOM_BITS);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":333
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":333
  *     else:
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[a]             # <<<<<<<<<<<<<<
@@ -20072,7 +18802,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subv = ((struct __pyx_t_3_sa__VEB *)(__pyx_v_veb->bottom[__pyx_v_a]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":334
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":334
  *         if veb.num_bottom_bits > MIN_BOTTOM_BITS:
  *             subv = <_VEB*> veb.bottom[a]
  *             return VEB_contains(subv, b)             # <<<<<<<<<<<<<<
@@ -20085,7 +18815,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":336
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":336
  *             return VEB_contains(subv, b)
  *         else:
  *             subb = <_BitSet*> veb.bottom[a]             # <<<<<<<<<<<<<<
@@ -20094,7 +18824,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
  */
       __pyx_v_subb = ((struct __pyx_t_3_sa__BitSet *)(__pyx_v_veb->bottom[__pyx_v_a]));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":337
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":337
  *         else:
  *             subb = <_BitSet*> veb.bottom[a]
  *             return bitset_contains(subb, b)             # <<<<<<<<<<<<<<
@@ -20114,18 +18844,7 @@ static int __pyx_f_3_sa_VEB_contains(struct __pyx_t_3_sa__VEB *__pyx_v_veb, int
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11VEBIterator_1__next__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_11VEBIterator_1__next__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_11VEBIterator___next__(((struct __pyx_obj_3_sa_VEBIterator *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":344
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":344
  *     cdef int next_val
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -20133,7 +18852,8 @@ static PyObject *__pyx_pw_3_sa_11VEBIterator_1__next__(PyObject *__pyx_v_self) {
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(struct __pyx_obj_3_sa_VEBIterator *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(PyObject *__pyx_v_self) {
   int __pyx_v_ret_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -20142,19 +18862,19 @@ static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(struct __pyx_obj_3_sa_VEBI
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__next__", 0);
+  __Pyx_RefNannySetupContext("__next__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":347
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":347
  *         cdef int ret_val
  * 
  *         if self.next_val == -1:             # <<<<<<<<<<<<<<
  *             raise StopIteration()
  *         ret_val = self.next_val
  */
-  __pyx_t_1 = (__pyx_v_self->next_val == -1);
+  __pyx_t_1 = (((struct __pyx_obj_3_sa_VEBIterator *)__pyx_v_self)->next_val == -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":348
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":348
  * 
  *         if self.next_val == -1:
  *             raise StopIteration()             # <<<<<<<<<<<<<<
@@ -20166,29 +18886,29 @@ static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(struct __pyx_obj_3_sa_VEBI
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     {__pyx_filename = __pyx_f[6]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":349
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":349
  *         if self.next_val == -1:
  *             raise StopIteration()
  *         ret_val = self.next_val             # <<<<<<<<<<<<<<
  *         self.next_val = VEB_findsucc(self.v, ret_val)
  *         return ret_val
  */
-  __pyx_v_ret_val = __pyx_v_self->next_val;
+  __pyx_v_ret_val = ((struct __pyx_obj_3_sa_VEBIterator *)__pyx_v_self)->next_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":350
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":350
  *             raise StopIteration()
  *         ret_val = self.next_val
  *         self.next_val = VEB_findsucc(self.v, ret_val)             # <<<<<<<<<<<<<<
  *         return ret_val
  * 
  */
-  __pyx_v_self->next_val = __pyx_f_3_sa_VEB_findsucc(__pyx_v_self->v, __pyx_v_ret_val);
+  ((struct __pyx_obj_3_sa_VEBIterator *)__pyx_v_self)->next_val = __pyx_f_3_sa_VEB_findsucc(((struct __pyx_obj_3_sa_VEBIterator *)__pyx_v_self)->v, __pyx_v_ret_val);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":351
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":351
  *         ret_val = self.next_val
  *         self.next_val = VEB_findsucc(self.v, ret_val)
  *         return ret_val             # <<<<<<<<<<<<<<
@@ -20214,32 +18934,42 @@ static PyObject *__pyx_pf_3_sa_11VEBIterator___next__(struct __pyx_obj_3_sa_VEBI
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_3VEB_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_3VEB_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":360
+ *     cdef int _first(self)
+ * 
+ *     def __cinit__(self, int size):             # <<<<<<<<<<<<<<
+ *         self.veb = new_VEB(size)
+ * 
+ */
+
+static int __pyx_pf_3_sa_3VEB___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_3VEB___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_size;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -20256,48 +18986,22 @@ static int __pyx_pw_3_sa_3VEB_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_3VEB___cinit__(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self), __pyx_v_size);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":360
- *     cdef int _first(self)
- * 
- *     def __cinit__(self, int size):             # <<<<<<<<<<<<<<
- *         self.veb = new_VEB(size)
- * 
- */
-
-static int __pyx_pf_3_sa_3VEB___cinit__(struct __pyx_obj_3_sa_VEB *__pyx_v_self, int __pyx_v_size) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":361
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":361
  * 
  *     def __cinit__(self, int size):
  *         self.veb = new_VEB(size)             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_v_self->veb = __pyx_f_3_sa_new_VEB(__pyx_v_size);
+  ((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb = __pyx_f_3_sa_new_VEB(__pyx_v_size);
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_3VEB_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_3VEB_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_3VEB_2__dealloc__(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":363
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":363
  *         self.veb = new_VEB(size)
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -20305,22 +19009,23 @@ static void __pyx_pw_3_sa_3VEB_3__dealloc__(PyObject *__pyx_v_self) {
  * 
  */
 
-static void __pyx_pf_3_sa_3VEB_2__dealloc__(struct __pyx_obj_3_sa_VEB *__pyx_v_self) {
+static void __pyx_pf_3_sa_3VEB_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_3VEB_1__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":364
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":364
  * 
  *     def __dealloc__(self):
  *         del_VEB(self.veb)             # <<<<<<<<<<<<<<
  * 
  *     def __iter__(self):
  */
-  __pyx_t_1 = __pyx_f_3_sa_del_VEB(__pyx_v_self->veb); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_3_sa_del_VEB(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
@@ -20332,18 +19037,7 @@ static void __pyx_pf_3_sa_3VEB_2__dealloc__(struct __pyx_obj_3_sa_VEB *__pyx_v_s
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_3VEB_5__iter__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_3VEB_5__iter__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_3VEB_4__iter__(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":366
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":366
  *         del_VEB(self.veb)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -20351,7 +19045,8 @@ static PyObject *__pyx_pw_3_sa_3VEB_5__iter__(PyObject *__pyx_v_self) {
  *         it = VEBIterator()
  */
 
-static PyObject *__pyx_pf_3_sa_3VEB_4__iter__(struct __pyx_obj_3_sa_VEB *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_3VEB_2__iter__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_3VEB_2__iter__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa_VEBIterator *__pyx_v_it = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -20359,9 +19054,9 @@ static PyObject *__pyx_pf_3_sa_3VEB_4__iter__(struct __pyx_obj_3_sa_VEB *__pyx_v
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__iter__", 0);
+  __Pyx_RefNannySetupContext("__iter__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":368
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":368
  *     def __iter__(self):
  *         cdef VEBIterator it
  *         it = VEBIterator()             # <<<<<<<<<<<<<<
@@ -20373,25 +19068,25 @@ static PyObject *__pyx_pf_3_sa_3VEB_4__iter__(struct __pyx_obj_3_sa_VEB *__pyx_v
   __pyx_v_it = ((struct __pyx_obj_3_sa_VEBIterator *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":369
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":369
  *         cdef VEBIterator it
  *         it = VEBIterator()
  *         it.v = self.veb             # <<<<<<<<<<<<<<
  *         it.next_val = self.veb.min_val
  *         return it
  */
-  __pyx_v_it->v = __pyx_v_self->veb;
+  __pyx_v_it->v = ((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":370
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":370
  *         it = VEBIterator()
  *         it.v = self.veb
  *         it.next_val = self.veb.min_val             # <<<<<<<<<<<<<<
  *         return it
  * 
  */
-  __pyx_v_it->next_val = __pyx_v_self->veb->min_val;
+  __pyx_v_it->next_val = ((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb->min_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":371
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":371
  *         it.v = self.veb
  *         it.next_val = self.veb.min_val
  *         return it             # <<<<<<<<<<<<<<
@@ -20416,18 +19111,7 @@ static PyObject *__pyx_pf_3_sa_3VEB_4__iter__(struct __pyx_obj_3_sa_VEB *__pyx_v
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_3VEB_7insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_3VEB_7insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_3VEB_6insert(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":373
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":373
  *         return it
  * 
  *     def insert(self, i):             # <<<<<<<<<<<<<<
@@ -20435,7 +19119,8 @@ static PyObject *__pyx_pw_3_sa_3VEB_7insert(PyObject *__pyx_v_self, PyObject *__
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_3VEB_6insert(struct __pyx_obj_3_sa_VEB *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_3VEB_3insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_3VEB_3insert(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -20443,9 +19128,9 @@ static PyObject *__pyx_pf_3_sa_3VEB_6insert(struct __pyx_obj_3_sa_VEB *__pyx_v_s
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("insert", 0);
+  __Pyx_RefNannySetupContext("insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":374
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":374
  * 
  *     def insert(self, i):
  *         return VEB_insert(self.veb, i)             # <<<<<<<<<<<<<<
@@ -20454,7 +19139,7 @@ static PyObject *__pyx_pf_3_sa_3VEB_6insert(struct __pyx_obj_3_sa_VEB *__pyx_v_s
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_VEB_insert(__pyx_v_self->veb, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_VEB_insert(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -20472,7 +19157,7 @@ static PyObject *__pyx_pf_3_sa_3VEB_6insert(struct __pyx_obj_3_sa_VEB *__pyx_v_s
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":376
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":376
  *         return VEB_insert(self.veb, i)
  * 
  *     cdef int _insert(self, int i):             # <<<<<<<<<<<<<<
@@ -20483,9 +19168,9 @@ static PyObject *__pyx_pf_3_sa_3VEB_6insert(struct __pyx_obj_3_sa_VEB *__pyx_v_s
 static int __pyx_f_3_sa_3VEB__insert(struct __pyx_obj_3_sa_VEB *__pyx_v_self, int __pyx_v_i) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_insert", 0);
+  __Pyx_RefNannySetupContext("_insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":377
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":377
  * 
  *     cdef int _insert(self, int i):
  *         return VEB_insert(self.veb, i)             # <<<<<<<<<<<<<<
@@ -20501,18 +19186,7 @@ static int __pyx_f_3_sa_3VEB__insert(struct __pyx_obj_3_sa_VEB *__pyx_v_self, in
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_3VEB_9findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_3VEB_9findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("findsucc (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_3VEB_8findsucc(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":379
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":379
  *         return VEB_insert(self.veb, i)
  * 
  *     def findsucc(self, i):             # <<<<<<<<<<<<<<
@@ -20520,7 +19194,8 @@ static PyObject *__pyx_pw_3_sa_3VEB_9findsucc(PyObject *__pyx_v_self, PyObject *
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_3VEB_8findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_3VEB_4findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_3VEB_4findsucc(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -20528,9 +19203,9 @@ static PyObject *__pyx_pf_3_sa_3VEB_8findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("findsucc", 0);
+  __Pyx_RefNannySetupContext("findsucc");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":380
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":380
  * 
  *     def findsucc(self, i):
  *         return VEB_findsucc(self.veb, i)             # <<<<<<<<<<<<<<
@@ -20539,7 +19214,7 @@ static PyObject *__pyx_pf_3_sa_3VEB_8findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_VEB_findsucc(__pyx_v_self->veb, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_3_sa_VEB_findsucc(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -20557,7 +19232,7 @@ static PyObject *__pyx_pf_3_sa_3VEB_8findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":382
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":382
  *         return VEB_findsucc(self.veb, i)
  * 
  *     cdef int _first(self):             # <<<<<<<<<<<<<<
@@ -20568,9 +19243,9 @@ static PyObject *__pyx_pf_3_sa_3VEB_8findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v
 static int __pyx_f_3_sa_3VEB__first(struct __pyx_obj_3_sa_VEB *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_first", 0);
+  __Pyx_RefNannySetupContext("_first");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":383
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":383
  * 
  *     cdef int _first(self):
  *         return self.veb.min_val             # <<<<<<<<<<<<<<
@@ -20586,7 +19261,7 @@ static int __pyx_f_3_sa_3VEB__first(struct __pyx_obj_3_sa_VEB *__pyx_v_self) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":385
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":385
  *         return self.veb.min_val
  * 
  *     cdef int _findsucc(self, int i):             # <<<<<<<<<<<<<<
@@ -20597,9 +19272,9 @@ static int __pyx_f_3_sa_3VEB__first(struct __pyx_obj_3_sa_VEB *__pyx_v_self) {
 static int __pyx_f_3_sa_3VEB__findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v_self, int __pyx_v_i) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_findsucc", 0);
+  __Pyx_RefNannySetupContext("_findsucc");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":386
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":386
  * 
  *     cdef int _findsucc(self, int i):
  *         return VEB_findsucc(self.veb, i)             # <<<<<<<<<<<<<<
@@ -20615,18 +19290,7 @@ static int __pyx_f_3_sa_3VEB__findsucc(struct __pyx_obj_3_sa_VEB *__pyx_v_self,
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_ssize_t __pyx_pw_3_sa_3VEB_11__len__(PyObject *__pyx_v_self); /*proto*/
-static Py_ssize_t __pyx_pw_3_sa_3VEB_11__len__(PyObject *__pyx_v_self) {
-  Py_ssize_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_3VEB_10__len__(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":388
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":388
  *         return VEB_findsucc(self.veb, i)
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -20634,19 +19298,20 @@ static Py_ssize_t __pyx_pw_3_sa_3VEB_11__len__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_ssize_t __pyx_pf_3_sa_3VEB_10__len__(struct __pyx_obj_3_sa_VEB *__pyx_v_self) {
+static Py_ssize_t __pyx_pf_3_sa_3VEB_5__len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_pf_3_sa_3VEB_5__len__(PyObject *__pyx_v_self) {
   Py_ssize_t __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__", 0);
+  __Pyx_RefNannySetupContext("__len__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":389
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":389
  * 
  *     def __len__(self):
  *         return self.veb.size             # <<<<<<<<<<<<<<
  * 
  *     def __contains__(self, i):
  */
-  __pyx_r = __pyx_v_self->veb->size;
+  __pyx_r = ((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb->size;
   goto __pyx_L0;
 
   __pyx_r = 0;
@@ -20655,40 +19320,30 @@ static Py_ssize_t __pyx_pf_3_sa_3VEB_10__len__(struct __pyx_obj_3_sa_VEB *__pyx_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_3VEB_13__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static int __pyx_pw_3_sa_3VEB_13__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_3VEB_12__contains__(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":391
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":391
  *         return self.veb.size
  * 
  *     def __contains__(self, i):             # <<<<<<<<<<<<<<
  *         return VEB_contains(self.veb, i)
  */
 
-static int __pyx_pf_3_sa_3VEB_12__contains__(struct __pyx_obj_3_sa_VEB *__pyx_v_self, PyObject *__pyx_v_i) {
+static int __pyx_pf_3_sa_3VEB_6__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static int __pyx_pf_3_sa_3VEB_6__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__contains__", 0);
+  __Pyx_RefNannySetupContext("__contains__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":392
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":392
  * 
  *     def __contains__(self, i):
  *         return VEB_contains(self.veb, i)             # <<<<<<<<<<<<<<
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_f_3_sa_VEB_contains(__pyx_v_self->veb, __pyx_t_1);
+  __pyx_r = __pyx_f_3_sa_VEB_contains(((struct __pyx_obj_3_sa_VEB *)__pyx_v_self)->veb, __pyx_t_1);
   goto __pyx_L0;
 
   __pyx_r = 0;
@@ -20701,32 +19356,55 @@ static int __pyx_pf_3_sa_3VEB_12__contains__(struct __pyx_obj_3_sa_VEB *__pyx_v_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_3LCP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_3LCP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":9
+ *     cdef IntList lcp
+ * 
+ *     def __cinit__(self, SuffixArray sa):             # <<<<<<<<<<<<<<
+ *         cdef int i, k, j, h, n
+ *         cdef IntList rank
+ */
+
+static int __pyx_pf_3_sa_3LCP___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_3LCP___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_3_sa_SuffixArray *__pyx_v_sa = 0;
+  int __pyx_v_i;
+  int __pyx_v_k;
+  int __pyx_v_j;
+  int __pyx_v_h;
+  int __pyx_v_n;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_rank = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sa,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sa,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sa)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sa);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -20744,45 +19422,8 @@ static int __pyx_pw_3_sa_3LCP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx
   return -1;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sa), __pyx_ptype_3_sa_SuffixArray, 1, "sa", 0))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_3LCP___cinit__(((struct __pyx_obj_3_sa_LCP *)__pyx_v_self), __pyx_v_sa);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":9
- *     cdef IntList lcp
- * 
- *     def __cinit__(self, SuffixArray sa):             # <<<<<<<<<<<<<<
- *         cdef int i, k, j, h, n
- *         cdef IntList rank
- */
-
-static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_sa) {
-  int __pyx_v_i;
-  int __pyx_v_k;
-  int __pyx_v_j;
-  int __pyx_v_h;
-  int __pyx_v_n;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_rank = 0;
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":13
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":13
  *         cdef IntList rank
  * 
  *         logger.info("Constructing LCP array")             # <<<<<<<<<<<<<<
@@ -20799,7 +19440,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":14
  * 
  *         logger.info("Constructing LCP array")
  *         self.sa = sa             # <<<<<<<<<<<<<<
@@ -20808,20 +19449,20 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_sa));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_sa));
-  __Pyx_GOTREF(__pyx_v_self->sa);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sa));
-  __pyx_v_self->sa = __pyx_v_sa;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->sa);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->sa));
+  ((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->sa = __pyx_v_sa;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":15
  *         logger.info("Constructing LCP array")
  *         self.sa = sa
  *         n = self.sa.sa.len             # <<<<<<<<<<<<<<
  *         self.lcp = IntList(initial_len=n)
  * 
  */
-  __pyx_v_n = __pyx_v_self->sa->sa->len;
+  __pyx_v_n = ((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->sa->sa->len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":16
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":16
  *         self.sa = sa
  *         n = self.sa.sa.len
  *         self.lcp = IntList(initial_len=n)             # <<<<<<<<<<<<<<
@@ -20834,16 +19475,16 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->lcp);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->lcp));
-  __pyx_v_self->lcp = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->lcp);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->lcp));
+  ((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->lcp = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":18
  *         self.lcp = IntList(initial_len=n)
  * 
  *         rank = IntList(initial_len=n)             # <<<<<<<<<<<<<<
@@ -20856,13 +19497,13 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
   __Pyx_GOTREF(__pyx_t_1);
   if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __pyx_v_rank = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":19
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":19
  * 
  *         rank = IntList(initial_len=n)
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -20872,7 +19513,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":20
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":20
  *         rank = IntList(initial_len=n)
  *         for i from 0 <= i < n:
  *             rank.arr[sa.sa.arr[i]] = i             # <<<<<<<<<<<<<<
@@ -20882,7 +19523,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
     (__pyx_v_rank->arr[(__pyx_v_sa->sa->arr[__pyx_v_i])]) = __pyx_v_i;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":22
  *             rank.arr[sa.sa.arr[i]] = i
  * 
  *         h = 0             # <<<<<<<<<<<<<<
@@ -20891,7 +19532,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
  */
   __pyx_v_h = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":23
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":23
  * 
  *         h = 0
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -20901,7 +19542,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":24
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":24
  *         h = 0
  *         for i from 0 <= i < n:
  *             k = rank.arr[i]             # <<<<<<<<<<<<<<
@@ -20910,7 +19551,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
  */
     __pyx_v_k = (__pyx_v_rank->arr[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":25
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":25
  *         for i from 0 <= i < n:
  *             k = rank.arr[i]
  *             if k == 0:             # <<<<<<<<<<<<<<
@@ -20920,19 +19561,19 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
     __pyx_t_4 = (__pyx_v_k == 0);
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":26
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":26
  *             k = rank.arr[i]
  *             if k == 0:
  *                 self.lcp.arr[k] = -1             # <<<<<<<<<<<<<<
  *             else:
  *                 j = sa.sa.arr[k-1]
  */
-      (__pyx_v_self->lcp->arr[__pyx_v_k]) = -1;
-      goto __pyx_L7;
+      (((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->lcp->arr[__pyx_v_k]) = -1;
+      goto __pyx_L10;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":28
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":28
  *                 self.lcp.arr[k] = -1
  *             else:
  *                 j = sa.sa.arr[k-1]             # <<<<<<<<<<<<<<
@@ -20941,7 +19582,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
  */
       __pyx_v_j = (__pyx_v_sa->sa->arr[(__pyx_v_k - 1)]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":29
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":29
  *             else:
  *                 j = sa.sa.arr[k-1]
  *                 while i+h < n and j+h < n and sa.darray.data.arr[i+h] == sa.darray.data.arr[j+h]:             # <<<<<<<<<<<<<<
@@ -20964,7 +19605,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
         }
         if (!__pyx_t_5) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":30
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":30
  *                 j = sa.sa.arr[k-1]
  *                 while i+h < n and j+h < n and sa.darray.data.arr[i+h] == sa.darray.data.arr[j+h]:
  *                     h = h+1             # <<<<<<<<<<<<<<
@@ -20974,18 +19615,18 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
         __pyx_v_h = (__pyx_v_h + 1);
       }
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":31
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":31
  *                 while i+h < n and j+h < n and sa.darray.data.arr[i+h] == sa.darray.data.arr[j+h]:
  *                     h = h+1
  *                 self.lcp.arr[k] = h             # <<<<<<<<<<<<<<
  *             if h > 0:
  *                 h = h-1
  */
-      (__pyx_v_self->lcp->arr[__pyx_v_k]) = __pyx_v_h;
+      (((struct __pyx_obj_3_sa_LCP *)__pyx_v_self)->lcp->arr[__pyx_v_k]) = __pyx_v_h;
     }
-    __pyx_L7:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":32
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":32
  *                     h = h+1
  *                 self.lcp.arr[k] = h
  *             if h > 0:             # <<<<<<<<<<<<<<
@@ -20995,7 +19636,7 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
     __pyx_t_5 = (__pyx_v_h > 0);
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":33
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":33
  *                 self.lcp.arr[k] = h
  *             if h > 0:
  *                 h = h-1             # <<<<<<<<<<<<<<
@@ -21003,12 +19644,12 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
  * 
  */
       __pyx_v_h = (__pyx_v_h - 1);
-      goto __pyx_L10;
+      goto __pyx_L13;
     }
-    __pyx_L10:;
+    __pyx_L13:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":34
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":34
  *             if h > 0:
  *                 h = h-1
  *         logger.info("LCP array completed")             # <<<<<<<<<<<<<<
@@ -21037,31 +19678,9 @@ static int __pyx_pf_3_sa_3LCP___cinit__(struct __pyx_obj_3_sa_LCP *__pyx_v_self,
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_3LCP_3compute_stats(PyObject *__pyx_v_self, PyObject *__pyx_arg_max_n); /*proto*/
-static char __pyx_doc_3_sa_3LCP_2compute_stats[] = "Note: the output of this function is not exact.  In\n        particular, the frequency associated with each word is \n        not guaranteed to be correct.  This is due to a bit of\n        laxness in the design; the function is intended only to\n        obtain a list of the most frequent words; for this \n        purpose it is perfectly fine";
-static PyObject *__pyx_pw_3_sa_3LCP_3compute_stats(PyObject *__pyx_v_self, PyObject *__pyx_arg_max_n) {
-  int __pyx_v_max_n;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("compute_stats (wrapper)", 0);
-  assert(__pyx_arg_max_n); {
-    __pyx_v_max_n = __Pyx_PyInt_AsInt(__pyx_arg_max_n); if (unlikely((__pyx_v_max_n == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.LCP.compute_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_3LCP_2compute_stats(((struct __pyx_obj_3_sa_LCP *)__pyx_v_self), ((int)__pyx_v_max_n));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+static PyObject *__pyx_gb_3_sa_3LCP_2generator1(struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":36
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":36
  *         logger.info("LCP array completed")
  * 
  *     def compute_stats(self, int max_n):             # <<<<<<<<<<<<<<
@@ -21069,46 +19688,51 @@ static PyObject *__pyx_pw_3_sa_3LCP_3compute_stats(PyObject *__pyx_v_self, PyObj
  *         particular, the frequency associated with each word is
  */
 
-static PyObject *__pyx_pf_3_sa_3LCP_2compute_stats(struct __pyx_obj_3_sa_LCP *__pyx_v_self, int __pyx_v_max_n) {
+static PyObject *__pyx_pf_3_sa_3LCP_1compute_stats(PyObject *__pyx_v_self, PyObject *__pyx_arg_max_n); /*proto*/
+static char __pyx_doc_3_sa_3LCP_1compute_stats[] = "Note: the output of this function is not exact.  In\n        particular, the frequency associated with each word is \n        not guaranteed to be correct.  This is due to a bit of\n        laxness in the design; the function is intended only to\n        obtain a list of the most frequent words; for this \n        purpose it is perfectly fine";
+static PyObject *__pyx_pf_3_sa_3LCP_1compute_stats(PyObject *__pyx_v_self, PyObject *__pyx_arg_max_n) {
   struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("compute_stats", 0);
+  __Pyx_RefNannySetupContext("compute_stats");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *)__pyx_ptype_3_sa___pyx_scope_struct_3_compute_stats->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_3_compute_stats, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  __pyx_cur_scope->__pyx_v_max_n = __pyx_v_max_n;
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_3LCP_4generator1, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
+  assert(__pyx_arg_max_n); {
+    __pyx_cur_scope->__pyx_v_max_n = __Pyx_PyInt_AsInt(__pyx_arg_max_n); if (unlikely((__pyx_cur_scope->__pyx_v_max_n == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.LCP.compute_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF((PyObject *)__pyx_cur_scope->__pyx_v_self); __pyx_cur_scope->__pyx_v_self = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_3LCP_2generator1;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.LCP.compute_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_3LCP_2generator1(struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
@@ -21121,8 +19745,8 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   long __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L26_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -21132,16 +19756,16 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":48
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":48
  *         cdef VEB veb
  * 
  *         N = self.sa.sa.len             # <<<<<<<<<<<<<<
  * 
  *         ngram_starts = []
  */
-  __pyx_cur_scope->__pyx_v_N = __pyx_cur_scope->__pyx_v_self->sa->sa->len;
+  __pyx_cur_scope->__pyx_v_N = ((struct __pyx_obj_3_sa_LCP *)__pyx_cur_scope->__pyx_v_self)->sa->sa->len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":50
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":50
  *         N = self.sa.sa.len
  * 
  *         ngram_starts = []             # <<<<<<<<<<<<<<
@@ -21149,12 +19773,12 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  *             ngram_starts.append(IntList(initial_len=N))
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
   __pyx_cur_scope->__pyx_v_ngram_starts = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":51
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":51
  * 
  *         ngram_starts = []
  *         for n from 0 <= n < max_n:             # <<<<<<<<<<<<<<
@@ -21164,27 +19788,30 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __pyx_t_2 = __pyx_cur_scope->__pyx_v_max_n;
   for (__pyx_cur_scope->__pyx_v_n = 0; __pyx_cur_scope->__pyx_v_n < __pyx_t_2; __pyx_cur_scope->__pyx_v_n++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":52
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":52
  *         ngram_starts = []
  *         for n from 0 <= n < max_n:
  *             ngram_starts.append(IntList(initial_len=N))             # <<<<<<<<<<<<<<
  * 
  *         run_start = IntList(initial_len=max_n)
  */
+    if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_ngram_starts) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_3 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_N); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
     __pyx_t_4 = PyList_Append(__pyx_cur_scope->__pyx_v_ngram_starts, __pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":54
  *             ngram_starts.append(IntList(initial_len=N))
  * 
  *         run_start = IntList(initial_len=max_n)             # <<<<<<<<<<<<<<
@@ -21197,14 +19824,14 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __Pyx_GOTREF(__pyx_t_1);
   if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_cur_scope->__pyx_v_run_start = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":55
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":55
  * 
  *         run_start = IntList(initial_len=max_n)
  *         veb = VEB(N)             # <<<<<<<<<<<<<<
@@ -21214,7 +19841,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __pyx_t_1 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -21225,7 +19852,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __pyx_cur_scope->__pyx_v_veb = ((struct __pyx_obj_3_sa_VEB *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":57
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":57
  *         veb = VEB(N)
  * 
  *         for i from 0 <= i < N:             # <<<<<<<<<<<<<<
@@ -21235,16 +19862,16 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __pyx_t_2 = __pyx_cur_scope->__pyx_v_N;
   for (__pyx_cur_scope->__pyx_v_i = 0; __pyx_cur_scope->__pyx_v_i < __pyx_t_2; __pyx_cur_scope->__pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":58
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":58
  * 
  *         for i from 0 <= i < N:
  *             h = self.lcp.arr[i]             # <<<<<<<<<<<<<<
  *             if h < 0:
  *                 h = 0
  */
-    __pyx_cur_scope->__pyx_v_h = (__pyx_cur_scope->__pyx_v_self->lcp->arr[__pyx_cur_scope->__pyx_v_i]);
+    __pyx_cur_scope->__pyx_v_h = (((struct __pyx_obj_3_sa_LCP *)__pyx_cur_scope->__pyx_v_self)->lcp->arr[__pyx_cur_scope->__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":59
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":59
  *         for i from 0 <= i < N:
  *             h = self.lcp.arr[i]
  *             if h < 0:             # <<<<<<<<<<<<<<
@@ -21254,7 +19881,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
     __pyx_t_5 = (__pyx_cur_scope->__pyx_v_h < 0);
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":60
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":60
  *             h = self.lcp.arr[i]
  *             if h < 0:
  *                 h = 0             # <<<<<<<<<<<<<<
@@ -21266,7 +19893,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
     }
     __pyx_L8:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":61
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":61
  *             if h < 0:
  *                 h = 0
  *             for n from h <= n < max_n:             # <<<<<<<<<<<<<<
@@ -21276,7 +19903,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
     __pyx_t_6 = __pyx_cur_scope->__pyx_v_max_n;
     for (__pyx_cur_scope->__pyx_v_n = __pyx_cur_scope->__pyx_v_h; __pyx_cur_scope->__pyx_v_n < __pyx_t_6; __pyx_cur_scope->__pyx_v_n++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":62
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":62
  *                 h = 0
  *             for n from h <= n < max_n:
  *                 rs = run_start.arr[n]             # <<<<<<<<<<<<<<
@@ -21285,7 +19912,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
       __pyx_cur_scope->__pyx_v_rs = (__pyx_cur_scope->__pyx_v_run_start->arr[__pyx_cur_scope->__pyx_v_n]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":63
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":63
  *             for n from h <= n < max_n:
  *                 rs = run_start.arr[n]
  *                 run_start.arr[n] = i             # <<<<<<<<<<<<<<
@@ -21294,7 +19921,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
       (__pyx_cur_scope->__pyx_v_run_start->arr[__pyx_cur_scope->__pyx_v_n]) = __pyx_cur_scope->__pyx_v_i;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":64
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":64
  *                 rs = run_start.arr[n]
  *                 run_start.arr[n] = i
  *                 freq = i - rs             # <<<<<<<<<<<<<<
@@ -21303,7 +19930,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
       __pyx_cur_scope->__pyx_v_freq = (__pyx_cur_scope->__pyx_v_i - __pyx_cur_scope->__pyx_v_rs);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":65
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":65
  *                 run_start.arr[n] = i
  *                 freq = i - rs
  *                 if freq > 1000: # arbitrary, but see note below             # <<<<<<<<<<<<<<
@@ -21313,7 +19940,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
       __pyx_t_5 = (__pyx_cur_scope->__pyx_v_freq > 1000);
       if (__pyx_t_5) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":66
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":66
  *                 freq = i - rs
  *                 if freq > 1000: # arbitrary, but see note below
  *                     veb._insert(freq)             # <<<<<<<<<<<<<<
@@ -21322,7 +19949,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
         ((struct __pyx_vtabstruct_3_sa_VEB *)__pyx_cur_scope->__pyx_v_veb->__pyx_vtab)->_insert(__pyx_cur_scope->__pyx_v_veb, __pyx_cur_scope->__pyx_v_freq);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":67
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":67
  *                 if freq > 1000: # arbitrary, but see note below
  *                     veb._insert(freq)
  *                     ngram_start = ngram_starts[n]             # <<<<<<<<<<<<<<
@@ -21338,7 +19965,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
         __pyx_cur_scope->__pyx_v_ngram_start = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
         __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":68
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":68
  *                     veb._insert(freq)
  *                     ngram_start = ngram_starts[n]
  *                     while ngram_start.arr[freq] > 0:             # <<<<<<<<<<<<<<
@@ -21349,7 +19976,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
           __pyx_t_5 = ((__pyx_cur_scope->__pyx_v_ngram_start->arr[__pyx_cur_scope->__pyx_v_freq]) > 0);
           if (!__pyx_t_5) break;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":69
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":69
  *                     ngram_start = ngram_starts[n]
  *                     while ngram_start.arr[freq] > 0:
  *                         freq = freq + 1 # cheating a bit, should be ok for sparse histogram             # <<<<<<<<<<<<<<
@@ -21359,7 +19986,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
           __pyx_cur_scope->__pyx_v_freq = (__pyx_cur_scope->__pyx_v_freq + 1);
         }
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":70
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":70
  *                     while ngram_start.arr[freq] > 0:
  *                         freq = freq + 1 # cheating a bit, should be ok for sparse histogram
  *                     ngram_start.arr[freq] = rs             # <<<<<<<<<<<<<<
@@ -21373,7 +20000,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
     }
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":71
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":71
  *                         freq = freq + 1 # cheating a bit, should be ok for sparse histogram
  *                     ngram_start.arr[freq] = rs
  *         i = veb.veb.min_val             # <<<<<<<<<<<<<<
@@ -21382,7 +20009,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
   __pyx_cur_scope->__pyx_v_i = __pyx_cur_scope->__pyx_v_veb->veb->min_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":72
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":72
  *                     ngram_start.arr[freq] = rs
  *         i = veb.veb.min_val
  *         while i != -1:             # <<<<<<<<<<<<<<
@@ -21393,7 +20020,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
     __pyx_t_5 = (__pyx_cur_scope->__pyx_v_i != -1);
     if (!__pyx_t_5) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":73
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":73
  *         i = veb.veb.min_val
  *         while i != -1:
  *             ii = veb._findsucc(i)             # <<<<<<<<<<<<<<
@@ -21402,7 +20029,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
     __pyx_cur_scope->__pyx_v_ii = ((struct __pyx_vtabstruct_3_sa_VEB *)__pyx_cur_scope->__pyx_v_veb->__pyx_vtab)->_findsucc(__pyx_cur_scope->__pyx_v_veb, __pyx_cur_scope->__pyx_v_i);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":74
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":74
  *         while i != -1:
  *             ii = veb._findsucc(i)
  *             for n from 0 <= n < max_n:             # <<<<<<<<<<<<<<
@@ -21412,7 +20039,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
     __pyx_t_2 = __pyx_cur_scope->__pyx_v_max_n;
     for (__pyx_cur_scope->__pyx_v_n = 0; __pyx_cur_scope->__pyx_v_n < __pyx_t_2; __pyx_cur_scope->__pyx_v_n++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":75
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":75
  *             ii = veb._findsucc(i)
  *             for n from 0 <= n < max_n:
  *                 ngram_start = ngram_starts[n]             # <<<<<<<<<<<<<<
@@ -21428,7 +20055,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
       __pyx_cur_scope->__pyx_v_ngram_start = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":76
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":76
  *             for n from 0 <= n < max_n:
  *                 ngram_start = ngram_starts[n]
  *                 iii = i             # <<<<<<<<<<<<<<
@@ -21437,7 +20064,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
       __pyx_cur_scope->__pyx_v_iii = __pyx_cur_scope->__pyx_v_i;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":77
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":77
  *                 ngram_start = ngram_starts[n]
  *                 iii = i
  *                 rs = ngram_start.arr[iii]             # <<<<<<<<<<<<<<
@@ -21446,7 +20073,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
       __pyx_cur_scope->__pyx_v_rs = (__pyx_cur_scope->__pyx_v_ngram_start->arr[__pyx_cur_scope->__pyx_v_iii]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":78
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":78
  *                 iii = i
  *                 rs = ngram_start.arr[iii]
  *                 while (ii==-1 or iii < ii) and rs != 0:             # <<<<<<<<<<<<<<
@@ -21469,16 +20096,16 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
         }
         if (!__pyx_t_7) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":79
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":79
  *                 rs = ngram_start.arr[iii]
  *                 while (ii==-1 or iii < ii) and rs != 0:
  *                     j = self.sa.sa.arr[rs]             # <<<<<<<<<<<<<<
  *                     valid = 1
  *                     for k from 0 <= k < n+1:
  */
-        __pyx_cur_scope->__pyx_v_j = (__pyx_cur_scope->__pyx_v_self->sa->sa->arr[__pyx_cur_scope->__pyx_v_rs]);
+        __pyx_cur_scope->__pyx_v_j = (((struct __pyx_obj_3_sa_LCP *)__pyx_cur_scope->__pyx_v_self)->sa->sa->arr[__pyx_cur_scope->__pyx_v_rs]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":80
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":80
  *                 while (ii==-1 or iii < ii) and rs != 0:
  *                     j = self.sa.sa.arr[rs]
  *                     valid = 1             # <<<<<<<<<<<<<<
@@ -21487,7 +20114,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
         __pyx_cur_scope->__pyx_v_valid = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":81
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":81
  *                     j = self.sa.sa.arr[rs]
  *                     valid = 1
  *                     for k from 0 <= k < n+1:             # <<<<<<<<<<<<<<
@@ -21497,17 +20124,17 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
         __pyx_t_9 = (__pyx_cur_scope->__pyx_v_n + 1);
         for (__pyx_cur_scope->__pyx_v_k = 0; __pyx_cur_scope->__pyx_v_k < __pyx_t_9; __pyx_cur_scope->__pyx_v_k++) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":82
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":82
  *                     valid = 1
  *                     for k from 0 <= k < n+1:
  *                         if self.sa.darray.data.arr[j+k] < 2:             # <<<<<<<<<<<<<<
  *                             valid = 0
  *                     if valid:
  */
-          __pyx_t_7 = ((__pyx_cur_scope->__pyx_v_self->sa->darray->data->arr[(__pyx_cur_scope->__pyx_v_j + __pyx_cur_scope->__pyx_v_k)]) < 2);
+          __pyx_t_7 = ((((struct __pyx_obj_3_sa_LCP *)__pyx_cur_scope->__pyx_v_self)->sa->darray->data->arr[(__pyx_cur_scope->__pyx_v_j + __pyx_cur_scope->__pyx_v_k)]) < 2);
           if (__pyx_t_7) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":83
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":83
  *                     for k from 0 <= k < n+1:
  *                         if self.sa.darray.data.arr[j+k] < 2:
  *                             valid = 0             # <<<<<<<<<<<<<<
@@ -21520,7 +20147,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
           __pyx_L22:;
         }
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":84
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":84
  *                         if self.sa.darray.data.arr[j+k] < 2:
  *                             valid = 0
  *                     if valid:             # <<<<<<<<<<<<<<
@@ -21529,7 +20156,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
         if (__pyx_cur_scope->__pyx_v_valid) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":85
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":85
  *                             valid = 0
  *                     if valid:
  *                         ngram = tuple([self.sa.darray.data.arr[j+k] for k in range(n+1)])             # <<<<<<<<<<<<<<
@@ -21537,13 +20164,13 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  *                     iii = iii + 1
  */
           __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
           __pyx_t_9 = (__pyx_cur_scope->__pyx_v_n + 1);
           for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_9; __pyx_t_6+=1) {
             __pyx_cur_scope->__pyx_v_k = __pyx_t_6;
-            __pyx_t_3 = PyInt_FromLong((__pyx_cur_scope->__pyx_v_self->sa->darray->data->arr[(__pyx_cur_scope->__pyx_v_j + __pyx_cur_scope->__pyx_v_k)])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_3 = PyInt_FromLong((((struct __pyx_obj_3_sa_LCP *)__pyx_cur_scope->__pyx_v_self)->sa->darray->data->arr[(__pyx_cur_scope->__pyx_v_j + __pyx_cur_scope->__pyx_v_k)])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_3);
-            if (unlikely(__Pyx_PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            if (unlikely(PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           }
           __pyx_t_3 = ((PyObject *)PyList_AsTuple(__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -21555,7 +20182,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
           __pyx_cur_scope->__pyx_v_ngram = __pyx_t_3;
           __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":86
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":86
  *                     if valid:
  *                         ngram = tuple([self.sa.darray.data.arr[j+k] for k in range(n+1)])
  *                         yield i, n+1, ngram             # <<<<<<<<<<<<<<
@@ -21567,7 +20194,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
           __pyx_t_1 = PyInt_FromLong((__pyx_cur_scope->__pyx_v_n + 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_1);
           __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_10));
           PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_3);
           __Pyx_GIVEREF(__pyx_t_3);
           PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
@@ -21583,7 +20210,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
           __Pyx_XGIVEREF(__pyx_r);
           __Pyx_RefNannyFinishContext();
           /* return from generator, yielding value */
-          __pyx_generator->resume_label = 1;
+          __pyx_cur_scope->__pyx_base.resume_label = 1;
           return __pyx_r;
           __pyx_L26_resume_from_yield:;
           __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
@@ -21592,7 +20219,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
         }
         __pyx_L23:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":87
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":87
  *                         ngram = tuple([self.sa.darray.data.arr[j+k] for k in range(n+1)])
  *                         yield i, n+1, ngram
  *                     iii = iii + 1             # <<<<<<<<<<<<<<
@@ -21601,7 +20228,7 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
  */
         __pyx_cur_scope->__pyx_v_iii = (__pyx_cur_scope->__pyx_v_iii + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":88
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":88
  *                         yield i, n+1, ngram
  *                     iii = iii + 1
  *                     rs = ngram_start.arr[iii]             # <<<<<<<<<<<<<<
@@ -21611,14 +20238,14 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
       }
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":89
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":89
  *                     iii = iii + 1
  *                     rs = ngram_start.arr[iii]
  *             i = ii             # <<<<<<<<<<<<<<
  */
     __pyx_cur_scope->__pyx_v_i = __pyx_cur_scope->__pyx_v_ii;
   }
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -21627,27 +20254,12 @@ static PyObject *__pyx_gb_3_sa_3LCP_4generator1(__pyx_GeneratorObject *__pyx_gen
   __Pyx_AddTraceback("compute_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_8Alphabet_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_8Alphabet_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_3_sa_8Alphabet___cinit__(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":12
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":12
  *     cdef dict id2sym
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -21655,16 +20267,20 @@ static int __pyx_pw_3_sa_8Alphabet_1__cinit__(PyObject *__pyx_v_self, PyObject *
  *         self.nonterminals = StringMap()
  */
 
-static int __pyx_pf_3_sa_8Alphabet___cinit__(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self) {
+static int __pyx_pf_3_sa_8Alphabet___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_8Alphabet___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  __Pyx_RefNannySetupContext("__cinit__");
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":13
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":13
  * 
  *     def __cinit__(self):
  *         self.terminals = StringMap()             # <<<<<<<<<<<<<<
@@ -21674,12 +20290,12 @@ static int __pyx_pf_3_sa_8Alphabet___cinit__(struct __pyx_obj_3_sa_Alphabet *__p
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_StringMap)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->terminals);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->terminals));
-  __pyx_v_self->terminals = ((struct __pyx_obj_3_sa_StringMap *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->terminals);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->terminals));
+  ((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->terminals = ((struct __pyx_obj_3_sa_StringMap *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":14
  *     def __cinit__(self):
  *         self.terminals = StringMap()
  *         self.nonterminals = StringMap()             # <<<<<<<<<<<<<<
@@ -21689,12 +20305,12 @@ static int __pyx_pf_3_sa_8Alphabet___cinit__(struct __pyx_obj_3_sa_Alphabet *__p
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_StringMap)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->nonterminals);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->nonterminals));
-  __pyx_v_self->nonterminals = ((struct __pyx_obj_3_sa_StringMap *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->nonterminals);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->nonterminals));
+  ((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->nonterminals = ((struct __pyx_obj_3_sa_StringMap *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":15
  *         self.terminals = StringMap()
  *         self.nonterminals = StringMap()
  *         self.id2sym = {}             # <<<<<<<<<<<<<<
@@ -21704,19 +20320,19 @@ static int __pyx_pf_3_sa_8Alphabet___cinit__(struct __pyx_obj_3_sa_Alphabet *__p
   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->id2sym);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->id2sym));
-  __pyx_v_self->id2sym = __pyx_t_1;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->id2sym);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->id2sym));
+  ((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->id2sym = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":16
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":16
  *         self.nonterminals = StringMap()
  *         self.id2sym = {}
  *         self.first_nonterminal = -1             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_v_self->first_nonterminal = -1;
+  ((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->first_nonterminal = -1;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -21729,16 +20345,7 @@ static int __pyx_pf_3_sa_8Alphabet___cinit__(struct __pyx_obj_3_sa_Alphabet *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_8Alphabet_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_8Alphabet_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_8Alphabet_2__dealloc__(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":18
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":18
  *         self.first_nonterminal = -1
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -21746,14 +20353,15 @@ static void __pyx_pw_3_sa_8Alphabet_3__dealloc__(PyObject *__pyx_v_self) {
  * 
  */
 
-static void __pyx_pf_3_sa_8Alphabet_2__dealloc__(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self) {
+static void __pyx_pf_3_sa_8Alphabet_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_8Alphabet_1__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":21
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":21
  *         pass
  * 
  *     cdef int isvar(self, int sym):             # <<<<<<<<<<<<<<
@@ -21761,12 +20369,12 @@ static void __pyx_pf_3_sa_8Alphabet_2__dealloc__(CYTHON_UNUSED struct __pyx_obj_
  * 
  */
 
-static int __pyx_f_3_sa_8Alphabet_isvar(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
+static int __pyx_f_3_sa_8Alphabet_isvar(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("isvar", 0);
+  __Pyx_RefNannySetupContext("isvar");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":22
  * 
  *     cdef int isvar(self, int sym):
  *         return sym < 0             # <<<<<<<<<<<<<<
@@ -21782,7 +20390,7 @@ static int __pyx_f_3_sa_8Alphabet_isvar(CYTHON_UNUSED struct __pyx_obj_3_sa_Alph
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":24
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":24
  *         return sym < 0
  * 
  *     cdef int isword(self, int sym):             # <<<<<<<<<<<<<<
@@ -21790,12 +20398,12 @@ static int __pyx_f_3_sa_8Alphabet_isvar(CYTHON_UNUSED struct __pyx_obj_3_sa_Alph
  * 
  */
 
-static int __pyx_f_3_sa_8Alphabet_isword(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
+static int __pyx_f_3_sa_8Alphabet_isword(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("isword", 0);
+  __Pyx_RefNannySetupContext("isword");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":25
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":25
  * 
  *     cdef int isword(self, int sym):
  *         return sym >= 0             # <<<<<<<<<<<<<<
@@ -21811,7 +20419,7 @@ static int __pyx_f_3_sa_8Alphabet_isword(CYTHON_UNUSED struct __pyx_obj_3_sa_Alp
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":27
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":27
  *         return sym >= 0
  * 
  *     cdef int getindex(self, int sym):             # <<<<<<<<<<<<<<
@@ -21819,12 +20427,12 @@ static int __pyx_f_3_sa_8Alphabet_isword(CYTHON_UNUSED struct __pyx_obj_3_sa_Alp
  * 
  */
 
-static int __pyx_f_3_sa_8Alphabet_getindex(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
+static int __pyx_f_3_sa_8Alphabet_getindex(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getindex", 0);
+  __Pyx_RefNannySetupContext("getindex");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":28
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":28
  * 
  *     cdef int getindex(self, int sym):
  *         return -sym & INDEX_MASK             # <<<<<<<<<<<<<<
@@ -21840,7 +20448,7 @@ static int __pyx_f_3_sa_8Alphabet_getindex(CYTHON_UNUSED struct __pyx_obj_3_sa_A
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":30
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":30
  *         return -sym & INDEX_MASK
  * 
  *     cdef int setindex(self, int sym, int ind):             # <<<<<<<<<<<<<<
@@ -21848,12 +20456,12 @@ static int __pyx_f_3_sa_8Alphabet_getindex(CYTHON_UNUSED struct __pyx_obj_3_sa_A
  * 
  */
 
-static int __pyx_f_3_sa_8Alphabet_setindex(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym, int __pyx_v_ind) {
+static int __pyx_f_3_sa_8Alphabet_setindex(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym, int __pyx_v_ind) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setindex", 0);
+  __Pyx_RefNannySetupContext("setindex");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":31
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":31
  * 
  *     cdef int setindex(self, int sym, int ind):
  *         return -(-sym & ~INDEX_MASK | ind)             # <<<<<<<<<<<<<<
@@ -21869,7 +20477,7 @@ static int __pyx_f_3_sa_8Alphabet_setindex(CYTHON_UNUSED struct __pyx_obj_3_sa_A
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":33
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":33
  *         return -(-sym & ~INDEX_MASK | ind)
  * 
  *     cdef int clearindex(self, int sym):             # <<<<<<<<<<<<<<
@@ -21877,12 +20485,12 @@ static int __pyx_f_3_sa_8Alphabet_setindex(CYTHON_UNUSED struct __pyx_obj_3_sa_A
  * 
  */
 
-static int __pyx_f_3_sa_8Alphabet_clearindex(CYTHON_UNUSED struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
+static int __pyx_f_3_sa_8Alphabet_clearindex(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("clearindex", 0);
+  __Pyx_RefNannySetupContext("clearindex");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":34
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":34
  * 
  *     cdef int clearindex(self, int sym):
  *         return -(-sym& ~INDEX_MASK)             # <<<<<<<<<<<<<<
@@ -21898,7 +20506,7 @@ static int __pyx_f_3_sa_8Alphabet_clearindex(CYTHON_UNUSED struct __pyx_obj_3_sa
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":36
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":36
  *         return -(-sym& ~INDEX_MASK)
  * 
  *     cdef int match(self, int sym1, int sym2):             # <<<<<<<<<<<<<<
@@ -21909,9 +20517,9 @@ static int __pyx_f_3_sa_8Alphabet_clearindex(CYTHON_UNUSED struct __pyx_obj_3_sa
 static int __pyx_f_3_sa_8Alphabet_match(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym1, int __pyx_v_sym2) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("match", 0);
+  __Pyx_RefNannySetupContext("match");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":37
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":37
  * 
  *     cdef int match(self, int sym1, int sym2):
  *         return self.clearindex(sym1) == self.clearindex(sym2);             # <<<<<<<<<<<<<<
@@ -21927,7 +20535,7 @@ static int __pyx_f_3_sa_8Alphabet_match(struct __pyx_obj_3_sa_Alphabet *__pyx_v_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":39
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":39
  *         return self.clearindex(sym1) == self.clearindex(sym2);
  * 
  *     cdef char* tocat(self, int sym):             # <<<<<<<<<<<<<<
@@ -21938,9 +20546,9 @@ static int __pyx_f_3_sa_8Alphabet_match(struct __pyx_obj_3_sa_Alphabet *__pyx_v_
 static char *__pyx_f_3_sa_8Alphabet_tocat(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self, int __pyx_v_sym) {
   char *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("tocat", 0);
+  __Pyx_RefNannySetupContext("tocat");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":40
  * 
  *     cdef char* tocat(self, int sym):
  *         return self.nonterminals.word((-sym >> INDEX_SHIFT)-1)             # <<<<<<<<<<<<<<
@@ -21956,7 +20564,7 @@ static char *__pyx_f_3_sa_8Alphabet_tocat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":42
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":42
  *         return self.nonterminals.word((-sym >> INDEX_SHIFT)-1)
  * 
  *     cdef int fromcat(self, char *s):             # <<<<<<<<<<<<<<
@@ -21969,9 +20577,9 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("fromcat", 0);
+  __Pyx_RefNannySetupContext("fromcat");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":44
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":44
  *     cdef int fromcat(self, char *s):
  *         cdef int i
  *         i = self.nonterminals.index(s)             # <<<<<<<<<<<<<<
@@ -21980,7 +20588,7 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
  */
   __pyx_v_i = ((struct __pyx_vtabstruct_3_sa_StringMap *)__pyx_v_self->nonterminals->__pyx_vtab)->index(__pyx_v_self->nonterminals, __pyx_v_s);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":45
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":45
  *         cdef int i
  *         i = self.nonterminals.index(s)
  *         if self.first_nonterminal == -1:             # <<<<<<<<<<<<<<
@@ -21990,7 +20598,7 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   __pyx_t_1 = (__pyx_v_self->first_nonterminal == -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":46
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":46
  *         i = self.nonterminals.index(s)
  *         if self.first_nonterminal == -1:
  *             self.first_nonterminal = i             # <<<<<<<<<<<<<<
@@ -22002,7 +20610,7 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":47
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":47
  *         if self.first_nonterminal == -1:
  *             self.first_nonterminal = i
  *         if i > self.last_nonterminal:             # <<<<<<<<<<<<<<
@@ -22012,7 +20620,7 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   __pyx_t_1 = (__pyx_v_i > __pyx_v_self->last_nonterminal);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":48
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":48
  *             self.first_nonterminal = i
  *         if i > self.last_nonterminal:
  *             self.last_nonterminal = i             # <<<<<<<<<<<<<<
@@ -22024,7 +20632,7 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":49
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":49
  *         if i > self.last_nonterminal:
  *             self.last_nonterminal = i
  *         return -(i+1 << INDEX_SHIFT)             # <<<<<<<<<<<<<<
@@ -22040,7 +20648,7 @@ static int __pyx_f_3_sa_8Alphabet_fromcat(struct __pyx_obj_3_sa_Alphabet *__pyx_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":51
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":51
  *         return -(i+1 << INDEX_SHIFT)
  * 
  *     cdef char* tostring(self, int sym):             # <<<<<<<<<<<<<<
@@ -22061,9 +20669,9 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("tostring", 0);
+  __Pyx_RefNannySetupContext("tostring");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":53
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":53
  *     cdef char* tostring(self, int sym):
  *         cdef int ind
  *         if self.isvar(sym):             # <<<<<<<<<<<<<<
@@ -22073,7 +20681,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
   __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Alphabet *)__pyx_v_self->__pyx_vtab)->isvar(__pyx_v_self, __pyx_v_sym);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":54
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":54
  *         cdef int ind
  *         if self.isvar(sym):
  *             if sym in self.id2sym:             # <<<<<<<<<<<<<<
@@ -22083,24 +20691,19 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
     __pyx_t_2 = PyInt_FromLong(__pyx_v_sym); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     if (unlikely(((PyObject *)__pyx_v_self->id2sym) == Py_None)) {
-      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
     }
-    __pyx_t_3 = (__Pyx_PyDict_Contains(__pyx_t_2, ((PyObject *)__pyx_v_self->id2sym), Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyDict_Contains(((PyObject *)__pyx_v_self->id2sym), __pyx_t_2))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":55
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":55
  *         if self.isvar(sym):
  *             if sym in self.id2sym:
  *                 return self.id2sym[sym]             # <<<<<<<<<<<<<<
  *             ind = self.getindex(sym)
  *             if ind > 0:
  */
-      if (unlikely(((PyObject *)__pyx_v_self->id2sym) == Py_None)) {
-        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        {__pyx_filename = __pyx_f[10]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
       __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->id2sym), __pyx_v_sym, sizeof(int), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_4 = PyBytes_AsString(__pyx_t_2); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -22111,7 +20714,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
     }
     __pyx_L4:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":56
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":56
  *             if sym in self.id2sym:
  *                 return self.id2sym[sym]
  *             ind = self.getindex(sym)             # <<<<<<<<<<<<<<
@@ -22120,7 +20723,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
  */
     __pyx_v_ind = ((struct __pyx_vtabstruct_3_sa_Alphabet *)__pyx_v_self->__pyx_vtab)->getindex(__pyx_v_self, __pyx_v_sym);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":57
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":57
  *                 return self.id2sym[sym]
  *             ind = self.getindex(sym)
  *             if ind > 0:             # <<<<<<<<<<<<<<
@@ -22130,7 +20733,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
     __pyx_t_3 = (__pyx_v_ind > 0);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":58
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":58
  *             ind = self.getindex(sym)
  *             if ind > 0:
  *                 self.id2sym[sym] = "[%s,%d]" % (self.tocat(sym), ind)             # <<<<<<<<<<<<<<
@@ -22142,7 +20745,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
       __pyx_t_5 = PyInt_FromLong(__pyx_v_ind); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_6));
       PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_2));
       __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
       PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
@@ -22152,17 +20755,13 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
       __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_64), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_5));
       __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-      if (unlikely(((PyObject *)__pyx_v_self->id2sym) == Py_None)) {
-        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        {__pyx_filename = __pyx_f[10]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
       if (__Pyx_SetItemInt(((PyObject *)__pyx_v_self->id2sym), __pyx_v_sym, ((PyObject *)__pyx_t_5), sizeof(int), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
       goto __pyx_L5;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":60
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":60
  *                 self.id2sym[sym] = "[%s,%d]" % (self.tocat(sym), ind)
  *             else:
  *                 self.id2sym[sym] = "[%s]" % self.tocat(sym)             # <<<<<<<<<<<<<<
@@ -22174,26 +20773,18 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
       __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_65), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_6));
       __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-      if (unlikely(((PyObject *)__pyx_v_self->id2sym) == Py_None)) {
-        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        {__pyx_filename = __pyx_f[10]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
       if (__Pyx_SetItemInt(((PyObject *)__pyx_v_self->id2sym), __pyx_v_sym, ((PyObject *)__pyx_t_6), sizeof(int), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     }
     __pyx_L5:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":61
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":61
  *             else:
  *                 self.id2sym[sym] = "[%s]" % self.tocat(sym)
  *             return self.id2sym[sym]             # <<<<<<<<<<<<<<
  *         else:
  *             return self.terminals.word(sym)
  */
-    if (unlikely(((PyObject *)__pyx_v_self->id2sym) == Py_None)) {
-      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[10]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
     __pyx_t_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->id2sym), __pyx_v_sym, sizeof(int), PyInt_FromLong); if (!__pyx_t_6) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_4 = PyBytes_AsString(__pyx_t_6); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -22204,7 +20795,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":63
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":63
  *             return self.id2sym[sym]
  *         else:
  *             return self.terminals.word(sym)             # <<<<<<<<<<<<<<
@@ -22229,7 +20820,7 @@ static char *__pyx_f_3_sa_8Alphabet_tostring(struct __pyx_obj_3_sa_Alphabet *__p
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":65
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":65
  *             return self.terminals.word(sym)
  * 
  *     cdef int fromstring(self, char *s, bint terminal):             # <<<<<<<<<<<<<<
@@ -22255,9 +20846,9 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("fromstring", 0);
+  __Pyx_RefNannySetupContext("fromstring");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":69
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":69
  *         cdef char *comma
  *         cdef int n
  *         n = strlen(s)             # <<<<<<<<<<<<<<
@@ -22266,7 +20857,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
   __pyx_v_n = strlen(__pyx_v_s);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":71
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":71
  *         n = strlen(s)
  *         cdef char *sep
  *         sep = strstr(s,"_SEP_")             # <<<<<<<<<<<<<<
@@ -22275,7 +20866,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
   __pyx_v_sep = strstr(__pyx_v_s, __pyx_k___SEP_);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":72
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":72
  *         cdef char *sep
  *         sep = strstr(s,"_SEP_")
  *         if n >= 3 and s[0] == c'[' and s[n-1] == c']' and sep == NULL:             # <<<<<<<<<<<<<<
@@ -22303,7 +20894,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
   }
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":73
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":73
  *         sep = strstr(s,"_SEP_")
  *         if n >= 3 and s[0] == c'[' and s[n-1] == c']' and sep == NULL:
  *             if terminal:             # <<<<<<<<<<<<<<
@@ -22312,7 +20903,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
     if (__pyx_v_terminal) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":74
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":74
  *         if n >= 3 and s[0] == c'[' and s[n-1] == c']' and sep == NULL:
  *             if terminal:
  *                 s1 = "\\"+s             # <<<<<<<<<<<<<<
@@ -22327,7 +20918,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
       __pyx_v_s1 = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":75
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":75
  *             if terminal:
  *                 s1 = "\\"+s
  *                 return self.terminals.index(s1)             # <<<<<<<<<<<<<<
@@ -22341,7 +20932,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
     }
     __pyx_L4:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":76
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":76
  *                 s1 = "\\"+s
  *                 return self.terminals.index(s1)
  *             s[n-1] = c'\0'             # <<<<<<<<<<<<<<
@@ -22350,7 +20941,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
     (__pyx_v_s[(__pyx_v_n - 1)]) = '\x00';
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":77
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":77
  *                 return self.terminals.index(s1)
  *             s[n-1] = c'\0'
  *             s = s + 1             # <<<<<<<<<<<<<<
@@ -22359,7 +20950,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
     __pyx_v_s = (__pyx_v_s + 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":78
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":78
  *             s[n-1] = c'\0'
  *             s = s + 1
  *             comma = strrchr(s, c',')             # <<<<<<<<<<<<<<
@@ -22368,7 +20959,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
     __pyx_v_comma = strrchr(__pyx_v_s, ',');
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":79
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":79
  *             s = s + 1
  *             comma = strrchr(s, c',')
  *             if comma != NULL:             # <<<<<<<<<<<<<<
@@ -22378,7 +20969,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
     __pyx_t_2 = (__pyx_v_comma != NULL);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":80
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":80
  *             comma = strrchr(s, c',')
  *             if comma != NULL:
  *                 comma[0] = c'\0'             # <<<<<<<<<<<<<<
@@ -22387,7 +20978,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
  */
       (__pyx_v_comma[0]) = '\x00';
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":81
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":81
  *             if comma != NULL:
  *                 comma[0] = c'\0'
  *                 return self.setindex(self.fromcat(s), strtol(comma+1, NULL, 10))             # <<<<<<<<<<<<<<
@@ -22400,7 +20991,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":83
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":83
  *                 return self.setindex(self.fromcat(s), strtol(comma+1, NULL, 10))
  *             else:
  *                 return self.fromcat(s)             # <<<<<<<<<<<<<<
@@ -22415,7 +21006,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":85
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":85
  *                 return self.fromcat(s)
  *         else:
  *             return self.terminals.index(s)             # <<<<<<<<<<<<<<
@@ -22440,18 +21031,7 @@ static int __pyx_f_3_sa_8Alphabet_fromstring(struct __pyx_obj_3_sa_Alphabet *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_8Alphabet_9terminals_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_8Alphabet_9terminals_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_8Alphabet_9terminals___get__(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":8
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":8
  * 
  * cdef class Alphabet:
  *     cdef readonly StringMap terminals, nonterminals             # <<<<<<<<<<<<<<
@@ -22459,13 +21039,14 @@ static PyObject *__pyx_pw_3_sa_8Alphabet_9terminals_1__get__(PyObject *__pyx_v_s
  *     cdef dict id2sym
  */
 
-static PyObject *__pyx_pf_3_sa_8Alphabet_9terminals___get__(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_8Alphabet_9terminals___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_8Alphabet_9terminals___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->terminals));
-  __pyx_r = ((PyObject *)__pyx_v_self->terminals);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->terminals));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->terminals);
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -22475,24 +21056,14 @@ static PyObject *__pyx_pf_3_sa_8Alphabet_9terminals___get__(struct __pyx_obj_3_s
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_8Alphabet_12nonterminals_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_8Alphabet_12nonterminals_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_8Alphabet_12nonterminals___get__(((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_3_sa_8Alphabet_12nonterminals___get__(struct __pyx_obj_3_sa_Alphabet *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_8Alphabet_12nonterminals___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_8Alphabet_12nonterminals___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->nonterminals));
-  __pyx_r = ((PyObject *)__pyx_v_self->nonterminals);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->nonterminals));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_3_sa_Alphabet *)__pyx_v_self)->nonterminals);
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -22502,7 +21073,7 @@ static PyObject *__pyx_pf_3_sa_8Alphabet_12nonterminals___get__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":89
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":89
  * cdef Alphabet ALPHABET = Alphabet()
  * 
  * cdef char* sym_tostring(int sym):             # <<<<<<<<<<<<<<
@@ -22513,9 +21084,9 @@ static PyObject *__pyx_pf_3_sa_8Alphabet_12nonterminals___get__(struct __pyx_obj
 static char *__pyx_f_3_sa_sym_tostring(int __pyx_v_sym) {
   char *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sym_tostring", 0);
+  __Pyx_RefNannySetupContext("sym_tostring");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":90
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":90
  * 
  * cdef char* sym_tostring(int sym):
  *     return ALPHABET.tostring(sym)             # <<<<<<<<<<<<<<
@@ -22531,7 +21102,7 @@ static char *__pyx_f_3_sa_sym_tostring(int __pyx_v_sym) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":92
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":92
  *     return ALPHABET.tostring(sym)
  * 
  * cdef char* sym_tocat(int sym):             # <<<<<<<<<<<<<<
@@ -22542,9 +21113,9 @@ static char *__pyx_f_3_sa_sym_tostring(int __pyx_v_sym) {
 static char *__pyx_f_3_sa_sym_tocat(int __pyx_v_sym) {
   char *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sym_tocat", 0);
+  __Pyx_RefNannySetupContext("sym_tocat");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":93
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":93
  * 
  * cdef char* sym_tocat(int sym):
  *     return ALPHABET.tocat(sym)             # <<<<<<<<<<<<<<
@@ -22560,7 +21131,7 @@ static char *__pyx_f_3_sa_sym_tocat(int __pyx_v_sym) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":95
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":95
  *     return ALPHABET.tocat(sym)
  * 
  * cdef int sym_isvar(int sym):             # <<<<<<<<<<<<<<
@@ -22571,9 +21142,9 @@ static char *__pyx_f_3_sa_sym_tocat(int __pyx_v_sym) {
 static int __pyx_f_3_sa_sym_isvar(int __pyx_v_sym) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sym_isvar", 0);
+  __Pyx_RefNannySetupContext("sym_isvar");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":96
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":96
  * 
  * cdef int sym_isvar(int sym):
  *     return ALPHABET.isvar(sym)             # <<<<<<<<<<<<<<
@@ -22589,7 +21160,7 @@ static int __pyx_f_3_sa_sym_isvar(int __pyx_v_sym) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":98
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":98
  *     return ALPHABET.isvar(sym)
  * 
  * cdef int sym_getindex(int sym):             # <<<<<<<<<<<<<<
@@ -22600,9 +21171,9 @@ static int __pyx_f_3_sa_sym_isvar(int __pyx_v_sym) {
 static int __pyx_f_3_sa_sym_getindex(int __pyx_v_sym) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sym_getindex", 0);
+  __Pyx_RefNannySetupContext("sym_getindex");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":99
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":99
  * 
  * cdef int sym_getindex(int sym):
  *     return ALPHABET.getindex(sym)             # <<<<<<<<<<<<<<
@@ -22618,7 +21189,7 @@ static int __pyx_f_3_sa_sym_getindex(int __pyx_v_sym) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":101
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":101
  *     return ALPHABET.getindex(sym)
  * 
  * cdef int sym_setindex(int sym, int id):             # <<<<<<<<<<<<<<
@@ -22629,9 +21200,9 @@ static int __pyx_f_3_sa_sym_getindex(int __pyx_v_sym) {
 static int __pyx_f_3_sa_sym_setindex(int __pyx_v_sym, int __pyx_v_id) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sym_setindex", 0);
+  __Pyx_RefNannySetupContext("sym_setindex");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":102
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":102
  * 
  * cdef int sym_setindex(int sym, int id):
  *     return ALPHABET.setindex(sym, id)             # <<<<<<<<<<<<<<
@@ -22647,40 +21218,52 @@ static int __pyx_f_3_sa_sym_setindex(int __pyx_v_sym, int __pyx_v_id) {
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_3sym_fromstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_3_sa_3sym_fromstring = {__Pyx_NAMESTR("sym_fromstring"), (PyCFunction)__pyx_pw_3_sa_3sym_fromstring, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_3_sa_3sym_fromstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":104
+ *     return ALPHABET.setindex(sym, id)
+ * 
+ * def sym_fromstring(char* string, bint terminal):             # <<<<<<<<<<<<<<
+ *     return ALPHABET.fromstring(string, terminal)
+ */
+
+static PyObject *__pyx_pf_3_sa_1sym_fromstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_3_sa_1sym_fromstring = {__Pyx_NAMESTR("sym_fromstring"), (PyCFunction)__pyx_pf_3_sa_1sym_fromstring, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pf_3_sa_1sym_fromstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_string;
   int __pyx_v_terminal;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sym_fromstring (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__string,&__pyx_n_s__terminal,0};
+  __Pyx_RefNannySetupContext("sym_fromstring");
+  __pyx_self = __pyx_self;
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__string,&__pyx_n_s__terminal,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__string)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__string);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__terminal)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__terminal);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("sym_fromstring", 1, 2, 2, 1); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sym_fromstring") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "sym_fromstring") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -22699,28 +21282,8 @@ static PyObject *__pyx_pw_3_sa_3sym_fromstring(PyObject *__pyx_self, PyObject *_
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_2sym_fromstring(__pyx_self, __pyx_v_string, __pyx_v_terminal);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":104
- *     return ALPHABET.setindex(sym, id)
- * 
- * def sym_fromstring(char* string, bint terminal):             # <<<<<<<<<<<<<<
- *     return ALPHABET.fromstring(string, terminal)
- */
-
-static PyObject *__pyx_pf_3_sa_2sym_fromstring(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_string, int __pyx_v_terminal) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("sym_fromstring", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":105
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":105
  * 
  * def sym_fromstring(char* string, bint terminal):
  *     return ALPHABET.fromstring(string, terminal)             # <<<<<<<<<<<<<<
@@ -22744,32 +21307,50 @@ static PyObject *__pyx_pf_3_sa_2sym_fromstring(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_6Phrase_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_6Phrase_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":6
+ * cdef class Phrase:
+ * 
+ *     def __cinit__(self, words):             # <<<<<<<<<<<<<<
+ *         cdef int i, j, n, n_vars
+ *         n_vars = 0
+ */
+
+static int __pyx_pf_3_sa_6Phrase___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_6Phrase___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_words = 0;
+  int __pyx_v_i;
+  int __pyx_v_j;
+  int __pyx_v_n;
+  int __pyx_v_n_vars;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  Py_ssize_t __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__words,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__words,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__words)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__words);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -22786,36 +21367,8 @@ static int __pyx_pw_3_sa_6Phrase_1__cinit__(PyObject *__pyx_v_self, PyObject *__
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_6Phrase___cinit__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), __pyx_v_words);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":6
- * cdef class Phrase:
- * 
- *     def __cinit__(self, words):             # <<<<<<<<<<<<<<
- *         cdef int i, j, n, n_vars
- *         n_vars = 0
- */
-
-static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_words) {
-  int __pyx_v_i;
-  int __pyx_v_j;
-  int __pyx_v_n;
-  int __pyx_v_n_vars;
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  Py_ssize_t __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":8
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":8
  *     def __cinit__(self, words):
  *         cdef int i, j, n, n_vars
  *         n_vars = 0             # <<<<<<<<<<<<<<
@@ -22824,7 +21377,7 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  */
   __pyx_v_n_vars = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":9
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":9
  *         cdef int i, j, n, n_vars
  *         n_vars = 0
  *         n = len(words)             # <<<<<<<<<<<<<<
@@ -22834,16 +21387,16 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   __pyx_t_1 = PyObject_Length(__pyx_v_words); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_n = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":10
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":10
  *         n_vars = 0
  *         n = len(words)
  *         self.syms = <int *>malloc(n*sizeof(int))             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < n:
  *             self.syms[i] = words[i]
  */
-  __pyx_v_self->syms = ((int *)malloc((__pyx_v_n * (sizeof(int)))));
+  ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms = ((int *)malloc((__pyx_v_n * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":11
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":11
  *         n = len(words)
  *         self.syms = <int *>malloc(n*sizeof(int))
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -22853,7 +21406,7 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   __pyx_t_2 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":12
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":12
  *         self.syms = <int *>malloc(n*sizeof(int))
  *         for i from 0 <= i < n:
  *             self.syms[i] = words[i]             # <<<<<<<<<<<<<<
@@ -22864,19 +21417,19 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_self->syms[__pyx_v_i]) = __pyx_t_4;
+    (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]) = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":13
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":13
  *         for i from 0 <= i < n:
  *             self.syms[i] = words[i]
  *             if sym_isvar(self.syms[i]):             # <<<<<<<<<<<<<<
  *                 n_vars += 1
  *         self.n = n
  */
-    __pyx_t_4 = __pyx_f_3_sa_sym_isvar((__pyx_v_self->syms[__pyx_v_i]));
+    __pyx_t_4 = __pyx_f_3_sa_sym_isvar((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]));
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":14
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":14
  *             self.syms[i] = words[i]
  *             if sym_isvar(self.syms[i]):
  *                 n_vars += 1             # <<<<<<<<<<<<<<
@@ -22884,39 +21437,39 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  *         self.n_vars = n_vars
  */
       __pyx_v_n_vars = (__pyx_v_n_vars + 1);
-      goto __pyx_L5;
+      goto __pyx_L8;
     }
-    __pyx_L5:;
+    __pyx_L8:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":15
  *             if sym_isvar(self.syms[i]):
  *                 n_vars += 1
  *         self.n = n             # <<<<<<<<<<<<<<
  *         self.n_vars = n_vars
  *         self.varpos = <int *>malloc(n_vars*sizeof(int))
  */
-  __pyx_v_self->n = __pyx_v_n;
+  ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n = __pyx_v_n;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":16
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":16
  *                 n_vars += 1
  *         self.n = n
  *         self.n_vars = n_vars             # <<<<<<<<<<<<<<
  *         self.varpos = <int *>malloc(n_vars*sizeof(int))
  *         j = 0
  */
-  __pyx_v_self->n_vars = __pyx_v_n_vars;
+  ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n_vars = __pyx_v_n_vars;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":17
  *         self.n = n
  *         self.n_vars = n_vars
  *         self.varpos = <int *>malloc(n_vars*sizeof(int))             # <<<<<<<<<<<<<<
  *         j = 0
  *         for i from 0 <= i < n:
  */
-  __pyx_v_self->varpos = ((int *)malloc((__pyx_v_n_vars * (sizeof(int)))));
+  ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->varpos = ((int *)malloc((__pyx_v_n_vars * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":18
  *         self.n_vars = n_vars
  *         self.varpos = <int *>malloc(n_vars*sizeof(int))
  *         j = 0             # <<<<<<<<<<<<<<
@@ -22925,7 +21478,7 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  */
   __pyx_v_j = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":19
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":19
  *         self.varpos = <int *>malloc(n_vars*sizeof(int))
  *         j = 0
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -22935,26 +21488,26 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   __pyx_t_2 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":20
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":20
  *         j = 0
  *         for i from 0 <= i < n:
  *             if sym_isvar(self.syms[i]):             # <<<<<<<<<<<<<<
  *                 self.varpos[j] = i
  *                 j = j + 1
  */
-    __pyx_t_4 = __pyx_f_3_sa_sym_isvar((__pyx_v_self->syms[__pyx_v_i]));
+    __pyx_t_4 = __pyx_f_3_sa_sym_isvar((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]));
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":21
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":21
  *         for i from 0 <= i < n:
  *             if sym_isvar(self.syms[i]):
  *                 self.varpos[j] = i             # <<<<<<<<<<<<<<
  *                 j = j + 1
  * 
  */
-      (__pyx_v_self->varpos[__pyx_v_j]) = __pyx_v_i;
+      (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->varpos[__pyx_v_j]) = __pyx_v_i;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":22
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":22
  *             if sym_isvar(self.syms[i]):
  *                 self.varpos[j] = i
  *                 j = j + 1             # <<<<<<<<<<<<<<
@@ -22962,9 +21515,9 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  *     def __dealloc__(self):
  */
       __pyx_v_j = (__pyx_v_j + 1);
-      goto __pyx_L8;
+      goto __pyx_L11;
     }
-    __pyx_L8:;
+    __pyx_L11:;
   }
 
   __pyx_r = 0;
@@ -22978,16 +21531,7 @@ static int __pyx_pf_3_sa_6Phrase___cinit__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_6Phrase_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_6Phrase_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_6Phrase_2__dealloc__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":24
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":24
  *                 j = j + 1
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -22995,43 +21539,33 @@ static void __pyx_pw_3_sa_6Phrase_3__dealloc__(PyObject *__pyx_v_self) {
  *         free(self.varpos)
  */
 
-static void __pyx_pf_3_sa_6Phrase_2__dealloc__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static void __pyx_pf_3_sa_6Phrase_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_6Phrase_1__dealloc__(PyObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":25
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":25
  * 
  *     def __dealloc__(self):
  *         free(self.syms)             # <<<<<<<<<<<<<<
  *         free(self.varpos)
  * 
  */
-  free(__pyx_v_self->syms);
+  free(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":26
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":26
  *     def __dealloc__(self):
  *         free(self.syms)
  *         free(self.varpos)             # <<<<<<<<<<<<<<
  * 
  *     def __str__(self):
  */
-  free(__pyx_v_self->varpos);
+  free(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->varpos);
 
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_5__str__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_5__str__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_4__str__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":28
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":28
  *         free(self.varpos)
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -23039,7 +21573,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_5__str__(PyObject *__pyx_v_self) {
  *         cdef int i, s
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_4__str__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6Phrase_2__str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_2__str__(PyObject *__pyx_v_self) {
   PyObject *__pyx_v_strs = NULL;
   int __pyx_v_i;
   int __pyx_v_s;
@@ -23053,9 +21588,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_4__str__(struct __pyx_obj_3_sa_Phrase *__
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__str__", 0);
+  __Pyx_RefNannySetupContext("__str__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":29
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":29
  * 
  *     def __str__(self):
  *         strs = []             # <<<<<<<<<<<<<<
@@ -23063,43 +21598,46 @@ static PyObject *__pyx_pf_3_sa_6Phrase_4__str__(struct __pyx_obj_3_sa_Phrase *__
  *         for i from 0 <= i < self.n:
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_strs = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":31
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":31
  *         strs = []
  *         cdef int i, s
  *         for i from 0 <= i < self.n:             # <<<<<<<<<<<<<<
  *             s = self.syms[i]
  *             strs.append(sym_tostring(s))
  */
-  __pyx_t_2 = __pyx_v_self->n;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":32
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":32
  *         cdef int i, s
  *         for i from 0 <= i < self.n:
  *             s = self.syms[i]             # <<<<<<<<<<<<<<
  *             strs.append(sym_tostring(s))
  *         return ' '.join(strs)
  */
-    __pyx_v_s = (__pyx_v_self->syms[__pyx_v_i]);
+    __pyx_v_s = (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":33
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":33
  *         for i from 0 <= i < self.n:
  *             s = self.syms[i]
  *             strs.append(sym_tostring(s))             # <<<<<<<<<<<<<<
  *         return ' '.join(strs)
  * 
  */
+    if (unlikely(((PyObject *)__pyx_v_strs) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_1 = PyBytes_FromString(__pyx_f_3_sa_sym_tostring(__pyx_v_s)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_3 = PyList_Append(__pyx_v_strs, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":34
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":34
  *             s = self.syms[i]
  *             strs.append(sym_tostring(s))
  *         return ' '.join(strs)             # <<<<<<<<<<<<<<
@@ -23110,7 +21648,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_4__str__(struct __pyx_obj_3_sa_Phrase *__
   __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_67), __pyx_n_s__join); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   __Pyx_INCREF(((PyObject *)__pyx_v_strs));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_strs));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_strs));
@@ -23137,19 +21675,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_4__str__(struct __pyx_obj_3_sa_Phrase *__
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_7handle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static char __pyx_doc_3_sa_6Phrase_6handle[] = "return a hashable representation that normalizes the ordering\n        of the nonterminal indices";
-static PyObject *__pyx_pw_3_sa_6Phrase_7handle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("handle (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_6handle(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":36
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":36
  *         return ' '.join(strs)
  * 
  *     def handle(self):             # <<<<<<<<<<<<<<
@@ -23157,7 +21683,9 @@ static PyObject *__pyx_pw_3_sa_6Phrase_7handle(PyObject *__pyx_v_self, CYTHON_UN
  *         of the nonterminal indices"""
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6Phrase_3handle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_3_sa_6Phrase_3handle[] = "return a hashable representation that normalizes the ordering\n        of the nonterminal indices";
+static PyObject *__pyx_pf_3_sa_6Phrase_3handle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_v_norm = NULL;
   int __pyx_v_i;
   int __pyx_v_j;
@@ -23171,9 +21699,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("handle", 0);
+  __Pyx_RefNannySetupContext("handle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":39
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":39
  *         """return a hashable representation that normalizes the ordering
  *         of the nonterminal indices"""
  *         norm = []             # <<<<<<<<<<<<<<
@@ -23181,11 +21709,11 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
  *         i = 1
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_norm = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":41
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":41
  *         norm = []
  *         cdef int i, j, s
  *         i = 1             # <<<<<<<<<<<<<<
@@ -23194,7 +21722,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
  */
   __pyx_v_i = 1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":42
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":42
  *         cdef int i, j, s
  *         i = 1
  *         j = 0             # <<<<<<<<<<<<<<
@@ -23203,26 +21731,26 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
  */
   __pyx_v_j = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":43
  *         i = 1
  *         j = 0
  *         for j from 0 <= j < self.n:             # <<<<<<<<<<<<<<
  *             s = self.syms[j]
  *             if sym_isvar(s):
  */
-  __pyx_t_2 = __pyx_v_self->n;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_2; __pyx_v_j++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":44
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":44
  *         j = 0
  *         for j from 0 <= j < self.n:
  *             s = self.syms[j]             # <<<<<<<<<<<<<<
  *             if sym_isvar(s):
  *                 s = sym_setindex(s,i)
  */
-    __pyx_v_s = (__pyx_v_self->syms[__pyx_v_j]);
+    __pyx_v_s = (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_j]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":45
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":45
  *         for j from 0 <= j < self.n:
  *             s = self.syms[j]
  *             if sym_isvar(s):             # <<<<<<<<<<<<<<
@@ -23232,7 +21760,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
     __pyx_t_3 = __pyx_f_3_sa_sym_isvar(__pyx_v_s);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":46
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":46
  *             s = self.syms[j]
  *             if sym_isvar(s):
  *                 s = sym_setindex(s,i)             # <<<<<<<<<<<<<<
@@ -23241,7 +21769,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
  */
       __pyx_v_s = __pyx_f_3_sa_sym_setindex(__pyx_v_s, __pyx_v_i);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":47
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":47
  *             if sym_isvar(s):
  *                 s = sym_setindex(s,i)
  *                 i = i + 1             # <<<<<<<<<<<<<<
@@ -23249,24 +21777,27 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
  *         return tuple(norm)
  */
       __pyx_v_i = (__pyx_v_i + 1);
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":48
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":48
  *                 s = sym_setindex(s,i)
  *                 i = i + 1
  *             norm.append(s)             # <<<<<<<<<<<<<<
  *         return tuple(norm)
  * 
  */
+    if (unlikely(((PyObject *)__pyx_v_norm) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_1 = PyInt_FromLong(__pyx_v_s); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = PyList_Append(__pyx_v_norm, __pyx_t_1); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":49
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":49
  *                 i = i + 1
  *             norm.append(s)
  *         return tuple(norm)             # <<<<<<<<<<<<<<
@@ -23274,6 +21805,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
  *     def strhandle(self):
  */
   __Pyx_XDECREF(__pyx_r);
+  if (unlikely(((PyObject *)__pyx_v_norm) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
   __pyx_t_1 = ((PyObject *)PyList_AsTuple(__pyx_v_norm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_r = ((PyObject *)__pyx_t_1);
@@ -23293,18 +21827,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_6handle(struct __pyx_obj_3_sa_Phrase *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_9strhandle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_9strhandle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("strhandle (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_8strhandle(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":51
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":51
  *         return tuple(norm)
  * 
  *     def strhandle(self):             # <<<<<<<<<<<<<<
@@ -23312,8 +21835,9 @@ static PyObject *__pyx_pw_3_sa_6Phrase_9strhandle(PyObject *__pyx_v_self, CYTHON
  *         norm = []
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
-  CYTHON_UNUSED PyObject *__pyx_v_strs = NULL;
+static PyObject *__pyx_pf_3_sa_6Phrase_4strhandle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_4strhandle(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_v_strs = NULL;
   PyObject *__pyx_v_norm = NULL;
   int __pyx_v_i;
   int __pyx_v_j;
@@ -23329,9 +21853,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("strhandle", 0);
+  __Pyx_RefNannySetupContext("strhandle");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":52
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":52
  * 
  *     def strhandle(self):
  *         strs = []             # <<<<<<<<<<<<<<
@@ -23339,11 +21863,11 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
  *         cdef int i, j, s
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_strs = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":53
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":53
  *     def strhandle(self):
  *         strs = []
  *         norm = []             # <<<<<<<<<<<<<<
@@ -23351,11 +21875,11 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
  *         i = 1
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_norm = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":55
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":55
  *         norm = []
  *         cdef int i, j, s
  *         i = 1             # <<<<<<<<<<<<<<
@@ -23364,7 +21888,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
  */
   __pyx_v_i = 1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":56
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":56
  *         cdef int i, j, s
  *         i = 1
  *         j = 0             # <<<<<<<<<<<<<<
@@ -23373,26 +21897,26 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
  */
   __pyx_v_j = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":57
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":57
  *         i = 1
  *         j = 0
  *         for j from 0 <= j < self.n:             # <<<<<<<<<<<<<<
  *             s = self.syms[j]
  *             if sym_isvar(s):
  */
-  __pyx_t_2 = __pyx_v_self->n;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_2; __pyx_v_j++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":58
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":58
  *         j = 0
  *         for j from 0 <= j < self.n:
  *             s = self.syms[j]             # <<<<<<<<<<<<<<
  *             if sym_isvar(s):
  *                 s = sym_setindex(s,i)
  */
-    __pyx_v_s = (__pyx_v_self->syms[__pyx_v_j]);
+    __pyx_v_s = (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_j]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":59
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":59
  *         for j from 0 <= j < self.n:
  *             s = self.syms[j]
  *             if sym_isvar(s):             # <<<<<<<<<<<<<<
@@ -23402,7 +21926,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
     __pyx_t_3 = __pyx_f_3_sa_sym_isvar(__pyx_v_s);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":60
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":60
  *             s = self.syms[j]
  *             if sym_isvar(s):
  *                 s = sym_setindex(s,i)             # <<<<<<<<<<<<<<
@@ -23411,7 +21935,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
  */
       __pyx_v_s = __pyx_f_3_sa_sym_setindex(__pyx_v_s, __pyx_v_i);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":61
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":61
  *             if sym_isvar(s):
  *                 s = sym_setindex(s,i)
  *                 i = i + 1             # <<<<<<<<<<<<<<
@@ -23419,24 +21943,27 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
  *         return ' '.join(norm)
  */
       __pyx_v_i = (__pyx_v_i + 1);
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":62
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":62
  *                 s = sym_setindex(s,i)
  *                 i = i + 1
  *             norm.append(sym_tostring(s))             # <<<<<<<<<<<<<<
  *         return ' '.join(norm)
  * 
  */
+    if (unlikely(((PyObject *)__pyx_v_norm) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_1 = PyBytes_FromString(__pyx_f_3_sa_sym_tostring(__pyx_v_s)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_4 = PyList_Append(__pyx_v_norm, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":63
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":63
  *                 i = i + 1
  *             norm.append(sym_tostring(s))
  *         return ' '.join(norm)             # <<<<<<<<<<<<<<
@@ -23447,7 +21974,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
   __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_67), __pyx_n_s__join); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
   __Pyx_INCREF(((PyObject *)__pyx_v_norm));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_norm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_norm));
@@ -23475,18 +22002,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_8strhandle(struct __pyx_obj_3_sa_Phrase *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_11arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_11arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("arity (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_10arity(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":65
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":65
  *         return ' '.join(norm)
  * 
  *     def arity(self):             # <<<<<<<<<<<<<<
@@ -23494,16 +22010,17 @@ static PyObject *__pyx_pw_3_sa_6Phrase_11arity(PyObject *__pyx_v_self, CYTHON_UN
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_10arity(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6Phrase_5arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_5arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("arity", 0);
+  __Pyx_RefNannySetupContext("arity");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":66
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":66
  * 
  *     def arity(self):
  *         return self.n_vars             # <<<<<<<<<<<<<<
@@ -23511,7 +22028,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_10arity(struct __pyx_obj_3_sa_Phrase *__p
  *     def getvarpos(self, i):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->n_vars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n_vars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -23529,18 +22046,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_10arity(struct __pyx_obj_3_sa_Phrase *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_13getvarpos(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_13getvarpos(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getvarpos (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_12getvarpos(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":68
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":68
  *         return self.n_vars
  * 
  *     def getvarpos(self, i):             # <<<<<<<<<<<<<<
@@ -23548,7 +22054,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_13getvarpos(PyObject *__pyx_v_self, PyObj
  *             return self.varpos[i]
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_12getvarpos(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_6Phrase_6getvarpos(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_6getvarpos(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -23558,28 +22065,30 @@ static PyObject *__pyx_pf_3_sa_6Phrase_12getvarpos(struct __pyx_obj_3_sa_Phrase
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getvarpos", 0);
+  __Pyx_RefNannySetupContext("getvarpos");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":69
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":69
  * 
  *     def getvarpos(self, i):
  *         if 0 <= i < self.n_vars:             # <<<<<<<<<<<<<<
  *             return self.varpos[i]
  *         else:
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_int_0, __pyx_v_i, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_int_0, __pyx_v_i, Py_LE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_PyObject_IsTrue(__pyx_t_1)) {
     __Pyx_DECREF(__pyx_t_1);
-    __pyx_t_2 = PyInt_FromLong(__pyx_v_self->n_vars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n_vars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_t_2, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":70
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":70
  *     def getvarpos(self, i):
  *         if 0 <= i < self.n_vars:
  *             return self.varpos[i]             # <<<<<<<<<<<<<<
@@ -23588,16 +22097,16 @@ static PyObject *__pyx_pf_3_sa_6Phrase_12getvarpos(struct __pyx_obj_3_sa_Phrase
  */
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_1 = PyInt_FromLong((__pyx_v_self->varpos[__pyx_t_4])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->varpos[__pyx_t_4])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":72
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":72
  *             return self.varpos[i]
  *         else:
  *             raise IndexError             # <<<<<<<<<<<<<<
@@ -23607,7 +22116,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_12getvarpos(struct __pyx_obj_3_sa_Phrase
     __Pyx_Raise(__pyx_builtin_IndexError, 0, 0, 0);
     {__pyx_filename = __pyx_f[7]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -23622,18 +22131,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_12getvarpos(struct __pyx_obj_3_sa_Phrase
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_15getvar(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_15getvar(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getvar (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_14getvar(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":74
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":74
  *             raise IndexError
  * 
  *     def getvar(self, i):             # <<<<<<<<<<<<<<
@@ -23641,7 +22139,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_15getvar(PyObject *__pyx_v_self, PyObject
  *             return self.syms[self.varpos[i]]
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_14getvar(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_6Phrase_7getvar(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_7getvar(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -23651,28 +22150,30 @@ static PyObject *__pyx_pf_3_sa_6Phrase_14getvar(struct __pyx_obj_3_sa_Phrase *__
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getvar", 0);
+  __Pyx_RefNannySetupContext("getvar");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":75
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":75
  * 
  *     def getvar(self, i):
  *         if 0 <= i < self.n_vars:             # <<<<<<<<<<<<<<
  *             return self.syms[self.varpos[i]]
  *         else:
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_int_0, __pyx_v_i, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_int_0, __pyx_v_i, Py_LE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_PyObject_IsTrue(__pyx_t_1)) {
     __Pyx_DECREF(__pyx_t_1);
-    __pyx_t_2 = PyInt_FromLong(__pyx_v_self->n_vars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n_vars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_t_2, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":76
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":76
  *     def getvar(self, i):
  *         if 0 <= i < self.n_vars:
  *             return self.syms[self.varpos[i]]             # <<<<<<<<<<<<<<
@@ -23681,16 +22182,16 @@ static PyObject *__pyx_pf_3_sa_6Phrase_14getvar(struct __pyx_obj_3_sa_Phrase *__
  */
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_1 = PyInt_FromLong((__pyx_v_self->syms[(__pyx_v_self->varpos[__pyx_t_4])])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->varpos[__pyx_t_4])])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":78
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":78
  *             return self.syms[self.varpos[i]]
  *         else:
  *             raise IndexError             # <<<<<<<<<<<<<<
@@ -23700,7 +22201,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_14getvar(struct __pyx_obj_3_sa_Phrase *__
     __Pyx_Raise(__pyx_builtin_IndexError, 0, 0, 0);
     {__pyx_filename = __pyx_f[7]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -23715,7 +22216,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_14getvar(struct __pyx_obj_3_sa_Phrase *__
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":80
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":80
  *             raise IndexError
  * 
  *     cdef int chunkpos(self, int k):             # <<<<<<<<<<<<<<
@@ -23727,9 +22228,9 @@ int __pyx_f_3_sa_6Phrase_chunkpos(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("chunkpos", 0);
+  __Pyx_RefNannySetupContext("chunkpos");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":81
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":81
  * 
  *     cdef int chunkpos(self, int k):
  *         if k == 0:             # <<<<<<<<<<<<<<
@@ -23739,7 +22240,7 @@ int __pyx_f_3_sa_6Phrase_chunkpos(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   __pyx_t_1 = (__pyx_v_k == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":82
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":82
  *     cdef int chunkpos(self, int k):
  *         if k == 0:
  *             return 0             # <<<<<<<<<<<<<<
@@ -23752,7 +22253,7 @@ int __pyx_f_3_sa_6Phrase_chunkpos(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":84
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":84
  *             return 0
  *         else:
  *             return self.varpos[k-1]+1             # <<<<<<<<<<<<<<
@@ -23770,7 +22271,7 @@ int __pyx_f_3_sa_6Phrase_chunkpos(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":86
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":86
  *             return self.varpos[k-1]+1
  * 
  *     cdef int chunklen(self, int k):             # <<<<<<<<<<<<<<
@@ -23782,9 +22283,9 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("chunklen", 0);
+  __Pyx_RefNannySetupContext("chunklen");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":87
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":87
  * 
  *     cdef int chunklen(self, int k):
  *         if self.n_vars == 0:             # <<<<<<<<<<<<<<
@@ -23794,7 +22295,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   __pyx_t_1 = (__pyx_v_self->n_vars == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":88
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":88
  *     cdef int chunklen(self, int k):
  *         if self.n_vars == 0:
  *             return self.n             # <<<<<<<<<<<<<<
@@ -23806,7 +22307,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
     goto __pyx_L3;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":89
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":89
  *         if self.n_vars == 0:
  *             return self.n
  *         elif k == 0:             # <<<<<<<<<<<<<<
@@ -23816,7 +22317,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   __pyx_t_1 = (__pyx_v_k == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":90
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":90
  *             return self.n
  *         elif k == 0:
  *             return self.varpos[0]             # <<<<<<<<<<<<<<
@@ -23828,7 +22329,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
     goto __pyx_L3;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":91
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":91
  *         elif k == 0:
  *             return self.varpos[0]
  *         elif k == self.n_vars:             # <<<<<<<<<<<<<<
@@ -23838,7 +22339,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   __pyx_t_1 = (__pyx_v_k == __pyx_v_self->n_vars);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":92
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":92
  *             return self.varpos[0]
  *         elif k == self.n_vars:
  *             return self.n-self.varpos[k-1]-1             # <<<<<<<<<<<<<<
@@ -23851,7 +22352,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":94
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":94
  *             return self.n-self.varpos[k-1]-1
  *         else:
  *             return self.varpos[k]-self.varpos[k-1]-1             # <<<<<<<<<<<<<<
@@ -23869,18 +22370,7 @@ int __pyx_f_3_sa_6Phrase_chunklen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, in
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_17clen(PyObject *__pyx_v_self, PyObject *__pyx_v_k); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_17clen(PyObject *__pyx_v_self, PyObject *__pyx_v_k) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("clen (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_16clen(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), ((PyObject *)__pyx_v_k));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":96
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":96
  *             return self.varpos[k]-self.varpos[k-1]-1
  * 
  *     def clen(self, k):             # <<<<<<<<<<<<<<
@@ -23888,7 +22378,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_17clen(PyObject *__pyx_v_self, PyObject *
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_16clen(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_k) {
+static PyObject *__pyx_pf_3_sa_6Phrase_8clen(PyObject *__pyx_v_self, PyObject *__pyx_v_k); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_8clen(PyObject *__pyx_v_self, PyObject *__pyx_v_k) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -23896,9 +22387,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_16clen(struct __pyx_obj_3_sa_Phrase *__py
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("clen", 0);
+  __Pyx_RefNannySetupContext("clen");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":97
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":97
  * 
  *     def clen(self, k):
  *          return self.chunklen(k)             # <<<<<<<<<<<<<<
@@ -23907,7 +22398,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_16clen(struct __pyx_obj_3_sa_Phrase *__py
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_k); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_Phrase *)__pyx_v_self->__pyx_vtab)->chunklen(__pyx_v_self, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_Phrase *)((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->__pyx_vtab)->chunklen(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -23925,18 +22416,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_16clen(struct __pyx_obj_3_sa_Phrase *__py
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_19getchunk(PyObject *__pyx_v_self, PyObject *__pyx_v_ci); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_19getchunk(PyObject *__pyx_v_self, PyObject *__pyx_v_ci) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getchunk (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_18getchunk(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), ((PyObject *)__pyx_v_ci));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":99
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":99
  *          return self.chunklen(k)
  * 
  *     def getchunk(self, ci):             # <<<<<<<<<<<<<<
@@ -23944,7 +22424,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_19getchunk(PyObject *__pyx_v_self, PyObje
  *         start = self.chunkpos(ci)
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_ci) {
+static PyObject *__pyx_pf_3_sa_6Phrase_9getchunk(PyObject *__pyx_v_self, PyObject *__pyx_v_ci); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_9getchunk(PyObject *__pyx_v_self, PyObject *__pyx_v_ci) {
   int __pyx_v_start;
   int __pyx_v_stop;
   PyObject *__pyx_v_chunk = NULL;
@@ -23957,9 +22438,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getchunk", 0);
+  __Pyx_RefNannySetupContext("getchunk");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":101
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":101
  *     def getchunk(self, ci):
  *         cdef int start, stop
  *         start = self.chunkpos(ci)             # <<<<<<<<<<<<<<
@@ -23967,9 +22448,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *
  *         chunk = []
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_ci); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_start = ((struct __pyx_vtabstruct_3_sa_Phrase *)__pyx_v_self->__pyx_vtab)->chunkpos(__pyx_v_self, __pyx_t_1);
+  __pyx_v_start = ((struct __pyx_vtabstruct_3_sa_Phrase *)((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->__pyx_vtab)->chunkpos(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), __pyx_t_1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":102
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":102
  *         cdef int start, stop
  *         start = self.chunkpos(ci)
  *         stop = start+self.chunklen(ci)             # <<<<<<<<<<<<<<
@@ -23977,9 +22458,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *
  *         for i from start <= i < stop:
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_ci); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_stop = (__pyx_v_start + ((struct __pyx_vtabstruct_3_sa_Phrase *)__pyx_v_self->__pyx_vtab)->chunklen(__pyx_v_self, __pyx_t_1));
+  __pyx_v_stop = (__pyx_v_start + ((struct __pyx_vtabstruct_3_sa_Phrase *)((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->__pyx_vtab)->chunklen(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), __pyx_t_1));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":103
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":103
  *         start = self.chunkpos(ci)
  *         stop = start+self.chunklen(ci)
  *         chunk = []             # <<<<<<<<<<<<<<
@@ -23987,11 +22468,11 @@ static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *
  *             chunk.append(self.syms[i])
  */
   __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __pyx_v_chunk = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":104
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":104
  *         stop = start+self.chunklen(ci)
  *         chunk = []
  *         for i from start <= i < stop:             # <<<<<<<<<<<<<<
@@ -24001,20 +22482,23 @@ static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *
   __pyx_t_1 = __pyx_v_stop;
   for (__pyx_v_i = __pyx_v_start; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":105
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":105
  *         chunk = []
  *         for i from start <= i < stop:
  *             chunk.append(self.syms[i])             # <<<<<<<<<<<<<<
  *         return chunk
  * 
  */
-    __pyx_t_2 = PyInt_FromLong((__pyx_v_self->syms[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(((PyObject *)__pyx_v_chunk) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
+    __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = PyList_Append(__pyx_v_chunk, __pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":106
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":106
  *         for i from start <= i < stop:
  *             chunk.append(self.syms[i])
  *         return chunk             # <<<<<<<<<<<<<<
@@ -24039,20 +22523,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_18getchunk(struct __pyx_obj_3_sa_Phrase *
   return __pyx_r;
 }
 
-/* Python wrapper */
-#if PY_MAJOR_VERSION < 3
-static int __pyx_pw_3_sa_6Phrase_21__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static int __pyx_pw_3_sa_6Phrase_21__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cmp__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_20__cmp__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), ((PyObject *)__pyx_v_other));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-#endif /*!(#if PY_MAJOR_VERSION < 3)*/
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":108
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":108
  *         return chunk
  * 
  *     def __cmp__(self, other):             # <<<<<<<<<<<<<<
@@ -24061,7 +22532,8 @@ static int __pyx_pw_3_sa_6Phrase_21__cmp__(PyObject *__pyx_v_self, PyObject *__p
  */
 
 #if PY_MAJOR_VERSION < 3
-static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_other) {
+static int __pyx_pf_3_sa_6Phrase_10__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static int __pyx_pf_3_sa_6Phrase_10__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   struct __pyx_obj_3_sa_Phrase *__pyx_v_otherp = 0;
   int __pyx_v_i;
   int __pyx_r;
@@ -24073,9 +22545,9 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cmp__", 0);
+  __Pyx_RefNannySetupContext("__cmp__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":111
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":111
  *         cdef Phrase otherp
  *         cdef int i
  *         otherp = other             # <<<<<<<<<<<<<<
@@ -24086,7 +22558,7 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   __Pyx_INCREF(__pyx_v_other);
   __pyx_v_otherp = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_other);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":112
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":112
  *         cdef int i
  *         otherp = other
  *         for i from 0 <= i < min(self.n, otherp.n):             # <<<<<<<<<<<<<<
@@ -24094,7 +22566,7 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  *                 return -1
  */
   __pyx_t_1 = __pyx_v_otherp->n;
-  __pyx_t_2 = __pyx_v_self->n;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   if ((__pyx_t_1 < __pyx_t_2)) {
     __pyx_t_3 = __pyx_t_1;
   } else {
@@ -24103,17 +22575,17 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
   __pyx_t_1 = __pyx_t_3;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":113
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":113
  *         otherp = other
  *         for i from 0 <= i < min(self.n, otherp.n):
  *             if self.syms[i] < otherp.syms[i]:             # <<<<<<<<<<<<<<
  *                 return -1
  *             elif self.syms[i] > otherp.syms[i]:
  */
-    __pyx_t_4 = ((__pyx_v_self->syms[__pyx_v_i]) < (__pyx_v_otherp->syms[__pyx_v_i]));
+    __pyx_t_4 = ((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]) < (__pyx_v_otherp->syms[__pyx_v_i]));
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":114
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":114
  *         for i from 0 <= i < min(self.n, otherp.n):
  *             if self.syms[i] < otherp.syms[i]:
  *                 return -1             # <<<<<<<<<<<<<<
@@ -24122,20 +22594,20 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  */
       __pyx_r = -1;
       goto __pyx_L0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":115
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":115
  *             if self.syms[i] < otherp.syms[i]:
  *                 return -1
  *             elif self.syms[i] > otherp.syms[i]:             # <<<<<<<<<<<<<<
  *                 return 1
  *         if self.n < otherp.n:
  */
-    __pyx_t_4 = ((__pyx_v_self->syms[__pyx_v_i]) > (__pyx_v_otherp->syms[__pyx_v_i]));
+    __pyx_t_4 = ((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]) > (__pyx_v_otherp->syms[__pyx_v_i]));
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":116
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":116
  *                 return -1
  *             elif self.syms[i] > otherp.syms[i]:
  *                 return 1             # <<<<<<<<<<<<<<
@@ -24144,22 +22616,22 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  */
       __pyx_r = 1;
       goto __pyx_L0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":117
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":117
  *             elif self.syms[i] > otherp.syms[i]:
  *                 return 1
  *         if self.n < otherp.n:             # <<<<<<<<<<<<<<
  *             return -1
  *         elif self.n > otherp.n:
  */
-  __pyx_t_4 = (__pyx_v_self->n < __pyx_v_otherp->n);
+  __pyx_t_4 = (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n < __pyx_v_otherp->n);
   if (__pyx_t_4) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":118
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":118
  *                 return 1
  *         if self.n < otherp.n:
  *             return -1             # <<<<<<<<<<<<<<
@@ -24168,20 +22640,20 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  */
     __pyx_r = -1;
     goto __pyx_L0;
-    goto __pyx_L6;
+    goto __pyx_L8;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":119
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":119
  *         if self.n < otherp.n:
  *             return -1
  *         elif self.n > otherp.n:             # <<<<<<<<<<<<<<
  *             return 1
  *         else:
  */
-  __pyx_t_4 = (__pyx_v_self->n > __pyx_v_otherp->n);
+  __pyx_t_4 = (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n > __pyx_v_otherp->n);
   if (__pyx_t_4) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":120
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":120
  *             return -1
  *         elif self.n > otherp.n:
  *             return 1             # <<<<<<<<<<<<<<
@@ -24190,11 +22662,11 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
  */
     __pyx_r = 1;
     goto __pyx_L0;
-    goto __pyx_L6;
+    goto __pyx_L8;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":122
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":122
  *             return 1
  *         else:
  *             return 0             # <<<<<<<<<<<<<<
@@ -24204,7 +22676,7 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
     __pyx_r = 0;
     goto __pyx_L0;
   }
-  __pyx_L6:;
+  __pyx_L8:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -24218,18 +22690,7 @@ static int __pyx_pf_3_sa_6Phrase_20__cmp__(struct __pyx_obj_3_sa_Phrase *__pyx_v
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* Python wrapper */
-static Py_hash_t __pyx_pw_3_sa_6Phrase_23__hash__(PyObject *__pyx_v_self); /*proto*/
-static Py_hash_t __pyx_pw_3_sa_6Phrase_23__hash__(PyObject *__pyx_v_self) {
-  Py_hash_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_22__hash__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":124
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":124
  *             return 0
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -24237,16 +22698,17 @@ static Py_hash_t __pyx_pw_3_sa_6Phrase_23__hash__(PyObject *__pyx_v_self) {
  *         cdef unsigned h
  */
 
-static Py_hash_t __pyx_pf_3_sa_6Phrase_22__hash__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static Py_hash_t __pyx_pf_3_sa_6Phrase_11__hash__(PyObject *__pyx_v_self); /*proto*/
+static Py_hash_t __pyx_pf_3_sa_6Phrase_11__hash__(PyObject *__pyx_v_self) {
   int __pyx_v_i;
   unsigned int __pyx_v_h;
   Py_hash_t __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("__hash__", 0);
+  __Pyx_RefNannySetupContext("__hash__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":127
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":127
  *         cdef int i
  *         cdef unsigned h
  *         h = 0             # <<<<<<<<<<<<<<
@@ -24255,51 +22717,51 @@ static Py_hash_t __pyx_pf_3_sa_6Phrase_22__hash__(struct __pyx_obj_3_sa_Phrase *
  */
   __pyx_v_h = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":128
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":128
  *         cdef unsigned h
  *         h = 0
  *         for i from 0 <= i < self.n:             # <<<<<<<<<<<<<<
  *             if self.syms[i] > 0:
  *                 h = (h << 1) + self.syms[i]
  */
-  __pyx_t_1 = __pyx_v_self->n;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":129
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":129
  *         h = 0
  *         for i from 0 <= i < self.n:
  *             if self.syms[i] > 0:             # <<<<<<<<<<<<<<
  *                 h = (h << 1) + self.syms[i]
  *             else:
  */
-    __pyx_t_2 = ((__pyx_v_self->syms[__pyx_v_i]) > 0);
+    __pyx_t_2 = ((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]) > 0);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":130
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":130
  *         for i from 0 <= i < self.n:
  *             if self.syms[i] > 0:
  *                 h = (h << 1) + self.syms[i]             # <<<<<<<<<<<<<<
  *             else:
  *                 h = (h << 1) + -self.syms[i]
  */
-      __pyx_v_h = ((__pyx_v_h << 1) + (__pyx_v_self->syms[__pyx_v_i]));
-      goto __pyx_L5;
+      __pyx_v_h = ((__pyx_v_h << 1) + (((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]));
+      goto __pyx_L7;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":132
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":132
  *                 h = (h << 1) + self.syms[i]
  *             else:
  *                 h = (h << 1) + -self.syms[i]             # <<<<<<<<<<<<<<
  *         return h
  * 
  */
-      __pyx_v_h = ((__pyx_v_h << 1) + (-(__pyx_v_self->syms[__pyx_v_i])));
+      __pyx_v_h = ((__pyx_v_h << 1) + (-(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i])));
     }
-    __pyx_L5:;
+    __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":133
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":133
  *             else:
  *                 h = (h << 1) + -self.syms[i]
  *         return h             # <<<<<<<<<<<<<<
@@ -24316,18 +22778,7 @@ static Py_hash_t __pyx_pf_3_sa_6Phrase_22__hash__(struct __pyx_obj_3_sa_Phrase *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_ssize_t __pyx_pw_3_sa_6Phrase_25__len__(PyObject *__pyx_v_self); /*proto*/
-static Py_ssize_t __pyx_pw_3_sa_6Phrase_25__len__(PyObject *__pyx_v_self) {
-  Py_ssize_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_24__len__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":135
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":135
  *         return h
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -24335,19 +22786,20 @@ static Py_ssize_t __pyx_pw_3_sa_6Phrase_25__len__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_ssize_t __pyx_pf_3_sa_6Phrase_24__len__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static Py_ssize_t __pyx_pf_3_sa_6Phrase_12__len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_pf_3_sa_6Phrase_12__len__(PyObject *__pyx_v_self) {
   Py_ssize_t __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__len__", 0);
+  __Pyx_RefNannySetupContext("__len__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":136
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":136
  * 
  *     def __len__(self):
  *         return self.n             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, i):
  */
-  __pyx_r = __pyx_v_self->n;
+  __pyx_r = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   goto __pyx_L0;
 
   __pyx_r = 0;
@@ -24356,18 +22808,7 @@ static Py_ssize_t __pyx_pf_3_sa_6Phrase_24__len__(struct __pyx_obj_3_sa_Phrase *
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_27__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_27__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_26__getitem__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":138
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":138
  *         return self.n
  * 
  *     def __getitem__(self, i):             # <<<<<<<<<<<<<<
@@ -24375,7 +22816,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_27__getitem__(PyObject *__pyx_v_self, PyO
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_26__getitem__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_6Phrase_13__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_13__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   Py_ssize_t __pyx_t_1;
@@ -24383,9 +22825,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_26__getitem__(struct __pyx_obj_3_sa_Phras
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__getitem__", 0);
+  __Pyx_RefNannySetupContext("__getitem__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":139
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":139
  * 
  *     def __getitem__(self, i):
  *         return self.syms[i]             # <<<<<<<<<<<<<<
@@ -24394,7 +22836,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_26__getitem__(struct __pyx_obj_3_sa_Phras
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->syms[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -24411,20 +22853,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_26__getitem__(struct __pyx_obj_3_sa_Phras
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static PyObject *__pyx_gb_3_sa_6Phrase_30generator2(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_29__iter__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_29__iter__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_28__iter__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+static PyObject *__pyx_gb_3_sa_6Phrase_15generator2(struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":141
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":141
  *         return self.syms[i]
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -24432,51 +22863,42 @@ static PyObject *__pyx_pw_3_sa_6Phrase_29__iter__(PyObject *__pyx_v_self) {
  *         for i from 0 <= i < self.n:
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_28__iter__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6Phrase_14__iter__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_14__iter__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__iter__", 0);
+  __Pyx_RefNannySetupContext("__iter__");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *)__pyx_ptype_3_sa___pyx_scope_struct_4___iter__->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_4___iter__, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_6Phrase_30generator2, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_6Phrase_15generator2;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.Phrase.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_6Phrase_30generator2(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_6Phrase_15generator2(struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -24486,24 +22908,24 @@ static PyObject *__pyx_gb_3_sa_6Phrase_30generator2(__pyx_GeneratorObject *__pyx
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":143
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":143
  *     def __iter__(self):
  *         cdef int i
  *         for i from 0 <= i < self.n:             # <<<<<<<<<<<<<<
  *             yield self.syms[i]
  * 
  */
-  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->n;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_cur_scope->__pyx_v_self)->n;
   for (__pyx_cur_scope->__pyx_v_i = 0; __pyx_cur_scope->__pyx_v_i < __pyx_t_1; __pyx_cur_scope->__pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":144
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":144
  *         cdef int i
  *         for i from 0 <= i < self.n:
  *             yield self.syms[i]             # <<<<<<<<<<<<<<
  * 
  *     def subst(self, start, children):
  */
-    __pyx_t_2 = PyInt_FromLong((__pyx_cur_scope->__pyx_v_self->syms[__pyx_cur_scope->__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_Phrase *)__pyx_cur_scope->__pyx_v_self)->syms[__pyx_cur_scope->__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -24511,58 +22933,74 @@ static PyObject *__pyx_gb_3_sa_6Phrase_30generator2(__pyx_GeneratorObject *__pyx
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_32subst(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_32subst(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":146
+ *             yield self.syms[i]
+ * 
+ *     def subst(self, start, children):             # <<<<<<<<<<<<<<
+ *         cdef int i
+ *         for i from 0 <= i < self.n:
+ */
+
+static PyObject *__pyx_pf_3_sa_6Phrase_16subst(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_16subst(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_start = 0;
   PyObject *__pyx_v_children = 0;
-  PyObject *__pyx_r = 0;
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("subst (wrapper)", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  long __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__children,0};
+  __Pyx_RefNannySetupContext("subst");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__children,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__children)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__children);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("subst", 1, 2, 2, 1); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "subst") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "subst") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -24581,62 +23019,36 @@ static PyObject *__pyx_pw_3_sa_6Phrase_32subst(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_6Phrase_31subst(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self), __pyx_v_start, __pyx_v_children);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":146
- *             yield self.syms[i]
- * 
- *     def subst(self, start, children):             # <<<<<<<<<<<<<<
- *         cdef int i
- *         for i from 0 <= i < self.n:
- */
-
-static PyObject *__pyx_pf_3_sa_6Phrase_31subst(struct __pyx_obj_3_sa_Phrase *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_children) {
-  int __pyx_v_i;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  long __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("subst", 0);
   __Pyx_INCREF(__pyx_v_start);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":148
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":148
  *     def subst(self, start, children):
  *         cdef int i
  *         for i from 0 <= i < self.n:             # <<<<<<<<<<<<<<
  *             if sym_isvar(self.syms[i]):
  *                 start = start + children[sym_getindex(self.syms[i])-1]
  */
-  __pyx_t_1 = __pyx_v_self->n;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":149
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":149
  *         cdef int i
  *         for i from 0 <= i < self.n:
  *             if sym_isvar(self.syms[i]):             # <<<<<<<<<<<<<<
  *                 start = start + children[sym_getindex(self.syms[i])-1]
  *             else:
  */
-    __pyx_t_2 = __pyx_f_3_sa_sym_isvar((__pyx_v_self->syms[__pyx_v_i]));
+    __pyx_t_2 = __pyx_f_3_sa_sym_isvar((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i]));
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":150
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":150
  *         for i from 0 <= i < self.n:
  *             if sym_isvar(self.syms[i]):
  *                 start = start + children[sym_getindex(self.syms[i])-1]             # <<<<<<<<<<<<<<
  *             else:
  *                 start = start + (self.syms[i],)
  */
-      __pyx_t_3 = (__pyx_f_3_sa_sym_getindex((__pyx_v_self->syms[__pyx_v_i])) - 1);
+      __pyx_t_3 = (__pyx_f_3_sa_sym_getindex((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i])) - 1);
       __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_children, __pyx_t_3, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = PyNumber_Add(__pyx_v_start, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -24645,21 +23057,21 @@ static PyObject *__pyx_pf_3_sa_6Phrase_31subst(struct __pyx_obj_3_sa_Phrase *__p
       __Pyx_DECREF(__pyx_v_start);
       __pyx_v_start = __pyx_t_5;
       __pyx_t_5 = 0;
-      goto __pyx_L5;
+      goto __pyx_L8;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":152
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":152
  *                 start = start + children[sym_getindex(self.syms[i])-1]
  *             else:
  *                 start = start + (self.syms[i],)             # <<<<<<<<<<<<<<
  *         return start
  * 
  */
-      __pyx_t_5 = PyInt_FromLong((__pyx_v_self->syms[__pyx_v_i])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyInt_FromLong((((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self)->syms[__pyx_v_i])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_5);
       __pyx_t_5 = 0;
@@ -24670,10 +23082,10 @@ static PyObject *__pyx_pf_3_sa_6Phrase_31subst(struct __pyx_obj_3_sa_Phrase *__p
       __pyx_v_start = __pyx_t_5;
       __pyx_t_5 = 0;
     }
-    __pyx_L5:;
+    __pyx_L8:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":153
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":153
  *             else:
  *                 start = start + (self.syms[i],)
  *         return start             # <<<<<<<<<<<<<<
@@ -24699,18 +23111,7 @@ static PyObject *__pyx_pf_3_sa_6Phrase_31subst(struct __pyx_obj_3_sa_Phrase *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_6Phrase_5words_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_6Phrase_5words_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_6Phrase_5words___get__(((struct __pyx_obj_3_sa_Phrase *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":156
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":156
  * 
  *     property words:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -24718,7 +23119,8 @@ static PyObject *__pyx_pw_3_sa_6Phrase_5words_1__get__(PyObject *__pyx_v_self) {
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(struct __pyx_obj_3_sa_Phrase *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_v_w = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -24732,9 +23134,9 @@ static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(struct __pyx_obj_3_sa_Phra
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":157
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":157
  *     property words:
  *         def __get__(self):
  *             return [sym_tostring(w) for w in self if not sym_isvar(w)]             # <<<<<<<<<<<<<<
@@ -24743,30 +23145,22 @@ static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(struct __pyx_obj_3_sa_Phra
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
-    __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) {
+    __pyx_t_2 = __pyx_v_self; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
   } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
+    if (PyList_CheckExact(__pyx_t_2)) {
       if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++;
+    } else if (PyTuple_CheckExact(__pyx_t_2)) {
       if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++;
     } else {
       __pyx_t_5 = __pyx_t_4(__pyx_t_2);
       if (unlikely(!__pyx_t_5)) {
@@ -24787,11 +23181,11 @@ static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(struct __pyx_obj_3_sa_Phra
       __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_w); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_5 = PyBytes_FromString(__pyx_f_3_sa_sym_tostring(__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-      if (unlikely(__Pyx_PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_INCREF(((PyObject *)__pyx_t_1));
@@ -24814,9 +23208,16 @@ static PyObject *__pyx_pf_3_sa_6Phrase_5words___get__(struct __pyx_obj_3_sa_Phra
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_4Rule_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_4Rule_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":161
+ * cdef class Rule:
+ * 
+ *     def __cinit__(self, int lhs, Phrase f, Phrase e, scores=None, word_alignments=None):             # <<<<<<<<<<<<<<
+ *         if not sym_isvar(lhs): raise Exception('Invalid LHS symbol: %d' % lhs)
+ *         self.lhs = lhs
+ */
+
+static int __pyx_pf_3_sa_4Rule___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_4Rule___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_lhs;
   struct __pyx_obj_3_sa_Phrase *__pyx_v_f = 0;
   struct __pyx_obj_3_sa_Phrase *__pyx_v_e = 0;
@@ -24824,24 +23225,21 @@ static int __pyx_pw_3_sa_4Rule_1__cinit__(PyObject *__pyx_v_self, PyObject *__py
   PyObject *__pyx_v_word_alignments = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lhs,&__pyx_n_s__f,&__pyx_n_s__e,&__pyx_n_s__scores,&__pyx_n_s__word_alignments,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lhs,&__pyx_n_s__f,&__pyx_n_s__e,&__pyx_n_s__scores,&__pyx_n_s__word_alignments,0};
     PyObject* values[5] = {0,0,0,0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":161
- * cdef class Rule:
- * 
- *     def __cinit__(self, int lhs, Phrase f, Phrase e, scores=None, word_alignments=None):             # <<<<<<<<<<<<<<
- *         if not sym_isvar(lhs): raise Exception('Invalid LHS symbol: %d' % lhs)
- *         self.lhs = lhs
- */
     values[3] = ((PyObject *)Py_None);
     values[4] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
@@ -24851,17 +23249,20 @@ static int __pyx_pw_3_sa_4Rule_1__cinit__(PyObject *__pyx_v_self, PyObject *__py
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lhs)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lhs);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__e)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__e);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
@@ -24877,7 +23278,7 @@ static int __pyx_pw_3_sa_4Rule_1__cinit__(PyObject *__pyx_v_self, PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -24906,27 +23307,8 @@ static int __pyx_pw_3_sa_4Rule_1__cinit__(PyObject *__pyx_v_self, PyObject *__py
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_3_sa_Phrase, 1, "f", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_e), __pyx_ptype_3_sa_Phrase, 1, "e", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_4Rule___cinit__(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self), __pyx_v_lhs, __pyx_v_f, __pyx_v_e, __pyx_v_scores, __pyx_v_word_alignments);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_self, int __pyx_v_lhs, struct __pyx_obj_3_sa_Phrase *__pyx_v_f, struct __pyx_obj_3_sa_Phrase *__pyx_v_e, PyObject *__pyx_v_scores, PyObject *__pyx_v_word_alignments) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":162
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":162
  * 
  *     def __cinit__(self, int lhs, Phrase f, Phrase e, scores=None, word_alignments=None):
  *         if not sym_isvar(lhs): raise Exception('Invalid LHS symbol: %d' % lhs)             # <<<<<<<<<<<<<<
@@ -24941,7 +23323,7 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
@@ -24951,20 +23333,20 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     {__pyx_filename = __pyx_f[7]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":163
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":163
  *     def __cinit__(self, int lhs, Phrase f, Phrase e, scores=None, word_alignments=None):
  *         if not sym_isvar(lhs): raise Exception('Invalid LHS symbol: %d' % lhs)
  *         self.lhs = lhs             # <<<<<<<<<<<<<<
  *         self.f = f
  *         self.e = e
  */
-  __pyx_v_self->lhs = __pyx_v_lhs;
+  ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->lhs = __pyx_v_lhs;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":164
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":164
  *         if not sym_isvar(lhs): raise Exception('Invalid LHS symbol: %d' % lhs)
  *         self.lhs = lhs
  *         self.f = f             # <<<<<<<<<<<<<<
@@ -24973,11 +23355,11 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
-  __Pyx_GOTREF(__pyx_v_self->f);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->f));
-  __pyx_v_self->f = __pyx_v_f;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f = __pyx_v_f;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":165
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":165
  *         self.lhs = lhs
  *         self.f = f
  *         self.e = e             # <<<<<<<<<<<<<<
@@ -24986,11 +23368,11 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_e));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_e));
-  __Pyx_GOTREF(__pyx_v_self->e);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->e));
-  __pyx_v_self->e = __pyx_v_e;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e = __pyx_v_e;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":166
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":166
  *         self.f = f
  *         self.e = e
  *         self.word_alignments = word_alignments             # <<<<<<<<<<<<<<
@@ -24999,11 +23381,11 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
  */
   __Pyx_INCREF(__pyx_v_word_alignments);
   __Pyx_GIVEREF(__pyx_v_word_alignments);
-  __Pyx_GOTREF(__pyx_v_self->word_alignments);
-  __Pyx_DECREF(__pyx_v_self->word_alignments);
-  __pyx_v_self->word_alignments = __pyx_v_word_alignments;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
+  ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments = __pyx_v_word_alignments;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":167
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":167
  *         self.e = e
  *         self.word_alignments = word_alignments
  *         self.scores = scores             # <<<<<<<<<<<<<<
@@ -25013,9 +23395,9 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
   if (!(likely(((__pyx_v_scores) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_scores, __pyx_ptype_3_sa_FeatureVector))))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_INCREF(__pyx_v_scores);
   __Pyx_GIVEREF(__pyx_v_scores);
-  __Pyx_GOTREF(__pyx_v_self->scores);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->scores));
-  __pyx_v_self->scores = ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_scores);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->scores);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->scores));
+  ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->scores = ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_scores);
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -25029,18 +23411,7 @@ static int __pyx_pf_3_sa_4Rule___cinit__(struct __pyx_obj_3_sa_Rule *__pyx_v_sel
   return __pyx_r;
 }
 
-/* Python wrapper */
-static Py_hash_t __pyx_pw_3_sa_4Rule_3__hash__(PyObject *__pyx_v_self); /*proto*/
-static Py_hash_t __pyx_pw_3_sa_4Rule_3__hash__(PyObject *__pyx_v_self) {
-  Py_hash_t __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_4Rule_2__hash__(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":169
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":169
  *         self.scores = scores
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -25048,7 +23419,8 @@ static Py_hash_t __pyx_pw_3_sa_4Rule_3__hash__(PyObject *__pyx_v_self) {
  * 
  */
 
-static Py_hash_t __pyx_pf_3_sa_4Rule_2__hash__(struct __pyx_obj_3_sa_Rule *__pyx_v_self) {
+static Py_hash_t __pyx_pf_3_sa_4Rule_1__hash__(PyObject *__pyx_v_self); /*proto*/
+static Py_hash_t __pyx_pf_3_sa_4Rule_1__hash__(PyObject *__pyx_v_self) {
   Py_hash_t __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -25057,27 +23429,27 @@ static Py_hash_t __pyx_pf_3_sa_4Rule_2__hash__(struct __pyx_obj_3_sa_Rule *__pyx
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__hash__", 0);
+  __Pyx_RefNannySetupContext("__hash__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":170
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":170
  * 
  *     def __hash__(self):
  *         return hash((self.lhs, self.f, self.e))             # <<<<<<<<<<<<<<
  * 
  *     def __cmp__(self, Rule other):
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->lhs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->lhs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->f));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->f));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->f));
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->e));
-  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_self->e));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->e));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
   __pyx_t_1 = 0;
   __pyx_t_3 = PyObject_Hash(((PyObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
@@ -25097,25 +23469,7 @@ static Py_hash_t __pyx_pf_3_sa_4Rule_2__hash__(struct __pyx_obj_3_sa_Rule *__pyx
   return __pyx_r;
 }
 
-/* Python wrapper */
-#if PY_MAJOR_VERSION < 3
-static int __pyx_pw_3_sa_4Rule_5__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static int __pyx_pw_3_sa_4Rule_5__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cmp__ (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_3_sa_Rule, 1, "other", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_4Rule_4__cmp__(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self), ((struct __pyx_obj_3_sa_Rule *)__pyx_v_other));
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-#endif /*!(#if PY_MAJOR_VERSION < 3)*/
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":172
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":172
  *         return hash((self.lhs, self.f, self.e))
  * 
  *     def __cmp__(self, Rule other):             # <<<<<<<<<<<<<<
@@ -25124,7 +23478,8 @@ static int __pyx_pw_3_sa_4Rule_5__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_
  */
 
 #if PY_MAJOR_VERSION < 3
-static int __pyx_pf_3_sa_4Rule_4__cmp__(struct __pyx_obj_3_sa_Rule *__pyx_v_self, struct __pyx_obj_3_sa_Rule *__pyx_v_other) {
+static int __pyx_pf_3_sa_4Rule_2__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static int __pyx_pf_3_sa_4Rule_2__cmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -25134,57 +23489,58 @@ static int __pyx_pf_3_sa_4Rule_4__cmp__(struct __pyx_obj_3_sa_Rule *__pyx_v_self
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cmp__", 0);
+  __Pyx_RefNannySetupContext("__cmp__");
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_3_sa_Rule, 1, "other", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":173
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":173
  * 
  *     def __cmp__(self, Rule other):
  *         return cmp((self.lhs, self.f, self.e, self.word_alignments),             # <<<<<<<<<<<<<<
  *                 (other.lhs, other.f, other.e, self.word_alignments))
  * 
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->lhs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->lhs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->f));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->f));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->f));
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->e));
-  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_self->e));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->e));
-  __Pyx_INCREF(__pyx_v_self->word_alignments);
-  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_self->word_alignments);
-  __Pyx_GIVEREF(__pyx_v_self->word_alignments);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
+  PyTuple_SET_ITEM(__pyx_t_2, 3, ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
+  __Pyx_GIVEREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":174
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":174
  *     def __cmp__(self, Rule other):
  *         return cmp((self.lhs, self.f, self.e, self.word_alignments),
  *                 (other.lhs, other.f, other.e, self.word_alignments))             # <<<<<<<<<<<<<<
  * 
  *     def fmerge(self, Phrase f):
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_other->lhs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->lhs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_other->f));
-  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_other->f));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_other->f));
-  __Pyx_INCREF(((PyObject *)__pyx_v_other->e));
-  PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_other->e));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_other->e));
-  __Pyx_INCREF(__pyx_v_self->word_alignments);
-  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_self->word_alignments);
-  __Pyx_GIVEREF(__pyx_v_self->word_alignments);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->f));
+  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->f));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->f));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->e));
+  PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->e));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_other)->e));
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
+  PyTuple_SET_ITEM(__pyx_t_3, 3, ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
+  __Pyx_GIVEREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->word_alignments);
   __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_2));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_t_3));
@@ -25213,23 +23569,7 @@ static int __pyx_pf_3_sa_4Rule_4__cmp__(struct __pyx_obj_3_sa_Rule *__pyx_v_self
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_4Rule_7fmerge(PyObject *__pyx_v_self, PyObject *__pyx_v_f); /*proto*/
-static PyObject *__pyx_pw_3_sa_4Rule_7fmerge(PyObject *__pyx_v_self, PyObject *__pyx_v_f) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("fmerge (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_3_sa_Phrase, 1, "f", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_4Rule_6fmerge(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self), ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_f));
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":176
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":176
  *                 (other.lhs, other.f, other.e, self.word_alignments))
  * 
  *     def fmerge(self, Phrase f):             # <<<<<<<<<<<<<<
@@ -25237,7 +23577,8 @@ static PyObject *__pyx_pw_3_sa_4Rule_7fmerge(PyObject *__pyx_v_self, PyObject *_
  *             self.f = f
  */
 
-static PyObject *__pyx_pf_3_sa_4Rule_6fmerge(struct __pyx_obj_3_sa_Rule *__pyx_v_self, struct __pyx_obj_3_sa_Phrase *__pyx_v_f) {
+static PyObject *__pyx_pf_3_sa_4Rule_3fmerge(PyObject *__pyx_v_self, PyObject *__pyx_v_f); /*proto*/
+static PyObject *__pyx_pf_3_sa_4Rule_3fmerge(PyObject *__pyx_v_self, PyObject *__pyx_v_f) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -25245,35 +23586,37 @@ static PyObject *__pyx_pf_3_sa_4Rule_6fmerge(struct __pyx_obj_3_sa_Rule *__pyx_v
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("fmerge", 0);
+  __Pyx_RefNannySetupContext("fmerge");
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_3_sa_Phrase, 1, "f", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":177
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":177
  * 
  *     def fmerge(self, Phrase f):
  *         if self.f == f:             # <<<<<<<<<<<<<<
  *             self.f = f
  * 
  */
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_self->f), ((PyObject *)__pyx_v_f), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f), __pyx_v_f, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":178
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":178
  *     def fmerge(self, Phrase f):
  *         if self.f == f:
  *             self.f = f             # <<<<<<<<<<<<<<
  * 
  *     def arity(self):
  */
-    __Pyx_INCREF(((PyObject *)__pyx_v_f));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
-    __Pyx_GOTREF(__pyx_v_self->f);
-    __Pyx_DECREF(((PyObject *)__pyx_v_self->f));
-    __pyx_v_self->f = __pyx_v_f;
-    goto __pyx_L3;
+    __Pyx_INCREF(__pyx_v_f);
+    __Pyx_GIVEREF(__pyx_v_f);
+    __Pyx_GOTREF(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f);
+    __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+    ((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f = ((struct __pyx_obj_3_sa_Phrase *)__pyx_v_f);
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -25287,18 +23630,7 @@ static PyObject *__pyx_pf_3_sa_4Rule_6fmerge(struct __pyx_obj_3_sa_Rule *__pyx_v
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_4Rule_9arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_4Rule_9arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("arity (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_4Rule_8arity(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":180
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":180
  *             self.f = f
  * 
  *     def arity(self):             # <<<<<<<<<<<<<<
@@ -25306,7 +23638,8 @@ static PyObject *__pyx_pw_3_sa_4Rule_9arity(PyObject *__pyx_v_self, CYTHON_UNUSE
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_4Rule_8arity(struct __pyx_obj_3_sa_Rule *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_4Rule_4arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_4Rule_4arity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -25314,9 +23647,9 @@ static PyObject *__pyx_pf_3_sa_4Rule_8arity(struct __pyx_obj_3_sa_Rule *__pyx_v_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("arity", 0);
+  __Pyx_RefNannySetupContext("arity");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":181
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":181
  * 
  *     def arity(self):
  *         return self.f.arity()             # <<<<<<<<<<<<<<
@@ -25324,7 +23657,7 @@ static PyObject *__pyx_pf_3_sa_4Rule_8arity(struct __pyx_obj_3_sa_Rule *__pyx_v_
  *     def __str__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->f), __pyx_n_s__arity); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f), __pyx_n_s__arity); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
@@ -25345,20 +23678,9 @@ static PyObject *__pyx_pf_3_sa_4Rule_8arity(struct __pyx_obj_3_sa_Rule *__pyx_v_
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
+static PyObject *__pyx_gb_3_sa_7__str___1generator7(struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_4Rule_11__str__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_4Rule_11__str__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_4Rule_10__str__(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":187
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":187
  *         fields = [sym_tostring(self.lhs), str(self.f), str(self.e), str(self.scores)]
  *         if self.word_alignments is not None:
  *             fields.append(' '.join('%d-%d' % a for a in self.alignments()))             # <<<<<<<<<<<<<<
@@ -25366,53 +23688,45 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_4Rule_7__str___genexpr(PyObject *__pyx_self) {
+static PyObject *__pyx_pf_3_sa_7__str___genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_7__str___genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("genexpr", 0);
+  __Pyx_RefNannySetupContext("genexpr");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *)__pyx_ptype_3_sa___pyx_scope_struct_6_genexpr->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_6_genexpr, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
-  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *) __pyx_self;
+  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *)__pyx_self;
   __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_4Rule_7__str___2generator7, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_self = __pyx_self;
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_7__str___1generator7;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.Rule.__str__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_7__str___1generator7(struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   Py_ssize_t __pyx_t_3;
   PyObject *(*__pyx_t_4)(PyObject *);
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -25421,8 +23735,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
   }
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self), __pyx_n_s__alignments); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }__pyx_t_1 = PyObject_GetAttr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self, __pyx_n_s__alignments); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
@@ -25437,20 +23750,12 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++;
     } else {
       __pyx_t_2 = __pyx_t_4(__pyx_t_1);
       if (unlikely(!__pyx_t_2)) {
@@ -25478,7 +23783,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
@@ -25489,7 +23794,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -25497,13 +23802,12 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
   __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":183
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":183
  *         return self.f.arity()
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -25511,7 +23815,8 @@ static PyObject *__pyx_gb_3_sa_4Rule_7__str___2generator7(__pyx_GeneratorObject
  *         fields = [sym_tostring(self.lhs), str(self.f), str(self.e), str(self.scores)]
  */
 
-static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_4Rule_5__str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_4Rule_5__str__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *__pyx_cur_scope;
   PyObject *__pyx_v_fields = NULL;
   PyObject *__pyx_r = NULL;
@@ -25526,52 +23831,52 @@ static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__str__", 0);
+  __Pyx_RefNannySetupContext("__str__");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *)__pyx_ptype_3_sa___pyx_scope_struct_5___str__->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_5___str__, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":185
  *     def __str__(self):
  *         cdef unsigned i
  *         fields = [sym_tostring(self.lhs), str(self.f), str(self.e), str(self.scores)]             # <<<<<<<<<<<<<<
  *         if self.word_alignments is not None:
  *             fields.append(' '.join('%d-%d' % a for a in self.alignments()))
  */
-  __pyx_t_1 = PyBytes_FromString(__pyx_f_3_sa_sym_tostring(__pyx_cur_scope->__pyx_v_self->lhs)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyBytes_FromString(__pyx_f_3_sa_sym_tostring(((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->lhs)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->f));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_cur_scope->__pyx_v_self->f));
-  __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->f));
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->f));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->f));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->f));
   __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->e));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_cur_scope->__pyx_v_self->e));
-  __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->e));
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->e));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->e));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->e));
   __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->scores));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_cur_scope->__pyx_v_self->scores));
-  __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->scores));
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->scores));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->scores));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->scores));
   __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __pyx_t_2 = PyList_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
   PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
@@ -25587,29 +23892,32 @@ static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx
   __pyx_v_fields = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":186
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":186
  *         cdef unsigned i
  *         fields = [sym_tostring(self.lhs), str(self.f), str(self.e), str(self.scores)]
  *         if self.word_alignments is not None:             # <<<<<<<<<<<<<<
  *             fields.append(' '.join('%d-%d' % a for a in self.alignments()))
  *         return ' ||| '.join(fields)
  */
-  __pyx_t_6 = (__pyx_cur_scope->__pyx_v_self->word_alignments != Py_None);
+  __pyx_t_6 = (((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->word_alignments != Py_None);
   if (__pyx_t_6) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":187
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":187
  *         fields = [sym_tostring(self.lhs), str(self.f), str(self.e), str(self.scores)]
  *         if self.word_alignments is not None:
  *             fields.append(' '.join('%d-%d' % a for a in self.alignments()))             # <<<<<<<<<<<<<<
  *         return ' ||| '.join(fields)
  * 
  */
+    if (unlikely(((PyObject *)__pyx_v_fields) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_67), __pyx_n_s__join); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = __pyx_pf_3_sa_4Rule_7__str___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_pf_3_sa_7__str___genexpr(((PyObject*)__pyx_cur_scope), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __pyx_t_5 = 0;
@@ -25619,11 +23927,11 @@ static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __pyx_t_7 = PyList_Append(__pyx_v_fields, __pyx_t_5); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":188
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":188
  *         if self.word_alignments is not None:
  *             fields.append(' '.join('%d-%d' % a for a in self.alignments()))
  *         return ' ||| '.join(fields)             # <<<<<<<<<<<<<<
@@ -25634,7 +23942,7 @@ static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx
   __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_18), __pyx_n_s__join); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   __Pyx_INCREF(((PyObject *)__pyx_v_fields));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_fields));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_fields));
@@ -25663,20 +23971,9 @@ static PyObject *__pyx_pf_3_sa_4Rule_10__str__(struct __pyx_obj_3_sa_Rule *__pyx
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_4Rule_13alignments(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_4Rule_13alignments(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("alignments (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_4Rule_12alignments(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+static PyObject *__pyx_gb_3_sa_4Rule_7generator3(struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":190
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":190
  *         return ' ||| '.join(fields)
  * 
  *     def alignments(self):             # <<<<<<<<<<<<<<
@@ -25684,45 +23981,36 @@ static PyObject *__pyx_pw_3_sa_4Rule_13alignments(PyObject *__pyx_v_self, CYTHON
  *             yield point/65536, point%65536
  */
 
-static PyObject *__pyx_pf_3_sa_4Rule_12alignments(struct __pyx_obj_3_sa_Rule *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_4Rule_6alignments(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_4Rule_6alignments(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("alignments", 0);
+  __Pyx_RefNannySetupContext("alignments");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *)__pyx_ptype_3_sa___pyx_scope_struct_7_alignments->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_7_alignments, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_4Rule_14generator3, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_4Rule_7generator3;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.Rule.alignments", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_4Rule_7generator3(struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   PyObject *__pyx_t_1 = NULL;
   Py_ssize_t __pyx_t_2;
@@ -25731,8 +24019,8 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -25742,35 +24030,27 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":191
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":191
  * 
  *     def alignments(self):
  *         for point in self.word_alignments:             # <<<<<<<<<<<<<<
  *             yield point/65536, point%65536
  */
-  if (PyList_CheckExact(__pyx_cur_scope->__pyx_v_self->word_alignments) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_self->word_alignments)) {
-    __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->word_alignments; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
+  if (PyList_CheckExact(((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->word_alignments) || PyTuple_CheckExact(((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->word_alignments)) {
+    __pyx_t_1 = ((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->word_alignments; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_self->word_alignments); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((struct __pyx_obj_3_sa_Rule *)__pyx_cur_scope->__pyx_v_self)->word_alignments); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -25788,7 +24068,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
     __pyx_cur_scope->__pyx_v_point = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rule.pxi":192
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rule.pxi":192
  *     def alignments(self):
  *         for point in self.word_alignments:
  *             yield point/65536, point%65536             # <<<<<<<<<<<<<<
@@ -25798,7 +24078,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
     __pyx_t_5 = PyNumber_Remainder(__pyx_cur_scope->__pyx_v_point, __pyx_int_65536); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
@@ -25814,7 +24094,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
@@ -25825,7 +24105,7 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -25835,23 +24115,11 @@ static PyObject *__pyx_gb_3_sa_4Rule_14generator3(__pyx_GeneratorObject *__pyx_g
   __Pyx_AddTraceback("alignments", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_4Rule_1f_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_4Rule_1f_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_4Rule_1f___get__(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
 /* "_sa.pxd":37
  * cdef class Rule:
  *     cdef int lhs
@@ -25860,13 +24128,14 @@ static PyObject *__pyx_pw_3_sa_4Rule_1f_1__get__(PyObject *__pyx_v_self) {
  *     cdef int n_scores
  */
 
-static PyObject *__pyx_pf_3_sa_4Rule_1f___get__(struct __pyx_obj_3_sa_Rule *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_4Rule_1f___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_4Rule_1f___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->f));
-  __pyx_r = ((PyObject *)__pyx_v_self->f);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->f);
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -25876,24 +24145,14 @@ static PyObject *__pyx_pf_3_sa_4Rule_1f___get__(struct __pyx_obj_3_sa_Rule *__py
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_4Rule_1e_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_4Rule_1e_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_4Rule_1e___get__(((struct __pyx_obj_3_sa_Rule *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_3_sa_4Rule_1e___get__(struct __pyx_obj_3_sa_Rule *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_4Rule_1e___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_4Rule_1e___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->e));
-  __pyx_r = ((PyObject *)__pyx_v_self->e);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_3_sa_Rule *)__pyx_v_self)->e);
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -25903,7 +24162,7 @@ static PyObject *__pyx_pf_3_sa_4Rule_1e___get__(struct __pyx_obj_3_sa_Rule *__py
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":21
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":21
  *     int arr_len
  * 
  * cdef _Trie_Node* new_trie_node():             # <<<<<<<<<<<<<<
@@ -25915,9 +24174,9 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_new_trie_node(void) {
   struct __pyx_t_3_sa__Trie_Node *__pyx_v_node;
   struct __pyx_t_3_sa__Trie_Node *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("new_trie_node", 0);
+  __Pyx_RefNannySetupContext("new_trie_node");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":23
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":23
  * cdef _Trie_Node* new_trie_node():
  *     cdef _Trie_Node* node
  *     node = <_Trie_Node*> malloc(sizeof(_Trie_Node))             # <<<<<<<<<<<<<<
@@ -25926,7 +24185,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_new_trie_node(void) {
  */
   __pyx_v_node = ((struct __pyx_t_3_sa__Trie_Node *)malloc((sizeof(struct __pyx_t_3_sa__Trie_Node))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":24
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":24
  *     cdef _Trie_Node* node
  *     node = <_Trie_Node*> malloc(sizeof(_Trie_Node))
  *     node.root = NULL             # <<<<<<<<<<<<<<
@@ -25935,7 +24194,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_new_trie_node(void) {
  */
   __pyx_v_node->root = NULL;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":25
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":25
  *     node = <_Trie_Node*> malloc(sizeof(_Trie_Node))
  *     node.root = NULL
  *     node.arr_len = 0             # <<<<<<<<<<<<<<
@@ -25944,7 +24203,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_new_trie_node(void) {
  */
   __pyx_v_node->arr_len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":26
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":26
  *     node.root = NULL
  *     node.arr_len = 0
  *     node.arr = <int*> malloc(sizeof(0*sizeof(int)))             # <<<<<<<<<<<<<<
@@ -25953,7 +24212,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_new_trie_node(void) {
  */
   __pyx_v_node->arr = ((int *)malloc((sizeof((0 * (sizeof(int)))))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":27
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":27
  *     node.arr_len = 0
  *     node.arr = <int*> malloc(sizeof(0*sizeof(int)))
  *     return node             # <<<<<<<<<<<<<<
@@ -25969,7 +24228,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_new_trie_node(void) {
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":29
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":29
  *     return node
  * 
  * cdef _Trie_Edge* new_trie_edge(int val):             # <<<<<<<<<<<<<<
@@ -25981,9 +24240,9 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
   struct __pyx_t_3_sa__Trie_Edge *__pyx_v_edge;
   struct __pyx_t_3_sa__Trie_Edge *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("new_trie_edge", 0);
+  __Pyx_RefNannySetupContext("new_trie_edge");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":31
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":31
  * cdef _Trie_Edge* new_trie_edge(int val):
  *     cdef _Trie_Edge* edge
  *     edge = <_Trie_Edge*> malloc(sizeof(_Trie_Edge))             # <<<<<<<<<<<<<<
@@ -25992,7 +24251,7 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
  */
   __pyx_v_edge = ((struct __pyx_t_3_sa__Trie_Edge *)malloc((sizeof(struct __pyx_t_3_sa__Trie_Edge))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":32
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":32
  *     cdef _Trie_Edge* edge
  *     edge = <_Trie_Edge*> malloc(sizeof(_Trie_Edge))
  *     edge.node = new_trie_node()             # <<<<<<<<<<<<<<
@@ -26001,7 +24260,7 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
  */
   __pyx_v_edge->node = __pyx_f_3_sa_new_trie_node();
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":33
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":33
  *     edge = <_Trie_Edge*> malloc(sizeof(_Trie_Edge))
  *     edge.node = new_trie_node()
  *     edge.bigger = NULL             # <<<<<<<<<<<<<<
@@ -26010,7 +24269,7 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
  */
   __pyx_v_edge->bigger = NULL;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":34
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":34
  *     edge.node = new_trie_node()
  *     edge.bigger = NULL
  *     edge.smaller = NULL             # <<<<<<<<<<<<<<
@@ -26019,7 +24278,7 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
  */
   __pyx_v_edge->smaller = NULL;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":35
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":35
  *     edge.bigger = NULL
  *     edge.smaller = NULL
  *     edge.val = val             # <<<<<<<<<<<<<<
@@ -26028,7 +24287,7 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
  */
   __pyx_v_edge->val = __pyx_v_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":36
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":36
  *     edge.smaller = NULL
  *     edge.val = val
  *     return edge             # <<<<<<<<<<<<<<
@@ -26044,7 +24303,7 @@ static struct __pyx_t_3_sa__Trie_Edge *__pyx_f_3_sa_new_trie_edge(int __pyx_v_va
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":38
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":38
  *     return edge
  * 
  * cdef free_trie_node(_Trie_Node* node):             # <<<<<<<<<<<<<<
@@ -26060,9 +24319,9 @@ static PyObject *__pyx_f_3_sa_free_trie_node(struct __pyx_t_3_sa__Trie_Node *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("free_trie_node", 0);
+  __Pyx_RefNannySetupContext("free_trie_node");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":39
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":39
  * 
  * cdef free_trie_node(_Trie_Node* node):
  *     if node != NULL:             # <<<<<<<<<<<<<<
@@ -26072,7 +24331,7 @@ static PyObject *__pyx_f_3_sa_free_trie_node(struct __pyx_t_3_sa__Trie_Node *__p
   __pyx_t_1 = (__pyx_v_node != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":40
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":40
  * cdef free_trie_node(_Trie_Node* node):
  *     if node != NULL:
  *         free_trie_edge(node.root)             # <<<<<<<<<<<<<<
@@ -26083,7 +24342,7 @@ static PyObject *__pyx_f_3_sa_free_trie_node(struct __pyx_t_3_sa__Trie_Node *__p
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":41
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":41
  *     if node != NULL:
  *         free_trie_edge(node.root)
  *         free(node.arr)             # <<<<<<<<<<<<<<
@@ -26107,7 +24366,7 @@ static PyObject *__pyx_f_3_sa_free_trie_node(struct __pyx_t_3_sa__Trie_Node *__p
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":43
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":43
  *         free(node.arr)
  * 
  * cdef free_trie_edge(_Trie_Edge* edge):             # <<<<<<<<<<<<<<
@@ -26123,9 +24382,9 @@ static PyObject *__pyx_f_3_sa_free_trie_edge(struct __pyx_t_3_sa__Trie_Edge *__p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("free_trie_edge", 0);
+  __Pyx_RefNannySetupContext("free_trie_edge");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":44
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":44
  * 
  * cdef free_trie_edge(_Trie_Edge* edge):
  *     if edge != NULL:             # <<<<<<<<<<<<<<
@@ -26135,7 +24394,7 @@ static PyObject *__pyx_f_3_sa_free_trie_edge(struct __pyx_t_3_sa__Trie_Edge *__p
   __pyx_t_1 = (__pyx_v_edge != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":45
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":45
  * cdef free_trie_edge(_Trie_Edge* edge):
  *     if edge != NULL:
  *         free_trie_node(edge.node)             # <<<<<<<<<<<<<<
@@ -26146,7 +24405,7 @@ static PyObject *__pyx_f_3_sa_free_trie_edge(struct __pyx_t_3_sa__Trie_Edge *__p
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":46
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":46
  *     if edge != NULL:
  *         free_trie_node(edge.node)
  *         free_trie_edge(edge.bigger)             # <<<<<<<<<<<<<<
@@ -26157,7 +24416,7 @@ static PyObject *__pyx_f_3_sa_free_trie_edge(struct __pyx_t_3_sa__Trie_Edge *__p
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":47
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":47
  *         free_trie_node(edge.node)
  *         free_trie_edge(edge.bigger)
  *         free_trie_edge(edge.smaller)             # <<<<<<<<<<<<<<
@@ -26183,7 +24442,7 @@ static PyObject *__pyx_f_3_sa_free_trie_edge(struct __pyx_t_3_sa__Trie_Edge *__p
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":49
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":49
  *         free_trie_edge(edge.smaller)
  * 
  * cdef _Trie_Node* trie_find(_Trie_Node* node, int val):             # <<<<<<<<<<<<<<
@@ -26198,9 +24457,9 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("trie_find", 0);
+  __Pyx_RefNannySetupContext("trie_find");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":51
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":51
  * cdef _Trie_Node* trie_find(_Trie_Node* node, int val):
  *     cdef _Trie_Edge* cur
  *     cur = node.root             # <<<<<<<<<<<<<<
@@ -26209,7 +24468,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
  */
   __pyx_v_cur = __pyx_v_node->root;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":52
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":52
  *     cdef _Trie_Edge* cur
  *     cur = node.root
  *     while cur != NULL and cur.val != val:             # <<<<<<<<<<<<<<
@@ -26226,7 +24485,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
     }
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":53
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":53
  *     cur = node.root
  *     while cur != NULL and cur.val != val:
  *         if val > cur.val:             # <<<<<<<<<<<<<<
@@ -26236,7 +24495,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
     __pyx_t_3 = (__pyx_v_val > __pyx_v_cur->val);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":54
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":54
  *     while cur != NULL and cur.val != val:
  *         if val > cur.val:
  *             cur = cur.bigger             # <<<<<<<<<<<<<<
@@ -26247,7 +24506,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
       goto __pyx_L5;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":55
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":55
  *         if val > cur.val:
  *             cur = cur.bigger
  *         elif val < cur.val:             # <<<<<<<<<<<<<<
@@ -26257,7 +24516,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
     __pyx_t_3 = (__pyx_v_val < __pyx_v_cur->val);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":56
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":56
  *             cur = cur.bigger
  *         elif val < cur.val:
  *             cur = cur.smaller             # <<<<<<<<<<<<<<
@@ -26270,7 +24529,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
     __pyx_L5:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":57
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":57
  *         elif val < cur.val:
  *             cur = cur.smaller
  *     if cur == NULL:             # <<<<<<<<<<<<<<
@@ -26280,7 +24539,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
   __pyx_t_3 = (__pyx_v_cur == NULL);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":58
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":58
  *             cur = cur.smaller
  *     if cur == NULL:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -26293,7 +24552,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":60
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":60
  *         return NULL
  *     else:
  *         return cur.node             # <<<<<<<<<<<<<<
@@ -26311,7 +24570,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_find(struct __pyx_t_3_s
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":62
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":62
  *         return cur.node
  * 
  * cdef trie_node_data_append(_Trie_Node* node, int val):             # <<<<<<<<<<<<<<
@@ -26323,9 +24582,9 @@ static PyObject *__pyx_f_3_sa_trie_node_data_append(struct __pyx_t_3_sa__Trie_No
   int __pyx_v_new_len;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("trie_node_data_append", 0);
+  __Pyx_RefNannySetupContext("trie_node_data_append");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":64
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":64
  * cdef trie_node_data_append(_Trie_Node* node, int val):
  *     cdef int new_len
  *     new_len = node.arr_len + 1             # <<<<<<<<<<<<<<
@@ -26334,7 +24593,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_append(struct __pyx_t_3_sa__Trie_No
  */
   __pyx_v_new_len = (__pyx_v_node->arr_len + 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":65
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":65
  *     cdef int new_len
  *     new_len = node.arr_len + 1
  *     node.arr = <int*> realloc(node.arr, new_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -26343,7 +24602,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_append(struct __pyx_t_3_sa__Trie_No
  */
   __pyx_v_node->arr = ((int *)realloc(__pyx_v_node->arr, (__pyx_v_new_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":66
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":66
  *     new_len = node.arr_len + 1
  *     node.arr = <int*> realloc(node.arr, new_len*sizeof(int))
  *     node.arr[node.arr_len] = val             # <<<<<<<<<<<<<<
@@ -26352,7 +24611,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_append(struct __pyx_t_3_sa__Trie_No
  */
   (__pyx_v_node->arr[__pyx_v_node->arr_len]) = __pyx_v_val;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":67
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":67
  *     node.arr = <int*> realloc(node.arr, new_len*sizeof(int))
  *     node.arr[node.arr_len] = val
  *     node.arr_len = new_len             # <<<<<<<<<<<<<<
@@ -26367,7 +24626,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_append(struct __pyx_t_3_sa__Trie_No
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":69
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":69
  *     node.arr_len = new_len
  * 
  * cdef trie_node_data_extend(_Trie_Node* node, int* vals, int num_vals):             # <<<<<<<<<<<<<<
@@ -26379,9 +24638,9 @@ static PyObject *__pyx_f_3_sa_trie_node_data_extend(struct __pyx_t_3_sa__Trie_No
   int __pyx_v_new_len;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("trie_node_data_extend", 0);
+  __Pyx_RefNannySetupContext("trie_node_data_extend");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":71
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":71
  * cdef trie_node_data_extend(_Trie_Node* node, int* vals, int num_vals):
  *     cdef int new_len
  *     new_len = node.arr_len + num_vals             # <<<<<<<<<<<<<<
@@ -26390,7 +24649,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_extend(struct __pyx_t_3_sa__Trie_No
  */
   __pyx_v_new_len = (__pyx_v_node->arr_len + __pyx_v_num_vals);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":72
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":72
  *     cdef int new_len
  *     new_len = node.arr_len + num_vals
  *     node.arr = <int*> realloc(node.arr, new_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -26399,7 +24658,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_extend(struct __pyx_t_3_sa__Trie_No
  */
   __pyx_v_node->arr = ((int *)realloc(__pyx_v_node->arr, (__pyx_v_new_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":73
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":73
  *     new_len = node.arr_len + num_vals
  *     node.arr = <int*> realloc(node.arr, new_len*sizeof(int))
  *     memcpy(node.arr + node.arr_len, vals, num_vals*sizeof(int))             # <<<<<<<<<<<<<<
@@ -26408,7 +24667,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_extend(struct __pyx_t_3_sa__Trie_No
  */
   memcpy((__pyx_v_node->arr + __pyx_v_node->arr_len), __pyx_v_vals, (__pyx_v_num_vals * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":74
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":74
  *     node.arr = <int*> realloc(node.arr, new_len*sizeof(int))
  *     memcpy(node.arr + node.arr_len, vals, num_vals*sizeof(int))
  *     node.arr_len = new_len             # <<<<<<<<<<<<<<
@@ -26423,7 +24682,7 @@ static PyObject *__pyx_f_3_sa_trie_node_data_extend(struct __pyx_t_3_sa__Trie_No
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":77
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":77
  * 
  * 
  * cdef _Trie_Node* trie_insert(_Trie_Node* node, int val):             # <<<<<<<<<<<<<<
@@ -26438,9 +24697,9 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("trie_insert", 0);
+  __Pyx_RefNannySetupContext("trie_insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":79
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":79
  * cdef _Trie_Node* trie_insert(_Trie_Node* node, int val):
  *     cdef _Trie_Edge** cur
  *     cur = &node.root             # <<<<<<<<<<<<<<
@@ -26449,7 +24708,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
  */
   __pyx_v_cur = (&__pyx_v_node->root);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":80
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":80
  *     cdef _Trie_Edge** cur
  *     cur = &node.root
  *     while cur[0] != NULL and cur[0].val != val:             # <<<<<<<<<<<<<<
@@ -26466,7 +24725,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
     }
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":81
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":81
  *     cur = &node.root
  *     while cur[0] != NULL and cur[0].val != val:
  *         if val > cur[0].val:             # <<<<<<<<<<<<<<
@@ -26476,7 +24735,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
     __pyx_t_3 = (__pyx_v_val > (__pyx_v_cur[0])->val);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":82
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":82
  *     while cur[0] != NULL and cur[0].val != val:
  *         if val > cur[0].val:
  *             cur = &cur[0].bigger             # <<<<<<<<<<<<<<
@@ -26487,7 +24746,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
       goto __pyx_L5;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":83
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":83
  *         if val > cur[0].val:
  *             cur = &cur[0].bigger
  *         elif val < cur[0].val:             # <<<<<<<<<<<<<<
@@ -26497,7 +24756,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
     __pyx_t_3 = (__pyx_v_val < (__pyx_v_cur[0])->val);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":84
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":84
  *             cur = &cur[0].bigger
  *         elif val < cur[0].val:
  *             cur = &cur[0].smaller             # <<<<<<<<<<<<<<
@@ -26510,7 +24769,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
     __pyx_L5:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":85
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":85
  *         elif val < cur[0].val:
  *             cur = &cur[0].smaller
  *     if cur[0] == NULL:             # <<<<<<<<<<<<<<
@@ -26520,7 +24779,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
   __pyx_t_3 = ((__pyx_v_cur[0]) == NULL);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":86
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":86
  *             cur = &cur[0].smaller
  *     if cur[0] == NULL:
  *         cur[0] = new_trie_edge(val)             # <<<<<<<<<<<<<<
@@ -26532,7 +24791,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
   }
   __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":87
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":87
  *     if cur[0] == NULL:
  *         cur[0] = new_trie_edge(val)
  *     return cur[0].node             # <<<<<<<<<<<<<<
@@ -26548,7 +24807,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_trie_insert(struct __pyx_t_3
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":89
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":89
  *     return cur[0].node
  * 
  * cdef trie_node_to_map(_Trie_Node* node, result, prefix, int include_zeros):             # <<<<<<<<<<<<<<
@@ -26566,9 +24825,9 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("trie_node_to_map", 0);
+  __Pyx_RefNannySetupContext("trie_node_to_map");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":92
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":92
  *     cdef IntList arr
  * 
  *     if include_zeros or node.arr_len > 0:             # <<<<<<<<<<<<<<
@@ -26583,7 +24842,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
   }
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":93
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":93
  * 
  *     if include_zeros or node.arr_len > 0:
  *         arr = IntList()             # <<<<<<<<<<<<<<
@@ -26595,7 +24854,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
     __pyx_v_arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":94
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":94
  *     if include_zeros or node.arr_len > 0:
  *         arr = IntList()
  *         free(arr.arr)             # <<<<<<<<<<<<<<
@@ -26604,7 +24863,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
  */
     free(__pyx_v_arr->arr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":95
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":95
  *         arr = IntList()
  *         free(arr.arr)
  *         arr.arr = <int*> malloc(node.arr_len * sizeof(int))             # <<<<<<<<<<<<<<
@@ -26613,7 +24872,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
  */
     __pyx_v_arr->arr = ((int *)malloc((__pyx_v_node->arr_len * (sizeof(int)))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":96
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":96
  *         free(arr.arr)
  *         arr.arr = <int*> malloc(node.arr_len * sizeof(int))
  *         memcpy(arr.arr, node.arr, node.arr_len * sizeof(int))             # <<<<<<<<<<<<<<
@@ -26622,7 +24881,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
  */
     memcpy(__pyx_v_arr->arr, __pyx_v_node->arr, (__pyx_v_node->arr_len * (sizeof(int))));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":97
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":97
  *         arr.arr = <int*> malloc(node.arr_len * sizeof(int))
  *         memcpy(arr.arr, node.arr, node.arr_len * sizeof(int))
  *         arr.len = node.arr_len             # <<<<<<<<<<<<<<
@@ -26631,7 +24890,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
  */
     __pyx_v_arr->len = __pyx_v_node->arr_len;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":98
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":98
  *         memcpy(arr.arr, node.arr, node.arr_len * sizeof(int))
  *         arr.len = node.arr_len
  *         arr.size = node.arr_len             # <<<<<<<<<<<<<<
@@ -26640,7 +24899,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
  */
     __pyx_v_arr->size = __pyx_v_node->arr_len;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":99
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":99
  *         arr.len = node.arr_len
  *         arr.size = node.arr_len
  *         result[prefix] = arr             # <<<<<<<<<<<<<<
@@ -26652,7 +24911,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":100
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":100
  *         arr.size = node.arr_len
  *         result[prefix] = arr
  *     trie_edge_to_map(node.root, result, prefix, include_zeros)             # <<<<<<<<<<<<<<
@@ -26676,7 +24935,7 @@ static PyObject *__pyx_f_3_sa_trie_node_to_map(struct __pyx_t_3_sa__Trie_Node *_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":102
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":102
  *     trie_edge_to_map(node.root, result, prefix, include_zeros)
  * 
  * cdef trie_edge_to_map(_Trie_Edge* edge, result, prefix, int include_zeros):             # <<<<<<<<<<<<<<
@@ -26693,10 +24952,10 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("trie_edge_to_map", 0);
+  __Pyx_RefNannySetupContext("trie_edge_to_map");
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":103
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":103
  * 
  * cdef trie_edge_to_map(_Trie_Edge* edge, result, prefix, int include_zeros):
  *     if edge != NULL:             # <<<<<<<<<<<<<<
@@ -26706,7 +24965,7 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
   __pyx_t_1 = (__pyx_v_edge != NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":104
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":104
  * cdef trie_edge_to_map(_Trie_Edge* edge, result, prefix, int include_zeros):
  *     if edge != NULL:
  *         trie_edge_to_map(edge.smaller, result, prefix, include_zeros)             # <<<<<<<<<<<<<<
@@ -26717,7 +24976,7 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":105
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":105
  *     if edge != NULL:
  *         trie_edge_to_map(edge.smaller, result, prefix, include_zeros)
  *         trie_edge_to_map(edge.bigger, result, prefix, include_zeros)             # <<<<<<<<<<<<<<
@@ -26728,7 +24987,7 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":106
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":106
  *         trie_edge_to_map(edge.smaller, result, prefix, include_zeros)
  *         trie_edge_to_map(edge.bigger, result, prefix, include_zeros)
  *         prefix = prefix + (edge.val,)             # <<<<<<<<<<<<<<
@@ -26738,7 +24997,7 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
     __pyx_t_2 = PyInt_FromLong(__pyx_v_edge->val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     __pyx_t_2 = 0;
@@ -26749,7 +25008,7 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
     __pyx_v_prefix = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":107
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":107
  *         trie_edge_to_map(edge.bigger, result, prefix, include_zeros)
  *         prefix = prefix + (edge.val,)
  *         trie_node_to_map(edge.node, result, prefix, include_zeros)             # <<<<<<<<<<<<<<
@@ -26777,32 +25036,42 @@ static PyObject *__pyx_f_3_sa_trie_edge_to_map(struct __pyx_t_3_sa__Trie_Edge *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_7TrieMap_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_7TrieMap_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":114
+ *     cdef int V
+ * 
+ *     def __cinit__(self, int alphabet_size):             # <<<<<<<<<<<<<<
+ *         self.V = alphabet_size
+ *         self.root = <_Trie_Node**> malloc(self.V * sizeof(_Trie_Node*))
+ */
+
+static int __pyx_pf_3_sa_7TrieMap___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_7TrieMap___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_alphabet_size;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alphabet_size,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alphabet_size,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alphabet_size)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alphabet_size);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -26819,66 +25088,40 @@ static int __pyx_pw_3_sa_7TrieMap_1__cinit__(PyObject *__pyx_v_self, PyObject *_
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_7TrieMap___cinit__(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self), __pyx_v_alphabet_size);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":114
- *     cdef int V
- * 
- *     def __cinit__(self, int alphabet_size):             # <<<<<<<<<<<<<<
- *         self.V = alphabet_size
- *         self.root = <_Trie_Node**> malloc(self.V * sizeof(_Trie_Node*))
- */
 
-static int __pyx_pf_3_sa_7TrieMap___cinit__(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, int __pyx_v_alphabet_size) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":115
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":115
  * 
  *     def __cinit__(self, int alphabet_size):
  *         self.V = alphabet_size             # <<<<<<<<<<<<<<
  *         self.root = <_Trie_Node**> malloc(self.V * sizeof(_Trie_Node*))
  *         memset(self.root, 0, self.V * sizeof(_Trie_Node*))
  */
-  __pyx_v_self->V = __pyx_v_alphabet_size;
+  ((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->V = __pyx_v_alphabet_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":116
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":116
  *     def __cinit__(self, int alphabet_size):
  *         self.V = alphabet_size
  *         self.root = <_Trie_Node**> malloc(self.V * sizeof(_Trie_Node*))             # <<<<<<<<<<<<<<
  *         memset(self.root, 0, self.V * sizeof(_Trie_Node*))
  * 
  */
-  __pyx_v_self->root = ((struct __pyx_t_3_sa__Trie_Node **)malloc((__pyx_v_self->V * (sizeof(struct __pyx_t_3_sa__Trie_Node *)))));
+  ((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root = ((struct __pyx_t_3_sa__Trie_Node **)malloc((((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->V * (sizeof(struct __pyx_t_3_sa__Trie_Node *)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":117
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":117
  *         self.V = alphabet_size
  *         self.root = <_Trie_Node**> malloc(self.V * sizeof(_Trie_Node*))
  *         memset(self.root, 0, self.V * sizeof(_Trie_Node*))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  memset(__pyx_v_self->root, 0, (__pyx_v_self->V * (sizeof(struct __pyx_t_3_sa__Trie_Node *))));
+  memset(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root, 0, (((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->V * (sizeof(struct __pyx_t_3_sa__Trie_Node *))));
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static void __pyx_pw_3_sa_7TrieMap_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_3_sa_7TrieMap_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_3_sa_7TrieMap_2__dealloc__(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":120
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":120
  * 
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -26886,7 +25129,8 @@ static void __pyx_pw_3_sa_7TrieMap_3__dealloc__(PyObject *__pyx_v_self) {
  *         for i from 0 <= i < self.V:
  */
 
-static void __pyx_pf_3_sa_7TrieMap_2__dealloc__(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self) {
+static void __pyx_pf_3_sa_7TrieMap_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_3_sa_7TrieMap_1__dealloc__(PyObject *__pyx_v_self) {
   int __pyx_v_i;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -26895,51 +25139,51 @@ static void __pyx_pf_3_sa_7TrieMap_2__dealloc__(struct __pyx_obj_3_sa_TrieMap *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
+  __Pyx_RefNannySetupContext("__dealloc__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":122
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":122
  *     def __dealloc__(self):
  *         cdef int i
  *         for i from 0 <= i < self.V:             # <<<<<<<<<<<<<<
  *             if self.root[i] != NULL:
  *                 free_trie_node(self.root[i])
  */
-  __pyx_t_1 = __pyx_v_self->V;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->V;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":123
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":123
  *         cdef int i
  *         for i from 0 <= i < self.V:
  *             if self.root[i] != NULL:             # <<<<<<<<<<<<<<
  *                 free_trie_node(self.root[i])
  *         free(self.root)
  */
-    __pyx_t_2 = ((__pyx_v_self->root[__pyx_v_i]) != NULL);
+    __pyx_t_2 = ((((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root[__pyx_v_i]) != NULL);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":124
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":124
  *         for i from 0 <= i < self.V:
  *             if self.root[i] != NULL:
  *                 free_trie_node(self.root[i])             # <<<<<<<<<<<<<<
  *         free(self.root)
  * 
  */
-      __pyx_t_3 = __pyx_f_3_sa_free_trie_node((__pyx_v_self->root[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_3_sa_free_trie_node((((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":125
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":125
  *             if self.root[i] != NULL:
  *                 free_trie_node(self.root[i])
  *         free(self.root)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  free(__pyx_v_self->root);
+  free(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root);
 
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -26949,18 +25193,7 @@ static void __pyx_pf_3_sa_7TrieMap_2__dealloc__(struct __pyx_obj_3_sa_TrieMap *_
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7TrieMap_5insert(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
-static PyObject *__pyx_pw_3_sa_7TrieMap_5insert(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7TrieMap_4insert(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self), ((PyObject *)__pyx_v_pattern));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":128
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":128
  * 
  * 
  *     def insert(self, pattern):             # <<<<<<<<<<<<<<
@@ -26968,7 +25201,8 @@ static PyObject *__pyx_pw_3_sa_7TrieMap_5insert(PyObject *__pyx_v_self, PyObject
  *         cdef int i, l
  */
 
-static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, PyObject *__pyx_v_pattern) {
+static PyObject *__pyx_pf_3_sa_7TrieMap_2insert(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
+static PyObject *__pyx_pf_3_sa_7TrieMap_2insert(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
   int *__pyx_v_p;
   int __pyx_v_i;
   int __pyx_v_l;
@@ -26981,9 +25215,9 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("insert", 0);
+  __Pyx_RefNannySetupContext("insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":131
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":131
  *         cdef int* p
  *         cdef int i, l
  *         l = len(pattern)             # <<<<<<<<<<<<<<
@@ -26993,7 +25227,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *_
   __pyx_t_1 = PyObject_Length(__pyx_v_pattern); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_l = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":132
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":132
  *         cdef int i, l
  *         l = len(pattern)
  *         p = <int*> malloc(l*sizeof(int))             # <<<<<<<<<<<<<<
@@ -27002,7 +25236,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *_
  */
   __pyx_v_p = ((int *)malloc((__pyx_v_l * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":133
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":133
  *         l = len(pattern)
  *         p = <int*> malloc(l*sizeof(int))
  *         for i from 0 <= i < l:             # <<<<<<<<<<<<<<
@@ -27012,7 +25246,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *_
   __pyx_t_2 = __pyx_v_l;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":134
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":134
  *         p = <int*> malloc(l*sizeof(int))
  *         for i from 0 <= i < l:
  *             p[i] = pattern[i]             # <<<<<<<<<<<<<<
@@ -27026,16 +25260,16 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *_
     (__pyx_v_p[__pyx_v_i]) = __pyx_t_4;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":135
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":135
  *         for i from 0 <= i < l:
  *             p[i] = pattern[i]
  *         self._insert(p,l)             # <<<<<<<<<<<<<<
  *         free(p)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_self->__pyx_vtab)->_insert(__pyx_v_self, __pyx_v_p, __pyx_v_l);
+  ((struct __pyx_vtabstruct_3_sa_TrieMap *)((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->__pyx_vtab)->_insert(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self), __pyx_v_p, __pyx_v_l);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":136
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":136
  *             p[i] = pattern[i]
  *         self._insert(p,l)
  *         free(p)             # <<<<<<<<<<<<<<
@@ -27056,7 +25290,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_4insert(struct __pyx_obj_3_sa_TrieMap *_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":139
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":139
  * 
  * 
  *     cdef _Trie_Node* _insert(self, int* pattern, int pattern_len):             # <<<<<<<<<<<<<<
@@ -27071,9 +25305,9 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("_insert", 0);
+  __Pyx_RefNannySetupContext("_insert");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":142
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":142
  *         cdef int i
  *         cdef _Trie_Node* node
  *         if self.root[pattern[0]] == NULL:             # <<<<<<<<<<<<<<
@@ -27083,7 +25317,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
   __pyx_t_1 = ((__pyx_v_self->root[(__pyx_v_pattern[0])]) == NULL);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":143
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":143
  *         cdef _Trie_Node* node
  *         if self.root[pattern[0]] == NULL:
  *             self.root[pattern[0]] = new_trie_node()             # <<<<<<<<<<<<<<
@@ -27095,7 +25329,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":144
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":144
  *         if self.root[pattern[0]] == NULL:
  *             self.root[pattern[0]] = new_trie_node()
  *         node = self.root[pattern[0]]             # <<<<<<<<<<<<<<
@@ -27104,7 +25338,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
  */
   __pyx_v_node = (__pyx_v_self->root[(__pyx_v_pattern[0])]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":145
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":145
  *             self.root[pattern[0]] = new_trie_node()
  *         node = self.root[pattern[0]]
  *         for i from 1 <= i < pattern_len:             # <<<<<<<<<<<<<<
@@ -27114,7 +25348,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
   __pyx_t_2 = __pyx_v_pattern_len;
   for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":146
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":146
  *         node = self.root[pattern[0]]
  *         for i from 1 <= i < pattern_len:
  *             node = trie_insert(node, pattern[i])             # <<<<<<<<<<<<<<
@@ -27124,7 +25358,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
     __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, (__pyx_v_pattern[__pyx_v_i]));
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":147
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":147
  *         for i from 1 <= i < pattern_len:
  *             node = trie_insert(node, pattern[i])
  *         return node             # <<<<<<<<<<<<<<
@@ -27140,18 +25374,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__insert(struct __py
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7TrieMap_7contains(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
-static PyObject *__pyx_pw_3_sa_7TrieMap_7contains(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("contains (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7TrieMap_6contains(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self), ((PyObject *)__pyx_v_pattern));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":149
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":149
  *         return node
  * 
  *     def contains(self, pattern):             # <<<<<<<<<<<<<<
@@ -27159,7 +25382,8 @@ static PyObject *__pyx_pw_3_sa_7TrieMap_7contains(PyObject *__pyx_v_self, PyObje
  *         cdef int i, l
  */
 
-static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, PyObject *__pyx_v_pattern) {
+static PyObject *__pyx_pf_3_sa_7TrieMap_3contains(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
+static PyObject *__pyx_pf_3_sa_7TrieMap_3contains(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
   int *__pyx_v_p;
   int __pyx_v_i;
   int __pyx_v_l;
@@ -27174,9 +25398,9 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("contains", 0);
+  __Pyx_RefNannySetupContext("contains");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":153
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":153
  *         cdef int i, l
  *         cdef _Trie_Node* node
  *         l = len(pattern)             # <<<<<<<<<<<<<<
@@ -27186,7 +25410,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
   __pyx_t_1 = PyObject_Length(__pyx_v_pattern); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_l = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":154
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":154
  *         cdef _Trie_Node* node
  *         l = len(pattern)
  *         p = <int*> malloc(l*sizeof(int))             # <<<<<<<<<<<<<<
@@ -27195,7 +25419,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
  */
   __pyx_v_p = ((int *)malloc((__pyx_v_l * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":155
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":155
  *         l = len(pattern)
  *         p = <int*> malloc(l*sizeof(int))
  *         for i from 0 <= i < l:             # <<<<<<<<<<<<<<
@@ -27205,7 +25429,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
   __pyx_t_2 = __pyx_v_l;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":156
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":156
  *         p = <int*> malloc(l*sizeof(int))
  *         for i from 0 <= i < l:
  *             p[i] = pattern[i]             # <<<<<<<<<<<<<<
@@ -27219,16 +25443,16 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
     (__pyx_v_p[__pyx_v_i]) = __pyx_t_4;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":157
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":157
  *         for i from 0 <= i < l:
  *             p[i] = pattern[i]
  *         node = self._contains(p,l)             # <<<<<<<<<<<<<<
  *         free(p)
  *         if node == NULL:
  */
-  __pyx_v_node = ((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_self->__pyx_vtab)->_contains(__pyx_v_self, __pyx_v_p, __pyx_v_l);
+  __pyx_v_node = ((struct __pyx_vtabstruct_3_sa_TrieMap *)((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->__pyx_vtab)->_contains(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self), __pyx_v_p, __pyx_v_l);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":158
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":158
  *             p[i] = pattern[i]
  *         node = self._contains(p,l)
  *         free(p)             # <<<<<<<<<<<<<<
@@ -27237,7 +25461,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
  */
   free(__pyx_v_p);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":159
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":159
  *         node = self._contains(p,l)
  *         free(p)
  *         if node == NULL:             # <<<<<<<<<<<<<<
@@ -27247,7 +25471,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
   __pyx_t_5 = (__pyx_v_node == NULL);
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":160
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":160
  *         free(p)
  *         if node == NULL:
  *             return False             # <<<<<<<<<<<<<<
@@ -27260,11 +25484,11 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
-    goto __pyx_L5;
+    goto __pyx_L7;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":162
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":162
  *             return False
  *         else:
  *             return True             # <<<<<<<<<<<<<<
@@ -27278,7 +25502,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
-  __pyx_L5:;
+  __pyx_L7:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -27292,7 +25516,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_6contains(struct __pyx_obj_3_sa_TrieMap
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":164
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":164
  *             return True
  * 
  *     cdef _Trie_Node* _contains(self, int* pattern, int pattern_len):             # <<<<<<<<<<<<<<
@@ -27308,9 +25532,9 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("_contains", 0);
+  __Pyx_RefNannySetupContext("_contains");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":167
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":167
  *         cdef int i
  *         cdef _Trie_Node* node
  *         node = self.root[pattern[0]]             # <<<<<<<<<<<<<<
@@ -27319,7 +25543,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
  */
   __pyx_v_node = (__pyx_v_self->root[(__pyx_v_pattern[0])]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":168
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":168
  *         cdef _Trie_Node* node
  *         node = self.root[pattern[0]]
  *         i = 1             # <<<<<<<<<<<<<<
@@ -27328,7 +25552,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
  */
   __pyx_v_i = 1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":169
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":169
  *         node = self.root[pattern[0]]
  *         i = 1
  *         while node != NULL and i < pattern_len:             # <<<<<<<<<<<<<<
@@ -27345,7 +25569,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
     }
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":170
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":170
  *         i = 1
  *         while node != NULL and i < pattern_len:
  *             node = trie_find(node, pattern[i])             # <<<<<<<<<<<<<<
@@ -27354,7 +25578,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
  */
     __pyx_v_node = __pyx_f_3_sa_trie_find(__pyx_v_node, (__pyx_v_pattern[__pyx_v_i]));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":171
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":171
  *         while node != NULL and i < pattern_len:
  *             node = trie_find(node, pattern[i])
  *             i = i+1             # <<<<<<<<<<<<<<
@@ -27364,7 +25588,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
     __pyx_v_i = (__pyx_v_i + 1);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":172
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":172
  *             node = trie_find(node, pattern[i])
  *             i = i+1
  *         return node             # <<<<<<<<<<<<<<
@@ -27380,18 +25604,7 @@ static struct __pyx_t_3_sa__Trie_Node *__pyx_f_3_sa_7TrieMap__contains(struct __
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7TrieMap_9toMap(PyObject *__pyx_v_self, PyObject *__pyx_v_flag); /*proto*/
-static PyObject *__pyx_pw_3_sa_7TrieMap_9toMap(PyObject *__pyx_v_self, PyObject *__pyx_v_flag) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("toMap (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_7TrieMap_8toMap(((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self), ((PyObject *)__pyx_v_flag));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":174
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":174
  *         return node
  * 
  *     def toMap(self, flag):             # <<<<<<<<<<<<<<
@@ -27399,7 +25612,8 @@ static PyObject *__pyx_pw_3_sa_7TrieMap_9toMap(PyObject *__pyx_v_self, PyObject
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_3_sa_7TrieMap_4toMap(PyObject *__pyx_v_self, PyObject *__pyx_v_flag); /*proto*/
+static PyObject *__pyx_pf_3_sa_7TrieMap_4toMap(PyObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   int __pyx_v_i;
   int __pyx_v_include_zeros;
   PyObject *__pyx_v_result = NULL;
@@ -27412,9 +25626,9 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("toMap", 0);
+  __Pyx_RefNannySetupContext("toMap");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":177
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":177
  *         cdef int i, include_zeros
  * 
  *         if flag:             # <<<<<<<<<<<<<<
@@ -27424,7 +25638,7 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
   __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":178
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":178
  * 
  *         if flag:
  *             include_zeros=1             # <<<<<<<<<<<<<<
@@ -27432,11 +25646,11 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
  *             include_zeros=0
  */
     __pyx_v_include_zeros = 1;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":180
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":180
  *             include_zeros=1
  *         else:
  *             include_zeros=0             # <<<<<<<<<<<<<<
@@ -27445,9 +25659,9 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
  */
     __pyx_v_include_zeros = 0;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":181
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":181
  *         else:
  *             include_zeros=0
  *         result = {}             # <<<<<<<<<<<<<<
@@ -27459,27 +25673,27 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
   __pyx_v_result = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":182
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":182
  *             include_zeros=0
  *         result = {}
  *         for i from 0 <= i < self.V:             # <<<<<<<<<<<<<<
  *             if self.root[i] != NULL:
  *                 trie_node_to_map(self.root[i], result, (i,), include_zeros)
  */
-  __pyx_t_3 = __pyx_v_self->V;
+  __pyx_t_3 = ((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->V;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":183
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":183
  *         result = {}
  *         for i from 0 <= i < self.V:
  *             if self.root[i] != NULL:             # <<<<<<<<<<<<<<
  *                 trie_node_to_map(self.root[i], result, (i,), include_zeros)
  *         return result
  */
-    __pyx_t_1 = ((__pyx_v_self->root[__pyx_v_i]) != NULL);
+    __pyx_t_1 = ((((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root[__pyx_v_i]) != NULL);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":184
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":184
  *         for i from 0 <= i < self.V:
  *             if self.root[i] != NULL:
  *                 trie_node_to_map(self.root[i], result, (i,), include_zeros)             # <<<<<<<<<<<<<<
@@ -27489,20 +25703,20 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
       __pyx_t_2 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_2);
       __pyx_t_2 = 0;
-      __pyx_t_2 = __pyx_f_3_sa_trie_node_to_map((__pyx_v_self->root[__pyx_v_i]), ((PyObject *)__pyx_v_result), ((PyObject *)__pyx_t_4), __pyx_v_include_zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_3_sa_trie_node_to_map((((struct __pyx_obj_3_sa_TrieMap *)__pyx_v_self)->root[__pyx_v_i]), ((PyObject *)__pyx_v_result), ((PyObject *)__pyx_t_4), __pyx_v_include_zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      goto __pyx_L6;
+      goto __pyx_L8;
     }
-    __pyx_L6:;
+    __pyx_L8:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":185
  *             if self.root[i] != NULL:
  *                 trie_node_to_map(self.root[i], result, (i,), include_zeros)
  *         return result             # <<<<<<<<<<<<<<
@@ -27528,9 +25742,16 @@ static PyObject *__pyx_pf_3_sa_7TrieMap_8toMap(struct __pyx_obj_3_sa_TrieMap *__
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":200
+ *     cdef write_map(self, m, FILE* f)
+ * 
+ *     def __cinit__(self, fsarray=None, from_stats=None, from_binary=None,             # <<<<<<<<<<<<<<
+ *             precompute_rank=1000, precompute_secondary_rank=20,
+ *             max_length=5, max_nonterminals=2,
+ */
+
+static int __pyx_pf_3_sa_14Precomputation___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_14Precomputation___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fsarray = 0;
   PyObject *__pyx_v_from_stats = 0;
   PyObject *__pyx_v_from_binary = 0;
@@ -27542,18 +25763,18 @@ static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyO
   PyObject *__pyx_v_train_min_gap_size = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fsarray,&__pyx_n_s__from_stats,&__pyx_n_s__from_binary,&__pyx_n_s__precompute_rank,&__pyx_n_s_70,&__pyx_n_s__max_length,&__pyx_n_s__max_nonterminals,&__pyx_n_s_71,&__pyx_n_s__train_min_gap_size,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fsarray,&__pyx_n_s__from_stats,&__pyx_n_s__from_binary,&__pyx_n_s__precompute_rank,&__pyx_n_s_70,&__pyx_n_s__max_length,&__pyx_n_s__max_nonterminals,&__pyx_n_s_71,&__pyx_n_s__train_min_gap_size,0};
     PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":200
- *     cdef write_map(self, m, FILE* f)
- * 
- *     def __cinit__(self, fsarray=None, from_stats=None, from_binary=None,             # <<<<<<<<<<<<<<
- *             precompute_rank=1000, precompute_secondary_rank=20,
- *             max_length=5, max_nonterminals=2,
- */
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -27565,8 +25786,7 @@ static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyO
     values[8] = ((PyObject *)__pyx_int_2);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
         case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
@@ -27580,7 +25800,7 @@ static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyO
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fsarray);
@@ -27628,7 +25848,7 @@ static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -27663,25 +25883,8 @@ static int __pyx_pw_3_sa_14Precomputation_1__cinit__(PyObject *__pyx_v_self, PyO
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_14Precomputation___cinit__(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), __pyx_v_fsarray, __pyx_v_from_stats, __pyx_v_from_binary, __pyx_v_precompute_rank, __pyx_v_precompute_secondary_rank, __pyx_v_max_length, __pyx_v_max_nonterminals, __pyx_v_train_max_initial_size, __pyx_v_train_min_gap_size);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, PyObject *__pyx_v_fsarray, PyObject *__pyx_v_from_stats, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_precompute_rank, PyObject *__pyx_v_precompute_secondary_rank, PyObject *__pyx_v_max_length, PyObject *__pyx_v_max_nonterminals, PyObject *__pyx_v_train_max_initial_size, PyObject *__pyx_v_train_min_gap_size) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":204
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":204
  *             max_length=5, max_nonterminals=2,
  *             train_max_initial_size=10, train_min_gap_size=2):
  *         self.precompute_rank = precompute_rank             # <<<<<<<<<<<<<<
@@ -27689,9 +25892,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
  *         self.max_length = max_length
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_precompute_rank); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->precompute_rank = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_rank = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":205
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":205
  *             train_max_initial_size=10, train_min_gap_size=2):
  *         self.precompute_rank = precompute_rank
  *         self.precompute_secondary_rank = precompute_secondary_rank             # <<<<<<<<<<<<<<
@@ -27699,9 +25902,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
  *         self.max_nonterminals = max_nonterminals
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_precompute_secondary_rank); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->precompute_secondary_rank = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_secondary_rank = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":206
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":206
  *         self.precompute_rank = precompute_rank
  *         self.precompute_secondary_rank = precompute_secondary_rank
  *         self.max_length = max_length             # <<<<<<<<<<<<<<
@@ -27709,9 +25912,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
  *         self.train_max_initial_size = train_max_initial_size
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_max_length); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->max_length = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":207
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":207
  *         self.precompute_secondary_rank = precompute_secondary_rank
  *         self.max_length = max_length
  *         self.max_nonterminals = max_nonterminals             # <<<<<<<<<<<<<<
@@ -27719,9 +25922,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
  *         self.train_min_gap_size = train_min_gap_size
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_max_nonterminals); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->max_nonterminals = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_nonterminals = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":208
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":208
  *         self.max_length = max_length
  *         self.max_nonterminals = max_nonterminals
  *         self.train_max_initial_size = train_max_initial_size             # <<<<<<<<<<<<<<
@@ -27729,9 +25932,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
  *         if from_binary:
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_train_max_initial_size); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->train_max_initial_size = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":209
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":209
  *         self.max_nonterminals = max_nonterminals
  *         self.train_max_initial_size = train_max_initial_size
  *         self.train_min_gap_size = train_min_gap_size             # <<<<<<<<<<<<<<
@@ -27739,9 +25942,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
  *             self.read_binary(from_binary)
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_train_min_gap_size); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->train_min_gap_size = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_min_gap_size = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":210
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":210
  *         self.train_max_initial_size = train_max_initial_size
  *         self.train_min_gap_size = train_min_gap_size
  *         if from_binary:             # <<<<<<<<<<<<<<
@@ -27751,17 +25954,17 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_binary); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":211
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":211
  *         self.train_min_gap_size = train_min_gap_size
  *         if from_binary:
  *             self.read_binary(from_binary)             # <<<<<<<<<<<<<<
  *         elif from_stats:
  *             self.precompute(from_stats, fsarray)
  */
-    __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_binary); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_binary); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __Pyx_INCREF(__pyx_v_from_binary);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_from_binary);
     __Pyx_GIVEREF(__pyx_v_from_binary);
@@ -27770,10 +25973,10 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":212
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":212
  *         if from_binary:
  *             self.read_binary(from_binary)
  *         elif from_stats:             # <<<<<<<<<<<<<<
@@ -27783,17 +25986,17 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_stats); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":213
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":213
  *             self.read_binary(from_binary)
  *         elif from_stats:
  *             self.precompute(from_stats, fsarray)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__precompute); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__precompute); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __Pyx_INCREF(__pyx_v_from_stats);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_from_stats);
     __Pyx_GIVEREF(__pyx_v_from_stats);
@@ -27805,9 +26008,9 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -27822,28 +26025,7 @@ static int __pyx_pf_3_sa_14Precomputation___cinit__(struct __pyx_obj_3_sa_Precom
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_14Precomputation_3read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_14Precomputation_3read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.Precomputation.read_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_14Precomputation_2read_binary(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":216
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":216
  * 
  * 
  *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
@@ -27851,7 +26033,9 @@ static PyObject *__pyx_pw_3_sa_14Precomputation_3read_binary(PyObject *__pyx_v_s
  *         f = fopen(filename, "r")
  */
 
-static PyObject *__pyx_pf_3_sa_14Precomputation_2read_binary(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_14Precomputation_1read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_14Precomputation_1read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   FILE *__pyx_v_f;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -27859,9 +26043,18 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_2read_binary(struct __pyx_obj_3_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_binary", 0);
+  __Pyx_RefNannySetupContext("read_binary");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.Precomputation.read_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":218
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":218
  *     def read_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -27870,91 +26063,91 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_2read_binary(struct __pyx_obj_3_
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":219
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":219
  *         cdef FILE* f
  *         f = fopen(filename, "r")
  *         fread(&(self.precompute_rank), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fread(&(self.precompute_secondary_rank), sizeof(int), 1, f)
  *         fread(&(self.max_length), sizeof(int), 1, f)
  */
-  fread((&__pyx_v_self->precompute_rank), (sizeof(int)), 1, __pyx_v_f);
+  fread((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_rank), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":220
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":220
  *         f = fopen(filename, "r")
  *         fread(&(self.precompute_rank), sizeof(int), 1, f)
  *         fread(&(self.precompute_secondary_rank), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fread(&(self.max_length), sizeof(int), 1, f)
  *         fread(&(self.max_nonterminals), sizeof(int), 1, f)
  */
-  fread((&__pyx_v_self->precompute_secondary_rank), (sizeof(int)), 1, __pyx_v_f);
+  fread((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_secondary_rank), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":221
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":221
  *         fread(&(self.precompute_rank), sizeof(int), 1, f)
  *         fread(&(self.precompute_secondary_rank), sizeof(int), 1, f)
  *         fread(&(self.max_length), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fread(&(self.max_nonterminals), sizeof(int), 1, f)
  *         fread(&(self.train_max_initial_size), sizeof(int), 1, f)
  */
-  fread((&__pyx_v_self->max_length), (sizeof(int)), 1, __pyx_v_f);
+  fread((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":222
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":222
  *         fread(&(self.precompute_secondary_rank), sizeof(int), 1, f)
  *         fread(&(self.max_length), sizeof(int), 1, f)
  *         fread(&(self.max_nonterminals), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fread(&(self.train_max_initial_size), sizeof(int), 1, f)
  *         fread(&(self.train_min_gap_size), sizeof(int), 1, f)
  */
-  fread((&__pyx_v_self->max_nonterminals), (sizeof(int)), 1, __pyx_v_f);
+  fread((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_nonterminals), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":223
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":223
  *         fread(&(self.max_length), sizeof(int), 1, f)
  *         fread(&(self.max_nonterminals), sizeof(int), 1, f)
  *         fread(&(self.train_max_initial_size), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fread(&(self.train_min_gap_size), sizeof(int), 1, f)
  *         self.precomputed_index = self.read_map(f)
  */
-  fread((&__pyx_v_self->train_max_initial_size), (sizeof(int)), 1, __pyx_v_f);
+  fread((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":224
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":224
  *         fread(&(self.max_nonterminals), sizeof(int), 1, f)
  *         fread(&(self.train_max_initial_size), sizeof(int), 1, f)
  *         fread(&(self.train_min_gap_size), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         self.precomputed_index = self.read_map(f)
  *         self.precomputed_collocations = self.read_map(f)
  */
-  fread((&__pyx_v_self->train_min_gap_size), (sizeof(int)), 1, __pyx_v_f);
+  fread((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_min_gap_size), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":225
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":225
  *         fread(&(self.train_max_initial_size), sizeof(int), 1, f)
  *         fread(&(self.train_min_gap_size), sizeof(int), 1, f)
  *         self.precomputed_index = self.read_map(f)             # <<<<<<<<<<<<<<
  *         self.precomputed_collocations = self.read_map(f)
  *         fclose(f)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)__pyx_v_self->__pyx_vtab)->read_map(__pyx_v_self, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->__pyx_vtab)->read_map(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->precomputed_index);
-  __Pyx_DECREF(__pyx_v_self->precomputed_index);
-  __pyx_v_self->precomputed_index = __pyx_t_1;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index);
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":226
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":226
  *         fread(&(self.train_min_gap_size), sizeof(int), 1, f)
  *         self.precomputed_index = self.read_map(f)
  *         self.precomputed_collocations = self.read_map(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)__pyx_v_self->__pyx_vtab)->read_map(__pyx_v_self, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->__pyx_vtab)->read_map(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->precomputed_collocations);
-  __Pyx_DECREF(__pyx_v_self->precomputed_collocations);
-  __pyx_v_self->precomputed_collocations = __pyx_t_1;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations);
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":227
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":227
  *         self.precomputed_index = self.read_map(f)
  *         self.precomputed_collocations = self.read_map(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -27975,28 +26168,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_2read_binary(struct __pyx_obj_3_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_14Precomputation_5write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_14Precomputation_5write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.Precomputation.write_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_14Precomputation_4write_binary(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":230
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":230
  * 
  * 
  *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
@@ -28004,7 +26176,9 @@ static PyObject *__pyx_pw_3_sa_14Precomputation_5write_binary(PyObject *__pyx_v_
  *         f = fopen(filename, "w")
  */
 
-static PyObject *__pyx_pf_3_sa_14Precomputation_4write_binary(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_14Precomputation_2write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_14Precomputation_2write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   FILE *__pyx_v_f;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -28013,9 +26187,18 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_4write_binary(struct __pyx_obj_3
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_binary", 0);
+  __Pyx_RefNannySetupContext("write_binary");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.Precomputation.write_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":232
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":232
  *     def write_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -28024,89 +26207,89 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_4write_binary(struct __pyx_obj_3
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":233
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":233
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         fwrite(&(self.precompute_rank), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fwrite(&(self.precompute_secondary_rank), sizeof(int), 1, f)
  *         fwrite(&(self.max_length), sizeof(int), 1, f)
  */
-  fwrite((&__pyx_v_self->precompute_rank), (sizeof(int)), 1, __pyx_v_f);
+  fwrite((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_rank), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":234
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":234
  *         f = fopen(filename, "w")
  *         fwrite(&(self.precompute_rank), sizeof(int), 1, f)
  *         fwrite(&(self.precompute_secondary_rank), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fwrite(&(self.max_length), sizeof(int), 1, f)
  *         fwrite(&(self.max_nonterminals), sizeof(int), 1, f)
  */
-  fwrite((&__pyx_v_self->precompute_secondary_rank), (sizeof(int)), 1, __pyx_v_f);
+  fwrite((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_secondary_rank), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":235
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":235
  *         fwrite(&(self.precompute_rank), sizeof(int), 1, f)
  *         fwrite(&(self.precompute_secondary_rank), sizeof(int), 1, f)
  *         fwrite(&(self.max_length), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fwrite(&(self.max_nonterminals), sizeof(int), 1, f)
  *         fwrite(&(self.train_max_initial_size), sizeof(int), 1, f)
  */
-  fwrite((&__pyx_v_self->max_length), (sizeof(int)), 1, __pyx_v_f);
+  fwrite((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":236
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":236
  *         fwrite(&(self.precompute_secondary_rank), sizeof(int), 1, f)
  *         fwrite(&(self.max_length), sizeof(int), 1, f)
  *         fwrite(&(self.max_nonterminals), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fwrite(&(self.train_max_initial_size), sizeof(int), 1, f)
  *         fwrite(&(self.train_min_gap_size), sizeof(int), 1, f)
  */
-  fwrite((&__pyx_v_self->max_nonterminals), (sizeof(int)), 1, __pyx_v_f);
+  fwrite((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_nonterminals), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":237
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":237
  *         fwrite(&(self.max_length), sizeof(int), 1, f)
  *         fwrite(&(self.max_nonterminals), sizeof(int), 1, f)
  *         fwrite(&(self.train_max_initial_size), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         fwrite(&(self.train_min_gap_size), sizeof(int), 1, f)
  *         self.write_map(self.precomputed_index, f)
  */
-  fwrite((&__pyx_v_self->train_max_initial_size), (sizeof(int)), 1, __pyx_v_f);
+  fwrite((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":238
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":238
  *         fwrite(&(self.max_nonterminals), sizeof(int), 1, f)
  *         fwrite(&(self.train_max_initial_size), sizeof(int), 1, f)
  *         fwrite(&(self.train_min_gap_size), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
  *         self.write_map(self.precomputed_index, f)
  *         self.write_map(self.precomputed_collocations, f)
  */
-  fwrite((&__pyx_v_self->train_min_gap_size), (sizeof(int)), 1, __pyx_v_f);
+  fwrite((&((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_min_gap_size), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":239
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":239
  *         fwrite(&(self.train_max_initial_size), sizeof(int), 1, f)
  *         fwrite(&(self.train_min_gap_size), sizeof(int), 1, f)
  *         self.write_map(self.precomputed_index, f)             # <<<<<<<<<<<<<<
  *         self.write_map(self.precomputed_collocations, f)
  *         fclose(f)
  */
-  __pyx_t_1 = __pyx_v_self->precomputed_index;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)__pyx_v_self->__pyx_vtab)->write_map(__pyx_v_self, __pyx_t_1, __pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->__pyx_vtab)->write_map(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), __pyx_t_1, __pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":240
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":240
  *         fwrite(&(self.train_min_gap_size), sizeof(int), 1, f)
  *         self.write_map(self.precomputed_index, f)
  *         self.write_map(self.precomputed_collocations, f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  __pyx_t_2 = __pyx_v_self->precomputed_collocations;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)__pyx_v_self->__pyx_vtab)->write_map(__pyx_v_self, __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_Precomputation *)((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->__pyx_vtab)->write_map(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), __pyx_t_2, __pyx_v_f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":241
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":241
  *         self.write_map(self.precomputed_index, f)
  *         self.write_map(self.precomputed_collocations, f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -28128,7 +26311,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_4write_binary(struct __pyx_obj_3
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":244
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":244
  * 
  * 
  *     cdef write_map(self, m, FILE* f):             # <<<<<<<<<<<<<<
@@ -28136,7 +26319,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_4write_binary(struct __pyx_obj_3
  *         cdef IntList arr
  */
 
-static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, PyObject *__pyx_v_m, FILE *__pyx_v_f) {
+static PyObject *__pyx_f_3_sa_14Precomputation_write_map(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, PyObject *__pyx_v_m, FILE *__pyx_v_f) {
   int __pyx_v_i;
   int __pyx_v_N;
   struct __pyx_obj_3_sa_IntList *__pyx_v_arr = 0;
@@ -28147,19 +26330,21 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
   __Pyx_RefNannyDeclarations
   Py_ssize_t __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  int __pyx_t_4;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *(*__pyx_t_4)(PyObject *);
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_t_7;
-  Py_ssize_t __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  Py_ssize_t __pyx_t_9;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  int __pyx_t_11;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_map", 0);
+  __Pyx_RefNannySetupContext("write_map");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":248
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":248
  *         cdef IntList arr
  * 
  *         N = len(m)             # <<<<<<<<<<<<<<
@@ -28169,7 +26354,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
   __pyx_t_1 = PyObject_Length(__pyx_v_m); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_N = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":249
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":249
  * 
  *         N = len(m)
  *         fwrite(&(N), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -28178,29 +26363,87 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
  */
   fwrite((&__pyx_v_N), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":250
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":250
  *         N = len(m)
  *         fwrite(&(N), sizeof(int), 1, f)
  *         for pattern, val in m.iteritems():             # <<<<<<<<<<<<<<
  *             N = len(pattern)
  *             fwrite(&(N), sizeof(int), 1, f)
  */
-  __pyx_t_1 = 0;
-  if (unlikely(__pyx_v_m == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_v_m, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
+    __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_1 = 0;
+    __pyx_t_4 = NULL;
+  } else {
+    __pyx_t_1 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
   }
-  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_m, 0, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_2);
-  __pyx_t_2 = __pyx_t_5;
-  __pyx_t_5 = 0;
-  while (1) {
-    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_3, &__pyx_t_1, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
-    if (unlikely(__pyx_t_7 == 0)) break;
-    if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  for (;;) {
+    if (PyList_CheckExact(__pyx_t_2)) {
+      if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++;
+    } else if (PyTuple_CheckExact(__pyx_t_2)) {
+      if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++;
+    } else {
+      __pyx_t_3 = __pyx_t_4(__pyx_t_2);
+      if (unlikely(!__pyx_t_3)) {
+        if (PyErr_Occurred()) {
+          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+          else {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
+      PyObject* sequence = __pyx_t_3;
+      if (likely(PyTuple_CheckExact(sequence))) {
+        if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+          if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
+        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
+      } else {
+        if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+          if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
+        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
+      }
+      __Pyx_INCREF(__pyx_t_5);
+      __Pyx_INCREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else {
+      Py_ssize_t index = -1;
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
+      index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_5);
+      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_6);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      goto __pyx_L6_unpacking_done;
+      __pyx_L5_unpacking_failed:;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+      {__pyx_filename = __pyx_f[11]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_L6_unpacking_done:;
+    }
     __Pyx_XDECREF(__pyx_v_pattern);
     __pyx_v_pattern = __pyx_t_5;
     __pyx_t_5 = 0;
@@ -28208,17 +26451,17 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
     __pyx_v_val = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":251
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":251
  *         fwrite(&(N), sizeof(int), 1, f)
  *         for pattern, val in m.iteritems():
  *             N = len(pattern)             # <<<<<<<<<<<<<<
  *             fwrite(&(N), sizeof(int), 1, f)
  *             for word_id in pattern:
  */
-    __pyx_t_8 = PyObject_Length(__pyx_v_pattern); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_N = __pyx_t_8;
+    __pyx_t_9 = PyObject_Length(__pyx_v_pattern); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_N = __pyx_t_9;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":252
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":252
  *         for pattern, val in m.iteritems():
  *             N = len(pattern)
  *             fwrite(&(N), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -28227,7 +26470,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
  */
     fwrite((&__pyx_v_N), (sizeof(int)), 1, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":253
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":253
  *             N = len(pattern)
  *             fwrite(&(N), sizeof(int), 1, f)
  *             for word_id in pattern:             # <<<<<<<<<<<<<<
@@ -28235,54 +26478,46 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
  *                 fwrite(&(i), sizeof(int), 1, f)
  */
     if (PyList_CheckExact(__pyx_v_pattern) || PyTuple_CheckExact(__pyx_v_pattern)) {
-      __pyx_t_6 = __pyx_v_pattern; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0;
-      __pyx_t_9 = NULL;
+      __pyx_t_3 = __pyx_v_pattern; __Pyx_INCREF(__pyx_t_3); __pyx_t_9 = 0;
+      __pyx_t_10 = NULL;
     } else {
-      __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_pattern); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_9 = Py_TYPE(__pyx_t_6)->tp_iternext;
+      __pyx_t_9 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_pattern); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext;
     }
     for (;;) {
-      if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_6)) {
-        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
-      } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_6)) {
-        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
+      if (PyList_CheckExact(__pyx_t_3)) {
+        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_3)) break;
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_6); __pyx_t_9++;
+      } else if (PyTuple_CheckExact(__pyx_t_3)) {
+        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_6); __pyx_t_9++;
       } else {
-        __pyx_t_5 = __pyx_t_9(__pyx_t_6);
-        if (unlikely(!__pyx_t_5)) {
+        __pyx_t_6 = __pyx_t_10(__pyx_t_3);
+        if (unlikely(!__pyx_t_6)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
             else {__pyx_filename = __pyx_f[11]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
-        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GOTREF(__pyx_t_6);
       }
       __Pyx_XDECREF(__pyx_v_word_id);
-      __pyx_v_word_id = __pyx_t_5;
-      __pyx_t_5 = 0;
+      __pyx_v_word_id = __pyx_t_6;
+      __pyx_t_6 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":254
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":254
  *             fwrite(&(N), sizeof(int), 1, f)
  *             for word_id in pattern:
  *                 i = word_id             # <<<<<<<<<<<<<<
  *                 fwrite(&(i), sizeof(int), 1, f)
  *             arr = val
  */
-      __pyx_t_7 = __Pyx_PyInt_AsInt(__pyx_v_word_id); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_v_i = __pyx_t_7;
+      __pyx_t_11 = __Pyx_PyInt_AsInt(__pyx_v_word_id); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_i = __pyx_t_11;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":255
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":255
  *             for word_id in pattern:
  *                 i = word_id
  *                 fwrite(&(i), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -28291,9 +26526,9 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
  */
       fwrite((&__pyx_v_i), (sizeof(int)), 1, __pyx_v_f);
     }
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":256
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":256
  *                 i = word_id
  *                 fwrite(&(i), sizeof(int), 1, f)
  *             arr = val             # <<<<<<<<<<<<<<
@@ -28305,7 +26540,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
     __Pyx_XDECREF(((PyObject *)__pyx_v_arr));
     __pyx_v_arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_v_val);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":257
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":257
  *                 fwrite(&(i), sizeof(int), 1, f)
  *             arr = val
  *             arr.write_handle(f)             # <<<<<<<<<<<<<<
@@ -28320,8 +26555,10 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("_sa.Precomputation.write_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -28334,7 +26571,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":260
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":260
  * 
  * 
  *     cdef read_map(self, FILE* f):             # <<<<<<<<<<<<<<
@@ -28342,10 +26579,10 @@ static PyObject *__pyx_f_3_sa_14Precomputation_write_map(CYTHON_UNUSED struct __
  *         cdef IntList arr
  */
 
-static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, FILE *__pyx_v_f) {
+static PyObject *__pyx_f_3_sa_14Precomputation_read_map(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, FILE *__pyx_v_f) {
   int __pyx_v_i;
-  CYTHON_UNUSED int __pyx_v_j;
-  CYTHON_UNUSED int __pyx_v_k;
+  int __pyx_v_j;
+  int __pyx_v_k;
   int __pyx_v_word_id;
   int __pyx_v_N;
   struct __pyx_obj_3_sa_IntList *__pyx_v_arr = 0;
@@ -28360,9 +26597,9 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_map", 0);
+  __Pyx_RefNannySetupContext("read_map");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":264
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":264
  *         cdef IntList arr
  * 
  *         m = {}             # <<<<<<<<<<<<<<
@@ -28374,7 +26611,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
   __pyx_v_m = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":265
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":265
  * 
  *         m = {}
  *         fread(&(N), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -28383,7 +26620,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
  */
   fread((&__pyx_v_N), (sizeof(int)), 1, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":266
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":266
  *         m = {}
  *         fread(&(N), sizeof(int), 1, f)
  *         for j from 0 <= j < N:             # <<<<<<<<<<<<<<
@@ -28393,7 +26630,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
   __pyx_t_2 = __pyx_v_N;
   for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_2; __pyx_v_j++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":267
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":267
  *         fread(&(N), sizeof(int), 1, f)
  *         for j from 0 <= j < N:
  *             fread(&(i), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -28402,7 +26639,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
  */
     fread((&__pyx_v_i), (sizeof(int)), 1, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":268
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":268
  *         for j from 0 <= j < N:
  *             fread(&(i), sizeof(int), 1, f)
  *             key = ()             # <<<<<<<<<<<<<<
@@ -28413,7 +26650,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
     __Pyx_XDECREF(((PyObject *)__pyx_v_key));
     __pyx_v_key = __pyx_empty_tuple;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":269
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":269
  *             fread(&(i), sizeof(int), 1, f)
  *             key = ()
  *             for k from 0 <= k < i:             # <<<<<<<<<<<<<<
@@ -28423,7 +26660,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
     __pyx_t_3 = __pyx_v_i;
     for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":270
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":270
  *             key = ()
  *             for k from 0 <= k < i:
  *                 fread(&(word_id), sizeof(int), 1, f)             # <<<<<<<<<<<<<<
@@ -28432,7 +26669,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
  */
       fread((&__pyx_v_word_id), (sizeof(int)), 1, __pyx_v_f);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":271
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":271
  *             for k from 0 <= k < i:
  *                 fread(&(word_id), sizeof(int), 1, f)
  *                 key = key + (word_id,)             # <<<<<<<<<<<<<<
@@ -28442,7 +26679,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
       __pyx_t_1 = PyInt_FromLong(__pyx_v_word_id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_1);
       __pyx_t_1 = 0;
@@ -28454,7 +26691,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
       __pyx_t_1 = 0;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":272
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":272
  *                 fread(&(word_id), sizeof(int), 1, f)
  *                 key = key + (word_id,)
  *             arr = IntList()             # <<<<<<<<<<<<<<
@@ -28467,7 +26704,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
     __pyx_v_arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":273
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":273
  *                 key = key + (word_id,)
  *             arr = IntList()
  *             arr.read_handle(f)             # <<<<<<<<<<<<<<
@@ -28476,7 +26713,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
  */
     ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_arr->__pyx_vtab)->read_handle(__pyx_v_arr, __pyx_v_f);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":274
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":274
  *             arr = IntList()
  *             arr.read_handle(f)
  *             m[key] = arr             # <<<<<<<<<<<<<<
@@ -28486,7 +26723,7 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
     if (PyDict_SetItem(((PyObject *)__pyx_v_m), ((PyObject *)__pyx_v_key), ((PyObject *)__pyx_v_arr)) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":275
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":275
  *             arr.read_handle(f)
  *             m[key] = arr
  *         return m             # <<<<<<<<<<<<<<
@@ -28514,39 +26751,119 @@ static PyObject *__pyx_f_3_sa_14Precomputation_read_map(CYTHON_UNUSED struct __p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_14Precomputation_7precompute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_14Precomputation_7precompute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":278
+ * 
+ * 
+ *     def precompute(self, stats, SuffixArray sarray):             # <<<<<<<<<<<<<<
+ *         cdef int i, l, N, max_pattern_len, i1, l1, i2, l2, i3, l3, ptr1, ptr2, ptr3, is_super, sent_count, max_rank
+ *         cdef DataArray darray = sarray.darray
+ */
+
+static PyObject *__pyx_pf_3_sa_14Precomputation_3precompute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_14Precomputation_3precompute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_stats = 0;
   struct __pyx_obj_3_sa_SuffixArray *__pyx_v_sarray = 0;
-  PyObject *__pyx_r = 0;
+  int __pyx_v_i;
+  int __pyx_v_l;
+  int __pyx_v_N;
+  int __pyx_v_max_pattern_len;
+  int __pyx_v_i1;
+  int __pyx_v_l1;
+  int __pyx_v_i2;
+  int __pyx_v_l2;
+  int __pyx_v_i3;
+  int __pyx_v_l3;
+  int __pyx_v_ptr1;
+  int __pyx_v_ptr2;
+  int __pyx_v_ptr3;
+  int __pyx_v_is_super;
+  int __pyx_v_sent_count;
+  int __pyx_v_max_rank;
+  struct __pyx_obj_3_sa_DataArray *__pyx_v_darray = 0;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_data = 0;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_queue = 0;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_cost_by_rank = 0;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_count_by_rank = 0;
+  struct __pyx_obj_3_sa_TrieMap *__pyx_v_frequent_patterns = 0;
+  struct __pyx_obj_3_sa_TrieMap *__pyx_v_super_frequent_patterns = 0;
+  struct __pyx_obj_3_sa_TrieMap *__pyx_v_collocations = 0;
+  struct __pyx_t_3_sa__Trie_Node *__pyx_v_node;
+  PyObject *__pyx_v_I_set = NULL;
+  PyObject *__pyx_v_J_set = NULL;
+  PyObject *__pyx_v_J2_set = NULL;
+  PyObject *__pyx_v_IJ_set = NULL;
+  PyObject *__pyx_v_pattern_rank = NULL;
+  float __pyx_v_start_time;
+  PyObject *__pyx_v_rank = NULL;
+  PyObject *__pyx_v__ = NULL;
+  PyObject *__pyx_v_phrase = NULL;
+  int __pyx_v_sa_word_id;
+  PyObject *__pyx_v_x = NULL;
+  PyObject *__pyx_v_pattern1 = NULL;
+  PyObject *__pyx_v_pattern2 = NULL;
+  PyObject *__pyx_v_combined_pattern = NULL;
+  PyObject *__pyx_v_pattern = NULL;
+  PyObject *__pyx_v_arr = NULL;
+  PyObject *__pyx_v_s = NULL;
+  PyObject *__pyx_v_word_id = NULL;
+  PyObject *__pyx_v_chunk = NULL;
+  PyObject *__pyx_v_arity = NULL;
+  PyObject *__pyx_v_cumul_cost = NULL;
+  PyObject *__pyx_v_cumul_count = NULL;
+  Py_ssize_t __pyx_v_num_found_patterns;
+  float __pyx_v_stop_time;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("precompute (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *(*__pyx_t_4)(PyObject *);
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  int __pyx_t_13;
+  Py_ssize_t __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  int __pyx_t_18;
+  int __pyx_t_19;
+  PyObject *(*__pyx_t_20)(PyObject *);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__stats,&__pyx_n_s__sarray,0};
+  __Pyx_RefNannySetupContext("precompute");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__stats,&__pyx_n_s__sarray,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stats)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stats);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sarray)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sarray);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("precompute", 1, 2, 2, 1); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "precompute") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "precompute") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -28566,101 +26883,8 @@ static PyObject *__pyx_pw_3_sa_14Precomputation_7precompute(PyObject *__pyx_v_se
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sarray), __pyx_ptype_3_sa_SuffixArray, 1, "sarray", 0))) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_14Precomputation_6precompute(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self), __pyx_v_stats, __pyx_v_sarray);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":278
- * 
- * 
- *     def precompute(self, stats, SuffixArray sarray):             # <<<<<<<<<<<<<<
- *         cdef int i, l, N, max_pattern_len, i1, l1, i2, l2, i3, l3, ptr1, ptr2, ptr3, is_super, sent_count, max_rank
- *         cdef DataArray darray = sarray.darray
- */
 
-static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_sa_Precomputation *__pyx_v_self, PyObject *__pyx_v_stats, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_sarray) {
-  int __pyx_v_i;
-  int __pyx_v_l;
-  int __pyx_v_N;
-  int __pyx_v_max_pattern_len;
-  int __pyx_v_i1;
-  int __pyx_v_l1;
-  int __pyx_v_i2;
-  int __pyx_v_l2;
-  int __pyx_v_i3;
-  int __pyx_v_l3;
-  int __pyx_v_ptr1;
-  int __pyx_v_ptr2;
-  int __pyx_v_ptr3;
-  int __pyx_v_is_super;
-  int __pyx_v_sent_count;
-  int __pyx_v_max_rank;
-  struct __pyx_obj_3_sa_DataArray *__pyx_v_darray = 0;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_data = 0;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_queue = 0;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_cost_by_rank = 0;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_count_by_rank = 0;
-  struct __pyx_obj_3_sa_TrieMap *__pyx_v_frequent_patterns = 0;
-  struct __pyx_obj_3_sa_TrieMap *__pyx_v_super_frequent_patterns = 0;
-  struct __pyx_obj_3_sa_TrieMap *__pyx_v_collocations = 0;
-  struct __pyx_t_3_sa__Trie_Node *__pyx_v_node;
-  PyObject *__pyx_v_I_set = NULL;
-  PyObject *__pyx_v_J_set = NULL;
-  PyObject *__pyx_v_J2_set = NULL;
-  PyObject *__pyx_v_IJ_set = NULL;
-  PyObject *__pyx_v_pattern_rank = NULL;
-  float __pyx_v_start_time;
-  PyObject *__pyx_v_rank = NULL;
-  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
-  PyObject *__pyx_v_phrase = NULL;
-  int __pyx_v_sa_word_id;
-  PyObject *__pyx_v_x = NULL;
-  PyObject *__pyx_v_pattern1 = NULL;
-  PyObject *__pyx_v_pattern2 = NULL;
-  PyObject *__pyx_v_combined_pattern = NULL;
-  PyObject *__pyx_v_pattern = NULL;
-  PyObject *__pyx_v_arr = NULL;
-  PyObject *__pyx_v_s = NULL;
-  PyObject *__pyx_v_word_id = NULL;
-  PyObject *__pyx_v_chunk = NULL;
-  PyObject *__pyx_v_arity = NULL;
-  PyObject *__pyx_v_cumul_cost = NULL;
-  PyObject *__pyx_v_cumul_count = NULL;
-  PyObject *__pyx_v_num_found_patterns = NULL;
-  float __pyx_v_stop_time;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  Py_ssize_t __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *(*__pyx_t_4)(PyObject *);
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  PyObject *__pyx_t_9 = NULL;
-  PyObject *(*__pyx_t_10)(PyObject *);
-  int __pyx_t_11;
-  Py_ssize_t __pyx_t_12;
-  int __pyx_t_13;
-  Py_ssize_t __pyx_t_14;
-  int __pyx_t_15;
-  int __pyx_t_16;
-  int __pyx_t_17;
-  int __pyx_t_18;
-  int __pyx_t_19;
-  PyObject *(*__pyx_t_20)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("precompute", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":280
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":280
  *     def precompute(self, stats, SuffixArray sarray):
  *         cdef int i, l, N, max_pattern_len, i1, l1, i2, l2, i3, l3, ptr1, ptr2, ptr3, is_super, sent_count, max_rank
  *         cdef DataArray darray = sarray.darray             # <<<<<<<<<<<<<<
@@ -28670,7 +26894,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_INCREF(((PyObject *)__pyx_v_sarray->darray));
   __pyx_v_darray = __pyx_v_sarray->darray;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":285
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":285
  *         cdef _Trie_Node* node
  * 
  *         data = darray.data             # <<<<<<<<<<<<<<
@@ -28680,7 +26904,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_INCREF(((PyObject *)__pyx_v_darray->data));
   __pyx_v_data = __pyx_v_darray->data;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":287
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":287
  *         data = darray.data
  * 
  *         frequent_patterns = TrieMap(len(darray.id2word))             # <<<<<<<<<<<<<<
@@ -28694,7 +26918,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -28704,7 +26928,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_frequent_patterns = ((struct __pyx_obj_3_sa_TrieMap *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":288
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":288
  * 
  *         frequent_patterns = TrieMap(len(darray.id2word))
  *         super_frequent_patterns = TrieMap(len(darray.id2word))             # <<<<<<<<<<<<<<
@@ -28718,7 +26942,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -28728,7 +26952,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_super_frequent_patterns = ((struct __pyx_obj_3_sa_TrieMap *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":289
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":289
  *         frequent_patterns = TrieMap(len(darray.id2word))
  *         super_frequent_patterns = TrieMap(len(darray.id2word))
  *         collocations = TrieMap(len(darray.id2word))             # <<<<<<<<<<<<<<
@@ -28742,7 +26966,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -28752,7 +26976,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_collocations = ((struct __pyx_obj_3_sa_TrieMap *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":291
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":291
  *         collocations = TrieMap(len(darray.id2word))
  * 
  *         I_set = set()             # <<<<<<<<<<<<<<
@@ -28764,7 +26988,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_I_set = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":292
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":292
  * 
  *         I_set = set()
  *         J_set = set()             # <<<<<<<<<<<<<<
@@ -28776,7 +27000,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_J_set = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":293
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":293
  *         I_set = set()
  *         J_set = set()
  *         J2_set = set()             # <<<<<<<<<<<<<<
@@ -28788,7 +27012,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_J2_set = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":294
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":294
  *         J_set = set()
  *         J2_set = set()
  *         IJ_set = set()             # <<<<<<<<<<<<<<
@@ -28800,7 +27024,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_IJ_set = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":295
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":295
  *         J2_set = set()
  *         IJ_set = set()
  *         pattern_rank = {}             # <<<<<<<<<<<<<<
@@ -28812,7 +27036,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_v_pattern_rank = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":297
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":297
  *         pattern_rank = {}
  * 
  *         logger.info("Precomputing frequent intersections")             # <<<<<<<<<<<<<<
@@ -28829,7 +27053,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":298
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":298
  * 
  *         logger.info("Precomputing frequent intersections")
  *         cdef float start_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -28838,7 +27062,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
   __pyx_v_start_time = __pyx_f_3_sa_monitor_cpu();
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":300
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":300
  *         cdef float start_time = monitor_cpu()
  * 
  *         max_pattern_len = 0             # <<<<<<<<<<<<<<
@@ -28847,7 +27071,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
   __pyx_v_max_pattern_len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":301
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":301
  * 
  *         max_pattern_len = 0
  *         for rank, (_, _, phrase) in enumerate(stats):             # <<<<<<<<<<<<<<
@@ -28865,20 +27089,12 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_3)) {
+    if (PyList_CheckExact(__pyx_t_3)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_3)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_3)) {
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_3)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++;
     } else {
       __pyx_t_5 = __pyx_t_4(__pyx_t_3);
       if (unlikely(!__pyx_t_5)) {
@@ -28892,22 +27108,21 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
       PyObject* sequence = __pyx_t_5;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      Py_ssize_t size = Py_SIZE(sequence);
-      #else
-      Py_ssize_t size = PySequence_Size(sequence);
-      #endif
-      if (unlikely(size != 3)) {
-        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
-        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
+        if (unlikely(PyTuple_GET_SIZE(sequence) != 3)) {
+          if (PyTuple_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
       } else {
+        if (unlikely(PyList_GET_SIZE(sequence) != 3)) {
+          if (PyList_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
         __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
         __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
@@ -28915,35 +27130,28 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __Pyx_INCREF(__pyx_t_6);
       __Pyx_INCREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_t_8);
-      #else
-      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    } else
-    {
+    } else {
       Py_ssize_t index = -1;
       __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
-      index = 0; __pyx_t_6 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
+      index = 0; __pyx_t_6 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed;
+      index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_7);
-      index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed;
+      index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_8);
       if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_10 = NULL;
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      goto __pyx_L6_unpacking_done;
-      __pyx_L5_unpacking_failed:;
+      goto __pyx_L9_unpacking_done;
+      __pyx_L8_unpacking_failed:;
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_10 = NULL;
-      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
       {__pyx_filename = __pyx_f[11]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_L6_unpacking_done:;
+      __pyx_L9_unpacking_done:;
     }
     __Pyx_XDECREF(__pyx_v__);
     __pyx_v__ = __pyx_t_6;
@@ -28963,34 +27171,35 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_t_1 = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":302
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":302
  *         max_pattern_len = 0
  *         for rank, (_, _, phrase) in enumerate(stats):
  *             if rank >= self.precompute_rank:             # <<<<<<<<<<<<<<
  *                 break
  *             max_pattern_len = max(max_pattern_len, len(phrase))
  */
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_self->precompute_rank); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_rank); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_8 = PyObject_RichCompare(__pyx_v_rank, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyObject_RichCompare(__pyx_v_rank, __pyx_t_5, Py_GE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     if (__pyx_t_11) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":303
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":303
  *         for rank, (_, _, phrase) in enumerate(stats):
  *             if rank >= self.precompute_rank:
  *                 break             # <<<<<<<<<<<<<<
  *             max_pattern_len = max(max_pattern_len, len(phrase))
  *             frequent_patterns.insert(phrase)
  */
-      goto __pyx_L4_break;
-      goto __pyx_L7;
+      goto __pyx_L7_break;
+      goto __pyx_L10;
     }
-    __pyx_L7:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":304
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":304
  *             if rank >= self.precompute_rank:
  *                 break
  *             max_pattern_len = max(max_pattern_len, len(phrase))             # <<<<<<<<<<<<<<
@@ -29006,7 +27215,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     }
     __pyx_v_max_pattern_len = __pyx_t_14;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":305
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":305
  *                 break
  *             max_pattern_len = max(max_pattern_len, len(phrase))
  *             frequent_patterns.insert(phrase)             # <<<<<<<<<<<<<<
@@ -29016,7 +27225,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_t_8 = PyObject_GetAttr(((PyObject *)__pyx_v_frequent_patterns), __pyx_n_s__insert); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_INCREF(__pyx_v_phrase);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_phrase);
     __Pyx_GIVEREF(__pyx_v_phrase);
@@ -29026,16 +27235,19 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":306
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":306
  *             max_pattern_len = max(max_pattern_len, len(phrase))
  *             frequent_patterns.insert(phrase)
  *             I_set.add(phrase)             # <<<<<<<<<<<<<<
  *             pattern_rank[phrase] = rank
  *             if rank < self.precompute_secondary_rank:
  */
+    if (unlikely(((PyObject *)__pyx_v_I_set) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_15 = PySet_Add(__pyx_v_I_set, __pyx_v_phrase); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":307
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":307
  *             frequent_patterns.insert(phrase)
  *             I_set.add(phrase)
  *             pattern_rank[phrase] = rank             # <<<<<<<<<<<<<<
@@ -29044,22 +27256,23 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
     if (PyDict_SetItem(((PyObject *)__pyx_v_pattern_rank), __pyx_v_phrase, __pyx_v_rank) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":308
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":308
  *             I_set.add(phrase)
  *             pattern_rank[phrase] = rank
  *             if rank < self.precompute_secondary_rank:             # <<<<<<<<<<<<<<
  *                 super_frequent_patterns.insert(phrase)
  *                 J_set.add(phrase)
  */
-    __pyx_t_7 = PyInt_FromLong(__pyx_v_self->precompute_secondary_rank); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyInt_FromLong(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precompute_secondary_rank); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_v_rank, __pyx_t_7, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_v_rank, __pyx_t_7, Py_LT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_11) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":309
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":309
  *             pattern_rank[phrase] = rank
  *             if rank < self.precompute_secondary_rank:
  *                 super_frequent_patterns.insert(phrase)             # <<<<<<<<<<<<<<
@@ -29069,7 +27282,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_super_frequent_patterns), __pyx_n_s__insert); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_7));
       __Pyx_INCREF(__pyx_v_phrase);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_phrase);
       __Pyx_GIVEREF(__pyx_v_phrase);
@@ -29079,23 +27292,26 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":310
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":310
  *             if rank < self.precompute_secondary_rank:
  *                 super_frequent_patterns.insert(phrase)
  *                 J_set.add(phrase)             # <<<<<<<<<<<<<<
  * 
  *         queue = IntList(increment=1000)
  */
+      if (unlikely(((PyObject *)__pyx_v_J_set) == Py_None)) {
+        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+      }
       __pyx_t_15 = PySet_Add(__pyx_v_J_set, __pyx_v_phrase); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L8;
+      goto __pyx_L11;
     }
-    __pyx_L8:;
+    __pyx_L11:;
   }
-  __pyx_L4_break:;
+  __pyx_L7_break:;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":312
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":312
  *                 J_set.add(phrase)
  * 
  *         queue = IntList(increment=1000)             # <<<<<<<<<<<<<<
@@ -29105,13 +27321,13 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__increment), __pyx_int_1000) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_v_queue = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":314
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":314
  *         queue = IntList(increment=1000)
  * 
  *         logger.info("    Computing inverted indexes...")             # <<<<<<<<<<<<<<
@@ -29128,7 +27344,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":315
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":315
  * 
  *         logger.info("    Computing inverted indexes...")
  *         N = len(data)             # <<<<<<<<<<<<<<
@@ -29138,7 +27354,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_2 = PyObject_Length(((PyObject *)__pyx_v_data)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_N = __pyx_t_2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":316
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":316
  *         logger.info("    Computing inverted indexes...")
  *         N = len(data)
  *         for i from 0 <= i < N:             # <<<<<<<<<<<<<<
@@ -29148,7 +27364,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_13 = __pyx_v_N;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_13; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":317
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":317
  *         N = len(data)
  *         for i from 0 <= i < N:
  *             sa_word_id = data.arr[i]             # <<<<<<<<<<<<<<
@@ -29157,7 +27373,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
     __pyx_v_sa_word_id = (__pyx_v_data->arr[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":318
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":318
  *         for i from 0 <= i < N:
  *             sa_word_id = data.arr[i]
  *             if sa_word_id == 1:             # <<<<<<<<<<<<<<
@@ -29167,7 +27383,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_t_11 = (__pyx_v_sa_word_id == 1);
     if (__pyx_t_11) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":319
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":319
  *             sa_word_id = data.arr[i]
  *             if sa_word_id == 1:
  *                 queue._append(-1)             # <<<<<<<<<<<<<<
@@ -29175,11 +27391,11 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  *                 for l from 1 <= l <= max_pattern_len:
  */
       ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_queue->__pyx_vtab)->_append(__pyx_v_queue, -1);
-      goto __pyx_L11;
+      goto __pyx_L14;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":321
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":321
  *                 queue._append(-1)
  *             else:
  *                 for l from 1 <= l <= max_pattern_len:             # <<<<<<<<<<<<<<
@@ -29189,7 +27405,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_t_16 = __pyx_v_max_pattern_len;
       for (__pyx_v_l = 1; __pyx_v_l <= __pyx_t_16; __pyx_v_l++) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":322
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":322
  *             else:
  *                 for l from 1 <= l <= max_pattern_len:
  *                     node = frequent_patterns._contains(data.arr+i, l)             # <<<<<<<<<<<<<<
@@ -29198,7 +27414,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         __pyx_v_node = ((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_frequent_patterns->__pyx_vtab)->_contains(__pyx_v_frequent_patterns, (__pyx_v_data->arr + __pyx_v_i), __pyx_v_l);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":323
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":323
  *                 for l from 1 <= l <= max_pattern_len:
  *                     node = frequent_patterns._contains(data.arr+i, l)
  *                     if node == NULL:             # <<<<<<<<<<<<<<
@@ -29208,19 +27424,19 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_t_11 = (__pyx_v_node == NULL);
         if (__pyx_t_11) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":324
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":324
  *                     node = frequent_patterns._contains(data.arr+i, l)
  *                     if node == NULL:
  *                         break             # <<<<<<<<<<<<<<
  *                     queue._append(i)
  *                     queue._append(l)
  */
-          goto __pyx_L13_break;
-          goto __pyx_L14;
+          goto __pyx_L16_break;
+          goto __pyx_L17;
         }
-        __pyx_L14:;
+        __pyx_L17:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":325
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":325
  *                     if node == NULL:
  *                         break
  *                     queue._append(i)             # <<<<<<<<<<<<<<
@@ -29229,7 +27445,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_queue->__pyx_vtab)->_append(__pyx_v_queue, __pyx_v_i);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":326
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":326
  *                         break
  *                     queue._append(i)
  *                     queue._append(l)             # <<<<<<<<<<<<<<
@@ -29238,7 +27454,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_queue->__pyx_vtab)->_append(__pyx_v_queue, __pyx_v_l);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":327
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":327
  *                     queue._append(i)
  *                     queue._append(l)
  *                     trie_node_data_append(node, i)             # <<<<<<<<<<<<<<
@@ -29249,12 +27465,12 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       }
-      __pyx_L13_break:;
+      __pyx_L16_break:;
     }
-    __pyx_L11:;
+    __pyx_L14:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":329
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":329
  *                     trie_node_data_append(node, i)
  * 
  *         logger.info("    Computing collocations...")             # <<<<<<<<<<<<<<
@@ -29271,7 +27487,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":330
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":330
  * 
  *         logger.info("    Computing collocations...")
  *         N = len(queue)             # <<<<<<<<<<<<<<
@@ -29281,7 +27497,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_2 = PyObject_Length(((PyObject *)__pyx_v_queue)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_N = __pyx_t_2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":331
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":331
  *         logger.info("    Computing collocations...")
  *         N = len(queue)
  *         ptr1 = 0             # <<<<<<<<<<<<<<
@@ -29290,7 +27506,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
   __pyx_v_ptr1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":332
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":332
  *         N = len(queue)
  *         ptr1 = 0
  *         sent_count = 0             # <<<<<<<<<<<<<<
@@ -29299,7 +27515,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
   __pyx_v_sent_count = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":333
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":333
  *         ptr1 = 0
  *         sent_count = 0
  *         while ptr1 < N:    # main loop             # <<<<<<<<<<<<<<
@@ -29310,7 +27526,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_t_11 = (__pyx_v_ptr1 < __pyx_v_N);
     if (!__pyx_t_11) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":334
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":334
  *         sent_count = 0
  *         while ptr1 < N:    # main loop
  *             i1 = queue.arr[ptr1]             # <<<<<<<<<<<<<<
@@ -29319,7 +27535,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
     __pyx_v_i1 = (__pyx_v_queue->arr[__pyx_v_ptr1]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":335
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":335
  *         while ptr1 < N:    # main loop
  *             i1 = queue.arr[ptr1]
  *             if i1 > -1:             # <<<<<<<<<<<<<<
@@ -29329,7 +27545,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_t_11 = (__pyx_v_i1 > -1);
     if (__pyx_t_11) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":336
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":336
  *             i1 = queue.arr[ptr1]
  *             if i1 > -1:
  *                 l1 = queue.arr[ptr1+1]             # <<<<<<<<<<<<<<
@@ -29338,7 +27554,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_v_l1 = (__pyx_v_queue->arr[(__pyx_v_ptr1 + 1)]);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":337
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":337
  *             if i1 > -1:
  *                 l1 = queue.arr[ptr1+1]
  *                 ptr2 = ptr1 + 2             # <<<<<<<<<<<<<<
@@ -29347,7 +27563,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_v_ptr2 = (__pyx_v_ptr1 + 2);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":338
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":338
  *                 l1 = queue.arr[ptr1+1]
  *                 ptr2 = ptr1 + 2
  *                 while ptr2 < N:             # <<<<<<<<<<<<<<
@@ -29358,7 +27574,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_t_11 = (__pyx_v_ptr2 < __pyx_v_N);
         if (!__pyx_t_11) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":339
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":339
  *                 ptr2 = ptr1 + 2
  *                 while ptr2 < N:
  *                     i2 = queue.arr[ptr2]             # <<<<<<<<<<<<<<
@@ -29367,7 +27583,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         __pyx_v_i2 = (__pyx_v_queue->arr[__pyx_v_ptr2]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":340
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":340
  *                 while ptr2 < N:
  *                     i2 = queue.arr[ptr2]
  *                     if i2 == -1 or i2 - i1 >= self.train_max_initial_size:             # <<<<<<<<<<<<<<
@@ -29376,26 +27592,26 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         __pyx_t_11 = (__pyx_v_i2 == -1);
         if (!__pyx_t_11) {
-          __pyx_t_17 = ((__pyx_v_i2 - __pyx_v_i1) >= __pyx_v_self->train_max_initial_size);
+          __pyx_t_17 = ((__pyx_v_i2 - __pyx_v_i1) >= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size);
           __pyx_t_18 = __pyx_t_17;
         } else {
           __pyx_t_18 = __pyx_t_11;
         }
         if (__pyx_t_18) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":341
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":341
  *                     i2 = queue.arr[ptr2]
  *                     if i2 == -1 or i2 - i1 >= self.train_max_initial_size:
  *                         break             # <<<<<<<<<<<<<<
  *                     l2 = queue.arr[ptr2+1]
  *                     if (i2 - i1 - l1 >= self.train_min_gap_size and
  */
-          goto __pyx_L19_break;
-          goto __pyx_L20;
+          goto __pyx_L22_break;
+          goto __pyx_L23;
         }
-        __pyx_L20:;
+        __pyx_L23:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":342
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":342
  *                     if i2 == -1 or i2 - i1 >= self.train_max_initial_size:
  *                         break
  *                     l2 = queue.arr[ptr2+1]             # <<<<<<<<<<<<<<
@@ -29404,34 +27620,34 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         __pyx_v_l2 = (__pyx_v_queue->arr[(__pyx_v_ptr2 + 1)]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":343
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":343
  *                         break
  *                     l2 = queue.arr[ptr2+1]
  *                     if (i2 - i1 - l1 >= self.train_min_gap_size and             # <<<<<<<<<<<<<<
  *                             i2 + l2 - i1 <= self.train_max_initial_size and
  *                             l1+l2+1 <= self.max_length):
  */
-        __pyx_t_18 = (((__pyx_v_i2 - __pyx_v_i1) - __pyx_v_l1) >= __pyx_v_self->train_min_gap_size);
+        __pyx_t_18 = (((__pyx_v_i2 - __pyx_v_i1) - __pyx_v_l1) >= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_min_gap_size);
         if (__pyx_t_18) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":344
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":344
  *                     l2 = queue.arr[ptr2+1]
  *                     if (i2 - i1 - l1 >= self.train_min_gap_size and
  *                             i2 + l2 - i1 <= self.train_max_initial_size and             # <<<<<<<<<<<<<<
  *                             l1+l2+1 <= self.max_length):
  *                         node = collocations._insert(data.arr+i1, l1)
  */
-          __pyx_t_11 = (((__pyx_v_i2 + __pyx_v_l2) - __pyx_v_i1) <= __pyx_v_self->train_max_initial_size);
+          __pyx_t_11 = (((__pyx_v_i2 + __pyx_v_l2) - __pyx_v_i1) <= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size);
           if (__pyx_t_11) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":345
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":345
  *                     if (i2 - i1 - l1 >= self.train_min_gap_size and
  *                             i2 + l2 - i1 <= self.train_max_initial_size and
  *                             l1+l2+1 <= self.max_length):             # <<<<<<<<<<<<<<
  *                         node = collocations._insert(data.arr+i1, l1)
  *                         node = trie_insert(node, -1)
  */
-            __pyx_t_17 = (((__pyx_v_l1 + __pyx_v_l2) + 1) <= __pyx_v_self->max_length);
+            __pyx_t_17 = (((__pyx_v_l1 + __pyx_v_l2) + 1) <= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length);
             __pyx_t_19 = __pyx_t_17;
           } else {
             __pyx_t_19 = __pyx_t_11;
@@ -29442,7 +27658,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         }
         if (__pyx_t_11) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":346
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":346
  *                             i2 + l2 - i1 <= self.train_max_initial_size and
  *                             l1+l2+1 <= self.max_length):
  *                         node = collocations._insert(data.arr+i1, l1)             # <<<<<<<<<<<<<<
@@ -29451,7 +27667,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
           __pyx_v_node = ((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_collocations->__pyx_vtab)->_insert(__pyx_v_collocations, (__pyx_v_data->arr + __pyx_v_i1), __pyx_v_l1);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":347
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":347
  *                             l1+l2+1 <= self.max_length):
  *                         node = collocations._insert(data.arr+i1, l1)
  *                         node = trie_insert(node, -1)             # <<<<<<<<<<<<<<
@@ -29460,7 +27676,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
           __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, -1);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":348
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":348
  *                         node = collocations._insert(data.arr+i1, l1)
  *                         node = trie_insert(node, -1)
  *                         for i from i2 <= i < i2+l2:             # <<<<<<<<<<<<<<
@@ -29470,7 +27686,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
           __pyx_t_13 = (__pyx_v_i2 + __pyx_v_l2);
           for (__pyx_v_i = __pyx_v_i2; __pyx_v_i < __pyx_t_13; __pyx_v_i++) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":349
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":349
  *                         node = trie_insert(node, -1)
  *                         for i from i2 <= i < i2+l2:
  *                             node = trie_insert(node, data.arr[i])             # <<<<<<<<<<<<<<
@@ -29480,7 +27696,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
             __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, (__pyx_v_data->arr[__pyx_v_i]));
           }
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":350
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":350
  *                         for i from i2 <= i < i2+l2:
  *                             node = trie_insert(node, data.arr[i])
  *                         trie_node_data_append(node, i1)             # <<<<<<<<<<<<<<
@@ -29491,7 +27707,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":351
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":351
  *                             node = trie_insert(node, data.arr[i])
  *                         trie_node_data_append(node, i1)
  *                         trie_node_data_append(node, i2)             # <<<<<<<<<<<<<<
@@ -29502,7 +27718,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":352
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":352
  *                         trie_node_data_append(node, i1)
  *                         trie_node_data_append(node, i2)
  *                         if super_frequent_patterns._contains(data.arr+i2, l2) != NULL:             # <<<<<<<<<<<<<<
@@ -29512,7 +27728,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
           __pyx_t_11 = (((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_super_frequent_patterns->__pyx_vtab)->_contains(__pyx_v_super_frequent_patterns, (__pyx_v_data->arr + __pyx_v_i2), __pyx_v_l2) != NULL);
           if (__pyx_t_11) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":353
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":353
  *                         trie_node_data_append(node, i2)
  *                         if super_frequent_patterns._contains(data.arr+i2, l2) != NULL:
  *                             if super_frequent_patterns._contains(data.arr+i1, l1) != NULL:             # <<<<<<<<<<<<<<
@@ -29522,7 +27738,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
             __pyx_t_11 = (((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_super_frequent_patterns->__pyx_vtab)->_contains(__pyx_v_super_frequent_patterns, (__pyx_v_data->arr + __pyx_v_i1), __pyx_v_l1) != NULL);
             if (__pyx_t_11) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":354
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":354
  *                         if super_frequent_patterns._contains(data.arr+i2, l2) != NULL:
  *                             if super_frequent_patterns._contains(data.arr+i1, l1) != NULL:
  *                                 is_super = 1             # <<<<<<<<<<<<<<
@@ -29530,11 +27746,11 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  *                                 is_super = 0
  */
               __pyx_v_is_super = 1;
-              goto __pyx_L25;
+              goto __pyx_L28;
             }
             /*else*/ {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":356
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":356
  *                                 is_super = 1
  *                             else:
  *                                 is_super = 0             # <<<<<<<<<<<<<<
@@ -29543,9 +27759,9 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
               __pyx_v_is_super = 0;
             }
-            __pyx_L25:;
+            __pyx_L28:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":357
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":357
  *                             else:
  *                                 is_super = 0
  *                             ptr3 = ptr2 + 2             # <<<<<<<<<<<<<<
@@ -29554,7 +27770,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
             __pyx_v_ptr3 = (__pyx_v_ptr2 + 2);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":358
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":358
  *                                 is_super = 0
  *                             ptr3 = ptr2 + 2
  *                             while ptr3 < N:             # <<<<<<<<<<<<<<
@@ -29565,7 +27781,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
               __pyx_t_11 = (__pyx_v_ptr3 < __pyx_v_N);
               if (!__pyx_t_11) break;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":359
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":359
  *                             ptr3 = ptr2 + 2
  *                             while ptr3 < N:
  *                                 i3 = queue.arr[ptr3]             # <<<<<<<<<<<<<<
@@ -29574,7 +27790,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
               __pyx_v_i3 = (__pyx_v_queue->arr[__pyx_v_ptr3]);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":360
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":360
  *                             while ptr3 < N:
  *                                 i3 = queue.arr[ptr3]
  *                                 if i3 == -1 or i3 - i1 >= self.train_max_initial_size:             # <<<<<<<<<<<<<<
@@ -29583,26 +27799,26 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
               __pyx_t_11 = (__pyx_v_i3 == -1);
               if (!__pyx_t_11) {
-                __pyx_t_18 = ((__pyx_v_i3 - __pyx_v_i1) >= __pyx_v_self->train_max_initial_size);
+                __pyx_t_18 = ((__pyx_v_i3 - __pyx_v_i1) >= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size);
                 __pyx_t_19 = __pyx_t_18;
               } else {
                 __pyx_t_19 = __pyx_t_11;
               }
               if (__pyx_t_19) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":361
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":361
  *                                 i3 = queue.arr[ptr3]
  *                                 if i3 == -1 or i3 - i1 >= self.train_max_initial_size:
  *                                     break             # <<<<<<<<<<<<<<
  *                                 l3 = queue.arr[ptr3+1]
  *                                 if (i3 - i2 - l2 >= self.train_min_gap_size and
  */
-                goto __pyx_L27_break;
-                goto __pyx_L28;
+                goto __pyx_L30_break;
+                goto __pyx_L31;
               }
-              __pyx_L28:;
+              __pyx_L31:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":362
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":362
  *                                 if i3 == -1 or i3 - i1 >= self.train_max_initial_size:
  *                                     break
  *                                 l3 = queue.arr[ptr3+1]             # <<<<<<<<<<<<<<
@@ -29611,34 +27827,34 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
               __pyx_v_l3 = (__pyx_v_queue->arr[(__pyx_v_ptr3 + 1)]);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":363
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":363
  *                                     break
  *                                 l3 = queue.arr[ptr3+1]
  *                                 if (i3 - i2 - l2 >= self.train_min_gap_size and             # <<<<<<<<<<<<<<
  *                                         i3 + l3 - i1 <= self.train_max_initial_size and
  *                                         l1+l2+l3+2 <= self.max_length):
  */
-              __pyx_t_19 = (((__pyx_v_i3 - __pyx_v_i2) - __pyx_v_l2) >= __pyx_v_self->train_min_gap_size);
+              __pyx_t_19 = (((__pyx_v_i3 - __pyx_v_i2) - __pyx_v_l2) >= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_min_gap_size);
               if (__pyx_t_19) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":364
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":364
  *                                 l3 = queue.arr[ptr3+1]
  *                                 if (i3 - i2 - l2 >= self.train_min_gap_size and
  *                                         i3 + l3 - i1 <= self.train_max_initial_size and             # <<<<<<<<<<<<<<
  *                                         l1+l2+l3+2 <= self.max_length):
  *                                     if is_super or super_frequent_patterns._contains(data.arr+i3, l3) != NULL:
  */
-                __pyx_t_11 = (((__pyx_v_i3 + __pyx_v_l3) - __pyx_v_i1) <= __pyx_v_self->train_max_initial_size);
+                __pyx_t_11 = (((__pyx_v_i3 + __pyx_v_l3) - __pyx_v_i1) <= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->train_max_initial_size);
                 if (__pyx_t_11) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":365
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":365
  *                                 if (i3 - i2 - l2 >= self.train_min_gap_size and
  *                                         i3 + l3 - i1 <= self.train_max_initial_size and
  *                                         l1+l2+l3+2 <= self.max_length):             # <<<<<<<<<<<<<<
  *                                     if is_super or super_frequent_patterns._contains(data.arr+i3, l3) != NULL:
  *                                         node = collocations._insert(data.arr+i1, l1)
  */
-                  __pyx_t_18 = ((((__pyx_v_l1 + __pyx_v_l2) + __pyx_v_l3) + 2) <= __pyx_v_self->max_length);
+                  __pyx_t_18 = ((((__pyx_v_l1 + __pyx_v_l2) + __pyx_v_l3) + 2) <= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length);
                   __pyx_t_17 = __pyx_t_18;
                 } else {
                   __pyx_t_17 = __pyx_t_11;
@@ -29649,7 +27865,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
               }
               if (__pyx_t_11) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":366
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":366
  *                                         i3 + l3 - i1 <= self.train_max_initial_size and
  *                                         l1+l2+l3+2 <= self.max_length):
  *                                     if is_super or super_frequent_patterns._contains(data.arr+i3, l3) != NULL:             # <<<<<<<<<<<<<<
@@ -29664,7 +27880,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                 }
                 if (__pyx_t_19) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":367
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":367
  *                                         l1+l2+l3+2 <= self.max_length):
  *                                     if is_super or super_frequent_patterns._contains(data.arr+i3, l3) != NULL:
  *                                         node = collocations._insert(data.arr+i1, l1)             # <<<<<<<<<<<<<<
@@ -29673,7 +27889,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
                   __pyx_v_node = ((struct __pyx_vtabstruct_3_sa_TrieMap *)__pyx_v_collocations->__pyx_vtab)->_insert(__pyx_v_collocations, (__pyx_v_data->arr + __pyx_v_i1), __pyx_v_l1);
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":368
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":368
  *                                     if is_super or super_frequent_patterns._contains(data.arr+i3, l3) != NULL:
  *                                         node = collocations._insert(data.arr+i1, l1)
  *                                         node = trie_insert(node, -1)             # <<<<<<<<<<<<<<
@@ -29682,7 +27898,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
                   __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, -1);
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":369
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":369
  *                                         node = collocations._insert(data.arr+i1, l1)
  *                                         node = trie_insert(node, -1)
  *                                         for i from i2 <= i < i2+l2:             # <<<<<<<<<<<<<<
@@ -29692,7 +27908,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                   __pyx_t_13 = (__pyx_v_i2 + __pyx_v_l2);
                   for (__pyx_v_i = __pyx_v_i2; __pyx_v_i < __pyx_t_13; __pyx_v_i++) {
 
-                    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":370
+                    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":370
  *                                         node = trie_insert(node, -1)
  *                                         for i from i2 <= i < i2+l2:
  *                                             node = trie_insert(node, data.arr[i])             # <<<<<<<<<<<<<<
@@ -29702,7 +27918,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                     __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, (__pyx_v_data->arr[__pyx_v_i]));
                   }
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":371
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":371
  *                                         for i from i2 <= i < i2+l2:
  *                                             node = trie_insert(node, data.arr[i])
  *                                         node = trie_insert(node, -1)             # <<<<<<<<<<<<<<
@@ -29711,7 +27927,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
                   __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, -1);
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":372
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":372
  *                                             node = trie_insert(node, data.arr[i])
  *                                         node = trie_insert(node, -1)
  *                                         for i from i3 <= i < i3+l3:             # <<<<<<<<<<<<<<
@@ -29721,7 +27937,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                   __pyx_t_13 = (__pyx_v_i3 + __pyx_v_l3);
                   for (__pyx_v_i = __pyx_v_i3; __pyx_v_i < __pyx_t_13; __pyx_v_i++) {
 
-                    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":373
+                    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":373
  *                                         node = trie_insert(node, -1)
  *                                         for i from i3 <= i < i3+l3:
  *                                             node = trie_insert(node, data.arr[i])             # <<<<<<<<<<<<<<
@@ -29731,7 +27947,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                     __pyx_v_node = __pyx_f_3_sa_trie_insert(__pyx_v_node, (__pyx_v_data->arr[__pyx_v_i]));
                   }
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":374
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":374
  *                                         for i from i3 <= i < i3+l3:
  *                                             node = trie_insert(node, data.arr[i])
  *                                         trie_node_data_append(node, i1)             # <<<<<<<<<<<<<<
@@ -29742,7 +27958,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                   __Pyx_GOTREF(__pyx_t_3);
                   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":375
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":375
  *                                             node = trie_insert(node, data.arr[i])
  *                                         trie_node_data_append(node, i1)
  *                                         trie_node_data_append(node, i2)             # <<<<<<<<<<<<<<
@@ -29753,7 +27969,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                   __Pyx_GOTREF(__pyx_t_3);
                   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":376
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":376
  *                                         trie_node_data_append(node, i1)
  *                                         trie_node_data_append(node, i2)
  *                                         trie_node_data_append(node, i3)             # <<<<<<<<<<<<<<
@@ -29763,14 +27979,14 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
                   __pyx_t_3 = __pyx_f_3_sa_trie_node_data_append(__pyx_v_node, __pyx_v_i3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_3);
                   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-                  goto __pyx_L30;
+                  goto __pyx_L33;
                 }
-                __pyx_L30:;
-                goto __pyx_L29;
+                __pyx_L33:;
+                goto __pyx_L32;
               }
-              __pyx_L29:;
+              __pyx_L32:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":377
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":377
  *                                         trie_node_data_append(node, i2)
  *                                         trie_node_data_append(node, i3)
  *                                 ptr3 = ptr3 + 2             # <<<<<<<<<<<<<<
@@ -29779,15 +27995,15 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
               __pyx_v_ptr3 = (__pyx_v_ptr3 + 2);
             }
-            __pyx_L27_break:;
-            goto __pyx_L24;
+            __pyx_L30_break:;
+            goto __pyx_L27;
           }
-          __pyx_L24:;
-          goto __pyx_L21;
+          __pyx_L27:;
+          goto __pyx_L24;
         }
-        __pyx_L21:;
+        __pyx_L24:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":378
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":378
  *                                         trie_node_data_append(node, i3)
  *                                 ptr3 = ptr3 + 2
  *                     ptr2 = ptr2 + 2             # <<<<<<<<<<<<<<
@@ -29796,9 +28012,9 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
         __pyx_v_ptr2 = (__pyx_v_ptr2 + 2);
       }
-      __pyx_L19_break:;
+      __pyx_L22_break:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":379
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":379
  *                                 ptr3 = ptr3 + 2
  *                     ptr2 = ptr2 + 2
  *                 ptr1 = ptr1 + 2             # <<<<<<<<<<<<<<
@@ -29806,11 +28022,11 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  *                 sent_count = sent_count + 1
  */
       __pyx_v_ptr1 = (__pyx_v_ptr1 + 2);
-      goto __pyx_L17;
+      goto __pyx_L20;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":381
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":381
  *                 ptr1 = ptr1 + 2
  *             else:
  *                 sent_count = sent_count + 1             # <<<<<<<<<<<<<<
@@ -29819,7 +28035,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_v_sent_count = (__pyx_v_sent_count + 1);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":382
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":382
  *             else:
  *                 sent_count = sent_count + 1
  *                 if sent_count % 10000 == 0:             # <<<<<<<<<<<<<<
@@ -29829,7 +28045,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_t_19 = (__Pyx_mod_long(__pyx_v_sent_count, 10000) == 0);
       if (__pyx_t_19) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":383
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":383
  *                 sent_count = sent_count + 1
  *                 if sent_count % 10000 == 0:
  *                     logger.debug("        %d sentences", sent_count)             # <<<<<<<<<<<<<<
@@ -29844,7 +28060,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_t_3 = PyInt_FromLong(__pyx_v_sent_count); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_8));
         __Pyx_INCREF(((PyObject *)__pyx_kp_s_78));
         PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_kp_s_78));
         __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_78));
@@ -29856,11 +28072,11 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        goto __pyx_L35;
+        goto __pyx_L38;
       }
-      __pyx_L35:;
+      __pyx_L38:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":384
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":384
  *                 if sent_count % 10000 == 0:
  *                     logger.debug("        %d sentences", sent_count)
  *                 ptr1 = ptr1 + 1             # <<<<<<<<<<<<<<
@@ -29869,10 +28085,10 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_v_ptr1 = (__pyx_v_ptr1 + 1);
     }
-    __pyx_L17:;
+    __pyx_L20:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":386
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":386
  *                 ptr1 = ptr1 + 1
  * 
  *         self.precomputed_collocations = collocations.toMap(False)             # <<<<<<<<<<<<<<
@@ -29884,7 +28100,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_8 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
   __Pyx_GIVEREF(__pyx_t_8);
   __pyx_t_8 = 0;
@@ -29893,12 +28109,12 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_8);
-  __Pyx_GOTREF(__pyx_v_self->precomputed_collocations);
-  __Pyx_DECREF(__pyx_v_self->precomputed_collocations);
-  __pyx_v_self->precomputed_collocations = __pyx_t_8;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations);
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations = __pyx_t_8;
   __pyx_t_8 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":387
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":387
  * 
  *         self.precomputed_collocations = collocations.toMap(False)
  *         self.precomputed_index = frequent_patterns.toMap(True)             # <<<<<<<<<<<<<<
@@ -29910,7 +28126,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -29919,12 +28135,12 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->precomputed_index);
-  __Pyx_DECREF(__pyx_v_self->precomputed_index);
-  __pyx_v_self->precomputed_index = __pyx_t_1;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index);
+  ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":389
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":389
  *         self.precomputed_index = frequent_patterns.toMap(True)
  * 
  *         x = 0             # <<<<<<<<<<<<<<
@@ -29934,7 +28150,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_x = __pyx_int_0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":390
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":390
  * 
  *         x = 0
  *         for pattern1 in J_set:             # <<<<<<<<<<<<<<
@@ -29960,7 +28176,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_v_pattern1 = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":391
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":391
  *         x = 0
  *         for pattern1 in J_set:
  *             for pattern2 in J_set:             # <<<<<<<<<<<<<<
@@ -29986,7 +28202,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_v_pattern2 = __pyx_t_8;
       __pyx_t_8 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":392
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":392
  *         for pattern1 in J_set:
  *             for pattern2 in J_set:
  *                 if len(pattern1) + len(pattern2) + 1 < self.max_length:             # <<<<<<<<<<<<<<
@@ -29995,10 +28211,10 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_t_2 = PyObject_Length(__pyx_v_pattern1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_14 = PyObject_Length(__pyx_v_pattern2); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_19 = (((__pyx_t_2 + __pyx_t_14) + 1) < __pyx_v_self->max_length);
+      __pyx_t_19 = (((__pyx_t_2 + __pyx_t_14) + 1) < ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length);
       if (__pyx_t_19) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":393
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":393
  *             for pattern2 in J_set:
  *                 if len(pattern1) + len(pattern2) + 1 < self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2             # <<<<<<<<<<<<<<
@@ -30014,23 +28230,26 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_v_combined_pattern = __pyx_t_7;
         __pyx_t_7 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":394
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":394
  *                 if len(pattern1) + len(pattern2) + 1 < self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2
  *                     J2_set.add(combined_pattern)             # <<<<<<<<<<<<<<
  * 
  *         for pattern1 in I_set:
  */
+        if (unlikely(((PyObject *)__pyx_v_J2_set) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_15 = PySet_Add(__pyx_v_J2_set, __pyx_v_combined_pattern); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L40;
+        goto __pyx_L43;
       }
-      __pyx_L40:;
+      __pyx_L43:;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":396
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":396
  *                     J2_set.add(combined_pattern)
  * 
  *         for pattern1 in I_set:             # <<<<<<<<<<<<<<
@@ -30056,7 +28275,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_v_pattern1 = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":397
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":397
  * 
  *         for pattern1 in I_set:
  *             for pattern2 in I_set:             # <<<<<<<<<<<<<<
@@ -30082,7 +28301,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_v_pattern2 = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":398
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":398
  *         for pattern1 in I_set:
  *             for pattern2 in I_set:
  *                 x = x+1             # <<<<<<<<<<<<<<
@@ -30095,7 +28314,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_v_x = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":399
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":399
  *             for pattern2 in I_set:
  *                 x = x+1
  *                 if len(pattern1) + len(pattern2) + 1 <= self.max_length:             # <<<<<<<<<<<<<<
@@ -30104,10 +28323,10 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_t_14 = PyObject_Length(__pyx_v_pattern1); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_2 = PyObject_Length(__pyx_v_pattern2); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_19 = (((__pyx_t_14 + __pyx_t_2) + 1) <= __pyx_v_self->max_length);
+      __pyx_t_19 = (((__pyx_t_14 + __pyx_t_2) + 1) <= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length);
       if (__pyx_t_19) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":400
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":400
  *                 x = x+1
  *                 if len(pattern1) + len(pattern2) + 1 <= self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2             # <<<<<<<<<<<<<<
@@ -30123,23 +28342,26 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_v_combined_pattern = __pyx_t_8;
         __pyx_t_8 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":401
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":401
  *                 if len(pattern1) + len(pattern2) + 1 <= self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2
  *                     IJ_set.add(combined_pattern)             # <<<<<<<<<<<<<<
  * 
  *         for pattern1 in I_set:
  */
+        if (unlikely(((PyObject *)__pyx_v_IJ_set) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_15 = PySet_Add(__pyx_v_IJ_set, __pyx_v_combined_pattern); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L45;
+        goto __pyx_L48;
       }
-      __pyx_L45:;
+      __pyx_L48:;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":403
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":403
  *                     IJ_set.add(combined_pattern)
  * 
  *         for pattern1 in I_set:             # <<<<<<<<<<<<<<
@@ -30165,7 +28387,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_v_pattern1 = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":404
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":404
  * 
  *         for pattern1 in I_set:
  *             for pattern2 in J2_set:             # <<<<<<<<<<<<<<
@@ -30191,7 +28413,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_v_pattern2 = __pyx_t_8;
       __pyx_t_8 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":405
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":405
  *         for pattern1 in I_set:
  *             for pattern2 in J2_set:
  *                 x = x+2             # <<<<<<<<<<<<<<
@@ -30204,7 +28426,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __pyx_v_x = __pyx_t_8;
       __pyx_t_8 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":406
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":406
  *             for pattern2 in J2_set:
  *                 x = x+2
  *                 if len(pattern1) + len(pattern2) + 1<= self.max_length:             # <<<<<<<<<<<<<<
@@ -30213,10 +28435,10 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_t_2 = PyObject_Length(__pyx_v_pattern1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_14 = PyObject_Length(__pyx_v_pattern2); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_19 = (((__pyx_t_2 + __pyx_t_14) + 1) <= __pyx_v_self->max_length);
+      __pyx_t_19 = (((__pyx_t_2 + __pyx_t_14) + 1) <= ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->max_length);
       if (__pyx_t_19) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":407
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":407
  *                 x = x+2
  *                 if len(pattern1) + len(pattern2) + 1<= self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2             # <<<<<<<<<<<<<<
@@ -30232,16 +28454,19 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_v_combined_pattern = __pyx_t_7;
         __pyx_t_7 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":408
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":408
  *                 if len(pattern1) + len(pattern2) + 1<= self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2
  *                     IJ_set.add(combined_pattern)             # <<<<<<<<<<<<<<
  *                     combined_pattern = pattern2 + (-1,) + pattern1
  *                     IJ_set.add(combined_pattern)
  */
+        if (unlikely(((PyObject *)__pyx_v_IJ_set) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_15 = PySet_Add(__pyx_v_IJ_set, __pyx_v_combined_pattern); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":409
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":409
  *                     combined_pattern = pattern1 + (-1,) + pattern2
  *                     IJ_set.add(combined_pattern)
  *                     combined_pattern = pattern2 + (-1,) + pattern1             # <<<<<<<<<<<<<<
@@ -30257,33 +28482,39 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
         __pyx_v_combined_pattern = __pyx_t_8;
         __pyx_t_8 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":410
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":410
  *                     IJ_set.add(combined_pattern)
  *                     combined_pattern = pattern2 + (-1,) + pattern1
  *                     IJ_set.add(combined_pattern)             # <<<<<<<<<<<<<<
  * 
  *         N = len(pattern_rank)
  */
+        if (unlikely(((PyObject *)__pyx_v_IJ_set) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_15 = PySet_Add(__pyx_v_IJ_set, __pyx_v_combined_pattern); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L50;
+        goto __pyx_L53;
       }
-      __pyx_L50:;
+      __pyx_L53:;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":412
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":412
  *                     IJ_set.add(combined_pattern)
  * 
  *         N = len(pattern_rank)             # <<<<<<<<<<<<<<
  *         cost_by_rank = IntList(initial_len=N)
  *         count_by_rank = IntList(initial_len=N)
  */
-  __pyx_t_14 = PyDict_Size(((PyObject *)__pyx_v_pattern_rank)); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(((PyObject *)__pyx_v_pattern_rank) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
+  __pyx_t_14 = PyDict_Size(((PyObject *)__pyx_v_pattern_rank)); 
   __pyx_v_N = __pyx_t_14;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":413
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":413
  * 
  *         N = len(pattern_rank)
  *         cost_by_rank = IntList(initial_len=N)             # <<<<<<<<<<<<<<
@@ -30296,13 +28527,13 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_v_cost_by_rank = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":414
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":414
  *         N = len(pattern_rank)
  *         cost_by_rank = IntList(initial_len=N)
  *         count_by_rank = IntList(initial_len=N)             # <<<<<<<<<<<<<<
@@ -30315,53 +28546,111 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_GOTREF(__pyx_t_1);
   if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __pyx_v_count_by_rank = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":415
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":415
  *         cost_by_rank = IntList(initial_len=N)
  *         count_by_rank = IntList(initial_len=N)
  *         for pattern, arr in self.precomputed_collocations.iteritems():             # <<<<<<<<<<<<<<
  *             if pattern not in IJ_set:
  *                 s = ""
  */
-  __pyx_t_14 = 0;
-  if (unlikely(__pyx_v_self->precomputed_collocations == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_self->precomputed_collocations, 0, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_2), (&__pyx_t_13)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_1);
-  __pyx_t_1 = __pyx_t_3;
-  __pyx_t_3 = 0;
-  while (1) {
-    __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_14, &__pyx_t_3, &__pyx_t_8, NULL, __pyx_t_13);
-    if (unlikely(__pyx_t_16 == 0)) break;
-    if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
+    __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_14 = 0;
+    __pyx_t_4 = NULL;
+  } else {
+    __pyx_t_14 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext;
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  for (;;) {
+    if (PyList_CheckExact(__pyx_t_1)) {
+      if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_1)) break;
+      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
+      if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++;
+    } else {
+      __pyx_t_3 = __pyx_t_4(__pyx_t_1);
+      if (unlikely(!__pyx_t_3)) {
+        if (PyErr_Occurred()) {
+          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+          else {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
+      PyObject* sequence = __pyx_t_3;
+      if (likely(PyTuple_CheckExact(sequence))) {
+        if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+          if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
+        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
+      } else {
+        if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+          if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
+        __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
+      }
+      __Pyx_INCREF(__pyx_t_8);
+      __Pyx_INCREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else {
+      Py_ssize_t index = -1;
+      __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_10 = Py_TYPE(__pyx_t_5)->tp_iternext;
+      index = 0; __pyx_t_8 = __pyx_t_10(__pyx_t_5); if (unlikely(!__pyx_t_8)) goto __pyx_L56_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_8);
+      index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_5); if (unlikely(!__pyx_t_7)) goto __pyx_L56_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_7);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      goto __pyx_L57_unpacking_done;
+      __pyx_L56_unpacking_failed:;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+      {__pyx_filename = __pyx_f[11]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_L57_unpacking_done:;
+    }
     __Pyx_XDECREF(__pyx_v_pattern);
-    __pyx_v_pattern = __pyx_t_3;
-    __pyx_t_3 = 0;
-    __Pyx_XDECREF(__pyx_v_arr);
-    __pyx_v_arr = __pyx_t_8;
+    __pyx_v_pattern = __pyx_t_8;
     __pyx_t_8 = 0;
+    __Pyx_XDECREF(__pyx_v_arr);
+    __pyx_v_arr = __pyx_t_7;
+    __pyx_t_7 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":416
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":416
  *         count_by_rank = IntList(initial_len=N)
  *         for pattern, arr in self.precomputed_collocations.iteritems():
  *             if pattern not in IJ_set:             # <<<<<<<<<<<<<<
  *                 s = ""
  *                 for word_id in pattern:
  */
-    __pyx_t_19 = (__Pyx_PySequence_Contains(__pyx_v_pattern, ((PyObject *)__pyx_v_IJ_set), Py_NE)); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_19 = (__Pyx_NegateNonNeg(PySequence_Contains(((PyObject *)__pyx_v_IJ_set), __pyx_v_pattern))); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (__pyx_t_19) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":417
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":417
  *         for pattern, arr in self.precomputed_collocations.iteritems():
  *             if pattern not in IJ_set:
  *                 s = ""             # <<<<<<<<<<<<<<
@@ -30372,7 +28661,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __Pyx_XDECREF(__pyx_v_s);
       __pyx_v_s = ((PyObject *)__pyx_kp_s_45);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":418
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":418
  *             if pattern not in IJ_set:
  *                 s = ""
  *                 for word_id in pattern:             # <<<<<<<<<<<<<<
@@ -30380,124 +28669,117 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  *                         s = s + "X "
  */
       if (PyList_CheckExact(__pyx_v_pattern) || PyTuple_CheckExact(__pyx_v_pattern)) {
-        __pyx_t_8 = __pyx_v_pattern; __Pyx_INCREF(__pyx_t_8); __pyx_t_12 = 0;
-        __pyx_t_4 = NULL;
+        __pyx_t_3 = __pyx_v_pattern; __Pyx_INCREF(__pyx_t_3); __pyx_t_2 = 0;
+        __pyx_t_20 = NULL;
       } else {
-        __pyx_t_12 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_pattern); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_4 = Py_TYPE(__pyx_t_8)->tp_iternext;
+        __pyx_t_2 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_pattern); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_20 = Py_TYPE(__pyx_t_3)->tp_iternext;
       }
       for (;;) {
-        if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_8)) {
-          if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_8)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_12); __Pyx_INCREF(__pyx_t_3); __pyx_t_12++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #endif
-        } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_8)) {
-          if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_12); __Pyx_INCREF(__pyx_t_3); __pyx_t_12++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #endif
+        if (PyList_CheckExact(__pyx_t_3)) {
+          if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_3)) break;
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_7); __pyx_t_2++;
+        } else if (PyTuple_CheckExact(__pyx_t_3)) {
+          if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_7); __pyx_t_2++;
         } else {
-          __pyx_t_3 = __pyx_t_4(__pyx_t_8);
-          if (unlikely(!__pyx_t_3)) {
+          __pyx_t_7 = __pyx_t_20(__pyx_t_3);
+          if (unlikely(!__pyx_t_7)) {
             if (PyErr_Occurred()) {
               if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
               else {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             break;
           }
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(__pyx_t_7);
         }
         __Pyx_XDECREF(__pyx_v_word_id);
-        __pyx_v_word_id = __pyx_t_3;
-        __pyx_t_3 = 0;
+        __pyx_v_word_id = __pyx_t_7;
+        __pyx_t_7 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":419
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":419
  *                 s = ""
  *                 for word_id in pattern:
  *                     if word_id == -1:             # <<<<<<<<<<<<<<
  *                         s = s + "X "
  *                     else:
  */
-        __pyx_t_3 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __pyx_t_7 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_7);
+        __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         if (__pyx_t_19) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":420
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":420
  *                 for word_id in pattern:
  *                     if word_id == -1:
  *                         s = s + "X "             # <<<<<<<<<<<<<<
  *                     else:
  *                         s = s + darray.id2word[word_id] + " "
  */
-          __pyx_t_3 = PyNumber_Add(__pyx_v_s, ((PyObject *)__pyx_kp_s_83)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_7 = PyNumber_Add(__pyx_v_s, ((PyObject *)__pyx_kp_s_83)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_v_s);
-          __pyx_v_s = __pyx_t_3;
-          __pyx_t_3 = 0;
-          goto __pyx_L56;
+          __pyx_v_s = __pyx_t_7;
+          __pyx_t_7 = 0;
+          goto __pyx_L61;
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":422
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":422
  *                         s = s + "X "
  *                     else:
  *                         s = s + darray.id2word[word_id] + " "             # <<<<<<<<<<<<<<
  *                 logger.warn("ERROR: unexpected pattern %s in set of precomputed collocations", s)
  *             else:
  */
-          __pyx_t_3 = PyObject_GetItem(__pyx_v_darray->id2word, __pyx_v_word_id); if (!__pyx_t_3) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_7 = PyNumber_Add(__pyx_v_s, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PyObject_GetItem(__pyx_v_darray->id2word, __pyx_v_word_id); if (!__pyx_t_7) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_7);
-          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          __pyx_t_3 = PyNumber_Add(__pyx_t_7, ((PyObject *)__pyx_kp_s_67)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_8 = PyNumber_Add(__pyx_v_s, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+          __pyx_t_7 = PyNumber_Add(__pyx_t_8, ((PyObject *)__pyx_kp_s_67)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_DECREF(__pyx_v_s);
-          __pyx_v_s = __pyx_t_3;
-          __pyx_t_3 = 0;
+          __pyx_v_s = __pyx_t_7;
+          __pyx_t_7 = 0;
         }
-        __pyx_L56:;
+        __pyx_L61:;
       }
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":423
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":423
  *                     else:
  *                         s = s + darray.id2word[word_id] + " "
  *                 logger.warn("ERROR: unexpected pattern %s in set of precomputed collocations", s)             # <<<<<<<<<<<<<<
  *             else:
  *                 chunk = ()
  */
-      __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_3 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__warn); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
+      __pyx_t_7 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__warn); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
       __Pyx_INCREF(((PyObject *)__pyx_kp_s_84));
-      PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_kp_s_84));
+      PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_84));
       __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_84));
       __Pyx_INCREF(__pyx_v_s);
-      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_s);
+      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_s);
       __Pyx_GIVEREF(__pyx_v_s);
-      __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+      __pyx_t_8 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      goto __pyx_L53;
+      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      goto __pyx_L58;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":425
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":425
  *                 logger.warn("ERROR: unexpected pattern %s in set of precomputed collocations", s)
  *             else:
  *                 chunk = ()             # <<<<<<<<<<<<<<
@@ -30508,7 +28790,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __Pyx_XDECREF(((PyObject *)__pyx_v_chunk));
       __pyx_v_chunk = __pyx_empty_tuple;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":426
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":426
  *             else:
  *                 chunk = ()
  *                 max_rank = 0             # <<<<<<<<<<<<<<
@@ -30517,7 +28799,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
       __pyx_v_max_rank = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":427
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":427
  *                 chunk = ()
  *                 max_rank = 0
  *                 arity = 0             # <<<<<<<<<<<<<<
@@ -30528,7 +28810,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
       __Pyx_XDECREF(__pyx_v_arity);
       __pyx_v_arity = __pyx_int_0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":428
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":428
  *                 max_rank = 0
  *                 arity = 0
  *                 for word_id in pattern:             # <<<<<<<<<<<<<<
@@ -30536,99 +28818,93 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  *                         max_rank = max(max_rank, pattern_rank[chunk])
  */
       if (PyList_CheckExact(__pyx_v_pattern) || PyTuple_CheckExact(__pyx_v_pattern)) {
-        __pyx_t_7 = __pyx_v_pattern; __Pyx_INCREF(__pyx_t_7); __pyx_t_12 = 0;
-        __pyx_t_4 = NULL;
+        __pyx_t_8 = __pyx_v_pattern; __Pyx_INCREF(__pyx_t_8); __pyx_t_2 = 0;
+        __pyx_t_20 = NULL;
       } else {
-        __pyx_t_12 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_pattern); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_4 = Py_TYPE(__pyx_t_7)->tp_iternext;
+        __pyx_t_2 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_pattern); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_8);
+        __pyx_t_20 = Py_TYPE(__pyx_t_8)->tp_iternext;
       }
       for (;;) {
-        if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_7)) {
-          if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_7)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #else
-          __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #endif
-        } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_7)) {
-          if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #else
-          __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          #endif
+        if (PyList_CheckExact(__pyx_t_8)) {
+          if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_8)) break;
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
+        } else if (PyTuple_CheckExact(__pyx_t_8)) {
+          if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
         } else {
-          __pyx_t_8 = __pyx_t_4(__pyx_t_7);
-          if (unlikely(!__pyx_t_8)) {
+          __pyx_t_3 = __pyx_t_20(__pyx_t_8);
+          if (unlikely(!__pyx_t_3)) {
             if (PyErr_Occurred()) {
               if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
               else {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             break;
           }
-          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GOTREF(__pyx_t_3);
         }
         __Pyx_XDECREF(__pyx_v_word_id);
-        __pyx_v_word_id = __pyx_t_8;
-        __pyx_t_8 = 0;
+        __pyx_v_word_id = __pyx_t_3;
+        __pyx_t_3 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":429
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":429
  *                 arity = 0
  *                 for word_id in pattern:
  *                     if word_id == -1:             # <<<<<<<<<<<<<<
  *                         max_rank = max(max_rank, pattern_rank[chunk])
  *                         arity = arity + 1
  */
-        __pyx_t_8 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __pyx_t_3 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         if (__pyx_t_19) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":430
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":430
  *                 for word_id in pattern:
  *                     if word_id == -1:
  *                         max_rank = max(max_rank, pattern_rank[chunk])             # <<<<<<<<<<<<<<
  *                         arity = arity + 1
  *                         chunk = ()
  */
-          __pyx_t_8 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_pattern_rank), ((PyObject *)__pyx_v_chunk)); if (!__pyx_t_8) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_8);
-          __pyx_t_16 = __pyx_v_max_rank;
-          __pyx_t_5 = PyInt_FromLong(__pyx_t_16); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_pattern_rank), ((PyObject *)__pyx_v_chunk)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_13 = __pyx_v_max_rank;
+          __pyx_t_5 = PyInt_FromLong(__pyx_t_13); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_5, Py_GT); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           if (__pyx_t_19) {
-            __Pyx_INCREF(__pyx_t_8);
-            __pyx_t_3 = __pyx_t_8;
+            __Pyx_INCREF(__pyx_t_3);
+            __pyx_t_7 = __pyx_t_3;
           } else {
-            __pyx_t_6 = PyInt_FromLong(__pyx_t_16); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_6 = PyInt_FromLong(__pyx_t_13); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_6);
-            __pyx_t_3 = __pyx_t_6;
+            __pyx_t_7 = __pyx_t_6;
             __pyx_t_6 = 0;
           }
-          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-          __pyx_t_16 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          __pyx_v_max_rank = __pyx_t_16;
+          __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_t_7); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+          __pyx_v_max_rank = __pyx_t_13;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":431
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":431
  *                     if word_id == -1:
  *                         max_rank = max(max_rank, pattern_rank[chunk])
  *                         arity = arity + 1             # <<<<<<<<<<<<<<
  *                         chunk = ()
  *                     else:
  */
-          __pyx_t_3 = PyNumber_Add(__pyx_v_arity, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_7 = PyNumber_Add(__pyx_v_arity, __pyx_int_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_v_arity);
-          __pyx_v_arity = __pyx_t_3;
-          __pyx_t_3 = 0;
+          __pyx_v_arity = __pyx_t_7;
+          __pyx_t_7 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":432
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":432
  *                         max_rank = max(max_rank, pattern_rank[chunk])
  *                         arity = arity + 1
  *                         chunk = ()             # <<<<<<<<<<<<<<
@@ -30638,104 +28914,105 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
           __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
           __Pyx_DECREF(((PyObject *)__pyx_v_chunk));
           __pyx_v_chunk = __pyx_empty_tuple;
-          goto __pyx_L59;
+          goto __pyx_L64;
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":434
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":434
  *                         chunk = ()
  *                     else:
  *                         chunk = chunk + (word_id,)             # <<<<<<<<<<<<<<
  *                 max_rank = max(max_rank, pattern_rank[chunk])
  *                 cost_by_rank.arr[max_rank] = cost_by_rank.arr[max_rank] + (4*len(arr))
  */
-          __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_7));
           __Pyx_INCREF(__pyx_v_word_id);
-          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_word_id);
+          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_word_id);
           __Pyx_GIVEREF(__pyx_v_word_id);
-          __pyx_t_8 = PyNumber_Add(((PyObject *)__pyx_v_chunk), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(((PyObject *)__pyx_t_8));
-          __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+          __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_v_chunk), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+          __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
           __Pyx_DECREF(((PyObject *)__pyx_v_chunk));
-          __pyx_v_chunk = __pyx_t_8;
-          __pyx_t_8 = 0;
+          __pyx_v_chunk = __pyx_t_3;
+          __pyx_t_3 = 0;
         }
-        __pyx_L59:;
+        __pyx_L64:;
       }
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":435
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":435
  *                     else:
  *                         chunk = chunk + (word_id,)
  *                 max_rank = max(max_rank, pattern_rank[chunk])             # <<<<<<<<<<<<<<
  *                 cost_by_rank.arr[max_rank] = cost_by_rank.arr[max_rank] + (4*len(arr))
  *                 count_by_rank.arr[max_rank] = count_by_rank.arr[max_rank] + (len(arr)/(arity+1))
  */
-      __pyx_t_7 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_pattern_rank), ((PyObject *)__pyx_v_chunk)); if (!__pyx_t_7) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_pattern_rank), ((PyObject *)__pyx_v_chunk)); if (!__pyx_t_8) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      __pyx_t_13 = __pyx_v_max_rank;
+      __pyx_t_7 = PyInt_FromLong(__pyx_t_13); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_16 = __pyx_v_max_rank;
-      __pyx_t_3 = PyInt_FromLong(__pyx_t_16); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = PyObject_RichCompare(__pyx_t_7, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_GT); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       if (__pyx_t_19) {
-        __Pyx_INCREF(__pyx_t_7);
-        __pyx_t_8 = __pyx_t_7;
+        __Pyx_INCREF(__pyx_t_8);
+        __pyx_t_3 = __pyx_t_8;
       } else {
-        __pyx_t_6 = PyInt_FromLong(__pyx_t_16); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyInt_FromLong(__pyx_t_13); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_8 = __pyx_t_6;
+        __pyx_t_3 = __pyx_t_6;
         __pyx_t_6 = 0;
       }
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_16 = __Pyx_PyInt_AsInt(__pyx_t_8); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_v_max_rank = __pyx_t_16;
+      __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_v_max_rank = __pyx_t_13;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":436
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":436
  *                         chunk = chunk + (word_id,)
  *                 max_rank = max(max_rank, pattern_rank[chunk])
  *                 cost_by_rank.arr[max_rank] = cost_by_rank.arr[max_rank] + (4*len(arr))             # <<<<<<<<<<<<<<
  *                 count_by_rank.arr[max_rank] = count_by_rank.arr[max_rank] + (len(arr)/(arity+1))
  * 
  */
-      __pyx_t_12 = PyObject_Length(__pyx_v_arr); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      (__pyx_v_cost_by_rank->arr[__pyx_v_max_rank]) = ((__pyx_v_cost_by_rank->arr[__pyx_v_max_rank]) + (4 * __pyx_t_12));
+      __pyx_t_2 = PyObject_Length(__pyx_v_arr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      (__pyx_v_cost_by_rank->arr[__pyx_v_max_rank]) = ((__pyx_v_cost_by_rank->arr[__pyx_v_max_rank]) + (4 * __pyx_t_2));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":437
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":437
  *                 max_rank = max(max_rank, pattern_rank[chunk])
  *                 cost_by_rank.arr[max_rank] = cost_by_rank.arr[max_rank] + (4*len(arr))
  *                 count_by_rank.arr[max_rank] = count_by_rank.arr[max_rank] + (len(arr)/(arity+1))             # <<<<<<<<<<<<<<
  * 
  *         cumul_cost = 0
  */
-      __pyx_t_8 = PyInt_FromLong((__pyx_v_count_by_rank->arr[__pyx_v_max_rank])); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyInt_FromLong((__pyx_v_count_by_rank->arr[__pyx_v_max_rank])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_2 = PyObject_Length(__pyx_v_arr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_12 = PyObject_Length(__pyx_v_arr); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_6 = PyNumber_Add(__pyx_v_arity, __pyx_int_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_7 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_16 = __Pyx_PyInt_AsInt(__pyx_t_6); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_t_6); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      (__pyx_v_count_by_rank->arr[__pyx_v_max_rank]) = __pyx_t_16;
+      (__pyx_v_count_by_rank->arr[__pyx_v_max_rank]) = __pyx_t_13;
     }
-    __pyx_L53:;
+    __pyx_L58:;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":439
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":439
  *                 count_by_rank.arr[max_rank] = count_by_rank.arr[max_rank] + (len(arr)/(arity+1))
  * 
  *         cumul_cost = 0             # <<<<<<<<<<<<<<
@@ -30745,7 +29022,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_cumul_cost = __pyx_int_0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":440
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":440
  * 
  *         cumul_cost = 0
  *         cumul_count = 0             # <<<<<<<<<<<<<<
@@ -30755,7 +29032,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_cumul_count = __pyx_int_0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":441
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":441
  *         cumul_cost = 0
  *         cumul_count = 0
  *         for i from 0 <= i < N:             # <<<<<<<<<<<<<<
@@ -30765,7 +29042,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __pyx_t_13 = __pyx_v_N;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_13; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":442
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":442
  *         cumul_count = 0
  *         for i from 0 <= i < N:
  *             cumul_cost = cumul_cost + cost_by_rank.arr[i]             # <<<<<<<<<<<<<<
@@ -30781,7 +29058,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_v_cumul_cost = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":443
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":443
  *         for i from 0 <= i < N:
  *             cumul_cost = cumul_cost + cost_by_rank.arr[i]
  *             cumul_count = cumul_count + count_by_rank.arr[i]             # <<<<<<<<<<<<<<
@@ -30797,7 +29074,7 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __pyx_v_cumul_count = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":444
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":444
  *             cumul_cost = cumul_cost + cost_by_rank.arr[i]
  *             cumul_count = cumul_count + count_by_rank.arr[i]
  *             logger.debug("RANK %d\tCOUNT, COST: %d    %d\tCUMUL: %d, %d", i, count_by_rank.arr[i], cost_by_rank.arr[i], cumul_count, cumul_cost)             # <<<<<<<<<<<<<<
@@ -30811,107 +29088,104 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyInt_FromLong((__pyx_v_count_by_rank->arr[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_8 = PyInt_FromLong((__pyx_v_cost_by_rank->arr[__pyx_v_i])); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyInt_FromLong((__pyx_v_count_by_rank->arr[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_3 = PyInt_FromLong((__pyx_v_cost_by_rank->arr[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_8));
     __Pyx_INCREF(((PyObject *)__pyx_kp_s_85));
-    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_85));
+    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_kp_s_85));
     __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_85));
-    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_8);
-    __Pyx_GIVEREF(__pyx_t_8);
     __Pyx_INCREF(__pyx_v_cumul_count);
-    PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_v_cumul_count);
+    PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_v_cumul_count);
     __Pyx_GIVEREF(__pyx_v_cumul_count);
     __Pyx_INCREF(__pyx_v_cumul_cost);
-    PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_v_cumul_cost);
+    PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_v_cumul_cost);
     __Pyx_GIVEREF(__pyx_v_cumul_cost);
     __pyx_t_1 = 0;
+    __pyx_t_7 = 0;
     __pyx_t_3 = 0;
-    __pyx_t_8 = 0;
-    __pyx_t_8 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
+    __pyx_t_3 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":446
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":446
  *             logger.debug("RANK %d\tCOUNT, COST: %d    %d\tCUMUL: %d, %d", i, count_by_rank.arr[i], cost_by_rank.arr[i], cumul_count, cumul_cost)
  * 
  *         num_found_patterns = len(self.precomputed_collocations)             # <<<<<<<<<<<<<<
  *         for pattern in IJ_set:
  *             if pattern not in self.precomputed_collocations:
  */
-  __pyx_t_8 = __pyx_v_self->precomputed_collocations;
-  __Pyx_INCREF(__pyx_t_8);
-  __pyx_t_2 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_v_num_found_patterns = __pyx_t_8;
-  __pyx_t_8 = 0;
+  __pyx_t_3 = ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations;
+  __Pyx_INCREF(__pyx_t_3);
+  __pyx_t_14 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_found_patterns = __pyx_t_14;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":447
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":447
  * 
  *         num_found_patterns = len(self.precomputed_collocations)
  *         for pattern in IJ_set:             # <<<<<<<<<<<<<<
  *             if pattern not in self.precomputed_collocations:
  *                 self.precomputed_collocations[pattern] = IntList()
  */
-  __pyx_t_8 = PyObject_GetIter(((PyObject *)__pyx_v_IJ_set)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_4 = Py_TYPE(__pyx_t_8)->tp_iternext;
+  __pyx_t_3 = PyObject_GetIter(((PyObject *)__pyx_v_IJ_set)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
   for (;;) {
     {
-      __pyx_t_7 = __pyx_t_4(__pyx_t_8);
-      if (unlikely(!__pyx_t_7)) {
+      __pyx_t_8 = __pyx_t_4(__pyx_t_3);
+      if (unlikely(!__pyx_t_8)) {
         if (PyErr_Occurred()) {
           if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
           else {__pyx_filename = __pyx_f[11]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         break;
       }
-      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_GOTREF(__pyx_t_8);
     }
     __Pyx_XDECREF(__pyx_v_pattern);
-    __pyx_v_pattern = __pyx_t_7;
-    __pyx_t_7 = 0;
+    __pyx_v_pattern = __pyx_t_8;
+    __pyx_t_8 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":448
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":448
  *         num_found_patterns = len(self.precomputed_collocations)
  *         for pattern in IJ_set:
  *             if pattern not in self.precomputed_collocations:             # <<<<<<<<<<<<<<
  *                 self.precomputed_collocations[pattern] = IntList()
  * 
  */
-    __pyx_t_19 = (__Pyx_PySequence_Contains(__pyx_v_pattern, __pyx_v_self->precomputed_collocations, Py_NE)); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_19 = (__Pyx_NegateNonNeg(PySequence_Contains(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations, __pyx_v_pattern))); if (unlikely(__pyx_t_19 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (__pyx_t_19) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":449
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":449
  *         for pattern in IJ_set:
  *             if pattern not in self.precomputed_collocations:
  *                 self.precomputed_collocations[pattern] = IntList()             # <<<<<<<<<<<<<<
  * 
  *         cdef float stop_time = monitor_cpu()
  */
-      __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_7);
-      if (PyObject_SetItem(__pyx_v_self->precomputed_collocations, __pyx_v_pattern, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      goto __pyx_L64;
+      __pyx_t_8 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      if (PyObject_SetItem(((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations, __pyx_v_pattern, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      goto __pyx_L69;
     }
-    __pyx_L64:;
+    __pyx_L69:;
   }
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":451
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":451
  *                 self.precomputed_collocations[pattern] = IntList()
  * 
  *         cdef float stop_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -30920,100 +29194,102 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
  */
   __pyx_v_stop_time = __pyx_f_3_sa_monitor_cpu();
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":452
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":452
  * 
  *         cdef float stop_time = monitor_cpu()
  *         logger.info("Precomputed collocations for %d patterns out of %d possible (upper bound %d)", num_found_patterns, len(self.precomputed_collocations), x)             # <<<<<<<<<<<<<<
  *         logger.info("Precomputed inverted index for %d patterns ", len(self.precomputed_index))
  *         logger.info("Precomputation took %f seconds", (stop_time - start_time))
  */
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__info); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __pyx_v_self->precomputed_collocations;
-  __Pyx_INCREF(__pyx_t_8);
-  __pyx_t_2 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_8 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__info); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_num_found_patterns); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_6 = ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_collocations;
+  __Pyx_INCREF(__pyx_t_6);
+  __pyx_t_14 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_14); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_86));
-  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_kp_s_86));
+  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_86));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_86));
-  __Pyx_INCREF(__pyx_v_num_found_patterns);
-  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_num_found_patterns);
-  __Pyx_GIVEREF(__pyx_v_num_found_patterns);
-  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_8);
-  __Pyx_GIVEREF(__pyx_t_8);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_x);
+  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_v_x);
   __Pyx_GIVEREF(__pyx_v_x);
-  __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_6 = 0;
+  __pyx_t_6 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":453
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":453
  *         cdef float stop_time = monitor_cpu()
  *         logger.info("Precomputed collocations for %d patterns out of %d possible (upper bound %d)", num_found_patterns, len(self.precomputed_collocations), x)
  *         logger.info("Precomputed inverted index for %d patterns ", len(self.precomputed_index))             # <<<<<<<<<<<<<<
  *         logger.info("Precomputation took %f seconds", (stop_time - start_time))
  */
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__info); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __pyx_v_self->precomputed_index;
-  __Pyx_INCREF(__pyx_t_8);
-  __pyx_t_2 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__info); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = ((struct __pyx_obj_3_sa_Precomputation *)__pyx_v_self)->precomputed_index;
+  __Pyx_INCREF(__pyx_t_6);
+  __pyx_t_14 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_14); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_8));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_87));
-  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_87));
+  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_kp_s_87));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_87));
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
-  __Pyx_GIVEREF(__pyx_t_8);
-  __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
+  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_6 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":454
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":454
  *         logger.info("Precomputed collocations for %d patterns out of %d possible (upper bound %d)", num_found_patterns, len(self.precomputed_collocations), x)
  *         logger.info("Precomputed inverted index for %d patterns ", len(self.precomputed_index))
  *         logger.info("Precomputation took %f seconds", (stop_time - start_time))             # <<<<<<<<<<<<<<
  */
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__info); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyFloat_FromDouble((__pyx_v_stop_time - __pyx_v_start_time)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_8 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__info); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = PyFloat_FromDouble((__pyx_v_stop_time - __pyx_v_start_time)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_88));
-  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_kp_s_88));
+  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_88));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_88));
-  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8);
-  __Pyx_GIVEREF(__pyx_t_8);
-  __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_6 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -31056,39 +29332,43 @@ static PyObject *__pyx_pf_3_sa_14Precomputation_6precompute(struct __pyx_obj_3_s
   __Pyx_XDECREF(__pyx_v_arity);
   __Pyx_XDECREF(__pyx_v_cumul_cost);
   __Pyx_XDECREF(__pyx_v_cumul_count);
-  __Pyx_XDECREF(__pyx_v_num_found_patterns);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_11SuffixArray_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_11SuffixArray_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":11
+ *     cdef IntList ha
+ * 
+ *     def __cinit__(self, from_binary=None, from_text=None, side=None):             # <<<<<<<<<<<<<<
+ *         self.darray = DataArray()
+ *         self.sa = IntList()
+ */
+
+static int __pyx_pf_3_sa_11SuffixArray___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_11SuffixArray___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_from_binary = 0;
   PyObject *__pyx_v_from_text = 0;
   PyObject *__pyx_v_side = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_binary,&__pyx_n_s__from_text,&__pyx_n_s__side,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__from_binary,&__pyx_n_s__from_text,&__pyx_n_s__side,0};
     PyObject* values[3] = {0,0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":11
- *     cdef IntList ha
- * 
- *     def __cinit__(self, from_binary=None, from_text=None, side=None):             # <<<<<<<<<<<<<<
- *         self.darray = DataArray()
- *         self.sa = IntList()
- */
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -31096,7 +29376,7 @@ static int __pyx_pw_3_sa_11SuffixArray_1__cinit__(PyObject *__pyx_v_self, PyObje
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__from_binary);
@@ -31114,7 +29394,7 @@ static int __pyx_pw_3_sa_11SuffixArray_1__cinit__(PyObject *__pyx_v_self, PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -31137,24 +29417,8 @@ static int __pyx_pw_3_sa_11SuffixArray_1__cinit__(PyObject *__pyx_v_self, PyObje
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray___cinit__(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), __pyx_v_from_binary, __pyx_v_from_text, __pyx_v_side);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_from_binary, PyObject *__pyx_v_from_text, PyObject *__pyx_v_side) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":12
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":12
  * 
  *     def __cinit__(self, from_binary=None, from_text=None, side=None):
  *         self.darray = DataArray()             # <<<<<<<<<<<<<<
@@ -31164,12 +29428,12 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_DataArray)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->darray);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->darray));
-  __pyx_v_self->darray = ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray));
+  ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray = ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":13
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":13
  *     def __cinit__(self, from_binary=None, from_text=None, side=None):
  *         self.darray = DataArray()
  *         self.sa = IntList()             # <<<<<<<<<<<<<<
@@ -31179,12 +29443,12 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->sa);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sa));
-  __pyx_v_self->sa = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa));
+  ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":14
  *         self.darray = DataArray()
  *         self.sa = IntList()
  *         self.ha = IntList()             # <<<<<<<<<<<<<<
@@ -31194,12 +29458,12 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
   __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->ha);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->ha));
-  __pyx_v_self->ha = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha));
+  ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":15
  *         self.sa = IntList()
  *         self.ha = IntList()
  *         if from_binary:             # <<<<<<<<<<<<<<
@@ -31209,17 +29473,17 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_binary); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":16
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":16
  *         self.ha = IntList()
  *         if from_binary:
  *             self.read_binary(from_binary)             # <<<<<<<<<<<<<<
  *         elif from_text:
  *             self.read_text(from_text, side)
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_binary); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_from_binary);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_from_binary);
     __Pyx_GIVEREF(__pyx_v_from_binary);
@@ -31228,10 +29492,10 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":17
  *         if from_binary:
  *             self.read_binary(from_binary)
  *         elif from_text:             # <<<<<<<<<<<<<<
@@ -31241,17 +29505,17 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_text); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":18
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":18
  *             self.read_binary(from_binary)
  *         elif from_text:
  *             self.read_text(from_text, side)             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, i):
  */
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__read_text); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read_text); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_from_text);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_from_text);
     __Pyx_GIVEREF(__pyx_v_from_text);
@@ -31263,9 +29527,9 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -31280,18 +29544,7 @@ static int __pyx_pf_3_sa_11SuffixArray___cinit__(struct __pyx_obj_3_sa_SuffixArr
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_3__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_3__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_2__getitem__(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":20
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":20
  *             self.read_text(from_text, side)
  * 
  *     def __getitem__(self, i):             # <<<<<<<<<<<<<<
@@ -31299,7 +29552,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_3__getitem__(PyObject *__pyx_v_self
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_11SuffixArray_2__getitem__(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_11SuffixArray_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   Py_ssize_t __pyx_t_1;
@@ -31307,9 +29561,9 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_2__getitem__(struct __pyx_obj_3_sa_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__getitem__", 0);
+  __Pyx_RefNannySetupContext("__getitem__");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":21
  * 
  *     def __getitem__(self, i):
  *         return self.sa.arr[i]             # <<<<<<<<<<<<<<
@@ -31318,7 +29572,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_2__getitem__(struct __pyx_obj_3_sa_
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = PyInt_FromLong((__pyx_v_self->sa->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_t_1])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -31336,18 +29590,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_2__getitem__(struct __pyx_obj_3_sa_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_5getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_5getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSentId (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_4getSentId(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":23
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":23
  *         return self.sa.arr[i]
  * 
  *     def getSentId(self, i):             # <<<<<<<<<<<<<<
@@ -31355,7 +29598,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_5getSentId(PyObject *__pyx_v_self,
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentId(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_11SuffixArray_2getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_2getSentId(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -31364,9 +29608,9 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentId(struct __pyx_obj_3_sa_Su
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSentId", 0);
+  __Pyx_RefNannySetupContext("getSentId");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":24
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":24
  * 
  *     def getSentId(self, i):
  *         return self.darray.getSentId(i)             # <<<<<<<<<<<<<<
@@ -31374,10 +29618,10 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentId(struct __pyx_obj_3_sa_Su
  *     def getSent(self, i):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->darray), __pyx_n_s__getSentId); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray), __pyx_n_s__getSentId); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_INCREF(__pyx_v_i);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i);
   __Pyx_GIVEREF(__pyx_v_i);
@@ -31403,18 +29647,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentId(struct __pyx_obj_3_sa_Su
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_7getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_7getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSent (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_6getSent(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((PyObject *)__pyx_v_i));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":26
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":26
  *         return self.darray.getSentId(i)
  * 
  *     def getSent(self, i):             # <<<<<<<<<<<<<<
@@ -31422,7 +29655,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_7getSent(PyObject *__pyx_v_self, Py
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_11SuffixArray_6getSent(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_i) {
+static PyObject *__pyx_pf_3_sa_11SuffixArray_3getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_3getSent(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -31431,9 +29665,9 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_6getSent(struct __pyx_obj_3_sa_Suff
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSent", 0);
+  __Pyx_RefNannySetupContext("getSent");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":27
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":27
  * 
  *     def getSent(self, i):
  *         return self.darray.getSent(i)             # <<<<<<<<<<<<<<
@@ -31441,10 +29675,10 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_6getSent(struct __pyx_obj_3_sa_Suff
  *     def getSentPos(self, loc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->darray), __pyx_n_s__getSent); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray), __pyx_n_s__getSent); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_INCREF(__pyx_v_i);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i);
   __Pyx_GIVEREF(__pyx_v_i);
@@ -31470,18 +29704,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_6getSent(struct __pyx_obj_3_sa_Suff
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_9getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_9getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSentPos (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_8getSentPos(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((PyObject *)__pyx_v_loc));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":29
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":29
  *         return self.darray.getSent(i)
  * 
  *     def getSentPos(self, loc):             # <<<<<<<<<<<<<<
@@ -31489,7 +29712,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_9getSentPos(PyObject *__pyx_v_self,
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_11SuffixArray_8getSentPos(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_loc) {
+static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_4getSentPos(PyObject *__pyx_v_self, PyObject *__pyx_v_loc) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -31498,9 +29722,9 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_8getSentPos(struct __pyx_obj_3_sa_S
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSentPos", 0);
+  __Pyx_RefNannySetupContext("getSentPos");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":30
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":30
  * 
  *     def getSentPos(self, loc):
  *         return self.darray.getSentPos(loc)             # <<<<<<<<<<<<<<
@@ -31508,10 +29732,10 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_8getSentPos(struct __pyx_obj_3_sa_S
  *     def read_text(self, filename, side):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->darray), __pyx_n_s__getSentPos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray), __pyx_n_s__getSentPos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_INCREF(__pyx_v_loc);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_loc);
   __Pyx_GIVEREF(__pyx_v_loc);
@@ -31537,40 +29761,75 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_8getSentPos(struct __pyx_obj_3_sa_S
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_11read_text(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_3_sa_11SuffixArray_10read_text[] = "Constructs suffix array using the algorithm\n        of Larsson & Sadahkane (1999)";
-static PyObject *__pyx_pw_3_sa_11SuffixArray_11read_text(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":32
+ *         return self.darray.getSentPos(loc)
+ * 
+ *     def read_text(self, filename, side):             # <<<<<<<<<<<<<<
+ *         '''Constructs suffix array using the algorithm
+ *         of Larsson & Sadahkane (1999)'''
+ */
+
+static PyObject *__pyx_pf_3_sa_11SuffixArray_5read_text(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_3_sa_11SuffixArray_5read_text[] = "Constructs suffix array using the algorithm\n        of Larsson & Sadahkane (1999)";
+static PyObject *__pyx_pf_3_sa_11SuffixArray_5read_text(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_filename = 0;
   PyObject *__pyx_v_side = 0;
-  PyObject *__pyx_r = 0;
+  int __pyx_v_V;
+  int __pyx_v_N;
+  int __pyx_v_i;
+  int __pyx_v_j;
+  int __pyx_v_h;
+  int __pyx_v_a_i;
+  int __pyx_v_n;
+  int __pyx_v_current_run;
+  int __pyx_v_skip;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_isa = 0;
+  struct __pyx_obj_3_sa_IntList *__pyx_v_word_count = 0;
+  float __pyx_v_sort_start_time;
+  float __pyx_v_start_time;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_text (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  long __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filename,&__pyx_n_s__side,0};
+  __Pyx_RefNannySetupContext("read_text");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filename,&__pyx_n_s__side,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__side)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__side);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("read_text", 1, 2, 2, 1); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_text") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "read_text") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -31589,52 +29848,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_11read_text(PyObject *__pyx_v_self,
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_10read_text(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), __pyx_v_filename, __pyx_v_side);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":32
- *         return self.darray.getSentPos(loc)
- * 
- *     def read_text(self, filename, side):             # <<<<<<<<<<<<<<
- *         '''Constructs suffix array using the algorithm
- *         of Larsson & Sadahkane (1999)'''
- */
-
-static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_side) {
-  int __pyx_v_V;
-  int __pyx_v_N;
-  int __pyx_v_i;
-  int __pyx_v_j;
-  int __pyx_v_h;
-  int __pyx_v_a_i;
-  int __pyx_v_n;
-  int __pyx_v_current_run;
-  int __pyx_v_skip;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_isa = 0;
-  struct __pyx_obj_3_sa_IntList *__pyx_v_word_count = 0;
-  float __pyx_v_sort_start_time;
-  float __pyx_v_start_time;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  int __pyx_t_4;
-  long __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_t_8;
-  PyObject *__pyx_t_9 = NULL;
-  PyObject *__pyx_t_10 = NULL;
-  PyObject *__pyx_t_11 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_text", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":38
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":38
  *         cdef IntList isa, word_count
  * 
  *         self.darray = DataArray(from_text=filename, side=side, use_sent_id=True)             # <<<<<<<<<<<<<<
@@ -31649,42 +29864,42 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__use_sent_id), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_DataArray)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_DataArray)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->darray);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->darray));
-  __pyx_v_self->darray = ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_2);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray));
+  ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray = ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":39
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":39
  * 
  *         self.darray = DataArray(from_text=filename, side=side, use_sent_id=True)
  *         N = len(self.darray)             # <<<<<<<<<<<<<<
  *         V = len(self.darray.id2word)
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_v_self->darray);
+  __pyx_t_2 = ((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray);
   __Pyx_INCREF(__pyx_t_2);
   __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_N = __pyx_t_3;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":40
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":40
  *         self.darray = DataArray(from_text=filename, side=side, use_sent_id=True)
  *         N = len(self.darray)
  *         V = len(self.darray.id2word)             # <<<<<<<<<<<<<<
  * 
  *         self.sa = IntList(initial_len=N)
  */
-  __pyx_t_2 = __pyx_v_self->darray->id2word;
+  __pyx_t_2 = ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->id2word;
   __Pyx_INCREF(__pyx_t_2);
   __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_V = __pyx_t_3;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":42
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":42
  *         V = len(self.darray.id2word)
  * 
  *         self.sa = IntList(initial_len=N)             # <<<<<<<<<<<<<<
@@ -31697,16 +29912,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_GOTREF(__pyx_t_1);
   if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->sa);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sa));
-  __pyx_v_self->sa = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa));
+  ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":43
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":43
  * 
  *         self.sa = IntList(initial_len=N)
  *         self.ha = IntList(initial_len=V+1)             # <<<<<<<<<<<<<<
@@ -31719,16 +29934,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->ha);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->ha));
-  __pyx_v_self->ha = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha));
+  ((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":45
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":45
  *         self.ha = IntList(initial_len=V+1)
  * 
  *         isa = IntList(initial_len=N)             # <<<<<<<<<<<<<<
@@ -31741,13 +29956,13 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_GOTREF(__pyx_t_1);
   if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __pyx_v_isa = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":46
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":46
  * 
  *         isa = IntList(initial_len=N)
  *         word_count = IntList(initial_len=V+1)             # <<<<<<<<<<<<<<
@@ -31760,13 +29975,13 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_v_word_count = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":49
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":49
  * 
  *         '''Step 1: bucket sort data'''
  *         cdef float sort_start_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -31775,7 +29990,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
   __pyx_v_sort_start_time = __pyx_f_3_sa_monitor_cpu();
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":50
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":50
  *         '''Step 1: bucket sort data'''
  *         cdef float sort_start_time = monitor_cpu()
  *         cdef float start_time = sort_start_time             # <<<<<<<<<<<<<<
@@ -31784,7 +29999,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
   __pyx_v_start_time = __pyx_v_sort_start_time;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":51
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":51
  *         cdef float sort_start_time = monitor_cpu()
  *         cdef float start_time = sort_start_time
  *         for i from 0 <= i < N:             # <<<<<<<<<<<<<<
@@ -31794,16 +30009,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_4 = __pyx_v_N;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":52
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":52
  *         cdef float start_time = sort_start_time
  *         for i from 0 <= i < N:
  *             a_i = self.darray.data.arr[i]             # <<<<<<<<<<<<<<
  *             word_count.arr[a_i] = word_count.arr[a_i] + 1
  * 
  */
-    __pyx_v_a_i = (__pyx_v_self->darray->data->arr[__pyx_v_i]);
+    __pyx_v_a_i = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->data->arr[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":53
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":53
  *         for i from 0 <= i < N:
  *             a_i = self.darray.data.arr[i]
  *             word_count.arr[a_i] = word_count.arr[a_i] + 1             # <<<<<<<<<<<<<<
@@ -31813,7 +30028,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     (__pyx_v_word_count->arr[__pyx_v_a_i]) = ((__pyx_v_word_count->arr[__pyx_v_a_i]) + 1);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":55
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":55
  *             word_count.arr[a_i] = word_count.arr[a_i] + 1
  * 
  *         n = 0             # <<<<<<<<<<<<<<
@@ -31822,7 +30037,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
   __pyx_v_n = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":56
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":56
  * 
  *         n = 0
  *         for i from 0 <= i < V+1:             # <<<<<<<<<<<<<<
@@ -31832,16 +30047,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_5 = (__pyx_v_V + 1);
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":57
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":57
  *         n = 0
  *         for i from 0 <= i < V+1:
  *             self.ha.arr[i] = n             # <<<<<<<<<<<<<<
  *             n = n + word_count.arr[i]
  *             word_count.arr[i] = 0
  */
-    (__pyx_v_self->ha->arr[__pyx_v_i]) = __pyx_v_n;
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->arr[__pyx_v_i]) = __pyx_v_n;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":58
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":58
  *         for i from 0 <= i < V+1:
  *             self.ha.arr[i] = n
  *             n = n + word_count.arr[i]             # <<<<<<<<<<<<<<
@@ -31850,7 +30065,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_v_n = (__pyx_v_n + (__pyx_v_word_count->arr[__pyx_v_i]));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":59
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":59
  *             self.ha.arr[i] = n
  *             n = n + word_count.arr[i]
  *             word_count.arr[i] = 0             # <<<<<<<<<<<<<<
@@ -31860,7 +30075,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     (__pyx_v_word_count->arr[__pyx_v_i]) = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":61
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":61
  *             word_count.arr[i] = 0
  * 
  *         for i from 0 <= i < N:             # <<<<<<<<<<<<<<
@@ -31870,34 +30085,34 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_4 = __pyx_v_N;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":62
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":62
  * 
  *         for i from 0 <= i < N:
  *             a_i = self.darray.data.arr[i]             # <<<<<<<<<<<<<<
  *             self.sa.arr[self.ha.arr[a_i] + word_count.arr[a_i]] = i
  *             isa.arr[i] = self.ha.arr[a_i + 1] - 1 # bucket pointer is last index in bucket
  */
-    __pyx_v_a_i = (__pyx_v_self->darray->data->arr[__pyx_v_i]);
+    __pyx_v_a_i = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->data->arr[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":63
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":63
  *         for i from 0 <= i < N:
  *             a_i = self.darray.data.arr[i]
  *             self.sa.arr[self.ha.arr[a_i] + word_count.arr[a_i]] = i             # <<<<<<<<<<<<<<
  *             isa.arr[i] = self.ha.arr[a_i + 1] - 1 # bucket pointer is last index in bucket
  *             word_count.arr[a_i] = word_count.arr[a_i] + 1
  */
-    (__pyx_v_self->sa->arr[((__pyx_v_self->ha->arr[__pyx_v_a_i]) + (__pyx_v_word_count->arr[__pyx_v_a_i]))]) = __pyx_v_i;
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->arr[__pyx_v_a_i]) + (__pyx_v_word_count->arr[__pyx_v_a_i]))]) = __pyx_v_i;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":64
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":64
  *             a_i = self.darray.data.arr[i]
  *             self.sa.arr[self.ha.arr[a_i] + word_count.arr[a_i]] = i
  *             isa.arr[i] = self.ha.arr[a_i + 1] - 1 # bucket pointer is last index in bucket             # <<<<<<<<<<<<<<
  *             word_count.arr[a_i] = word_count.arr[a_i] + 1
  * 
  */
-    (__pyx_v_isa->arr[__pyx_v_i]) = ((__pyx_v_self->ha->arr[(__pyx_v_a_i + 1)]) - 1);
+    (__pyx_v_isa->arr[__pyx_v_i]) = ((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->arr[(__pyx_v_a_i + 1)]) - 1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":65
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":65
  *             self.sa.arr[self.ha.arr[a_i] + word_count.arr[a_i]] = i
  *             isa.arr[i] = self.ha.arr[a_i + 1] - 1 # bucket pointer is last index in bucket
  *             word_count.arr[a_i] = word_count.arr[a_i] + 1             # <<<<<<<<<<<<<<
@@ -31907,7 +30122,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     (__pyx_v_word_count->arr[__pyx_v_a_i]) = ((__pyx_v_word_count->arr[__pyx_v_a_i]) + 1);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":68
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":68
  * 
  *         '''Determine size of initial runs'''
  *         current_run = 0             # <<<<<<<<<<<<<<
@@ -31916,7 +30131,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
   __pyx_v_current_run = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":69
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":69
  *         '''Determine size of initial runs'''
  *         current_run = 0
  *         for i from 0 <= i < V+1:             # <<<<<<<<<<<<<<
@@ -31926,7 +30141,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_5 = (__pyx_v_V + 1);
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":70
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":70
  *         current_run = 0
  *         for i from 0 <= i < V+1:
  *             if i < V and self.ha.arr[i+1] - self.ha.arr[i] == 1:             # <<<<<<<<<<<<<<
@@ -31935,14 +30150,14 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_t_6 = (__pyx_v_i < __pyx_v_V);
     if (__pyx_t_6) {
-      __pyx_t_7 = (((__pyx_v_self->ha->arr[(__pyx_v_i + 1)]) - (__pyx_v_self->ha->arr[__pyx_v_i])) == 1);
+      __pyx_t_7 = (((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->arr[(__pyx_v_i + 1)]) - (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->arr[__pyx_v_i])) == 1);
       __pyx_t_8 = __pyx_t_7;
     } else {
       __pyx_t_8 = __pyx_t_6;
     }
     if (__pyx_t_8) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":71
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":71
  *         for i from 0 <= i < V+1:
  *             if i < V and self.ha.arr[i+1] - self.ha.arr[i] == 1:
  *                 current_run = current_run + 1             # <<<<<<<<<<<<<<
@@ -31950,11 +30165,11 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  *                 if current_run > 0:
  */
       __pyx_v_current_run = (__pyx_v_current_run + 1);
-      goto __pyx_L11;
+      goto __pyx_L14;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":73
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":73
  *                 current_run = current_run + 1
  *             else:
  *                 if current_run > 0:             # <<<<<<<<<<<<<<
@@ -31964,16 +30179,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
       __pyx_t_8 = (__pyx_v_current_run > 0);
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":74
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":74
  *             else:
  *                 if current_run > 0:
  *                     self.sa.arr[self.ha.arr[i] - current_run] = -current_run             # <<<<<<<<<<<<<<
  *                     current_run = 0
  * 
  */
-        (__pyx_v_self->sa->arr[((__pyx_v_self->ha->arr[__pyx_v_i]) - __pyx_v_current_run)]) = (-__pyx_v_current_run);
+        (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->arr[__pyx_v_i]) - __pyx_v_current_run)]) = (-__pyx_v_current_run);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":75
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":75
  *                 if current_run > 0:
  *                     self.sa.arr[self.ha.arr[i] - current_run] = -current_run
  *                     current_run = 0             # <<<<<<<<<<<<<<
@@ -31981,14 +30196,14 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  *         logger.info("    Bucket sort took %f seconds", (monitor_cpu() - sort_start_time))
  */
         __pyx_v_current_run = 0;
-        goto __pyx_L12;
+        goto __pyx_L15;
       }
-      __pyx_L12:;
+      __pyx_L15:;
     }
-    __pyx_L11:;
+    __pyx_L14:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":77
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":77
  *                     current_run = 0
  * 
  *         logger.info("    Bucket sort took %f seconds", (monitor_cpu() - sort_start_time))             # <<<<<<<<<<<<<<
@@ -32003,7 +30218,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_2 = PyFloat_FromDouble((__pyx_f_3_sa_monitor_cpu() - __pyx_v_sort_start_time)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_89));
   PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_kp_s_89));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_89));
@@ -32016,7 +30231,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":80
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":80
  * 
  *         '''Step 2: prefix-doubling sort'''
  *         h = 1             # <<<<<<<<<<<<<<
@@ -32025,7 +30240,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
   __pyx_v_h = 1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":81
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":81
  *         '''Step 2: prefix-doubling sort'''
  *         h = 1
  *         while self.sa.arr[0] != -N:             # <<<<<<<<<<<<<<
@@ -32033,10 +30248,10 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  *             logger.debug("    Refining, sort depth = %d", h)
  */
   while (1) {
-    __pyx_t_8 = ((__pyx_v_self->sa->arr[0]) != (-__pyx_v_N));
+    __pyx_t_8 = ((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[0]) != (-__pyx_v_N));
     if (!__pyx_t_8) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":82
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":82
  *         h = 1
  *         while self.sa.arr[0] != -N:
  *             sort_start_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -32045,7 +30260,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_v_sort_start_time = __pyx_f_3_sa_monitor_cpu();
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":83
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":83
  *         while self.sa.arr[0] != -N:
  *             sort_start_time = monitor_cpu()
  *             logger.debug("    Refining, sort depth = %d", h)             # <<<<<<<<<<<<<<
@@ -32060,7 +30275,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_kp_s_90));
     PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_kp_s_90));
     __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_90));
@@ -32073,7 +30288,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":84
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":84
  *             sort_start_time = monitor_cpu()
  *             logger.debug("    Refining, sort depth = %d", h)
  *             i = 0             # <<<<<<<<<<<<<<
@@ -32082,7 +30297,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_v_i = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":85
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":85
  *             logger.debug("    Refining, sort depth = %d", h)
  *             i = 0
  *             skip = 0             # <<<<<<<<<<<<<<
@@ -32091,7 +30306,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_v_skip = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":86
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":86
  *             i = 0
  *             skip = 0
  *             while i < N:             # <<<<<<<<<<<<<<
@@ -32102,38 +30317,38 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
       __pyx_t_8 = (__pyx_v_i < __pyx_v_N);
       if (!__pyx_t_8) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":87
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":87
  *             skip = 0
  *             while i < N:
  *                 if self.sa.arr[i] < 0:             # <<<<<<<<<<<<<<
  *                     skip = skip + self.sa.arr[i]
  *                     i = i - self.sa.arr[i]
  */
-      __pyx_t_8 = ((__pyx_v_self->sa->arr[__pyx_v_i]) < 0);
+      __pyx_t_8 = ((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i]) < 0);
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":88
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":88
  *             while i < N:
  *                 if self.sa.arr[i] < 0:
  *                     skip = skip + self.sa.arr[i]             # <<<<<<<<<<<<<<
  *                     i = i - self.sa.arr[i]
  *                 else:
  */
-        __pyx_v_skip = (__pyx_v_skip + (__pyx_v_self->sa->arr[__pyx_v_i]));
+        __pyx_v_skip = (__pyx_v_skip + (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i]));
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":89
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":89
  *                 if self.sa.arr[i] < 0:
  *                     skip = skip + self.sa.arr[i]
  *                     i = i - self.sa.arr[i]             # <<<<<<<<<<<<<<
  *                 else:
  *                     if skip < 0:
  */
-        __pyx_v_i = (__pyx_v_i - (__pyx_v_self->sa->arr[__pyx_v_i]));
-        goto __pyx_L17;
+        __pyx_v_i = (__pyx_v_i - (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i]));
+        goto __pyx_L20;
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":91
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":91
  *                     i = i - self.sa.arr[i]
  *                 else:
  *                     if skip < 0:             # <<<<<<<<<<<<<<
@@ -32143,16 +30358,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
         __pyx_t_8 = (__pyx_v_skip < 0);
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":92
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":92
  *                 else:
  *                     if skip < 0:
  *                         self.sa.arr[i+skip] = skip             # <<<<<<<<<<<<<<
  *                         skip = 0
  *                     j = isa.arr[self.sa.arr[i]]
  */
-          (__pyx_v_self->sa->arr[(__pyx_v_i + __pyx_v_skip)]) = __pyx_v_skip;
+          (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[(__pyx_v_i + __pyx_v_skip)]) = __pyx_v_skip;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":93
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":93
  *                     if skip < 0:
  *                         self.sa.arr[i+skip] = skip
  *                         skip = 0             # <<<<<<<<<<<<<<
@@ -32160,27 +30375,27 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  *                     self.q3sort(i, j, h, isa)
  */
           __pyx_v_skip = 0;
-          goto __pyx_L18;
+          goto __pyx_L21;
         }
-        __pyx_L18:;
+        __pyx_L21:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":94
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":94
  *                         self.sa.arr[i+skip] = skip
  *                         skip = 0
  *                     j = isa.arr[self.sa.arr[i]]             # <<<<<<<<<<<<<<
  *                     self.q3sort(i, j, h, isa)
  *                     i = j+1
  */
-        __pyx_v_j = (__pyx_v_isa->arr[(__pyx_v_self->sa->arr[__pyx_v_i])]);
+        __pyx_v_j = (__pyx_v_isa->arr[(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i])]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":95
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":95
  *                         skip = 0
  *                     j = isa.arr[self.sa.arr[i]]
  *                     self.q3sort(i, j, h, isa)             # <<<<<<<<<<<<<<
  *                     i = j+1
  *             if skip < 0:
  */
-        __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__q3sort); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__q3sort); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_t_1 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
@@ -32189,7 +30404,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
         __pyx_t_10 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_11));
         PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
         __Pyx_GIVEREF(__pyx_t_1);
         PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
@@ -32208,7 +30423,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
         __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":96
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":96
  *                     j = isa.arr[self.sa.arr[i]]
  *                     self.q3sort(i, j, h, isa)
  *                     i = j+1             # <<<<<<<<<<<<<<
@@ -32217,10 +30432,10 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
         __pyx_v_i = (__pyx_v_j + 1);
       }
-      __pyx_L17:;
+      __pyx_L20:;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":97
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":97
  *                     self.q3sort(i, j, h, isa)
  *                     i = j+1
  *             if skip < 0:             # <<<<<<<<<<<<<<
@@ -32230,19 +30445,19 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     __pyx_t_8 = (__pyx_v_skip < 0);
     if (__pyx_t_8) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":98
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":98
  *                     i = j+1
  *             if skip < 0:
  *                 self.sa.arr[i+skip] = skip             # <<<<<<<<<<<<<<
  *             h = h * 2
  *             logger.debug("    Refinement took %f seconds", (monitor_cpu() - sort_start_time))
  */
-      (__pyx_v_self->sa->arr[(__pyx_v_i + __pyx_v_skip)]) = __pyx_v_skip;
-      goto __pyx_L19;
+      (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[(__pyx_v_i + __pyx_v_skip)]) = __pyx_v_skip;
+      goto __pyx_L22;
     }
-    __pyx_L19:;
+    __pyx_L22:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":99
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":99
  *             if skip < 0:
  *                 self.sa.arr[i+skip] = skip
  *             h = h * 2             # <<<<<<<<<<<<<<
@@ -32251,7 +30466,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_v_h = (__pyx_v_h * 2);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":100
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":100
  *                 self.sa.arr[i+skip] = skip
  *             h = h * 2
  *             logger.debug("    Refinement took %f seconds", (monitor_cpu() - sort_start_time))             # <<<<<<<<<<<<<<
@@ -32266,7 +30481,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     __pyx_t_10 = PyFloat_FromDouble((__pyx_f_3_sa_monitor_cpu() - __pyx_v_sort_start_time)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __Pyx_INCREF(((PyObject *)__pyx_kp_s_91));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_91));
     __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_91));
@@ -32280,7 +30495,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":103
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":103
  * 
  *         '''Step 3: read off suffix array from inverse suffix array'''
  *         logger.info("    Finalizing sort...")             # <<<<<<<<<<<<<<
@@ -32297,7 +30512,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":104
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":104
  *         '''Step 3: read off suffix array from inverse suffix array'''
  *         logger.info("    Finalizing sort...")
  *         for i from 0 <= i < N:             # <<<<<<<<<<<<<<
@@ -32307,7 +30522,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_4 = __pyx_v_N;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":105
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":105
  *         logger.info("    Finalizing sort...")
  *         for i from 0 <= i < N:
  *             j = isa.arr[i]             # <<<<<<<<<<<<<<
@@ -32316,17 +30531,17 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
  */
     __pyx_v_j = (__pyx_v_isa->arr[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":106
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":106
  *         for i from 0 <= i < N:
  *             j = isa.arr[i]
  *             self.sa.arr[j] = i             # <<<<<<<<<<<<<<
  *         logger.info("Suffix array construction took %f seconds", (monitor_cpu() - start_time))
  * 
  */
-    (__pyx_v_self->sa->arr[__pyx_v_j]) = __pyx_v_i;
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_j]) = __pyx_v_i;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":107
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":107
  *             j = isa.arr[i]
  *             self.sa.arr[j] = i
  *         logger.info("Suffix array construction took %f seconds", (monitor_cpu() - start_time))             # <<<<<<<<<<<<<<
@@ -32341,7 +30556,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   __pyx_t_10 = PyFloat_FromDouble((__pyx_f_3_sa_monitor_cpu() - __pyx_v_start_time)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_10);
   __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_11);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_11));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_94));
   PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_kp_s_94));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_94));
@@ -32372,26 +30587,49 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_10read_text(struct __pyx_obj_3_sa_S
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_13q3sort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_3_sa_11SuffixArray_12q3sort[] = "This is a ternary quicksort. It divides the array into\n        three partitions: items less than the pivot, items equal\n        to pivot, and items greater than pivot.    The first and last\n        of these partitions are then recursively sorted";
-static PyObject *__pyx_pw_3_sa_11SuffixArray_13q3sort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":109
+ *         logger.info("Suffix array construction took %f seconds", (monitor_cpu() - start_time))
+ * 
+ *     def q3sort(self, int i, int j, int h, IntList isa, pad=""):             # <<<<<<<<<<<<<<
+ *         '''This is a ternary quicksort. It divides the array into
+ *         three partitions: items less than the pivot, items equal
+ */
+
+static PyObject *__pyx_pf_3_sa_11SuffixArray_6q3sort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_3_sa_11SuffixArray_6q3sort[] = "This is a ternary quicksort. It divides the array into\n        three partitions: items less than the pivot, items equal\n        to pivot, and items greater than pivot.    The first and last\n        of these partitions are then recursively sorted";
+static PyObject *__pyx_pf_3_sa_11SuffixArray_6q3sort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_i;
   int __pyx_v_j;
   int __pyx_v_h;
   struct __pyx_obj_3_sa_IntList *__pyx_v_isa = 0;
   PyObject *__pyx_v_pad = 0;
-  PyObject *__pyx_r = 0;
+  int __pyx_v_k;
+  int __pyx_v_midpoint;
+  int __pyx_v_pval;
+  int __pyx_v_phead;
+  int __pyx_v_ptail;
+  int __pyx_v_tmp;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("q3sort (wrapper)", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  long __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__i,&__pyx_n_s__j,&__pyx_n_s__h,&__pyx_n_s__isa,&__pyx_n_s__pad,0};
+  __Pyx_RefNannySetupContext("q3sort");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__i,&__pyx_n_s__j,&__pyx_n_s__h,&__pyx_n_s__isa,&__pyx_n_s__pad,0};
     PyObject* values[5] = {0,0,0,0,0};
     values[4] = ((PyObject *)__pyx_kp_s_45);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
@@ -32401,22 +30639,26 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_13q3sort(PyObject *__pyx_v_self, Py
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__i)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__i);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__j)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__j);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("q3sort", 0, 4, 5, 1); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__h)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__h);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("q3sort", 0, 4, 5, 2); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__isa)) != 0)) kw_args--;
+        values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__isa);
+        if (likely(values[3])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("q3sort", 0, 4, 5, 3); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
@@ -32427,7 +30669,7 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_13q3sort(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "q3sort") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "q3sort") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -32455,46 +30697,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_13q3sort(PyObject *__pyx_v_self, Py
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isa), __pyx_ptype_3_sa_IntList, 1, "isa", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_12q3sort(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), __pyx_v_i, __pyx_v_j, __pyx_v_h, __pyx_v_isa, __pyx_v_pad);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":109
- *         logger.info("Suffix array construction took %f seconds", (monitor_cpu() - start_time))
- * 
- *     def q3sort(self, int i, int j, int h, IntList isa, pad=""):             # <<<<<<<<<<<<<<
- *         '''This is a ternary quicksort. It divides the array into
- *         three partitions: items less than the pivot, items equal
- */
-
-static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, int __pyx_v_i, int __pyx_v_j, int __pyx_v_h, struct __pyx_obj_3_sa_IntList *__pyx_v_isa, PyObject *__pyx_v_pad) {
-  int __pyx_v_k;
-  int __pyx_v_midpoint;
-  int __pyx_v_pval;
-  int __pyx_v_phead;
-  int __pyx_v_ptail;
-  int __pyx_v_tmp;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  long __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("q3sort", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":116
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":116
  *         cdef int k, midpoint, pval, phead, ptail, tmp
  * 
  *         if j-i < -1:             # <<<<<<<<<<<<<<
@@ -32504,7 +30708,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = ((__pyx_v_j - __pyx_v_i) < -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":117
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":117
  * 
  *         if j-i < -1:
  *             raise Exception("Unexpected condition found in q3sort: sort from %d to %d" % (i,j))             # <<<<<<<<<<<<<<
@@ -32516,7 +30720,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
     __pyx_t_3 = PyInt_FromLong(__pyx_v_j); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
@@ -32527,7 +30731,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
@@ -32537,11 +30741,11 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     {__pyx_filename = __pyx_f[12]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":118
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":118
  *         if j-i < -1:
  *             raise Exception("Unexpected condition found in q3sort: sort from %d to %d" % (i,j))
  *         if j-i == -1:    # recursive base case -- empty interval             # <<<<<<<<<<<<<<
@@ -32551,7 +30755,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = ((__pyx_v_j - __pyx_v_i) == -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":119
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":119
  *             raise Exception("Unexpected condition found in q3sort: sort from %d to %d" % (i,j))
  *         if j-i == -1:    # recursive base case -- empty interval
  *             return             # <<<<<<<<<<<<<<
@@ -32561,11 +30765,11 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
     __Pyx_XDECREF(__pyx_r);
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
-    goto __pyx_L4;
+    goto __pyx_L7;
   }
-  __pyx_L4:;
+  __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":120
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":120
  *         if j-i == -1:    # recursive base case -- empty interval
  *             return
  *         if (j-i == 0):    # recursive base case -- singleton interval             # <<<<<<<<<<<<<<
@@ -32575,25 +30779,25 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = ((__pyx_v_j - __pyx_v_i) == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":121
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":121
  *             return
  *         if (j-i == 0):    # recursive base case -- singleton interval
  *             isa.arr[self.sa.arr[i]] = i             # <<<<<<<<<<<<<<
  *             self.sa.arr[i] = -1
  *             return
  */
-    (__pyx_v_isa->arr[(__pyx_v_self->sa->arr[__pyx_v_i])]) = __pyx_v_i;
+    (__pyx_v_isa->arr[(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i])]) = __pyx_v_i;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":122
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":122
  *         if (j-i == 0):    # recursive base case -- singleton interval
  *             isa.arr[self.sa.arr[i]] = i
  *             self.sa.arr[i] = -1             # <<<<<<<<<<<<<<
  *             return
  * 
  */
-    (__pyx_v_self->sa->arr[__pyx_v_i]) = -1;
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i]) = -1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":123
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":123
  *             isa.arr[self.sa.arr[i]] = i
  *             self.sa.arr[i] = -1
  *             return             # <<<<<<<<<<<<<<
@@ -32603,11 +30807,11 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
     __Pyx_XDECREF(__pyx_r);
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
-    goto __pyx_L5;
+    goto __pyx_L8;
   }
-  __pyx_L5:;
+  __pyx_L8:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":132
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":132
  *         # If the method of assigning word_id's is changed, this method
  *         # may need to be reconsidered as well.
  *         midpoint = (i+j)/2             # <<<<<<<<<<<<<<
@@ -32616,16 +30820,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
  */
   __pyx_v_midpoint = __Pyx_div_long((__pyx_v_i + __pyx_v_j), 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":133
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":133
  *         # may need to be reconsidered as well.
  *         midpoint = (i+j)/2
  *         pval = isa.arr[self.sa.arr[midpoint] + h]             # <<<<<<<<<<<<<<
  *         if i != midpoint:
  *             tmp = self.sa.arr[midpoint]
  */
-  __pyx_v_pval = (__pyx_v_isa->arr[((__pyx_v_self->sa->arr[__pyx_v_midpoint]) + __pyx_v_h)]);
+  __pyx_v_pval = (__pyx_v_isa->arr[((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_midpoint]) + __pyx_v_h)]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":134
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":134
  *         midpoint = (i+j)/2
  *         pval = isa.arr[self.sa.arr[midpoint] + h]
  *         if i != midpoint:             # <<<<<<<<<<<<<<
@@ -32635,37 +30839,37 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = (__pyx_v_i != __pyx_v_midpoint);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":135
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":135
  *         pval = isa.arr[self.sa.arr[midpoint] + h]
  *         if i != midpoint:
  *             tmp = self.sa.arr[midpoint]             # <<<<<<<<<<<<<<
  *             self.sa.arr[midpoint] = self.sa.arr[i]
  *             self.sa.arr[i] = tmp
  */
-    __pyx_v_tmp = (__pyx_v_self->sa->arr[__pyx_v_midpoint]);
+    __pyx_v_tmp = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_midpoint]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":136
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":136
  *         if i != midpoint:
  *             tmp = self.sa.arr[midpoint]
  *             self.sa.arr[midpoint] = self.sa.arr[i]             # <<<<<<<<<<<<<<
  *             self.sa.arr[i] = tmp
  *         phead = i
  */
-    (__pyx_v_self->sa->arr[__pyx_v_midpoint]) = (__pyx_v_self->sa->arr[__pyx_v_i]);
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_midpoint]) = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":137
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":137
  *             tmp = self.sa.arr[midpoint]
  *             self.sa.arr[midpoint] = self.sa.arr[i]
  *             self.sa.arr[i] = tmp             # <<<<<<<<<<<<<<
  *         phead = i
  *         ptail = i
  */
-    (__pyx_v_self->sa->arr[__pyx_v_i]) = __pyx_v_tmp;
-    goto __pyx_L6;
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_i]) = __pyx_v_tmp;
+    goto __pyx_L9;
   }
-  __pyx_L6:;
+  __pyx_L9:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":138
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":138
  *             self.sa.arr[midpoint] = self.sa.arr[i]
  *             self.sa.arr[i] = tmp
  *         phead = i             # <<<<<<<<<<<<<<
@@ -32674,7 +30878,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
  */
   __pyx_v_phead = __pyx_v_i;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":139
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":139
  *             self.sa.arr[i] = tmp
  *         phead = i
  *         ptail = i             # <<<<<<<<<<<<<<
@@ -32683,7 +30887,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
  */
   __pyx_v_ptail = __pyx_v_i;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":143
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":143
  *         # find the three partitions.    phead marks the first element
  *         # of the middle partition, and ptail marks the last element
  *         for k from i+1 <= k < j+1:             # <<<<<<<<<<<<<<
@@ -32693,17 +30897,17 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_5 = (__pyx_v_j + 1);
   for (__pyx_v_k = (__pyx_v_i + 1); __pyx_v_k < __pyx_t_5; __pyx_v_k++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":144
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":144
  *         # of the middle partition, and ptail marks the last element
  *         for k from i+1 <= k < j+1:
  *             if isa.arr[self.sa.arr[k] + h] < pval:             # <<<<<<<<<<<<<<
  *                 if k > ptail+1:
  *                     tmp = self.sa.arr[phead]
  */
-    __pyx_t_1 = ((__pyx_v_isa->arr[((__pyx_v_self->sa->arr[__pyx_v_k]) + __pyx_v_h)]) < __pyx_v_pval);
+    __pyx_t_1 = ((__pyx_v_isa->arr[((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]) + __pyx_v_h)]) < __pyx_v_pval);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":145
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":145
  *         for k from i+1 <= k < j+1:
  *             if isa.arr[self.sa.arr[k] + h] < pval:
  *                 if k > ptail+1:             # <<<<<<<<<<<<<<
@@ -32713,75 +30917,75 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
       __pyx_t_1 = (__pyx_v_k > (__pyx_v_ptail + 1));
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":146
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":146
  *             if isa.arr[self.sa.arr[k] + h] < pval:
  *                 if k > ptail+1:
  *                     tmp = self.sa.arr[phead]             # <<<<<<<<<<<<<<
  *                     self.sa.arr[phead] = self.sa.arr[k]
  *                     self.sa.arr[k] = self.sa.arr[ptail+1]
  */
-        __pyx_v_tmp = (__pyx_v_self->sa->arr[__pyx_v_phead]);
+        __pyx_v_tmp = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_phead]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":147
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":147
  *                 if k > ptail+1:
  *                     tmp = self.sa.arr[phead]
  *                     self.sa.arr[phead] = self.sa.arr[k]             # <<<<<<<<<<<<<<
  *                     self.sa.arr[k] = self.sa.arr[ptail+1]
  *                     self.sa.arr[ptail+1] = tmp
  */
-        (__pyx_v_self->sa->arr[__pyx_v_phead]) = (__pyx_v_self->sa->arr[__pyx_v_k]);
+        (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_phead]) = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":148
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":148
  *                     tmp = self.sa.arr[phead]
  *                     self.sa.arr[phead] = self.sa.arr[k]
  *                     self.sa.arr[k] = self.sa.arr[ptail+1]             # <<<<<<<<<<<<<<
  *                     self.sa.arr[ptail+1] = tmp
  *                 else: # k == ptail+1
  */
-        (__pyx_v_self->sa->arr[__pyx_v_k]) = (__pyx_v_self->sa->arr[(__pyx_v_ptail + 1)]);
+        (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]) = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[(__pyx_v_ptail + 1)]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":149
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":149
  *                     self.sa.arr[phead] = self.sa.arr[k]
  *                     self.sa.arr[k] = self.sa.arr[ptail+1]
  *                     self.sa.arr[ptail+1] = tmp             # <<<<<<<<<<<<<<
  *                 else: # k == ptail+1
  *                     tmp = self.sa.arr[phead]
  */
-        (__pyx_v_self->sa->arr[(__pyx_v_ptail + 1)]) = __pyx_v_tmp;
-        goto __pyx_L10;
+        (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[(__pyx_v_ptail + 1)]) = __pyx_v_tmp;
+        goto __pyx_L13;
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":151
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":151
  *                     self.sa.arr[ptail+1] = tmp
  *                 else: # k == ptail+1
  *                     tmp = self.sa.arr[phead]             # <<<<<<<<<<<<<<
  *                     self.sa.arr[phead] = self.sa.arr[k]
  *                     self.sa.arr[k] = tmp
  */
-        __pyx_v_tmp = (__pyx_v_self->sa->arr[__pyx_v_phead]);
+        __pyx_v_tmp = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_phead]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":152
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":152
  *                 else: # k == ptail+1
  *                     tmp = self.sa.arr[phead]
  *                     self.sa.arr[phead] = self.sa.arr[k]             # <<<<<<<<<<<<<<
  *                     self.sa.arr[k] = tmp
  *                 phead = phead + 1
  */
-        (__pyx_v_self->sa->arr[__pyx_v_phead]) = (__pyx_v_self->sa->arr[__pyx_v_k]);
+        (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_phead]) = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":153
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":153
  *                     tmp = self.sa.arr[phead]
  *                     self.sa.arr[phead] = self.sa.arr[k]
  *                     self.sa.arr[k] = tmp             # <<<<<<<<<<<<<<
  *                 phead = phead + 1
  *                 ptail = ptail + 1
  */
-        (__pyx_v_self->sa->arr[__pyx_v_k]) = __pyx_v_tmp;
+        (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]) = __pyx_v_tmp;
       }
-      __pyx_L10:;
+      __pyx_L13:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":154
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":154
  *                     self.sa.arr[phead] = self.sa.arr[k]
  *                     self.sa.arr[k] = tmp
  *                 phead = phead + 1             # <<<<<<<<<<<<<<
@@ -32790,7 +30994,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
  */
       __pyx_v_phead = (__pyx_v_phead + 1);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":155
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":155
  *                     self.sa.arr[k] = tmp
  *                 phead = phead + 1
  *                 ptail = ptail + 1             # <<<<<<<<<<<<<<
@@ -32798,21 +31002,21 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
  *                 if isa.arr[self.sa.arr[k] + h] == pval:
  */
       __pyx_v_ptail = (__pyx_v_ptail + 1);
-      goto __pyx_L9;
+      goto __pyx_L12;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":157
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":157
  *                 ptail = ptail + 1
  *             else:
  *                 if isa.arr[self.sa.arr[k] + h] == pval:             # <<<<<<<<<<<<<<
  *                     if k > ptail+1:
  *                         tmp = self.sa.arr[ptail+1]
  */
-      __pyx_t_1 = ((__pyx_v_isa->arr[((__pyx_v_self->sa->arr[__pyx_v_k]) + __pyx_v_h)]) == __pyx_v_pval);
+      __pyx_t_1 = ((__pyx_v_isa->arr[((((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]) + __pyx_v_h)]) == __pyx_v_pval);
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":158
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":158
  *             else:
  *                 if isa.arr[self.sa.arr[k] + h] == pval:
  *                     if k > ptail+1:             # <<<<<<<<<<<<<<
@@ -32822,37 +31026,37 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
         __pyx_t_1 = (__pyx_v_k > (__pyx_v_ptail + 1));
         if (__pyx_t_1) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":159
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":159
  *                 if isa.arr[self.sa.arr[k] + h] == pval:
  *                     if k > ptail+1:
  *                         tmp = self.sa.arr[ptail+1]             # <<<<<<<<<<<<<<
  *                         self.sa.arr[ptail+1] = self.sa.arr[k]
  *                         self.sa.arr[k] = tmp
  */
-          __pyx_v_tmp = (__pyx_v_self->sa->arr[(__pyx_v_ptail + 1)]);
+          __pyx_v_tmp = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[(__pyx_v_ptail + 1)]);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":160
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":160
  *                     if k > ptail+1:
  *                         tmp = self.sa.arr[ptail+1]
  *                         self.sa.arr[ptail+1] = self.sa.arr[k]             # <<<<<<<<<<<<<<
  *                         self.sa.arr[k] = tmp
  *                     ptail = ptail + 1
  */
-          (__pyx_v_self->sa->arr[(__pyx_v_ptail + 1)]) = (__pyx_v_self->sa->arr[__pyx_v_k]);
+          (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[(__pyx_v_ptail + 1)]) = (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":161
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":161
  *                         tmp = self.sa.arr[ptail+1]
  *                         self.sa.arr[ptail+1] = self.sa.arr[k]
  *                         self.sa.arr[k] = tmp             # <<<<<<<<<<<<<<
  *                     ptail = ptail + 1
  * 
  */
-          (__pyx_v_self->sa->arr[__pyx_v_k]) = __pyx_v_tmp;
-          goto __pyx_L12;
+          (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k]) = __pyx_v_tmp;
+          goto __pyx_L15;
         }
-        __pyx_L12:;
+        __pyx_L15:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":162
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":162
  *                         self.sa.arr[ptail+1] = self.sa.arr[k]
  *                         self.sa.arr[k] = tmp
  *                     ptail = ptail + 1             # <<<<<<<<<<<<<<
@@ -32860,21 +31064,21 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
  *         # recursively sort smaller suffixes
  */
         __pyx_v_ptail = (__pyx_v_ptail + 1);
-        goto __pyx_L11;
+        goto __pyx_L14;
       }
-      __pyx_L11:;
+      __pyx_L14:;
     }
-    __pyx_L9:;
+    __pyx_L12:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":165
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":165
  * 
  *         # recursively sort smaller suffixes
  *         self.q3sort(i, phead-1, h, isa, pad+"    ")             # <<<<<<<<<<<<<<
  * 
  *         # update suffixes with pivot value
  */
-  __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__q3sort); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__q3sort); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
@@ -32885,7 +31089,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_7 = PyNumber_Add(__pyx_v_pad, ((PyObject *)__pyx_kp_s_48)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_8));
   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
@@ -32907,7 +31111,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":169
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":169
  *         # update suffixes with pivot value
  *         # corresponds to update_group function in Larsson & Sadakane
  *         for k from phead <= k < ptail+1:             # <<<<<<<<<<<<<<
@@ -32917,17 +31121,17 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_5 = (__pyx_v_ptail + 1);
   for (__pyx_v_k = __pyx_v_phead; __pyx_v_k < __pyx_t_5; __pyx_v_k++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":170
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":170
  *         # corresponds to update_group function in Larsson & Sadakane
  *         for k from phead <= k < ptail+1:
  *             isa.arr[self.sa.arr[k]] = ptail             # <<<<<<<<<<<<<<
  *         if phead == ptail:
  *             self.sa.arr[phead] = -1
  */
-    (__pyx_v_isa->arr[(__pyx_v_self->sa->arr[__pyx_v_k])]) = __pyx_v_ptail;
+    (__pyx_v_isa->arr[(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_k])]) = __pyx_v_ptail;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":171
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":171
  *         for k from phead <= k < ptail+1:
  *             isa.arr[self.sa.arr[k]] = ptail
  *         if phead == ptail:             # <<<<<<<<<<<<<<
@@ -32937,26 +31141,26 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = (__pyx_v_phead == __pyx_v_ptail);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":172
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":172
  *             isa.arr[self.sa.arr[k]] = ptail
  *         if phead == ptail:
  *             self.sa.arr[phead] = -1             # <<<<<<<<<<<<<<
  * 
  *         # recursively sort larger suffixes
  */
-    (__pyx_v_self->sa->arr[__pyx_v_phead]) = -1;
-    goto __pyx_L15;
+    (((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->arr[__pyx_v_phead]) = -1;
+    goto __pyx_L18;
   }
-  __pyx_L15:;
+  __pyx_L18:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":175
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":175
  * 
  *         # recursively sort larger suffixes
  *         self.q3sort(ptail+1, j, h, isa, pad+"    ")             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__q3sort); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__q3sort); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_t_8 = PyInt_FromLong((__pyx_v_ptail + 1)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
@@ -32967,7 +31171,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   __pyx_t_2 = PyNumber_Add(__pyx_v_pad, ((PyObject *)__pyx_kp_s_48)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8);
   __Pyx_GIVEREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
@@ -33006,28 +31210,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_12q3sort(struct __pyx_obj_3_sa_Suff
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_15write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_15write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_text (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.SuffixArray.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_14write_text(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":178
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":178
  * 
  * 
  *     def write_text(self, char* filename):             # <<<<<<<<<<<<<<
@@ -33035,7 +31218,9 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_15write_text(PyObject *__pyx_v_self
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_11SuffixArray_14write_text(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_11SuffixArray_7write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_7write_text(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -33044,21 +31229,30 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_14write_text(struct __pyx_obj_3_sa_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_text", 0);
+  __Pyx_RefNannySetupContext("write_text");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.SuffixArray.write_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":179
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":179
  * 
  *     def write_text(self, char* filename):
  *         self.darray.write_text(filename)             # <<<<<<<<<<<<<<
  * 
  *     def read_binary(self, char* filename):
  */
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->darray), __pyx_n_s__write_text); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray), __pyx_n_s__write_text); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
   __pyx_t_2 = 0;
@@ -33082,13 +31276,24 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_14write_text(struct __pyx_obj_3_sa_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_17read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_17read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":181
+ *         self.darray.write_text(filename)
+ * 
+ *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE *f
+ *         f = fopen(filename, "r")
+ */
+
+static PyObject *__pyx_pf_3_sa_11SuffixArray_8read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_8read_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read_binary");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -33098,26 +31303,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_17read_binary(PyObject *__pyx_v_sel
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_16read_binary(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":181
- *         self.darray.write_text(filename)
- * 
- *     def read_binary(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE *f
- *         f = fopen(filename, "r")
- */
-
-static PyObject *__pyx_pf_3_sa_11SuffixArray_16read_binary(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read_binary", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":183
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":183
  *     def read_binary(self, char* filename):
  *         cdef FILE *f
  *         f = fopen(filename, "r")             # <<<<<<<<<<<<<<
@@ -33126,34 +31313,34 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_16read_binary(struct __pyx_obj_3_sa
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__r);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":184
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":184
  *         cdef FILE *f
  *         f = fopen(filename, "r")
  *         self.darray.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.sa.read_handle(f)
  *         self.ha.read_handle(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_DataArray *)__pyx_v_self->darray->__pyx_vtab)->read_handle(__pyx_v_self->darray, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_DataArray *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":185
  *         f = fopen(filename, "r")
  *         self.darray.read_handle(f)
  *         self.sa.read_handle(f)             # <<<<<<<<<<<<<<
  *         self.ha.read_handle(f)
  *         fclose(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sa->__pyx_vtab)->read_handle(__pyx_v_self->sa, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":186
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":186
  *         self.darray.read_handle(f)
  *         self.sa.read_handle(f)
  *         self.ha.read_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->ha->__pyx_vtab)->read_handle(__pyx_v_self->ha, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->__pyx_vtab)->read_handle(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":187
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":187
  *         self.sa.read_handle(f)
  *         self.ha.read_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -33168,13 +31355,24 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_16read_binary(struct __pyx_obj_3_sa
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_19write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_19write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":189
+ *         fclose(f)
+ * 
+ *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
+ *         cdef FILE* f
+ *         f = fopen(filename, "w")
+ */
+
+static PyObject *__pyx_pf_3_sa_11SuffixArray_9write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_9write_binary(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
   char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
+  FILE *__pyx_v_f;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write_binary");
   assert(__pyx_arg_filename); {
     __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
@@ -33184,26 +31382,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_19write_binary(PyObject *__pyx_v_se
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_18write_binary(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":189
- *         fclose(f)
- * 
- *     def write_binary(self, char* filename):             # <<<<<<<<<<<<<<
- *         cdef FILE* f
- *         f = fopen(filename, "w")
- */
-
-static PyObject *__pyx_pf_3_sa_11SuffixArray_18write_binary(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename) {
-  FILE *__pyx_v_f;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_binary", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":191
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":191
  *     def write_binary(self, char* filename):
  *         cdef FILE* f
  *         f = fopen(filename, "w")             # <<<<<<<<<<<<<<
@@ -33212,34 +31392,34 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_18write_binary(struct __pyx_obj_3_s
  */
   __pyx_v_f = fopen(__pyx_v_filename, __pyx_k__w);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":192
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":192
  *         cdef FILE* f
  *         f = fopen(filename, "w")
  *         self.darray.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.sa.write_handle(f)
  *         self.ha.write_handle(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_DataArray *)__pyx_v_self->darray->__pyx_vtab)->write_handle(__pyx_v_self->darray, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_DataArray *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":193
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":193
  *         f = fopen(filename, "w")
  *         self.darray.write_handle(f)
  *         self.sa.write_handle(f)             # <<<<<<<<<<<<<<
  *         self.ha.write_handle(f)
  *         fclose(f)
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->sa->__pyx_vtab)->write_handle(__pyx_v_self->sa, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":194
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":194
  *         self.darray.write_handle(f)
  *         self.sa.write_handle(f)
  *         self.ha.write_handle(f)             # <<<<<<<<<<<<<<
  *         fclose(f)
  * 
  */
-  ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_self->ha->__pyx_vtab)->write_handle(__pyx_v_self->ha, __pyx_v_f);
+  ((struct __pyx_vtabstruct_3_sa_IntList *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha->__pyx_vtab)->write_handle(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha, __pyx_v_f);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":195
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":195
  *         self.sa.write_handle(f)
  *         self.ha.write_handle(f)
  *         fclose(f)             # <<<<<<<<<<<<<<
@@ -33254,28 +31434,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_18write_binary(struct __pyx_obj_3_s
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_21write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_21write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
-  char *__pyx_v_filename;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("write_enhanced (wrapper)", 0);
-  assert(__pyx_arg_filename); {
-    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("_sa.SuffixArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_20write_enhanced(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), ((char *)__pyx_v_filename));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":197
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":197
  *         fclose(f)
  * 
  *     def write_enhanced(self, char* filename):             # <<<<<<<<<<<<<<
@@ -33283,7 +31442,9 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_21write_enhanced(PyObject *__pyx_v_
  *             self.darray.write_enhanced_handle(f)
  */
 
-static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, char *__pyx_v_filename) {
+static PyObject *__pyx_pf_3_sa_11SuffixArray_10write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_10write_enhanced(PyObject *__pyx_v_self, PyObject *__pyx_arg_filename) {
+  char *__pyx_v_filename;
   PyObject *__pyx_v_f = NULL;
   PyObject *__pyx_v_a_i = NULL;
   PyObject *__pyx_v_w_i = NULL;
@@ -33305,9 +31466,18 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("write_enhanced", 0);
+  __Pyx_RefNannySetupContext("write_enhanced");
+  assert(__pyx_arg_filename); {
+    __pyx_v_filename = PyBytes_AsString(__pyx_arg_filename); if (unlikely((!__pyx_v_filename) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_sa.SuffixArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":198
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":198
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -33318,7 +31488,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3
     __pyx_t_1 = PyBytes_FromString(__pyx_v_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
     __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
@@ -33330,220 +31500,203 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
+        __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
+        __Pyx_XGOTREF(__pyx_t_4);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
-        __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
-          __Pyx_INCREF(__pyx_t_4);
-          __pyx_v_f = __pyx_t_4;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_f = __pyx_t_1;
+          __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":199
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":199
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:
  *             self.darray.write_enhanced_handle(f)             # <<<<<<<<<<<<<<
  *             for a_i in self.sa:
  *                 f.write("%d " % a_i)
  */
-          __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self->darray), __pyx_n_s_27); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray), __pyx_n_s_27); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
           __Pyx_INCREF(__pyx_v_f);
-          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_f);
+          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_f);
           __Pyx_GIVEREF(__pyx_v_f);
-          __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":200
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":200
  *         with open(filename, "w") as f:
  *             self.darray.write_enhanced_handle(f)
  *             for a_i in self.sa:             # <<<<<<<<<<<<<<
  *                 f.write("%d " % a_i)
  *             f.write("\n")
  */
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->sa)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->sa))) {
-            __pyx_t_2 = ((PyObject *)__pyx_v_self->sa); __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa))) {
+            __pyx_t_7 = ((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa); __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0;
             __pyx_t_9 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self->sa)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
+            __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_7);
+            __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_2)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_7)) {
+              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break;
+              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++;
+            } else if (PyTuple_CheckExact(__pyx_t_7)) {
+              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
+              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++;
             } else {
-              __pyx_t_1 = __pyx_t_9(__pyx_t_2);
-              if (unlikely(!__pyx_t_1)) {
+              __pyx_t_2 = __pyx_t_9(__pyx_t_7);
+              if (unlikely(!__pyx_t_2)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[12]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_1);
+              __Pyx_GOTREF(__pyx_t_2);
             }
             __Pyx_XDECREF(__pyx_v_a_i);
-            __pyx_v_a_i = __pyx_t_1;
-            __pyx_t_1 = 0;
+            __pyx_v_a_i = __pyx_t_2;
+            __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":201
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":201
  *             self.darray.write_enhanced_handle(f)
  *             for a_i in self.sa:
  *                 f.write("%d " % a_i)             # <<<<<<<<<<<<<<
  *             f.write("\n")
  *             for w_i in self.ha:
  */
-            __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_a_i); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+            __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
+            PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_1));
+            __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+            __pyx_t_1 = 0;
+            __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_a_i); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-            __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_10);
-            PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_4));
-            __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-            __pyx_t_4 = 0;
-            __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
-            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           }
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":202
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":202
  *             for a_i in self.sa:
  *                 f.write("%d " % a_i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
  *             for w_i in self.ha:
  *                 f.write("%d " % w_i)
  */
-          __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_96), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_t_7 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_7);
+          __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_k_tuple_96), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":203
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":203
  *                 f.write("%d " % a_i)
  *             f.write("\n")
  *             for w_i in self.ha:             # <<<<<<<<<<<<<<
  *                 f.write("%d " % w_i)
  *             f.write("\n")
  */
-          if (PyList_CheckExact(((PyObject *)__pyx_v_self->ha)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->ha))) {
-            __pyx_t_4 = ((PyObject *)__pyx_v_self->ha); __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
+          if (PyList_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha)) || PyTuple_CheckExact(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha))) {
+            __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha); __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
             __pyx_t_9 = NULL;
           } else {
-            __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(((PyObject *)__pyx_v_self->ha)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
+            __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->ha)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
-            } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_4)) {
-              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++;
+            } else if (PyTuple_CheckExact(__pyx_t_1)) {
+              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+              __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++;
             } else {
-              __pyx_t_2 = __pyx_t_9(__pyx_t_4);
-              if (unlikely(!__pyx_t_2)) {
+              __pyx_t_7 = __pyx_t_9(__pyx_t_1);
+              if (unlikely(!__pyx_t_7)) {
                 if (PyErr_Occurred()) {
                   if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                  else {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  else {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                 }
                 break;
               }
-              __Pyx_GOTREF(__pyx_t_2);
+              __Pyx_GOTREF(__pyx_t_7);
             }
             __Pyx_XDECREF(__pyx_v_w_i);
-            __pyx_v_w_i = __pyx_t_2;
-            __pyx_t_2 = 0;
+            __pyx_v_w_i = __pyx_t_7;
+            __pyx_t_7 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":204
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":204
  *             f.write("\n")
  *             for w_i in self.ha:
  *                 f.write("%d " % w_i)             # <<<<<<<<<<<<<<
  *             f.write("\n")
  * 
  */
-            __pyx_t_2 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_w_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_7 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(__pyx_t_7);
+            __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_21), __pyx_v_w_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(((PyObject *)__pyx_t_10));
-            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-            __Pyx_GOTREF(__pyx_t_1);
-            PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_10));
+            __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+            PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_10));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
             __pyx_t_10 = 0;
-            __pyx_t_10 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_10 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_10);
-            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+            __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           }
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":205
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":205
  *             for w_i in self.ha:
  *                 f.write("%d " % w_i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
  * 
  *     cdef int __search_high(self, int word_id, int offset, int low, int high):
  */
-          __pyx_t_4 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
-          __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_10 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_k_tuple_97), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_1 = PyObject_GetAttr(__pyx_v_f, __pyx_n_s__write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_97), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        goto __pyx_L16_try_end;
+        __pyx_L9_error:;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        goto __pyx_L14_try_end;
-        __pyx_L7_error:;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":198
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":198
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -33552,75 +31705,75 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3
  */
         /*except:*/ {
           __Pyx_AddTraceback("_sa.SuffixArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_4, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_1, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __Pyx_GOTREF(__pyx_t_4);
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+          __Pyx_GOTREF(((PyObject *)__pyx_t_7));
           __Pyx_INCREF(__pyx_t_10);
-          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10);
+          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10);
           __Pyx_GIVEREF(__pyx_t_10);
-          __Pyx_INCREF(__pyx_t_4);
-          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
-          __Pyx_GIVEREF(__pyx_t_4);
           __Pyx_INCREF(__pyx_t_1);
-          PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
+          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
           __Pyx_GIVEREF(__pyx_t_1);
-          __pyx_t_12 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL);
+          __Pyx_INCREF(__pyx_t_2);
+          PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_2);
+          __Pyx_GIVEREF(__pyx_t_2);
+          __pyx_t_12 = PyObject_Call(__pyx_t_3, __pyx_t_7, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __Pyx_GOTREF(__pyx_t_12);
           __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
           __pyx_t_13 = (!__pyx_t_11);
           if (__pyx_t_13) {
             __Pyx_GIVEREF(__pyx_t_10);
-            __Pyx_GIVEREF(__pyx_t_4);
             __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_ErrRestore(__pyx_t_10, __pyx_t_4, __pyx_t_1);
-            __pyx_t_10 = 0; __pyx_t_4 = 0; __pyx_t_1 = 0; 
-            {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
-            goto __pyx_L22;
+            __Pyx_GIVEREF(__pyx_t_2);
+            __Pyx_ErrRestore(__pyx_t_10, __pyx_t_1, __pyx_t_2);
+            __pyx_t_10 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; 
+            {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+            goto __pyx_L23;
           }
-          __pyx_L22:;
-          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+          __pyx_L23:;
+          __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          goto __pyx_L8_exception_handled;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          goto __pyx_L10_exception_handled;
         }
-        __pyx_L9_except_error:;
+        __pyx_L11_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
         goto __pyx_L1_error;
-        __pyx_L8_exception_handled:;
+        __pyx_L10_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_4);
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
-        __Pyx_XGIVEREF(__pyx_t_7);
-        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
+        __pyx_L16_try_end:;
       }
     }
     /*finally:*/ {
       if (__pyx_t_3) {
-        __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_98, NULL);
+        __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_98, NULL);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
-    goto __pyx_L23;
-    __pyx_L3_error:;
+    goto __pyx_L24;
+    __pyx_L5_error:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L1_error;
-    __pyx_L23:;
+    __pyx_L24:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -33628,7 +31781,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("_sa.SuffixArray.write_enhanced", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
@@ -33641,7 +31794,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_20write_enhanced(struct __pyx_obj_3
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":207
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":207
  *             f.write("\n")
  * 
  *     cdef int __search_high(self, int word_id, int offset, int low, int high):             # <<<<<<<<<<<<<<
@@ -33654,9 +31807,9 @@ static int __pyx_f_3_sa_11SuffixArray___search_high(struct __pyx_obj_3_sa_Suffix
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("__search_high", 0);
+  __Pyx_RefNannySetupContext("__search_high");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":210
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":210
  *         cdef int midpoint
  * 
  *         if low >= high:             # <<<<<<<<<<<<<<
@@ -33666,7 +31819,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_high(struct __pyx_obj_3_sa_Suffix
   __pyx_t_1 = (__pyx_v_low >= __pyx_v_high);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":211
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":211
  * 
  *         if low >= high:
  *             return high             # <<<<<<<<<<<<<<
@@ -33679,7 +31832,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_high(struct __pyx_obj_3_sa_Suffix
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":212
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":212
  *         if low >= high:
  *             return high
  *         midpoint = (high + low) / 2             # <<<<<<<<<<<<<<
@@ -33688,7 +31841,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_high(struct __pyx_obj_3_sa_Suffix
  */
   __pyx_v_midpoint = __Pyx_div_long((__pyx_v_high + __pyx_v_low), 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":213
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":213
  *             return high
  *         midpoint = (high + low) / 2
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:             # <<<<<<<<<<<<<<
@@ -33698,27 +31851,27 @@ static int __pyx_f_3_sa_11SuffixArray___search_high(struct __pyx_obj_3_sa_Suffix
   __pyx_t_1 = ((__pyx_v_self->darray->data->arr[((__pyx_v_self->sa->arr[__pyx_v_midpoint]) + __pyx_v_offset)]) == __pyx_v_word_id);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":214
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":214
  *         midpoint = (high + low) / 2
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:
  *             return self.__search_high(word_id, offset, midpoint+1, high)             # <<<<<<<<<<<<<<
  *         else:
  *             return self.__search_high(word_id, offset, low, midpoint)
  */
-    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___search_high(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, (__pyx_v_midpoint + 1), __pyx_v_high);
+    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__search_high(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, (__pyx_v_midpoint + 1), __pyx_v_high);
     goto __pyx_L0;
     goto __pyx_L4;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":216
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":216
  *             return self.__search_high(word_id, offset, midpoint+1, high)
  *         else:
  *             return self.__search_high(word_id, offset, low, midpoint)             # <<<<<<<<<<<<<<
  * 
  *     cdef int __search_low(self, int word_id, int offset, int low, int high):
  */
-    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___search_high(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint);
+    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__search_high(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint);
     goto __pyx_L0;
   }
   __pyx_L4:;
@@ -33729,7 +31882,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_high(struct __pyx_obj_3_sa_Suffix
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":218
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":218
  *             return self.__search_high(word_id, offset, low, midpoint)
  * 
  *     cdef int __search_low(self, int word_id, int offset, int low, int high):             # <<<<<<<<<<<<<<
@@ -33742,9 +31895,9 @@ static int __pyx_f_3_sa_11SuffixArray___search_low(struct __pyx_obj_3_sa_SuffixA
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("__search_low", 0);
+  __Pyx_RefNannySetupContext("__search_low");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":221
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":221
  *         cdef int midpoint
  * 
  *         if low >= high:             # <<<<<<<<<<<<<<
@@ -33754,7 +31907,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_low(struct __pyx_obj_3_sa_SuffixA
   __pyx_t_1 = (__pyx_v_low >= __pyx_v_high);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":222
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":222
  * 
  *         if low >= high:
  *             return high             # <<<<<<<<<<<<<<
@@ -33767,7 +31920,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_low(struct __pyx_obj_3_sa_SuffixA
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":223
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":223
  *         if low >= high:
  *             return high
  *         midpoint = (high + low) / 2             # <<<<<<<<<<<<<<
@@ -33776,7 +31929,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_low(struct __pyx_obj_3_sa_SuffixA
  */
   __pyx_v_midpoint = __Pyx_div_long((__pyx_v_high + __pyx_v_low), 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":224
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":224
  *             return high
  *         midpoint = (high + low) / 2
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:             # <<<<<<<<<<<<<<
@@ -33786,27 +31939,27 @@ static int __pyx_f_3_sa_11SuffixArray___search_low(struct __pyx_obj_3_sa_SuffixA
   __pyx_t_1 = ((__pyx_v_self->darray->data->arr[((__pyx_v_self->sa->arr[__pyx_v_midpoint]) + __pyx_v_offset)]) == __pyx_v_word_id);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":225
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":225
  *         midpoint = (high + low) / 2
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:
  *             return self.__search_low(word_id, offset, low, midpoint)             # <<<<<<<<<<<<<<
  *         else:
  *             return self.__search_low(word_id, offset, midpoint+1, high)
  */
-    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___search_low(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint);
+    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__search_low(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint);
     goto __pyx_L0;
     goto __pyx_L4;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":227
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":227
  *             return self.__search_low(word_id, offset, low, midpoint)
  *         else:
  *             return self.__search_low(word_id, offset, midpoint+1, high)             # <<<<<<<<<<<<<<
  * 
  *     cdef __get_range(self, int word_id, int offset, int low, int high, int midpoint):
  */
-    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___search_low(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, (__pyx_v_midpoint + 1), __pyx_v_high);
+    __pyx_r = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__search_low(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, (__pyx_v_midpoint + 1), __pyx_v_high);
     goto __pyx_L0;
   }
   __pyx_L4:;
@@ -33817,7 +31970,7 @@ static int __pyx_f_3_sa_11SuffixArray___search_low(struct __pyx_obj_3_sa_SuffixA
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":229
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":229
  *             return self.__search_low(word_id, offset, midpoint+1, high)
  * 
  *     cdef __get_range(self, int word_id, int offset, int low, int high, int midpoint):             # <<<<<<<<<<<<<<
@@ -33834,9 +31987,9 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___get_range(struct __pyx_obj_3_sa_Su
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get_range", 0);
+  __Pyx_RefNannySetupContext("__get_range");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":230
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":230
  * 
  *     cdef __get_range(self, int word_id, int offset, int low, int high, int midpoint):
  *         return (self.__search_low(word_id, offset, low, midpoint),             # <<<<<<<<<<<<<<
@@ -33844,20 +31997,20 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___get_range(struct __pyx_obj_3_sa_Su
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___search_low(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__search_low(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":231
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":231
  *     cdef __get_range(self, int word_id, int offset, int low, int high, int midpoint):
  *         return (self.__search_low(word_id, offset, low, midpoint),
  *                 self.__search_high(word_id, offset, midpoint, high))             # <<<<<<<<<<<<<<
  * 
  *     cdef __lookup_helper(self, int word_id, int offset, int low, int high):
  */
-  __pyx_t_2 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___search_high(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_midpoint, __pyx_v_high)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__search_high(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_midpoint, __pyx_v_high)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
@@ -33882,7 +32035,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___get_range(struct __pyx_obj_3_sa_Su
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":233
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":233
  *                 self.__search_high(word_id, offset, midpoint, high))
  * 
  *     cdef __lookup_helper(self, int word_id, int offset, int low, int high):             # <<<<<<<<<<<<<<
@@ -33901,9 +32054,9 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__lookup_helper", 0);
+  __Pyx_RefNannySetupContext("__lookup_helper");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":236
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":236
  *         cdef int midpoint
  * 
  *         if offset == 0:             # <<<<<<<<<<<<<<
@@ -33913,7 +32066,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   __pyx_t_1 = (__pyx_v_offset == 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":237
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":237
  * 
  *         if offset == 0:
  *             return (self.ha.arr[word_id], self.ha.arr[word_id+1])             # <<<<<<<<<<<<<<
@@ -33926,7 +32079,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
     __pyx_t_3 = PyInt_FromLong((__pyx_v_self->ha->arr[(__pyx_v_word_id + 1)])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
@@ -33940,7 +32093,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":238
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":238
  *         if offset == 0:
  *             return (self.ha.arr[word_id], self.ha.arr[word_id+1])
  *         if low >= high:             # <<<<<<<<<<<<<<
@@ -33950,7 +32103,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   __pyx_t_1 = (__pyx_v_low >= __pyx_v_high);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":239
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":239
  *             return (self.ha.arr[word_id], self.ha.arr[word_id+1])
  *         if low >= high:
  *             return None             # <<<<<<<<<<<<<<
@@ -33965,7 +32118,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":241
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":241
  *             return None
  * 
  *         midpoint = (high + low) / 2             # <<<<<<<<<<<<<<
@@ -33974,7 +32127,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
  */
   __pyx_v_midpoint = __Pyx_div_long((__pyx_v_high + __pyx_v_low), 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":242
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":242
  * 
  *         midpoint = (high + low) / 2
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:             # <<<<<<<<<<<<<<
@@ -33984,7 +32137,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   __pyx_t_1 = ((__pyx_v_self->darray->data->arr[((__pyx_v_self->sa->arr[__pyx_v_midpoint]) + __pyx_v_offset)]) == __pyx_v_word_id);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":243
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":243
  *         midpoint = (high + low) / 2
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:
  *             return self.__get_range(word_id, offset, low, high, midpoint)             # <<<<<<<<<<<<<<
@@ -33992,7 +32145,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
  *             return self.__lookup_helper(word_id, offset, low, midpoint)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___get_range(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_high, __pyx_v_midpoint); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__get_range(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_high, __pyx_v_midpoint); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -34001,7 +32154,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":244
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":244
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] == word_id:
  *             return self.__get_range(word_id, offset, low, high, midpoint)
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] > word_id:             # <<<<<<<<<<<<<<
@@ -34011,7 +32164,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   __pyx_t_1 = ((__pyx_v_self->darray->data->arr[((__pyx_v_self->sa->arr[__pyx_v_midpoint]) + __pyx_v_offset)]) > __pyx_v_word_id);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":245
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":245
  *             return self.__get_range(word_id, offset, low, high, midpoint)
  *         if self.darray.data.arr[self.sa.arr[midpoint] + offset] > word_id:
  *             return self.__lookup_helper(word_id, offset, low, midpoint)             # <<<<<<<<<<<<<<
@@ -34019,7 +32172,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
  *             return self.__lookup_helper(word_id, offset, midpoint+1, high)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___lookup_helper(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__lookup_helper(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, __pyx_v_low, __pyx_v_midpoint); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -34028,7 +32181,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":247
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":247
  *             return self.__lookup_helper(word_id, offset, low, midpoint)
  *         else:
  *             return self.__lookup_helper(word_id, offset, midpoint+1, high)             # <<<<<<<<<<<<<<
@@ -34036,7 +32189,7 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
  *     def lookup(self, word, int offset, int low, int high):
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___lookup_helper(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, (__pyx_v_midpoint + 1), __pyx_v_high); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__lookup_helper(__pyx_v_self, __pyx_v_word_id, __pyx_v_offset, (__pyx_v_midpoint + 1), __pyx_v_high); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -34058,23 +32211,37 @@ static PyObject *__pyx_f_3_sa_11SuffixArray___lookup_helper(struct __pyx_obj_3_s
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_11SuffixArray_23lookup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_11SuffixArray_23lookup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":249
+ *             return self.__lookup_helper(word_id, offset, midpoint+1, high)
+ * 
+ *     def lookup(self, word, int offset, int low, int high):             # <<<<<<<<<<<<<<
+ *         cdef int wordid
+ *         if low == -1:
+ */
+
+static PyObject *__pyx_pf_3_sa_11SuffixArray_11lookup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_11SuffixArray_11lookup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_word = 0;
   int __pyx_v_offset;
   int __pyx_v_low;
   int __pyx_v_high;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_word_id = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("lookup (wrapper)", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__word,&__pyx_n_s__offset,&__pyx_n_s__low,&__pyx_n_s__high,0};
+  __Pyx_RefNannySetupContext("lookup");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__word,&__pyx_n_s__offset,&__pyx_n_s__low,&__pyx_n_s__high,0};
     PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -34083,28 +32250,32 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_23lookup(PyObject *__pyx_v_self, Py
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__word)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__word);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("lookup", 1, 4, 4, 1); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("lookup", 1, 4, 4, 2); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__high)) != 0)) kw_args--;
+        values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__high);
+        if (likely(values[3])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("lookup", 1, 4, 4, 3); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lookup") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "lookup") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -34127,33 +32298,8 @@ static PyObject *__pyx_pw_3_sa_11SuffixArray_23lookup(PyObject *__pyx_v_self, Py
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_11SuffixArray_22lookup(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), __pyx_v_word, __pyx_v_offset, __pyx_v_low, __pyx_v_high);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":249
- *             return self.__lookup_helper(word_id, offset, midpoint+1, high)
- * 
- *     def lookup(self, word, int offset, int low, int high):             # <<<<<<<<<<<<<<
- *         cdef int wordid
- *         if low == -1:
- */
-
-static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_SuffixArray *__pyx_v_self, PyObject *__pyx_v_word, int __pyx_v_offset, int __pyx_v_low, int __pyx_v_high) {
-  PyObject *__pyx_v_word_id = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("lookup", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":251
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":251
  *     def lookup(self, word, int offset, int low, int high):
  *         cdef int wordid
  *         if low == -1:             # <<<<<<<<<<<<<<
@@ -34163,7 +32309,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = (__pyx_v_low == -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":252
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":252
  *         cdef int wordid
  *         if low == -1:
  *             low = 0             # <<<<<<<<<<<<<<
@@ -34171,11 +32317,11 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_Suff
  *             high = len(self.sa)
  */
     __pyx_v_low = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":253
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":253
  *         if low == -1:
  *             low = 0
  *         if high == -1:             # <<<<<<<<<<<<<<
@@ -34185,45 +32331,45 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_Suff
   __pyx_t_1 = (__pyx_v_high == -1);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":254
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":254
  *             low = 0
  *         if high == -1:
  *             high = len(self.sa)             # <<<<<<<<<<<<<<
  *         if word in self.darray.word2id:
  *             word_id = self.darray.word2id[word]
  */
-    __pyx_t_2 = ((PyObject *)__pyx_v_self->sa);
+    __pyx_t_2 = ((PyObject *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->sa);
     __Pyx_INCREF(__pyx_t_2);
     __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_high = __pyx_t_3;
-    goto __pyx_L4;
+    goto __pyx_L7;
   }
-  __pyx_L4:;
+  __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":255
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":255
  *         if high == -1:
  *             high = len(self.sa)
  *         if word in self.darray.word2id:             # <<<<<<<<<<<<<<
  *             word_id = self.darray.word2id[word]
  *             return self.__lookup_helper(word_id, offset, low, high)
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_word, __pyx_v_self->darray->word2id, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PySequence_Contains(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->word2id, __pyx_v_word))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":256
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":256
  *             high = len(self.sa)
  *         if word in self.darray.word2id:
  *             word_id = self.darray.word2id[word]             # <<<<<<<<<<<<<<
  *             return self.__lookup_helper(word_id, offset, low, high)
  *         else:
  */
-    __pyx_t_2 = PyObject_GetItem(__pyx_v_self->darray->word2id, __pyx_v_word); if (!__pyx_t_2) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_GetItem(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->darray->word2id, __pyx_v_word); if (!__pyx_t_2) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_word_id = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":257
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":257
  *         if word in self.darray.word2id:
  *             word_id = self.darray.word2id[word]
  *             return self.__lookup_helper(word_id, offset, low, high)             # <<<<<<<<<<<<<<
@@ -34232,16 +32378,16 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_Suff
  */
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_v_word_id); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)__pyx_v_self->__pyx_vtab)->__pyx___lookup_helper(__pyx_v_self, __pyx_t_4, __pyx_v_offset, __pyx_v_low, __pyx_v_high); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_SuffixArray *)((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self)->__pyx_vtab)->__lookup_helper(((struct __pyx_obj_3_sa_SuffixArray *)__pyx_v_self), __pyx_t_4, __pyx_v_offset, __pyx_v_low, __pyx_v_high); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
-    goto __pyx_L5;
+    goto __pyx_L8;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":259
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":259
  *             return self.__lookup_helper(word_id, offset, low, high)
  *         else:
  *             return None             # <<<<<<<<<<<<<<
@@ -34251,7 +32397,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_Suff
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
-  __pyx_L5:;
+  __pyx_L8:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -34266,21 +32412,7 @@ static PyObject *__pyx_pf_3_sa_11SuffixArray_22lookup(struct __pyx_obj_3_sa_Suff
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_8TrieNode_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_8TrieNode_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_3_sa_8TrieNode___cinit__(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":35
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":35
  *     cdef public children
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -34288,16 +32420,20 @@ static int __pyx_pw_3_sa_8TrieNode_1__cinit__(PyObject *__pyx_v_self, PyObject *
  * 
  */
 
-static int __pyx_pf_3_sa_8TrieNode___cinit__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self) {
+static int __pyx_pf_3_sa_8TrieNode___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_8TrieNode___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  __Pyx_RefNannySetupContext("__cinit__");
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":36
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":36
  * 
  *     def __cinit__(self):
  *         self.children = {}             # <<<<<<<<<<<<<<
@@ -34307,9 +32443,9 @@ static int __pyx_pf_3_sa_8TrieNode___cinit__(struct __pyx_obj_3_sa_TrieNode *__p
   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->children);
-  __Pyx_DECREF(__pyx_v_self->children);
-  __pyx_v_self->children = ((PyObject *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  ((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
   __pyx_r = 0;
@@ -34323,18 +32459,7 @@ static int __pyx_pf_3_sa_8TrieNode___cinit__(struct __pyx_obj_3_sa_TrieNode *__p
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_8TrieNode_8children_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_8TrieNode_8children_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_8TrieNode_8children___get__(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":33
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":33
  * 
  * cdef class TrieNode:
  *     cdef public children             # <<<<<<<<<<<<<<
@@ -34342,13 +32467,14 @@ static PyObject *__pyx_pw_3_sa_8TrieNode_8children_1__get__(PyObject *__pyx_v_se
  *     def __cinit__(self):
  */
 
-static PyObject *__pyx_pf_3_sa_8TrieNode_8children___get__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_8TrieNode_8children___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_8TrieNode_8children___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_self->children);
-  __pyx_r = __pyx_v_self->children;
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  __pyx_r = ((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -34358,85 +32484,66 @@ static PyObject *__pyx_pf_3_sa_8TrieNode_8children___get__(struct __pyx_obj_3_sa
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_8TrieNode_8children_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_8TrieNode_8children_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_8TrieNode_8children_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_8TrieNode_8children_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_8TrieNode_8children_2__set__(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_8TrieNode_8children_2__set__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->children);
-  __Pyx_DECREF(__pyx_v_self->children);
-  __pyx_v_self->children = __pyx_v_value;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  ((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_8TrieNode_8children_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_3_sa_8TrieNode_8children_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pf_3_sa_8TrieNode_8children_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_3_sa_8TrieNode_8children_2__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_8TrieNode_8children_4__del__(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_8TrieNode_8children_4__del__(struct __pyx_obj_3_sa_TrieNode *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("__del__");
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->children);
-  __Pyx_DECREF(__pyx_v_self->children);
-  __pyx_v_self->children = Py_None;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children);
+  ((struct __pyx_obj_3_sa_TrieNode *)__pyx_v_self)->children = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":43
+ *     cdef public suffix_link
+ * 
+ *     def __cinit__(self, phrase=None, phrase_location=None, suffix_link=None):             # <<<<<<<<<<<<<<
+ *         self.phrase = phrase
+ *         self.phrase_location = phrase_location
+ */
+
+static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_phrase = 0;
   PyObject *__pyx_v_phrase_location = 0;
   PyObject *__pyx_v_suffix_link = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__phrase,&__pyx_n_s__phrase_location,&__pyx_n_s__suffix_link,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__phrase,&__pyx_n_s__phrase_location,&__pyx_n_s__suffix_link,0};
     PyObject* values[3] = {0,0,0};
-
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":43
- *     cdef public suffix_link
- * 
- *     def __cinit__(self, phrase=None, phrase_location=None, suffix_link=None):             # <<<<<<<<<<<<<<
- *         self.phrase = phrase
- *         self.phrase_location = phrase_location
- */
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -34444,7 +32551,7 @@ static int __pyx_pw_3_sa_16ExtendedTrieNode_1__cinit__(PyObject *__pyx_v_self, P
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__phrase);
@@ -34462,7 +32569,7 @@ static int __pyx_pw_3_sa_16ExtendedTrieNode_1__cinit__(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -34485,17 +32592,8 @@ static int __pyx_pw_3_sa_16ExtendedTrieNode_1__cinit__(PyObject *__pyx_v_self, P
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self), __pyx_v_phrase, __pyx_v_phrase_location, __pyx_v_suffix_link);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_phrase, PyObject *__pyx_v_phrase_location, PyObject *__pyx_v_suffix_link) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":44
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":44
  * 
  *     def __cinit__(self, phrase=None, phrase_location=None, suffix_link=None):
  *         self.phrase = phrase             # <<<<<<<<<<<<<<
@@ -34504,11 +32602,11 @@ static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(struct __pyx_obj_3_sa_Exte
  */
   __Pyx_INCREF(__pyx_v_phrase);
   __Pyx_GIVEREF(__pyx_v_phrase);
-  __Pyx_GOTREF(__pyx_v_self->phrase);
-  __Pyx_DECREF(__pyx_v_self->phrase);
-  __pyx_v_self->phrase = __pyx_v_phrase;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase = __pyx_v_phrase;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":45
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":45
  *     def __cinit__(self, phrase=None, phrase_location=None, suffix_link=None):
  *         self.phrase = phrase
  *         self.phrase_location = phrase_location             # <<<<<<<<<<<<<<
@@ -34517,11 +32615,11 @@ static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(struct __pyx_obj_3_sa_Exte
  */
   __Pyx_INCREF(__pyx_v_phrase_location);
   __Pyx_GIVEREF(__pyx_v_phrase_location);
-  __Pyx_GOTREF(__pyx_v_self->phrase_location);
-  __Pyx_DECREF(__pyx_v_self->phrase_location);
-  __pyx_v_self->phrase_location = __pyx_v_phrase_location;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location = __pyx_v_phrase_location;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":46
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":46
  *         self.phrase = phrase
  *         self.phrase_location = phrase_location
  *         self.suffix_link = suffix_link             # <<<<<<<<<<<<<<
@@ -34530,27 +32628,16 @@ static int __pyx_pf_3_sa_16ExtendedTrieNode___cinit__(struct __pyx_obj_3_sa_Exte
  */
   __Pyx_INCREF(__pyx_v_suffix_link);
   __Pyx_GIVEREF(__pyx_v_suffix_link);
-  __Pyx_GOTREF(__pyx_v_self->suffix_link);
-  __Pyx_DECREF(__pyx_v_self->suffix_link);
-  __pyx_v_self->suffix_link = __pyx_v_suffix_link;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link = __pyx_v_suffix_link;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_6phrase_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_6phrase_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":39
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":39
  * 
  * cdef class ExtendedTrieNode(TrieNode):
  *     cdef public phrase             # <<<<<<<<<<<<<<
@@ -34558,13 +32645,14 @@ static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_6phrase_1__get__(PyObject *__p
  *     cdef public suffix_link
  */
 
-static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_self->phrase);
-  __pyx_r = __pyx_v_self->phrase;
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  __pyx_r = ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -34574,70 +32662,39 @@ static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(struct __pyx_o
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_2__set__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_2__set__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->phrase);
-  __Pyx_DECREF(__pyx_v_self->phrase);
-  __pyx_v_self->phrase = __pyx_v_value;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_4__del__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_4__del__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self) {
+static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_2__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("__del__");
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->phrase);
-  __Pyx_DECREF(__pyx_v_self->phrase);
-  __pyx_v_self->phrase = Py_None;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":40
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":40
  * cdef class ExtendedTrieNode(TrieNode):
  *     cdef public phrase
  *     cdef public phrase_location             # <<<<<<<<<<<<<<
@@ -34645,13 +32702,14 @@ static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_1__get__(PyO
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_self->phrase_location);
-  __pyx_r = __pyx_v_self->phrase_location;
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  __pyx_r = ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -34661,70 +32719,39 @@ static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(stru
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_2__set__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_2__set__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->phrase_location);
-  __Pyx_DECREF(__pyx_v_self->phrase_location);
-  __pyx_v_self->phrase_location = __pyx_v_value;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_2__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_4__del__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_4__del__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("__del__");
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->phrase_location);
-  __Pyx_DECREF(__pyx_v_self->phrase_location);
-  __pyx_v_self->phrase_location = Py_None;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->phrase_location = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":41
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":41
  *     cdef public phrase
  *     cdef public phrase_location
  *     cdef public suffix_link             # <<<<<<<<<<<<<<
@@ -34732,13 +32759,14 @@ static PyObject *__pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_1__get__(PyObjec
  *     def __cinit__(self, phrase=None, phrase_location=None, suffix_link=None):
  */
 
-static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_self->suffix_link);
-  __pyx_r = __pyx_v_self->suffix_link;
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  __pyx_r = ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -34748,79 +32776,71 @@ static PyObject *__pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(struct _
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_2__set__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_2__set__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->suffix_link);
-  __Pyx_DECREF(__pyx_v_self->suffix_link);
-  __pyx_v_self->suffix_link = __pyx_v_value;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_4__del__(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_4__del__(struct __pyx_obj_3_sa_ExtendedTrieNode *__pyx_v_self) {
+static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_2__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("__del__");
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->suffix_link);
-  __Pyx_DECREF(__pyx_v_self->suffix_link);
-  __pyx_v_self->suffix_link = Py_None;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link);
+  ((struct __pyx_obj_3_sa_ExtendedTrieNode *)__pyx_v_self)->suffix_link = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9TrieTable_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_9TrieTable_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":53
+ *     cdef public int count
+ *     cdef public root
+ *     def __cinit__(self, extended=False):             # <<<<<<<<<<<<<<
+ *         self.count = 0
+ *         self.extended = extended
+ */
+
+static int __pyx_pf_3_sa_9TrieTable___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_9TrieTable___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_extended = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__extended,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__extended,0};
     PyObject* values[1] = {0};
     values[0] = __pyx_k_99;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__extended);
@@ -34828,7 +32848,7 @@ static int __pyx_pw_3_sa_9TrieTable_1__cinit__(PyObject *__pyx_v_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -34847,40 +32867,17 @@ static int __pyx_pw_3_sa_9TrieTable_1__cinit__(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_9TrieTable___cinit__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self), __pyx_v_extended);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":53
- *     cdef public int count
- *     cdef public root
- *     def __cinit__(self, extended=False):             # <<<<<<<<<<<<<<
- *         self.count = 0
- *         self.extended = extended
- */
-
-static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_extended) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":54
  *     cdef public root
  *     def __cinit__(self, extended=False):
  *         self.count = 0             # <<<<<<<<<<<<<<
  *         self.extended = extended
  *         if extended:
  */
-  __pyx_v_self->count = 0;
+  ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->count = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":55
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":55
  *     def __cinit__(self, extended=False):
  *         self.count = 0
  *         self.extended = extended             # <<<<<<<<<<<<<<
@@ -34888,9 +32885,9 @@ static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *_
  *             self.root = ExtendedTrieNode()
  */
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_extended); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->extended = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->extended = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":56
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":56
  *         self.count = 0
  *         self.extended = extended
  *         if extended:             # <<<<<<<<<<<<<<
@@ -34900,7 +32897,7 @@ static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *_
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_extended); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":57
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":57
  *         self.extended = extended
  *         if extended:
  *             self.root = ExtendedTrieNode()             # <<<<<<<<<<<<<<
@@ -34910,15 +32907,15 @@ static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *_
     __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
-    __Pyx_GOTREF(__pyx_v_self->root);
-    __Pyx_DECREF(__pyx_v_self->root);
-    __pyx_v_self->root = __pyx_t_3;
+    __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+    __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+    ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root = __pyx_t_3;
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":59
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":59
  *             self.root = ExtendedTrieNode()
  *         else:
  *             self.root = TrieNode()             # <<<<<<<<<<<<<<
@@ -34928,12 +32925,12 @@ static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *_
     __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_TrieNode)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
-    __Pyx_GOTREF(__pyx_v_self->root);
-    __Pyx_DECREF(__pyx_v_self->root);
-    __pyx_v_self->root = __pyx_t_3;
+    __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+    __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+    ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root = __pyx_t_3;
     __pyx_t_3 = 0;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -34946,18 +32943,7 @@ static int __pyx_pf_3_sa_9TrieTable___cinit__(struct __pyx_obj_3_sa_TrieTable *_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9TrieTable_8extended_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_9TrieTable_8extended_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_8extended___get__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":50
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":50
  * 
  * cdef class TrieTable:
  *     cdef public int extended             # <<<<<<<<<<<<<<
@@ -34965,16 +32951,17 @@ static PyObject *__pyx_pw_3_sa_9TrieTable_8extended_1__get__(PyObject *__pyx_v_s
  *     cdef public root
  */
 
-static PyObject *__pyx_pf_3_sa_9TrieTable_8extended___get__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_9TrieTable_8extended___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_9TrieTable_8extended___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->extended); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->extended); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -34992,27 +32979,17 @@ static PyObject *__pyx_pf_3_sa_9TrieTable_8extended___get__(struct __pyx_obj_3_s
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9TrieTable_8extended_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_9TrieTable_8extended_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_8extended_2__set__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_9TrieTable_8extended_2__set__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_9TrieTable_8extended_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_9TrieTable_8extended_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->extended = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->extended = __pyx_t_1;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -35024,18 +33001,7 @@ static int __pyx_pf_3_sa_9TrieTable_8extended_2__set__(struct __pyx_obj_3_sa_Tri
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9TrieTable_5count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_9TrieTable_5count_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_5count___get__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":51
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":51
  * cdef class TrieTable:
  *     cdef public int extended
  *     cdef public int count             # <<<<<<<<<<<<<<
@@ -35043,16 +33009,17 @@ static PyObject *__pyx_pw_3_sa_9TrieTable_5count_1__get__(PyObject *__pyx_v_self
  *     def __cinit__(self, extended=False):
  */
 
-static PyObject *__pyx_pf_3_sa_9TrieTable_5count___get__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_9TrieTable_5count___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_9TrieTable_5count___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -35070,27 +33037,17 @@ static PyObject *__pyx_pf_3_sa_9TrieTable_5count___get__(struct __pyx_obj_3_sa_T
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9TrieTable_5count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_9TrieTable_5count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_5count_2__set__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_9TrieTable_5count_2__set__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_9TrieTable_5count_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_9TrieTable_5count_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->count = __pyx_t_1;
+  ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->count = __pyx_t_1;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -35102,18 +33059,7 @@ static int __pyx_pf_3_sa_9TrieTable_5count_2__set__(struct __pyx_obj_3_sa_TrieTa
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_9TrieTable_4root_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_9TrieTable_4root_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_4root___get__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":52
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":52
  *     cdef public int extended
  *     cdef public int count
  *     cdef public root             # <<<<<<<<<<<<<<
@@ -35121,13 +33067,14 @@ static PyObject *__pyx_pw_3_sa_9TrieTable_4root_1__get__(PyObject *__pyx_v_self)
  *         self.count = 0
  */
 
-static PyObject *__pyx_pf_3_sa_9TrieTable_4root___get__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_9TrieTable_4root___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_9TrieTable_4root___get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("__get__");
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_self->root);
-  __pyx_r = __pyx_v_self->root;
+  __Pyx_INCREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+  __pyx_r = ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -35137,59 +33084,39 @@ static PyObject *__pyx_pf_3_sa_9TrieTable_4root___get__(struct __pyx_obj_3_sa_Tr
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9TrieTable_4root_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_3_sa_9TrieTable_4root_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_3_sa_9TrieTable_4root_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_3_sa_9TrieTable_4root_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_4root_2__set__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_9TrieTable_4root_2__set__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("__set__");
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->root);
-  __Pyx_DECREF(__pyx_v_self->root);
-  __pyx_v_self->root = __pyx_v_value;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+  ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_9TrieTable_4root_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_3_sa_9TrieTable_4root_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pf_3_sa_9TrieTable_4root_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_3_sa_9TrieTable_4root_2__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_9TrieTable_4root_4__del__(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_3_sa_9TrieTable_4root_4__del__(struct __pyx_obj_3_sa_TrieTable *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("__del__");
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->root);
-  __Pyx_DECREF(__pyx_v_self->root);
-  __pyx_v_self->root = Py_None;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root);
+  ((struct __pyx_obj_3_sa_TrieTable *)__pyx_v_self)->root = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":79
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":79
  * 
  *     # returns true if sent_id is contained
  *     cdef int contains(self, int sent_id):             # <<<<<<<<<<<<<<
@@ -35197,12 +33124,12 @@ static int __pyx_pf_3_sa_9TrieTable_4root_4__del__(struct __pyx_obj_3_sa_TrieTab
  * 
  */
 
-static int __pyx_f_3_sa_14PhraseLocation_contains(CYTHON_UNUSED struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_self, CYTHON_UNUSED int __pyx_v_sent_id) {
+static int __pyx_f_3_sa_14PhraseLocation_contains(struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_self, int __pyx_v_sent_id) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("contains", 0);
+  __Pyx_RefNannySetupContext("contains");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":80
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":80
  *     # returns true if sent_id is contained
  *     cdef int contains(self, int sent_id):
  *         return 1             # <<<<<<<<<<<<<<
@@ -35218,9 +33145,16 @@ static int __pyx_f_3_sa_14PhraseLocation_contains(CYTHON_UNUSED struct __pyx_obj
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":82
+ *         return 1
+ * 
+ *     def __cinit__(self, int sa_low=-1, int sa_high=-1, int arr_low=-1, int arr_high=-1,             # <<<<<<<<<<<<<<
+ *             arr=None, int num_subpatterns=1):
+ *         self.sa_low = sa_low
+ */
+
+static int __pyx_pf_3_sa_14PhraseLocation___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_14PhraseLocation___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_sa_low;
   int __pyx_v_sa_high;
   int __pyx_v_arr_low;
@@ -35229,12 +33163,15 @@ static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyO
   int __pyx_v_num_subpatterns;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sa_low,&__pyx_n_s__sa_high,&__pyx_n_s__arr_low,&__pyx_n_s__arr_high,&__pyx_n_s__arr,&__pyx_n_s__num_subpatterns,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sa_low,&__pyx_n_s__sa_high,&__pyx_n_s__arr_low,&__pyx_n_s__arr_high,&__pyx_n_s__arr,&__pyx_n_s__num_subpatterns,0};
     PyObject* values[6] = {0,0,0,0,0,0};
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":83
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":83
  * 
  *     def __cinit__(self, int sa_low=-1, int sa_high=-1, int arr_low=-1, int arr_high=-1,
  *             arr=None, int num_subpatterns=1):             # <<<<<<<<<<<<<<
@@ -35244,8 +33181,7 @@ static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyO
     values[4] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
@@ -35256,7 +33192,7 @@ static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyO
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sa_low);
@@ -35289,7 +33225,7 @@ static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -35338,64 +33274,44 @@ static int __pyx_pw_3_sa_14PhraseLocation_1__cinit__(PyObject *__pyx_v_self, PyO
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_14PhraseLocation___cinit__(((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self), __pyx_v_sa_low, __pyx_v_sa_high, __pyx_v_arr_low, __pyx_v_arr_high, __pyx_v_arr, __pyx_v_num_subpatterns);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":82
- *         return 1
- * 
- *     def __cinit__(self, int sa_low=-1, int sa_high=-1, int arr_low=-1, int arr_high=-1,             # <<<<<<<<<<<<<<
- *             arr=None, int num_subpatterns=1):
- *         self.sa_low = sa_low
- */
-
-static int __pyx_pf_3_sa_14PhraseLocation___cinit__(struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_self, int __pyx_v_sa_low, int __pyx_v_sa_high, int __pyx_v_arr_low, int __pyx_v_arr_high, PyObject *__pyx_v_arr, int __pyx_v_num_subpatterns) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":84
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":84
  *     def __cinit__(self, int sa_low=-1, int sa_high=-1, int arr_low=-1, int arr_high=-1,
  *             arr=None, int num_subpatterns=1):
  *         self.sa_low = sa_low             # <<<<<<<<<<<<<<
  *         self.sa_high = sa_high
  *         self.arr_low = arr_low
  */
-  __pyx_v_self->sa_low = __pyx_v_sa_low;
+  ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->sa_low = __pyx_v_sa_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":85
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":85
  *             arr=None, int num_subpatterns=1):
  *         self.sa_low = sa_low
  *         self.sa_high = sa_high             # <<<<<<<<<<<<<<
  *         self.arr_low = arr_low
  *         self.arr_high = arr_high
  */
-  __pyx_v_self->sa_high = __pyx_v_sa_high;
+  ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->sa_high = __pyx_v_sa_high;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":86
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":86
  *         self.sa_low = sa_low
  *         self.sa_high = sa_high
  *         self.arr_low = arr_low             # <<<<<<<<<<<<<<
  *         self.arr_high = arr_high
  *         self.arr = arr
  */
-  __pyx_v_self->arr_low = __pyx_v_arr_low;
+  ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->arr_low = __pyx_v_arr_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":87
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":87
  *         self.sa_high = sa_high
  *         self.arr_low = arr_low
  *         self.arr_high = arr_high             # <<<<<<<<<<<<<<
  *         self.arr = arr
  *         self.num_subpatterns = num_subpatterns
  */
-  __pyx_v_self->arr_high = __pyx_v_arr_high;
+  ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->arr_high = __pyx_v_arr_high;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":88
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":88
  *         self.arr_low = arr_low
  *         self.arr_high = arr_high
  *         self.arr = arr             # <<<<<<<<<<<<<<
@@ -35405,18 +33321,18 @@ static int __pyx_pf_3_sa_14PhraseLocation___cinit__(struct __pyx_obj_3_sa_Phrase
   if (!(likely(((__pyx_v_arr) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_arr, __pyx_ptype_3_sa_IntList))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_INCREF(__pyx_v_arr);
   __Pyx_GIVEREF(__pyx_v_arr);
-  __Pyx_GOTREF(__pyx_v_self->arr);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->arr));
-  __pyx_v_self->arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_v_arr);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->arr);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->arr));
+  ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_v_arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":89
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":89
  *         self.arr_high = arr_high
  *         self.arr = arr
  *         self.num_subpatterns = num_subpatterns             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_v_self->num_subpatterns = __pyx_v_num_subpatterns;
+  ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_self)->num_subpatterns = __pyx_v_num_subpatterns;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -35428,39 +33344,54 @@ static int __pyx_pf_3_sa_14PhraseLocation___cinit__(struct __pyx_obj_3_sa_Phrase
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_7Sampler_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_7Sampler_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":99
+ *     cdef IntList sa
+ * 
+ *     def __cinit__(self, int sample_size, SuffixArray fsarray):             # <<<<<<<<<<<<<<
+ *         self.sample_size = sample_size
+ *         self.sa = fsarray.sa
+ */
+
+static int __pyx_pf_3_sa_7Sampler___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_7Sampler___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_sample_size;
   struct __pyx_obj_3_sa_SuffixArray *__pyx_v_fsarray = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sample_size,&__pyx_n_s__fsarray,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sample_size,&__pyx_n_s__fsarray,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sample_size)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sample_size);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fsarray)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fsarray);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -35480,45 +33411,17 @@ static int __pyx_pw_3_sa_7Sampler_1__cinit__(PyObject *__pyx_v_self, PyObject *_
   return -1;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fsarray), __pyx_ptype_3_sa_SuffixArray, 1, "fsarray", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_7Sampler___cinit__(((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self), __pyx_v_sample_size, __pyx_v_fsarray);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":99
- *     cdef IntList sa
- * 
- *     def __cinit__(self, int sample_size, SuffixArray fsarray):             # <<<<<<<<<<<<<<
- *         self.sample_size = sample_size
- *         self.sa = fsarray.sa
- */
-
-static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx_v_self, int __pyx_v_sample_size, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_fsarray) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":100
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":100
  * 
  *     def __cinit__(self, int sample_size, SuffixArray fsarray):
  *         self.sample_size = sample_size             # <<<<<<<<<<<<<<
  *         self.sa = fsarray.sa
  *         if sample_size > 0:
  */
-  __pyx_v_self->sample_size = __pyx_v_sample_size;
+  ((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size = __pyx_v_sample_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":101
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":101
  *     def __cinit__(self, int sample_size, SuffixArray fsarray):
  *         self.sample_size = sample_size
  *         self.sa = fsarray.sa             # <<<<<<<<<<<<<<
@@ -35527,11 +33430,11 @@ static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_fsarray->sa));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_fsarray->sa));
-  __Pyx_GOTREF(__pyx_v_self->sa);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sa));
-  __pyx_v_self->sa = __pyx_v_fsarray->sa;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sa);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sa));
+  ((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sa = __pyx_v_fsarray->sa;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":102
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":102
  *         self.sample_size = sample_size
  *         self.sa = fsarray.sa
  *         if sample_size > 0:             # <<<<<<<<<<<<<<
@@ -35541,7 +33444,7 @@ static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx
   __pyx_t_1 = (__pyx_v_sample_size > 0);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":103
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":103
  *         self.sa = fsarray.sa
  *         if sample_size > 0:
  *             logger.info("Sampling strategy: uniform, max sample size = %d", sample_size)             # <<<<<<<<<<<<<<
@@ -35556,7 +33459,7 @@ static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx
     __pyx_t_2 = PyInt_FromLong(__pyx_v_sample_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __Pyx_INCREF(((PyObject *)__pyx_kp_s_100));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_kp_s_100));
     __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_100));
@@ -35568,11 +33471,11 @@ static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":105
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":105
  *             logger.info("Sampling strategy: uniform, max sample size = %d", sample_size)
  *         else:
  *             logger.info("Sampling strategy: no sampling")             # <<<<<<<<<<<<<<
@@ -35589,7 +33492,7 @@ static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
   __pyx_r = 0;
   goto __pyx_L0;
@@ -35604,24 +33507,7 @@ static int __pyx_pf_3_sa_7Sampler___cinit__(struct __pyx_obj_3_sa_Sampler *__pyx
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_7Sampler_3sample(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase_location); /*proto*/
-static char __pyx_doc_3_sa_7Sampler_2sample[] = "Returns a sample of the locations for\n        the phrase.    If there are less than self.sample_size\n        locations, return all of them; otherwise, return\n        up to self.sample_size locations.    In the latter case,\n        we choose to sample UNIFORMLY -- that is, the locations\n        are chosen at uniform intervals over the entire set, rather\n        than randomly.    This makes the algorithm deterministic, which\n        is good for things like MERT";
-static PyObject *__pyx_pw_3_sa_7Sampler_3sample(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase_location) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("sample (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phrase_location), __pyx_ptype_3_sa_PhraseLocation, 1, "phrase_location", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_7Sampler_2sample(((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self), ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location));
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":107
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":107
  *             logger.info("Sampling strategy: no sampling")
  * 
  *     def sample(self, PhraseLocation phrase_location):             # <<<<<<<<<<<<<<
@@ -35629,7 +33515,9 @@ static PyObject *__pyx_pw_3_sa_7Sampler_3sample(PyObject *__pyx_v_self, PyObject
  *         the phrase.    If there are less than self.sample_size
  */
 
-static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *__pyx_v_self, struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_phrase_location) {
+static PyObject *__pyx_pf_3_sa_7Sampler_1sample(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase_location); /*proto*/
+static char __pyx_doc_3_sa_7Sampler_1sample[] = "Returns a sample of the locations for\n        the phrase.    If there are less than self.sample_size\n        locations, return all of them; otherwise, return\n        up to self.sample_size locations.    In the latter case,\n        we choose to sample UNIFORMLY -- that is, the locations\n        are chosen at uniform intervals over the entire set, rather\n        than randomly.    This makes the algorithm deterministic, which\n        is good for things like MERT";
+static PyObject *__pyx_pf_3_sa_7Sampler_1sample(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase_location) {
   struct __pyx_obj_3_sa_IntList *__pyx_v_sample = 0;
   double __pyx_v_i;
   double __pyx_v_stepsize;
@@ -35646,9 +33534,10 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("sample", 0);
+  __Pyx_RefNannySetupContext("sample");
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phrase_location), __pyx_ptype_3_sa_PhraseLocation, 1, "phrase_location", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":120
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":120
  *         cdef int num_locations, val, j
  * 
  *         sample = IntList()             # <<<<<<<<<<<<<<
@@ -35660,76 +33549,76 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
   __pyx_v_sample = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":121
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":121
  * 
  *         sample = IntList()
  *         if phrase_location.arr is None:             # <<<<<<<<<<<<<<
  *             num_locations = phrase_location.sa_high - phrase_location.sa_low
  *             if self.sample_size == -1 or num_locations <= self.sample_size:
  */
-  __pyx_t_2 = (((PyObject *)__pyx_v_phrase_location->arr) == Py_None);
+  __pyx_t_2 = (((PyObject *)((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr) == Py_None);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":122
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":122
  *         sample = IntList()
  *         if phrase_location.arr is None:
  *             num_locations = phrase_location.sa_high - phrase_location.sa_low             # <<<<<<<<<<<<<<
  *             if self.sample_size == -1 or num_locations <= self.sample_size:
  *                 sample._extend_arr(self.sa.arr + phrase_location.sa_low, num_locations)
  */
-    __pyx_v_num_locations = (__pyx_v_phrase_location->sa_high - __pyx_v_phrase_location->sa_low);
+    __pyx_v_num_locations = (((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->sa_high - ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->sa_low);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":123
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":123
  *         if phrase_location.arr is None:
  *             num_locations = phrase_location.sa_high - phrase_location.sa_low
  *             if self.sample_size == -1 or num_locations <= self.sample_size:             # <<<<<<<<<<<<<<
  *                 sample._extend_arr(self.sa.arr + phrase_location.sa_low, num_locations)
  *             else:
  */
-    __pyx_t_2 = (__pyx_v_self->sample_size == -1);
+    __pyx_t_2 = (((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size == -1);
     if (!__pyx_t_2) {
-      __pyx_t_3 = (__pyx_v_num_locations <= __pyx_v_self->sample_size);
+      __pyx_t_3 = (__pyx_v_num_locations <= ((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size);
       __pyx_t_4 = __pyx_t_3;
     } else {
       __pyx_t_4 = __pyx_t_2;
     }
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":124
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":124
  *             num_locations = phrase_location.sa_high - phrase_location.sa_low
  *             if self.sample_size == -1 or num_locations <= self.sample_size:
  *                 sample._extend_arr(self.sa.arr + phrase_location.sa_low, num_locations)             # <<<<<<<<<<<<<<
  *             else:
  *                 stepsize = float(num_locations)/float(self.sample_size)
  */
-      ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sample->__pyx_vtab)->_extend_arr(__pyx_v_sample, (__pyx_v_self->sa->arr + __pyx_v_phrase_location->sa_low), __pyx_v_num_locations);
-      goto __pyx_L4;
+      ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sample->__pyx_vtab)->_extend_arr(__pyx_v_sample, (((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sa->arr + ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->sa_low), __pyx_v_num_locations);
+      goto __pyx_L6;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":126
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":126
  *                 sample._extend_arr(self.sa.arr + phrase_location.sa_low, num_locations)
  *             else:
  *                 stepsize = float(num_locations)/float(self.sample_size)             # <<<<<<<<<<<<<<
  *                 i = phrase_location.sa_low
  *                 while i < phrase_location.sa_high and sample.len < self.sample_size:
  */
-      if (unlikely(((double)__pyx_v_self->sample_size) == 0)) {
+      if (unlikely(((double)((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size) == 0)) {
         PyErr_Format(PyExc_ZeroDivisionError, "float division");
         {__pyx_filename = __pyx_f[8]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_v_stepsize = (((double)__pyx_v_num_locations) / ((double)__pyx_v_self->sample_size));
+      __pyx_v_stepsize = (((double)__pyx_v_num_locations) / ((double)((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":127
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":127
  *             else:
  *                 stepsize = float(num_locations)/float(self.sample_size)
  *                 i = phrase_location.sa_low             # <<<<<<<<<<<<<<
  *                 while i < phrase_location.sa_high and sample.len < self.sample_size:
  *                     '''Note: int(i) not guaranteed to have the desired
  */
-      __pyx_v_i = __pyx_v_phrase_location->sa_low;
+      __pyx_v_i = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->sa_low;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":128
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":128
  *                 stepsize = float(num_locations)/float(self.sample_size)
  *                 i = phrase_location.sa_low
  *                 while i < phrase_location.sa_high and sample.len < self.sample_size:             # <<<<<<<<<<<<<<
@@ -35737,16 +33626,16 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
  *                     effect, according to the python documentation'''
  */
       while (1) {
-        __pyx_t_4 = (__pyx_v_i < __pyx_v_phrase_location->sa_high);
+        __pyx_t_4 = (__pyx_v_i < ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->sa_high);
         if (__pyx_t_4) {
-          __pyx_t_2 = (__pyx_v_sample->len < __pyx_v_self->sample_size);
+          __pyx_t_2 = (__pyx_v_sample->len < ((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size);
           __pyx_t_3 = __pyx_t_2;
         } else {
           __pyx_t_3 = __pyx_t_4;
         }
         if (!__pyx_t_3) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":131
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":131
  *                     '''Note: int(i) not guaranteed to have the desired
  *                     effect, according to the python documentation'''
  *                     if fmod(i,1.0) > 0.5:             # <<<<<<<<<<<<<<
@@ -35756,7 +33645,7 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
         __pyx_t_3 = (fmod(__pyx_v_i, 1.0) > 0.5);
         if (__pyx_t_3) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":132
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":132
  *                     effect, according to the python documentation'''
  *                     if fmod(i,1.0) > 0.5:
  *                         val = int(ceil(i))             # <<<<<<<<<<<<<<
@@ -35764,11 +33653,11 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
  *                         val = int(floor(i))
  */
           __pyx_v_val = ((int)ceil(__pyx_v_i));
-          goto __pyx_L7;
+          goto __pyx_L9;
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":134
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":134
  *                         val = int(ceil(i))
  *                     else:
  *                         val = int(floor(i))             # <<<<<<<<<<<<<<
@@ -35777,18 +33666,18 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
  */
           __pyx_v_val = ((int)floor(__pyx_v_i));
         }
-        __pyx_L7:;
+        __pyx_L9:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":135
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":135
  *                     else:
  *                         val = int(floor(i))
  *                     sample._append(self.sa.arr[val])             # <<<<<<<<<<<<<<
  *                     i = i + stepsize
  *         else:
  */
-        ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sample->__pyx_vtab)->_append(__pyx_v_sample, (__pyx_v_self->sa->arr[__pyx_v_val]));
+        ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sample->__pyx_vtab)->_append(__pyx_v_sample, (((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sa->arr[__pyx_v_val]));
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":136
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":136
  *                         val = int(floor(i))
  *                     sample._append(self.sa.arr[val])
  *                     i = i + stepsize             # <<<<<<<<<<<<<<
@@ -35798,82 +33687,82 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
         __pyx_v_i = (__pyx_v_i + __pyx_v_stepsize);
       }
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+    __pyx_L6:;
+    goto __pyx_L5;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":138
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":138
  *                     i = i + stepsize
  *         else:
  *             num_locations = (phrase_location.arr_high - phrase_location.arr_low) / phrase_location.num_subpatterns             # <<<<<<<<<<<<<<
  *             if self.sample_size == -1 or num_locations <= self.sample_size:
  *                 sample = phrase_location.arr
  */
-    __pyx_t_5 = (__pyx_v_phrase_location->arr_high - __pyx_v_phrase_location->arr_low);
-    if (unlikely(__pyx_v_phrase_location->num_subpatterns == 0)) {
+    __pyx_t_5 = (((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr_high - ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr_low);
+    if (unlikely(((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->num_subpatterns == 0)) {
       PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
       {__pyx_filename = __pyx_f[8]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    else if (sizeof(int) == sizeof(long) && unlikely(__pyx_v_phrase_location->num_subpatterns == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_5))) {
+    else if (sizeof(int) == sizeof(long) && unlikely(((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->num_subpatterns == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_5))) {
       PyErr_Format(PyExc_OverflowError, "value too large to perform division");
       {__pyx_filename = __pyx_f[8]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_v_num_locations = __Pyx_div_int(__pyx_t_5, __pyx_v_phrase_location->num_subpatterns);
+    __pyx_v_num_locations = __Pyx_div_int(__pyx_t_5, ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->num_subpatterns);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":139
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":139
  *         else:
  *             num_locations = (phrase_location.arr_high - phrase_location.arr_low) / phrase_location.num_subpatterns
  *             if self.sample_size == -1 or num_locations <= self.sample_size:             # <<<<<<<<<<<<<<
  *                 sample = phrase_location.arr
  *             else:
  */
-    __pyx_t_3 = (__pyx_v_self->sample_size == -1);
+    __pyx_t_3 = (((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size == -1);
     if (!__pyx_t_3) {
-      __pyx_t_4 = (__pyx_v_num_locations <= __pyx_v_self->sample_size);
+      __pyx_t_4 = (__pyx_v_num_locations <= ((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size);
       __pyx_t_2 = __pyx_t_4;
     } else {
       __pyx_t_2 = __pyx_t_3;
     }
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":140
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":140
  *             num_locations = (phrase_location.arr_high - phrase_location.arr_low) / phrase_location.num_subpatterns
  *             if self.sample_size == -1 or num_locations <= self.sample_size:
  *                 sample = phrase_location.arr             # <<<<<<<<<<<<<<
  *             else:
  *                 stepsize = float(num_locations)/float(self.sample_size)
  */
-      __Pyx_INCREF(((PyObject *)__pyx_v_phrase_location->arr));
+      __Pyx_INCREF(((PyObject *)((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr));
       __Pyx_DECREF(((PyObject *)__pyx_v_sample));
-      __pyx_v_sample = __pyx_v_phrase_location->arr;
-      goto __pyx_L8;
+      __pyx_v_sample = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr;
+      goto __pyx_L10;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":142
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":142
  *                 sample = phrase_location.arr
  *             else:
  *                 stepsize = float(num_locations)/float(self.sample_size)             # <<<<<<<<<<<<<<
  *                 i = phrase_location.arr_low
  *                 while i < num_locations and sample.len < self.sample_size * phrase_location.num_subpatterns:
  */
-      if (unlikely(((double)__pyx_v_self->sample_size) == 0)) {
+      if (unlikely(((double)((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size) == 0)) {
         PyErr_Format(PyExc_ZeroDivisionError, "float division");
         {__pyx_filename = __pyx_f[8]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_v_stepsize = (((double)__pyx_v_num_locations) / ((double)__pyx_v_self->sample_size));
+      __pyx_v_stepsize = (((double)__pyx_v_num_locations) / ((double)((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":143
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":143
  *             else:
  *                 stepsize = float(num_locations)/float(self.sample_size)
  *                 i = phrase_location.arr_low             # <<<<<<<<<<<<<<
  *                 while i < num_locations and sample.len < self.sample_size * phrase_location.num_subpatterns:
  *                     '''Note: int(i) not guaranteed to have the desired
  */
-      __pyx_v_i = __pyx_v_phrase_location->arr_low;
+      __pyx_v_i = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr_low;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":144
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":144
  *                 stepsize = float(num_locations)/float(self.sample_size)
  *                 i = phrase_location.arr_low
  *                 while i < num_locations and sample.len < self.sample_size * phrase_location.num_subpatterns:             # <<<<<<<<<<<<<<
@@ -35883,14 +33772,14 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
       while (1) {
         __pyx_t_2 = (__pyx_v_i < __pyx_v_num_locations);
         if (__pyx_t_2) {
-          __pyx_t_3 = (__pyx_v_sample->len < (__pyx_v_self->sample_size * __pyx_v_phrase_location->num_subpatterns));
+          __pyx_t_3 = (__pyx_v_sample->len < (((struct __pyx_obj_3_sa_Sampler *)__pyx_v_self)->sample_size * ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->num_subpatterns));
           __pyx_t_4 = __pyx_t_3;
         } else {
           __pyx_t_4 = __pyx_t_2;
         }
         if (!__pyx_t_4) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":147
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":147
  *                     '''Note: int(i) not guaranteed to have the desired
  *                     effect, according to the python documentation'''
  *                     if fmod(i,1.0) > 0.5:             # <<<<<<<<<<<<<<
@@ -35900,7 +33789,7 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
         __pyx_t_4 = (fmod(__pyx_v_i, 1.0) > 0.5);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":148
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":148
  *                     effect, according to the python documentation'''
  *                     if fmod(i,1.0) > 0.5:
  *                         val = int(ceil(i))             # <<<<<<<<<<<<<<
@@ -35908,11 +33797,11 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
  *                         val = int(floor(i))
  */
           __pyx_v_val = ((int)ceil(__pyx_v_i));
-          goto __pyx_L11;
+          goto __pyx_L13;
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":150
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":150
  *                         val = int(ceil(i))
  *                     else:
  *                         val = int(floor(i))             # <<<<<<<<<<<<<<
@@ -35921,27 +33810,27 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
  */
           __pyx_v_val = ((int)floor(__pyx_v_i));
         }
-        __pyx_L11:;
+        __pyx_L13:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":151
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":151
  *                     else:
  *                         val = int(floor(i))
  *                     j = phrase_location.arr_low + (val*phrase_location.num_subpatterns)             # <<<<<<<<<<<<<<
  *                     sample._extend_arr(phrase_location.arr.arr + j, phrase_location.num_subpatterns)
  *                     i = i + stepsize
  */
-        __pyx_v_j = (__pyx_v_phrase_location->arr_low + (__pyx_v_val * __pyx_v_phrase_location->num_subpatterns));
+        __pyx_v_j = (((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr_low + (__pyx_v_val * ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->num_subpatterns));
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":152
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":152
  *                         val = int(floor(i))
  *                     j = phrase_location.arr_low + (val*phrase_location.num_subpatterns)
  *                     sample._extend_arr(phrase_location.arr.arr + j, phrase_location.num_subpatterns)             # <<<<<<<<<<<<<<
  *                     i = i + stepsize
  *         return sample
  */
-        ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sample->__pyx_vtab)->_extend_arr(__pyx_v_sample, (__pyx_v_phrase_location->arr->arr + __pyx_v_j), __pyx_v_phrase_location->num_subpatterns);
+        ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_sample->__pyx_vtab)->_extend_arr(__pyx_v_sample, (((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->arr->arr + __pyx_v_j), ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_v_phrase_location)->num_subpatterns);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":153
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":153
  *                     j = phrase_location.arr_low + (val*phrase_location.num_subpatterns)
  *                     sample._extend_arr(phrase_location.arr.arr + j, phrase_location.num_subpatterns)
  *                     i = i + stepsize             # <<<<<<<<<<<<<<
@@ -35951,11 +33840,11 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
         __pyx_v_i = (__pyx_v_i + __pyx_v_stepsize);
       }
     }
-    __pyx_L8:;
+    __pyx_L10:;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":154
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":154
  *                     sample._extend_arr(phrase_location.arr.arr + j, phrase_location.num_subpatterns)
  *                     i = i + stepsize
  *         return sample             # <<<<<<<<<<<<<<
@@ -35980,7 +33869,7 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":166
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":166
  * 
  * 
  * cdef void assign_matching(Matching* m, int* arr, int start, int step, int* sent_id_arr):             # <<<<<<<<<<<<<<
@@ -35990,9 +33879,9 @@ static PyObject *__pyx_pf_3_sa_7Sampler_2sample(struct __pyx_obj_3_sa_Sampler *_
 
 static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m, int *__pyx_v_arr, int __pyx_v_start, int __pyx_v_step, int *__pyx_v_sent_id_arr) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("assign_matching", 0);
+  __Pyx_RefNannySetupContext("assign_matching");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":167
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":167
  * 
  * cdef void assign_matching(Matching* m, int* arr, int start, int step, int* sent_id_arr):
  *     m.arr = arr             # <<<<<<<<<<<<<<
@@ -36001,7 +33890,7 @@ static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m
  */
   __pyx_v_m->arr = __pyx_v_arr;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":168
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":168
  * cdef void assign_matching(Matching* m, int* arr, int start, int step, int* sent_id_arr):
  *     m.arr = arr
  *     m.start = start             # <<<<<<<<<<<<<<
@@ -36010,7 +33899,7 @@ static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m
  */
   __pyx_v_m->start = __pyx_v_start;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":169
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":169
  *     m.arr = arr
  *     m.start = start
  *     m.end = start + step             # <<<<<<<<<<<<<<
@@ -36019,7 +33908,7 @@ static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m
  */
   __pyx_v_m->end = (__pyx_v_start + __pyx_v_step);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":170
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":170
  *     m.start = start
  *     m.end = start + step
  *     m.sent_id = sent_id_arr[arr[start]]             # <<<<<<<<<<<<<<
@@ -36028,7 +33917,7 @@ static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m
  */
   __pyx_v_m->sent_id = (__pyx_v_sent_id_arr[(__pyx_v_arr[__pyx_v_start])]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":171
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":171
  *     m.end = start + step
  *     m.sent_id = sent_id_arr[arr[start]]
  *     m.size = step             # <<<<<<<<<<<<<<
@@ -36040,7 +33929,7 @@ static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":174
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":174
  * 
  * 
  * cdef int* append_combined_matching(int* arr, Matching* loc1, Matching* loc2,             # <<<<<<<<<<<<<<
@@ -36048,16 +33937,16 @@ static void __pyx_f_3_sa_assign_matching(struct __pyx_t_3_sa_Matching *__pyx_v_m
  *     cdef int i, new_len
  */
 
-static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx_t_3_sa_Matching *__pyx_v_loc1, struct __pyx_t_3_sa_Matching *__pyx_v_loc2, CYTHON_UNUSED int __pyx_v_offset_by_one, int __pyx_v_num_subpatterns, int *__pyx_v_result_len) {
+static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx_t_3_sa_Matching *__pyx_v_loc1, struct __pyx_t_3_sa_Matching *__pyx_v_loc2, int __pyx_v_offset_by_one, int __pyx_v_num_subpatterns, int *__pyx_v_result_len) {
   int __pyx_v_i;
   int __pyx_v_new_len;
   int *__pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("append_combined_matching", 0);
+  __Pyx_RefNannySetupContext("append_combined_matching");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":178
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":178
  *     cdef int i, new_len
  * 
  *     new_len = result_len[0] + num_subpatterns             # <<<<<<<<<<<<<<
@@ -36066,7 +33955,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
  */
   __pyx_v_new_len = ((__pyx_v_result_len[0]) + __pyx_v_num_subpatterns);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":179
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":179
  * 
  *     new_len = result_len[0] + num_subpatterns
  *     arr = <int*> realloc(arr, new_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -36075,7 +33964,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
  */
   __pyx_v_arr = ((int *)realloc(__pyx_v_arr, (__pyx_v_new_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":181
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":181
  *     arr = <int*> realloc(arr, new_len*sizeof(int))
  * 
  *     for i from 0 <= i < loc1.size:             # <<<<<<<<<<<<<<
@@ -36085,7 +33974,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
   __pyx_t_1 = __pyx_v_loc1->size;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":182
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":182
  * 
  *     for i from 0 <= i < loc1.size:
  *         arr[result_len[0]+i] = loc1.arr[loc1.start+i]             # <<<<<<<<<<<<<<
@@ -36095,7 +33984,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
     (__pyx_v_arr[((__pyx_v_result_len[0]) + __pyx_v_i)]) = (__pyx_v_loc1->arr[(__pyx_v_loc1->start + __pyx_v_i)]);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":183
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":183
  *     for i from 0 <= i < loc1.size:
  *         arr[result_len[0]+i] = loc1.arr[loc1.start+i]
  *     if num_subpatterns > loc1.size:             # <<<<<<<<<<<<<<
@@ -36105,7 +33994,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
   __pyx_t_2 = (__pyx_v_num_subpatterns > __pyx_v_loc1->size);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":184
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":184
  *         arr[result_len[0]+i] = loc1.arr[loc1.start+i]
  *     if num_subpatterns > loc1.size:
  *         arr[new_len-1] = loc2.arr[loc2.end-1]             # <<<<<<<<<<<<<<
@@ -36117,7 +34006,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":185
  *     if num_subpatterns > loc1.size:
  *         arr[new_len-1] = loc2.arr[loc2.end-1]
  *     result_len[0] = new_len             # <<<<<<<<<<<<<<
@@ -36126,7 +34015,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
  */
   (__pyx_v_result_len[0]) = __pyx_v_new_len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":186
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":186
  *         arr[new_len-1] = loc2.arr[loc2.end-1]
  *     result_len[0] = new_len
  *     return arr             # <<<<<<<<<<<<<<
@@ -36142,7 +34031,7 @@ static int *__pyx_f_3_sa_append_combined_matching(int *__pyx_v_arr, struct __pyx
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":189
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":189
  * 
  * 
  * cdef int* extend_arr(int* arr, int* arr_len, int* appendix, int appendix_len):             # <<<<<<<<<<<<<<
@@ -36154,9 +34043,9 @@ static int *__pyx_f_3_sa_extend_arr(int *__pyx_v_arr, int *__pyx_v_arr_len, int
   int __pyx_v_new_len;
   int *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("extend_arr", 0);
+  __Pyx_RefNannySetupContext("extend_arr");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":192
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":192
  *     cdef int new_len
  * 
  *     new_len = arr_len[0] + appendix_len             # <<<<<<<<<<<<<<
@@ -36165,7 +34054,7 @@ static int *__pyx_f_3_sa_extend_arr(int *__pyx_v_arr, int *__pyx_v_arr_len, int
  */
   __pyx_v_new_len = ((__pyx_v_arr_len[0]) + __pyx_v_appendix_len);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":193
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":193
  * 
  *     new_len = arr_len[0] + appendix_len
  *     arr = <int*> realloc(arr, new_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -36174,7 +34063,7 @@ static int *__pyx_f_3_sa_extend_arr(int *__pyx_v_arr, int *__pyx_v_arr_len, int
  */
   __pyx_v_arr = ((int *)realloc(__pyx_v_arr, (__pyx_v_new_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":194
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":194
  *     new_len = arr_len[0] + appendix_len
  *     arr = <int*> realloc(arr, new_len*sizeof(int))
  *     memcpy(arr+arr_len[0], appendix, appendix_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -36183,7 +34072,7 @@ static int *__pyx_f_3_sa_extend_arr(int *__pyx_v_arr, int *__pyx_v_arr_len, int
  */
   memcpy((__pyx_v_arr + (__pyx_v_arr_len[0])), __pyx_v_appendix, (__pyx_v_appendix_len * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":195
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":195
  *     arr = <int*> realloc(arr, new_len*sizeof(int))
  *     memcpy(arr+arr_len[0], appendix, appendix_len*sizeof(int))
  *     arr_len[0] = new_len             # <<<<<<<<<<<<<<
@@ -36192,7 +34081,7 @@ static int *__pyx_f_3_sa_extend_arr(int *__pyx_v_arr, int *__pyx_v_arr_len, int
  */
   (__pyx_v_arr_len[0]) = __pyx_v_new_len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":196
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":196
  *     memcpy(arr+arr_len[0], appendix, appendix_len*sizeof(int))
  *     arr_len[0] = new_len
  *     return arr             # <<<<<<<<<<<<<<
@@ -36208,7 +34097,7 @@ static int *__pyx_f_3_sa_extend_arr(int *__pyx_v_arr, int *__pyx_v_arr_len, int
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":198
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":198
  *     return arr
  * 
  * cdef int median(int low, int high, int step):             # <<<<<<<<<<<<<<
@@ -36223,9 +34112,9 @@ static int __pyx_f_3_sa_median(int __pyx_v_low, int __pyx_v_high, int __pyx_v_st
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("median", 0);
+  __Pyx_RefNannySetupContext("median");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":199
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":199
  * 
  * cdef int median(int low, int high, int step):
  *     return low + (((high - low)/step)/2)*step             # <<<<<<<<<<<<<<
@@ -36254,7 +34143,7 @@ static int __pyx_f_3_sa_median(int __pyx_v_low, int __pyx_v_high, int __pyx_v_st
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":202
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":202
  * 
  * 
  * cdef void find_comparable_matchings(int low, int high, int* arr, int step, int loc, int* loc_minus, int* loc_plus):             # <<<<<<<<<<<<<<
@@ -36267,9 +34156,9 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("find_comparable_matchings", 0);
+  __Pyx_RefNannySetupContext("find_comparable_matchings");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":206
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":206
  *     # in which all matchings have the same first index as the one
  *     # starting at loc
  *     loc_plus[0] = loc + step             # <<<<<<<<<<<<<<
@@ -36278,7 +34167,7 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
  */
   (__pyx_v_loc_plus[0]) = (__pyx_v_loc + __pyx_v_step);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":207
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":207
  *     # starting at loc
  *     loc_plus[0] = loc + step
  *     while loc_plus[0] < high and arr[loc_plus[0]] == arr[loc]:             # <<<<<<<<<<<<<<
@@ -36295,7 +34184,7 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
     }
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":208
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":208
  *     loc_plus[0] = loc + step
  *     while loc_plus[0] < high and arr[loc_plus[0]] == arr[loc]:
  *         loc_plus[0] = loc_plus[0] + step             # <<<<<<<<<<<<<<
@@ -36305,7 +34194,7 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
     (__pyx_v_loc_plus[0]) = ((__pyx_v_loc_plus[0]) + __pyx_v_step);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":209
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":209
  *     while loc_plus[0] < high and arr[loc_plus[0]] == arr[loc]:
  *         loc_plus[0] = loc_plus[0] + step
  *     loc_minus[0] = loc             # <<<<<<<<<<<<<<
@@ -36314,7 +34203,7 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
  */
   (__pyx_v_loc_minus[0]) = __pyx_v_loc;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":210
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":210
  *         loc_plus[0] = loc_plus[0] + step
  *     loc_minus[0] = loc
  *     while loc_minus[0]-step >= low and arr[loc_minus[0]-step] == arr[loc]:             # <<<<<<<<<<<<<<
@@ -36331,7 +34220,7 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
     }
     if (!__pyx_t_2) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":211
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":211
  *     loc_minus[0] = loc
  *     while loc_minus[0]-step >= low and arr[loc_minus[0]-step] == arr[loc]:
  *         loc_minus[0] = loc_minus[0] - step             # <<<<<<<<<<<<<<
@@ -36344,9 +34233,16 @@ static void __pyx_f_3_sa_find_comparable_matchings(int __pyx_v_low, int __pyx_v_
   __Pyx_RefNannyFinishContext();
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":263
+ *     cdef IntList findexes1
+ * 
+ *     def __cinit__(self,             # <<<<<<<<<<<<<<
+ *             # compiled alignment object (REQUIRED)
+ *             Alignment alignment,
+ */
+
+static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_3_sa_Alignment *__pyx_v_alignment = 0;
   float __pyx_v_by_slack_factor;
   char *__pyx_v_category;
@@ -36370,12 +34266,21 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
   int __pyx_v_use_index;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_6;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alignment,&__pyx_n_s__by_slack_factor,&__pyx_n_s__category,&__pyx_n_s__max_chunks,&__pyx_n_s__max_initial_size,&__pyx_n_s__max_length,&__pyx_n_s__max_nonterminals,&__pyx_n_s__max_target_chunks,&__pyx_n_s__max_target_length,&__pyx_n_s__min_gap_size,&__pyx_n_s__precompute_file,&__pyx_n_s_70,&__pyx_n_s__precompute_rank,&__pyx_n_s_103,&__pyx_n_s_104,&__pyx_n_s_71,&__pyx_n_s__train_min_gap_size,&__pyx_n_s__tight_phrases,&__pyx_n_s__use_baeza_yates,&__pyx_n_s__use_collocations,&__pyx_n_s__use_index,0};
+  __Pyx_RefNannySetupContext("__cinit__");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alignment,&__pyx_n_s__by_slack_factor,&__pyx_n_s__category,&__pyx_n_s__max_chunks,&__pyx_n_s__max_initial_size,&__pyx_n_s__max_length,&__pyx_n_s__max_nonterminals,&__pyx_n_s__max_target_chunks,&__pyx_n_s__max_target_length,&__pyx_n_s__min_gap_size,&__pyx_n_s__precompute_file,&__pyx_n_s_70,&__pyx_n_s__precompute_rank,&__pyx_n_s_103,&__pyx_n_s_104,&__pyx_n_s_71,&__pyx_n_s__train_min_gap_size,&__pyx_n_s__tight_phrases,&__pyx_n_s__use_baeza_yates,&__pyx_n_s__use_collocations,&__pyx_n_s__use_index,0};
     PyObject* values[21] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":271
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":271
  *             char* category="[X]",
  *             # maximum number of contiguous chunks of terminal symbols in RHS of a rule. If None, defaults to max_nonterminals+1
  *             max_chunks=None,             # <<<<<<<<<<<<<<
@@ -36384,7 +34289,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
  */
     values[3] = ((PyObject *)Py_None);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":279
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":279
  *             unsigned max_nonterminals=2,
  *             # maximum number of contiguous chunks of terminal symbols in target-side RHS of a rule. If None, defaults to max_nonterminals+1
  *             max_target_chunks=None,             # <<<<<<<<<<<<<<
@@ -36393,7 +34298,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
  */
     values[7] = ((PyObject *)Py_None);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":281
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":281
  *             max_target_chunks=None,
  *             # maximum number of target side symbols (both T and NT) allowed in a rule. If None, defaults to max_initial_size
  *             max_target_length=None,             # <<<<<<<<<<<<<<
@@ -36402,7 +34307,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
  */
     values[8] = ((PyObject *)Py_None);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":285
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":285
  *             unsigned min_gap_size=2,
  *             # filename of file containing precomputed collocations
  *             precompute_file=None,             # <<<<<<<<<<<<<<
@@ -36412,8 +34317,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
     values[10] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
         case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
         case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
@@ -36439,9 +34343,10 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alignment)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alignment);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -36545,7 +34450,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -36576,10 +34481,10 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
     }
     __pyx_v_alignment = ((struct __pyx_obj_3_sa_Alignment *)values[0]);
     if (values[1]) {
-      __pyx_v_by_slack_factor = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_by_slack_factor == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_by_slack_factor = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_by_slack_factor == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":267
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":267
  *             Alignment alignment,
  *             # parameter for double-binary search; doesn't seem to matter much
  *             float by_slack_factor=1.0,             # <<<<<<<<<<<<<<
@@ -36631,7 +34536,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
       __pyx_v_require_aligned_terminal = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_require_aligned_terminal == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":291
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":291
  *             unsigned precompute_rank=100,
  *             # require extracted rules to have at least one aligned word
  *             bint require_aligned_terminal=True,             # <<<<<<<<<<<<<<
@@ -36644,7 +34549,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
       __pyx_v_require_aligned_chunks = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_require_aligned_chunks == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":293
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":293
  *             bint require_aligned_terminal=True,
  *             # require each contiguous chunk of extracted rules to have at least one aligned word
  *             bint require_aligned_chunks=False,             # <<<<<<<<<<<<<<
@@ -36667,7 +34572,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
       __pyx_v_tight_phrases = __Pyx_PyObject_IsTrue(values[17]); if (unlikely((__pyx_v_tight_phrases == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":299
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":299
  *             unsigned train_min_gap_size=2,
  *             # True if phrases should be tight, False otherwise (False == slower but better results)
  *             bint tight_phrases=False,             # <<<<<<<<<<<<<<
@@ -36680,7 +34585,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
       __pyx_v_use_baeza_yates = __Pyx_PyObject_IsTrue(values[18]); if (unlikely((__pyx_v_use_baeza_yates == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":301
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":301
  *             bint tight_phrases=False,
  *             # True to require use of double-binary alg, false otherwise
  *             bint use_baeza_yates=True,             # <<<<<<<<<<<<<<
@@ -36693,7 +34598,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
       __pyx_v_use_collocations = __Pyx_PyObject_IsTrue(values[19]); if (unlikely((__pyx_v_use_collocations == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":303
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":303
  *             bint use_baeza_yates=True,
  *             # True to enable used of precomputed collocations
  *             bint use_collocations=True,             # <<<<<<<<<<<<<<
@@ -36706,7 +34611,7 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
       __pyx_v_use_index = __Pyx_PyObject_IsTrue(values[20]); if (unlikely((__pyx_v_use_index == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":305
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":305
  *             bint use_collocations=True,
  *             # True to enable use of precomputed inverted indices
  *             bint use_index=True):             # <<<<<<<<<<<<<<
@@ -36725,38 +34630,8 @@ static int __pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(PyObject *__pyx_v_
   return -1;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_alignment), __pyx_ptype_3_sa_Alignment, 1, "alignment", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v_alignment, __pyx_v_by_slack_factor, __pyx_v_category, __pyx_v_max_chunks, __pyx_v_max_initial_size, __pyx_v_max_length, __pyx_v_max_nonterminals, __pyx_v_max_target_chunks, __pyx_v_max_target_length, __pyx_v_min_gap_size, __pyx_v_precompute_file, __pyx_v_precompute_secondary_rank, __pyx_v_precompute_rank, __pyx_v_require_aligned_terminal, __pyx_v_require_aligned_chunks, __pyx_v_train_max_initial_size, __pyx_v_train_min_gap_size, __pyx_v_tight_phrases, __pyx_v_use_baeza_yates, __pyx_v_use_collocations, __pyx_v_use_index);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":263
- *     cdef IntList findexes1
- * 
- *     def __cinit__(self,             # <<<<<<<<<<<<<<
- *             # compiled alignment object (REQUIRED)
- *             Alignment alignment,
- */
-
-static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_Alignment *__pyx_v_alignment, float __pyx_v_by_slack_factor, char *__pyx_v_category, PyObject *__pyx_v_max_chunks, unsigned int __pyx_v_max_initial_size, unsigned int __pyx_v_max_length, unsigned int __pyx_v_max_nonterminals, PyObject *__pyx_v_max_target_chunks, PyObject *__pyx_v_max_target_length, unsigned int __pyx_v_min_gap_size, PyObject *__pyx_v_precompute_file, unsigned int __pyx_v_precompute_secondary_rank, unsigned int __pyx_v_precompute_rank, int __pyx_v_require_aligned_terminal, int __pyx_v_require_aligned_chunks, unsigned int __pyx_v_train_max_initial_size, unsigned int __pyx_v_train_min_gap_size, int __pyx_v_tight_phrases, int __pyx_v_use_baeza_yates, int __pyx_v_use_collocations, int __pyx_v_use_index) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":311
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":311
  *         respectively.    This is because Chiang's model does not require
  *         them to be the same, therefore we don't either.'''
  *         self.rules = TrieTable(True) # cache             # <<<<<<<<<<<<<<
@@ -36766,7 +34641,7 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
@@ -36774,12 +34649,12 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->rules);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->rules));
-  __pyx_v_self->rules = ((struct __pyx_obj_3_sa_TrieTable *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->rules);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->rules));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->rules = ((struct __pyx_obj_3_sa_TrieTable *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":312
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":312
  *         them to be the same, therefore we don't either.'''
  *         self.rules = TrieTable(True) # cache
  *         self.rules.root = ExtendedTrieNode(phrase_location=PhraseLocation())             # <<<<<<<<<<<<<<
@@ -36792,16 +34667,16 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__phrase_location), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->rules->root);
-  __Pyx_DECREF(__pyx_v_self->rules->root);
-  __pyx_v_self->rules->root = __pyx_t_2;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->rules->root);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->rules->root);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->rules->root = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":313
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":313
  *         self.rules = TrieTable(True) # cache
  *         self.rules.root = ExtendedTrieNode(phrase_location=PhraseLocation())
  *         if alignment is None:             # <<<<<<<<<<<<<<
@@ -36811,7 +34686,7 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_3 = (((PyObject *)__pyx_v_alignment) == Py_None);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":314
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":314
  *         self.rules.root = ExtendedTrieNode(phrase_location=PhraseLocation())
  *         if alignment is None:
  *             raise Exception("Must specify an alignment object")             # <<<<<<<<<<<<<<
@@ -36823,11 +34698,11 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     {__pyx_filename = __pyx_f[8]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":315
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":315
  *         if alignment is None:
  *             raise Exception("Must specify an alignment object")
  *         self.alignment = alignment             # <<<<<<<<<<<<<<
@@ -36836,65 +34711,65 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_alignment));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_alignment));
-  __Pyx_GOTREF(__pyx_v_self->alignment);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->alignment));
-  __pyx_v_self->alignment = __pyx_v_alignment;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->alignment);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->alignment));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->alignment = __pyx_v_alignment;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":319
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":319
  *         # grammar parameters and settings
  *         # NOTE: setting max_nonterminals > 2 is not currently supported in Hiero
  *         self.max_length = max_length             # <<<<<<<<<<<<<<
  *         self.max_nonterminals = max_nonterminals
  *         self.max_initial_size = max_initial_size
  */
-  __pyx_v_self->max_length = __pyx_v_max_length;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_length = __pyx_v_max_length;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":320
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":320
  *         # NOTE: setting max_nonterminals > 2 is not currently supported in Hiero
  *         self.max_length = max_length
  *         self.max_nonterminals = max_nonterminals             # <<<<<<<<<<<<<<
  *         self.max_initial_size = max_initial_size
  *         self.train_max_initial_size = train_max_initial_size
  */
-  __pyx_v_self->max_nonterminals = __pyx_v_max_nonterminals;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_nonterminals = __pyx_v_max_nonterminals;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":321
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":321
  *         self.max_length = max_length
  *         self.max_nonterminals = max_nonterminals
  *         self.max_initial_size = max_initial_size             # <<<<<<<<<<<<<<
  *         self.train_max_initial_size = train_max_initial_size
  *         self.min_gap_size = min_gap_size
  */
-  __pyx_v_self->max_initial_size = __pyx_v_max_initial_size;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_initial_size = __pyx_v_max_initial_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":322
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":322
  *         self.max_nonterminals = max_nonterminals
  *         self.max_initial_size = max_initial_size
  *         self.train_max_initial_size = train_max_initial_size             # <<<<<<<<<<<<<<
  *         self.min_gap_size = min_gap_size
  *         self.train_min_gap_size = train_min_gap_size
  */
-  __pyx_v_self->train_max_initial_size = __pyx_v_train_max_initial_size;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->train_max_initial_size = __pyx_v_train_max_initial_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":323
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":323
  *         self.max_initial_size = max_initial_size
  *         self.train_max_initial_size = train_max_initial_size
  *         self.min_gap_size = min_gap_size             # <<<<<<<<<<<<<<
  *         self.train_min_gap_size = train_min_gap_size
  *         self.category = sym_fromstring(category, False)
  */
-  __pyx_v_self->min_gap_size = __pyx_v_min_gap_size;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->min_gap_size = __pyx_v_min_gap_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":324
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":324
  *         self.train_max_initial_size = train_max_initial_size
  *         self.min_gap_size = min_gap_size
  *         self.train_min_gap_size = train_min_gap_size             # <<<<<<<<<<<<<<
  *         self.category = sym_fromstring(category, False)
  * 
  */
-  __pyx_v_self->train_min_gap_size = __pyx_v_train_min_gap_size;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->train_min_gap_size = __pyx_v_train_min_gap_size;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":325
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":325
  *         self.min_gap_size = min_gap_size
  *         self.train_min_gap_size = train_min_gap_size
  *         self.category = sym_fromstring(category, False)             # <<<<<<<<<<<<<<
@@ -36908,7 +34783,7 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
@@ -36921,9 +34796,9 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
   __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_4); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_v_self->category = __pyx_t_6;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->category = __pyx_t_6;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":327
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":327
  *         self.category = sym_fromstring(category, False)
  * 
  *         if max_chunks is None:             # <<<<<<<<<<<<<<
@@ -36933,19 +34808,19 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_3 = (__pyx_v_max_chunks == Py_None);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":328
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":328
  * 
  *         if max_chunks is None:
  *             self.max_chunks = self.max_nonterminals + 1             # <<<<<<<<<<<<<<
  *         else:
  *             self.max_chunks = max_chunks
  */
-    __pyx_v_self->max_chunks = (__pyx_v_self->max_nonterminals + 1);
-    goto __pyx_L4;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_chunks = (((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_nonterminals + 1);
+    goto __pyx_L7;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":330
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":330
  *             self.max_chunks = self.max_nonterminals + 1
  *         else:
  *             self.max_chunks = max_chunks             # <<<<<<<<<<<<<<
@@ -36953,11 +34828,11 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  *         if max_target_chunks is None:
  */
     __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_max_chunks); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_self->max_chunks = __pyx_t_6;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_chunks = __pyx_t_6;
   }
-  __pyx_L4:;
+  __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":332
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":332
  *             self.max_chunks = max_chunks
  * 
  *         if max_target_chunks is None:             # <<<<<<<<<<<<<<
@@ -36967,19 +34842,19 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_3 = (__pyx_v_max_target_chunks == Py_None);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":333
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":333
  * 
  *         if max_target_chunks is None:
  *             self.max_target_chunks = self.max_nonterminals + 1             # <<<<<<<<<<<<<<
  *         else:
  *             self.max_target_chunks = max_target_chunks
  */
-    __pyx_v_self->max_target_chunks = (__pyx_v_self->max_nonterminals + 1);
-    goto __pyx_L5;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_target_chunks = (((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_nonterminals + 1);
+    goto __pyx_L8;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":335
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":335
  *             self.max_target_chunks = self.max_nonterminals + 1
  *         else:
  *             self.max_target_chunks = max_target_chunks             # <<<<<<<<<<<<<<
@@ -36987,11 +34862,11 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  *         if max_target_length is None:
  */
     __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_max_target_chunks); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_self->max_target_chunks = __pyx_t_6;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_target_chunks = __pyx_t_6;
   }
-  __pyx_L5:;
+  __pyx_L8:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":337
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":337
  *             self.max_target_chunks = max_target_chunks
  * 
  *         if max_target_length is None:             # <<<<<<<<<<<<<<
@@ -37001,19 +34876,19 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_3 = (__pyx_v_max_target_length == Py_None);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":338
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":338
  * 
  *         if max_target_length is None:
  *             self.max_target_length = max_initial_size             # <<<<<<<<<<<<<<
  *         else:
  *             self.max_target_length = max_target_length
  */
-    __pyx_v_self->max_target_length = __pyx_v_max_initial_size;
-    goto __pyx_L6;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_target_length = __pyx_v_max_initial_size;
+    goto __pyx_L9;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":340
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":340
  *             self.max_target_length = max_initial_size
  *         else:
  *             self.max_target_length = max_target_length             # <<<<<<<<<<<<<<
@@ -37021,11 +34896,11 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  *         # algorithmic parameters and settings
  */
     __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_max_target_length); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_self->max_target_length = __pyx_t_6;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_target_length = __pyx_t_6;
   }
-  __pyx_L6:;
+  __pyx_L9:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":343
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":343
  * 
  *         # algorithmic parameters and settings
  *         self.precomputed_collocations = {}             # <<<<<<<<<<<<<<
@@ -37035,12 +34910,12 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-  __Pyx_GOTREF(__pyx_v_self->precomputed_collocations);
-  __Pyx_DECREF(__pyx_v_self->precomputed_collocations);
-  __pyx_v_self->precomputed_collocations = ((PyObject *)__pyx_t_4);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_collocations);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_collocations);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_collocations = ((PyObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":344
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":344
  *         # algorithmic parameters and settings
  *         self.precomputed_collocations = {}
  *         self.precomputed_index = {}             # <<<<<<<<<<<<<<
@@ -37050,30 +34925,30 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-  __Pyx_GOTREF(__pyx_v_self->precomputed_index);
-  __Pyx_DECREF(__pyx_v_self->precomputed_index);
-  __pyx_v_self->precomputed_index = ((PyObject *)__pyx_t_4);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_index);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_index);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_index = ((PyObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":345
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":345
  *         self.precomputed_collocations = {}
  *         self.precomputed_index = {}
  *         self.use_index = use_index             # <<<<<<<<<<<<<<
  *         self.use_collocations = use_collocations
  *         self.max_rank = {}
  */
-  __pyx_v_self->use_index = __pyx_v_use_index;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->use_index = __pyx_v_use_index;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":346
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":346
  *         self.precomputed_index = {}
  *         self.use_index = use_index
  *         self.use_collocations = use_collocations             # <<<<<<<<<<<<<<
  *         self.max_rank = {}
  *         self.precompute_file = precompute_file
  */
-  __pyx_v_self->use_collocations = __pyx_v_use_collocations;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->use_collocations = __pyx_v_use_collocations;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":347
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":347
  *         self.use_index = use_index
  *         self.use_collocations = use_collocations
  *         self.max_rank = {}             # <<<<<<<<<<<<<<
@@ -37083,12 +34958,12 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-  __Pyx_GOTREF(__pyx_v_self->max_rank);
-  __Pyx_DECREF(__pyx_v_self->max_rank);
-  __pyx_v_self->max_rank = ((PyObject *)__pyx_t_4);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_rank);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_rank);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_rank = ((PyObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":348
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":348
  *         self.use_collocations = use_collocations
  *         self.max_rank = {}
  *         self.precompute_file = precompute_file             # <<<<<<<<<<<<<<
@@ -37097,47 +34972,47 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  */
   __Pyx_INCREF(__pyx_v_precompute_file);
   __Pyx_GIVEREF(__pyx_v_precompute_file);
-  __Pyx_GOTREF(__pyx_v_self->precompute_file);
-  __Pyx_DECREF(__pyx_v_self->precompute_file);
-  __pyx_v_self->precompute_file = __pyx_v_precompute_file;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file = __pyx_v_precompute_file;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":349
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":349
  *         self.max_rank = {}
  *         self.precompute_file = precompute_file
  *         self.precompute_rank = precompute_rank             # <<<<<<<<<<<<<<
  *         self.precompute_secondary_rank = precompute_secondary_rank
  *         self.use_baeza_yates = use_baeza_yates
  */
-  __pyx_v_self->precompute_rank = __pyx_v_precompute_rank;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_rank = __pyx_v_precompute_rank;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":350
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":350
  *         self.precompute_file = precompute_file
  *         self.precompute_rank = precompute_rank
  *         self.precompute_secondary_rank = precompute_secondary_rank             # <<<<<<<<<<<<<<
  *         self.use_baeza_yates = use_baeza_yates
  *         self.by_slack_factor = by_slack_factor
  */
-  __pyx_v_self->precompute_secondary_rank = __pyx_v_precompute_secondary_rank;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_secondary_rank = __pyx_v_precompute_secondary_rank;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":351
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":351
  *         self.precompute_rank = precompute_rank
  *         self.precompute_secondary_rank = precompute_secondary_rank
  *         self.use_baeza_yates = use_baeza_yates             # <<<<<<<<<<<<<<
  *         self.by_slack_factor = by_slack_factor
  *         if tight_phrases:
  */
-  __pyx_v_self->use_baeza_yates = __pyx_v_use_baeza_yates;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->use_baeza_yates = __pyx_v_use_baeza_yates;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":352
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":352
  *         self.precompute_secondary_rank = precompute_secondary_rank
  *         self.use_baeza_yates = use_baeza_yates
  *         self.by_slack_factor = by_slack_factor             # <<<<<<<<<<<<<<
  *         if tight_phrases:
  *             self.tight_phrases = 1
  */
-  __pyx_v_self->by_slack_factor = __pyx_v_by_slack_factor;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->by_slack_factor = __pyx_v_by_slack_factor;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":353
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":353
  *         self.use_baeza_yates = use_baeza_yates
  *         self.by_slack_factor = by_slack_factor
  *         if tight_phrases:             # <<<<<<<<<<<<<<
@@ -37146,30 +35021,30 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  */
   if (__pyx_v_tight_phrases) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":354
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":354
  *         self.by_slack_factor = by_slack_factor
  *         if tight_phrases:
  *             self.tight_phrases = 1             # <<<<<<<<<<<<<<
  *         else:
  *             self.tight_phrases = 0
  */
-    __pyx_v_self->tight_phrases = 1;
-    goto __pyx_L7;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->tight_phrases = 1;
+    goto __pyx_L10;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":356
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":356
  *             self.tight_phrases = 1
  *         else:
  *             self.tight_phrases = 0             # <<<<<<<<<<<<<<
  * 
  *         if require_aligned_chunks:
  */
-    __pyx_v_self->tight_phrases = 0;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->tight_phrases = 0;
   }
-  __pyx_L7:;
+  __pyx_L10:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":358
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":358
  *             self.tight_phrases = 0
  * 
  *         if require_aligned_chunks:             # <<<<<<<<<<<<<<
@@ -37178,27 +35053,27 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  */
   if (__pyx_v_require_aligned_chunks) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":360
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":360
  *         if require_aligned_chunks:
  *             # one condition is a stronger version of the other.
  *             self.require_aligned_chunks = 1             # <<<<<<<<<<<<<<
  *             self.require_aligned_terminal = 1
  *         elif require_aligned_terminal:
  */
-    __pyx_v_self->require_aligned_chunks = 1;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->require_aligned_chunks = 1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":361
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":361
  *             # one condition is a stronger version of the other.
  *             self.require_aligned_chunks = 1
  *             self.require_aligned_terminal = 1             # <<<<<<<<<<<<<<
  *         elif require_aligned_terminal:
  *             self.require_aligned_chunks = 0
  */
-    __pyx_v_self->require_aligned_terminal = 1;
-    goto __pyx_L8;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->require_aligned_terminal = 1;
+    goto __pyx_L11;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":362
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":362
  *             self.require_aligned_chunks = 1
  *             self.require_aligned_terminal = 1
  *         elif require_aligned_terminal:             # <<<<<<<<<<<<<<
@@ -37207,48 +35082,48 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  */
   if (__pyx_v_require_aligned_terminal) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":363
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":363
  *             self.require_aligned_terminal = 1
  *         elif require_aligned_terminal:
  *             self.require_aligned_chunks = 0             # <<<<<<<<<<<<<<
  *             self.require_aligned_terminal = 1
  *         else:
  */
-    __pyx_v_self->require_aligned_chunks = 0;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->require_aligned_chunks = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":364
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":364
  *         elif require_aligned_terminal:
  *             self.require_aligned_chunks = 0
  *             self.require_aligned_terminal = 1             # <<<<<<<<<<<<<<
  *         else:
  *             self.require_aligned_chunks = 0
  */
-    __pyx_v_self->require_aligned_terminal = 1;
-    goto __pyx_L8;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->require_aligned_terminal = 1;
+    goto __pyx_L11;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":366
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":366
  *             self.require_aligned_terminal = 1
  *         else:
  *             self.require_aligned_chunks = 0             # <<<<<<<<<<<<<<
  *             self.require_aligned_terminal = 0
  * 
  */
-    __pyx_v_self->require_aligned_chunks = 0;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->require_aligned_chunks = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":367
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":367
  *         else:
  *             self.require_aligned_chunks = 0
  *             self.require_aligned_terminal = 0             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_v_self->require_aligned_terminal = 0;
+    ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->require_aligned_terminal = 0;
   }
-  __pyx_L8:;
+  __pyx_L11:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":371
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":371
  * 
  *         # diagnostics
  *         self.prev_norm_prefix = ()             # <<<<<<<<<<<<<<
@@ -37257,11 +35132,11 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
  */
   __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
   __Pyx_GIVEREF(((PyObject *)__pyx_empty_tuple));
-  __Pyx_GOTREF(__pyx_v_self->prev_norm_prefix);
-  __Pyx_DECREF(__pyx_v_self->prev_norm_prefix);
-  __pyx_v_self->prev_norm_prefix = ((PyObject *)__pyx_empty_tuple);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->prev_norm_prefix);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->prev_norm_prefix);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->prev_norm_prefix = ((PyObject *)__pyx_empty_tuple);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":373
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":373
  *         self.prev_norm_prefix = ()
  * 
  *         self.findexes = IntList(initial_len=10)             # <<<<<<<<<<<<<<
@@ -37271,16 +35146,16 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__initial_len), __pyx_int_10) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_GIVEREF(__pyx_t_5);
-  __Pyx_GOTREF(__pyx_v_self->findexes);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->findexes));
-  __pyx_v_self->findexes = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_5);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->findexes);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->findexes));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->findexes = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":374
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":374
  * 
  *         self.findexes = IntList(initial_len=10)
  *         self.findexes1 = IntList(initial_len=10)             # <<<<<<<<<<<<<<
@@ -37290,13 +35165,13 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
   if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__initial_len), __pyx_int_10) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
   __Pyx_GIVEREF(__pyx_t_4);
-  __Pyx_GOTREF(__pyx_v_self->findexes1);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->findexes1));
-  __pyx_v_self->findexes1 = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_4);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->findexes1);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->findexes1));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->findexes1 = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_4);
   __pyx_t_4 = 0;
 
   __pyx_r = 0;
@@ -37313,24 +35188,35 @@ static int __pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(struct __pyx_obj_3_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_3configure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_3_sa_23HieroCachingRuleFactory_2configure[] = "This gives the RuleFactory access to the Context object.\n        Here we also use it to precompute the most expensive intersections\n        in the corpus quickly.";
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_3configure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":376
+ *         self.findexes1 = IntList(initial_len=10)
+ * 
+ *     def configure(self, SuffixArray fsarray, DataArray edarray,             # <<<<<<<<<<<<<<
+ *             Sampler sampler, Scorer scorer):
+ *         '''This gives the RuleFactory access to the Context object.
+ */
+
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_1configure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_3_sa_23HieroCachingRuleFactory_1configure[] = "This gives the RuleFactory access to the Context object.\n        Here we also use it to precompute the most expensive intersections\n        in the corpus quickly.";
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_1configure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_3_sa_SuffixArray *__pyx_v_fsarray = 0;
   struct __pyx_obj_3_sa_DataArray *__pyx_v_edarray = 0;
   struct __pyx_obj_3_sa_Sampler *__pyx_v_sampler = 0;
   struct __pyx_obj_3_sa_Scorer *__pyx_v_scorer = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("configure (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fsarray,&__pyx_n_s__edarray,&__pyx_n_s__sampler,&__pyx_n_s__scorer,0};
+  __Pyx_RefNannySetupContext("configure");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fsarray,&__pyx_n_s__edarray,&__pyx_n_s__sampler,&__pyx_n_s__scorer,0};
     PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -37339,28 +35225,32 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_3configure(PyObject *__
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fsarray)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fsarray);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__edarray)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__edarray);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("configure", 1, 4, 4, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sampler)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sampler);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("configure", 1, 4, 4, 2); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scorer)) != 0)) kw_args--;
+        values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scorer);
+        if (likely(values[3])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("configure", 1, 4, 4, 3); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "configure") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "configure") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -37387,34 +35277,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_3configure(PyObject *__
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_edarray), __pyx_ptype_3_sa_DataArray, 1, "edarray", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sampler), __pyx_ptype_3_sa_Sampler, 1, "sampler", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scorer), __pyx_ptype_3_sa_Scorer, 1, "scorer", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v_fsarray, __pyx_v_edarray, __pyx_v_sampler, __pyx_v_scorer);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":376
- *         self.findexes1 = IntList(initial_len=10)
- * 
- *     def configure(self, SuffixArray fsarray, DataArray edarray,             # <<<<<<<<<<<<<<
- *             Sampler sampler, Scorer scorer):
- *         '''This gives the RuleFactory access to the Context object.
- */
-
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_SuffixArray *__pyx_v_fsarray, struct __pyx_obj_3_sa_DataArray *__pyx_v_edarray, struct __pyx_obj_3_sa_Sampler *__pyx_v_sampler, struct __pyx_obj_3_sa_Scorer *__pyx_v_scorer) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("configure", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":381
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":381
  *         Here we also use it to precompute the most expensive intersections
  *         in the corpus quickly.'''
  *         self.fsa = fsarray             # <<<<<<<<<<<<<<
@@ -37423,11 +35287,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_fsarray));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_fsarray));
-  __Pyx_GOTREF(__pyx_v_self->fsa);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->fsa));
-  __pyx_v_self->fsa = __pyx_v_fsarray;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fsa);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fsa));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fsa = __pyx_v_fsarray;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":382
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":382
  *         in the corpus quickly.'''
  *         self.fsa = fsarray
  *         self.fda = fsarray.darray             # <<<<<<<<<<<<<<
@@ -37436,11 +35300,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_fsarray->darray));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_fsarray->darray));
-  __Pyx_GOTREF(__pyx_v_self->fda);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->fda));
-  __pyx_v_self->fda = __pyx_v_fsarray->darray;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fda);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fda));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fda = __pyx_v_fsarray->darray;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":383
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":383
  *         self.fsa = fsarray
  *         self.fda = fsarray.darray
  *         self.eda = edarray             # <<<<<<<<<<<<<<
@@ -37449,63 +35313,63 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_edarray));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_edarray));
-  __Pyx_GOTREF(__pyx_v_self->eda);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->eda));
-  __pyx_v_self->eda = __pyx_v_edarray;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eda);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eda));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eda = __pyx_v_edarray;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":384
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":384
  *         self.fda = fsarray.darray
  *         self.eda = edarray
  *         self.fid2symid = self.set_idmap(self.fda)             # <<<<<<<<<<<<<<
  *         self.eid2symid = self.set_idmap(self.eda)
  *         self.precompute()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_v_self->fda);
+  __pyx_t_1 = ((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fda);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->set_idmap(__pyx_v_self, ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->__pyx_vtab)->set_idmap(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_3_sa_IntList))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->fid2symid);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->fid2symid));
-  __pyx_v_self->fid2symid = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fid2symid);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fid2symid));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fid2symid = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":385
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":385
  *         self.eda = edarray
  *         self.fid2symid = self.set_idmap(self.fda)
  *         self.eid2symid = self.set_idmap(self.eda)             # <<<<<<<<<<<<<<
  *         self.precompute()
  *         self.sampler = sampler
  */
-  __pyx_t_2 = ((PyObject *)__pyx_v_self->eda);
+  __pyx_t_2 = ((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eda);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->set_idmap(__pyx_v_self, ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->__pyx_vtab)->set_idmap(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), ((struct __pyx_obj_3_sa_DataArray *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_3_sa_IntList))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->eid2symid);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->eid2symid));
-  __pyx_v_self->eid2symid = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eid2symid);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eid2symid));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->eid2symid = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":386
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":386
  *         self.fid2symid = self.set_idmap(self.fda)
  *         self.eid2symid = self.set_idmap(self.eda)
  *         self.precompute()             # <<<<<<<<<<<<<<
  *         self.sampler = sampler
  *         self.scorer = scorer
  */
-  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__precompute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__precompute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":387
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":387
  *         self.eid2symid = self.set_idmap(self.eda)
  *         self.precompute()
  *         self.sampler = sampler             # <<<<<<<<<<<<<<
@@ -37514,11 +35378,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_sampler));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_sampler));
-  __Pyx_GOTREF(__pyx_v_self->sampler);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->sampler));
-  __pyx_v_self->sampler = __pyx_v_sampler;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->sampler);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->sampler));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->sampler = __pyx_v_sampler;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":388
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":388
  *         self.precompute()
  *         self.sampler = sampler
  *         self.scorer = scorer             # <<<<<<<<<<<<<<
@@ -37527,9 +35391,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_scorer));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_scorer));
-  __Pyx_GOTREF(__pyx_v_self->scorer);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->scorer));
-  __pyx_v_self->scorer = __pyx_v_scorer;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->scorer);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->scorer));
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->scorer = __pyx_v_scorer;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -37544,7 +35408,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":390
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":390
  *         self.scorer = scorer
  * 
  *     cdef set_idmap(self, DataArray darray):             # <<<<<<<<<<<<<<
@@ -37552,7 +35416,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2configure(struct __pyx
  *         cdef IntList idmap
  */
 
-static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_DataArray *__pyx_v_darray) {
+static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_DataArray *__pyx_v_darray) {
   int __pyx_v_word_id;
   int __pyx_v_new_word_id;
   int __pyx_v_N;
@@ -37569,9 +35433,9 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("set_idmap", 0);
+  __Pyx_RefNannySetupContext("set_idmap");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":394
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":394
  *         cdef IntList idmap
  * 
  *         N = len(darray.id2word)             # <<<<<<<<<<<<<<
@@ -37584,7 +35448,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_N = __pyx_t_2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":395
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":395
  * 
  *         N = len(darray.id2word)
  *         idmap = IntList(initial_len=N)             # <<<<<<<<<<<<<<
@@ -37597,13 +35461,13 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_v_idmap = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":396
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":396
  *         N = len(darray.id2word)
  *         idmap = IntList(initial_len=N)
  *         for word_id from 0 <= word_id < N:             # <<<<<<<<<<<<<<
@@ -37613,7 +35477,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
   __pyx_t_4 = __pyx_v_N;
   for (__pyx_v_word_id = 0; __pyx_v_word_id < __pyx_t_4; __pyx_v_word_id++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":397
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":397
  *         idmap = IntList(initial_len=N)
  *         for word_id from 0 <= word_id < N:
  *             new_word_id = sym_fromstring(darray.id2word[word_id], True)             # <<<<<<<<<<<<<<
@@ -37627,7 +35491,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
     __pyx_t_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
@@ -37642,7 +35506,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_new_word_id = __pyx_t_7;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":398
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":398
  *         for word_id from 0 <= word_id < N:
  *             new_word_id = sym_fromstring(darray.id2word[word_id], True)
  *             idmap.arr[word_id] = new_word_id             # <<<<<<<<<<<<<<
@@ -37652,7 +35516,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
     (__pyx_v_idmap->arr[__pyx_v_word_id]) = __pyx_v_new_word_id;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":399
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":399
  *             new_word_id = sym_fromstring(darray.id2word[word_id], True)
  *             idmap.arr[word_id] = new_word_id
  *         return idmap             # <<<<<<<<<<<<<<
@@ -37680,18 +35544,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_set_idmap(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5pattern2phrase(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5pattern2phrase(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("pattern2phrase (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), ((PyObject *)__pyx_v_pattern));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":402
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":402
  * 
  * 
  *     def pattern2phrase(self, pattern):             # <<<<<<<<<<<<<<
@@ -37699,7 +35552,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5pattern2phrase(PyObjec
  *         result = ()
  */
 
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_pattern) {
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2pattern2phrase(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_2pattern2phrase(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
   PyObject *__pyx_v_result = NULL;
   PyObject *__pyx_v_arity = NULL;
   PyObject *__pyx_v_word_id = NULL;
@@ -37718,9 +35572,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("pattern2phrase", 0);
+  __Pyx_RefNannySetupContext("pattern2phrase");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":404
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":404
  *     def pattern2phrase(self, pattern):
  *         # pattern is a tuple, which we must convert to a hiero Phrase
  *         result = ()             # <<<<<<<<<<<<<<
@@ -37730,7 +35584,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
   __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
   __pyx_v_result = __pyx_empty_tuple;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":405
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":405
  *         # pattern is a tuple, which we must convert to a hiero Phrase
  *         result = ()
  *         arity = 0             # <<<<<<<<<<<<<<
@@ -37740,7 +35594,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_arity = __pyx_int_0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":406
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":406
  *         result = ()
  *         arity = 0
  *         for word_id in pattern:             # <<<<<<<<<<<<<<
@@ -37756,20 +35610,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -37785,19 +35631,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
     __pyx_v_word_id = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":407
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":407
  *         arity = 0
  *         for word_id in pattern:
  *             if word_id == -1:             # <<<<<<<<<<<<<<
  *                 arity = arity + 1
  *                 new_id = sym_setindex(self.category, arity)
  */
-    __pyx_t_4 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":408
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":408
  *         for word_id in pattern:
  *             if word_id == -1:
  *                 arity = arity + 1             # <<<<<<<<<<<<<<
@@ -37810,7 +35657,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
       __pyx_v_arity = __pyx_t_4;
       __pyx_t_4 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":409
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":409
  *             if word_id == -1:
  *                 arity = arity + 1
  *                 new_id = sym_setindex(self.category, arity)             # <<<<<<<<<<<<<<
@@ -37818,16 +35665,16 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)
  */
       __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_arity); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_t_6)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->category, __pyx_t_6)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_XDECREF(__pyx_v_new_id);
       __pyx_v_new_id = __pyx_t_4;
       __pyx_t_4 = 0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":411
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":411
  *                 new_id = sym_setindex(self.category, arity)
  *             else:
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)             # <<<<<<<<<<<<<<
@@ -37836,12 +35683,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
  */
       __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__sym_fromstring); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = PyObject_GetItem(__pyx_v_self->fda->id2word, __pyx_v_word_id); if (!__pyx_t_7) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetItem(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fda->id2word, __pyx_v_word_id); if (!__pyx_t_7) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_9));
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_7);
       PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
@@ -37856,9 +35703,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
       __pyx_v_new_id = __pyx_t_8;
       __pyx_t_8 = 0;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":412
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":412
  *             else:
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)
  *             result = result + (new_id,)             # <<<<<<<<<<<<<<
@@ -37866,7 +35713,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
  * 
  */
     __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_8));
     __Pyx_INCREF(__pyx_v_new_id);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_new_id);
     __Pyx_GIVEREF(__pyx_v_new_id);
@@ -37879,7 +35726,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":413
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":413
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)
  *             result = result + (new_id,)
  *         return Phrase(result)             # <<<<<<<<<<<<<<
@@ -37888,7 +35735,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_result));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_result));
@@ -37919,18 +35766,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4pattern2phrase(struct
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_7pattern2phrase_plus(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_7pattern2phrase_plus(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("pattern2phrase_plus (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), ((PyObject *)__pyx_v_pattern));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":415
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":415
  *         return Phrase(result)
  * 
  *     def pattern2phrase_plus(self, pattern):             # <<<<<<<<<<<<<<
@@ -37938,7 +35774,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_7pattern2phrase_plus(Py
  *         # suffixed/prefixed with the NT category.
  */
 
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_pattern) {
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_3pattern2phrase_plus(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_3pattern2phrase_plus(PyObject *__pyx_v_self, PyObject *__pyx_v_pattern) {
   PyObject *__pyx_v_patterns = NULL;
   PyObject *__pyx_v_result = NULL;
   PyObject *__pyx_v_arity = NULL;
@@ -37959,9 +35796,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("pattern2phrase_plus", 0);
+  __Pyx_RefNannySetupContext("pattern2phrase_plus");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":418
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":418
  *         # returns a list containing both the pattern, and pattern
  *         # suffixed/prefixed with the NT category.
  *         patterns = []             # <<<<<<<<<<<<<<
@@ -37969,11 +35806,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
  *         arity = 0
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_patterns = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":419
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":419
  *         # suffixed/prefixed with the NT category.
  *         patterns = []
  *         result = ()             # <<<<<<<<<<<<<<
@@ -37983,7 +35820,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
   __pyx_v_result = __pyx_empty_tuple;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":420
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":420
  *         patterns = []
  *         result = ()
  *         arity = 0             # <<<<<<<<<<<<<<
@@ -37993,7 +35830,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_arity = __pyx_int_0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":421
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":421
  *         result = ()
  *         arity = 0
  *         for word_id in pattern:             # <<<<<<<<<<<<<<
@@ -38009,20 +35846,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -38038,19 +35867,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
     __pyx_v_word_id = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":422
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":422
  *         arity = 0
  *         for word_id in pattern:
  *             if word_id == -1:             # <<<<<<<<<<<<<<
  *                 arity = arity + 1
  *                 new_id = sym_setindex(self.category, arity)
  */
-    __pyx_t_4 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_v_word_id, __pyx_int_neg_1, Py_EQ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":423
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":423
  *         for word_id in pattern:
  *             if word_id == -1:
  *                 arity = arity + 1             # <<<<<<<<<<<<<<
@@ -38063,7 +35893,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
       __pyx_v_arity = __pyx_t_4;
       __pyx_t_4 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":424
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":424
  *             if word_id == -1:
  *                 arity = arity + 1
  *                 new_id = sym_setindex(self.category, arity)             # <<<<<<<<<<<<<<
@@ -38071,16 +35901,16 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)
  */
       __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_arity); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_t_6)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->category, __pyx_t_6)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_XDECREF(__pyx_v_new_id);
       __pyx_v_new_id = __pyx_t_4;
       __pyx_t_4 = 0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":426
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":426
  *                 new_id = sym_setindex(self.category, arity)
  *             else:
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)             # <<<<<<<<<<<<<<
@@ -38089,12 +35919,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
  */
       __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__sym_fromstring); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = PyObject_GetItem(__pyx_v_self->fda->id2word, __pyx_v_word_id); if (!__pyx_t_7) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetItem(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->fda->id2word, __pyx_v_word_id); if (!__pyx_t_7) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_9));
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_7);
       PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
@@ -38109,9 +35939,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
       __pyx_v_new_id = __pyx_t_8;
       __pyx_t_8 = 0;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":427
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":427
  *             else:
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)
  *             result = result + (new_id,)             # <<<<<<<<<<<<<<
@@ -38119,7 +35949,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
  *         patterns.append(Phrase(result + (sym_setindex(self.category, 1),)))
  */
     __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_8));
     __Pyx_INCREF(__pyx_v_new_id);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_new_id);
     __Pyx_GIVEREF(__pyx_v_new_id);
@@ -38132,15 +35962,18 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":428
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":428
  *                 new_id = sym_fromstring(self.fda.id2word[word_id], True)
  *             result = result + (new_id,)
  *         patterns.append(Phrase(result))             # <<<<<<<<<<<<<<
  *         patterns.append(Phrase(result + (sym_setindex(self.category, 1),)))
  *         patterns.append(Phrase((sym_setindex(self.category, 1),) + result))
  */
+  if (unlikely(((PyObject *)__pyx_v_patterns) == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_result));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_result));
@@ -38150,17 +35983,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __pyx_t_10 = PyList_Append(__pyx_v_patterns, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":429
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":429
  *             result = result + (new_id,)
  *         patterns.append(Phrase(result))
  *         patterns.append(Phrase(result + (sym_setindex(self.category, 1),)))             # <<<<<<<<<<<<<<
  *         patterns.append(Phrase((sym_setindex(self.category, 1),) + result))
  *         return patterns
  */
-  __pyx_t_9 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(__pyx_v_self->category, 1)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(((PyObject *)__pyx_v_patterns) == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
+  __pyx_t_9 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->category, 1)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_9);
   __pyx_t_9 = 0;
@@ -38168,7 +36004,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __Pyx_GOTREF(((PyObject *)__pyx_t_9));
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_9));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
   __pyx_t_9 = 0;
@@ -38178,17 +36014,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __pyx_t_10 = PyList_Append(__pyx_v_patterns, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":430
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":430
  *         patterns.append(Phrase(result))
  *         patterns.append(Phrase(result + (sym_setindex(self.category, 1),)))
  *         patterns.append(Phrase((sym_setindex(self.category, 1),) + result))             # <<<<<<<<<<<<<<
  *         return patterns
  * 
  */
-  __pyx_t_9 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(__pyx_v_self->category, 1)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(((PyObject *)__pyx_v_patterns) == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
+  __pyx_t_9 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->category, 1)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_9);
   __pyx_t_9 = 0;
@@ -38196,7 +36035,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __Pyx_GOTREF(((PyObject *)__pyx_t_9));
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_9));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
   __pyx_t_9 = 0;
@@ -38206,7 +36045,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   __pyx_t_10 = PyList_Append(__pyx_v_patterns, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":431
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":431
  *         patterns.append(Phrase(result + (sym_setindex(self.category, 1),)))
  *         patterns.append(Phrase((sym_setindex(self.category, 1),) + result))
  *         return patterns             # <<<<<<<<<<<<<<
@@ -38239,18 +36078,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6pattern2phrase_plus(st
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_9precompute(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_9precompute(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("precompute (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":433
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":433
  *         return patterns
  * 
  *     def precompute(self):             # <<<<<<<<<<<<<<
@@ -38258,7 +36086,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_9precompute(PyObject *_
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4precompute(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_4precompute(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   struct __pyx_obj_3_sa_Precomputation *__pyx_v_pre = 0;
   PyObject *__pyx_v_start_time = NULL;
   PyObject *__pyx_v_pattern = NULL;
@@ -38274,27 +36103,27 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   Py_ssize_t __pyx_t_6;
-  Py_ssize_t __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_t_9;
+  PyObject *(*__pyx_t_7)(PyObject *);
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *(*__pyx_t_9)(PyObject *);
   Py_ssize_t __pyx_t_10;
   PyObject *(*__pyx_t_11)(PyObject *);
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("precompute", 0);
+  __Pyx_RefNannySetupContext("precompute");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":436
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":436
  *         cdef Precomputation pre
  * 
  *         if self.precompute_file is not None:             # <<<<<<<<<<<<<<
  *             start_time = monitor_cpu()
  *             logger.info("Reading precomputed data from file %s... ", self.precompute_file)
  */
-  __pyx_t_1 = (__pyx_v_self->precompute_file != Py_None);
+  __pyx_t_1 = (((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file != Py_None);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":437
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":437
  * 
  *         if self.precompute_file is not None:
  *             start_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -38306,7 +36135,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
     __pyx_v_start_time = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":438
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":438
  *         if self.precompute_file is not None:
  *             start_time = monitor_cpu()
  *             logger.info("Reading precomputed data from file %s... ", self.precompute_file)             # <<<<<<<<<<<<<<
@@ -38319,20 +36148,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __Pyx_INCREF(((PyObject *)__pyx_kp_s_108));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_108));
     __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_108));
-    __Pyx_INCREF(__pyx_v_self->precompute_file);
-    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->precompute_file);
-    __Pyx_GIVEREF(__pyx_v_self->precompute_file);
+    __Pyx_INCREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file);
+    PyTuple_SET_ITEM(__pyx_t_2, 1, ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file);
+    __Pyx_GIVEREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file);
     __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":439
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":439
  *             start_time = monitor_cpu()
  *             logger.info("Reading precomputed data from file %s... ", self.precompute_file)
  *             pre = Precomputation(from_binary=self.precompute_file)             # <<<<<<<<<<<<<<
@@ -38341,24 +36170,24 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
  */
     __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__from_binary), __pyx_v_self->precompute_file) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_Precomputation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__from_binary), ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precompute_file) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_Precomputation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __pyx_v_pre = ((struct __pyx_obj_3_sa_Precomputation *)__pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":441
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":441
  *             pre = Precomputation(from_binary=self.precompute_file)
  *             # check parameters of precomputation -- some are critical and some are not
  *             if pre.max_nonterminals != self.max_nonterminals:             # <<<<<<<<<<<<<<
  *                 logger.warn("Precomputation done with max nonterminals %d, decoder uses %d", pre.max_nonterminals, self.max_nonterminals)
  *             if pre.max_length != self.max_length:
  */
-    __pyx_t_1 = (__pyx_v_pre->max_nonterminals != __pyx_v_self->max_nonterminals);
+    __pyx_t_1 = (__pyx_v_pre->max_nonterminals != ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_nonterminals);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":442
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":442
  *             # check parameters of precomputation -- some are critical and some are not
  *             if pre.max_nonterminals != self.max_nonterminals:
  *                 logger.warn("Precomputation done with max nonterminals %d, decoder uses %d", pre.max_nonterminals, self.max_nonterminals)             # <<<<<<<<<<<<<<
@@ -38372,10 +36201,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_2 = PyInt_FromLong(__pyx_v_pre->max_nonterminals); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_3 = PyInt_FromLong(__pyx_v_self->max_nonterminals); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_nonterminals); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_5));
       __Pyx_INCREF(((PyObject *)__pyx_kp_s_109));
       PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_kp_s_109));
       __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_109));
@@ -38390,21 +36219,21 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      goto __pyx_L4;
+      goto __pyx_L6;
     }
-    __pyx_L4:;
+    __pyx_L6:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":443
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":443
  *             if pre.max_nonterminals != self.max_nonterminals:
  *                 logger.warn("Precomputation done with max nonterminals %d, decoder uses %d", pre.max_nonterminals, self.max_nonterminals)
  *             if pre.max_length != self.max_length:             # <<<<<<<<<<<<<<
  *                 logger.warn("Precomputation done with max terminals %d, decoder uses %d", pre.max_length, self.max_length)
  *             if pre.train_max_initial_size != self.train_max_initial_size:
  */
-    __pyx_t_1 = (__pyx_v_pre->max_length != __pyx_v_self->max_length);
+    __pyx_t_1 = (__pyx_v_pre->max_length != ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_length);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":444
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":444
  *                 logger.warn("Precomputation done with max nonterminals %d, decoder uses %d", pre.max_nonterminals, self.max_nonterminals)
  *             if pre.max_length != self.max_length:
  *                 logger.warn("Precomputation done with max terminals %d, decoder uses %d", pre.max_length, self.max_length)             # <<<<<<<<<<<<<<
@@ -38418,10 +36247,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_3 = PyInt_FromLong(__pyx_v_pre->max_length); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyInt_FromLong(__pyx_v_self->max_length); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_length); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_2));
       __Pyx_INCREF(((PyObject *)__pyx_kp_s_110));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_110));
       __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_110));
@@ -38436,21 +36265,21 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      goto __pyx_L5;
+      goto __pyx_L7;
     }
-    __pyx_L5:;
+    __pyx_L7:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":445
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":445
  *             if pre.max_length != self.max_length:
  *                 logger.warn("Precomputation done with max terminals %d, decoder uses %d", pre.max_length, self.max_length)
  *             if pre.train_max_initial_size != self.train_max_initial_size:             # <<<<<<<<<<<<<<
  *                 raise Exception("Precomputation done with max initial size %d, decoder uses %d" % (pre.train_max_initial_size, self.train_max_initial_size))
  *             if pre.train_min_gap_size != self.train_min_gap_size:
  */
-    __pyx_t_1 = (__pyx_v_pre->train_max_initial_size != __pyx_v_self->train_max_initial_size);
+    __pyx_t_1 = (__pyx_v_pre->train_max_initial_size != ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->train_max_initial_size);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":446
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":446
  *                 logger.warn("Precomputation done with max terminals %d, decoder uses %d", pre.max_length, self.max_length)
  *             if pre.train_max_initial_size != self.train_max_initial_size:
  *                 raise Exception("Precomputation done with max initial size %d, decoder uses %d" % (pre.train_max_initial_size, self.train_max_initial_size))             # <<<<<<<<<<<<<<
@@ -38459,10 +36288,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
  */
       __pyx_t_4 = PyInt_FromLong(__pyx_v_pre->train_max_initial_size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_2 = PyInt_FromLong(__pyx_v_self->train_max_initial_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->train_max_initial_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_5));
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
@@ -38473,7 +36302,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_GOTREF(((PyObject *)__pyx_t_2));
       __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
       __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_5));
       PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_2));
       __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
       __pyx_t_2 = 0;
@@ -38483,21 +36312,21 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L6;
+      goto __pyx_L8;
     }
-    __pyx_L6:;
+    __pyx_L8:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":447
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":447
  *             if pre.train_max_initial_size != self.train_max_initial_size:
  *                 raise Exception("Precomputation done with max initial size %d, decoder uses %d" % (pre.train_max_initial_size, self.train_max_initial_size))
  *             if pre.train_min_gap_size != self.train_min_gap_size:             # <<<<<<<<<<<<<<
  *                 raise Exception("Precomputation done with min gap size %d, decoder uses %d" % (pre.train_min_gap_size, self.train_min_gap_size))
  *             if self.use_index:
  */
-    __pyx_t_1 = (__pyx_v_pre->train_min_gap_size != __pyx_v_self->train_min_gap_size);
+    __pyx_t_1 = (__pyx_v_pre->train_min_gap_size != ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->train_min_gap_size);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":448
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":448
  *                 raise Exception("Precomputation done with max initial size %d, decoder uses %d" % (pre.train_max_initial_size, self.train_max_initial_size))
  *             if pre.train_min_gap_size != self.train_min_gap_size:
  *                 raise Exception("Precomputation done with min gap size %d, decoder uses %d" % (pre.train_min_gap_size, self.train_min_gap_size))             # <<<<<<<<<<<<<<
@@ -38506,10 +36335,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
  */
       __pyx_t_2 = PyInt_FromLong(__pyx_v_pre->train_min_gap_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_5 = PyInt_FromLong(__pyx_v_self->train_min_gap_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->train_min_gap_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_2);
       PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
@@ -38520,7 +36349,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_GOTREF(((PyObject *)__pyx_t_5));
       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
       __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_5));
       __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
       __pyx_t_5 = 0;
@@ -38530,20 +36359,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       {__pyx_filename = __pyx_f[8]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L7;
+      goto __pyx_L9;
     }
-    __pyx_L7:;
+    __pyx_L9:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":449
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":449
  *             if pre.train_min_gap_size != self.train_min_gap_size:
  *                 raise Exception("Precomputation done with min gap size %d, decoder uses %d" % (pre.train_min_gap_size, self.train_min_gap_size))
  *             if self.use_index:             # <<<<<<<<<<<<<<
  *                 logger.info("Converting %d hash keys on precomputed inverted index... ", len(pre.precomputed_index))
  *                 for pattern, arr in pre.precomputed_index.iteritems():
  */
-    if (__pyx_v_self->use_index) {
+    if (((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->use_index) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":450
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":450
  *                 raise Exception("Precomputation done with min gap size %d, decoder uses %d" % (pre.train_min_gap_size, self.train_min_gap_size))
  *             if self.use_index:
  *                 logger.info("Converting %d hash keys on precomputed inverted index... ", len(pre.precomputed_index))             # <<<<<<<<<<<<<<
@@ -38562,7 +36391,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_2));
       __Pyx_INCREF(((PyObject *)__pyx_kp_s_113));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_113));
       __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_113));
@@ -38575,59 +36404,117 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
       __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":451
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":451
  *             if self.use_index:
  *                 logger.info("Converting %d hash keys on precomputed inverted index... ", len(pre.precomputed_index))
  *                 for pattern, arr in pre.precomputed_index.iteritems():             # <<<<<<<<<<<<<<
  *                     phrases = self.pattern2phrase_plus(pattern)
  *                     for phrase in phrases:
  */
-      __pyx_t_6 = 0;
-      if (unlikely(__pyx_v_pre->precomputed_index == Py_None)) {
-        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-        {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_pre->precomputed_index, 0, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_GetAttr(__pyx_v_pre->precomputed_index, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_XDECREF(__pyx_t_5);
-      __pyx_t_5 = __pyx_t_2;
-      __pyx_t_2 = 0;
-      while (1) {
-        __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_7, &__pyx_t_6, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_8);
-        if (unlikely(__pyx_t_9 == 0)) break;
-        if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) {
+        __pyx_t_5 = __pyx_t_2; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
+        __pyx_t_7 = NULL;
+      } else {
+        __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_5);
+        __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
+      }
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      for (;;) {
+        if (PyList_CheckExact(__pyx_t_5)) {
+          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
+          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++;
+        } else if (PyTuple_CheckExact(__pyx_t_5)) {
+          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
+          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++;
+        } else {
+          __pyx_t_2 = __pyx_t_7(__pyx_t_5);
+          if (unlikely(!__pyx_t_2)) {
+            if (PyErr_Occurred()) {
+              if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+              else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            }
+            break;
+          }
+          __Pyx_GOTREF(__pyx_t_2);
+        }
+        if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
+          PyObject* sequence = __pyx_t_2;
+          if (likely(PyTuple_CheckExact(sequence))) {
+            if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+              if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+              else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+              {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            }
+            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
+            __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+          } else {
+            if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+              if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+              else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+              {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            }
+            __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
+            __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+          }
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        } else {
+          Py_ssize_t index = -1;
+          __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
+          index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L13_unpacking_failed;
+          __Pyx_GOTREF(__pyx_t_4);
+          index = 1; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L13_unpacking_failed;
+          __Pyx_GOTREF(__pyx_t_3);
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+          goto __pyx_L14_unpacking_done;
+          __pyx_L13_unpacking_failed:;
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+          if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+          if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_L14_unpacking_done:;
+        }
         __Pyx_XDECREF(__pyx_v_pattern);
-        __pyx_v_pattern = __pyx_t_2;
-        __pyx_t_2 = 0;
-        __Pyx_XDECREF(__pyx_v_arr);
-        __pyx_v_arr = __pyx_t_4;
+        __pyx_v_pattern = __pyx_t_4;
         __pyx_t_4 = 0;
+        __Pyx_XDECREF(__pyx_v_arr);
+        __pyx_v_arr = __pyx_t_3;
+        __pyx_t_3 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":452
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":452
  *                 logger.info("Converting %d hash keys on precomputed inverted index... ", len(pre.precomputed_index))
  *                 for pattern, arr in pre.precomputed_index.iteritems():
  *                     phrases = self.pattern2phrase_plus(pattern)             # <<<<<<<<<<<<<<
  *                     for phrase in phrases:
  *                         self.precomputed_index[phrase] = arr
  */
-        __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__pattern2phrase_plus); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pattern2phrase_plus); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
+        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(((PyObject *)__pyx_t_3));
         __Pyx_INCREF(__pyx_v_pattern);
-        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_pattern);
+        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_pattern);
         __Pyx_GIVEREF(__pyx_v_pattern);
-        __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+        __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
         __Pyx_XDECREF(__pyx_v_phrases);
-        __pyx_v_phrases = __pyx_t_3;
-        __pyx_t_3 = 0;
+        __pyx_v_phrases = __pyx_t_4;
+        __pyx_t_4 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":453
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":453
  *                 for pattern, arr in pre.precomputed_index.iteritems():
  *                     phrases = self.pattern2phrase_plus(pattern)
  *                     for phrase in phrases:             # <<<<<<<<<<<<<<
@@ -38635,69 +36522,61 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
  *             if self.use_collocations:
  */
         if (PyList_CheckExact(__pyx_v_phrases) || PyTuple_CheckExact(__pyx_v_phrases)) {
-          __pyx_t_3 = __pyx_v_phrases; __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = 0;
+          __pyx_t_4 = __pyx_v_phrases; __Pyx_INCREF(__pyx_t_4); __pyx_t_10 = 0;
           __pyx_t_11 = NULL;
         } else {
-          __pyx_t_10 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_phrases); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext;
+          __pyx_t_10 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_phrases); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_4);
+          __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext;
         }
         for (;;) {
-          if (!__pyx_t_11 && PyList_CheckExact(__pyx_t_3)) {
-            if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_3)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #else
-            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #endif
-          } else if (!__pyx_t_11 && PyTuple_CheckExact(__pyx_t_3)) {
-            if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #else
-            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #endif
+          if (PyList_CheckExact(__pyx_t_4)) {
+            if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_4)) break;
+            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++;
+          } else if (PyTuple_CheckExact(__pyx_t_4)) {
+            if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++;
           } else {
-            __pyx_t_2 = __pyx_t_11(__pyx_t_3);
-            if (unlikely(!__pyx_t_2)) {
+            __pyx_t_3 = __pyx_t_11(__pyx_t_4);
+            if (unlikely(!__pyx_t_3)) {
               if (PyErr_Occurred()) {
                 if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
                 else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               }
               break;
             }
-            __Pyx_GOTREF(__pyx_t_2);
+            __Pyx_GOTREF(__pyx_t_3);
           }
           __Pyx_XDECREF(__pyx_v_phrase);
-          __pyx_v_phrase = __pyx_t_2;
-          __pyx_t_2 = 0;
+          __pyx_v_phrase = __pyx_t_3;
+          __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":454
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":454
  *                     phrases = self.pattern2phrase_plus(pattern)
  *                     for phrase in phrases:
  *                         self.precomputed_index[phrase] = arr             # <<<<<<<<<<<<<<
  *             if self.use_collocations:
  *                 logger.info("Converting %d hash keys on precomputed collocations... ", len(pre.precomputed_collocations))
  */
-          if (PyObject_SetItem(__pyx_v_self->precomputed_index, __pyx_v_phrase, __pyx_v_arr) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (PyObject_SetItem(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_index, __pyx_v_phrase, __pyx_v_arr) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L8;
+      goto __pyx_L10;
     }
-    __pyx_L8:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":455
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":455
  *                     for phrase in phrases:
  *                         self.precomputed_index[phrase] = arr
  *             if self.use_collocations:             # <<<<<<<<<<<<<<
  *                 logger.info("Converting %d hash keys on precomputed collocations... ", len(pre.precomputed_collocations))
  *                 for pattern, arr in pre.precomputed_collocations.iteritems():
  */
-    if (__pyx_v_self->use_collocations) {
+    if (((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->use_collocations) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":456
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":456
  *                         self.precomputed_index[phrase] = arr
  *             if self.use_collocations:
  *                 logger.info("Converting %d hash keys on precomputed collocations... ", len(pre.precomputed_collocations))             # <<<<<<<<<<<<<<
@@ -38706,70 +36585,128 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
  */
       __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__info); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__info); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_5 = __pyx_v_pre->precomputed_collocations;
       __Pyx_INCREF(__pyx_t_5);
-      __pyx_t_7 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
       __Pyx_INCREF(((PyObject *)__pyx_kp_s_114));
-      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_114));
+      PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_114));
       __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_114));
-      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_5);
       __pyx_t_5 = 0;
-      __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":457
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":457
  *             if self.use_collocations:
  *                 logger.info("Converting %d hash keys on precomputed collocations... ", len(pre.precomputed_collocations))
  *                 for pattern, arr in pre.precomputed_collocations.iteritems():             # <<<<<<<<<<<<<<
  *                     phrase = self.pattern2phrase(pattern)
  *                     self.precomputed_collocations[phrase] = arr
  */
-      __pyx_t_7 = 0;
-      if (unlikely(__pyx_v_pre->precomputed_collocations == Py_None)) {
-        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-        {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_GetAttr(__pyx_v_pre->precomputed_collocations, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
+        __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
+        __pyx_t_7 = NULL;
+      } else {
+        __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_5);
+        __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
       }
-      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_pre->precomputed_collocations, 0, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_6), (&__pyx_t_8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_XDECREF(__pyx_t_5);
-      __pyx_t_5 = __pyx_t_2;
-      __pyx_t_2 = 0;
-      while (1) {
-        __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_6, &__pyx_t_7, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_8);
-        if (unlikely(__pyx_t_9 == 0)) break;
-        if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      for (;;) {
+        if (PyList_CheckExact(__pyx_t_5)) {
+          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++;
+        } else if (PyTuple_CheckExact(__pyx_t_5)) {
+          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++;
+        } else {
+          __pyx_t_3 = __pyx_t_7(__pyx_t_5);
+          if (unlikely(!__pyx_t_3)) {
+            if (PyErr_Occurred()) {
+              if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+              else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            }
+            break;
+          }
+          __Pyx_GOTREF(__pyx_t_3);
+        }
+        if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
+          PyObject* sequence = __pyx_t_3;
+          if (likely(PyTuple_CheckExact(sequence))) {
+            if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+              if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+              else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+              {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            }
+            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
+            __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
+          } else {
+            if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+              if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+              else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+              {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            }
+            __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
+            __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
+          }
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(__pyx_t_2);
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        } else {
+          Py_ssize_t index = -1;
+          __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+          __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
+          index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L20_unpacking_failed;
+          __Pyx_GOTREF(__pyx_t_4);
+          index = 1; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L20_unpacking_failed;
+          __Pyx_GOTREF(__pyx_t_2);
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+          goto __pyx_L21_unpacking_done;
+          __pyx_L20_unpacking_failed:;
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+          if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+          if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_L21_unpacking_done:;
+        }
         __Pyx_XDECREF(__pyx_v_pattern);
-        __pyx_v_pattern = __pyx_t_2;
-        __pyx_t_2 = 0;
+        __pyx_v_pattern = __pyx_t_4;
+        __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_v_arr);
-        __pyx_v_arr = __pyx_t_3;
-        __pyx_t_3 = 0;
+        __pyx_v_arr = __pyx_t_2;
+        __pyx_t_2 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":458
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":458
  *                 logger.info("Converting %d hash keys on precomputed collocations... ", len(pre.precomputed_collocations))
  *                 for pattern, arr in pre.precomputed_collocations.iteritems():
  *                     phrase = self.pattern2phrase(pattern)             # <<<<<<<<<<<<<<
  *                     self.precomputed_collocations[phrase] = arr
  *             stop_time = monitor_cpu()
  */
-        __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__pattern2phrase); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pattern2phrase); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_2));
         __Pyx_INCREF(__pyx_v_pattern);
         PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_pattern);
         __Pyx_GIVEREF(__pyx_v_pattern);
@@ -38781,21 +36718,21 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
         __pyx_v_phrase = __pyx_t_4;
         __pyx_t_4 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":459
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":459
  *                 for pattern, arr in pre.precomputed_collocations.iteritems():
  *                     phrase = self.pattern2phrase(pattern)
  *                     self.precomputed_collocations[phrase] = arr             # <<<<<<<<<<<<<<
  *             stop_time = monitor_cpu()
  *             logger.info("Processing precomputations took %f seconds", stop_time - start_time)
  */
-        if (PyObject_SetItem(__pyx_v_self->precomputed_collocations, __pyx_v_phrase, __pyx_v_arr) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (PyObject_SetItem(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_collocations, __pyx_v_phrase, __pyx_v_arr) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L13;
+      goto __pyx_L17;
     }
-    __pyx_L13:;
+    __pyx_L17:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":460
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":460
  *                     phrase = self.pattern2phrase(pattern)
  *                     self.precomputed_collocations[phrase] = arr
  *             stop_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -38807,7 +36744,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
     __pyx_v_stop_time = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":461
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":461
  *                     self.precomputed_collocations[phrase] = arr
  *             stop_time = monitor_cpu()
  *             logger.info("Processing precomputations took %f seconds", stop_time - start_time)             # <<<<<<<<<<<<<<
@@ -38822,7 +36759,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
     __pyx_t_5 = PyNumber_Subtract(__pyx_v_stop_time, __pyx_v_start_time); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __Pyx_INCREF(((PyObject *)__pyx_kp_s_115));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_115));
     __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_115));
@@ -38834,9 +36771,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -38845,6 +36782,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.precompute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -38860,18 +36798,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8precompute(struct __py
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_11get_precomputed_collocation(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_11get_precomputed_collocation(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_precomputed_collocation (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_10get_precomputed_collocation(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), ((PyObject *)__pyx_v_phrase));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":464
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":464
  * 
  * 
  *     def get_precomputed_collocation(self, phrase):             # <<<<<<<<<<<<<<
@@ -38879,7 +36806,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_11get_precomputed_collo
  *             arr = self.precomputed_collocations[phrase]
  */
 
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_precomputed_collocation(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_phrase) {
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_5get_precomputed_collocation(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_5get_precomputed_collocation(PyObject *__pyx_v_self, PyObject *__pyx_v_phrase) {
   PyObject *__pyx_v_arr = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -38891,31 +36819,31 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_precomputed_collo
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_precomputed_collocation", 0);
+  __Pyx_RefNannySetupContext("get_precomputed_collocation");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":465
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":465
  * 
  *     def get_precomputed_collocation(self, phrase):
  *         if phrase in self.precomputed_collocations:             # <<<<<<<<<<<<<<
  *             arr = self.precomputed_collocations[phrase]
  *             return PhraseLocation(arr=arr, arr_low=0, arr_high=len(arr), num_subpatterns=phrase.arity()+1)
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_phrase, __pyx_v_self->precomputed_collocations, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PySequence_Contains(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_collocations, __pyx_v_phrase))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":466
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":466
  *     def get_precomputed_collocation(self, phrase):
  *         if phrase in self.precomputed_collocations:
  *             arr = self.precomputed_collocations[phrase]             # <<<<<<<<<<<<<<
  *             return PhraseLocation(arr=arr, arr_low=0, arr_high=len(arr), num_subpatterns=phrase.arity()+1)
  *         return None
  */
-    __pyx_t_2 = PyObject_GetItem(__pyx_v_self->precomputed_collocations, __pyx_v_phrase); if (!__pyx_t_2) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_GetItem(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->precomputed_collocations, __pyx_v_phrase); if (!__pyx_t_2) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_arr = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":467
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":467
  *         if phrase in self.precomputed_collocations:
  *             arr = self.precomputed_collocations[phrase]
  *             return PhraseLocation(arr=arr, arr_low=0, arr_high=len(arr), num_subpatterns=phrase.arity()+1)             # <<<<<<<<<<<<<<
@@ -38942,17 +36870,17 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_precomputed_collo
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__num_subpatterns), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":468
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":468
  *             arr = self.precomputed_collocations[phrase]
  *             return PhraseLocation(arr=arr, arr_low=0, arr_high=len(arr), num_subpatterns=phrase.arity()+1)
  *         return None             # <<<<<<<<<<<<<<
@@ -38979,7 +36907,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_precomputed_collo
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":471
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":471
  * 
  * 
  *     cdef int* baeza_yates_helper(self, int low1, int high1, int* arr1, int step1,             # <<<<<<<<<<<<<<
@@ -39023,9 +36951,9 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("baeza_yates_helper", 0);
+  __Pyx_RefNannySetupContext("baeza_yates_helper");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":484
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":484
  *         cdef Matching loc1, loc2
  * 
  *         result = <int*> malloc(0*sizeof(int*))             # <<<<<<<<<<<<<<
@@ -39034,7 +36962,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_result = ((int *)malloc((0 * (sizeof(int *)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":486
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":486
  *         result = <int*> malloc(0*sizeof(int*))
  * 
  *         d_first = 0             # <<<<<<<<<<<<<<
@@ -39043,7 +36971,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_d_first = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":487
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":487
  * 
  *         d_first = 0
  *         if high1 - low1 > high2 - low2:             # <<<<<<<<<<<<<<
@@ -39053,7 +36981,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   __pyx_t_1 = ((__pyx_v_high1 - __pyx_v_low1) > (__pyx_v_high2 - __pyx_v_low2));
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":488
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":488
  *         d_first = 0
  *         if high1 - low1 > high2 - low2:
  *             d_first = 1             # <<<<<<<<<<<<<<
@@ -39065,7 +36993,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":492
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":492
  *         # First, check to see if we are at any of the recursive base cases
  *         # Case 1: one of the sets is empty
  *         if low1 >= high1 or low2 >= high2:             # <<<<<<<<<<<<<<
@@ -39081,7 +37009,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":493
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":493
  *         # Case 1: one of the sets is empty
  *         if low1 >= high1 or low2 >= high2:
  *             return result             # <<<<<<<<<<<<<<
@@ -39094,7 +37022,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":496
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":496
  * 
  *         # Case 2: sets are non-overlapping
  *         assign_matching(&loc1, arr1, high1-step1, step1, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39103,7 +37031,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_f_3_sa_assign_matching((&__pyx_v_loc1), __pyx_v_arr1, (__pyx_v_high1 - __pyx_v_step1), __pyx_v_step1, __pyx_v_self->fda->sent_id->arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":497
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":497
  *         # Case 2: sets are non-overlapping
  *         assign_matching(&loc1, arr1, high1-step1, step1, self.fda.sent_id.arr)
  *         assign_matching(&loc2, arr2, low2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39112,7 +37040,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, __pyx_v_low2, __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":498
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":498
  *         assign_matching(&loc1, arr1, high1-step1, step1, self.fda.sent_id.arr)
  *         assign_matching(&loc2, arr2, low2, step2, self.fda.sent_id.arr)
  *         if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) == -1:             # <<<<<<<<<<<<<<
@@ -39122,7 +37050,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   __pyx_t_3 = (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, (&__pyx_v_loc1), (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last) == -1);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":499
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":499
  *         assign_matching(&loc2, arr2, low2, step2, self.fda.sent_id.arr)
  *         if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) == -1:
  *             return result             # <<<<<<<<<<<<<<
@@ -39135,7 +37063,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":501
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":501
  *             return result
  * 
  *         assign_matching(&loc1, arr1, low1, step1, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39144,7 +37072,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_f_3_sa_assign_matching((&__pyx_v_loc1), __pyx_v_arr1, __pyx_v_low1, __pyx_v_step1, __pyx_v_self->fda->sent_id->arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":502
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":502
  * 
  *         assign_matching(&loc1, arr1, low1, step1, self.fda.sent_id.arr)
  *         assign_matching(&loc2, arr2, high2-step2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39153,7 +37081,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, (__pyx_v_high2 - __pyx_v_step2), __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":503
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":503
  *         assign_matching(&loc1, arr1, low1, step1, self.fda.sent_id.arr)
  *         assign_matching(&loc2, arr2, high2-step2, step2, self.fda.sent_id.arr)
  *         if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) == 1:             # <<<<<<<<<<<<<<
@@ -39163,7 +37091,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   __pyx_t_3 = (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, (&__pyx_v_loc1), (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last) == 1);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":504
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":504
  *         assign_matching(&loc2, arr2, high2-step2, step2, self.fda.sent_id.arr)
  *         if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) == 1:
  *             return result             # <<<<<<<<<<<<<<
@@ -39176,7 +37104,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":508
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":508
  *         # Case 3: query set and data set do not meet size mismatch constraints;
  *         # We use mergesort instead in this case
  *         qsetsize = (high1-low1) / step1             # <<<<<<<<<<<<<<
@@ -39194,7 +37122,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_v_qsetsize = __Pyx_div_int(__pyx_t_4, __pyx_v_step1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":509
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":509
  *         # We use mergesort instead in this case
  *         qsetsize = (high1-low1) / step1
  *         dsetsize = (high2-low2) / step2             # <<<<<<<<<<<<<<
@@ -39212,7 +37140,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_v_dsetsize = __Pyx_div_int(__pyx_t_4, __pyx_v_step2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":510
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":510
  *         qsetsize = (high1-low1) / step1
  *         dsetsize = (high2-low2) / step2
  *         if d_first:             # <<<<<<<<<<<<<<
@@ -39221,7 +37149,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   if (__pyx_v_d_first) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":511
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":511
  *         dsetsize = (high2-low2) / step2
  *         if d_first:
  *             tmp = qsetsize             # <<<<<<<<<<<<<<
@@ -39230,7 +37158,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_tmp = __pyx_v_qsetsize;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":512
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":512
  *         if d_first:
  *             tmp = qsetsize
  *             qsetsize = dsetsize             # <<<<<<<<<<<<<<
@@ -39239,7 +37167,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_qsetsize = __pyx_v_dsetsize;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":513
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":513
  *             tmp = qsetsize
  *             qsetsize = dsetsize
  *             dsetsize = tmp             # <<<<<<<<<<<<<<
@@ -39251,7 +37179,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":515
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":515
  *             dsetsize = tmp
  * 
  *         if self.by_slack_factor * qsetsize * log(dsetsize) / log(2) > dsetsize:             # <<<<<<<<<<<<<<
@@ -39267,7 +37195,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   __pyx_t_3 = ((__pyx_t_5 / __pyx_t_6) > __pyx_v_dsetsize);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":516
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":516
  * 
  *         if self.by_slack_factor * qsetsize * log(dsetsize) / log(2) > dsetsize:
  *             free(result)             # <<<<<<<<<<<<<<
@@ -39276,7 +37204,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     free(__pyx_v_result);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":517
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":517
  *         if self.by_slack_factor * qsetsize * log(dsetsize) / log(2) > dsetsize:
  *             free(result)
  *             return self.merge_helper(low1, high1, arr1, step1, low2, high2, arr2, step2, offset_by_one, len_last, num_subpatterns, result_len)             # <<<<<<<<<<<<<<
@@ -39289,7 +37217,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L8:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":521
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":521
  *         # binary search.    There are two flavors, depending on
  *         # whether the queryset or dataset is first
  *         if d_first:             # <<<<<<<<<<<<<<
@@ -39298,7 +37226,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   if (__pyx_v_d_first) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":522
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":522
  *         # whether the queryset or dataset is first
  *         if d_first:
  *             med2 = median(low2, high2, step2)             # <<<<<<<<<<<<<<
@@ -39307,7 +37235,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med2 = __pyx_f_3_sa_median(__pyx_v_low2, __pyx_v_high2, __pyx_v_step2);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":523
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":523
  *         if d_first:
  *             med2 = median(low2, high2, step2)
  *             assign_matching(&loc2, arr2, med2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39316,7 +37244,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, __pyx_v_med2, __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":525
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":525
  *             assign_matching(&loc2, arr2, med2, step2, self.fda.sent_id.arr)
  * 
  *             search_low = low1             # <<<<<<<<<<<<<<
@@ -39325,7 +37253,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_search_low = __pyx_v_low1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":526
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":526
  * 
  *             search_low = low1
  *             search_high = high1             # <<<<<<<<<<<<<<
@@ -39334,7 +37262,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_search_high = __pyx_v_high1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":527
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":527
  *             search_low = low1
  *             search_high = high1
  *             while search_low < search_high:             # <<<<<<<<<<<<<<
@@ -39345,7 +37273,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_search_low < __pyx_v_search_high);
       if (!__pyx_t_3) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":528
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":528
  *             search_high = high1
  *             while search_low < search_high:
  *                 med1 = median(search_low, search_high, step1)             # <<<<<<<<<<<<<<
@@ -39354,7 +37282,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_med1 = __pyx_f_3_sa_median(__pyx_v_search_low, __pyx_v_search_high, __pyx_v_step1);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":529
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":529
  *             while search_low < search_high:
  *                 med1 = median(search_low, search_high, step1)
  *                 find_comparable_matchings(low1, high1, arr1, step1, med1, &med1_minus, &med1_plus)             # <<<<<<<<<<<<<<
@@ -39363,7 +37291,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_f_3_sa_find_comparable_matchings(__pyx_v_low1, __pyx_v_high1, __pyx_v_arr1, __pyx_v_step1, __pyx_v_med1, (&__pyx_v_med1_minus), (&__pyx_v_med1_plus));
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":530
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":530
  *                 med1 = median(search_low, search_high, step1)
  *                 find_comparable_matchings(low1, high1, arr1, step1, med1, &med1_minus, &med1_plus)
  *                 comparison = self.compare_matchings_set(med1_minus, med1_plus, arr1, step1, &loc2, offset_by_one, len_last)             # <<<<<<<<<<<<<<
@@ -39372,7 +37300,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_comparison = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings_set(__pyx_v_self, __pyx_v_med1_minus, __pyx_v_med1_plus, __pyx_v_arr1, __pyx_v_step1, (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":533
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":533
  *                 if comparison == -1:
  *                     search_low = med1_plus
  *                 elif comparison == 1:             # <<<<<<<<<<<<<<
@@ -39381,7 +37309,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       switch (__pyx_v_comparison) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":531
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":531
  *                 find_comparable_matchings(low1, high1, arr1, step1, med1, &med1_minus, &med1_plus)
  *                 comparison = self.compare_matchings_set(med1_minus, med1_plus, arr1, step1, &loc2, offset_by_one, len_last)
  *                 if comparison == -1:             # <<<<<<<<<<<<<<
@@ -39390,7 +37318,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         case -1:
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":532
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":532
  *                 comparison = self.compare_matchings_set(med1_minus, med1_plus, arr1, step1, &loc2, offset_by_one, len_last)
  *                 if comparison == -1:
  *                     search_low = med1_plus             # <<<<<<<<<<<<<<
@@ -39400,7 +37328,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_v_search_low = __pyx_v_med1_plus;
         break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":533
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":533
  *                 if comparison == -1:
  *                     search_low = med1_plus
  *                 elif comparison == 1:             # <<<<<<<<<<<<<<
@@ -39409,7 +37337,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         case 1:
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":534
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":534
  *                     search_low = med1_plus
  *                 elif comparison == 1:
  *                     search_high = med1_minus             # <<<<<<<<<<<<<<
@@ -39420,7 +37348,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         break;
         default:
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":536
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":536
  *                     search_high = med1_minus
  *                 else:
  *                     break             # <<<<<<<<<<<<<<
@@ -39436,7 +37364,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":538
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":538
  *                     break
  *         else:
  *             med1 = median(low1, high1, step1)             # <<<<<<<<<<<<<<
@@ -39445,7 +37373,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med1 = __pyx_f_3_sa_median(__pyx_v_low1, __pyx_v_high1, __pyx_v_step1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":539
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":539
  *         else:
  *             med1 = median(low1, high1, step1)
  *             find_comparable_matchings(low1, high1, arr1, step1, med1, &med1_minus, &med1_plus)             # <<<<<<<<<<<<<<
@@ -39454,7 +37382,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_f_3_sa_find_comparable_matchings(__pyx_v_low1, __pyx_v_high1, __pyx_v_arr1, __pyx_v_step1, __pyx_v_med1, (&__pyx_v_med1_minus), (&__pyx_v_med1_plus));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":541
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":541
  *             find_comparable_matchings(low1, high1, arr1, step1, med1, &med1_minus, &med1_plus)
  * 
  *             search_low = low2             # <<<<<<<<<<<<<<
@@ -39463,7 +37391,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_search_low = __pyx_v_low2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":542
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":542
  * 
  *             search_low = low2
  *             search_high = high2             # <<<<<<<<<<<<<<
@@ -39472,7 +37400,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_search_high = __pyx_v_high2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":543
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":543
  *             search_low = low2
  *             search_high = high2
  *             while search_low < search_high:             # <<<<<<<<<<<<<<
@@ -39483,7 +37411,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_search_low < __pyx_v_search_high);
       if (!__pyx_t_3) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":544
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":544
  *             search_high = high2
  *             while search_low < search_high:
  *                 med2 = median(search_low, search_high, step2)             # <<<<<<<<<<<<<<
@@ -39492,7 +37420,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_med2 = __pyx_f_3_sa_median(__pyx_v_search_low, __pyx_v_search_high, __pyx_v_step2);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":545
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":545
  *             while search_low < search_high:
  *                 med2 = median(search_low, search_high, step2)
  *                 assign_matching(&loc2, arr2, med2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39501,7 +37429,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, __pyx_v_med2, __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":546
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":546
  *                 med2 = median(search_low, search_high, step2)
  *                 assign_matching(&loc2, arr2, med2, step2, self.fda.sent_id.arr)
  *                 comparison = self.compare_matchings_set(med1_minus, med1_plus, arr1, step1, &loc2, offset_by_one, len_last)             # <<<<<<<<<<<<<<
@@ -39510,7 +37438,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_comparison = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings_set(__pyx_v_self, __pyx_v_med1_minus, __pyx_v_med1_plus, __pyx_v_arr1, __pyx_v_step1, (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":549
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":549
  *                 if comparison == -1:
  *                     search_high = med2
  *                 elif comparison == 1:             # <<<<<<<<<<<<<<
@@ -39519,7 +37447,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       switch (__pyx_v_comparison) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":547
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":547
  *                 assign_matching(&loc2, arr2, med2, step2, self.fda.sent_id.arr)
  *                 comparison = self.compare_matchings_set(med1_minus, med1_plus, arr1, step1, &loc2, offset_by_one, len_last)
  *                 if comparison == -1:             # <<<<<<<<<<<<<<
@@ -39528,7 +37456,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         case -1:
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":548
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":548
  *                 comparison = self.compare_matchings_set(med1_minus, med1_plus, arr1, step1, &loc2, offset_by_one, len_last)
  *                 if comparison == -1:
  *                     search_high = med2             # <<<<<<<<<<<<<<
@@ -39538,7 +37466,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_v_search_high = __pyx_v_med2;
         break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":549
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":549
  *                 if comparison == -1:
  *                     search_high = med2
  *                 elif comparison == 1:             # <<<<<<<<<<<<<<
@@ -39547,7 +37475,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         case 1:
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":550
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":550
  *                     search_high = med2
  *                 elif comparison == 1:
  *                     search_low = med2 + step2             # <<<<<<<<<<<<<<
@@ -39558,7 +37486,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         break;
         default:
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":552
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":552
  *                     search_low = med2 + step2
  *                 else:
  *                     break             # <<<<<<<<<<<<<<
@@ -39573,7 +37501,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L9:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":554
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":554
  *                     break
  * 
  *         med_result_len = 0             # <<<<<<<<<<<<<<
@@ -39582,7 +37510,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_med_result_len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":555
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":555
  * 
  *         med_result_len = 0
  *         med_result = <int*> malloc(0*sizeof(int*))             # <<<<<<<<<<<<<<
@@ -39591,7 +37519,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_med_result = ((int *)malloc((0 * (sizeof(int *)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":556
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":556
  *         med_result_len = 0
  *         med_result = <int*> malloc(0*sizeof(int*))
  *         if search_high > search_low:             # <<<<<<<<<<<<<<
@@ -39601,7 +37529,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   __pyx_t_3 = (__pyx_v_search_high > __pyx_v_search_low);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":562
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":562
  *             # want to store the bindings for all of those elements.    We can
  *             # subsequently throw all of them away.
  *             med2_minus = med2             # <<<<<<<<<<<<<<
@@ -39610,7 +37538,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med2_minus = __pyx_v_med2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":563
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":563
  *             # subsequently throw all of them away.
  *             med2_minus = med2
  *             med2_plus = med2 + step2             # <<<<<<<<<<<<<<
@@ -39619,7 +37547,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med2_plus = (__pyx_v_med2 + __pyx_v_step2);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":564
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":564
  *             med2_minus = med2
  *             med2_plus = med2 + step2
  *             i1 = med1_minus             # <<<<<<<<<<<<<<
@@ -39628,7 +37556,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_i1 = __pyx_v_med1_minus;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":565
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":565
  *             med2_plus = med2 + step2
  *             i1 = med1_minus
  *             while i1 < med1_plus:             # <<<<<<<<<<<<<<
@@ -39639,7 +37567,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_i1 < __pyx_v_med1_plus);
       if (!__pyx_t_3) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":566
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":566
  *             i1 = med1_minus
  *             while i1 < med1_plus:
  *                 assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39648,7 +37576,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_f_3_sa_assign_matching((&__pyx_v_loc1), __pyx_v_arr1, __pyx_v_i1, __pyx_v_step1, __pyx_v_self->fda->sent_id->arr);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":567
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":567
  *             while i1 < med1_plus:
  *                 assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *                 while med2_minus-step2 >= low2:             # <<<<<<<<<<<<<<
@@ -39659,7 +37587,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_t_3 = ((__pyx_v_med2_minus - __pyx_v_step2) >= __pyx_v_low2);
         if (!__pyx_t_3) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":568
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":568
  *                 assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *                 while med2_minus-step2 >= low2:
  *                     assign_matching(&loc2, arr2, med2_minus-step2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39668,7 +37596,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, (__pyx_v_med2_minus - __pyx_v_step2), __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":569
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":569
  *                 while med2_minus-step2 >= low2:
  *                     assign_matching(&loc2, arr2, med2_minus-step2, step2, self.fda.sent_id.arr)
  *                     if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) < 1:             # <<<<<<<<<<<<<<
@@ -39678,7 +37606,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_t_3 = (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, (&__pyx_v_loc1), (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last) < 1);
         if (__pyx_t_3) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":570
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":570
  *                     assign_matching(&loc2, arr2, med2_minus-step2, step2, self.fda.sent_id.arr)
  *                     if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) < 1:
  *                         med2_minus = med2_minus - step2             # <<<<<<<<<<<<<<
@@ -39690,7 +37618,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":572
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":572
  *                         med2_minus = med2_minus - step2
  *                     else:
  *                         break             # <<<<<<<<<<<<<<
@@ -39703,7 +37631,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       }
       __pyx_L18_break:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":573
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":573
  *                     else:
  *                         break
  *                 i2 = med2_minus             # <<<<<<<<<<<<<<
@@ -39712,7 +37640,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_i2 = __pyx_v_med2_minus;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":574
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":574
  *                         break
  *                 i2 = med2_minus
  *                 while i2 < high2:             # <<<<<<<<<<<<<<
@@ -39723,7 +37651,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_t_3 = (__pyx_v_i2 < __pyx_v_high2);
         if (!__pyx_t_3) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":575
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":575
  *                 i2 = med2_minus
  *                 while i2 < high2:
  *                     assign_matching(&loc2, arr2, i2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -39732,7 +37660,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, __pyx_v_i2, __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":576
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":576
  *                 while i2 < high2:
  *                     assign_matching(&loc2, arr2, i2, step2, self.fda.sent_id.arr)
  *                     comparison = self.compare_matchings(&loc1, &loc2, offset_by_one, len_last)             # <<<<<<<<<<<<<<
@@ -39741,7 +37669,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         __pyx_v_comparison = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, (&__pyx_v_loc1), (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":577
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":577
  *                     assign_matching(&loc2, arr2, i2, step2, self.fda.sent_id.arr)
  *                     comparison = self.compare_matchings(&loc1, &loc2, offset_by_one, len_last)
  *                     if comparison == 0:             # <<<<<<<<<<<<<<
@@ -39751,7 +37679,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_t_3 = (__pyx_v_comparison == 0);
         if (__pyx_t_3) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":579
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":579
  *                     if comparison == 0:
  *                         pass
  *                         med_result = append_combined_matching(med_result, &loc1, &loc2, offset_by_one, num_subpatterns, &med_result_len)             # <<<<<<<<<<<<<<
@@ -39763,7 +37691,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         }
         __pyx_L22:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":580
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":580
  *                         pass
  *                         med_result = append_combined_matching(med_result, &loc1, &loc2, offset_by_one, num_subpatterns, &med_result_len)
  *                     if comparison == -1:             # <<<<<<<<<<<<<<
@@ -39773,7 +37701,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         __pyx_t_3 = (__pyx_v_comparison == -1);
         if (__pyx_t_3) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":581
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":581
  *                         med_result = append_combined_matching(med_result, &loc1, &loc2, offset_by_one, num_subpatterns, &med_result_len)
  *                     if comparison == -1:
  *                         break             # <<<<<<<<<<<<<<
@@ -39785,7 +37713,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
         }
         __pyx_L23:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":582
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":582
  *                     if comparison == -1:
  *                         break
  *                     i2 = i2 + step2             # <<<<<<<<<<<<<<
@@ -39796,7 +37724,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       }
       __pyx_L21_break:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":583
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":583
  *                         break
  *                     i2 = i2 + step2
  *                 if i2 > med2_plus:             # <<<<<<<<<<<<<<
@@ -39806,7 +37734,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_i2 > __pyx_v_med2_plus);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":584
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":584
  *                     i2 = i2 + step2
  *                 if i2 > med2_plus:
  *                     med2_plus = i2             # <<<<<<<<<<<<<<
@@ -39818,7 +37746,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       }
       __pyx_L24:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":585
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":585
  *                 if i2 > med2_plus:
  *                     med2_plus = i2
  *                 i1 = i1 + step1             # <<<<<<<<<<<<<<
@@ -39828,7 +37756,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_v_i1 = (__pyx_v_i1 + __pyx_v_step1);
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":587
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":587
  *                 i1 = i1 + step1
  * 
  *             tmp = med1_minus             # <<<<<<<<<<<<<<
@@ -39837,7 +37765,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_tmp = __pyx_v_med1_minus;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":588
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":588
  * 
  *             tmp = med1_minus
  *             med1_minus = med1_plus             # <<<<<<<<<<<<<<
@@ -39846,7 +37774,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med1_minus = __pyx_v_med1_plus;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":589
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":589
  *             tmp = med1_minus
  *             med1_minus = med1_plus
  *             med1_plus = tmp             # <<<<<<<<<<<<<<
@@ -39858,7 +37786,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":592
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":592
  *         else:
  *             # No match; need to figure out the point of division in D and Q
  *             med2_minus = med2             # <<<<<<<<<<<<<<
@@ -39867,7 +37795,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med2_minus = __pyx_v_med2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":593
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":593
  *             # No match; need to figure out the point of division in D and Q
  *             med2_minus = med2
  *             med2_plus = med2             # <<<<<<<<<<<<<<
@@ -39876,7 +37804,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     __pyx_v_med2_plus = __pyx_v_med2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":594
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":594
  *             med2_minus = med2
  *             med2_plus = med2
  *             if d_first:             # <<<<<<<<<<<<<<
@@ -39885,7 +37813,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
     if (__pyx_v_d_first) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":595
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":595
  *             med2_plus = med2
  *             if d_first:
  *                 med2_minus = med2_minus + step2             # <<<<<<<<<<<<<<
@@ -39894,7 +37822,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_med2_minus = (__pyx_v_med2_minus + __pyx_v_step2);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":596
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":596
  *             if d_first:
  *                 med2_minus = med2_minus + step2
  *                 if comparison == -1:             # <<<<<<<<<<<<<<
@@ -39904,7 +37832,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_comparison == -1);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":597
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":597
  *                 med2_minus = med2_minus + step2
  *                 if comparison == -1:
  *                     med1_minus = med1_plus             # <<<<<<<<<<<<<<
@@ -39916,7 +37844,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       }
       __pyx_L26:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":598
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":598
  *                 if comparison == -1:
  *                     med1_minus = med1_plus
  *                 if comparison == 1:             # <<<<<<<<<<<<<<
@@ -39926,7 +37854,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_comparison == 1);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":599
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":599
  *                     med1_minus = med1_plus
  *                 if comparison == 1:
  *                     med1_plus = med1_minus             # <<<<<<<<<<<<<<
@@ -39941,7 +37869,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":601
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":601
  *                     med1_plus = med1_minus
  *             else:
  *                 tmp = med1_minus             # <<<<<<<<<<<<<<
@@ -39950,7 +37878,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_tmp = __pyx_v_med1_minus;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":602
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":602
  *             else:
  *                 tmp = med1_minus
  *                 med1_minus = med1_plus             # <<<<<<<<<<<<<<
@@ -39959,7 +37887,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_med1_minus = __pyx_v_med1_plus;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":603
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":603
  *                 tmp = med1_minus
  *                 med1_minus = med1_plus
  *                 med1_plus = tmp             # <<<<<<<<<<<<<<
@@ -39968,7 +37896,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
       __pyx_v_med1_plus = __pyx_v_tmp;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":604
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":604
  *                 med1_minus = med1_plus
  *                 med1_plus = tmp
  *                 if comparison == 1:             # <<<<<<<<<<<<<<
@@ -39978,7 +37906,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
       __pyx_t_3 = (__pyx_v_comparison == 1);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":605
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":605
  *                 med1_plus = tmp
  *                 if comparison == 1:
  *                     med2_minus = med2_minus + step2             # <<<<<<<<<<<<<<
@@ -39987,7 +37915,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
         __pyx_v_med2_minus = (__pyx_v_med2_minus + __pyx_v_step2);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":606
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":606
  *                 if comparison == 1:
  *                     med2_minus = med2_minus + step2
  *                     med2_plus = med2_plus + step2             # <<<<<<<<<<<<<<
@@ -40003,7 +37931,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   }
   __pyx_L14:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":608
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":608
  *                     med2_plus = med2_plus + step2
  * 
  *         low_result_len = 0             # <<<<<<<<<<<<<<
@@ -40012,7 +37940,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_low_result_len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":609
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":609
  * 
  *         low_result_len = 0
  *         low_result = self.baeza_yates_helper(low1, med1_plus, arr1, step1, low2, med2_plus, arr2, step2, offset_by_one, len_last, num_subpatterns, &low_result_len)             # <<<<<<<<<<<<<<
@@ -40021,7 +37949,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_low_result = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->baeza_yates_helper(__pyx_v_self, __pyx_v_low1, __pyx_v_med1_plus, __pyx_v_arr1, __pyx_v_step1, __pyx_v_low2, __pyx_v_med2_plus, __pyx_v_arr2, __pyx_v_step2, __pyx_v_offset_by_one, __pyx_v_len_last, __pyx_v_num_subpatterns, (&__pyx_v_low_result_len));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":610
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":610
  *         low_result_len = 0
  *         low_result = self.baeza_yates_helper(low1, med1_plus, arr1, step1, low2, med2_plus, arr2, step2, offset_by_one, len_last, num_subpatterns, &low_result_len)
  *         high_result_len = 0             # <<<<<<<<<<<<<<
@@ -40030,7 +37958,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_high_result_len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":611
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":611
  *         low_result = self.baeza_yates_helper(low1, med1_plus, arr1, step1, low2, med2_plus, arr2, step2, offset_by_one, len_last, num_subpatterns, &low_result_len)
  *         high_result_len = 0
  *         high_result = self.baeza_yates_helper(med1_minus, high1, arr1, step1, med2_minus, high2, arr2, step2, offset_by_one, len_last, num_subpatterns, &high_result_len)             # <<<<<<<<<<<<<<
@@ -40039,7 +37967,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_high_result = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->baeza_yates_helper(__pyx_v_self, __pyx_v_med1_minus, __pyx_v_high1, __pyx_v_arr1, __pyx_v_step1, __pyx_v_med2_minus, __pyx_v_high2, __pyx_v_arr2, __pyx_v_step2, __pyx_v_offset_by_one, __pyx_v_len_last, __pyx_v_num_subpatterns, (&__pyx_v_high_result_len));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":613
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":613
  *         high_result = self.baeza_yates_helper(med1_minus, high1, arr1, step1, med2_minus, high2, arr2, step2, offset_by_one, len_last, num_subpatterns, &high_result_len)
  * 
  *         result = extend_arr(result, result_len, low_result, low_result_len)             # <<<<<<<<<<<<<<
@@ -40048,7 +37976,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_result = __pyx_f_3_sa_extend_arr(__pyx_v_result, __pyx_v_result_len, __pyx_v_low_result, __pyx_v_low_result_len);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":614
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":614
  * 
  *         result = extend_arr(result, result_len, low_result, low_result_len)
  *         result = extend_arr(result, result_len, med_result, med_result_len)             # <<<<<<<<<<<<<<
@@ -40057,7 +37985,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_result = __pyx_f_3_sa_extend_arr(__pyx_v_result, __pyx_v_result_len, __pyx_v_med_result, __pyx_v_med_result_len);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":615
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":615
  *         result = extend_arr(result, result_len, low_result, low_result_len)
  *         result = extend_arr(result, result_len, med_result, med_result_len)
  *         result = extend_arr(result, result_len, high_result, high_result_len)             # <<<<<<<<<<<<<<
@@ -40066,7 +37994,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   __pyx_v_result = __pyx_f_3_sa_extend_arr(__pyx_v_result, __pyx_v_result_len, __pyx_v_high_result, __pyx_v_high_result_len);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":616
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":616
  *         result = extend_arr(result, result_len, med_result, med_result_len)
  *         result = extend_arr(result, result_len, high_result, high_result_len)
  *         free(low_result)             # <<<<<<<<<<<<<<
@@ -40075,7 +38003,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   free(__pyx_v_low_result);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":617
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":617
  *         result = extend_arr(result, result_len, high_result, high_result_len)
  *         free(low_result)
  *         free(med_result)             # <<<<<<<<<<<<<<
@@ -40084,7 +38012,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   free(__pyx_v_med_result);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":618
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":618
  *         free(low_result)
  *         free(med_result)
  *         free(high_result)             # <<<<<<<<<<<<<<
@@ -40093,7 +38021,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
  */
   free(__pyx_v_high_result);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":620
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":620
  *         free(high_result)
  * 
  *         return result             # <<<<<<<<<<<<<<
@@ -40113,7 +38041,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_baeza_yates_helper(struct __p
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":624
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":624
  * 
  * 
  *     cdef long compare_matchings_set(self, int i1_minus, int i1_plus, int* arr1, int step1,             # <<<<<<<<<<<<<<
@@ -40130,9 +38058,9 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
   long __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("compare_matchings_set", 0);
+  __Pyx_RefNannySetupContext("compare_matchings_set");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":635
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":635
  *         cdef Matching* loc1
  * 
  *         loc1 = &l1_stack             # <<<<<<<<<<<<<<
@@ -40141,7 +38069,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
  */
   __pyx_v_loc1 = (&__pyx_v_l1_stack);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":637
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":637
  *         loc1 = &l1_stack
  * 
  *         i1 = i1_minus             # <<<<<<<<<<<<<<
@@ -40150,7 +38078,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
  */
   __pyx_v_i1 = __pyx_v_i1_minus;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":638
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":638
  * 
  *         i1 = i1_minus
  *         while i1 < i1_plus:             # <<<<<<<<<<<<<<
@@ -40161,7 +38089,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
     __pyx_t_1 = (__pyx_v_i1 < __pyx_v_i1_plus);
     if (!__pyx_t_1) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":639
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":639
  *         i1 = i1_minus
  *         while i1 < i1_plus:
  *             assign_matching(loc1, arr1, i1, step1, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -40170,7 +38098,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
  */
     __pyx_f_3_sa_assign_matching(__pyx_v_loc1, __pyx_v_arr1, __pyx_v_i1, __pyx_v_step1, __pyx_v_self->fda->sent_id->arr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":640
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":640
  *         while i1 < i1_plus:
  *             assign_matching(loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *             comparison = self.compare_matchings(loc1, loc2, offset_by_one, len_last)             # <<<<<<<<<<<<<<
@@ -40179,7 +38107,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
  */
     __pyx_v_comparison = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, __pyx_v_loc1, __pyx_v_loc2, __pyx_v_offset_by_one, __pyx_v_len_last);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":641
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":641
  *             assign_matching(loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *             comparison = self.compare_matchings(loc1, loc2, offset_by_one, len_last)
  *             if comparison == 0:             # <<<<<<<<<<<<<<
@@ -40189,7 +38117,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
     __pyx_t_1 = (__pyx_v_comparison == 0);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":642
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":642
  *             comparison = self.compare_matchings(loc1, loc2, offset_by_one, len_last)
  *             if comparison == 0:
  *                 prev_comparison = 0             # <<<<<<<<<<<<<<
@@ -40198,7 +38126,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
  */
       __pyx_v_prev_comparison = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":643
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":643
  *             if comparison == 0:
  *                 prev_comparison = 0
  *                 break             # <<<<<<<<<<<<<<
@@ -40209,7 +38137,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
       goto __pyx_L5;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":644
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":644
  *                 prev_comparison = 0
  *                 break
  *             elif i1 == i1_minus:             # <<<<<<<<<<<<<<
@@ -40219,7 +38147,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
     __pyx_t_1 = (__pyx_v_i1 == __pyx_v_i1_minus);
     if (__pyx_t_1) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":645
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":645
  *                 break
  *             elif i1 == i1_minus:
  *                 prev_comparison = comparison             # <<<<<<<<<<<<<<
@@ -40231,7 +38159,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":647
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":647
  *                 prev_comparison = comparison
  *             else:
  *                 if comparison != prev_comparison:             # <<<<<<<<<<<<<<
@@ -40241,7 +38169,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
       __pyx_t_1 = (__pyx_v_comparison != __pyx_v_prev_comparison);
       if (__pyx_t_1) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":648
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":648
  *             else:
  *                 if comparison != prev_comparison:
  *                     prev_comparison = 0             # <<<<<<<<<<<<<<
@@ -40250,7 +38178,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
  */
         __pyx_v_prev_comparison = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":649
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":649
  *                 if comparison != prev_comparison:
  *                     prev_comparison = 0
  *                     break             # <<<<<<<<<<<<<<
@@ -40264,7 +38192,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
     }
     __pyx_L5:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":650
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":650
  *                     prev_comparison = 0
  *                     break
  *             i1 = i1 + step1             # <<<<<<<<<<<<<<
@@ -40275,7 +38203,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
   }
   __pyx_L4_break:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":651
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":651
  *                     break
  *             i1 = i1 + step1
  *         return prev_comparison             # <<<<<<<<<<<<<<
@@ -40291,7 +38219,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings_set(struct
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":654
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":654
  * 
  * 
  *     cdef long compare_matchings(self, Matching* loc1, Matching* loc2, int offset_by_one, int len_last):             # <<<<<<<<<<<<<<
@@ -40307,9 +38235,9 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   int __pyx_t_2;
   int __pyx_t_3;
   int __pyx_t_4;
-  __Pyx_RefNannySetupContext("compare_matchings", 0);
+  __Pyx_RefNannySetupContext("compare_matchings");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":657
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":657
  *         cdef int i
  * 
  *         if loc1.sent_id > loc2.sent_id:             # <<<<<<<<<<<<<<
@@ -40319,7 +38247,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   __pyx_t_1 = (__pyx_v_loc1->sent_id > __pyx_v_loc2->sent_id);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":658
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":658
  * 
  *         if loc1.sent_id > loc2.sent_id:
  *             return 1             # <<<<<<<<<<<<<<
@@ -40332,7 +38260,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":659
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":659
  *         if loc1.sent_id > loc2.sent_id:
  *             return 1
  *         if loc2.sent_id > loc1.sent_id:             # <<<<<<<<<<<<<<
@@ -40342,7 +38270,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   __pyx_t_1 = (__pyx_v_loc2->sent_id > __pyx_v_loc1->sent_id);
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":660
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":660
  *             return 1
  *         if loc2.sent_id > loc1.sent_id:
  *             return -1             # <<<<<<<<<<<<<<
@@ -40355,7 +38283,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":662
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":662
  *             return -1
  * 
  *         if loc1.size == 1 and loc2.size == 1:             # <<<<<<<<<<<<<<
@@ -40371,7 +38299,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   }
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":663
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":663
  * 
  *         if loc1.size == 1 and loc2.size == 1:
  *             if loc2.arr[loc2.start] - loc1.arr[loc1.start] <= self.train_min_gap_size:             # <<<<<<<<<<<<<<
@@ -40381,7 +38309,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     __pyx_t_3 = (((__pyx_v_loc2->arr[__pyx_v_loc2->start]) - (__pyx_v_loc1->arr[__pyx_v_loc1->start])) <= __pyx_v_self->train_min_gap_size);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":664
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":664
  *         if loc1.size == 1 and loc2.size == 1:
  *             if loc2.arr[loc2.start] - loc1.arr[loc1.start] <= self.train_min_gap_size:
  *                 return 1             # <<<<<<<<<<<<<<
@@ -40396,7 +38324,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     goto __pyx_L5;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":666
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":666
  *                 return 1
  * 
  *         elif offset_by_one:             # <<<<<<<<<<<<<<
@@ -40405,7 +38333,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
  */
   if (__pyx_v_offset_by_one) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":667
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":667
  * 
  *         elif offset_by_one:
  *             for i from 1 <= i < loc1.size:             # <<<<<<<<<<<<<<
@@ -40415,7 +38343,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     __pyx_t_4 = __pyx_v_loc1->size;
     for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":668
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":668
  *         elif offset_by_one:
  *             for i from 1 <= i < loc1.size:
  *                 if loc1.arr[loc1.start+i] > loc2.arr[loc2.start+i-1]:             # <<<<<<<<<<<<<<
@@ -40425,7 +38353,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
       __pyx_t_3 = ((__pyx_v_loc1->arr[(__pyx_v_loc1->start + __pyx_v_i)]) > (__pyx_v_loc2->arr[((__pyx_v_loc2->start + __pyx_v_i) - 1)]));
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":669
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":669
  *             for i from 1 <= i < loc1.size:
  *                 if loc1.arr[loc1.start+i] > loc2.arr[loc2.start+i-1]:
  *                     return 1             # <<<<<<<<<<<<<<
@@ -40438,7 +38366,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
       }
       __pyx_L9:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":670
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":670
  *                 if loc1.arr[loc1.start+i] > loc2.arr[loc2.start+i-1]:
  *                     return 1
  *                 if loc1.arr[loc1.start+i] < loc2.arr[loc2.start+i-1]:             # <<<<<<<<<<<<<<
@@ -40448,7 +38376,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
       __pyx_t_3 = ((__pyx_v_loc1->arr[(__pyx_v_loc1->start + __pyx_v_i)]) < (__pyx_v_loc2->arr[((__pyx_v_loc2->start + __pyx_v_i) - 1)]));
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":671
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":671
  *                     return 1
  *                 if loc1.arr[loc1.start+i] < loc2.arr[loc2.start+i-1]:
  *                     return -1             # <<<<<<<<<<<<<<
@@ -40465,7 +38393,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":674
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":674
  * 
  *         else:
  *             if loc1.arr[loc1.start]+1 > loc2.arr[loc2.start]:             # <<<<<<<<<<<<<<
@@ -40475,7 +38403,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     __pyx_t_3 = (((__pyx_v_loc1->arr[__pyx_v_loc1->start]) + 1) > (__pyx_v_loc2->arr[__pyx_v_loc2->start]));
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":675
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":675
  *         else:
  *             if loc1.arr[loc1.start]+1 > loc2.arr[loc2.start]:
  *                 return 1             # <<<<<<<<<<<<<<
@@ -40488,7 +38416,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     }
     __pyx_L11:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":676
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":676
  *             if loc1.arr[loc1.start]+1 > loc2.arr[loc2.start]:
  *                 return 1
  *             if loc1.arr[loc1.start]+1 < loc2.arr[loc2.start]:             # <<<<<<<<<<<<<<
@@ -40498,7 +38426,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     __pyx_t_3 = (((__pyx_v_loc1->arr[__pyx_v_loc1->start]) + 1) < (__pyx_v_loc2->arr[__pyx_v_loc2->start]));
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":677
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":677
  *                 return 1
  *             if loc1.arr[loc1.start]+1 < loc2.arr[loc2.start]:
  *                 return -1             # <<<<<<<<<<<<<<
@@ -40511,7 +38439,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     }
     __pyx_L12:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":679
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":679
  *                 return -1
  * 
  *             for i from 1 <= i < loc1.size:             # <<<<<<<<<<<<<<
@@ -40521,7 +38449,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
     __pyx_t_4 = __pyx_v_loc1->size;
     for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":680
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":680
  * 
  *             for i from 1 <= i < loc1.size:
  *                 if loc1.arr[loc1.start+i] > loc2.arr[loc2.start+i]:             # <<<<<<<<<<<<<<
@@ -40531,7 +38459,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
       __pyx_t_3 = ((__pyx_v_loc1->arr[(__pyx_v_loc1->start + __pyx_v_i)]) > (__pyx_v_loc2->arr[(__pyx_v_loc2->start + __pyx_v_i)]));
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":681
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":681
  *             for i from 1 <= i < loc1.size:
  *                 if loc1.arr[loc1.start+i] > loc2.arr[loc2.start+i]:
  *                     return 1             # <<<<<<<<<<<<<<
@@ -40544,7 +38472,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
       }
       __pyx_L15:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":682
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":682
  *                 if loc1.arr[loc1.start+i] > loc2.arr[loc2.start+i]:
  *                     return 1
  *                 if loc1.arr[loc1.start+i] < loc2.arr[loc2.start+i]:             # <<<<<<<<<<<<<<
@@ -40554,7 +38482,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
       __pyx_t_3 = ((__pyx_v_loc1->arr[(__pyx_v_loc1->start + __pyx_v_i)]) < (__pyx_v_loc2->arr[(__pyx_v_loc2->start + __pyx_v_i)]));
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":683
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":683
  *                     return 1
  *                 if loc1.arr[loc1.start+i] < loc2.arr[loc2.start+i]:
  *                     return -1             # <<<<<<<<<<<<<<
@@ -40570,7 +38498,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":685
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":685
  *                     return -1
  * 
  *         if loc2.arr[loc2.end-1] + len_last - loc1.arr[loc1.start] > self.train_max_initial_size:             # <<<<<<<<<<<<<<
@@ -40580,7 +38508,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   __pyx_t_3 = ((((__pyx_v_loc2->arr[(__pyx_v_loc2->end - 1)]) + __pyx_v_len_last) - (__pyx_v_loc1->arr[__pyx_v_loc1->start])) > __pyx_v_self->train_max_initial_size);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":686
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":686
  * 
  *         if loc2.arr[loc2.end-1] + len_last - loc1.arr[loc1.start] > self.train_max_initial_size:
  *             return -1             # <<<<<<<<<<<<<<
@@ -40593,7 +38521,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   }
   __pyx_L17:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":687
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":687
  *         if loc2.arr[loc2.end-1] + len_last - loc1.arr[loc1.start] > self.train_max_initial_size:
  *             return -1
  *         return 0             # <<<<<<<<<<<<<<
@@ -40609,7 +38537,7 @@ static long __pyx_f_3_sa_23HieroCachingRuleFactory_compare_matchings(struct __py
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":690
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":690
  * 
  * 
  *     cdef int* merge_helper(self, int low1, int high1, int* arr1, int step1,             # <<<<<<<<<<<<<<
@@ -40631,9 +38559,9 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("merge_helper", 0);
+  __Pyx_RefNannySetupContext("merge_helper");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":698
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":698
  *         cdef Matching loc1, loc2
  * 
  *         result_len[0] = 0             # <<<<<<<<<<<<<<
@@ -40642,7 +38570,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
   (__pyx_v_result_len[0]) = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":699
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":699
  * 
  *         result_len[0] = 0
  *         result = <int*> malloc(0*sizeof(int))             # <<<<<<<<<<<<<<
@@ -40651,7 +38579,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
   __pyx_v_result = ((int *)malloc((0 * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":701
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":701
  *         result = <int*> malloc(0*sizeof(int))
  * 
  *         i1 = low1             # <<<<<<<<<<<<<<
@@ -40660,7 +38588,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
   __pyx_v_i1 = __pyx_v_low1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":702
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":702
  * 
  *         i1 = low1
  *         i2 = low2             # <<<<<<<<<<<<<<
@@ -40669,7 +38597,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
   __pyx_v_i2 = __pyx_v_low2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":703
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":703
  *         i1 = low1
  *         i2 = low2
  *         while i1 < high1 and i2 < high2:             # <<<<<<<<<<<<<<
@@ -40686,7 +38614,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
     }
     if (!__pyx_t_3) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":706
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":706
  * 
  *             # First, pop all unneeded loc2's off the stack
  *             assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -40695,7 +38623,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
     __pyx_f_3_sa_assign_matching((&__pyx_v_loc1), __pyx_v_arr1, __pyx_v_i1, __pyx_v_step1, __pyx_v_self->fda->sent_id->arr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":707
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":707
  *             # First, pop all unneeded loc2's off the stack
  *             assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *             while i2 < high2:             # <<<<<<<<<<<<<<
@@ -40706,7 +38634,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
       __pyx_t_3 = (__pyx_v_i2 < __pyx_v_high2);
       if (!__pyx_t_3) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":708
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":708
  *             assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *             while i2 < high2:
  *                 assign_matching(&loc2, arr2, i2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -40715,7 +38643,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
       __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, __pyx_v_i2, __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":709
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":709
  *             while i2 < high2:
  *                 assign_matching(&loc2, arr2, i2, step2, self.fda.sent_id.arr)
  *                 if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) == 1:             # <<<<<<<<<<<<<<
@@ -40725,7 +38653,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
       __pyx_t_3 = (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, (&__pyx_v_loc1), (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last) == 1);
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":710
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":710
  *                 assign_matching(&loc2, arr2, i2, step2, self.fda.sent_id.arr)
  *                 if self.compare_matchings(&loc1, &loc2, offset_by_one, len_last) == 1:
  *                     i2 = i2 + step2             # <<<<<<<<<<<<<<
@@ -40737,7 +38665,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":712
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":712
  *                     i2 = i2 + step2
  *                 else:
  *                     break             # <<<<<<<<<<<<<<
@@ -40750,7 +38678,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
     }
     __pyx_L6_break:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":715
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":715
  * 
  *             # Next: process all loc1's with the same starting val
  *             j1 = i1             # <<<<<<<<<<<<<<
@@ -40759,7 +38687,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
     __pyx_v_j1 = __pyx_v_i1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":716
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":716
  *             # Next: process all loc1's with the same starting val
  *             j1 = i1
  *             while i1 < high1 and arr1[j1] == arr1[i1]:             # <<<<<<<<<<<<<<
@@ -40776,7 +38704,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
       }
       if (!__pyx_t_2) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":717
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":717
  *             j1 = i1
  *             while i1 < high1 and arr1[j1] == arr1[i1]:
  *                 assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -40785,7 +38713,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
       __pyx_f_3_sa_assign_matching((&__pyx_v_loc1), __pyx_v_arr1, __pyx_v_i1, __pyx_v_step1, __pyx_v_self->fda->sent_id->arr);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":718
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":718
  *             while i1 < high1 and arr1[j1] == arr1[i1]:
  *                 assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *                 j2 = i2             # <<<<<<<<<<<<<<
@@ -40794,7 +38722,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
       __pyx_v_j2 = __pyx_v_i2;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":719
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":719
  *                 assign_matching(&loc1, arr1, i1, step1, self.fda.sent_id.arr)
  *                 j2 = i2
  *                 while j2 < high2:             # <<<<<<<<<<<<<<
@@ -40805,7 +38733,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
         __pyx_t_2 = (__pyx_v_j2 < __pyx_v_high2);
         if (!__pyx_t_2) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":720
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":720
  *                 j2 = i2
  *                 while j2 < high2:
  *                     assign_matching(&loc2, arr2, j2, step2, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
@@ -40814,7 +38742,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
         __pyx_f_3_sa_assign_matching((&__pyx_v_loc2), __pyx_v_arr2, __pyx_v_j2, __pyx_v_step2, __pyx_v_self->fda->sent_id->arr);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":721
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":721
  *                 while j2 < high2:
  *                     assign_matching(&loc2, arr2, j2, step2, self.fda.sent_id.arr)
  *                     comparison = self.compare_matchings(&loc1, &loc2, offset_by_one, len_last)             # <<<<<<<<<<<<<<
@@ -40823,7 +38751,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
  */
         __pyx_v_comparison = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->compare_matchings(__pyx_v_self, (&__pyx_v_loc1), (&__pyx_v_loc2), __pyx_v_offset_by_one, __pyx_v_len_last);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":722
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":722
  *                     assign_matching(&loc2, arr2, j2, step2, self.fda.sent_id.arr)
  *                     comparison = self.compare_matchings(&loc1, &loc2, offset_by_one, len_last)
  *                     if comparison == 0:             # <<<<<<<<<<<<<<
@@ -40833,7 +38761,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
         __pyx_t_2 = (__pyx_v_comparison == 0);
         if (__pyx_t_2) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":723
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":723
  *                     comparison = self.compare_matchings(&loc1, &loc2, offset_by_one, len_last)
  *                     if comparison == 0:
  *                         result = append_combined_matching(result, &loc1, &loc2, offset_by_one, num_subpatterns, result_len)             # <<<<<<<<<<<<<<
@@ -40845,7 +38773,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
         }
         __pyx_L12:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":724
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":724
  *                     if comparison == 0:
  *                         result = append_combined_matching(result, &loc1, &loc2, offset_by_one, num_subpatterns, result_len)
  *                     if comparison == 1:             # <<<<<<<<<<<<<<
@@ -40858,7 +38786,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
         }
         __pyx_L13:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":726
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":726
  *                     if comparison == 1:
  *                         pass
  *                     if comparison == -1:             # <<<<<<<<<<<<<<
@@ -40868,7 +38796,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
         __pyx_t_2 = (__pyx_v_comparison == -1);
         if (__pyx_t_2) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":727
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":727
  *                         pass
  *                     if comparison == -1:
  *                         break             # <<<<<<<<<<<<<<
@@ -40880,7 +38808,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":729
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":729
  *                         break
  *                     else:
  *                         j2 = j2 + step2             # <<<<<<<<<<<<<<
@@ -40893,7 +38821,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
       }
       __pyx_L11_break:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":730
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":730
  *                     else:
  *                         j2 = j2 + step2
  *                 i1 = i1 + step1             # <<<<<<<<<<<<<<
@@ -40904,7 +38832,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
     }
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":731
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":731
  *                         j2 = j2 + step2
  *                 i1 = i1 + step1
  *         return result             # <<<<<<<<<<<<<<
@@ -40920,7 +38848,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_merge_helper(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":734
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":734
  * 
  * 
  *     cdef void sort_phrase_loc(self, IntList arr, PhraseLocation loc, Phrase phrase):             # <<<<<<<<<<<<<<
@@ -40940,19 +38868,19 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("sort_phrase_loc", 0);
+  __Pyx_RefNannySetupContext("sort_phrase_loc");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":739
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":739
  *         cdef IntList result
  * 
  *         if phrase in self.precomputed_index:             # <<<<<<<<<<<<<<
  *             loc.arr = self.precomputed_index[phrase]
  *         else:
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_v_phrase), __pyx_v_self->precomputed_index, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PySequence_Contains(__pyx_v_self->precomputed_index, ((PyObject *)__pyx_v_phrase)))); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":740
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":740
  * 
  *         if phrase in self.precomputed_index:
  *             loc.arr = self.precomputed_index[phrase]             # <<<<<<<<<<<<<<
@@ -40971,7 +38899,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":742
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":742
  *             loc.arr = self.precomputed_index[phrase]
  *         else:
  *             loc.arr = IntList(initial_len=loc.sa_high-loc.sa_low)             # <<<<<<<<<<<<<<
@@ -40984,7 +38912,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
     __Pyx_GOTREF(__pyx_t_3);
     if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_GIVEREF(__pyx_t_3);
@@ -40993,7 +38921,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
     __pyx_v_loc->arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":743
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":743
  *         else:
  *             loc.arr = IntList(initial_len=loc.sa_high-loc.sa_low)
  *             veb = VEB(arr.len)             # <<<<<<<<<<<<<<
@@ -41003,7 +38931,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
     __pyx_t_3 = PyInt_FromLong(__pyx_v_arr->len); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 743; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 743; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
@@ -41013,7 +38941,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
     __pyx_v_veb = ((struct __pyx_obj_3_sa_VEB *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":744
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":744
  *             loc.arr = IntList(initial_len=loc.sa_high-loc.sa_low)
  *             veb = VEB(arr.len)
  *             for i from loc.sa_low <= i < loc.sa_high:             # <<<<<<<<<<<<<<
@@ -41023,7 +38951,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
     __pyx_t_4 = __pyx_v_loc->sa_high;
     for (__pyx_v_i = __pyx_v_loc->sa_low; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":745
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":745
  *             veb = VEB(arr.len)
  *             for i from loc.sa_low <= i < loc.sa_high:
  *                 veb._insert(arr.arr[i])             # <<<<<<<<<<<<<<
@@ -41033,7 +38961,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
       ((struct __pyx_vtabstruct_3_sa_VEB *)__pyx_v_veb->__pyx_vtab)->_insert(__pyx_v_veb, (__pyx_v_arr->arr[__pyx_v_i]));
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":746
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":746
  *             for i from loc.sa_low <= i < loc.sa_high:
  *                 veb._insert(arr.arr[i])
  *             i = veb.veb.min_val             # <<<<<<<<<<<<<<
@@ -41042,7 +38970,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
  */
     __pyx_v_i = __pyx_v_veb->veb->min_val;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":747
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":747
  *                 veb._insert(arr.arr[i])
  *             i = veb.veb.min_val
  *             for j from 0 <= j < loc.sa_high-loc.sa_low:             # <<<<<<<<<<<<<<
@@ -41052,7 +38980,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
     __pyx_t_4 = (__pyx_v_loc->sa_high - __pyx_v_loc->sa_low);
     for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_4; __pyx_v_j++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":748
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":748
  *             i = veb.veb.min_val
  *             for j from 0 <= j < loc.sa_high-loc.sa_low:
  *                 loc.arr.arr[j] = i             # <<<<<<<<<<<<<<
@@ -41061,7 +38989,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
  */
       (__pyx_v_loc->arr->arr[__pyx_v_j]) = __pyx_v_i;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":749
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":749
  *             for j from 0 <= j < loc.sa_high-loc.sa_low:
  *                 loc.arr.arr[j] = i
  *                 i = veb._findsucc(i)             # <<<<<<<<<<<<<<
@@ -41073,7 +39001,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":750
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":750
  *                 loc.arr.arr[j] = i
  *                 i = veb._findsucc(i)
  *         loc.arr_low = 0             # <<<<<<<<<<<<<<
@@ -41082,7 +39010,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
  */
   __pyx_v_loc->arr_low = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":751
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":751
  *                 i = veb._findsucc(i)
  *         loc.arr_low = 0
  *         loc.arr_high = loc.arr.len             # <<<<<<<<<<<<<<
@@ -41101,7 +39029,7 @@ static void __pyx_f_3_sa_23HieroCachingRuleFactory_sort_phrase_loc(struct __pyx_
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":754
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":754
  * 
  * 
  *     cdef intersect_helper(self, Phrase prefix, Phrase suffix,             # <<<<<<<<<<<<<<
@@ -41136,9 +39064,9 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("intersect_helper", 0);
+  __Pyx_RefNannySetupContext("intersect_helper");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":761
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":761
  *         cdef int* result_ptr
  * 
  *         result_len = 0             # <<<<<<<<<<<<<<
@@ -41147,7 +39075,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_result_len = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":763
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":763
  *         result_len = 0
  * 
  *         if sym_isvar(suffix[0]):             # <<<<<<<<<<<<<<
@@ -41161,7 +39089,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __pyx_t_3 = __pyx_f_3_sa_sym_isvar(__pyx_t_2);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":764
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":764
  * 
  *         if sym_isvar(suffix[0]):
  *             offset_by_one = 1             # <<<<<<<<<<<<<<
@@ -41173,7 +39101,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":766
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":766
  *             offset_by_one = 1
  *         else:
  *             offset_by_one = 0             # <<<<<<<<<<<<<<
@@ -41184,7 +39112,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":768
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":768
  *             offset_by_one = 0
  * 
  *         len_last = len(suffix.getchunk(suffix.arity()))             # <<<<<<<<<<<<<<
@@ -41199,7 +39127,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
@@ -41211,7 +39139,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_len_last = __pyx_t_6;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":770
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":770
  *         len_last = len(suffix.getchunk(suffix.arity()))
  * 
  *         if prefix_loc.arr is None:             # <<<<<<<<<<<<<<
@@ -41221,7 +39149,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __pyx_t_7 = (((PyObject *)__pyx_v_prefix_loc->arr) == Py_None);
   if (__pyx_t_7) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":771
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":771
  * 
  *         if prefix_loc.arr is None:
  *             self.sort_phrase_loc(self.fsa.sa, prefix_loc, prefix)             # <<<<<<<<<<<<<<
@@ -41236,7 +39164,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":772
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":772
  *         if prefix_loc.arr is None:
  *             self.sort_phrase_loc(self.fsa.sa, prefix_loc, prefix)
  *         arr1 = prefix_loc.arr             # <<<<<<<<<<<<<<
@@ -41246,7 +39174,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __Pyx_INCREF(((PyObject *)__pyx_v_prefix_loc->arr));
   __pyx_v_arr1 = __pyx_v_prefix_loc->arr;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":773
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":773
  *             self.sort_phrase_loc(self.fsa.sa, prefix_loc, prefix)
  *         arr1 = prefix_loc.arr
  *         low1 = prefix_loc.arr_low             # <<<<<<<<<<<<<<
@@ -41255,7 +39183,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_low1 = __pyx_v_prefix_loc->arr_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":774
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":774
  *         arr1 = prefix_loc.arr
  *         low1 = prefix_loc.arr_low
  *         high1 = prefix_loc.arr_high             # <<<<<<<<<<<<<<
@@ -41264,7 +39192,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_high1 = __pyx_v_prefix_loc->arr_high;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":775
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":775
  *         low1 = prefix_loc.arr_low
  *         high1 = prefix_loc.arr_high
  *         step1 = prefix_loc.num_subpatterns             # <<<<<<<<<<<<<<
@@ -41273,7 +39201,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_step1 = __pyx_v_prefix_loc->num_subpatterns;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":777
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":777
  *         step1 = prefix_loc.num_subpatterns
  * 
  *         if suffix_loc.arr is None:             # <<<<<<<<<<<<<<
@@ -41283,7 +39211,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __pyx_t_7 = (((PyObject *)__pyx_v_suffix_loc->arr) == Py_None);
   if (__pyx_t_7) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":778
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":778
  * 
  *         if suffix_loc.arr is None:
  *             self.sort_phrase_loc(self.fsa.sa, suffix_loc, suffix)             # <<<<<<<<<<<<<<
@@ -41298,7 +39226,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   __pyx_L5:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":779
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":779
  *         if suffix_loc.arr is None:
  *             self.sort_phrase_loc(self.fsa.sa, suffix_loc, suffix)
  *         arr2 = suffix_loc.arr             # <<<<<<<<<<<<<<
@@ -41308,7 +39236,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __Pyx_INCREF(((PyObject *)__pyx_v_suffix_loc->arr));
   __pyx_v_arr2 = __pyx_v_suffix_loc->arr;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":780
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":780
  *             self.sort_phrase_loc(self.fsa.sa, suffix_loc, suffix)
  *         arr2 = suffix_loc.arr
  *         low2 = suffix_loc.arr_low             # <<<<<<<<<<<<<<
@@ -41317,7 +39245,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_low2 = __pyx_v_suffix_loc->arr_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":781
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":781
  *         arr2 = suffix_loc.arr
  *         low2 = suffix_loc.arr_low
  *         high2 = suffix_loc.arr_high             # <<<<<<<<<<<<<<
@@ -41326,7 +39254,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_high2 = __pyx_v_suffix_loc->arr_high;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":782
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":782
  *         low2 = suffix_loc.arr_low
  *         high2 = suffix_loc.arr_high
  *         step2 = suffix_loc.num_subpatterns             # <<<<<<<<<<<<<<
@@ -41335,7 +39263,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
   __pyx_v_step2 = __pyx_v_suffix_loc->num_subpatterns;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":784
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":784
  *         step2 = suffix_loc.num_subpatterns
  * 
  *         num_subpatterns = prefix.arity()+1             # <<<<<<<<<<<<<<
@@ -41354,7 +39282,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_num_subpatterns = __pyx_t_3;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":786
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":786
  *         num_subpatterns = prefix.arity()+1
  * 
  *         if algorithm == MERGE:             # <<<<<<<<<<<<<<
@@ -41364,7 +39292,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __pyx_t_7 = (__pyx_v_algorithm == __pyx_v_3_sa_MERGE);
   if (__pyx_t_7) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":789
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":789
  *             result_ptr = self.merge_helper(low1, high1, arr1.arr, step1,
  *                                     low2, high2, arr2.arr, step2,
  *                                     offset_by_one, len_last, num_subpatterns, &result_len)             # <<<<<<<<<<<<<<
@@ -41376,7 +39304,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":793
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":793
  *             result_ptr = self.baeza_yates_helper(low1, high1, arr1.arr, step1,
  *                                     low2, high2, arr2.arr, step2,
  *                                     offset_by_one, len_last, num_subpatterns, &result_len)             # <<<<<<<<<<<<<<
@@ -41387,7 +39315,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":795
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":795
  *                                     offset_by_one, len_last, num_subpatterns, &result_len)
  * 
  *         if result_len == 0:             # <<<<<<<<<<<<<<
@@ -41397,7 +39325,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   __pyx_t_7 = (__pyx_v_result_len == 0);
   if (__pyx_t_7) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":796
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":796
  * 
  *         if result_len == 0:
  *             free(result_ptr)             # <<<<<<<<<<<<<<
@@ -41406,7 +39334,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
     free(__pyx_v_result_ptr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":797
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":797
  *         if result_len == 0:
  *             free(result_ptr)
  *             return None             # <<<<<<<<<<<<<<
@@ -41421,7 +39349,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":799
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":799
  *             return None
  *         else:
  *             result = IntList()             # <<<<<<<<<<<<<<
@@ -41433,7 +39361,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
     __pyx_v_result = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":800
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":800
  *         else:
  *             result = IntList()
  *             free(result.arr)             # <<<<<<<<<<<<<<
@@ -41442,7 +39370,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
     free(__pyx_v_result->arr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":801
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":801
  *             result = IntList()
  *             free(result.arr)
  *             result.arr = result_ptr             # <<<<<<<<<<<<<<
@@ -41451,7 +39379,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
     __pyx_v_result->arr = __pyx_v_result_ptr;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":802
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":802
  *             free(result.arr)
  *             result.arr = result_ptr
  *             result.len = result_len             # <<<<<<<<<<<<<<
@@ -41460,7 +39388,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
     __pyx_v_result->len = __pyx_v_result_len;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":803
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":803
  *             result.arr = result_ptr
  *             result.len = result_len
  *             result.size = result_len             # <<<<<<<<<<<<<<
@@ -41469,7 +39397,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  */
     __pyx_v_result->size = __pyx_v_result_len;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":804
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":804
  *             result.len = result_len
  *             result.size = result_len
  *             return PhraseLocation(arr_low=0, arr_high=result_len, arr=result, num_subpatterns=num_subpatterns)             # <<<<<<<<<<<<<<
@@ -41489,7 +39417,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
     __Pyx_GOTREF(__pyx_t_4);
     if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__num_subpatterns), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __pyx_r = __pyx_t_4;
@@ -41515,7 +39443,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":806
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":806
  *             return PhraseLocation(arr_low=0, arr_high=result_len, arr=result, num_subpatterns=num_subpatterns)
  * 
  *     cdef loc2str(self, PhraseLocation loc):             # <<<<<<<<<<<<<<
@@ -41523,7 +39451,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_intersect_helper(struct
  *         result = "{"
  */
 
-static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_loc) {
+static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_loc) {
   int __pyx_v_i;
   int __pyx_v_j;
   PyObject *__pyx_v_result = NULL;
@@ -41536,9 +39464,9 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("loc2str", 0);
+  __Pyx_RefNannySetupContext("loc2str");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":808
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":808
  *     cdef loc2str(self, PhraseLocation loc):
  *         cdef int i, j
  *         result = "{"             # <<<<<<<<<<<<<<
@@ -41548,7 +39476,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_116));
   __pyx_v_result = ((PyObject *)__pyx_kp_s_116);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":809
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":809
  *         cdef int i, j
  *         result = "{"
  *         i = 0             # <<<<<<<<<<<<<<
@@ -41557,7 +39485,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
  */
   __pyx_v_i = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":810
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":810
  *         result = "{"
  *         i = 0
  *         while i < loc.arr_high:             # <<<<<<<<<<<<<<
@@ -41568,7 +39496,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
     __pyx_t_1 = (__pyx_v_i < __pyx_v_loc->arr_high);
     if (!__pyx_t_1) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":811
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":811
  *         i = 0
  *         while i < loc.arr_high:
  *             result = result + "("             # <<<<<<<<<<<<<<
@@ -41581,7 +39509,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
     __pyx_v_result = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":812
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":812
  *         while i < loc.arr_high:
  *             result = result + "("
  *             for j from i <= j < i + loc.num_subpatterns:             # <<<<<<<<<<<<<<
@@ -41591,7 +39519,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
     __pyx_t_3 = (__pyx_v_i + __pyx_v_loc->num_subpatterns);
     for (__pyx_v_j = __pyx_v_i; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":813
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":813
  *             result = result + "("
  *             for j from i <= j < i + loc.num_subpatterns:
  *                 result = result + ("%d " %loc.arr[j])             # <<<<<<<<<<<<<<
@@ -41611,7 +39539,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
       __pyx_t_2 = 0;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":814
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":814
  *             for j from i <= j < i + loc.num_subpatterns:
  *                 result = result + ("%d " %loc.arr[j])
  *             result = result + ")"             # <<<<<<<<<<<<<<
@@ -41624,7 +39552,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
     __pyx_v_result = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":815
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":815
  *                 result = result + ("%d " %loc.arr[j])
  *             result = result + ")"
  *             i = i + loc.num_subpatterns             # <<<<<<<<<<<<<<
@@ -41634,7 +39562,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
     __pyx_v_i = (__pyx_v_i + __pyx_v_loc->num_subpatterns);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":816
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":816
  *             result = result + ")"
  *             i = i + loc.num_subpatterns
  *         result = result + "}"             # <<<<<<<<<<<<<<
@@ -41647,7 +39575,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
   __pyx_v_result = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":817
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":817
  *             i = i + loc.num_subpatterns
  *         result = result + "}"
  *         return result             # <<<<<<<<<<<<<<
@@ -41673,7 +39601,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_loc2str(CYTHON_UNUSED st
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":819
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":819
  *         return result
  * 
  *     cdef PhraseLocation intersect(self, prefix_node, suffix_node, Phrase phrase):             # <<<<<<<<<<<<<<
@@ -41687,7 +39615,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_prefix_loc = 0;
   struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_suffix_loc = 0;
   struct __pyx_obj_3_sa_PhraseLocation *__pyx_v_result = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_intersect_method = NULL;
+  PyObject *__pyx_v_intersect_method = NULL;
   struct __pyx_obj_3_sa_PhraseLocation *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -41697,9 +39625,9 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("intersect", 0);
+  __Pyx_RefNannySetupContext("intersect");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":823
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":823
  *         cdef PhraseLocation prefix_loc, suffix_loc, result
  * 
  *         prefix = prefix_node.phrase             # <<<<<<<<<<<<<<
@@ -41712,7 +39640,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_v_prefix = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":824
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":824
  * 
  *         prefix = prefix_node.phrase
  *         suffix = suffix_node.phrase             # <<<<<<<<<<<<<<
@@ -41725,7 +39653,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_v_suffix = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":825
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":825
  *         prefix = prefix_node.phrase
  *         suffix = suffix_node.phrase
  *         prefix_loc = prefix_node.phrase_location             # <<<<<<<<<<<<<<
@@ -41738,7 +39666,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_v_prefix_loc = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":826
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":826
  *         suffix = suffix_node.phrase
  *         prefix_loc = prefix_node.phrase_location
  *         suffix_loc = suffix_node.phrase_location             # <<<<<<<<<<<<<<
@@ -41751,7 +39679,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_v_suffix_loc = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":828
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":828
  *         suffix_loc = suffix_node.phrase_location
  * 
  *         result = self.get_precomputed_collocation(phrase)             # <<<<<<<<<<<<<<
@@ -41761,7 +39689,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s_119); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_INCREF(((PyObject *)__pyx_v_phrase));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_phrase));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_phrase));
@@ -41773,7 +39701,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_v_result = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":829
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":829
  * 
  *         result = self.get_precomputed_collocation(phrase)
  *         if result is not None:             # <<<<<<<<<<<<<<
@@ -41783,7 +39711,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_t_4 = (((PyObject *)__pyx_v_result) != Py_None);
   if (__pyx_t_4) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":830
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":830
  *         result = self.get_precomputed_collocation(phrase)
  *         if result is not None:
  *             intersect_method = "precomputed"             # <<<<<<<<<<<<<<
@@ -41796,7 +39724,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":832
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":832
  *             intersect_method = "precomputed"
  * 
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -41806,7 +39734,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   __pyx_t_4 = (((PyObject *)__pyx_v_result) == Py_None);
   if (__pyx_t_4) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":833
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":833
  * 
  *         if result is None:
  *             if self.use_baeza_yates:             # <<<<<<<<<<<<<<
@@ -41815,7 +39743,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
  */
     if (__pyx_v_self->use_baeza_yates) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":834
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":834
  *         if result is None:
  *             if self.use_baeza_yates:
  *                 result = self.intersect_helper(prefix, suffix, prefix_loc, suffix_loc, BAEZA_YATES)             # <<<<<<<<<<<<<<
@@ -41829,7 +39757,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
       __pyx_v_result = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":835
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":835
  *             if self.use_baeza_yates:
  *                 result = self.intersect_helper(prefix, suffix, prefix_loc, suffix_loc, BAEZA_YATES)
  *                 intersect_method="double binary"             # <<<<<<<<<<<<<<
@@ -41843,7 +39771,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":837
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":837
  *                 intersect_method="double binary"
  *             else:
  *                 result = self.intersect_helper(prefix, suffix, prefix_loc, suffix_loc, MERGE)             # <<<<<<<<<<<<<<
@@ -41857,7 +39785,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
       __pyx_v_result = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":838
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":838
  *             else:
  *                 result = self.intersect_helper(prefix, suffix, prefix_loc, suffix_loc, MERGE)
  *                 intersect_method="merge"             # <<<<<<<<<<<<<<
@@ -41873,7 +39801,7 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   }
   __pyx_L4:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":839
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":839
  *                 result = self.intersect_helper(prefix, suffix, prefix_loc, suffix_loc, MERGE)
  *                 intersect_method="merge"
  *         return result             # <<<<<<<<<<<<<<
@@ -41905,22 +39833,56 @@ static struct __pyx_obj_3_sa_PhraseLocation *__pyx_f_3_sa_23HieroCachingRuleFact
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_13advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_13advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":841
+ *         return result
+ * 
+ *     def advance(self, frontier, res, fwords):             # <<<<<<<<<<<<<<
+ *         cdef unsigned na
+ *         nf = []
+ */
+
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_6advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_frontier = 0;
   PyObject *__pyx_v_res = 0;
   PyObject *__pyx_v_fwords = 0;
-  PyObject *__pyx_r = 0;
+  unsigned int __pyx_v_na;
+  PyObject *__pyx_v_nf = NULL;
+  PyObject *__pyx_v_toskip = NULL;
+  PyObject *__pyx_v_i = NULL;
+  PyObject *__pyx_v_alt = NULL;
+  PyObject *__pyx_v_pathlen = NULL;
+  PyObject *__pyx_v_spanlen = NULL;
+  PyObject *__pyx_v_ni = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("advance (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *(*__pyx_t_3)(PyObject *);
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  int __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  unsigned int __pyx_t_16;
+  int __pyx_t_17;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__frontier,&__pyx_n_s__res,&__pyx_n_s__fwords,0};
+  __Pyx_RefNannySetupContext("advance");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__frontier,&__pyx_n_s__res,&__pyx_n_s__fwords,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -41928,23 +39890,26 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_13advance(PyObject *__p
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__frontier)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__frontier);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__res)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__res);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("advance", 1, 3, 3, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("advance", 1, 3, 3, 2); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "advance") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -41965,53 +39930,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_13advance(PyObject *__p
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v_frontier, __pyx_v_res, __pyx_v_fwords);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":841
- *         return result
- * 
- *     def advance(self, frontier, res, fwords):             # <<<<<<<<<<<<<<
- *         cdef unsigned na
- *         nf = []
- */
-
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_frontier, PyObject *__pyx_v_res, PyObject *__pyx_v_fwords) {
-  unsigned int __pyx_v_na;
-  PyObject *__pyx_v_nf = NULL;
-  PyObject *__pyx_v_toskip = NULL;
-  PyObject *__pyx_v_i = NULL;
-  PyObject *__pyx_v_alt = NULL;
-  PyObject *__pyx_v_pathlen = NULL;
-  PyObject *__pyx_v_spanlen = NULL;
-  PyObject *__pyx_v_ni = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  Py_ssize_t __pyx_t_2;
-  PyObject *(*__pyx_t_3)(PyObject *);
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *(*__pyx_t_8)(PyObject *);
-  PyObject *__pyx_t_9 = NULL;
-  PyObject *__pyx_t_10 = NULL;
-  PyObject *__pyx_t_11 = NULL;
-  int __pyx_t_12;
-  Py_ssize_t __pyx_t_13;
-  int __pyx_t_14;
-  int __pyx_t_15;
-  unsigned int __pyx_t_16;
-  int __pyx_t_17;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("advance", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":843
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":843
  *     def advance(self, frontier, res, fwords):
  *         cdef unsigned na
  *         nf = []             # <<<<<<<<<<<<<<
@@ -42019,11 +39939,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
  *             spanlen = fwords[i][alt][2]
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_nf = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":844
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":844
  *         cdef unsigned na
  *         nf = []
  *         for (toskip, (i, alt, pathlen)) in frontier:             # <<<<<<<<<<<<<<
@@ -42039,20 +39959,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -42066,74 +39978,66 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
       PyObject* sequence = __pyx_t_4;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      Py_ssize_t size = Py_SIZE(sequence);
-      #else
-      Py_ssize_t size = PySequence_Size(sequence);
-      #endif
-      if (unlikely(size != 2)) {
-        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
+        if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+          if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
       } else {
+        if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+          if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
       }
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_6);
-      #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    } else
-    {
+    } else {
       Py_ssize_t index = -1;
       __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
-      index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
+      index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
+      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
       if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      goto __pyx_L6_unpacking_done;
-      __pyx_L5_unpacking_failed:;
+      goto __pyx_L9_unpacking_done;
+      __pyx_L8_unpacking_failed:;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_8 = NULL;
-      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
       {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_L6_unpacking_done:;
+      __pyx_L9_unpacking_done:;
     }
     __Pyx_XDECREF(__pyx_v_toskip);
     __pyx_v_toskip = __pyx_t_5;
     __pyx_t_5 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      Py_ssize_t size = Py_SIZE(sequence);
-      #else
-      Py_ssize_t size = PySequence_Size(sequence);
-      #endif
-      if (unlikely(size != 3)) {
-        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
-        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
+        if (unlikely(PyTuple_GET_SIZE(sequence) != 3)) {
+          if (PyTuple_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
         __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); 
       } else {
+        if (unlikely(PyList_GET_SIZE(sequence) != 3)) {
+          if (PyList_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
         __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
         __pyx_t_10 = PyList_GET_ITEM(sequence, 2); 
@@ -42141,35 +40045,28 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
       __Pyx_INCREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_t_10);
-      #else
-      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    } else
-    {
+    } else {
       Py_ssize_t index = -1;
       __pyx_t_11 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext;
-      index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed;
+      index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L10_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_7);
-      index = 1; __pyx_t_9 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L7_unpacking_failed;
+      index = 1; __pyx_t_9 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L10_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      index = 2; __pyx_t_10 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L7_unpacking_failed;
+      index = 2; __pyx_t_10 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L10_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_10);
       if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_11), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-      goto __pyx_L8_unpacking_done;
-      __pyx_L7_unpacking_failed:;
+      goto __pyx_L11_unpacking_done;
+      __pyx_L10_unpacking_failed:;
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-      __pyx_t_8 = NULL;
-      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
       {__pyx_filename = __pyx_f[8]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_L8_unpacking_done:;
+      __pyx_L11_unpacking_done:;
     }
     __Pyx_XDECREF(__pyx_v_i);
     __pyx_v_i = __pyx_t_7;
@@ -42181,7 +40078,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_v_pathlen = __pyx_t_10;
     __pyx_t_10 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":845
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":845
  *         nf = []
  *         for (toskip, (i, alt, pathlen)) in frontier:
  *             spanlen = fwords[i][alt][2]             # <<<<<<<<<<<<<<
@@ -42200,19 +40097,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_v_spanlen = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":846
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":846
  *         for (toskip, (i, alt, pathlen)) in frontier:
  *             spanlen = fwords[i][alt][2]
  *             if (toskip == 0):             # <<<<<<<<<<<<<<
  *                 res.append((i, alt, pathlen))
  *             ni = i + spanlen
  */
-    __pyx_t_4 = PyObject_RichCompare(__pyx_v_toskip, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_v_toskip, __pyx_int_0, Py_EQ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_12) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":847
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":847
  *             spanlen = fwords[i][alt][2]
  *             if (toskip == 0):
  *                 res.append((i, alt, pathlen))             # <<<<<<<<<<<<<<
@@ -42220,7 +40118,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
  *             if (ni < len(fwords) and (pathlen + 1) < self.max_initial_size):
  */
       __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       __Pyx_INCREF(__pyx_v_i);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_i);
       __Pyx_GIVEREF(__pyx_v_i);
@@ -42234,11 +40132,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      goto __pyx_L9;
+      goto __pyx_L12;
     }
-    __pyx_L9:;
+    __pyx_L12:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":848
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":848
  *             if (toskip == 0):
  *                 res.append((i, alt, pathlen))
  *             ni = i + spanlen             # <<<<<<<<<<<<<<
@@ -42251,7 +40149,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_v_ni = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":849
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":849
  *                 res.append((i, alt, pathlen))
  *             ni = i + spanlen
  *             if (ni < len(fwords) and (pathlen + 1) < self.max_initial_size):             # <<<<<<<<<<<<<<
@@ -42261,16 +40159,18 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_t_13 = PyObject_Length(__pyx_v_fwords); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_v_ni, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_v_ni, __pyx_t_6, Py_LT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_12) {
       __pyx_t_4 = PyNumber_Add(__pyx_v_pathlen, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_6 = PyInt_FromLong(__pyx_v_self->max_initial_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_initial_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_LT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -42281,7 +40181,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     }
     if (__pyx_t_15) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":850
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":850
  *             ni = i + spanlen
  *             if (ni < len(fwords) and (pathlen + 1) < self.max_initial_size):
  *                 for na in range(len(fwords[ni])):             # <<<<<<<<<<<<<<
@@ -42295,13 +40195,16 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
       for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_13; __pyx_t_16+=1) {
         __pyx_v_na = __pyx_t_16;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":851
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":851
  *             if (ni < len(fwords) and (pathlen + 1) < self.max_initial_size):
  *                 for na in range(len(fwords[ni])):
  *                     nf.append((toskip - 1, (ni, na, pathlen + 1)))             # <<<<<<<<<<<<<<
  *         if (len(nf) > 0):
  *             return self.advance(nf, res, fwords)
  */
+        if (unlikely(((PyObject *)__pyx_v_nf) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_5 = PyNumber_Subtract(__pyx_v_toskip, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_na); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -42309,7 +40212,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
         __pyx_t_4 = PyNumber_Add(__pyx_v_pathlen, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_10);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_10));
         __Pyx_INCREF(__pyx_v_ni);
         PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_ni);
         __Pyx_GIVEREF(__pyx_v_ni);
@@ -42320,7 +40223,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
         __pyx_t_6 = 0;
         __pyx_t_4 = 0;
         __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_4));
         PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
         __Pyx_GIVEREF(__pyx_t_5);
         PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_10));
@@ -42330,24 +40233,27 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
         __pyx_t_17 = PyList_Append(__pyx_v_nf, ((PyObject *)__pyx_t_4)); if (unlikely(__pyx_t_17 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
       }
-      goto __pyx_L10;
+      goto __pyx_L13;
     }
-    __pyx_L10:;
+    __pyx_L13:;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":852
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":852
  *                 for na in range(len(fwords[ni])):
  *                     nf.append((toskip - 1, (ni, na, pathlen + 1)))
  *         if (len(nf) > 0):             # <<<<<<<<<<<<<<
  *             return self.advance(nf, res, fwords)
  *         else:
  */
-  __pyx_t_2 = PyList_GET_SIZE(((PyObject *)__pyx_v_nf)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(((PyObject *)__pyx_v_nf) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
+  __pyx_t_2 = PyList_GET_SIZE(((PyObject *)__pyx_v_nf)); 
   __pyx_t_15 = (__pyx_t_2 > 0);
   if (__pyx_t_15) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":853
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":853
  *                     nf.append((toskip - 1, (ni, na, pathlen + 1)))
  *         if (len(nf) > 0):
  *             return self.advance(nf, res, fwords)             # <<<<<<<<<<<<<<
@@ -42355,10 +40261,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
  *             return res
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__advance); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__advance); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __Pyx_INCREF(((PyObject *)__pyx_v_nf));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_nf));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_nf));
@@ -42375,11 +40281,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_r = __pyx_t_10;
     __pyx_t_10 = 0;
     goto __pyx_L0;
-    goto __pyx_L13;
+    goto __pyx_L16;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":855
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":855
  *             return self.advance(nf, res, fwords)
  *         else:
  *             return res             # <<<<<<<<<<<<<<
@@ -42391,7 +40297,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
     __pyx_r = __pyx_v_res;
     goto __pyx_L0;
   }
-  __pyx_L13:;
+  __pyx_L16:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
@@ -42419,9 +40325,16 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_12advance(struct __pyx_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_15get_all_nodes_isteps_away(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_15get_all_nodes_isteps_away(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":857
+ *             return res
+ * 
+ *     def get_all_nodes_isteps_away(self, skip, i, spanlen, pathlen, fwords, next_states, reachable_buffer):             # <<<<<<<<<<<<<<
+ *         cdef unsigned alt_it
+ *         frontier = []
+ */
+
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_7get_all_nodes_isteps_away(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_7get_all_nodes_isteps_away(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_skip = 0;
   PyObject *__pyx_v_i = 0;
   PyObject *__pyx_v_spanlen = 0;
@@ -42429,16 +40342,39 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_15get_all_nodes_isteps_
   PyObject *__pyx_v_fwords = 0;
   PyObject *__pyx_v_next_states = 0;
   PyObject *__pyx_v_reachable_buffer = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_frontier = NULL;
+  PyObject *__pyx_v_key = NULL;
+  PyObject *__pyx_v_reachable = NULL;
+  PyObject *__pyx_v_nextreachable = NULL;
+  PyObject *__pyx_v_next_id = NULL;
+  PyObject *__pyx_v_jump = NULL;
+  Py_ssize_t __pyx_v_alt_id;
+  PyObject *__pyx_v_newel = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_all_nodes_isteps_away (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  Py_ssize_t __pyx_t_7;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  Py_ssize_t __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__skip,&__pyx_n_s__i,&__pyx_n_s__spanlen,&__pyx_n_s__pathlen,&__pyx_n_s__fwords,&__pyx_n_s__next_states,&__pyx_n_s__reachable_buffer,0};
+  __Pyx_RefNannySetupContext("get_all_nodes_isteps_away");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__skip,&__pyx_n_s__i,&__pyx_n_s__spanlen,&__pyx_n_s__pathlen,&__pyx_n_s__fwords,&__pyx_n_s__next_states,&__pyx_n_s__reachable_buffer,0};
     PyObject* values[7] = {0,0,0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
@@ -42450,43 +40386,50 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_15get_all_nodes_isteps_
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__i)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__i);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_all_nodes_isteps_away", 1, 7, 7, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__spanlen)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__spanlen);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_all_nodes_isteps_away", 1, 7, 7, 2); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pathlen)) != 0)) kw_args--;
+        values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pathlen);
+        if (likely(values[3])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_all_nodes_isteps_away", 1, 7, 7, 3); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
-        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords)) != 0)) kw_args--;
+        values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords);
+        if (likely(values[4])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_all_nodes_isteps_away", 1, 7, 7, 4); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
-        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__next_states)) != 0)) kw_args--;
+        values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__next_states);
+        if (likely(values[5])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_all_nodes_isteps_away", 1, 7, 7, 5); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  6:
-        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__reachable_buffer)) != 0)) kw_args--;
+        values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__reachable_buffer);
+        if (likely(values[6])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_all_nodes_isteps_away", 1, 7, 7, 6); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_all_nodes_isteps_away") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "get_all_nodes_isteps_away") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
       goto __pyx_L5_argtuple_error;
@@ -42515,50 +40458,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_15get_all_nodes_isteps_
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_away(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v_skip, __pyx_v_i, __pyx_v_spanlen, __pyx_v_pathlen, __pyx_v_fwords, __pyx_v_next_states, __pyx_v_reachable_buffer);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":857
- *             return res
- * 
- *     def get_all_nodes_isteps_away(self, skip, i, spanlen, pathlen, fwords, next_states, reachable_buffer):             # <<<<<<<<<<<<<<
- *         cdef unsigned alt_it
- *         frontier = []
- */
-
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_away(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_skip, PyObject *__pyx_v_i, PyObject *__pyx_v_spanlen, PyObject *__pyx_v_pathlen, PyObject *__pyx_v_fwords, PyObject *__pyx_v_next_states, PyObject *__pyx_v_reachable_buffer) {
-  PyObject *__pyx_v_frontier = NULL;
-  PyObject *__pyx_v_key = NULL;
-  PyObject *__pyx_v_reachable = NULL;
-  PyObject *__pyx_v_nextreachable = NULL;
-  PyObject *__pyx_v_next_id = NULL;
-  PyObject *__pyx_v_jump = NULL;
-  PyObject *__pyx_v_alt_id = NULL;
-  PyObject *__pyx_v_newel = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_t_5;
-  PyObject *(*__pyx_t_6)(PyObject *);
-  Py_ssize_t __pyx_t_7;
-  PyObject *(*__pyx_t_8)(PyObject *);
-  PyObject *__pyx_t_9 = NULL;
-  PyObject *__pyx_t_10 = NULL;
-  Py_ssize_t __pyx_t_11;
-  PyObject *(*__pyx_t_12)(PyObject *);
-  PyObject *__pyx_t_13 = NULL;
-  int __pyx_t_14;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_all_nodes_isteps_away", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":859
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":859
  *     def get_all_nodes_isteps_away(self, skip, i, spanlen, pathlen, fwords, next_states, reachable_buffer):
  *         cdef unsigned alt_it
  *         frontier = []             # <<<<<<<<<<<<<<
@@ -42566,11 +40467,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
  *             return frontier
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_frontier = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":860
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":860
  *         cdef unsigned alt_it
  *         frontier = []
  *         if (i+spanlen+skip >= len(next_states)):             # <<<<<<<<<<<<<<
@@ -42585,14 +40486,15 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
   __pyx_t_3 = PyObject_Length(__pyx_v_next_states); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":861
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":861
  *         frontier = []
  *         if (i+spanlen+skip >= len(next_states)):
  *             return frontier             # <<<<<<<<<<<<<<
@@ -42603,11 +40505,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
     __Pyx_INCREF(((PyObject *)__pyx_v_frontier));
     __pyx_r = ((PyObject *)__pyx_v_frontier);
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":862
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":862
  *         if (i+spanlen+skip >= len(next_states)):
  *             return frontier
  *         key = tuple([i,spanlen])             # <<<<<<<<<<<<<<
@@ -42615,7 +40517,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
  *         if (key in reachable_buffer):
  */
   __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
   __Pyx_INCREF(__pyx_v_i);
   PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_i);
   __Pyx_GIVEREF(__pyx_v_i);
@@ -42628,7 +40530,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":863
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":863
  *             return frontier
  *         key = tuple([i,spanlen])
  *         reachable = []             # <<<<<<<<<<<<<<
@@ -42636,21 +40538,21 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
  *             reachable = reachable_buffer[key]
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_reachable = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":864
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":864
  *         key = tuple([i,spanlen])
  *         reachable = []
  *         if (key in reachable_buffer):             # <<<<<<<<<<<<<<
  *             reachable = reachable_buffer[key]
  *         else:
  */
-  __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_v_key), __pyx_v_reachable_buffer, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PySequence_Contains(__pyx_v_reachable_buffer, ((PyObject *)__pyx_v_key)))); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":865
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":865
  *         reachable = []
  *         if (key in reachable_buffer):
  *             reachable = reachable_buffer[key]             # <<<<<<<<<<<<<<
@@ -42662,21 +40564,21 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
     __Pyx_DECREF(__pyx_v_reachable);
     __pyx_v_reachable = __pyx_t_1;
     __pyx_t_1 = 0;
-    goto __pyx_L4;
+    goto __pyx_L7;
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":867
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":867
  *             reachable = reachable_buffer[key]
  *         else:
  *             reachable = self.reachable(fwords, i, spanlen)             # <<<<<<<<<<<<<<
  *             reachable_buffer[key] = reachable
  *         for nextreachable in reachable:
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__reachable); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__reachable); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __Pyx_INCREF(__pyx_v_fwords);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_fwords);
     __Pyx_GIVEREF(__pyx_v_fwords);
@@ -42694,7 +40596,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
     __pyx_v_reachable = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":868
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":868
  *         else:
  *             reachable = self.reachable(fwords, i, spanlen)
  *             reachable_buffer[key] = reachable             # <<<<<<<<<<<<<<
@@ -42703,9 +40605,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
  */
     if (PyObject_SetItem(__pyx_v_reachable_buffer, ((PyObject *)__pyx_v_key), __pyx_v_reachable) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L4:;
+  __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":869
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":869
  *             reachable = self.reachable(fwords, i, spanlen)
  *             reachable_buffer[key] = reachable
  *         for nextreachable in reachable:             # <<<<<<<<<<<<<<
@@ -42721,20 +40623,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
     __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_2)) {
+    if (PyList_CheckExact(__pyx_t_2)) {
       if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_2)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++;
+    } else if (PyTuple_CheckExact(__pyx_t_2)) {
       if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++;
     } else {
       __pyx_t_4 = __pyx_t_6(__pyx_t_2);
       if (unlikely(!__pyx_t_4)) {
@@ -42750,7 +40644,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
     __pyx_v_nextreachable = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":870
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":870
  *             reachable_buffer[key] = reachable
  *         for nextreachable in reachable:
  *             for next_id in next_states[nextreachable]:             # <<<<<<<<<<<<<<
@@ -42769,20 +40663,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     for (;;) {
-      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_1)) {
+      if (PyList_CheckExact(__pyx_t_1)) {
         if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
-      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_1)) {
+        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++;
+      } else if (PyTuple_CheckExact(__pyx_t_1)) {
         if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
+        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++;
       } else {
         __pyx_t_4 = __pyx_t_8(__pyx_t_1);
         if (unlikely(!__pyx_t_4)) {
@@ -42798,17 +40684,17 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
       __pyx_v_next_id = __pyx_t_4;
       __pyx_t_4 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":871
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":871
  *         for nextreachable in reachable:
  *             for next_id in next_states[nextreachable]:
  *                 jump = self.shortest(fwords,i,next_id)             # <<<<<<<<<<<<<<
  *                 if jump < skip:
  *                     continue
  */
-      __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__shortest); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shortest); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_9));
       __Pyx_INCREF(__pyx_v_fwords);
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_fwords);
       __Pyx_GIVEREF(__pyx_v_fwords);
@@ -42826,31 +40712,32 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
       __pyx_v_jump = __pyx_t_10;
       __pyx_t_10 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":872
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":872
  *             for next_id in next_states[nextreachable]:
  *                 jump = self.shortest(fwords,i,next_id)
  *                 if jump < skip:             # <<<<<<<<<<<<<<
  *                     continue
  *                 if pathlen+jump <= self.max_initial_size:
  */
-      __pyx_t_10 = PyObject_RichCompare(__pyx_v_jump, __pyx_v_skip, Py_LT); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_RichCompare(__pyx_v_jump, __pyx_v_skip, Py_LT); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       if (__pyx_t_5) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":873
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":873
  *                 jump = self.shortest(fwords,i,next_id)
  *                 if jump < skip:
  *                     continue             # <<<<<<<<<<<<<<
  *                 if pathlen+jump <= self.max_initial_size:
  *                     for alt_id in range(len(fwords[next_id])):
  */
-        goto __pyx_L7_continue;
-        goto __pyx_L9;
+        goto __pyx_L10_continue;
+        goto __pyx_L12;
       }
-      __pyx_L9:;
+      __pyx_L12:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":874
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":874
  *                 if jump < skip:
  *                     continue
  *                 if pathlen+jump <= self.max_initial_size:             # <<<<<<<<<<<<<<
@@ -42859,16 +40746,17 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
  */
       __pyx_t_10 = PyNumber_Add(__pyx_v_pathlen, __pyx_v_jump); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_10);
-      __pyx_t_9 = PyInt_FromLong(__pyx_v_self->max_initial_size); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_initial_size); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_4 = PyObject_RichCompare(__pyx_t_10, __pyx_t_9, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_RichCompare(__pyx_t_10, __pyx_t_9, Py_LE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_5) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":875
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":875
  *                     continue
  *                 if pathlen+jump <= self.max_initial_size:
  *                     for alt_id in range(len(fwords[next_id])):             # <<<<<<<<<<<<<<
@@ -42879,56 +40767,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_11 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_9);
-        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
-        __Pyx_GIVEREF(__pyx_t_4);
-        __pyx_t_4 = 0;
-        __pyx_t_4 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-        if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
-          __pyx_t_9 = __pyx_t_4; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
-          __pyx_t_12 = NULL;
-        } else {
-          __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_9);
-          __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext;
-        }
-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        for (;;) {
-          if (!__pyx_t_12 && PyList_CheckExact(__pyx_t_9)) {
-            if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_4 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #else
-            __pyx_t_4 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #endif
-          } else if (!__pyx_t_12 && PyTuple_CheckExact(__pyx_t_9)) {
-            if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #else
-            __pyx_t_4 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #endif
-          } else {
-            __pyx_t_4 = __pyx_t_12(__pyx_t_9);
-            if (unlikely(!__pyx_t_4)) {
-              if (PyErr_Occurred()) {
-                if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-                else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              }
-              break;
-            }
-            __Pyx_GOTREF(__pyx_t_4);
-          }
-          __Pyx_XDECREF(__pyx_v_alt_id);
-          __pyx_v_alt_id = __pyx_t_4;
-          __pyx_t_4 = 0;
+        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+          __pyx_v_alt_id = __pyx_t_12;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":876
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":876
  *                 if pathlen+jump <= self.max_initial_size:
  *                     for alt_id in range(len(fwords[next_id])):
  *                         if (fwords[next_id][alt_id][0] != EPSILON):             # <<<<<<<<<<<<<<
@@ -42937,95 +40779,102 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
  */
           __pyx_t_4 = PyObject_GetItem(__pyx_v_fwords, __pyx_v_next_id); if (!__pyx_t_4) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_10 = PyObject_GetItem(__pyx_t_4, __pyx_v_alt_id); if (!__pyx_t_10) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_10);
+          __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_4, __pyx_v_alt_id, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_9) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_10, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_9, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_4);
-          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          __pyx_t_10 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __pyx_t_9 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_9);
+          __pyx_t_10 = PyObject_RichCompare(__pyx_t_4, __pyx_t_9, Py_NE); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __pyx_t_13 = PyObject_RichCompare(__pyx_t_4, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
           if (__pyx_t_5) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":877
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":877
  *                     for alt_id in range(len(fwords[next_id])):
  *                         if (fwords[next_id][alt_id][0] != EPSILON):
  *                             newel = (next_id,alt_id,pathlen+jump)             # <<<<<<<<<<<<<<
  *                             if newel not in frontier:
  *                                 frontier.append((next_id,alt_id,pathlen+jump))
  */
-            __pyx_t_13 = PyNumber_Add(__pyx_v_pathlen, __pyx_v_jump); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_13);
-            __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_alt_id); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_10);
+            __pyx_t_9 = PyNumber_Add(__pyx_v_pathlen, __pyx_v_jump); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_GOTREF(__pyx_t_9);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_4));
             __Pyx_INCREF(__pyx_v_next_id);
-            PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_next_id);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_next_id);
             __Pyx_GIVEREF(__pyx_v_next_id);
-            __Pyx_INCREF(__pyx_v_alt_id);
-            PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_alt_id);
-            __Pyx_GIVEREF(__pyx_v_alt_id);
-            PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_13);
-            __Pyx_GIVEREF(__pyx_t_13);
-            __pyx_t_13 = 0;
-            __Pyx_XDECREF(((PyObject *)__pyx_v_newel));
-            __pyx_v_newel = __pyx_t_10;
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_10);
+            __Pyx_GIVEREF(__pyx_t_10);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_9);
+            __Pyx_GIVEREF(__pyx_t_9);
             __pyx_t_10 = 0;
+            __pyx_t_9 = 0;
+            __Pyx_XDECREF(((PyObject *)__pyx_v_newel));
+            __pyx_v_newel = __pyx_t_4;
+            __pyx_t_4 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":878
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":878
  *                         if (fwords[next_id][alt_id][0] != EPSILON):
  *                             newel = (next_id,alt_id,pathlen+jump)
  *                             if newel not in frontier:             # <<<<<<<<<<<<<<
  *                                 frontier.append((next_id,alt_id,pathlen+jump))
  *         return frontier
  */
-            __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_v_newel), ((PyObject *)__pyx_v_frontier), Py_NE)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_5 = (__Pyx_NegateNonNeg(PySequence_Contains(((PyObject *)__pyx_v_frontier), ((PyObject *)__pyx_v_newel)))); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             if (__pyx_t_5) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":879
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":879
  *                             newel = (next_id,alt_id,pathlen+jump)
  *                             if newel not in frontier:
  *                                 frontier.append((next_id,alt_id,pathlen+jump))             # <<<<<<<<<<<<<<
  *         return frontier
  * 
  */
-              __pyx_t_10 = PyNumber_Add(__pyx_v_pathlen, __pyx_v_jump); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_10);
-              __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_13);
+              if (unlikely(((PyObject *)__pyx_v_frontier) == Py_None)) {
+                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+              }
+              __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_alt_id); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_9 = PyNumber_Add(__pyx_v_pathlen, __pyx_v_jump); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_GOTREF(__pyx_t_9);
+              __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_GOTREF(((PyObject *)__pyx_t_10));
               __Pyx_INCREF(__pyx_v_next_id);
-              PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_next_id);
+              PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_next_id);
               __Pyx_GIVEREF(__pyx_v_next_id);
-              __Pyx_INCREF(__pyx_v_alt_id);
-              PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_alt_id);
-              __Pyx_GIVEREF(__pyx_v_alt_id);
-              PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10);
-              __Pyx_GIVEREF(__pyx_t_10);
-              __pyx_t_10 = 0;
-              __pyx_t_14 = PyList_Append(__pyx_v_frontier, ((PyObject *)__pyx_t_13)); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
-              goto __pyx_L14;
+              PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_9);
+              __Pyx_GIVEREF(__pyx_t_9);
+              __pyx_t_4 = 0;
+              __pyx_t_9 = 0;
+              __pyx_t_13 = PyList_Append(__pyx_v_frontier, ((PyObject *)__pyx_t_10)); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+              goto __pyx_L17;
             }
-            __pyx_L14:;
-            goto __pyx_L13;
+            __pyx_L17:;
+            goto __pyx_L16;
           }
-          __pyx_L13:;
+          __pyx_L16:;
         }
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        goto __pyx_L10;
+        goto __pyx_L13;
       }
-      __pyx_L10:;
-      __pyx_L7_continue:;
+      __pyx_L13:;
+      __pyx_L10_continue:;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":880
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":880
  *                             if newel not in frontier:
  *                                 frontier.append((next_id,alt_id,pathlen+jump))
  *         return frontier             # <<<<<<<<<<<<<<
@@ -43045,7 +40894,6 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_9);
   __Pyx_XDECREF(__pyx_t_10);
-  __Pyx_XDECREF(__pyx_t_13);
   __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.get_all_nodes_isteps_away", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -43055,29 +40903,50 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_14get_all_nodes_isteps_
   __Pyx_XDECREF(__pyx_v_nextreachable);
   __Pyx_XDECREF(__pyx_v_next_id);
   __Pyx_XDECREF(__pyx_v_jump);
-  __Pyx_XDECREF(__pyx_v_alt_id);
   __Pyx_XDECREF(__pyx_v_newel);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_17reachable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_17reachable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":882
+ *         return frontier
+ * 
+ *     def reachable(self, fwords, ifrom, dist):             # <<<<<<<<<<<<<<
+ *         ret = []
+ *         if (ifrom >= len(fwords)):
+ */
+
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8reachable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_8reachable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fwords = 0;
   PyObject *__pyx_v_ifrom = 0;
   PyObject *__pyx_v_dist = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_ret = NULL;
+  Py_ssize_t __pyx_v_alt_id;
+  PyObject *__pyx_v_ifromchild = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reachable (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fwords,&__pyx_n_s__ifrom,&__pyx_n_s__dist,0};
+  __Pyx_RefNannySetupContext("reachable");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fwords,&__pyx_n_s__ifrom,&__pyx_n_s__dist,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -43085,23 +40954,26 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_17reachable(PyObject *_
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ifrom)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ifrom);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("reachable", 1, 3, 3, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("reachable", 1, 3, 3, 2); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reachable") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "reachable") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -43122,42 +40994,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_17reachable(PyObject *_
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v_fwords, __pyx_v_ifrom, __pyx_v_dist);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":882
- *         return frontier
- * 
- *     def reachable(self, fwords, ifrom, dist):             # <<<<<<<<<<<<<<
- *         ret = []
- *         if (ifrom >= len(fwords)):
- */
-
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_fwords, PyObject *__pyx_v_ifrom, PyObject *__pyx_v_dist) {
-  PyObject *__pyx_v_ret = NULL;
-  PyObject *__pyx_v_alt_id = NULL;
-  PyObject *__pyx_v_ifromchild = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  Py_ssize_t __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  PyObject *(*__pyx_t_5)(PyObject *);
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  int __pyx_t_9;
-  Py_ssize_t __pyx_t_10;
-  PyObject *(*__pyx_t_11)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("reachable", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":883
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":883
  * 
  *     def reachable(self, fwords, ifrom, dist):
  *         ret = []             # <<<<<<<<<<<<<<
@@ -43165,11 +41003,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
  *             return ret
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_ret = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":884
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":884
  *     def reachable(self, fwords, ifrom, dist):
  *         ret = []
  *         if (ifrom >= len(fwords)):             # <<<<<<<<<<<<<<
@@ -43179,13 +41017,14 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
   __pyx_t_2 = PyObject_Length(__pyx_v_fwords); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ifrom, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ifrom, __pyx_t_1, Py_GE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__pyx_t_4) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":885
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":885
  *         ret = []
  *         if (ifrom >= len(fwords)):
  *             return ret             # <<<<<<<<<<<<<<
@@ -43196,11 +41035,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
     __Pyx_INCREF(((PyObject *)__pyx_v_ret));
     __pyx_r = ((PyObject *)__pyx_v_ret);
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":886
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":886
  *         if (ifrom >= len(fwords)):
  *             return ret
  *         for alt_id in range(len(fwords[ifrom])):             # <<<<<<<<<<<<<<
@@ -43211,56 +41050,10 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
-    __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
-    __pyx_t_5 = NULL;
-  } else {
-    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext;
-  }
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  for (;;) {
-    if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_1)) {
-      if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_1)) {
-      if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else {
-      __pyx_t_3 = __pyx_t_5(__pyx_t_1);
-      if (unlikely(!__pyx_t_3)) {
-        if (PyErr_Occurred()) {
-          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-          else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        break;
-      }
-      __Pyx_GOTREF(__pyx_t_3);
-    }
-    __Pyx_XDECREF(__pyx_v_alt_id);
-    __pyx_v_alt_id = __pyx_t_3;
-    __pyx_t_3 = 0;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_2; __pyx_t_5+=1) {
+    __pyx_v_alt_id = __pyx_t_5;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":887
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":887
  *             return ret
  *         for alt_id in range(len(fwords[ifrom])):
  *             if (fwords[ifrom][alt_id][0] == EPSILON):             # <<<<<<<<<<<<<<
@@ -43269,172 +41062,169 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
  */
     __pyx_t_3 = PyObject_GetItem(__pyx_v_fwords, __pyx_v_ifrom); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = PyObject_GetItem(__pyx_t_3, __pyx_v_alt_id); if (!__pyx_t_6) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_alt_id, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_1) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_6, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyObject_RichCompare(__pyx_t_3, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":888
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":888
  *         for alt_id in range(len(fwords[ifrom])):
  *             if (fwords[ifrom][alt_id][0] == EPSILON):
  *                 ret.extend(self.reachable(fwords,ifrom+fwords[ifrom][alt_id][2],dist))             # <<<<<<<<<<<<<<
  *             else:
  *                 if (dist==0):
  */
-      __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_ret), __pyx_n_s__extend); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__reachable); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_ret), __pyx_n_s__extend); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__reachable); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_3 = PyObject_GetItem(__pyx_v_fwords, __pyx_v_ifrom); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_8 = PyObject_GetItem(__pyx_t_3, __pyx_v_alt_id); if (!__pyx_t_8) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_alt_id, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_7) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_8, 2, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_7, 2, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = PyNumber_Add(__pyx_v_ifrom, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_7 = PyNumber_Add(__pyx_v_ifrom, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
       __Pyx_INCREF(__pyx_v_fwords);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_fwords);
       __Pyx_GIVEREF(__pyx_v_fwords);
-      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_8);
+      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
+      __Pyx_GIVEREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_v_dist);
       PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_dist);
       __Pyx_GIVEREF(__pyx_v_dist);
-      __pyx_t_8 = 0;
-      __pyx_t_8 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __pyx_t_7 = 0;
+      __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
       __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_8);
-      __pyx_t_8 = 0;
-      __pyx_t_8 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7);
+      __Pyx_GIVEREF(__pyx_t_7);
+      __pyx_t_7 = 0;
+      __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      goto __pyx_L6;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      goto __pyx_L9;
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":890
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":890
  *                 ret.extend(self.reachable(fwords,ifrom+fwords[ifrom][alt_id][2],dist))
  *             else:
  *                 if (dist==0):             # <<<<<<<<<<<<<<
  *                     if (ifrom not in ret):
  *                         ret.append(ifrom)
  */
-      __pyx_t_8 = PyObject_RichCompare(__pyx_v_dist, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __pyx_t_7 = PyObject_RichCompare(__pyx_v_dist, __pyx_int_0, Py_EQ); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":891
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":891
  *             else:
  *                 if (dist==0):
  *                     if (ifrom not in ret):             # <<<<<<<<<<<<<<
  *                         ret.append(ifrom)
  *                 else:
  */
-        __pyx_t_4 = (__Pyx_PySequence_Contains(__pyx_v_ifrom, ((PyObject *)__pyx_v_ret), Py_NE)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = (__Pyx_NegateNonNeg(PySequence_Contains(((PyObject *)__pyx_v_ret), __pyx_v_ifrom))); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":892
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":892
  *                 if (dist==0):
  *                     if (ifrom not in ret):
  *                         ret.append(ifrom)             # <<<<<<<<<<<<<<
  *                 else:
  *                     for ifromchild in self.reachable(fwords,ifrom+fwords[ifrom][alt_id][2],dist-1):
  */
-          __pyx_t_9 = PyList_Append(__pyx_v_ret, __pyx_v_ifrom); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          goto __pyx_L8;
+          if (unlikely(((PyObject *)__pyx_v_ret) == Py_None)) {
+            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+          }
+          __pyx_t_8 = PyList_Append(__pyx_v_ret, __pyx_v_ifrom); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          goto __pyx_L11;
         }
-        __pyx_L8:;
-        goto __pyx_L7;
+        __pyx_L11:;
+        goto __pyx_L10;
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":894
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":894
  *                         ret.append(ifrom)
  *                 else:
  *                     for ifromchild in self.reachable(fwords,ifrom+fwords[ifrom][alt_id][2],dist-1):             # <<<<<<<<<<<<<<
  *                         if (ifromchild not in ret):
  *                             ret.append(ifromchild)
  */
-        __pyx_t_8 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__reachable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_8);
+        __pyx_t_7 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__reachable); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_3 = PyObject_GetItem(__pyx_v_fwords, __pyx_v_ifrom); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_v_alt_id); if (!__pyx_t_7) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
+        __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_alt_id, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_6) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_7, 2, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_6, 2, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-        __pyx_t_7 = PyNumber_Add(__pyx_v_ifrom, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_t_6 = PyNumber_Add(__pyx_v_ifrom, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_t_3 = PyNumber_Subtract(__pyx_v_dist, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(((PyObject *)__pyx_t_1));
         __Pyx_INCREF(__pyx_v_fwords);
-        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_fwords);
+        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fwords);
         __Pyx_GIVEREF(__pyx_v_fwords);
-        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
-        __Pyx_GIVEREF(__pyx_t_7);
-        PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_6);
+        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_3);
-        __pyx_t_7 = 0;
+        __pyx_t_6 = 0;
         __pyx_t_3 = 0;
-        __pyx_t_3 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-        __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
         if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
-          __pyx_t_6 = __pyx_t_3; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
-          __pyx_t_11 = NULL;
+          __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0;
+          __pyx_t_10 = NULL;
         } else {
-          __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_6);
-          __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext;
+          __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_1);
+          __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext;
         }
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         for (;;) {
-          if (!__pyx_t_11 && PyList_CheckExact(__pyx_t_6)) {
-            if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #else
-            __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #endif
-          } else if (!__pyx_t_11 && PyTuple_CheckExact(__pyx_t_6)) {
-            if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #else
-            __pyx_t_3 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            #endif
+          if (PyList_CheckExact(__pyx_t_1)) {
+            if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break;
+            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++;
+          } else if (PyTuple_CheckExact(__pyx_t_1)) {
+            if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++;
           } else {
-            __pyx_t_3 = __pyx_t_11(__pyx_t_6);
+            __pyx_t_3 = __pyx_t_10(__pyx_t_1);
             if (unlikely(!__pyx_t_3)) {
               if (PyErr_Occurred()) {
                 if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
@@ -43448,37 +41238,39 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
           __pyx_v_ifromchild = __pyx_t_3;
           __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":895
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":895
  *                 else:
  *                     for ifromchild in self.reachable(fwords,ifrom+fwords[ifrom][alt_id][2],dist-1):
  *                         if (ifromchild not in ret):             # <<<<<<<<<<<<<<
  *                             ret.append(ifromchild)
  * 
  */
-          __pyx_t_4 = (__Pyx_PySequence_Contains(__pyx_v_ifromchild, ((PyObject *)__pyx_v_ret), Py_NE)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_4 = (__Pyx_NegateNonNeg(PySequence_Contains(((PyObject *)__pyx_v_ret), __pyx_v_ifromchild))); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           if (__pyx_t_4) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":896
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":896
  *                     for ifromchild in self.reachable(fwords,ifrom+fwords[ifrom][alt_id][2],dist-1):
  *                         if (ifromchild not in ret):
  *                             ret.append(ifromchild)             # <<<<<<<<<<<<<<
  * 
  *         return ret
  */
-            __pyx_t_9 = PyList_Append(__pyx_v_ret, __pyx_v_ifromchild); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            goto __pyx_L11;
+            if (unlikely(((PyObject *)__pyx_v_ret) == Py_None)) {
+              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+            }
+            __pyx_t_8 = PyList_Append(__pyx_v_ret, __pyx_v_ifromchild); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            goto __pyx_L14;
           }
-          __pyx_L11:;
+          __pyx_L14:;
         }
-        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       }
-      __pyx_L7:;
+      __pyx_L10:;
     }
-    __pyx_L6:;
+    __pyx_L9:;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":898
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":898
  *                             ret.append(ifromchild)
  * 
  *         return ret             # <<<<<<<<<<<<<<
@@ -43497,34 +41289,50 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_16reachable(struct __py
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.reachable", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_ret);
-  __Pyx_XDECREF(__pyx_v_alt_id);
   __Pyx_XDECREF(__pyx_v_ifromchild);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_19shortest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_19shortest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":900
+ *         return ret
+ * 
+ *     def shortest(self, fwords, ifrom, ito):             # <<<<<<<<<<<<<<
+ *         cdef unsigned alt_id
+ *         min = 1000
+ */
+
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_9shortest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_9shortest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fwords = 0;
   PyObject *__pyx_v_ifrom = 0;
   PyObject *__pyx_v_ito = 0;
-  PyObject *__pyx_r = 0;
+  unsigned int __pyx_v_alt_id;
+  PyObject *__pyx_v_min = NULL;
+  PyObject *__pyx_v_currmin = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("shortest (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  Py_ssize_t __pyx_t_3;
+  unsigned int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fwords,&__pyx_n_s__ifrom,&__pyx_n_s__ito,0};
+  __Pyx_RefNannySetupContext("shortest");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fwords,&__pyx_n_s__ifrom,&__pyx_n_s__ito,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -43532,23 +41340,26 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_19shortest(PyObject *__
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fwords);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ifrom)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ifrom);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("shortest", 1, 3, 3, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ito)) != 0)) kw_args--;
+        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ito);
+        if (likely(values[2])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("shortest", 1, 3, 3, 2); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shortest") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "shortest") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -43569,37 +41380,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_19shortest(PyObject *__
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v_fwords, __pyx_v_ifrom, __pyx_v_ito);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":900
- *         return ret
- * 
- *     def shortest(self, fwords, ifrom, ito):             # <<<<<<<<<<<<<<
- *         cdef unsigned alt_id
- *         min = 1000
- */
-
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_fwords, PyObject *__pyx_v_ifrom, PyObject *__pyx_v_ito) {
-  unsigned int __pyx_v_alt_id;
-  PyObject *__pyx_v_min = NULL;
-  PyObject *__pyx_v_currmin = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  Py_ssize_t __pyx_t_3;
-  unsigned int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("shortest", 0);
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":902
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":902
  *     def shortest(self, fwords, ifrom, ito):
  *         cdef unsigned alt_id
  *         min = 1000             # <<<<<<<<<<<<<<
@@ -43609,19 +41391,20 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
   __Pyx_INCREF(__pyx_int_1000);
   __pyx_v_min = __pyx_int_1000;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":903
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":903
  *         cdef unsigned alt_id
  *         min = 1000
  *         if (ifrom > ito):             # <<<<<<<<<<<<<<
  *             return min
  *         if (ifrom == ito):
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_ifrom, __pyx_v_ito, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_ifrom, __pyx_v_ito, Py_GT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":904
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":904
  *         min = 1000
  *         if (ifrom > ito):
  *             return min             # <<<<<<<<<<<<<<
@@ -43632,23 +41415,24 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
     __Pyx_INCREF(__pyx_v_min);
     __pyx_r = __pyx_v_min;
     goto __pyx_L0;
-    goto __pyx_L3;
+    goto __pyx_L6;
   }
-  __pyx_L3:;
+  __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":905
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":905
  *         if (ifrom > ito):
  *             return min
  *         if (ifrom == ito):             # <<<<<<<<<<<<<<
  *             return 0
  *         for alt_id in range(len(fwords[ifrom])):
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_ifrom, __pyx_v_ito, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_ifrom, __pyx_v_ito, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":906
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":906
  *             return min
  *         if (ifrom == ito):
  *             return 0             # <<<<<<<<<<<<<<
@@ -43659,11 +41443,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
     __Pyx_INCREF(__pyx_int_0);
     __pyx_r = __pyx_int_0;
     goto __pyx_L0;
-    goto __pyx_L4;
+    goto __pyx_L7;
   }
-  __pyx_L4:;
+  __pyx_L7:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":907
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":907
  *         if (ifrom == ito):
  *             return 0
  *         for alt_id in range(len(fwords[ifrom])):             # <<<<<<<<<<<<<<
@@ -43677,14 +41461,14 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_alt_id = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":908
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":908
  *             return 0
  *         for alt_id in range(len(fwords[ifrom])):
  *             currmin = self.shortest(fwords,ifrom+fwords[ifrom][alt_id][2],ito)             # <<<<<<<<<<<<<<
  *             if (fwords[ifrom][alt_id][0] != EPSILON):
  *                 currmin += 1
  */
-    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__shortest); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shortest); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_5 = PyObject_GetItem(__pyx_v_fwords, __pyx_v_ifrom); if (!__pyx_t_5) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
@@ -43698,7 +41482,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_INCREF(__pyx_v_fwords);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_fwords);
     __Pyx_GIVEREF(__pyx_v_fwords);
@@ -43716,7 +41500,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
     __pyx_v_currmin = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":909
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":909
  *         for alt_id in range(len(fwords[ifrom])):
  *             currmin = self.shortest(fwords,ifrom+fwords[ifrom][alt_id][2],ito)
  *             if (fwords[ifrom][alt_id][0] != EPSILON):             # <<<<<<<<<<<<<<
@@ -43733,14 +41517,15 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_NE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":910
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":910
  *             currmin = self.shortest(fwords,ifrom+fwords[ifrom][alt_id][2],ito)
  *             if (fwords[ifrom][alt_id][0] != EPSILON):
  *                 currmin += 1             # <<<<<<<<<<<<<<
@@ -43752,23 +41537,24 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
       __Pyx_DECREF(__pyx_v_currmin);
       __pyx_v_currmin = __pyx_t_1;
       __pyx_t_1 = 0;
-      goto __pyx_L7;
+      goto __pyx_L10;
     }
-    __pyx_L7:;
+    __pyx_L10:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":911
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":911
  *             if (fwords[ifrom][alt_id][0] != EPSILON):
  *                 currmin += 1
  *             if (currmin<min):             # <<<<<<<<<<<<<<
  *                 min = currmin
  *         return min
  */
-    __pyx_t_1 = PyObject_RichCompare(__pyx_v_currmin, __pyx_v_min, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_currmin, __pyx_v_min, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":912
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":912
  *                 currmin += 1
  *             if (currmin<min):
  *                 min = currmin             # <<<<<<<<<<<<<<
@@ -43778,12 +41564,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
       __Pyx_INCREF(__pyx_v_currmin);
       __Pyx_DECREF(__pyx_v_min);
       __pyx_v_min = __pyx_v_currmin;
-      goto __pyx_L8;
+      goto __pyx_L11;
     }
-    __pyx_L8:;
+    __pyx_L11:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":913
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":913
  *             if (currmin<min):
  *                 min = currmin
  *         return min             # <<<<<<<<<<<<<<
@@ -43811,23 +41597,49 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_18shortest(struct __pyx
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_21get_next_states(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_21get_next_states(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":915
+ *         return min
+ * 
+ *     def get_next_states(self, _columns, curr_idx, min_dist=2):             # <<<<<<<<<<<<<<
+ *         result = []
+ *         candidate = [[curr_idx,0]]
+ */
+
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_next_states(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_next_states(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v__columns = 0;
   PyObject *__pyx_v_curr_idx = 0;
   PyObject *__pyx_v_min_dist = 0;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_v_result = NULL;
+  PyObject *__pyx_v_candidate = NULL;
+  PyObject *__pyx_v_curr = NULL;
+  PyObject *__pyx_v_curr_col = NULL;
+  PyObject *__pyx_v_alt = NULL;
+  PyObject *__pyx_v_next_id = NULL;
+  PyObject *__pyx_v_jump = NULL;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_next_states (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  PyObject *(*__pyx_t_9)(PyObject *);
+  PyObject *__pyx_t_10 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s___columns,&__pyx_n_s__curr_idx,&__pyx_n_s__min_dist,0};
+  __Pyx_RefNannySetupContext("get_next_states");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s___columns,&__pyx_n_s__curr_idx,&__pyx_n_s__min_dist,0};
     PyObject* values[3] = {0,0,0};
     values[2] = ((PyObject *)__pyx_int_2);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -43835,12 +41647,14 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_21get_next_states(PyObj
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s___columns)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s___columns);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__curr_idx)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__curr_idx);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("get_next_states", 0, 2, 3, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
@@ -43851,7 +41665,7 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_21get_next_states(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_next_states") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "get_next_states") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -43874,45 +41688,8 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_21get_next_states(PyObj
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), __pyx_v__columns, __pyx_v_curr_idx, __pyx_v_min_dist);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":915
- *         return min
- * 
- *     def get_next_states(self, _columns, curr_idx, min_dist=2):             # <<<<<<<<<<<<<<
- *         result = []
- *         candidate = [[curr_idx,0]]
- */
-
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v__columns, PyObject *__pyx_v_curr_idx, PyObject *__pyx_v_min_dist) {
-  PyObject *__pyx_v_result = NULL;
-  PyObject *__pyx_v_candidate = NULL;
-  PyObject *__pyx_v_curr = NULL;
-  PyObject *__pyx_v_curr_col = NULL;
-  PyObject *__pyx_v_alt = NULL;
-  PyObject *__pyx_v_next_id = NULL;
-  PyObject *__pyx_v_jump = NULL;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
-  PyObject *__pyx_t_10 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("get_next_states", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":916
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":916
  * 
  *     def get_next_states(self, _columns, curr_idx, min_dist=2):
  *         result = []             # <<<<<<<<<<<<<<
@@ -43920,11 +41697,11 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
  * 
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_result = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":917
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":917
  *     def get_next_states(self, _columns, curr_idx, min_dist=2):
  *         result = []
  *         candidate = [[curr_idx,0]]             # <<<<<<<<<<<<<<
@@ -43932,7 +41709,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
  *         while len(candidate) > 0:
  */
   __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(__pyx_v_curr_idx);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_curr_idx);
   __Pyx_GIVEREF(__pyx_v_curr_idx);
@@ -43940,14 +41717,14 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
   PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_0);
   __Pyx_GIVEREF(__pyx_int_0);
   __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
   __pyx_t_1 = 0;
   __pyx_v_candidate = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":919
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":919
  *         candidate = [[curr_idx,0]]
  * 
  *         while len(candidate) > 0:             # <<<<<<<<<<<<<<
@@ -43955,11 +41732,14 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
  *             if curr[0] >= len(_columns):
  */
   while (1) {
-    __pyx_t_3 = PyList_GET_SIZE(((PyObject *)__pyx_v_candidate)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(((PyObject *)__pyx_v_candidate) == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
+    __pyx_t_3 = PyList_GET_SIZE(((PyObject *)__pyx_v_candidate)); 
     __pyx_t_4 = (__pyx_t_3 > 0);
     if (!__pyx_t_4) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":920
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":920
  * 
  *         while len(candidate) > 0:
  *             curr = candidate.pop()             # <<<<<<<<<<<<<<
@@ -43972,7 +41752,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
     __pyx_v_curr = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":921
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":921
  *         while len(candidate) > 0:
  *             curr = candidate.pop()
  *             if curr[0] >= len(_columns):             # <<<<<<<<<<<<<<
@@ -43984,26 +41764,27 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
     __pyx_t_3 = PyObject_Length(__pyx_v__columns); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":922
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":922
  *             curr = candidate.pop()
  *             if curr[0] >= len(_columns):
  *                 continue             # <<<<<<<<<<<<<<
  *             if curr[0] not in result and min_dist <= curr[1] <= self.max_initial_size:
  *                 result.append(curr[0]);
  */
-      goto __pyx_L3_continue;
-      goto __pyx_L5;
+      goto __pyx_L6_continue;
+      goto __pyx_L8;
     }
-    __pyx_L5:;
+    __pyx_L8:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":923
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":923
  *             if curr[0] >= len(_columns):
  *                 continue
  *             if curr[0] not in result and min_dist <= curr[1] <= self.max_initial_size:             # <<<<<<<<<<<<<<
@@ -44012,17 +41793,19 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
  */
     __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_curr, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = (__Pyx_PySequence_Contains(__pyx_t_5, ((PyObject *)__pyx_v_result), Py_NE)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = (__Pyx_NegateNonNeg(PySequence_Contains(((PyObject *)__pyx_v_result), __pyx_t_5))); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_4) {
       __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_curr, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = PyObject_RichCompare(__pyx_v_min_dist, __pyx_t_5, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyObject_RichCompare(__pyx_v_min_dist, __pyx_t_5, Py_LE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
       if (__Pyx_PyObject_IsTrue(__pyx_t_1)) {
         __Pyx_DECREF(__pyx_t_1);
-        __pyx_t_2 = PyInt_FromLong(__pyx_v_self->max_initial_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_initial_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_2, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_2, Py_LE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -44034,22 +41817,25 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
     }
     if (__pyx_t_7) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":924
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":924
  *                 continue
  *             if curr[0] not in result and min_dist <= curr[1] <= self.max_initial_size:
  *                 result.append(curr[0]);             # <<<<<<<<<<<<<<
  *             curr_col = _columns[curr[0]]
  *             for alt in curr_col:
  */
+      if (unlikely(((PyObject *)__pyx_v_result) == Py_None)) {
+        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+      }
       __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_curr, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_8 = PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L6;
+      goto __pyx_L9;
     }
-    __pyx_L6:;
+    __pyx_L9:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":925
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":925
  *             if curr[0] not in result and min_dist <= curr[1] <= self.max_initial_size:
  *                 result.append(curr[0]);
  *             curr_col = _columns[curr[0]]             # <<<<<<<<<<<<<<
@@ -44065,7 +41851,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
     __pyx_v_curr_col = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":926
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":926
  *                 result.append(curr[0]);
  *             curr_col = _columns[curr[0]]
  *             for alt in curr_col:             # <<<<<<<<<<<<<<
@@ -44081,20 +41867,12 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
       __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext;
     }
     for (;;) {
-      if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_5)) {
+      if (PyList_CheckExact(__pyx_t_5)) {
         if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
-      } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_5)) {
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++;
+      } else if (PyTuple_CheckExact(__pyx_t_5)) {
         if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        #endif
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++;
       } else {
         __pyx_t_1 = __pyx_t_9(__pyx_t_5);
         if (unlikely(!__pyx_t_1)) {
@@ -44110,7 +41888,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
       __pyx_v_alt = __pyx_t_1;
       __pyx_t_1 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":927
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":927
  *             curr_col = _columns[curr[0]]
  *             for alt in curr_col:
  *                 next_id = curr[0]+alt[2]             # <<<<<<<<<<<<<<
@@ -44129,7 +41907,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
       __pyx_v_next_id = __pyx_t_10;
       __pyx_t_10 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":928
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":928
  *             for alt in curr_col:
  *                 next_id = curr[0]+alt[2]
  *                 jump = 1             # <<<<<<<<<<<<<<
@@ -44140,7 +41918,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
       __Pyx_XDECREF(__pyx_v_jump);
       __pyx_v_jump = __pyx_int_1;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":929
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":929
  *                 next_id = curr[0]+alt[2]
  *                 jump = 1
  *                 if (alt[0] == EPSILON):             # <<<<<<<<<<<<<<
@@ -44151,14 +41929,15 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_2 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_1 = PyObject_RichCompare(__pyx_t_10, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyObject_RichCompare(__pyx_t_10, __pyx_t_2, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":930
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":930
  *                 jump = 1
  *                 if (alt[0] == EPSILON):
  *                     jump = 0             # <<<<<<<<<<<<<<
@@ -44168,30 +41947,32 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
         __Pyx_INCREF(__pyx_int_0);
         __Pyx_DECREF(__pyx_v_jump);
         __pyx_v_jump = __pyx_int_0;
-        goto __pyx_L9;
+        goto __pyx_L12;
       }
-      __pyx_L9:;
+      __pyx_L12:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":931
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":931
  *                 if (alt[0] == EPSILON):
  *                     jump = 0
  *                 if next_id not in result and min_dist <= curr[1]+jump <= self.max_initial_size+1:             # <<<<<<<<<<<<<<
  *                     candidate.append([next_id,curr[1]+jump])
  *         return sorted(result);
  */
-      __pyx_t_7 = (__Pyx_PySequence_Contains(__pyx_v_next_id, ((PyObject *)__pyx_v_result), Py_NE)); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = (__Pyx_NegateNonNeg(PySequence_Contains(((PyObject *)__pyx_v_result), __pyx_v_next_id))); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       if (__pyx_t_7) {
         __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_curr, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_jump); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __pyx_t_1 = PyObject_RichCompare(__pyx_v_min_dist, __pyx_t_2, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PyObject_RichCompare(__pyx_v_min_dist, __pyx_t_2, Py_LE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_1);
         if (__Pyx_PyObject_IsTrue(__pyx_t_1)) {
           __Pyx_DECREF(__pyx_t_1);
-          __pyx_t_10 = PyInt_FromLong((__pyx_v_self->max_initial_size + 1)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = PyInt_FromLong((((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self)->max_initial_size + 1)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_LE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_1);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -44203,20 +41984,23 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
       }
       if (__pyx_t_6) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":932
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":932
  *                     jump = 0
  *                 if next_id not in result and min_dist <= curr[1]+jump <= self.max_initial_size+1:
  *                     candidate.append([next_id,curr[1]+jump])             # <<<<<<<<<<<<<<
  *         return sorted(result);
  * 
  */
+        if (unlikely(((PyObject *)__pyx_v_candidate) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_curr, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_jump); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_1));
         __Pyx_INCREF(__pyx_v_next_id);
         PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_next_id);
         __Pyx_GIVEREF(__pyx_v_next_id);
@@ -44225,15 +42009,15 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
         __pyx_t_2 = 0;
         __pyx_t_8 = PyList_Append(__pyx_v_candidate, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-        goto __pyx_L10;
+        goto __pyx_L13;
       }
-      __pyx_L10:;
+      __pyx_L13:;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_L3_continue:;
+    __pyx_L6_continue:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":933
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":933
  *                 if next_id not in result and min_dist <= curr[1]+jump <= self.max_initial_size+1:
  *                     candidate.append([next_id,curr[1]+jump])
  *         return sorted(result);             # <<<<<<<<<<<<<<
@@ -44242,7 +42026,7 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_result));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_result));
@@ -44274,45 +42058,9 @@ static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_20get_next_states(struc
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
+static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_12generator4(struct __pyx_obj_3_sa___pyx_scope_struct_8_input *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_23input(PyObject *__pyx_v_self, PyObject *__pyx_v_fwords); /*proto*/
-static char __pyx_doc_3_sa_23HieroCachingRuleFactory_22input[] = "When this function is called on the RuleFactory,\n        it looks up all of the rules that can be used to translate\n        the input sentence";
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_23input(PyObject *__pyx_v_self, PyObject *__pyx_v_fwords) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("input (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_23HieroCachingRuleFactory_22input(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_v_self), ((PyObject *)__pyx_v_fwords));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_lambda1(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_3_sa_23HieroCachingRuleFactory_5input_lambda1 = {__Pyx_NAMESTR("lambda1"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_lambda1, METH_NOARGS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_lambda1(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("lambda1 (wrapper)", 0);
-  __pyx_r = __pyx_lambda_funcdef_lambda1(__pyx_self);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_7lambda1_lambda2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_3_sa_23HieroCachingRuleFactory_5input_7lambda1_lambda2 = {__Pyx_NAMESTR("lambda2"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_7lambda1_lambda2, METH_NOARGS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_7lambda1_lambda2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("lambda2 (wrapper)", 0);
-  __pyx_r = __pyx_lambda_funcdef_lambda2(__pyx_self);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1095
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1095
  *                         if len(extracts) > 0:
  *                             fcount = Counter()
  *                             fphrases = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))             # <<<<<<<<<<<<<<
@@ -44320,7 +42068,9 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_7lambda1_lambda2
  *                                 fcount[f] += count
  */
 
-static PyObject *__pyx_lambda_funcdef_lambda2(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_lambda_funcdef_lambda2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_lambda_methdef_lambda2 = {__Pyx_NAMESTR("lambda2"), (PyCFunction)__pyx_lambda_funcdef_lambda2, METH_NOARGS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_lambda_funcdef_lambda2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -44329,12 +42079,13 @@ static PyObject *__pyx_lambda_funcdef_lambda2(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("lambda2", 0);
+  __Pyx_RefNannySetupContext("lambda2");
+  __pyx_self = __pyx_self;
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__defaultdict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_INCREF(((PyObject *)((PyObject*)(&PyList_Type))));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)(&PyList_Type))));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyList_Type))));
@@ -44352,7 +42103,7 @@ static PyObject *__pyx_lambda_funcdef_lambda2(CYTHON_UNUSED PyObject *__pyx_self
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.input.lambda1.lambda2", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("_sa.input.lambda1.lambda2", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44360,7 +42111,9 @@ static PyObject *__pyx_lambda_funcdef_lambda2(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_lambda_funcdef_lambda1(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_lambda_methdef_lambda1 = {__Pyx_NAMESTR("lambda1"), (PyCFunction)__pyx_lambda_funcdef_lambda1, METH_NOARGS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_lambda_funcdef_lambda1(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -44369,14 +42122,15 @@ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("lambda1", 0);
+  __Pyx_RefNannySetupContext("lambda1");
+  __pyx_self = __pyx_self;
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__defaultdict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3_sa_23HieroCachingRuleFactory_5input_7lambda1_lambda2, 0, NULL, __pyx_n_s___sa, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_lambda_methdef_lambda2, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
@@ -44394,7 +42148,7 @@ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.input.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("_sa.input.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44402,19 +42156,7 @@ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_1lambda3(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
-static PyMethodDef __pyx_mdef_3_sa_23HieroCachingRuleFactory_5input_1lambda3 = {__Pyx_NAMESTR("lambda3"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_1lambda3, METH_O, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_1lambda3(PyObject *__pyx_self, PyObject *__pyx_v_x) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("lambda3 (wrapper)", 0);
-  __pyx_r = __pyx_lambda_funcdef_lambda3(__pyx_self, ((PyObject *)__pyx_v_x));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1101
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1101
  *                             for f, elist in fphrases.iteritems():
  *                                 for e, alslist in elist.iteritems():
  *                                     alignment = max(alslist.iteritems(), key=lambda x: len(x[1]))[0]             # <<<<<<<<<<<<<<
@@ -44422,7 +42164,9 @@ static PyObject *__pyx_pw_3_sa_23HieroCachingRuleFactory_5input_1lambda3(PyObjec
  *                                     count = len(locs)
  */
 
-static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
+static PyObject *__pyx_lambda_funcdef_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
+static PyMethodDef __pyx_lambda_methdef_lambda3 = {__Pyx_NAMESTR("lambda3"), (PyCFunction)__pyx_lambda_funcdef_lambda3, METH_O, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_lambda_funcdef_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_x) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -44430,7 +42174,8 @@ static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("lambda3", 0);
+  __Pyx_RefNannySetupContext("lambda3");
+  __pyx_self = __pyx_self;
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
@@ -44446,7 +42191,7 @@ static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.input.lambda3", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("_sa.input.lambda3", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44454,7 +42199,7 @@ static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":935
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":935
  *         return sorted(result);
  * 
  *     def input(self, fwords):             # <<<<<<<<<<<<<<
@@ -44462,48 +42207,40 @@ static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self
  *         it looks up all of the rules that can be used to translate
  */
 
-static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_22input(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, PyObject *__pyx_v_fwords) {
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_11input(PyObject *__pyx_v_self, PyObject *__pyx_v_fwords); /*proto*/
+static char __pyx_doc_3_sa_23HieroCachingRuleFactory_11input[] = "When this function is called on the RuleFactory,\n        it looks up all of the rules that can be used to translate\n        the input sentence";
+static PyObject *__pyx_pf_3_sa_23HieroCachingRuleFactory_11input(PyObject *__pyx_v_self, PyObject *__pyx_v_fwords) {
   struct __pyx_obj_3_sa___pyx_scope_struct_8_input *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("input", 0);
+  __Pyx_RefNannySetupContext("input");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_8_input *)__pyx_ptype_3_sa___pyx_scope_struct_8_input->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_8_input, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_fwords);
   __pyx_cur_scope->__pyx_v_fwords = __pyx_v_fwords;
-  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fwords);
+  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fwords);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_23HieroCachingRuleFactory_12generator4;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.HieroCachingRuleFactory.input", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_12generator4(struct __pyx_obj_3_sa___pyx_scope_struct_8_input *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_8_input *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_8_input *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   Py_ssize_t __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
@@ -44527,16 +42264,15 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   PyObject *(*__pyx_t_20)(PyObject *);
   float __pyx_t_21;
   Py_ssize_t __pyx_t_22;
-  Py_ssize_t __pyx_t_23;
+  PyObject *(*__pyx_t_23)(PyObject *);
   Py_ssize_t __pyx_t_24;
-  Py_ssize_t __pyx_t_25;
+  int __pyx_t_25;
   int __pyx_t_26;
-  int __pyx_t_27;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
-    case 1: goto __pyx_L58_resume_from_yield;
+    case 1: goto __pyx_L62_resume_from_yield;
     default: /* CPython raises the right error here */
     __Pyx_RefNannyFinishContext();
     return NULL;
@@ -44544,7 +42280,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":946
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":946
  *         cdef Phrase hiero_phrase
  * 
  *         flen = len(fwords)             # <<<<<<<<<<<<<<
@@ -44554,7 +42290,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __pyx_t_1 = PyObject_Length(__pyx_cur_scope->__pyx_v_fwords); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_cur_scope->__pyx_v_flen = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":947
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":947
  * 
  *         flen = len(fwords)
  *         start_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -44563,16 +42299,16 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
   __pyx_cur_scope->__pyx_v_start_time = __pyx_f_3_sa_monitor_cpu();
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":948
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":948
  *         flen = len(fwords)
  *         start_time = monitor_cpu()
  *         self.extract_time = 0.0             # <<<<<<<<<<<<<<
  *         nodes_isteps_away_buffer = {}
  *         hit = 0
  */
-  __pyx_cur_scope->__pyx_v_self->extract_time = 0.0;
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->extract_time = 0.0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":949
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":949
  *         start_time = monitor_cpu()
  *         self.extract_time = 0.0
  *         nodes_isteps_away_buffer = {}             # <<<<<<<<<<<<<<
@@ -44585,7 +42321,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __pyx_cur_scope->__pyx_v_nodes_isteps_away_buffer = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":950
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":950
  *         self.extract_time = 0.0
  *         nodes_isteps_away_buffer = {}
  *         hit = 0             # <<<<<<<<<<<<<<
@@ -44594,7 +42330,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
   __pyx_cur_scope->__pyx_v_hit = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":951
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":951
  *         nodes_isteps_away_buffer = {}
  *         hit = 0
  *         reachable_buffer = {}             # <<<<<<<<<<<<<<
@@ -44607,7 +42343,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __pyx_cur_scope->__pyx_v_reachable_buffer = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":954
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":954
  * 
  *         # Do not cache between sentences
  *         self.rules.root = ExtendedTrieNode(phrase_location=PhraseLocation())             # <<<<<<<<<<<<<<
@@ -44620,16 +42356,16 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__phrase_location), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_GIVEREF(__pyx_t_3);
-  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->rules->root);
-  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->rules->root);
-  __pyx_cur_scope->__pyx_v_self->rules->root = __pyx_t_3;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
+  ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":956
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":956
  *         self.rules.root = ExtendedTrieNode(phrase_location=PhraseLocation())
  * 
  *         frontier = []             # <<<<<<<<<<<<<<
@@ -44637,12 +42373,12 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *             for alt in range(0, len(fwords[i])):
  */
   __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
   __pyx_cur_scope->__pyx_v_frontier = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":957
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":957
  * 
  *         frontier = []
  *         for i in range(len(fwords)):             # <<<<<<<<<<<<<<
@@ -44653,7 +42389,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_1; __pyx_t_4+=1) {
     __pyx_cur_scope->__pyx_v_i = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":958
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":958
  *         frontier = []
  *         for i in range(len(fwords)):
  *             for alt in range(0, len(fwords[i])):             # <<<<<<<<<<<<<<
@@ -44667,7 +42403,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
       __pyx_cur_scope->__pyx_v_alt = __pyx_t_6;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":959
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":959
  *         for i in range(len(fwords)):
  *             for alt in range(0, len(fwords[i])):
  *                 if fwords[i][alt][0] != EPSILON:             # <<<<<<<<<<<<<<
@@ -44684,20 +42420,24 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_2 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_NE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":960
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":960
  *             for alt in range(0, len(fwords[i])):
  *                 if fwords[i][alt][0] != EPSILON:
  *                     frontier.append((i, i, alt, 0, self.rules.root, (), False))             # <<<<<<<<<<<<<<
  * 
  *         xroot = None
  */
+        if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_frontier) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_7 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_2 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -44707,7 +42447,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __pyx_t_9 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_t_10 = PyTuple_New(7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_10);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_10));
         PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7);
         __Pyx_GIVEREF(__pyx_t_7);
         PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_2);
@@ -44717,9 +42457,9 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __Pyx_INCREF(__pyx_int_0);
         PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_int_0);
         __Pyx_GIVEREF(__pyx_int_0);
-        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->rules->root);
-        PyTuple_SET_ITEM(__pyx_t_10, 4, __pyx_cur_scope->__pyx_v_self->rules->root);
-        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->rules->root);
+        __Pyx_INCREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
+        PyTuple_SET_ITEM(__pyx_t_10, 4, ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
+        __Pyx_GIVEREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
         __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
         PyTuple_SET_ITEM(__pyx_t_10, 5, ((PyObject *)__pyx_empty_tuple));
         __Pyx_GIVEREF(((PyObject *)__pyx_empty_tuple));
@@ -44737,7 +42477,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     }
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":962
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":962
  *                     frontier.append((i, i, alt, 0, self.rules.root, (), False))
  * 
  *         xroot = None             # <<<<<<<<<<<<<<
@@ -44748,16 +42488,16 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __Pyx_GIVEREF(Py_None);
   __pyx_cur_scope->__pyx_v_xroot = Py_None;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":963
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":963
  * 
  *         xroot = None
  *         x1 = sym_setindex(self.category, 1)             # <<<<<<<<<<<<<<
  *         if x1 in self.rules.root.children:
  *             xroot = self.rules.root.children[x1]
  */
-  __pyx_cur_scope->__pyx_v_x1 = __pyx_f_3_sa_sym_setindex(__pyx_cur_scope->__pyx_v_self->category, 1);
+  __pyx_cur_scope->__pyx_v_x1 = __pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->category, 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":964
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":964
  *         xroot = None
  *         x1 = sym_setindex(self.category, 1)
  *         if x1 in self.rules.root.children:             # <<<<<<<<<<<<<<
@@ -44766,21 +42506,21 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
   __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_x1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_10);
-  __pyx_t_9 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_self->rules->root, __pyx_n_s__children); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyObject_GetAttr(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root, __pyx_n_s__children); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_8 = (__Pyx_PySequence_Contains(__pyx_t_10, __pyx_t_9, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PySequence_Contains(__pyx_t_9, __pyx_t_10))); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   if (__pyx_t_8) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":965
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":965
  *         x1 = sym_setindex(self.category, 1)
  *         if x1 in self.rules.root.children:
  *             xroot = self.rules.root.children[x1]             # <<<<<<<<<<<<<<
  *         else:
  *             xroot = ExtendedTrieNode(suffix_link=self.rules.root, phrase_location=PhraseLocation())
  */
-    __pyx_t_9 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_self->rules->root, __pyx_n_s__children); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 965; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyObject_GetAttr(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root, __pyx_n_s__children); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 965; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_9, __pyx_cur_scope->__pyx_v_x1, sizeof(int), PyInt_FromLong); if (!__pyx_t_10) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 965; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_10);
@@ -44794,7 +42534,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   }
   /*else*/ {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":967
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":967
  *             xroot = self.rules.root.children[x1]
  *         else:
  *             xroot = ExtendedTrieNode(suffix_link=self.rules.root, phrase_location=PhraseLocation())             # <<<<<<<<<<<<<<
@@ -44803,12 +42543,12 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
     __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_10));
-    if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__suffix_link), __pyx_cur_scope->__pyx_v_self->rules->root) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__suffix_link), ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__phrase_location), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
     __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_xroot);
@@ -44817,21 +42557,21 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     __pyx_cur_scope->__pyx_v_xroot = __pyx_t_9;
     __pyx_t_9 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":968
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":968
  *         else:
  *             xroot = ExtendedTrieNode(suffix_link=self.rules.root, phrase_location=PhraseLocation())
  *             self.rules.root.children[x1] = xroot             # <<<<<<<<<<<<<<
  * 
  *         for i in range(self.min_gap_size, len(fwords)):
  */
-    __pyx_t_9 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_self->rules->root, __pyx_n_s__children); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyObject_GetAttr(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root, __pyx_n_s__children); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     if (__Pyx_SetItemInt(__pyx_t_9, __pyx_cur_scope->__pyx_v_x1, __pyx_cur_scope->__pyx_v_xroot, sizeof(int), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   }
   __pyx_L9:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":970
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":970
  *             self.rules.root.children[x1] = xroot
  * 
  *         for i in range(self.min_gap_size, len(fwords)):             # <<<<<<<<<<<<<<
@@ -44839,10 +42579,10 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                 if fwords[i][alt][0] != EPSILON:
  */
   __pyx_t_1 = PyObject_Length(__pyx_cur_scope->__pyx_v_fwords); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  for (__pyx_t_4 = __pyx_cur_scope->__pyx_v_self->min_gap_size; __pyx_t_4 < __pyx_t_1; __pyx_t_4+=1) {
+  for (__pyx_t_4 = ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->min_gap_size; __pyx_t_4 < __pyx_t_1; __pyx_t_4+=1) {
     __pyx_cur_scope->__pyx_v_i = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":971
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":971
  * 
  *         for i in range(self.min_gap_size, len(fwords)):
  *             for alt in range(0, len(fwords[i])):             # <<<<<<<<<<<<<<
@@ -44856,7 +42596,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
       __pyx_cur_scope->__pyx_v_alt = __pyx_t_6;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":972
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":972
  *         for i in range(self.min_gap_size, len(fwords)):
  *             for alt in range(0, len(fwords[i])):
  *                 if fwords[i][alt][0] != EPSILON:             # <<<<<<<<<<<<<<
@@ -44873,39 +42613,43 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_10 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_10);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_t_9, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_RichCompare(__pyx_t_9, __pyx_t_10, Py_NE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":973
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":973
  *             for alt in range(0, len(fwords[i])):
  *                 if fwords[i][alt][0] != EPSILON:
  *                     frontier.append((i-self.min_gap_size, i, alt, self.min_gap_size, xroot, (x1,), True))             # <<<<<<<<<<<<<<
  * 
  *         next_states = []
  */
-        __pyx_t_3 = PyInt_FromLong((__pyx_cur_scope->__pyx_v_i - __pyx_cur_scope->__pyx_v_self->min_gap_size)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_frontier) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
+        __pyx_t_3 = PyInt_FromLong((__pyx_cur_scope->__pyx_v_i - ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->min_gap_size)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __pyx_t_9 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_alt); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_2 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_self->min_gap_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->min_gap_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_t_7 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_x1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_12);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_12));
         PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_7);
         __Pyx_GIVEREF(__pyx_t_7);
         __pyx_t_7 = 0;
         __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_13 = PyTuple_New(7); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_13);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_13));
         PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_3);
         PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_10);
@@ -44935,7 +42679,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     }
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":975
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":975
  *                     frontier.append((i-self.min_gap_size, i, alt, self.min_gap_size, xroot, (x1,), True))
  * 
  *         next_states = []             # <<<<<<<<<<<<<<
@@ -44943,12 +42687,12 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *             next_states.append(self.get_next_states(fwords,i,self.min_gap_size))
  */
   __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_13));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_13));
   __pyx_cur_scope->__pyx_v_next_states = __pyx_t_13;
   __pyx_t_13 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":976
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":976
  * 
  *         next_states = []
  *         for i in range(len(fwords)):             # <<<<<<<<<<<<<<
@@ -44959,21 +42703,24 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_1; __pyx_t_4+=1) {
     __pyx_cur_scope->__pyx_v_i = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":977
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":977
  *         next_states = []
  *         for i in range(len(fwords)):
  *             next_states.append(self.get_next_states(fwords,i,self.min_gap_size))             # <<<<<<<<<<<<<<
  * 
  *         while len(frontier) > 0:
  */
-    __pyx_t_13 = PyObject_GetAttr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s__get_next_states); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_next_states) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
+    __pyx_t_13 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s__get_next_states); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_13);
     __pyx_t_7 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_12 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_self->min_gap_size); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_12 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->min_gap_size); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_12);
     __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fwords);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_fwords);
     __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fwords);
@@ -44991,7 +42738,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":979
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":979
  *             next_states.append(self.get_next_states(fwords,i,self.min_gap_size))
  * 
  *         while len(frontier) > 0:             # <<<<<<<<<<<<<<
@@ -44999,11 +42746,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *             for k, i, alt, pathlen, node, prefix, is_shadow_path in frontier:
  */
   while (1) {
-    __pyx_t_1 = PyList_GET_SIZE(((PyObject *)__pyx_cur_scope->__pyx_v_frontier)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_frontier) == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
+    __pyx_t_1 = PyList_GET_SIZE(((PyObject *)__pyx_cur_scope->__pyx_v_frontier)); 
     __pyx_t_8 = (__pyx_t_1 > 0);
     if (!__pyx_t_8) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":980
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":980
  * 
  *         while len(frontier) > 0:
  *             new_frontier = []             # <<<<<<<<<<<<<<
@@ -45011,42 +42761,35 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                 word_id = fwords[i][alt][0]
  */
     __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 980; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_12));
     __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_new_frontier));
     __Pyx_XDECREF(((PyObject *)__pyx_cur_scope->__pyx_v_new_frontier));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_12));
     __pyx_cur_scope->__pyx_v_new_frontier = __pyx_t_12;
     __pyx_t_12 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":981
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":981
  *         while len(frontier) > 0:
  *             new_frontier = []
  *             for k, i, alt, pathlen, node, prefix, is_shadow_path in frontier:             # <<<<<<<<<<<<<<
  *                 word_id = fwords[i][alt][0]
  *                 spanlen = fwords[i][alt][2]
  */
+    if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_frontier) == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_12 = ((PyObject *)__pyx_cur_scope->__pyx_v_frontier); __Pyx_INCREF(__pyx_t_12); __pyx_t_1 = 0;
     for (;;) {
       if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_12)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_2 = PyList_GET_ITEM(__pyx_t_12, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_2 = PySequence_ITEM(__pyx_t_12, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_2 = PyList_GET_ITEM(__pyx_t_12, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++;
       if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
         PyObject* sequence = __pyx_t_2;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        Py_ssize_t size = Py_SIZE(sequence);
-        #else
-        Py_ssize_t size = PySequence_Size(sequence);
-        #endif
-        if (unlikely(size != 7)) {
-          if (size > 7) __Pyx_RaiseTooManyValuesError(7);
-          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
+          if (unlikely(PyTuple_GET_SIZE(sequence) != 7)) {
+            if (PyTuple_GET_SIZE(sequence) > 7) __Pyx_RaiseTooManyValuesError(7);
+            else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+            {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          }
           __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
           __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
@@ -45055,6 +42798,11 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_14 = PyTuple_GET_ITEM(sequence, 5); 
           __pyx_t_15 = PyTuple_GET_ITEM(sequence, 6); 
         } else {
+          if (unlikely(PyList_GET_SIZE(sequence) != 7)) {
+            if (PyList_GET_SIZE(sequence) > 7) __Pyx_RaiseTooManyValuesError(7);
+            else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+            {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          }
           __pyx_t_13 = PyList_GET_ITEM(sequence, 0); 
           __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
           __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
@@ -45070,36 +42818,34 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __Pyx_INCREF(__pyx_t_3);
         __Pyx_INCREF(__pyx_t_14);
         __Pyx_INCREF(__pyx_t_15);
-        #else
-        Py_ssize_t i;
-        PyObject** temps[7] = {&__pyx_t_13,&__pyx_t_7,&__pyx_t_9,&__pyx_t_10,&__pyx_t_3,&__pyx_t_14,&__pyx_t_15};
-        for (i=0; i < 7; i++) {
-          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          *(temps[i]) = item;
-        }
-        #endif
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      } else
-      {
+      } else {
         Py_ssize_t index = -1;
-        PyObject** temps[7] = {&__pyx_t_13,&__pyx_t_7,&__pyx_t_9,&__pyx_t_10,&__pyx_t_3,&__pyx_t_14,&__pyx_t_15};
         __pyx_t_16 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_16);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __pyx_t_17 = Py_TYPE(__pyx_t_16)->tp_iternext;
-        for (index=0; index < 7; index++) {
-          PyObject* item = __pyx_t_17(__pyx_t_16); if (unlikely(!item)) goto __pyx_L21_unpacking_failed;
-          __Pyx_GOTREF(item);
-          *(temps[index]) = item;
-        }
+        index = 0; __pyx_t_13 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_13)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_13);
+        index = 1; __pyx_t_7 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_7)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_7);
+        index = 2; __pyx_t_9 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_9)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_9);
+        index = 3; __pyx_t_10 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_10)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_10);
+        index = 4; __pyx_t_3 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_3)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_3);
+        index = 5; __pyx_t_14 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_14)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_14);
+        index = 6; __pyx_t_15 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_15)) goto __pyx_L21_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_15);
         if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_16), 7) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_17 = NULL;
         __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
         goto __pyx_L22_unpacking_done;
         __pyx_L21_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
-        __pyx_t_17 = NULL;
-        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+        if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+        if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
         {__pyx_filename = __pyx_f[8]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L22_unpacking_done:;
       }
@@ -45133,7 +42879,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __pyx_cur_scope->__pyx_v_is_shadow_path = __pyx_t_15;
       __pyx_t_15 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":982
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":982
  *             new_frontier = []
  *             for k, i, alt, pathlen, node, prefix, is_shadow_path in frontier:
  *                 word_id = fwords[i][alt][0]             # <<<<<<<<<<<<<<
@@ -45154,7 +42900,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __pyx_cur_scope->__pyx_v_word_id = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":983
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":983
  *             for k, i, alt, pathlen, node, prefix, is_shadow_path in frontier:
  *                 word_id = fwords[i][alt][0]
  *                 spanlen = fwords[i][alt][2]             # <<<<<<<<<<<<<<
@@ -45175,7 +42921,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __pyx_cur_scope->__pyx_v_spanlen = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":985
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":985
  *                 spanlen = fwords[i][alt][2]
  *                 # TODO get rid of k -- pathlen is replacing it
  *                 if word_id == EPSILON:             # <<<<<<<<<<<<<<
@@ -45184,13 +42930,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
       __pyx_t_2 = PyInt_FromLong(__pyx_v_3_sa_EPSILON); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_15 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_word_id, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_15 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_word_id, __pyx_t_2, Py_EQ); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_15);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":987
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":987
  *                 if word_id == EPSILON:
  *                     # skipping because word_id is epsilon
  *                     if i+spanlen >= len(fwords):             # <<<<<<<<<<<<<<
@@ -45205,14 +42952,15 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __pyx_t_5 = PyObject_Length(__pyx_cur_scope->__pyx_v_fwords); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_15 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_15);
-        __pyx_t_14 = PyObject_RichCompare(__pyx_t_2, __pyx_t_15, Py_GE); __Pyx_XGOTREF(__pyx_t_14); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_14 = PyObject_RichCompare(__pyx_t_2, __pyx_t_15, Py_GE); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_14);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
         __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":988
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":988
  *                     # skipping because word_id is epsilon
  *                     if i+spanlen >= len(fwords):
  *                         continue             # <<<<<<<<<<<<<<
@@ -45224,7 +42972,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         }
         __pyx_L24:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":989
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":989
  *                     if i+spanlen >= len(fwords):
  *                         continue
  *                     for nualt in range(0,len(fwords[i+spanlen])):             # <<<<<<<<<<<<<<
@@ -45244,13 +42992,16 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_5; __pyx_t_18+=1) {
           __pyx_cur_scope->__pyx_v_nualt = __pyx_t_18;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":990
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":990
  *                         continue
  *                     for nualt in range(0,len(fwords[i+spanlen])):
  *                         frontier.append((k, i+spanlen, nualt, pathlen, node, prefix, is_shadow_path))             # <<<<<<<<<<<<<<
  *                     continue
  * 
  */
+          if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_frontier) == Py_None)) {
+            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+          }
           __pyx_t_14 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_14);
           __pyx_t_15 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -45261,7 +43012,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_15 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_nualt); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_15);
           __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14);
           __Pyx_GIVEREF(__pyx_t_14);
           PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
@@ -45287,7 +43038,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
         }
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":991
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":991
  *                     for nualt in range(0,len(fwords[i+spanlen])):
  *                         frontier.append((k, i+spanlen, nualt, pathlen, node, prefix, is_shadow_path))
  *                     continue             # <<<<<<<<<<<<<<
@@ -45299,7 +43050,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       }
       __pyx_L23:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":993
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":993
  *                     continue
  * 
  *                 phrase = prefix + (word_id,)             # <<<<<<<<<<<<<<
@@ -45307,7 +43058,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                 arity = hiero_phrase.arity()
  */
       __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
       __Pyx_INCREF(__pyx_cur_scope->__pyx_v_word_id);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_word_id);
       __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_word_id);
@@ -45320,7 +43071,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __pyx_cur_scope->__pyx_v_phrase = __pyx_t_15;
       __pyx_t_15 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":994
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":994
  * 
  *                 phrase = prefix + (word_id,)
  *                 hiero_phrase = Phrase(phrase)             # <<<<<<<<<<<<<<
@@ -45328,7 +43079,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  * 
  */
       __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_15);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_15));
       __Pyx_INCREF(__pyx_cur_scope->__pyx_v_phrase);
       PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_cur_scope->__pyx_v_phrase);
       __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_phrase);
@@ -45341,7 +43092,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __pyx_cur_scope->__pyx_v_hiero_phrase = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":995
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":995
  *                 phrase = prefix + (word_id,)
  *                 hiero_phrase = Phrase(phrase)
  *                 arity = hiero_phrase.arity()             # <<<<<<<<<<<<<<
@@ -45357,7 +43108,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
       __pyx_cur_scope->__pyx_v_arity = __pyx_t_18;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":997
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":997
  *                 arity = hiero_phrase.arity()
  * 
  *                 lookup_required = False             # <<<<<<<<<<<<<<
@@ -45366,7 +43117,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
       __pyx_cur_scope->__pyx_v_lookup_required = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":998
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":998
  * 
  *                 lookup_required = False
  *                 if word_id in node.children:             # <<<<<<<<<<<<<<
@@ -45375,11 +43126,11 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
       __pyx_t_15 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_node, __pyx_n_s__children); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_15);
-      __pyx_t_8 = (__Pyx_PySequence_Contains(__pyx_cur_scope->__pyx_v_word_id, __pyx_t_15, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = ((PySequence_Contains(__pyx_t_15, __pyx_cur_scope->__pyx_v_word_id))); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":999
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":999
  *                 lookup_required = False
  *                 if word_id in node.children:
  *                     if node.children[word_id] is None:             # <<<<<<<<<<<<<<
@@ -45395,7 +43146,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1001
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1001
  *                     if node.children[word_id] is None:
  *                         # Path dead-ends at this node
  *                         continue             # <<<<<<<<<<<<<<
@@ -45407,7 +43158,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1004
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1004
  *                     else:
  *                         # Path continues at this node
  *                         node = node.children[word_id]             # <<<<<<<<<<<<<<
@@ -45430,7 +43181,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1006
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1006
  *                         node = node.children[word_id]
  *                 else:
  *                     if node.suffix_link is None:             # <<<<<<<<<<<<<<
@@ -45443,7 +43194,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1008
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1008
  *                     if node.suffix_link is None:
  *                         # Current node is root; lookup required
  *                         lookup_required = True             # <<<<<<<<<<<<<<
@@ -45455,7 +43206,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1010
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1010
  *                         lookup_required = True
  *                     else:
  *                         if word_id in node.suffix_link.children:             # <<<<<<<<<<<<<<
@@ -45467,11 +43218,11 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_3 = PyObject_GetAttr(__pyx_t_15, __pyx_n_s__children); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-          __pyx_t_8 = (__Pyx_PySequence_Contains(__pyx_cur_scope->__pyx_v_word_id, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_8 = ((PySequence_Contains(__pyx_t_3, __pyx_cur_scope->__pyx_v_word_id))); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1011
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1011
  *                     else:
  *                         if word_id in node.suffix_link.children:
  *                             if node.suffix_link.children[word_id] is None:             # <<<<<<<<<<<<<<
@@ -45490,7 +43241,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
             if (__pyx_t_8) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1013
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1013
  *                             if node.suffix_link.children[word_id] is None:
  *                                 # Suffix link reports path is dead end
  *                                 node.children[word_id] = None             # <<<<<<<<<<<<<<
@@ -45502,7 +43253,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
               if (PyObject_SetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_word_id, Py_None) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1013; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1014
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1014
  *                                 # Suffix link reports path is dead end
  *                                 node.children[word_id] = None
  *                                 continue             # <<<<<<<<<<<<<<
@@ -45514,7 +43265,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             }
             /*else*/ {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1017
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1017
  *                             else:
  *                                 # Suffix link indicates lookup is reqired
  *                                 lookup_required = True             # <<<<<<<<<<<<<<
@@ -45528,7 +43279,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           /*else*/ {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1020
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1020
  *                         else:
  *                             #ERROR: We never get here
  *                             raise Exception("Keyword trie error")             # <<<<<<<<<<<<<<
@@ -45547,7 +43298,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       }
       __pyx_L27:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1022
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1022
  *                             raise Exception("Keyword trie error")
  *                 # checking whether lookup_required
  *                 if lookup_required:             # <<<<<<<<<<<<<<
@@ -45556,7 +43307,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
       if (__pyx_cur_scope->__pyx_v_lookup_required) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1023
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1023
  *                 # checking whether lookup_required
  *                 if lookup_required:
  *                     new_node = None             # <<<<<<<<<<<<<<
@@ -45569,7 +43320,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __Pyx_GIVEREF(Py_None);
         __pyx_cur_scope->__pyx_v_new_node = Py_None;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1024
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1024
  *                 if lookup_required:
  *                     new_node = None
  *                     if is_shadow_path:             # <<<<<<<<<<<<<<
@@ -45579,7 +43330,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_is_shadow_path); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1027
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1027
  *                         # Extending shadow path
  *                         # on the shadow path we don't do any search, we just use info from suffix link
  *                         new_node = ExtendedTrieNode(phrase_location=node.suffix_link.children[word_id].phrase_location,             # <<<<<<<<<<<<<<
@@ -45602,7 +43353,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__phrase_location), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1028
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1028
  *                         # on the shadow path we don't do any search, we just use info from suffix link
  *                         new_node = ExtendedTrieNode(phrase_location=node.suffix_link.children[word_id].phrase_location,
  *                                 suffix_link=node.suffix_link.children[word_id],             # <<<<<<<<<<<<<<
@@ -45620,7 +43371,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__suffix_link), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1029
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1029
  *                         new_node = ExtendedTrieNode(phrase_location=node.suffix_link.children[word_id].phrase_location,
  *                                 suffix_link=node.suffix_link.children[word_id],
  *                                 phrase=hiero_phrase)             # <<<<<<<<<<<<<<
@@ -45628,7 +43379,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                         if arity > 0:
  */
           if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__phrase), ((PyObject *)__pyx_cur_scope->__pyx_v_hiero_phrase)) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
           __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_new_node);
@@ -45640,7 +43391,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1031
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1031
  *                                 phrase=hiero_phrase)
  *                     else:
  *                         if arity > 0:             # <<<<<<<<<<<<<<
@@ -45650,7 +43401,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_8 = (__pyx_cur_scope->__pyx_v_arity > 0);
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1033
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1033
  *                         if arity > 0:
  *                             # Intersecting because of arity > 0
  *                             phrase_location = self.intersect(node, node.suffix_link.children[word_id], hiero_phrase)             # <<<<<<<<<<<<<<
@@ -45665,7 +43416,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_word_id); if (!__pyx_t_2) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_2);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->intersect(__pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_node, __pyx_t_2, __pyx_cur_scope->__pyx_v_hiero_phrase)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->__pyx_vtab)->intersect(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self), __pyx_cur_scope->__pyx_v_node, __pyx_t_2, __pyx_cur_scope->__pyx_v_hiero_phrase)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_phrase_location));
@@ -45677,7 +43428,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           /*else*/ {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1036
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1036
  *                         else:
  *                             # Suffix array search
  *                             phrase_location = node.phrase_location             # <<<<<<<<<<<<<<
@@ -45693,14 +43444,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_phrase_location = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_3);
             __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1037
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1037
  *                             # Suffix array search
  *                             phrase_location = node.phrase_location
  *                             sa_range = self.fsa.lookup(sym_tostring(phrase[-1]), len(phrase)-1, phrase_location.sa_low, phrase_location.sa_high)             # <<<<<<<<<<<<<<
  *                             if sa_range is not None:
  *                                 phrase_location = PhraseLocation(sa_low=sa_range[0], sa_high=sa_range[1])
  */
-            __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_cur_scope->__pyx_v_self->fsa), __pyx_n_s__lookup); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_3 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->fsa), __pyx_n_s__lookup); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __pyx_t_2 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_phrase, -1, sizeof(long), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_2);
@@ -45716,7 +43467,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_phrase_location->sa_high); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_10);
             __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_9);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_9));
             PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_t_2));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
             PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_15);
@@ -45739,7 +43490,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_sa_range = __pyx_t_10;
             __pyx_t_10 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1038
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1038
  *                             phrase_location = node.phrase_location
  *                             sa_range = self.fsa.lookup(sym_tostring(phrase[-1]), len(phrase)-1, phrase_location.sa_low, phrase_location.sa_high)
  *                             if sa_range is not None:             # <<<<<<<<<<<<<<
@@ -45749,7 +43500,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_t_8 = (__pyx_cur_scope->__pyx_v_sa_range != Py_None);
             if (__pyx_t_8) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1039
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1039
  *                             sa_range = self.fsa.lookup(sym_tostring(phrase[-1]), len(phrase)-1, phrase_location.sa_low, phrase_location.sa_high)
  *                             if sa_range is not None:
  *                                 phrase_location = PhraseLocation(sa_low=sa_range[0], sa_high=sa_range[1])             # <<<<<<<<<<<<<<
@@ -45766,7 +43517,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
               __Pyx_GOTREF(__pyx_t_9);
               if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__sa_high), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-              __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __pyx_t_9 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_PhraseLocation)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_9);
               __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
               __Pyx_GOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_phrase_location));
@@ -45778,7 +43529,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             }
             /*else*/ {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1041
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1041
  *                                 phrase_location = PhraseLocation(sa_low=sa_range[0], sa_high=sa_range[1])
  *                             else:
  *                                 phrase_location = None             # <<<<<<<<<<<<<<
@@ -45795,7 +43546,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           __pyx_L34:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1043
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1043
  *                                 phrase_location = None
  * 
  *                         if phrase_location is None:             # <<<<<<<<<<<<<<
@@ -45805,7 +43556,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_8 = (((PyObject *)__pyx_cur_scope->__pyx_v_phrase_location) == Py_None);
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1044
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1044
  * 
  *                         if phrase_location is None:
  *                             node.children[word_id] = None             # <<<<<<<<<<<<<<
@@ -45817,7 +43568,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             if (PyObject_SetItem(__pyx_t_9, __pyx_cur_scope->__pyx_v_word_id, Py_None) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1046
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1046
  *                             node.children[word_id] = None
  *                             # Search failed
  *                             continue             # <<<<<<<<<<<<<<
@@ -45829,20 +43580,20 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           __pyx_L36:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1048
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1048
  *                             continue
  *                         # Search succeeded
  *                         suffix_link = self.rules.root             # <<<<<<<<<<<<<<
  *                         if node.suffix_link is not None:
  *                             suffix_link = node.suffix_link.children[word_id]
  */
-          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->rules->root);
+          __Pyx_INCREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
           __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_suffix_link);
           __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_suffix_link);
-          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->rules->root);
-          __pyx_cur_scope->__pyx_v_suffix_link = __pyx_cur_scope->__pyx_v_self->rules->root;
+          __Pyx_GIVEREF(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root);
+          __pyx_cur_scope->__pyx_v_suffix_link = ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->rules->root;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1049
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1049
  *                         # Search succeeded
  *                         suffix_link = self.rules.root
  *                         if node.suffix_link is not None:             # <<<<<<<<<<<<<<
@@ -45855,7 +43606,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1050
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1050
  *                         suffix_link = self.rules.root
  *                         if node.suffix_link is not None:
  *                             suffix_link = node.suffix_link.children[word_id]             # <<<<<<<<<<<<<<
@@ -45879,7 +43630,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           __pyx_L37:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1051
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1051
  *                         if node.suffix_link is not None:
  *                             suffix_link = node.suffix_link.children[word_id]
  *                         new_node = ExtendedTrieNode(phrase_location=phrase_location,             # <<<<<<<<<<<<<<
@@ -45890,7 +43641,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_GOTREF(((PyObject *)__pyx_t_9));
           if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__phrase_location), ((PyObject *)__pyx_cur_scope->__pyx_v_phrase_location)) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1052
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1052
  *                             suffix_link = node.suffix_link.children[word_id]
  *                         new_node = ExtendedTrieNode(phrase_location=phrase_location,
  *                                 suffix_link=suffix_link,             # <<<<<<<<<<<<<<
@@ -45899,7 +43650,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
           if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__suffix_link), __pyx_cur_scope->__pyx_v_suffix_link) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1053
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1053
  *                         new_node = ExtendedTrieNode(phrase_location=phrase_location,
  *                                 suffix_link=suffix_link,
  *                                 phrase=hiero_phrase)             # <<<<<<<<<<<<<<
@@ -45907,7 +43658,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                     node = new_node
  */
           if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__phrase), ((PyObject *)__pyx_cur_scope->__pyx_v_hiero_phrase)) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
           __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_new_node);
@@ -45918,7 +43669,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         }
         __pyx_L33:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1054
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1054
  *                                 suffix_link=suffix_link,
  *                                 phrase=hiero_phrase)
  *                     node.children[word_id] = new_node             # <<<<<<<<<<<<<<
@@ -45930,7 +43681,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         if (PyObject_SetItem(__pyx_t_10, __pyx_cur_scope->__pyx_v_word_id, __pyx_cur_scope->__pyx_v_new_node) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1055
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1055
  *                                 phrase=hiero_phrase)
  *                     node.children[word_id] = new_node
  *                     node = new_node             # <<<<<<<<<<<<<<
@@ -45943,17 +43694,17 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_new_node);
         __pyx_cur_scope->__pyx_v_node = __pyx_cur_scope->__pyx_v_new_node;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1060
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1060
  *                     This should happen before we get to extraction (so that
  *                     the node will exist if needed)'''
  *                     if arity < self.max_nonterminals:             # <<<<<<<<<<<<<<
  *                         xcat_index = arity+1
  *                         xcat = sym_setindex(self.category, xcat_index)
  */
-        __pyx_t_8 = (__pyx_cur_scope->__pyx_v_arity < __pyx_cur_scope->__pyx_v_self->max_nonterminals);
+        __pyx_t_8 = (__pyx_cur_scope->__pyx_v_arity < ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->max_nonterminals);
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1061
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1061
  *                     the node will exist if needed)'''
  *                     if arity < self.max_nonterminals:
  *                         xcat_index = arity+1             # <<<<<<<<<<<<<<
@@ -45968,7 +43719,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_xcat_index = __pyx_t_10;
           __pyx_t_10 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1062
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1062
  *                     if arity < self.max_nonterminals:
  *                         xcat_index = arity+1
  *                         xcat = sym_setindex(self.category, xcat_index)             # <<<<<<<<<<<<<<
@@ -45976,9 +43727,9 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                         if is_shadow_path:
  */
           __pyx_t_18 = __Pyx_PyInt_AsInt(__pyx_cur_scope->__pyx_v_xcat_index); if (unlikely((__pyx_t_18 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __pyx_cur_scope->__pyx_v_xcat = __pyx_f_3_sa_sym_setindex(__pyx_cur_scope->__pyx_v_self->category, __pyx_t_18);
+          __pyx_cur_scope->__pyx_v_xcat = __pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->category, __pyx_t_18);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1063
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1063
  *                         xcat_index = arity+1
  *                         xcat = sym_setindex(self.category, xcat_index)
  *                         suffix_link_xcat_index = xcat_index             # <<<<<<<<<<<<<<
@@ -45991,7 +43742,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_xcat_index);
           __pyx_cur_scope->__pyx_v_suffix_link_xcat_index = __pyx_cur_scope->__pyx_v_xcat_index;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1064
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1064
  *                         xcat = sym_setindex(self.category, xcat_index)
  *                         suffix_link_xcat_index = xcat_index
  *                         if is_shadow_path:             # <<<<<<<<<<<<<<
@@ -46001,7 +43752,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_is_shadow_path); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1065
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1065
  *                         suffix_link_xcat_index = xcat_index
  *                         if is_shadow_path:
  *                             suffix_link_xcat_index = xcat_index-1             # <<<<<<<<<<<<<<
@@ -46019,7 +43770,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           __pyx_L39:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1066
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1066
  *                         if is_shadow_path:
  *                             suffix_link_xcat_index = xcat_index-1
  *                         suffix_link_xcat = sym_setindex(self.category, suffix_link_xcat_index)             # <<<<<<<<<<<<<<
@@ -46027,9 +43778,9 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                                 suffix_link=node.suffix_link.children[suffix_link_xcat],
  */
           __pyx_t_18 = __Pyx_PyInt_AsInt(__pyx_cur_scope->__pyx_v_suffix_link_xcat_index); if (unlikely((__pyx_t_18 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __pyx_cur_scope->__pyx_v_suffix_link_xcat = __pyx_f_3_sa_sym_setindex(__pyx_cur_scope->__pyx_v_self->category, __pyx_t_18);
+          __pyx_cur_scope->__pyx_v_suffix_link_xcat = __pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->category, __pyx_t_18);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1067
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1067
  *                             suffix_link_xcat_index = xcat_index-1
  *                         suffix_link_xcat = sym_setindex(self.category, suffix_link_xcat_index)
  *                         node.children[xcat] = ExtendedTrieNode(phrase_location=node.phrase_location,             # <<<<<<<<<<<<<<
@@ -46043,7 +43794,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__phrase_location), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1068
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1068
  *                         suffix_link_xcat = sym_setindex(self.category, suffix_link_xcat_index)
  *                         node.children[xcat] = ExtendedTrieNode(phrase_location=node.phrase_location,
  *                                 suffix_link=node.suffix_link.children[suffix_link_xcat],             # <<<<<<<<<<<<<<
@@ -46061,7 +43812,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__suffix_link), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1069
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1069
  *                         node.children[xcat] = ExtendedTrieNode(phrase_location=node.phrase_location,
  *                                 suffix_link=node.suffix_link.children[suffix_link_xcat],
  *                                 phrase= Phrase(phrase + (xcat,)))             # <<<<<<<<<<<<<<
@@ -46071,7 +43822,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_9 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_xcat); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1069; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1069; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
           __Pyx_GIVEREF(__pyx_t_9);
           __pyx_t_9 = 0;
@@ -46079,7 +43830,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
           __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1069; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
           __Pyx_GIVEREF(__pyx_t_9);
           __pyx_t_9 = 0;
@@ -46088,11 +43839,11 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
           if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__phrase), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_9 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_ExtendedTrieNode)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1067
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1067
  *                             suffix_link_xcat_index = xcat_index-1
  *                         suffix_link_xcat = sym_setindex(self.category, suffix_link_xcat_index)
  *                         node.children[xcat] = ExtendedTrieNode(phrase_location=node.phrase_location,             # <<<<<<<<<<<<<<
@@ -46108,7 +43859,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         }
         __pyx_L38:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1072
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1072
  * 
  *                     # sample from range
  *                     if not is_shadow_path:             # <<<<<<<<<<<<<<
@@ -46119,19 +43870,19 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __pyx_t_19 = (!__pyx_t_8);
         if (__pyx_t_19) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1073
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1073
  *                     # sample from range
  *                     if not is_shadow_path:
  *                         sample = self.sampler.sample(node.phrase_location)             # <<<<<<<<<<<<<<
  *                         num_subpatterns = (<PhraseLocation> node.phrase_location).num_subpatterns
  *                         chunklen = IntList(initial_len=num_subpatterns)
  */
-          __pyx_t_9 = PyObject_GetAttr(((PyObject *)__pyx_cur_scope->__pyx_v_self->sampler), __pyx_n_s__sample); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1073; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_9 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->sampler), __pyx_n_s__sample); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1073; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __pyx_t_10 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_node, __pyx_n_s__phrase_location); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1073; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1073; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
           __Pyx_GIVEREF(__pyx_t_10);
           __pyx_t_10 = 0;
@@ -46146,7 +43897,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_sample = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_10);
           __pyx_t_10 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1074
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1074
  *                     if not is_shadow_path:
  *                         sample = self.sampler.sample(node.phrase_location)
  *                         num_subpatterns = (<PhraseLocation> node.phrase_location).num_subpatterns             # <<<<<<<<<<<<<<
@@ -46158,7 +43909,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_num_subpatterns = ((struct __pyx_obj_3_sa_PhraseLocation *)__pyx_t_10)->num_subpatterns;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1075
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1075
  *                         sample = self.sampler.sample(node.phrase_location)
  *                         num_subpatterns = (<PhraseLocation> node.phrase_location).num_subpatterns
  *                         chunklen = IntList(initial_len=num_subpatterns)             # <<<<<<<<<<<<<<
@@ -46171,7 +43922,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_GOTREF(__pyx_t_3);
           if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__initial_len), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1075; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1075; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_3_sa_IntList)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1075; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
           __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_chunklen));
@@ -46180,7 +43931,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_chunklen = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_3);
           __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1076
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1076
  *                         num_subpatterns = (<PhraseLocation> node.phrase_location).num_subpatterns
  *                         chunklen = IntList(initial_len=num_subpatterns)
  *                         for j from 0 <= j < num_subpatterns:             # <<<<<<<<<<<<<<
@@ -46190,7 +43941,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_18 = __pyx_cur_scope->__pyx_v_num_subpatterns;
           for (__pyx_cur_scope->__pyx_v_j = 0; __pyx_cur_scope->__pyx_v_j < __pyx_t_18; __pyx_cur_scope->__pyx_v_j++) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1077
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1077
  *                         chunklen = IntList(initial_len=num_subpatterns)
  *                         for j from 0 <= j < num_subpatterns:
  *                             chunklen.arr[j] = hiero_phrase.chunklen(j)             # <<<<<<<<<<<<<<
@@ -46200,7 +43951,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             (__pyx_cur_scope->__pyx_v_chunklen->arr[__pyx_cur_scope->__pyx_v_j]) = ((struct __pyx_vtabstruct_3_sa_Phrase *)__pyx_cur_scope->__pyx_v_hiero_phrase->__pyx_vtab)->chunklen(__pyx_cur_scope->__pyx_v_hiero_phrase, __pyx_cur_scope->__pyx_v_j);
           }
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1078
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1078
  *                         for j from 0 <= j < num_subpatterns:
  *                             chunklen.arr[j] = hiero_phrase.chunklen(j)
  *                         extracts = []             # <<<<<<<<<<<<<<
@@ -46208,14 +43959,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                         extract_start = monitor_cpu()
  */
           __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1078; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_3));
           __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_extracts));
           __Pyx_XDECREF(((PyObject *)__pyx_cur_scope->__pyx_v_extracts));
           __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
           __pyx_cur_scope->__pyx_v_extracts = __pyx_t_3;
           __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1079
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1079
  *                             chunklen.arr[j] = hiero_phrase.chunklen(j)
  *                         extracts = []
  *                         j = 0             # <<<<<<<<<<<<<<
@@ -46224,7 +43975,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
           __pyx_cur_scope->__pyx_v_j = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1080
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1080
  *                         extracts = []
  *                         j = 0
  *                         extract_start = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -46239,7 +43990,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_extract_start = __pyx_t_3;
           __pyx_t_3 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1081
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1081
  *                         j = 0
  *                         extract_start = monitor_cpu()
  *                         while j < sample.len:             # <<<<<<<<<<<<<<
@@ -46250,7 +44001,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_t_19 = (__pyx_cur_scope->__pyx_v_j < __pyx_cur_scope->__pyx_v_sample->len);
             if (!__pyx_t_19) break;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1082
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1082
  *                         extract_start = monitor_cpu()
  *                         while j < sample.len:
  *                             extract = []             # <<<<<<<<<<<<<<
@@ -46258,23 +44009,23 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                             assign_matching(&matching, sample.arr, j, num_subpatterns, self.fda.sent_id.arr)
  */
             __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1082; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_3));
             __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_extract);
             __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_extract);
             __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
             __pyx_cur_scope->__pyx_v_extract = ((PyObject *)__pyx_t_3);
             __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1084
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1084
  *                             extract = []
  * 
  *                             assign_matching(&matching, sample.arr, j, num_subpatterns, self.fda.sent_id.arr)             # <<<<<<<<<<<<<<
  *                             loc = tuple(sample[j:j+num_subpatterns])
  *                             extract = self.extract(hiero_phrase, &matching, chunklen.arr, num_subpatterns)
  */
-            __pyx_f_3_sa_assign_matching((&__pyx_cur_scope->__pyx_v_matching), __pyx_cur_scope->__pyx_v_sample->arr, __pyx_cur_scope->__pyx_v_j, __pyx_cur_scope->__pyx_v_num_subpatterns, __pyx_cur_scope->__pyx_v_self->fda->sent_id->arr);
+            __pyx_f_3_sa_assign_matching((&__pyx_cur_scope->__pyx_v_matching), __pyx_cur_scope->__pyx_v_sample->arr, __pyx_cur_scope->__pyx_v_j, __pyx_cur_scope->__pyx_v_num_subpatterns, ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->fda->sent_id->arr);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1085
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1085
  * 
  *                             assign_matching(&matching, sample.arr, j, num_subpatterns, self.fda.sent_id.arr)
  *                             loc = tuple(sample[j:j+num_subpatterns])             # <<<<<<<<<<<<<<
@@ -46284,7 +44035,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_t_3 = __Pyx_PySequence_GetSlice(((PyObject *)__pyx_cur_scope->__pyx_v_sample), __pyx_cur_scope->__pyx_v_j, (__pyx_cur_scope->__pyx_v_j + __pyx_cur_scope->__pyx_v_num_subpatterns)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_10);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
             PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_3);
             __Pyx_GIVEREF(__pyx_t_3);
             __pyx_t_3 = 0;
@@ -46297,14 +44048,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_loc = __pyx_t_3;
             __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1086
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1086
  *                             assign_matching(&matching, sample.arr, j, num_subpatterns, self.fda.sent_id.arr)
  *                             loc = tuple(sample[j:j+num_subpatterns])
  *                             extract = self.extract(hiero_phrase, &matching, chunklen.arr, num_subpatterns)             # <<<<<<<<<<<<<<
  *                             extracts.extend([(e, loc) for e in extract])
  *                             j = j + num_subpatterns
  */
-            __pyx_t_3 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->extract(__pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_hiero_phrase, (&__pyx_cur_scope->__pyx_v_matching), __pyx_cur_scope->__pyx_v_chunklen->arr, __pyx_cur_scope->__pyx_v_num_subpatterns); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_3 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->__pyx_vtab)->extract(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self), __pyx_cur_scope->__pyx_v_hiero_phrase, (&__pyx_cur_scope->__pyx_v_matching), __pyx_cur_scope->__pyx_v_chunklen->arr, __pyx_cur_scope->__pyx_v_num_subpatterns); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_extract);
             __Pyx_DECREF(__pyx_cur_scope->__pyx_v_extract);
@@ -46312,7 +44063,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_extract = __pyx_t_3;
             __pyx_t_3 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1087
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1087
  *                             loc = tuple(sample[j:j+num_subpatterns])
  *                             extract = self.extract(hiero_phrase, &matching, chunklen.arr, num_subpatterns)
  *                             extracts.extend([(e, loc) for e in extract])             # <<<<<<<<<<<<<<
@@ -46322,7 +44073,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_cur_scope->__pyx_v_extracts), __pyx_n_s__extend); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_10);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_10));
             if (PyList_CheckExact(__pyx_cur_scope->__pyx_v_extract) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_extract)) {
               __pyx_t_9 = __pyx_cur_scope->__pyx_v_extract; __Pyx_INCREF(__pyx_t_9); __pyx_t_5 = 0;
               __pyx_t_20 = NULL;
@@ -46332,20 +44083,12 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
               __pyx_t_20 = Py_TYPE(__pyx_t_9)->tp_iternext;
             }
             for (;;) {
-              if (!__pyx_t_20 && PyList_CheckExact(__pyx_t_9)) {
+              if (PyList_CheckExact(__pyx_t_9)) {
                 if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_9)) break;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                __pyx_t_14 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_5); __Pyx_INCREF(__pyx_t_14); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                #else
-                __pyx_t_14 = PySequence_ITEM(__pyx_t_9, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                #endif
-              } else if (!__pyx_t_20 && PyTuple_CheckExact(__pyx_t_9)) {
+                __pyx_t_14 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_5); __Pyx_INCREF(__pyx_t_14); __pyx_t_5++;
+              } else if (PyTuple_CheckExact(__pyx_t_9)) {
                 if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_5); __Pyx_INCREF(__pyx_t_14); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                #else
-                __pyx_t_14 = PySequence_ITEM(__pyx_t_9, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                #endif
+                __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_5); __Pyx_INCREF(__pyx_t_14); __pyx_t_5++;
               } else {
                 __pyx_t_14 = __pyx_t_20(__pyx_t_9);
                 if (unlikely(!__pyx_t_14)) {
@@ -46363,19 +44106,19 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
               __pyx_cur_scope->__pyx_v_e = __pyx_t_14;
               __pyx_t_14 = 0;
               __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_14);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_14));
               __Pyx_INCREF(__pyx_cur_scope->__pyx_v_e);
               PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_cur_scope->__pyx_v_e);
               __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_e);
               __Pyx_INCREF(__pyx_cur_scope->__pyx_v_loc);
               PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_cur_scope->__pyx_v_loc);
               __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_loc);
-              if (unlikely(__Pyx_PyList_Append(__pyx_t_10, (PyObject*)__pyx_t_14))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              if (unlikely(PyList_Append(__pyx_t_10, (PyObject*)__pyx_t_14))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
             }
             __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
             __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_9);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_9));
             __Pyx_INCREF(((PyObject *)__pyx_t_10));
             PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_t_10));
             __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
@@ -46386,7 +44129,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1088
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1088
  *                             extract = self.extract(hiero_phrase, &matching, chunklen.arr, num_subpatterns)
  *                             extracts.extend([(e, loc) for e in extract])
  *                             j = j + num_subpatterns             # <<<<<<<<<<<<<<
@@ -46396,7 +44139,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_j = (__pyx_cur_scope->__pyx_v_j + __pyx_cur_scope->__pyx_v_num_subpatterns);
           }
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1090
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1090
  *                             j = j + num_subpatterns
  * 
  *                         num_samples = sample.len/num_subpatterns             # <<<<<<<<<<<<<<
@@ -46413,7 +44156,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           }
           __pyx_cur_scope->__pyx_v_num_samples = __Pyx_div_int(__pyx_cur_scope->__pyx_v_sample->len, __pyx_cur_scope->__pyx_v_num_subpatterns);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1091
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1091
  * 
  *                         num_samples = sample.len/num_subpatterns
  *                         extract_stop = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -46428,14 +44171,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_extract_stop = __pyx_t_10;
           __pyx_t_10 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1092
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1092
  *                         num_samples = sample.len/num_subpatterns
  *                         extract_stop = monitor_cpu()
  *                         self.extract_time = self.extract_time + extract_stop - extract_start             # <<<<<<<<<<<<<<
  *                         if len(extracts) > 0:
  *                             fcount = Counter()
  */
-          __pyx_t_10 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->extract_time); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = PyFloat_FromDouble(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->extract_time); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_9 = PyNumber_Add(__pyx_t_10, __pyx_cur_scope->__pyx_v_extract_stop); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
@@ -46443,22 +44186,25 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_10 = PyNumber_Subtract(__pyx_t_9, __pyx_cur_scope->__pyx_v_extract_start); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          __pyx_t_21 = __pyx_PyFloat_AsFloat(__pyx_t_10); if (unlikely((__pyx_t_21 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_21 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_21 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          __pyx_cur_scope->__pyx_v_self->extract_time = __pyx_t_21;
+          ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->extract_time = __pyx_t_21;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1093
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1093
  *                         extract_stop = monitor_cpu()
  *                         self.extract_time = self.extract_time + extract_stop - extract_start
  *                         if len(extracts) > 0:             # <<<<<<<<<<<<<<
  *                             fcount = Counter()
  *                             fphrases = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
  */
-          __pyx_t_5 = PyList_GET_SIZE(((PyObject *)__pyx_cur_scope->__pyx_v_extracts)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_extracts) == Py_None)) {
+            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+          }
+          __pyx_t_5 = PyList_GET_SIZE(((PyObject *)__pyx_cur_scope->__pyx_v_extracts)); 
           __pyx_t_19 = (__pyx_t_5 > 0);
           if (__pyx_t_19) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1094
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1094
  *                         self.extract_time = self.extract_time + extract_stop - extract_start
  *                         if len(extracts) > 0:
  *                             fcount = Counter()             # <<<<<<<<<<<<<<
@@ -46476,7 +44222,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_fcount = __pyx_t_9;
             __pyx_t_9 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1095
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1095
  *                         if len(extracts) > 0:
  *                             fcount = Counter()
  *                             fphrases = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))             # <<<<<<<<<<<<<<
@@ -46485,10 +44231,10 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
             __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__defaultdict); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_9);
-            __pyx_t_10 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3_sa_23HieroCachingRuleFactory_5input_lambda1, 0, NULL, __pyx_n_s___sa, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_10 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_lambda_methdef_lambda1, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_10);
             __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_3));
             PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
             __Pyx_GIVEREF(__pyx_t_10);
             __pyx_t_10 = 0;
@@ -46502,50 +44248,43 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_fphrases = __pyx_t_10;
             __pyx_t_10 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1096
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1096
  *                             fcount = Counter()
  *                             fphrases = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
  *                             for (f, e, count, als), loc in extracts:             # <<<<<<<<<<<<<<
  *                                 fcount[f] += count
  *                                 fphrases[f][e][als].append(loc)
  */
+            if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_extracts) == Py_None)) {
+              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+            }
             __pyx_t_10 = ((PyObject *)__pyx_cur_scope->__pyx_v_extracts); __Pyx_INCREF(__pyx_t_10); __pyx_t_5 = 0;
             for (;;) {
               if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_10)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_3 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #else
-              __pyx_t_3 = PySequence_ITEM(__pyx_t_10, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
+              __pyx_t_3 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++;
               if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
                 PyObject* sequence = __pyx_t_3;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                Py_ssize_t size = Py_SIZE(sequence);
-                #else
-                Py_ssize_t size = PySequence_Size(sequence);
-                #endif
-                if (unlikely(size != 2)) {
-                  if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-                  else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                }
-                #if CYTHON_COMPILING_IN_CPYTHON
                 if (likely(PyTuple_CheckExact(sequence))) {
+                  if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                    if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                    else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
                   __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
                   __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
                 } else {
+                  if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                    if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                    else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
                   __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
                   __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
                 }
                 __Pyx_INCREF(__pyx_t_9);
                 __Pyx_INCREF(__pyx_t_14);
-                #else
-                __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                #endif
                 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-              } else
-              {
+              } else {
                 Py_ssize_t index = -1;
                 __pyx_t_15 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_15);
@@ -46556,35 +44295,33 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 index = 1; __pyx_t_14 = __pyx_t_17(__pyx_t_15); if (unlikely(!__pyx_t_14)) goto __pyx_L50_unpacking_failed;
                 __Pyx_GOTREF(__pyx_t_14);
                 if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_15), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __pyx_t_17 = NULL;
                 __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                 goto __pyx_L51_unpacking_done;
                 __pyx_L50_unpacking_failed:;
                 __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-                __pyx_t_17 = NULL;
-                if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+                if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
                 {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __pyx_L51_unpacking_done:;
               }
               if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
                 PyObject* sequence = __pyx_t_9;
-                #if CYTHON_COMPILING_IN_CPYTHON
-                Py_ssize_t size = Py_SIZE(sequence);
-                #else
-                Py_ssize_t size = PySequence_Size(sequence);
-                #endif
-                if (unlikely(size != 4)) {
-                  if (size > 4) __Pyx_RaiseTooManyValuesError(4);
-                  else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                }
-                #if CYTHON_COMPILING_IN_CPYTHON
                 if (likely(PyTuple_CheckExact(sequence))) {
+                  if (unlikely(PyTuple_GET_SIZE(sequence) != 4)) {
+                    if (PyTuple_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4);
+                    else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
                   __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0); 
                   __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
                   __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
                   __pyx_t_13 = PyTuple_GET_ITEM(sequence, 3); 
                 } else {
+                  if (unlikely(PyList_GET_SIZE(sequence) != 4)) {
+                    if (PyList_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4);
+                    else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
                   __pyx_t_15 = PyList_GET_ITEM(sequence, 0); 
                   __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
                   __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
@@ -46594,36 +44331,28 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __Pyx_INCREF(__pyx_t_2);
                 __Pyx_INCREF(__pyx_t_7);
                 __Pyx_INCREF(__pyx_t_13);
-                #else
-                Py_ssize_t i;
-                PyObject** temps[4] = {&__pyx_t_15,&__pyx_t_2,&__pyx_t_7,&__pyx_t_13};
-                for (i=0; i < 4; i++) {
-                  PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  *(temps[i]) = item;
-                }
-                #endif
                 __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-              } else
-              {
+              } else {
                 Py_ssize_t index = -1;
-                PyObject** temps[4] = {&__pyx_t_15,&__pyx_t_2,&__pyx_t_7,&__pyx_t_13};
                 __pyx_t_16 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_16);
                 __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                 __pyx_t_17 = Py_TYPE(__pyx_t_16)->tp_iternext;
-                for (index=0; index < 4; index++) {
-                  PyObject* item = __pyx_t_17(__pyx_t_16); if (unlikely(!item)) goto __pyx_L52_unpacking_failed;
-                  __Pyx_GOTREF(item);
-                  *(temps[index]) = item;
-                }
+                index = 0; __pyx_t_15 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_15)) goto __pyx_L52_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_15);
+                index = 1; __pyx_t_2 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_2)) goto __pyx_L52_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_2);
+                index = 2; __pyx_t_7 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_7)) goto __pyx_L52_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_7);
+                index = 3; __pyx_t_13 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_13)) goto __pyx_L52_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_13);
                 if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_16), 4) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __pyx_t_17 = NULL;
                 __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                 goto __pyx_L53_unpacking_done;
                 __pyx_L52_unpacking_failed:;
                 __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
-                __pyx_t_17 = NULL;
-                if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+                if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
                 {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __pyx_L53_unpacking_done:;
               }
@@ -46653,7 +44382,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
               __pyx_cur_scope->__pyx_v_loc = __pyx_t_14;
               __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1097
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1097
  *                             fphrases = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
  *                             for (f, e, count, als), loc in extracts:
  *                                 fcount[f] += count             # <<<<<<<<<<<<<<
@@ -46671,7 +44400,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
               __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
               __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1098
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1098
  *                             for (f, e, count, als), loc in extracts:
  *                                 fcount[f] += count
  *                                 fphrases[f][e][als].append(loc)             # <<<<<<<<<<<<<<
@@ -46693,75 +44422,191 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             }
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1099
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1099
  *                                 fcount[f] += count
  *                                 fphrases[f][e][als].append(loc)
  *                             for f, elist in fphrases.iteritems():             # <<<<<<<<<<<<<<
  *                                 for e, alslist in elist.iteritems():
  *                                     alignment = max(alslist.iteritems(), key=lambda x: len(x[1]))[0]
  */
-            __pyx_t_5 = 0;
-            if (unlikely(__pyx_cur_scope->__pyx_v_fphrases == Py_None)) {
-              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-              {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            }
-            __pyx_t_9 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_fphrases, 0, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_22), (&__pyx_t_18)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_10 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_fphrases, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_GOTREF(__pyx_t_10);
+            __pyx_t_9 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_9);
-            __Pyx_XDECREF(__pyx_t_10);
-            __pyx_t_10 = __pyx_t_9;
-            __pyx_t_9 = 0;
-            while (1) {
-              __pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_10, __pyx_t_22, &__pyx_t_5, &__pyx_t_9, &__pyx_t_3, NULL, __pyx_t_18);
-              if (unlikely(__pyx_t_6 == 0)) break;
-              if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_9);
-              __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+            if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) {
+              __pyx_t_10 = __pyx_t_9; __Pyx_INCREF(__pyx_t_10); __pyx_t_5 = 0;
+              __pyx_t_20 = NULL;
+            } else {
+              __pyx_t_5 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_GOTREF(__pyx_t_10);
+              __pyx_t_20 = Py_TYPE(__pyx_t_10)->tp_iternext;
+            }
+            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+            for (;;) {
+              if (PyList_CheckExact(__pyx_t_10)) {
+                if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_10)) break;
+                __pyx_t_9 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_5); __Pyx_INCREF(__pyx_t_9); __pyx_t_5++;
+              } else if (PyTuple_CheckExact(__pyx_t_10)) {
+                if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
+                __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_5); __Pyx_INCREF(__pyx_t_9); __pyx_t_5++;
+              } else {
+                __pyx_t_9 = __pyx_t_20(__pyx_t_10);
+                if (unlikely(!__pyx_t_9)) {
+                  if (PyErr_Occurred()) {
+                    if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+                    else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
+                  break;
+                }
+                __Pyx_GOTREF(__pyx_t_9);
+              }
+              if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
+                PyObject* sequence = __pyx_t_9;
+                if (likely(PyTuple_CheckExact(sequence))) {
+                  if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                    if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                    else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
+                  __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+                  __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
+                } else {
+                  if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                    if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                    else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  }
+                  __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
+                  __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
+                }
+                __Pyx_INCREF(__pyx_t_3);
+                __Pyx_INCREF(__pyx_t_14);
+                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+              } else {
+                Py_ssize_t index = -1;
+                __pyx_t_13 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_13);
+                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+                __pyx_t_17 = Py_TYPE(__pyx_t_13)->tp_iternext;
+                index = 0; __pyx_t_3 = __pyx_t_17(__pyx_t_13); if (unlikely(!__pyx_t_3)) goto __pyx_L56_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_3);
+                index = 1; __pyx_t_14 = __pyx_t_17(__pyx_t_13); if (unlikely(!__pyx_t_14)) goto __pyx_L56_unpacking_failed;
+                __Pyx_GOTREF(__pyx_t_14);
+                if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+                goto __pyx_L57_unpacking_done;
+                __pyx_L56_unpacking_failed:;
+                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+                if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+                {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_L57_unpacking_done:;
+              }
               __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_f);
               __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_f);
-              __Pyx_GIVEREF(__pyx_t_9);
-              __pyx_cur_scope->__pyx_v_f = __pyx_t_9;
-              __pyx_t_9 = 0;
-              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_elist);
-              __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_elist);
               __Pyx_GIVEREF(__pyx_t_3);
-              __pyx_cur_scope->__pyx_v_elist = __pyx_t_3;
+              __pyx_cur_scope->__pyx_v_f = __pyx_t_3;
               __pyx_t_3 = 0;
+              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_elist);
+              __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_elist);
+              __Pyx_GIVEREF(__pyx_t_14);
+              __pyx_cur_scope->__pyx_v_elist = __pyx_t_14;
+              __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1100
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1100
  *                                 fphrases[f][e][als].append(loc)
  *                             for f, elist in fphrases.iteritems():
  *                                 for e, alslist in elist.iteritems():             # <<<<<<<<<<<<<<
  *                                     alignment = max(alslist.iteritems(), key=lambda x: len(x[1]))[0]
  *                                     locs = tuple(itertools.chain(alslist.itervalues()))
  */
-              __pyx_t_23 = 0;
-              if (unlikely(__pyx_cur_scope->__pyx_v_elist == Py_None)) {
-                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-                {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              }
-              __pyx_t_9 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_elist, 0, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_24), (&__pyx_t_6)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __pyx_t_9 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_elist, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_9);
-              __Pyx_XDECREF(__pyx_t_3);
-              __pyx_t_3 = __pyx_t_9;
-              __pyx_t_9 = 0;
-              while (1) {
-                __pyx_t_4 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_24, &__pyx_t_23, &__pyx_t_9, &__pyx_t_14, NULL, __pyx_t_6);
-                if (unlikely(__pyx_t_4 == 0)) break;
-                if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __pyx_t_14 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_GOTREF(__pyx_t_14);
+              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+              if (PyList_CheckExact(__pyx_t_14) || PyTuple_CheckExact(__pyx_t_14)) {
+                __pyx_t_9 = __pyx_t_14; __Pyx_INCREF(__pyx_t_9); __pyx_t_22 = 0;
+                __pyx_t_23 = NULL;
+              } else {
+                __pyx_t_22 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_9);
-                __Pyx_GOTREF(__pyx_t_14);
+                __pyx_t_23 = Py_TYPE(__pyx_t_9)->tp_iternext;
+              }
+              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+              for (;;) {
+                if (PyList_CheckExact(__pyx_t_9)) {
+                  if (__pyx_t_22 >= PyList_GET_SIZE(__pyx_t_9)) break;
+                  __pyx_t_14 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_22); __Pyx_INCREF(__pyx_t_14); __pyx_t_22++;
+                } else if (PyTuple_CheckExact(__pyx_t_9)) {
+                  if (__pyx_t_22 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
+                  __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_22); __Pyx_INCREF(__pyx_t_14); __pyx_t_22++;
+                } else {
+                  __pyx_t_14 = __pyx_t_23(__pyx_t_9);
+                  if (unlikely(!__pyx_t_14)) {
+                    if (PyErr_Occurred()) {
+                      if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+                      else {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
+                    break;
+                  }
+                  __Pyx_GOTREF(__pyx_t_14);
+                }
+                if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) {
+                  PyObject* sequence = __pyx_t_14;
+                  if (likely(PyTuple_CheckExact(sequence))) {
+                    if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                      if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
+                    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+                    __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); 
+                  } else {
+                    if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                      if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
+                    __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
+                    __pyx_t_13 = PyList_GET_ITEM(sequence, 1); 
+                  }
+                  __Pyx_INCREF(__pyx_t_3);
+                  __Pyx_INCREF(__pyx_t_13);
+                  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+                } else {
+                  Py_ssize_t index = -1;
+                  __pyx_t_7 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  __Pyx_GOTREF(__pyx_t_7);
+                  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+                  __pyx_t_17 = Py_TYPE(__pyx_t_7)->tp_iternext;
+                  index = 0; __pyx_t_3 = __pyx_t_17(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L60_unpacking_failed;
+                  __Pyx_GOTREF(__pyx_t_3);
+                  index = 1; __pyx_t_13 = __pyx_t_17(__pyx_t_7); if (unlikely(!__pyx_t_13)) goto __pyx_L60_unpacking_failed;
+                  __Pyx_GOTREF(__pyx_t_13);
+                  if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+                  goto __pyx_L61_unpacking_done;
+                  __pyx_L60_unpacking_failed:;
+                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+                  if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                  if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
+                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  __pyx_L61_unpacking_done:;
+                }
                 __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_e);
                 __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_e);
-                __Pyx_GIVEREF(__pyx_t_9);
-                __pyx_cur_scope->__pyx_v_e = __pyx_t_9;
-                __pyx_t_9 = 0;
+                __Pyx_GIVEREF(__pyx_t_3);
+                __pyx_cur_scope->__pyx_v_e = __pyx_t_3;
+                __pyx_t_3 = 0;
                 __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_alslist);
                 __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_alslist);
-                __Pyx_GIVEREF(__pyx_t_14);
-                __pyx_cur_scope->__pyx_v_alslist = __pyx_t_14;
-                __pyx_t_14 = 0;
+                __Pyx_GIVEREF(__pyx_t_13);
+                __pyx_cur_scope->__pyx_v_alslist = __pyx_t_13;
+                __pyx_t_13 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1101
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1101
  *                             for f, elist in fphrases.iteritems():
  *                                 for e, alslist in elist.iteritems():
  *                                     alignment = max(alslist.iteritems(), key=lambda x: len(x[1]))[0]             # <<<<<<<<<<<<<<
@@ -46770,82 +44615,85 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
                 __pyx_t_14 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_alslist, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_14);
-                __pyx_t_9 = PyObject_Call(__pyx_t_14, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
+                __pyx_t_13 = PyObject_Call(__pyx_t_14, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_13);
                 __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                 __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_14);
-                PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_9);
-                __Pyx_GIVEREF(__pyx_t_9);
-                __pyx_t_9 = 0;
-                __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(((PyObject *)__pyx_t_9));
-                __pyx_t_13 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3_sa_23HieroCachingRuleFactory_5input_1lambda3, 0, NULL, __pyx_n_s___sa, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_13);
-                if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__key), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-                __pyx_t_13 = PyObject_Call(__pyx_builtin_max, ((PyObject *)__pyx_t_14), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_13);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_14));
+                PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13);
+                __Pyx_GIVEREF(__pyx_t_13);
+                __pyx_t_13 = 0;
+                __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(((PyObject *)__pyx_t_13));
+                __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_lambda_methdef_lambda3, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_3);
+                if (PyDict_SetItem(__pyx_t_13, ((PyObject *)__pyx_n_s__key), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+                __pyx_t_3 = PyEval_CallObjectWithKeywords(__pyx_builtin_max, ((PyObject *)__pyx_t_14), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_3);
                 __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
-                __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-                __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_13, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
-                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+                __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
+                __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_3, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_13) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_13);
+                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                 __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_alignment);
                 __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_alignment);
-                __Pyx_GIVEREF(__pyx_t_9);
-                __pyx_cur_scope->__pyx_v_alignment = __pyx_t_9;
-                __pyx_t_9 = 0;
+                __Pyx_GIVEREF(__pyx_t_13);
+                __pyx_cur_scope->__pyx_v_alignment = __pyx_t_13;
+                __pyx_t_13 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1102
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1102
  *                                 for e, alslist in elist.iteritems():
  *                                     alignment = max(alslist.iteritems(), key=lambda x: len(x[1]))[0]
  *                                     locs = tuple(itertools.chain(alslist.itervalues()))             # <<<<<<<<<<<<<<
  *                                     count = len(locs)
  *                                     scores = self.scorer.score(FeatureContext(
  */
-                __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__itertools); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
-                __pyx_t_13 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__chain); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__itertools); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_13);
-                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-                __pyx_t_9 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_alslist, __pyx_n_s__itervalues); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
-                __pyx_t_14 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_3 = PyObject_GetAttr(__pyx_t_13, __pyx_n_s__chain); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_3);
+                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+                __pyx_t_13 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_alslist, __pyx_n_s__itervalues); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_13);
+                __pyx_t_14 = PyObject_Call(__pyx_t_13, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_14);
-                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-                __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
-                PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_14);
+                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+                __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(((PyObject *)__pyx_t_13));
+                PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14);
                 __Pyx_GIVEREF(__pyx_t_14);
                 __pyx_t_14 = 0;
-                __pyx_t_14 = PyObject_Call(__pyx_t_13, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_14 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_13), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_14);
-                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-                __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-                __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
-                PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_14);
+                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+                __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
+                __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(((PyObject *)__pyx_t_13));
+                PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14);
                 __Pyx_GIVEREF(__pyx_t_14);
                 __pyx_t_14 = 0;
-                __pyx_t_14 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_14 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_13), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_14);
-                __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
+                __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
                 __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_locs));
                 __Pyx_XDECREF(((PyObject *)__pyx_cur_scope->__pyx_v_locs));
                 __Pyx_GIVEREF(__pyx_t_14);
                 __pyx_cur_scope->__pyx_v_locs = ((PyObject*)__pyx_t_14);
                 __pyx_t_14 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1103
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1103
  *                                     alignment = max(alslist.iteritems(), key=lambda x: len(x[1]))[0]
  *                                     locs = tuple(itertools.chain(alslist.itervalues()))
  *                                     count = len(locs)             # <<<<<<<<<<<<<<
  *                                     scores = self.scorer.score(FeatureContext(
  *                                                f, e, count, fcount[f], num_samples,
  */
-                __pyx_t_25 = PyTuple_GET_SIZE(((PyObject *)__pyx_cur_scope->__pyx_v_locs)); if (unlikely(__pyx_t_25 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __pyx_t_14 = PyInt_FromSsize_t(__pyx_t_25); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_locs) == Py_None)) {
+                  PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+                }
+                __pyx_t_24 = PyTuple_GET_SIZE(((PyObject *)__pyx_cur_scope->__pyx_v_locs)); 
+                __pyx_t_14 = PyInt_FromSsize_t(__pyx_t_24); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_14);
                 __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_count);
                 __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_count);
@@ -46853,41 +44701,41 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __pyx_cur_scope->__pyx_v_count = __pyx_t_14;
                 __pyx_t_14 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1104
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1104
  *                                     locs = tuple(itertools.chain(alslist.itervalues()))
  *                                     count = len(locs)
  *                                     scores = self.scorer.score(FeatureContext(             # <<<<<<<<<<<<<<
  *                                                f, e, count, fcount[f], num_samples,
- *                                                (i,k), locs, fwords
+ *                                                (k,i), locs, fwords
  */
                 __pyx_t_14 = __Pyx_GetName(__pyx_m, __pyx_n_s__FeatureContext); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_14);
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1105
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1105
  *                                     count = len(locs)
  *                                     scores = self.scorer.score(FeatureContext(
  *                                                f, e, count, fcount[f], num_samples,             # <<<<<<<<<<<<<<
- *                                                (i,k), locs, fwords
+ *                                                (k,i), locs, fwords
  *                                                ))
  */
-                __pyx_t_9 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_fcount, __pyx_cur_scope->__pyx_v_f); if (!__pyx_t_9) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_9);
-                __pyx_t_13 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_num_samples); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_13 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_fcount, __pyx_cur_scope->__pyx_v_f); if (!__pyx_t_13) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_13);
+                __pyx_t_3 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_num_samples); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __Pyx_GOTREF(__pyx_t_3);
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1106
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1106
  *                                     scores = self.scorer.score(FeatureContext(
  *                                                f, e, count, fcount[f], num_samples,
- *                                                (i,k), locs, fwords             # <<<<<<<<<<<<<<
+ *                                                (k,i), locs, fwords             # <<<<<<<<<<<<<<
  *                                                ))
  *                                     yield Rule(self.category, f, e, scores, alignment)
  */
-                __pyx_t_7 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_7 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_7);
-                __pyx_t_2 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_2 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_2);
                 __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_15);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_15));
                 PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);
                 __Pyx_GIVEREF(__pyx_t_7);
                 PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);
@@ -46895,15 +44743,15 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __pyx_t_7 = 0;
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1107
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1107
  *                                                f, e, count, fcount[f], num_samples,
- *                                                (i,k), locs, fwords
+ *                                                (k,i), locs, fwords
  *                                                ))             # <<<<<<<<<<<<<<
  *                                     yield Rule(self.category, f, e, scores, alignment)
  * 
  */
                 __pyx_t_2 = PyTuple_New(8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_2);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_2));
                 __Pyx_INCREF(__pyx_cur_scope->__pyx_v_f);
                 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_f);
                 __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_f);
@@ -46913,10 +44761,10 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __Pyx_INCREF(__pyx_cur_scope->__pyx_v_count);
                 PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_cur_scope->__pyx_v_count);
                 __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_count);
-                PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_9);
-                __Pyx_GIVEREF(__pyx_t_9);
-                PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_13);
+                PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_13);
                 __Pyx_GIVEREF(__pyx_t_13);
+                PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_3);
                 PyTuple_SET_ITEM(__pyx_t_2, 5, ((PyObject *)__pyx_t_15));
                 __Pyx_GIVEREF(((PyObject *)__pyx_t_15));
                 __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_locs));
@@ -46925,14 +44773,14 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fwords);
                 PyTuple_SET_ITEM(__pyx_t_2, 7, __pyx_cur_scope->__pyx_v_fwords);
                 __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fwords);
-                __pyx_t_9 = 0;
                 __pyx_t_13 = 0;
+                __pyx_t_3 = 0;
                 __pyx_t_15 = 0;
                 __pyx_t_15 = PyObject_Call(__pyx_t_14, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_15);
                 __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-                __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_3_sa_Scorer *)__pyx_cur_scope->__pyx_v_self->scorer->__pyx_vtab)->score(__pyx_cur_scope->__pyx_v_self->scorer, __pyx_t_15)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_3_sa_Scorer *)((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->scorer->__pyx_vtab)->score(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->scorer, __pyx_t_15)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                 __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_scores));
@@ -46941,17 +44789,17 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __pyx_cur_scope->__pyx_v_scores = ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_t_2);
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1108
- *                                                (i,k), locs, fwords
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1108
+ *                                                (k,i), locs, fwords
  *                                                ))
  *                                     yield Rule(self.category, f, e, scores, alignment)             # <<<<<<<<<<<<<<
  * 
  *                 if len(phrase) < self.max_length and i+spanlen < len(fwords) and pathlen+1 <= self.max_initial_size:
  */
-                __pyx_t_2 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_self->category); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->category); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_2);
                 __pyx_t_15 = PyTuple_New(5); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_15);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_15));
                 PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);
                 __Pyx_GIVEREF(__pyx_t_2);
                 __Pyx_INCREF(__pyx_cur_scope->__pyx_v_f);
@@ -46973,43 +44821,39 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
                 __pyx_r = __pyx_t_2;
                 __pyx_t_2 = 0;
                 __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
-                __Pyx_XGIVEREF(__pyx_t_3);
-                __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
-                __pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
-                __pyx_cur_scope->__pyx_t_3 = __pyx_t_6;
+                __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
+                __Pyx_XGIVEREF(__pyx_t_9);
+                __pyx_cur_scope->__pyx_t_2 = __pyx_t_9;
                 __Pyx_XGIVEREF(__pyx_t_10);
-                __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
+                __pyx_cur_scope->__pyx_t_3 = __pyx_t_10;
                 __Pyx_XGIVEREF(__pyx_t_12);
-                __pyx_cur_scope->__pyx_t_5 = __pyx_t_12;
-                __pyx_cur_scope->__pyx_t_6 = __pyx_t_18;
-                __pyx_cur_scope->__pyx_t_7 = __pyx_t_22;
-                __pyx_cur_scope->__pyx_t_8 = __pyx_t_23;
-                __pyx_cur_scope->__pyx_t_9 = __pyx_t_24;
+                __pyx_cur_scope->__pyx_t_4 = __pyx_t_12;
+                __pyx_cur_scope->__pyx_t_5 = __pyx_t_20;
+                __pyx_cur_scope->__pyx_t_6 = __pyx_t_22;
+                __pyx_cur_scope->__pyx_t_7 = __pyx_t_23;
                 __Pyx_XGIVEREF(__pyx_r);
                 __Pyx_RefNannyFinishContext();
                 /* return from generator, yielding value */
-                __pyx_generator->resume_label = 1;
+                __pyx_cur_scope->__pyx_base.resume_label = 1;
                 return __pyx_r;
-                __pyx_L58_resume_from_yield:;
+                __pyx_L62_resume_from_yield:;
                 __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
-                __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
-                __pyx_cur_scope->__pyx_t_1 = 0;
-                __Pyx_XGOTREF(__pyx_t_3);
-                __pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
-                __pyx_t_6 = __pyx_cur_scope->__pyx_t_3;
-                __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
-                __pyx_cur_scope->__pyx_t_4 = 0;
+                __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
+                __pyx_t_9 = __pyx_cur_scope->__pyx_t_2;
+                __pyx_cur_scope->__pyx_t_2 = 0;
+                __Pyx_XGOTREF(__pyx_t_9);
+                __pyx_t_10 = __pyx_cur_scope->__pyx_t_3;
+                __pyx_cur_scope->__pyx_t_3 = 0;
                 __Pyx_XGOTREF(__pyx_t_10);
-                __pyx_t_12 = __pyx_cur_scope->__pyx_t_5;
-                __pyx_cur_scope->__pyx_t_5 = 0;
+                __pyx_t_12 = __pyx_cur_scope->__pyx_t_4;
+                __pyx_cur_scope->__pyx_t_4 = 0;
                 __Pyx_XGOTREF(__pyx_t_12);
-                __pyx_t_18 = __pyx_cur_scope->__pyx_t_6;
-                __pyx_t_22 = __pyx_cur_scope->__pyx_t_7;
-                __pyx_t_23 = __pyx_cur_scope->__pyx_t_8;
-                __pyx_t_24 = __pyx_cur_scope->__pyx_t_9;
+                __pyx_t_20 = __pyx_cur_scope->__pyx_t_5;
+                __pyx_t_22 = __pyx_cur_scope->__pyx_t_6;
+                __pyx_t_23 = __pyx_cur_scope->__pyx_t_7;
                 if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               }
-              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
             }
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
             goto __pyx_L47;
@@ -47022,78 +44866,83 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
       }
       __pyx_L32:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1110
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1110
  *                                     yield Rule(self.category, f, e, scores, alignment)
  * 
  *                 if len(phrase) < self.max_length and i+spanlen < len(fwords) and pathlen+1 <= self.max_initial_size:             # <<<<<<<<<<<<<<
  *                     for alt_id in range(len(fwords[i+spanlen])):
  *                         new_frontier.append((k, i+spanlen, alt_id, pathlen + 1, node, phrase, is_shadow_path))
  */
-      __pyx_t_22 = PyObject_Length(__pyx_cur_scope->__pyx_v_phrase); if (unlikely(__pyx_t_22 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_19 = (__pyx_t_22 < __pyx_cur_scope->__pyx_v_self->max_length);
+      __pyx_t_5 = PyObject_Length(__pyx_cur_scope->__pyx_v_phrase); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_19 = (__pyx_t_5 < ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->max_length);
       if (__pyx_t_19) {
         __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_3 = PyNumber_Add(__pyx_t_10, __pyx_cur_scope->__pyx_v_spanlen); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_9 = PyNumber_Add(__pyx_t_10, __pyx_cur_scope->__pyx_v_spanlen); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __pyx_t_22 = PyObject_Length(__pyx_cur_scope->__pyx_v_fwords); if (unlikely(__pyx_t_22 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_10 = PyInt_FromSsize_t(__pyx_t_22); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyObject_Length(__pyx_cur_scope->__pyx_v_fwords); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_10, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __pyx_t_2 = PyObject_RichCompare(__pyx_t_9, __pyx_t_10, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         if (__pyx_t_8) {
           __pyx_t_2 = PyNumber_Add(__pyx_cur_scope->__pyx_v_pathlen, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_self->max_initial_size); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->max_initial_size); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_9 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_LE); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_26 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          __pyx_t_27 = __pyx_t_26;
+          __pyx_t_25 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_25 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __pyx_t_26 = __pyx_t_25;
         } else {
-          __pyx_t_27 = __pyx_t_8;
+          __pyx_t_26 = __pyx_t_8;
         }
-        __pyx_t_8 = __pyx_t_27;
+        __pyx_t_8 = __pyx_t_26;
       } else {
         __pyx_t_8 = __pyx_t_19;
       }
       if (__pyx_t_8) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1111
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1111
  * 
  *                 if len(phrase) < self.max_length and i+spanlen < len(fwords) and pathlen+1 <= self.max_initial_size:
  *                     for alt_id in range(len(fwords[i+spanlen])):             # <<<<<<<<<<<<<<
  *                         new_frontier.append((k, i+spanlen, alt_id, pathlen + 1, node, phrase, is_shadow_path))
  *                     num_subpatterns = arity
  */
-        __pyx_t_3 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_10 = PyNumber_Add(__pyx_t_3, __pyx_cur_scope->__pyx_v_spanlen); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_9);
+        __pyx_t_10 = PyNumber_Add(__pyx_t_9, __pyx_cur_scope->__pyx_v_spanlen); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_fwords, __pyx_t_10); if (!__pyx_t_3) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __pyx_t_9 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_fwords, __pyx_t_10); if (!__pyx_t_9) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __pyx_t_22 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_22 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_22; __pyx_t_18+=1) {
+        __pyx_t_5 = PyObject_Length(__pyx_t_9); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_5; __pyx_t_18+=1) {
           __pyx_cur_scope->__pyx_v_alt_id = __pyx_t_18;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1112
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1112
  *                 if len(phrase) < self.max_length and i+spanlen < len(fwords) and pathlen+1 <= self.max_initial_size:
  *                     for alt_id in range(len(fwords[i+spanlen])):
  *                         new_frontier.append((k, i+spanlen, alt_id, pathlen + 1, node, phrase, is_shadow_path))             # <<<<<<<<<<<<<<
  *                     num_subpatterns = arity
  *                     if not is_shadow_path:
  */
-          __pyx_t_3 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_3);
+          if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_new_frontier) == Py_None)) {
+            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+          }
+          __pyx_t_9 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_9);
           __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_2 = PyNumber_Add(__pyx_t_10, __pyx_cur_scope->__pyx_v_spanlen); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -47104,9 +44953,9 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_t_15 = PyNumber_Add(__pyx_cur_scope->__pyx_v_pathlen, __pyx_int_1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_15);
           __pyx_t_14 = PyTuple_New(7); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_14);
-          PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3);
-          __Pyx_GIVEREF(__pyx_t_3);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_14));
+          PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_9);
           PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_2);
           PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_10);
@@ -47122,7 +44971,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_INCREF(__pyx_cur_scope->__pyx_v_is_shadow_path);
           PyTuple_SET_ITEM(__pyx_t_14, 6, __pyx_cur_scope->__pyx_v_is_shadow_path);
           __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_is_shadow_path);
-          __pyx_t_3 = 0;
+          __pyx_t_9 = 0;
           __pyx_t_2 = 0;
           __pyx_t_10 = 0;
           __pyx_t_15 = 0;
@@ -47130,7 +44979,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
         }
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1113
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1113
  *                     for alt_id in range(len(fwords[i+spanlen])):
  *                         new_frontier.append((k, i+spanlen, alt_id, pathlen + 1, node, phrase, is_shadow_path))
  *                     num_subpatterns = arity             # <<<<<<<<<<<<<<
@@ -47139,7 +44988,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
         __pyx_cur_scope->__pyx_v_num_subpatterns = __pyx_cur_scope->__pyx_v_arity;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1114
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1114
  *                         new_frontier.append((k, i+spanlen, alt_id, pathlen + 1, node, phrase, is_shadow_path))
  *                     num_subpatterns = arity
  *                     if not is_shadow_path:             # <<<<<<<<<<<<<<
@@ -47150,7 +44999,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
         __pyx_t_19 = (!__pyx_t_8);
         if (__pyx_t_19) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1115
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1115
  *                     num_subpatterns = arity
  *                     if not is_shadow_path:
  *                         num_subpatterns = num_subpatterns + 1             # <<<<<<<<<<<<<<
@@ -47158,43 +45007,43 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                         xcat = sym_setindex(self.category, arity+1)
  */
           __pyx_cur_scope->__pyx_v_num_subpatterns = (__pyx_cur_scope->__pyx_v_num_subpatterns + 1);
-          goto __pyx_L62;
+          goto __pyx_L66;
         }
-        __pyx_L62:;
+        __pyx_L66:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1116
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1116
  *                     if not is_shadow_path:
  *                         num_subpatterns = num_subpatterns + 1
  *                     if len(phrase)+1 < self.max_length and arity < self.max_nonterminals and num_subpatterns < self.max_chunks:             # <<<<<<<<<<<<<<
  *                         xcat = sym_setindex(self.category, arity+1)
  *                         xnode = node.children[xcat]
  */
-        __pyx_t_22 = PyObject_Length(__pyx_cur_scope->__pyx_v_phrase); if (unlikely(__pyx_t_22 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_19 = ((__pyx_t_22 + 1) < __pyx_cur_scope->__pyx_v_self->max_length);
+        __pyx_t_5 = PyObject_Length(__pyx_cur_scope->__pyx_v_phrase); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_19 = ((__pyx_t_5 + 1) < ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->max_length);
         if (__pyx_t_19) {
-          __pyx_t_8 = (__pyx_cur_scope->__pyx_v_arity < __pyx_cur_scope->__pyx_v_self->max_nonterminals);
+          __pyx_t_8 = (__pyx_cur_scope->__pyx_v_arity < ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->max_nonterminals);
           if (__pyx_t_8) {
-            __pyx_t_27 = (__pyx_cur_scope->__pyx_v_num_subpatterns < __pyx_cur_scope->__pyx_v_self->max_chunks);
-            __pyx_t_26 = __pyx_t_27;
+            __pyx_t_26 = (__pyx_cur_scope->__pyx_v_num_subpatterns < ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->max_chunks);
+            __pyx_t_25 = __pyx_t_26;
           } else {
-            __pyx_t_26 = __pyx_t_8;
+            __pyx_t_25 = __pyx_t_8;
           }
-          __pyx_t_8 = __pyx_t_26;
+          __pyx_t_8 = __pyx_t_25;
         } else {
           __pyx_t_8 = __pyx_t_19;
         }
         if (__pyx_t_8) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1117
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1117
  *                         num_subpatterns = num_subpatterns + 1
  *                     if len(phrase)+1 < self.max_length and arity < self.max_nonterminals and num_subpatterns < self.max_chunks:
  *                         xcat = sym_setindex(self.category, arity+1)             # <<<<<<<<<<<<<<
  *                         xnode = node.children[xcat]
  *                         # I put spanlen=1 below
  */
-          __pyx_cur_scope->__pyx_v_xcat = __pyx_f_3_sa_sym_setindex(__pyx_cur_scope->__pyx_v_self->category, (__pyx_cur_scope->__pyx_v_arity + 1));
+          __pyx_cur_scope->__pyx_v_xcat = __pyx_f_3_sa_sym_setindex(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->category, (__pyx_cur_scope->__pyx_v_arity + 1));
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1118
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1118
  *                     if len(phrase)+1 < self.max_length and arity < self.max_nonterminals and num_subpatterns < self.max_chunks:
  *                         xcat = sym_setindex(self.category, arity+1)
  *                         xnode = node.children[xcat]             # <<<<<<<<<<<<<<
@@ -47212,19 +45061,19 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_xnode = __pyx_t_15;
           __pyx_t_15 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1120
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1120
  *                         xnode = node.children[xcat]
  *                         # I put spanlen=1 below
  *                         key = tuple([self.min_gap_size, i, 1, pathlen])             # <<<<<<<<<<<<<<
  *                         frontier_nodes = []
  *                         if (key in nodes_isteps_away_buffer):
  */
-          __pyx_t_15 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_self->min_gap_size); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_15 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->min_gap_size); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_15);
           __pyx_t_14 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_14);
           __pyx_t_10 = PyList_New(4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_10));
           PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_15);
           __Pyx_GIVEREF(__pyx_t_15);
           PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_14);
@@ -47246,7 +45095,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
           __pyx_cur_scope->__pyx_v_key = __pyx_t_14;
           __pyx_t_14 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1121
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1121
  *                         # I put spanlen=1 below
  *                         key = tuple([self.min_gap_size, i, 1, pathlen])
  *                         frontier_nodes = []             # <<<<<<<<<<<<<<
@@ -47254,24 +45103,27 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                             frontier_nodes = nodes_isteps_away_buffer[key]
  */
           __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_14);
+          __Pyx_GOTREF(((PyObject *)__pyx_t_14));
           __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_frontier_nodes);
           __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_frontier_nodes);
           __Pyx_GIVEREF(((PyObject *)__pyx_t_14));
           __pyx_cur_scope->__pyx_v_frontier_nodes = ((PyObject *)__pyx_t_14);
           __pyx_t_14 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1122
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1122
  *                         key = tuple([self.min_gap_size, i, 1, pathlen])
  *                         frontier_nodes = []
  *                         if (key in nodes_isteps_away_buffer):             # <<<<<<<<<<<<<<
  *                             frontier_nodes = nodes_isteps_away_buffer[key]
  *                         else:
  */
-          __pyx_t_8 = (__Pyx_PyDict_Contains(((PyObject *)__pyx_cur_scope->__pyx_v_key), ((PyObject *)__pyx_cur_scope->__pyx_v_nodes_isteps_away_buffer), Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_nodes_isteps_away_buffer) == Py_None)) {
+            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+          }
+          __pyx_t_8 = ((PyDict_Contains(((PyObject *)__pyx_cur_scope->__pyx_v_nodes_isteps_away_buffer), ((PyObject *)__pyx_cur_scope->__pyx_v_key)))); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1123
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1123
  *                         frontier_nodes = []
  *                         if (key in nodes_isteps_away_buffer):
  *                             frontier_nodes = nodes_isteps_away_buffer[key]             # <<<<<<<<<<<<<<
@@ -47285,25 +45137,25 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __Pyx_GIVEREF(__pyx_t_14);
             __pyx_cur_scope->__pyx_v_frontier_nodes = __pyx_t_14;
             __pyx_t_14 = 0;
-            goto __pyx_L64;
+            goto __pyx_L68;
           }
           /*else*/ {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1125
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1125
  *                             frontier_nodes = nodes_isteps_away_buffer[key]
  *                         else:
  *                             frontier_nodes = self.get_all_nodes_isteps_away(self.min_gap_size, i, 1, pathlen, fwords, next_states, reachable_buffer)             # <<<<<<<<<<<<<<
  *                             nodes_isteps_away_buffer[key] = frontier_nodes
  * 
  */
-            __pyx_t_14 = PyObject_GetAttr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_123); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_14 = PyObject_GetAttr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_123); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_14);
-            __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_self->min_gap_size); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_10 = PyInt_FromLong(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->min_gap_size); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_10);
             __pyx_t_15 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_15);
             __pyx_t_2 = PyTuple_New(7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_2);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
             PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10);
             __Pyx_GIVEREF(__pyx_t_10);
             PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);
@@ -47335,7 +45187,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_frontier_nodes = __pyx_t_15;
             __pyx_t_15 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1126
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1126
  *                         else:
  *                             frontier_nodes = self.get_all_nodes_isteps_away(self.min_gap_size, i, 1, pathlen, fwords, next_states, reachable_buffer)
  *                             nodes_isteps_away_buffer[key] = frontier_nodes             # <<<<<<<<<<<<<<
@@ -47344,9 +45196,9 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  */
             if (PyDict_SetItem(((PyObject *)__pyx_cur_scope->__pyx_v_nodes_isteps_away_buffer), ((PyObject *)__pyx_cur_scope->__pyx_v_key), __pyx_cur_scope->__pyx_v_frontier_nodes) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
-          __pyx_L64:;
+          __pyx_L68:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1128
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1128
  *                             nodes_isteps_away_buffer[key] = frontier_nodes
  * 
  *                         for (i, alt, pathlen) in frontier_nodes:             # <<<<<<<<<<<<<<
@@ -47354,28 +45206,20 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *             frontier = new_frontier
  */
           if (PyList_CheckExact(__pyx_cur_scope->__pyx_v_frontier_nodes) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_frontier_nodes)) {
-            __pyx_t_15 = __pyx_cur_scope->__pyx_v_frontier_nodes; __Pyx_INCREF(__pyx_t_15); __pyx_t_22 = 0;
+            __pyx_t_15 = __pyx_cur_scope->__pyx_v_frontier_nodes; __Pyx_INCREF(__pyx_t_15); __pyx_t_5 = 0;
             __pyx_t_20 = NULL;
           } else {
-            __pyx_t_22 = -1; __pyx_t_15 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_frontier_nodes); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_5 = -1; __pyx_t_15 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_frontier_nodes); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_15);
             __pyx_t_20 = Py_TYPE(__pyx_t_15)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_20 && PyList_CheckExact(__pyx_t_15)) {
-              if (__pyx_t_22 >= PyList_GET_SIZE(__pyx_t_15)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_15, __pyx_t_22); __Pyx_INCREF(__pyx_t_2); __pyx_t_22++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_15, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
-            } else if (!__pyx_t_20 && PyTuple_CheckExact(__pyx_t_15)) {
-              if (__pyx_t_22 >= PyTuple_GET_SIZE(__pyx_t_15)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_15, __pyx_t_22); __Pyx_INCREF(__pyx_t_2); __pyx_t_22++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #else
-              __pyx_t_2 = PySequence_ITEM(__pyx_t_15, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
+            if (PyList_CheckExact(__pyx_t_15)) {
+              if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_15)) break;
+              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_15, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++;
+            } else if (PyTuple_CheckExact(__pyx_t_15)) {
+              if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_15)) break;
+              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_15, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++;
             } else {
               __pyx_t_2 = __pyx_t_20(__pyx_t_15);
               if (unlikely(!__pyx_t_2)) {
@@ -47389,58 +45233,50 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             }
             if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
               PyObject* sequence = __pyx_t_2;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              Py_ssize_t size = Py_SIZE(sequence);
-              #else
-              Py_ssize_t size = PySequence_Size(sequence);
-              #endif
-              if (unlikely(size != 3)) {
-                if (size > 3) __Pyx_RaiseTooManyValuesError(3);
-                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              }
-              #if CYTHON_COMPILING_IN_CPYTHON
               if (likely(PyTuple_CheckExact(sequence))) {
+                if (unlikely(PyTuple_GET_SIZE(sequence) != 3)) {
+                  if (PyTuple_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+                  else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                }
                 __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); 
                 __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
-                __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
+                __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
               } else {
+                if (unlikely(PyList_GET_SIZE(sequence) != 3)) {
+                  if (PyList_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
+                  else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                }
                 __pyx_t_14 = PyList_GET_ITEM(sequence, 0); 
                 __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
-                __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
+                __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
               }
               __Pyx_INCREF(__pyx_t_14);
               __Pyx_INCREF(__pyx_t_10);
-              __Pyx_INCREF(__pyx_t_3);
-              #else
-              __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
+              __Pyx_INCREF(__pyx_t_9);
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            } else
-            {
+            } else {
               Py_ssize_t index = -1;
-              __pyx_t_13 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_13);
+              __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_GOTREF(__pyx_t_3);
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-              __pyx_t_17 = Py_TYPE(__pyx_t_13)->tp_iternext;
-              index = 0; __pyx_t_14 = __pyx_t_17(__pyx_t_13); if (unlikely(!__pyx_t_14)) goto __pyx_L67_unpacking_failed;
+              __pyx_t_17 = Py_TYPE(__pyx_t_3)->tp_iternext;
+              index = 0; __pyx_t_14 = __pyx_t_17(__pyx_t_3); if (unlikely(!__pyx_t_14)) goto __pyx_L71_unpacking_failed;
               __Pyx_GOTREF(__pyx_t_14);
-              index = 1; __pyx_t_10 = __pyx_t_17(__pyx_t_13); if (unlikely(!__pyx_t_10)) goto __pyx_L67_unpacking_failed;
+              index = 1; __pyx_t_10 = __pyx_t_17(__pyx_t_3); if (unlikely(!__pyx_t_10)) goto __pyx_L71_unpacking_failed;
               __Pyx_GOTREF(__pyx_t_10);
-              index = 2; __pyx_t_3 = __pyx_t_17(__pyx_t_13); if (unlikely(!__pyx_t_3)) goto __pyx_L67_unpacking_failed;
-              __Pyx_GOTREF(__pyx_t_3);
-              if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_13), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __pyx_t_17 = NULL;
-              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              goto __pyx_L68_unpacking_done;
-              __pyx_L67_unpacking_failed:;
-              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              __pyx_t_17 = NULL;
-              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+              index = 2; __pyx_t_9 = __pyx_t_17(__pyx_t_3); if (unlikely(!__pyx_t_9)) goto __pyx_L71_unpacking_failed;
+              __Pyx_GOTREF(__pyx_t_9);
+              if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_3), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+              goto __pyx_L72_unpacking_done;
+              __pyx_L71_unpacking_failed:;
+              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+              if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+              if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
               {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __pyx_L68_unpacking_done:;
+              __pyx_L72_unpacking_done:;
             }
             __pyx_t_18 = __Pyx_PyInt_AsInt(__pyx_t_14); if (unlikely((__pyx_t_18 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
@@ -47450,71 +45286,74 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
             __pyx_cur_scope->__pyx_v_alt = __pyx_t_6;
             __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_pathlen);
             __Pyx_DECREF(__pyx_cur_scope->__pyx_v_pathlen);
-            __Pyx_GIVEREF(__pyx_t_3);
-            __pyx_cur_scope->__pyx_v_pathlen = __pyx_t_3;
-            __pyx_t_3 = 0;
+            __Pyx_GIVEREF(__pyx_t_9);
+            __pyx_cur_scope->__pyx_v_pathlen = __pyx_t_9;
+            __pyx_t_9 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1129
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1129
  * 
  *                         for (i, alt, pathlen) in frontier_nodes:
  *                             new_frontier.append((k, i, alt, pathlen, xnode, phrase +(xcat,), is_shadow_path))             # <<<<<<<<<<<<<<
  *             frontier = new_frontier
  * 
  */
+            if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_v_new_frontier) == Py_None)) {
+              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+            }
             __pyx_t_2 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_3 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_9 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_GOTREF(__pyx_t_9);
             __pyx_t_10 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_alt); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_10);
             __pyx_t_14 = PyInt_FromLong(__pyx_cur_scope->__pyx_v_xcat); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_14);
-            __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_13);
-            PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14);
+            __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+            PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14);
             __Pyx_GIVEREF(__pyx_t_14);
             __pyx_t_14 = 0;
-            __pyx_t_14 = PyNumber_Add(__pyx_cur_scope->__pyx_v_phrase, ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_14 = PyNumber_Add(__pyx_cur_scope->__pyx_v_phrase, ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_14);
-            __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
-            __pyx_t_13 = PyTuple_New(7); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_13);
-            PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_2);
+            __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+            __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+            PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
             __Pyx_GIVEREF(__pyx_t_2);
-            PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_3);
-            __Pyx_GIVEREF(__pyx_t_3);
-            PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10);
+            PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_9);
+            __Pyx_GIVEREF(__pyx_t_9);
+            PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_10);
             __Pyx_GIVEREF(__pyx_t_10);
             __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pathlen);
-            PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_cur_scope->__pyx_v_pathlen);
+            PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_cur_scope->__pyx_v_pathlen);
             __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pathlen);
             __Pyx_INCREF(__pyx_cur_scope->__pyx_v_xnode);
-            PyTuple_SET_ITEM(__pyx_t_13, 4, __pyx_cur_scope->__pyx_v_xnode);
+            PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_cur_scope->__pyx_v_xnode);
             __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_xnode);
-            PyTuple_SET_ITEM(__pyx_t_13, 5, __pyx_t_14);
+            PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_14);
             __Pyx_GIVEREF(__pyx_t_14);
             __Pyx_INCREF(__pyx_cur_scope->__pyx_v_is_shadow_path);
-            PyTuple_SET_ITEM(__pyx_t_13, 6, __pyx_cur_scope->__pyx_v_is_shadow_path);
+            PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_cur_scope->__pyx_v_is_shadow_path);
             __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_is_shadow_path);
             __pyx_t_2 = 0;
-            __pyx_t_3 = 0;
+            __pyx_t_9 = 0;
             __pyx_t_10 = 0;
             __pyx_t_14 = 0;
-            __pyx_t_11 = PyList_Append(__pyx_cur_scope->__pyx_v_new_frontier, ((PyObject *)__pyx_t_13)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
+            __pyx_t_11 = PyList_Append(__pyx_cur_scope->__pyx_v_new_frontier, ((PyObject *)__pyx_t_3)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
           }
           __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-          goto __pyx_L63;
+          goto __pyx_L67;
         }
-        __pyx_L63:;
-        goto __pyx_L59;
+        __pyx_L67:;
+        goto __pyx_L63;
       }
-      __pyx_L59:;
+      __pyx_L63:;
       __pyx_L19_continue:;
     }
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1130
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1130
  *                         for (i, alt, pathlen) in frontier_nodes:
  *                             new_frontier.append((k, i, alt, pathlen, xnode, phrase +(xcat,), is_shadow_path))
  *             frontier = new_frontier             # <<<<<<<<<<<<<<
@@ -47528,7 +45367,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
     __pyx_cur_scope->__pyx_v_frontier = __pyx_cur_scope->__pyx_v_new_frontier;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1132
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1132
  *             frontier = new_frontier
  * 
  *         stop_time = monitor_cpu()             # <<<<<<<<<<<<<<
@@ -47541,7 +45380,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __pyx_cur_scope->__pyx_v_stop_time = __pyx_t_12;
   __pyx_t_12 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1133
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1133
  * 
  *         stop_time = monitor_cpu()
  *         logger.info("Total time for rule lookup, extraction, and scoring = %f seconds", (stop_time - start_time))             # <<<<<<<<<<<<<<
@@ -47555,68 +45394,68 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __pyx_t_12 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_start_time); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_12);
-  __pyx_t_13 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_stop_time, __pyx_t_12); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
+  __pyx_t_3 = PyNumber_Subtract(__pyx_cur_scope->__pyx_v_stop_time, __pyx_t_12); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_12);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_12));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_124));
   PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)__pyx_kp_s_124));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_124));
-  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13);
-  __Pyx_GIVEREF(__pyx_t_13);
-  __pyx_t_13 = 0;
-  __pyx_t_13 = PyObject_Call(__pyx_t_15, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
+  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_Call(__pyx_t_15, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
-  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1134
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1134
  *         stop_time = monitor_cpu()
  *         logger.info("Total time for rule lookup, extraction, and scoring = %f seconds", (stop_time - start_time))
  *         gc.collect()             # <<<<<<<<<<<<<<
  *         logger.info("    Extract time = %f seconds", self.extract_time)
  * 
  */
-  __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__gc); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
-  __pyx_t_12 = PyObject_GetAttr(__pyx_t_13, __pyx_n_s__collect); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_12 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__collect); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_12);
-  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-  __pyx_t_13 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1135
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1135
  *         logger.info("Total time for rule lookup, extraction, and scoring = %f seconds", (stop_time - start_time))
  *         gc.collect()
  *         logger.info("    Extract time = %f seconds", self.extract_time)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
-  __pyx_t_12 = PyObject_GetAttr(__pyx_t_13, __pyx_n_s__info); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_12 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__info); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_12);
-  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-  __pyx_t_13 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->extract_time); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)__pyx_cur_scope->__pyx_v_self)->extract_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_15);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_15));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_125));
   PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_kp_s_125));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_125));
-  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_13);
-  __Pyx_GIVEREF(__pyx_t_13);
-  __pyx_t_13 = 0;
-  __pyx_t_13 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_t_15), NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_13);
+  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_t_15), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_15)); __pyx_t_15 = 0;
-  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-  PyErr_SetNone(PyExc_StopIteration);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
@@ -47632,13 +45471,12 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
   __Pyx_AddTraceback("input", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1138
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1138
  * 
  * 
  *     cdef int find_fixpoint(self,             # <<<<<<<<<<<<<<
@@ -47646,7 +45484,7 @@ static PyObject *__pyx_gb_3_sa_23HieroCachingRuleFactory_24generator4(__pyx_Gene
  *                         int* f_links_low, int* f_links_high,
  */
 
-static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int __pyx_v_f_low, PyObject *__pyx_v_f_high, int *__pyx_v_f_links_low, int *__pyx_v_f_links_high, int *__pyx_v_e_links_low, int *__pyx_v_e_links_high, int __pyx_v_e_in_low, int __pyx_v_e_in_high, int *__pyx_v_e_low, int *__pyx_v_e_high, int *__pyx_v_f_back_low, int *__pyx_v_f_back_high, int __pyx_v_f_sent_len, int __pyx_v_e_sent_len, int __pyx_v_max_f_len, int __pyx_v_max_e_len, int __pyx_v_min_fx_size, int __pyx_v_min_ex_size, int __pyx_v_max_new_x, int __pyx_v_allow_low_x, int __pyx_v_allow_high_x, int __pyx_v_allow_arbitrary_x, CYTHON_UNUSED int __pyx_v_write_log) {
+static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int __pyx_v_f_low, PyObject *__pyx_v_f_high, int *__pyx_v_f_links_low, int *__pyx_v_f_links_high, int *__pyx_v_e_links_low, int *__pyx_v_e_links_high, int __pyx_v_e_in_low, int __pyx_v_e_in_high, int *__pyx_v_e_low, int *__pyx_v_e_high, int *__pyx_v_f_back_low, int *__pyx_v_f_back_high, int __pyx_v_f_sent_len, int __pyx_v_e_sent_len, int __pyx_v_max_f_len, int __pyx_v_max_e_len, int __pyx_v_min_fx_size, int __pyx_v_min_ex_size, int __pyx_v_max_new_x, int __pyx_v_allow_low_x, int __pyx_v_allow_high_x, int __pyx_v_allow_arbitrary_x, int __pyx_v_write_log) {
   int __pyx_v_e_low_prev;
   int __pyx_v_e_high_prev;
   int __pyx_v_f_low_prev;
@@ -47666,9 +45504,9 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("find_fixpoint", 0);
+  __Pyx_RefNannySetupContext("find_fixpoint");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1153
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1153
  *         cdef int e_low_prev, e_high_prev, f_low_prev, f_high_prev, new_x, new_low_x, new_high_x
  * 
  *         e_low[0] = e_in_low             # <<<<<<<<<<<<<<
@@ -47677,7 +45515,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   (__pyx_v_e_low[0]) = __pyx_v_e_in_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1154
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1154
  * 
  *         e_low[0] = e_in_low
  *         e_high[0] = e_in_high             # <<<<<<<<<<<<<<
@@ -47686,7 +45524,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   (__pyx_v_e_high[0]) = __pyx_v_e_in_high;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1155
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1155
  *         e_low[0] = e_in_low
  *         e_high[0] = e_in_high
  *         self.find_projection(f_low, f_high, f_links_low, f_links_high, e_low, e_high)             # <<<<<<<<<<<<<<
@@ -47698,7 +45536,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1156
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1156
  *         e_high[0] = e_in_high
  *         self.find_projection(f_low, f_high, f_links_low, f_links_high, e_low, e_high)
  *         if e_low[0] == -1:             # <<<<<<<<<<<<<<
@@ -47708,7 +45546,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   __pyx_t_3 = ((__pyx_v_e_low[0]) == -1);
   if (__pyx_t_3) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1162
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1162
  *             # rule X -> X_1 w X_2 / X_1 X_2.    This is probably
  *             # not worth the bother, though.
  *             return 0             # <<<<<<<<<<<<<<
@@ -47720,7 +45558,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     goto __pyx_L3;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1163
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1163
  *             # not worth the bother, though.
  *             return 0
  *         elif e_in_low != -1 and e_low[0] != e_in_low:             # <<<<<<<<<<<<<<
@@ -47736,7 +45574,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   }
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1164
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1164
  *             return 0
  *         elif e_in_low != -1 and e_low[0] != e_in_low:
  *             if e_in_low - e_low[0] < min_ex_size:             # <<<<<<<<<<<<<<
@@ -47746,7 +45584,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_5 = ((__pyx_v_e_in_low - (__pyx_v_e_low[0])) < __pyx_v_min_ex_size);
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1165
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1165
  *         elif e_in_low != -1 and e_low[0] != e_in_low:
  *             if e_in_low - e_low[0] < min_ex_size:
  *                 e_low[0] = e_in_low - min_ex_size             # <<<<<<<<<<<<<<
@@ -47755,7 +45593,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
       (__pyx_v_e_low[0]) = (__pyx_v_e_in_low - __pyx_v_min_ex_size);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1166
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1166
  *             if e_in_low - e_low[0] < min_ex_size:
  *                 e_low[0] = e_in_low - min_ex_size
  *                 if e_low[0] < 0:             # <<<<<<<<<<<<<<
@@ -47765,7 +45603,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __pyx_t_5 = ((__pyx_v_e_low[0]) < 0);
       if (__pyx_t_5) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1167
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1167
  *                 e_low[0] = e_in_low - min_ex_size
  *                 if e_low[0] < 0:
  *                     return 0             # <<<<<<<<<<<<<<
@@ -47784,7 +45622,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1169
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1169
  *                     return 0
  * 
  *         if e_high[0] - e_low[0] > max_e_len:             # <<<<<<<<<<<<<<
@@ -47794,7 +45632,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   __pyx_t_5 = (((__pyx_v_e_high[0]) - (__pyx_v_e_low[0])) > __pyx_v_max_e_len);
   if (__pyx_t_5) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1170
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1170
  * 
  *         if e_high[0] - e_low[0] > max_e_len:
  *             return 0             # <<<<<<<<<<<<<<
@@ -47806,7 +45644,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     goto __pyx_L6;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1171
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1171
  *         if e_high[0] - e_low[0] > max_e_len:
  *             return 0
  *         elif e_in_high != -1 and e_high[0] != e_in_high:             # <<<<<<<<<<<<<<
@@ -47822,7 +45660,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   }
   if (__pyx_t_4) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1172
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1172
  *             return 0
  *         elif e_in_high != -1 and e_high[0] != e_in_high:
  *             if e_high[0] - e_in_high < min_ex_size:             # <<<<<<<<<<<<<<
@@ -47832,7 +45670,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_4 = (((__pyx_v_e_high[0]) - __pyx_v_e_in_high) < __pyx_v_min_ex_size);
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1173
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1173
  *         elif e_in_high != -1 and e_high[0] != e_in_high:
  *             if e_high[0] - e_in_high < min_ex_size:
  *                 e_high[0] = e_in_high + min_ex_size             # <<<<<<<<<<<<<<
@@ -47841,7 +45679,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
       (__pyx_v_e_high[0]) = (__pyx_v_e_in_high + __pyx_v_min_ex_size);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1174
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1174
  *             if e_high[0] - e_in_high < min_ex_size:
  *                 e_high[0] = e_in_high + min_ex_size
  *                 if e_high[0] > e_sent_len:             # <<<<<<<<<<<<<<
@@ -47851,7 +45689,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __pyx_t_4 = ((__pyx_v_e_high[0]) > __pyx_v_e_sent_len);
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1175
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1175
  *                 e_high[0] = e_in_high + min_ex_size
  *                 if e_high[0] > e_sent_len:
  *                     return 0             # <<<<<<<<<<<<<<
@@ -47870,7 +45708,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   }
   __pyx_L6:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1177
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1177
  *                     return 0
  * 
  *         f_back_low[0] = -1             # <<<<<<<<<<<<<<
@@ -47879,7 +45717,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   (__pyx_v_f_back_low[0]) = -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1178
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1178
  * 
  *         f_back_low[0] = -1
  *         f_back_high[0] = -1             # <<<<<<<<<<<<<<
@@ -47888,7 +45726,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   (__pyx_v_f_back_high[0]) = -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1179
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1179
  *         f_back_low[0] = -1
  *         f_back_high[0] = -1
  *         f_low_prev = f_low             # <<<<<<<<<<<<<<
@@ -47897,7 +45735,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   __pyx_v_f_low_prev = __pyx_v_f_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1180
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1180
  *         f_back_high[0] = -1
  *         f_low_prev = f_low
  *         f_high_prev = f_high             # <<<<<<<<<<<<<<
@@ -47907,7 +45745,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_f_high); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_f_high_prev = __pyx_t_1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1181
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1181
  *         f_low_prev = f_low
  *         f_high_prev = f_high
  *         new_x = 0             # <<<<<<<<<<<<<<
@@ -47916,7 +45754,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   __pyx_v_new_x = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1182
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1182
  *         f_high_prev = f_high
  *         new_x = 0
  *         new_low_x = 0             # <<<<<<<<<<<<<<
@@ -47925,7 +45763,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   __pyx_v_new_low_x = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1183
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1183
  *         new_x = 0
  *         new_low_x = 0
  *         new_high_x = 0             # <<<<<<<<<<<<<<
@@ -47934,7 +45772,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
   __pyx_v_new_high_x = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1185
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1185
  *         new_high_x = 0
  * 
  *         while True:             # <<<<<<<<<<<<<<
@@ -47944,7 +45782,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   while (1) {
     if (!1) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1187
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1187
  *         while True:
  * 
  *             if f_back_low[0] == -1:             # <<<<<<<<<<<<<<
@@ -47954,7 +45792,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_4 = ((__pyx_v_f_back_low[0]) == -1);
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1188
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1188
  * 
  *             if f_back_low[0] == -1:
  *                 self.find_projection(e_low[0], e_high[0], e_links_low, e_links_high, f_back_low, f_back_high)             # <<<<<<<<<<<<<<
@@ -47968,7 +45806,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1190
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1190
  *                 self.find_projection(e_low[0], e_high[0], e_links_low, e_links_high, f_back_low, f_back_high)
  *             else:
  *                 self.find_projection(e_low[0], e_low_prev, e_links_low, e_links_high, f_back_low, f_back_high)             # <<<<<<<<<<<<<<
@@ -47979,7 +45817,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1191
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1191
  *             else:
  *                 self.find_projection(e_low[0], e_low_prev, e_links_low, e_links_high, f_back_low, f_back_high)
  *                 self.find_projection(e_high_prev, e_high[0], e_links_low, e_links_high, f_back_low, f_back_high)             # <<<<<<<<<<<<<<
@@ -47992,7 +45830,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L11:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1193
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1193
  *                 self.find_projection(e_high_prev, e_high[0], e_links_low, e_links_high, f_back_low, f_back_high)
  * 
  *             if f_back_low[0] > f_low:             # <<<<<<<<<<<<<<
@@ -48002,7 +45840,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_4 = ((__pyx_v_f_back_low[0]) > __pyx_v_f_low);
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1194
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1194
  * 
  *             if f_back_low[0] > f_low:
  *                 f_back_low[0] = f_low             # <<<<<<<<<<<<<<
@@ -48014,7 +45852,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L12:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1196
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1196
  *                 f_back_low[0] = f_low
  * 
  *             if f_back_high[0] < f_high:             # <<<<<<<<<<<<<<
@@ -48023,13 +45861,14 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
     __pyx_t_2 = PyInt_FromLong((__pyx_v_f_back_high[0])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_v_f_high, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_v_f_high, Py_LT); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1197
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1197
  * 
  *             if f_back_high[0] < f_high:
  *                 f_back_high[0] = f_high             # <<<<<<<<<<<<<<
@@ -48042,7 +45881,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L13:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1199
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1199
  *                 f_back_high[0] = f_high
  * 
  *             if f_back_low[0] == f_low_prev and f_back_high[0] == f_high_prev:             # <<<<<<<<<<<<<<
@@ -48058,7 +45897,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1200
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1200
  * 
  *             if f_back_low[0] == f_low_prev and f_back_high[0] == f_high_prev:
  *                 return 1             # <<<<<<<<<<<<<<
@@ -48071,7 +45910,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L14:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1202
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1202
  *                 return 1
  * 
  *             if allow_low_x == 0 and f_back_low[0] < f_low:             # <<<<<<<<<<<<<<
@@ -48087,7 +45926,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1204
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1204
  *             if allow_low_x == 0 and f_back_low[0] < f_low:
  *                 # FAIL: f phrase is not tight
  *                 return 0             # <<<<<<<<<<<<<<
@@ -48100,7 +45939,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L15:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1206
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1206
  *                 return 0
  * 
  *             if f_back_high[0] - f_back_low[0] > max_f_len:             # <<<<<<<<<<<<<<
@@ -48110,7 +45949,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_5 = (((__pyx_v_f_back_high[0]) - (__pyx_v_f_back_low[0])) > __pyx_v_max_f_len);
     if (__pyx_t_5) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1208
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1208
  *             if f_back_high[0] - f_back_low[0] > max_f_len:
  *                 # FAIL: f back projection is too wide
  *                 return 0             # <<<<<<<<<<<<<<
@@ -48123,7 +45962,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L16:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1210
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1210
  *                 return 0
  * 
  *             if allow_high_x == 0 and f_back_high[0] > f_high:             # <<<<<<<<<<<<<<
@@ -48134,7 +45973,8 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     if (__pyx_t_5) {
       __pyx_t_6 = PyInt_FromLong((__pyx_v_f_back_high[0])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_v_f_high, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_v_f_high, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -48144,7 +45984,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1212
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1212
  *             if allow_high_x == 0 and f_back_high[0] > f_high:
  *                 # FAIL: extension on high side not allowed
  *                 return 0             # <<<<<<<<<<<<<<
@@ -48157,7 +45997,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L17:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1214
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1214
  *                 return 0
  * 
  *             if f_low != f_back_low[0]:             # <<<<<<<<<<<<<<
@@ -48167,7 +46007,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_4 = (__pyx_v_f_low != (__pyx_v_f_back_low[0]));
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1215
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1215
  * 
  *             if f_low != f_back_low[0]:
  *                 if new_low_x == 0:             # <<<<<<<<<<<<<<
@@ -48177,7 +46017,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __pyx_t_4 = (__pyx_v_new_low_x == 0);
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1216
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1216
  *             if f_low != f_back_low[0]:
  *                 if new_low_x == 0:
  *                     if new_x >= max_new_x:             # <<<<<<<<<<<<<<
@@ -48187,7 +46027,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __pyx_t_4 = (__pyx_v_new_x >= __pyx_v_max_new_x);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1218
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1218
  *                     if new_x >= max_new_x:
  *                         # FAIL: extension required on low side violates max # of gaps
  *                         return 0             # <<<<<<<<<<<<<<
@@ -48200,7 +46040,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1220
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1220
  *                         return 0
  *                     else:
  *                         new_x = new_x + 1             # <<<<<<<<<<<<<<
@@ -48209,7 +46049,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
           __pyx_v_new_x = (__pyx_v_new_x + 1);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1221
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1221
  *                     else:
  *                         new_x = new_x + 1
  *                         new_low_x = 1             # <<<<<<<<<<<<<<
@@ -48223,7 +46063,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       }
       __pyx_L19:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1222
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1222
  *                         new_x = new_x + 1
  *                         new_low_x = 1
  *                 if f_low - f_back_low[0] < min_fx_size:             # <<<<<<<<<<<<<<
@@ -48233,7 +46073,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __pyx_t_4 = ((__pyx_v_f_low - (__pyx_v_f_back_low[0])) < __pyx_v_min_fx_size);
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1223
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1223
  *                         new_low_x = 1
  *                 if f_low - f_back_low[0] < min_fx_size:
  *                     f_back_low[0] = f_low - min_fx_size             # <<<<<<<<<<<<<<
@@ -48242,7 +46082,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
         (__pyx_v_f_back_low[0]) = (__pyx_v_f_low - __pyx_v_min_fx_size);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1224
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1224
  *                 if f_low - f_back_low[0] < min_fx_size:
  *                     f_back_low[0] = f_low - min_fx_size
  *                     if f_back_high[0] - f_back_low[0] > max_f_len:             # <<<<<<<<<<<<<<
@@ -48252,7 +46092,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __pyx_t_4 = (((__pyx_v_f_back_high[0]) - (__pyx_v_f_back_low[0])) > __pyx_v_max_f_len);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1226
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1226
  *                     if f_back_high[0] - f_back_low[0] > max_f_len:
  *                         # FAIL: extension required on low side violates max initial length
  *                         return 0             # <<<<<<<<<<<<<<
@@ -48265,7 +46105,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         }
         __pyx_L22:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1227
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1227
  *                         # FAIL: extension required on low side violates max initial length
  *                         return 0
  *                     if f_back_low[0] < 0:             # <<<<<<<<<<<<<<
@@ -48275,7 +46115,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __pyx_t_4 = ((__pyx_v_f_back_low[0]) < 0);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1229
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1229
  *                     if f_back_low[0] < 0:
  *                         # FAIL: extension required on low side violates sentence boundary
  *                         return 0             # <<<<<<<<<<<<<<
@@ -48294,7 +46134,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L18:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1231
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1231
  *                         return 0
  * 
  *             if f_high != f_back_high[0]:             # <<<<<<<<<<<<<<
@@ -48303,13 +46143,14 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
     __pyx_t_2 = PyInt_FromLong((__pyx_v_f_back_high[0])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PyObject_RichCompare(__pyx_v_f_high, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_RichCompare(__pyx_v_f_high, __pyx_t_2, Py_NE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1232
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1232
  * 
  *             if f_high != f_back_high[0]:
  *                 if new_high_x == 0:             # <<<<<<<<<<<<<<
@@ -48319,7 +46160,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __pyx_t_4 = (__pyx_v_new_high_x == 0);
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1233
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1233
  *             if f_high != f_back_high[0]:
  *                 if new_high_x == 0:
  *                     if new_x >= max_new_x:             # <<<<<<<<<<<<<<
@@ -48329,7 +46170,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __pyx_t_4 = (__pyx_v_new_x >= __pyx_v_max_new_x);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1235
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1235
  *                     if new_x >= max_new_x:
  *                         # FAIL: extension required on high side violates max # of gaps
  *                         return 0             # <<<<<<<<<<<<<<
@@ -48342,7 +46183,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         }
         /*else*/ {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1237
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1237
  *                         return 0
  *                     else:
  *                         new_x = new_x + 1             # <<<<<<<<<<<<<<
@@ -48351,7 +46192,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
           __pyx_v_new_x = (__pyx_v_new_x + 1);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1238
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1238
  *                     else:
  *                         new_x = new_x + 1
  *                         new_high_x = 1             # <<<<<<<<<<<<<<
@@ -48365,7 +46206,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       }
       __pyx_L25:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1239
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1239
  *                         new_x = new_x + 1
  *                         new_high_x = 1
  *                 if f_back_high[0] - f_high < min_fx_size:             # <<<<<<<<<<<<<<
@@ -48379,14 +46220,15 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_6 = PyInt_FromLong(__pyx_v_min_fx_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_t_6, Py_LT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1240
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1240
  *                         new_high_x = 1
  *                 if f_back_high[0] - f_high < min_fx_size:
  *                     f_back_high[0] = f_high + min_fx_size             # <<<<<<<<<<<<<<
@@ -48402,7 +46244,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         (__pyx_v_f_back_high[0]) = __pyx_t_1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1241
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1241
  *                 if f_back_high[0] - f_high < min_fx_size:
  *                     f_back_high[0] = f_high + min_fx_size
  *                     if f_back_high[0] - f_back_low[0] > max_f_len:             # <<<<<<<<<<<<<<
@@ -48412,7 +46254,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __pyx_t_4 = (((__pyx_v_f_back_high[0]) - (__pyx_v_f_back_low[0])) > __pyx_v_max_f_len);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1243
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1243
  *                     if f_back_high[0] - f_back_low[0] > max_f_len:
  *                         # FAIL: extension required on high side violates max initial length
  *                         return 0             # <<<<<<<<<<<<<<
@@ -48425,7 +46267,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         }
         __pyx_L28:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1244
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1244
  *                         # FAIL: extension required on high side violates max initial length
  *                         return 0
  *                     if f_back_high[0] > f_sent_len:             # <<<<<<<<<<<<<<
@@ -48435,7 +46277,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
         __pyx_t_4 = ((__pyx_v_f_back_high[0]) > __pyx_v_f_sent_len);
         if (__pyx_t_4) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1246
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1246
  *                     if f_back_high[0] > f_sent_len:
  *                         # FAIL: extension required on high side violates sentence boundary
  *                         return 0             # <<<<<<<<<<<<<<
@@ -48454,7 +46296,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L24:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1248
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1248
  *                         return 0
  * 
  *             e_low_prev = e_low[0]             # <<<<<<<<<<<<<<
@@ -48463,7 +46305,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
     __pyx_v_e_low_prev = (__pyx_v_e_low[0]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1249
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1249
  * 
  *             e_low_prev = e_low[0]
  *             e_high_prev = e_high[0]             # <<<<<<<<<<<<<<
@@ -48472,7 +46314,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
     __pyx_v_e_high_prev = (__pyx_v_e_high[0]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1251
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1251
  *             e_high_prev = e_high[0]
  * 
  *             self.find_projection(f_back_low[0], f_low_prev, f_links_low, f_links_high, e_low, e_high)             # <<<<<<<<<<<<<<
@@ -48483,7 +46325,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1252
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1252
  * 
  *             self.find_projection(f_back_low[0], f_low_prev, f_links_low, f_links_high, e_low, e_high)
  *             self.find_projection(f_high_prev, f_back_high[0], f_links_low, f_links_high, e_low, e_high)             # <<<<<<<<<<<<<<
@@ -48494,7 +46336,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1253
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1253
  *             self.find_projection(f_back_low[0], f_low_prev, f_links_low, f_links_high, e_low, e_high)
  *             self.find_projection(f_high_prev, f_back_high[0], f_links_low, f_links_high, e_low, e_high)
  *             if e_low[0] == e_low_prev and e_high[0] == e_high_prev:             # <<<<<<<<<<<<<<
@@ -48510,7 +46352,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1254
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1254
  *             self.find_projection(f_high_prev, f_back_high[0], f_links_low, f_links_high, e_low, e_high)
  *             if e_low[0] == e_low_prev and e_high[0] == e_high_prev:
  *                 return 1             # <<<<<<<<<<<<<<
@@ -48523,7 +46365,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L30:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1255
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1255
  *             if e_low[0] == e_low_prev and e_high[0] == e_high_prev:
  *                 return 1
  *             if allow_arbitrary_x == 0:             # <<<<<<<<<<<<<<
@@ -48533,7 +46375,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_3 = (__pyx_v_allow_arbitrary_x == 0);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1257
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1257
  *             if allow_arbitrary_x == 0:
  *                 # FAIL: arbitrary expansion not permitted
  *                 return 0             # <<<<<<<<<<<<<<
@@ -48546,7 +46388,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L31:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1258
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1258
  *                 # FAIL: arbitrary expansion not permitted
  *                 return 0
  *             if e_high[0] - e_low[0] > max_e_len:             # <<<<<<<<<<<<<<
@@ -48556,7 +46398,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     __pyx_t_3 = (((__pyx_v_e_high[0]) - (__pyx_v_e_low[0])) > __pyx_v_max_e_len);
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1260
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1260
  *             if e_high[0] - e_low[0] > max_e_len:
  *                 # FAIL: re-projection violates sentence max phrase length
  *                 return 0             # <<<<<<<<<<<<<<
@@ -48569,7 +46411,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
     }
     __pyx_L32:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1261
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1261
  *                 # FAIL: re-projection violates sentence max phrase length
  *                 return 0
  *             f_low_prev = f_back_low[0]             # <<<<<<<<<<<<<<
@@ -48578,7 +46420,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  */
     __pyx_v_f_low_prev = (__pyx_v_f_back_low[0]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1262
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1262
  *                 return 0
  *             f_low_prev = f_back_low[0]
  *             f_high_prev = f_back_high[0]             # <<<<<<<<<<<<<<
@@ -48601,7 +46443,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1265
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1265
  * 
  * 
  *     cdef find_projection(self, int in_low, int in_high, int* in_links_low, int* in_links_high,             # <<<<<<<<<<<<<<
@@ -48609,7 +46451,7 @@ static int __pyx_f_3_sa_23HieroCachingRuleFactory_find_fixpoint(struct __pyx_obj
  *         cdef int i
  */
 
-static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_UNUSED struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int __pyx_v_in_low, int __pyx_v_in_high, int *__pyx_v_in_links_low, int *__pyx_v_in_links_high, int *__pyx_v_out_low, int *__pyx_v_out_high) {
+static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int __pyx_v_in_low, int __pyx_v_in_high, int *__pyx_v_in_links_low, int *__pyx_v_in_links_high, int *__pyx_v_out_low, int *__pyx_v_out_high) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -48617,9 +46459,9 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
   int __pyx_t_2;
   int __pyx_t_3;
   int __pyx_t_4;
-  __Pyx_RefNannySetupContext("find_projection", 0);
+  __Pyx_RefNannySetupContext("find_projection");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1268
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1268
  *                         int* out_low, int* out_high):
  *         cdef int i
  *         for i from in_low <= i < in_high:             # <<<<<<<<<<<<<<
@@ -48629,7 +46471,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
   __pyx_t_1 = __pyx_v_in_high;
   for (__pyx_v_i = __pyx_v_in_low; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1269
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1269
  *         cdef int i
  *         for i from in_low <= i < in_high:
  *             if in_links_low[i] != -1:             # <<<<<<<<<<<<<<
@@ -48639,7 +46481,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
     __pyx_t_2 = ((__pyx_v_in_links_low[__pyx_v_i]) != -1);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1270
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1270
  *         for i from in_low <= i < in_high:
  *             if in_links_low[i] != -1:
  *                 if out_low[0] == -1 or in_links_low[i] < out_low[0]:             # <<<<<<<<<<<<<<
@@ -48655,7 +46497,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
       }
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1271
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1271
  *             if in_links_low[i] != -1:
  *                 if out_low[0] == -1 or in_links_low[i] < out_low[0]:
  *                     out_low[0] = in_links_low[i]             # <<<<<<<<<<<<<<
@@ -48667,7 +46509,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
       }
       __pyx_L6:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1272
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1272
  *                 if out_low[0] == -1 or in_links_low[i] < out_low[0]:
  *                     out_low[0] = in_links_low[i]
  *                 if out_high[0] == -1 or in_links_high[i] > out_high[0]:             # <<<<<<<<<<<<<<
@@ -48683,7 +46525,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
       }
       if (__pyx_t_3) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1273
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1273
  *                     out_low[0] = in_links_low[i]
  *                 if out_high[0] == -1 or in_links_high[i] > out_high[0]:
  *                     out_high[0] = in_links_high[i]             # <<<<<<<<<<<<<<
@@ -48705,7 +46547,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1276
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1276
  * 
  * 
  *     cdef int* int_arr_extend(self, int* arr, int* arr_len, int* data, int data_len):             # <<<<<<<<<<<<<<
@@ -48713,13 +46555,13 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_find_projection(CYTHON_U
  *         new_len = arr_len[0] + data_len
  */
 
-static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int *__pyx_v_arr, int *__pyx_v_arr_len, int *__pyx_v_data, int __pyx_v_data_len) {
+static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int *__pyx_v_arr, int *__pyx_v_arr_len, int *__pyx_v_data, int __pyx_v_data_len) {
   int __pyx_v_new_len;
   int *__pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("int_arr_extend", 0);
+  __Pyx_RefNannySetupContext("int_arr_extend");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1278
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1278
  *     cdef int* int_arr_extend(self, int* arr, int* arr_len, int* data, int data_len):
  *         cdef int new_len
  *         new_len = arr_len[0] + data_len             # <<<<<<<<<<<<<<
@@ -48728,7 +46570,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED
  */
   __pyx_v_new_len = ((__pyx_v_arr_len[0]) + __pyx_v_data_len);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1279
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1279
  *         cdef int new_len
  *         new_len = arr_len[0] + data_len
  *         arr = <int*> realloc(arr, new_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -48737,7 +46579,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED
  */
   __pyx_v_arr = ((int *)realloc(__pyx_v_arr, (__pyx_v_new_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1280
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1280
  *         new_len = arr_len[0] + data_len
  *         arr = <int*> realloc(arr, new_len*sizeof(int))
  *         memcpy(arr+arr_len[0], data, data_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -48746,7 +46588,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED
  */
   memcpy((__pyx_v_arr + (__pyx_v_arr_len[0])), __pyx_v_data, (__pyx_v_data_len * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1281
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1281
  *         arr = <int*> realloc(arr, new_len*sizeof(int))
  *         memcpy(arr+arr_len[0], data, data_len*sizeof(int))
  *         arr_len[0] = new_len             # <<<<<<<<<<<<<<
@@ -48755,7 +46597,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED
  */
   (__pyx_v_arr_len[0]) = __pyx_v_new_len;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1282
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1282
  *         memcpy(arr+arr_len[0], data, data_len*sizeof(int))
  *         arr_len[0] = new_len
  *         return arr             # <<<<<<<<<<<<<<
@@ -48771,7 +46613,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1285
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1285
  * 
  * 
  *     cdef extract_phrases(self, int e_low, int e_high, int* e_gap_low, int* e_gap_high, int* e_links_low, int num_gaps,             # <<<<<<<<<<<<<<
@@ -48779,7 +46621,7 @@ static int *__pyx_f_3_sa_23HieroCachingRuleFactory_int_arr_extend(CYTHON_UNUSED
  *                         int sent_id, int e_sent_len, int e_sent_start):
  */
 
-static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int __pyx_v_e_low, int __pyx_v_e_high, int *__pyx_v_e_gap_low, int *__pyx_v_e_gap_high, int *__pyx_v_e_links_low, int __pyx_v_num_gaps, CYTHON_UNUSED int __pyx_v_f_low, CYTHON_UNUSED int __pyx_v_f_high, CYTHON_UNUSED int *__pyx_v_f_gap_low, CYTHON_UNUSED int *__pyx_v_f_gap_high, CYTHON_UNUSED int *__pyx_v_f_links_low, CYTHON_UNUSED int __pyx_v_sent_id, int __pyx_v_e_sent_len, int __pyx_v_e_sent_start) {
+static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int __pyx_v_e_low, int __pyx_v_e_high, int *__pyx_v_e_gap_low, int *__pyx_v_e_gap_high, int *__pyx_v_e_links_low, int __pyx_v_num_gaps, int __pyx_v_f_low, int __pyx_v_f_high, int *__pyx_v_f_gap_low, int *__pyx_v_f_gap_high, int *__pyx_v_f_links_low, int __pyx_v_sent_id, int __pyx_v_e_sent_len, int __pyx_v_e_sent_start) {
   int __pyx_v_i;
   int __pyx_v_j;
   int __pyx_v_k;
@@ -48815,9 +46657,9 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("extract_phrases", 0);
+  __Pyx_RefNannySetupContext("extract_phrases");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1293
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1293
  *         cdef result
  * 
  *         result = []             # <<<<<<<<<<<<<<
@@ -48825,11 +46667,11 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  *         e_gaps1 = <int*> malloc(0)
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_result = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1294
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1294
  * 
  *         result = []
  *         len1 = 0             # <<<<<<<<<<<<<<
@@ -48838,7 +46680,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_len1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1295
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1295
  *         result = []
  *         len1 = 0
  *         e_gaps1 = <int*> malloc(0)             # <<<<<<<<<<<<<<
@@ -48847,7 +46689,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_e_gaps1 = ((int *)malloc(0));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1296
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1296
  *         len1 = 0
  *         e_gaps1 = <int*> malloc(0)
  *         ephr_arr = IntList()             # <<<<<<<<<<<<<<
@@ -48859,7 +46701,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   __pyx_v_ephr_arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1298
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1298
  *         ephr_arr = IntList()
  * 
  *         e_gap_order = <int*> malloc(num_gaps*sizeof(int))             # <<<<<<<<<<<<<<
@@ -48868,7 +46710,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_e_gap_order = ((int *)malloc((__pyx_v_num_gaps * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1299
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1299
  * 
  *         e_gap_order = <int*> malloc(num_gaps*sizeof(int))
  *         if num_gaps > 0:             # <<<<<<<<<<<<<<
@@ -48878,7 +46720,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   __pyx_t_2 = (__pyx_v_num_gaps > 0);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1300
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1300
  *         e_gap_order = <int*> malloc(num_gaps*sizeof(int))
  *         if num_gaps > 0:
  *             e_gap_order[0] = 0             # <<<<<<<<<<<<<<
@@ -48887,7 +46729,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     (__pyx_v_e_gap_order[0]) = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1301
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1301
  *         if num_gaps > 0:
  *             e_gap_order[0] = 0
  *             for i from 1 <= i < num_gaps:             # <<<<<<<<<<<<<<
@@ -48897,7 +46739,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_t_3 = __pyx_v_num_gaps;
     for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1302
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1302
  *             e_gap_order[0] = 0
  *             for i from 1 <= i < num_gaps:
  *                 for j from 0 <= j < i:             # <<<<<<<<<<<<<<
@@ -48907,7 +46749,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_4 = __pyx_v_i;
       for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_4; __pyx_v_j++) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1303
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1303
  *             for i from 1 <= i < num_gaps:
  *                 for j from 0 <= j < i:
  *                     if e_gap_low[i] < e_gap_low[j]:             # <<<<<<<<<<<<<<
@@ -48917,7 +46759,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         __pyx_t_2 = ((__pyx_v_e_gap_low[__pyx_v_i]) < (__pyx_v_e_gap_low[__pyx_v_j]));
         if (__pyx_t_2) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1304
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1304
  *                 for j from 0 <= j < i:
  *                     if e_gap_low[i] < e_gap_low[j]:
  *                         for k from j <= k < i:             # <<<<<<<<<<<<<<
@@ -48927,7 +46769,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
           __pyx_t_5 = __pyx_v_i;
           for (__pyx_v_k = __pyx_v_j; __pyx_v_k < __pyx_t_5; __pyx_v_k++) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1305
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1305
  *                     if e_gap_low[i] < e_gap_low[j]:
  *                         for k from j <= k < i:
  *                             e_gap_order[k+1] = e_gap_order[k]             # <<<<<<<<<<<<<<
@@ -48937,7 +46779,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
             (__pyx_v_e_gap_order[(__pyx_v_k + 1)]) = (__pyx_v_e_gap_order[__pyx_v_k]);
           }
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1306
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1306
  *                         for k from j <= k < i:
  *                             e_gap_order[k+1] = e_gap_order[k]
  *                         e_gap_order[j] = i             # <<<<<<<<<<<<<<
@@ -48946,7 +46788,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
           (__pyx_v_e_gap_order[__pyx_v_j]) = __pyx_v_i;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1307
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1307
  *                             e_gap_order[k+1] = e_gap_order[k]
  *                         e_gap_order[j] = i
  *                         break             # <<<<<<<<<<<<<<
@@ -48960,7 +46802,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1309
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1309
  *                         break
  *                 else:
  *                     e_gap_order[i] = i             # <<<<<<<<<<<<<<
@@ -48975,7 +46817,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   }
   __pyx_L3:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1311
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1311
  *                     e_gap_order[i] = i
  * 
  *         e_x_low = e_low             # <<<<<<<<<<<<<<
@@ -48984,7 +46826,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_e_x_low = __pyx_v_e_low;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1312
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1312
  * 
  *         e_x_low = e_low
  *         e_x_high = e_high             # <<<<<<<<<<<<<<
@@ -48993,7 +46835,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_e_x_high = __pyx_v_e_high;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1313
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1313
  *         e_x_low = e_low
  *         e_x_high = e_high
  *         if self.tight_phrases == 0:             # <<<<<<<<<<<<<<
@@ -49003,7 +46845,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   __pyx_t_2 = (__pyx_v_self->tight_phrases == 0);
   if (__pyx_t_2) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1314
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1314
  *         e_x_high = e_high
  *         if self.tight_phrases == 0:
  *             while e_x_low > 0 and e_high - e_x_low < self.train_max_initial_size and e_links_low[e_x_low-1] == -1:             # <<<<<<<<<<<<<<
@@ -49026,7 +46868,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       }
       if (!__pyx_t_6) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1315
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1315
  *         if self.tight_phrases == 0:
  *             while e_x_low > 0 and e_high - e_x_low < self.train_max_initial_size and e_links_low[e_x_low-1] == -1:
  *                 e_x_low = e_x_low - 1             # <<<<<<<<<<<<<<
@@ -49036,7 +46878,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_v_e_x_low = (__pyx_v_e_x_low - 1);
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1316
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1316
  *             while e_x_low > 0 and e_high - e_x_low < self.train_max_initial_size and e_links_low[e_x_low-1] == -1:
  *                 e_x_low = e_x_low - 1
  *             while e_x_high < e_sent_len and e_x_high - e_low < self.train_max_initial_size and e_links_low[e_x_high] == -1:             # <<<<<<<<<<<<<<
@@ -49059,7 +46901,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       }
       if (!__pyx_t_2) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1317
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1317
  *                 e_x_low = e_x_low - 1
  *             while e_x_high < e_sent_len and e_x_high - e_low < self.train_max_initial_size and e_links_low[e_x_high] == -1:
  *                 e_x_high = e_x_high + 1             # <<<<<<<<<<<<<<
@@ -49072,7 +46914,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   }
   __pyx_L11:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1319
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1319
  *                 e_x_high = e_x_high + 1
  * 
  *         for i from e_x_low <= i <= e_low:             # <<<<<<<<<<<<<<
@@ -49082,7 +46924,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   __pyx_t_3 = __pyx_v_e_low;
   for (__pyx_v_i = __pyx_v_e_x_low; __pyx_v_i <= __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1320
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1320
  * 
  *         for i from e_x_low <= i <= e_low:
  *             e_gaps1 = self.int_arr_extend(e_gaps1, &len1, &i, 1)             # <<<<<<<<<<<<<<
@@ -49092,7 +46934,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_v_e_gaps1 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->int_arr_extend(__pyx_v_self, __pyx_v_e_gaps1, (&__pyx_v_len1), (&__pyx_v_i), 1);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1322
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1322
  *             e_gaps1 = self.int_arr_extend(e_gaps1, &len1, &i, 1)
  * 
  *         for i from 0 <= i < num_gaps:             # <<<<<<<<<<<<<<
@@ -49102,7 +46944,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   __pyx_t_3 = __pyx_v_num_gaps;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1323
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1323
  * 
  *         for i from 0 <= i < num_gaps:
  *             e_gaps2 = <int*> malloc(0)             # <<<<<<<<<<<<<<
@@ -49111,7 +46953,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_e_gaps2 = ((int *)malloc(0));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1324
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1324
  *         for i from 0 <= i < num_gaps:
  *             e_gaps2 = <int*> malloc(0)
  *             len2 = 0             # <<<<<<<<<<<<<<
@@ -49120,7 +46962,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_len2 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1326
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1326
  *             len2 = 0
  * 
  *             j = e_gap_order[i]             # <<<<<<<<<<<<<<
@@ -49129,7 +46971,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_j = (__pyx_v_e_gap_order[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1327
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1327
  * 
  *             j = e_gap_order[i]
  *             e_x_gap_low = e_gap_low[j]             # <<<<<<<<<<<<<<
@@ -49138,7 +46980,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_e_x_gap_low = (__pyx_v_e_gap_low[__pyx_v_j]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1328
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1328
  *             j = e_gap_order[i]
  *             e_x_gap_low = e_gap_low[j]
  *             e_x_gap_high = e_gap_high[j]             # <<<<<<<<<<<<<<
@@ -49147,7 +46989,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_e_x_gap_high = (__pyx_v_e_gap_high[__pyx_v_j]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1329
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1329
  *             e_x_gap_low = e_gap_low[j]
  *             e_x_gap_high = e_gap_high[j]
  *             if self.tight_phrases == 0:             # <<<<<<<<<<<<<<
@@ -49157,7 +46999,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_t_2 = (__pyx_v_self->tight_phrases == 0);
     if (__pyx_t_2) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1330
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1330
  *             e_x_gap_high = e_gap_high[j]
  *             if self.tight_phrases == 0:
  *                 while e_x_gap_low > e_x_low and e_links_low[e_x_gap_low-1] == -1:             # <<<<<<<<<<<<<<
@@ -49174,7 +47016,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         }
         if (!__pyx_t_7) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1331
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1331
  *             if self.tight_phrases == 0:
  *                 while e_x_gap_low > e_x_low and e_links_low[e_x_gap_low-1] == -1:
  *                     e_x_gap_low = e_x_gap_low - 1             # <<<<<<<<<<<<<<
@@ -49184,7 +47026,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         __pyx_v_e_x_gap_low = (__pyx_v_e_x_gap_low - 1);
       }
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1332
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1332
  *                 while e_x_gap_low > e_x_low and e_links_low[e_x_gap_low-1] == -1:
  *                     e_x_gap_low = e_x_gap_low - 1
  *                 while e_x_gap_high < e_x_high and e_links_low[e_x_gap_high] == -1:             # <<<<<<<<<<<<<<
@@ -49201,7 +47043,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         }
         if (!__pyx_t_6) break;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1333
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1333
  *                     e_x_gap_low = e_x_gap_low - 1
  *                 while e_x_gap_high < e_x_high and e_links_low[e_x_gap_high] == -1:
  *                     e_x_gap_high = e_x_gap_high + 1             # <<<<<<<<<<<<<<
@@ -49214,7 +47056,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     }
     __pyx_L20:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1335
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1335
  *                     e_x_gap_high = e_x_gap_high + 1
  * 
  *             k = 0             # <<<<<<<<<<<<<<
@@ -49223,7 +47065,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_k = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1336
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1336
  * 
  *             k = 0
  *             step = 1+(i*2)             # <<<<<<<<<<<<<<
@@ -49232,7 +47074,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_step = (1 + (__pyx_v_i * 2));
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1337
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1337
  *             k = 0
  *             step = 1+(i*2)
  *             while k < len1:             # <<<<<<<<<<<<<<
@@ -49243,7 +47085,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_6 = (__pyx_v_k < __pyx_v_len1);
       if (!__pyx_t_6) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1338
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1338
  *             step = 1+(i*2)
  *             while k < len1:
  *                 for m from e_x_gap_low <= m <= e_gap_low[j]:             # <<<<<<<<<<<<<<
@@ -49253,7 +47095,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_4 = (__pyx_v_e_gap_low[__pyx_v_j]);
       for (__pyx_v_m = __pyx_v_e_x_gap_low; __pyx_v_m <= __pyx_t_4; __pyx_v_m++) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1339
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1339
  *             while k < len1:
  *                 for m from e_x_gap_low <= m <= e_gap_low[j]:
  *                     if m >= e_gaps1[k+step-1]:             # <<<<<<<<<<<<<<
@@ -49263,7 +47105,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         __pyx_t_6 = (__pyx_v_m >= (__pyx_v_e_gaps1[((__pyx_v_k + __pyx_v_step) - 1)]));
         if (__pyx_t_6) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1340
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1340
  *                 for m from e_x_gap_low <= m <= e_gap_low[j]:
  *                     if m >= e_gaps1[k+step-1]:
  *                         for n from e_gap_high[j] <= n <= e_x_gap_high:             # <<<<<<<<<<<<<<
@@ -49273,7 +47115,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
           __pyx_t_5 = __pyx_v_e_x_gap_high;
           for (__pyx_v_n = (__pyx_v_e_gap_high[__pyx_v_j]); __pyx_v_n <= __pyx_t_5; __pyx_v_n++) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1341
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1341
  *                     if m >= e_gaps1[k+step-1]:
  *                         for n from e_gap_high[j] <= n <= e_x_gap_high:
  *                             if n-m >= 1:    # extractor.py doesn't restrict target-side gap length             # <<<<<<<<<<<<<<
@@ -49283,7 +47125,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
             __pyx_t_6 = ((__pyx_v_n - __pyx_v_m) >= 1);
             if (__pyx_t_6) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1342
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1342
  *                         for n from e_gap_high[j] <= n <= e_x_gap_high:
  *                             if n-m >= 1:    # extractor.py doesn't restrict target-side gap length
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, e_gaps1+k, step)             # <<<<<<<<<<<<<<
@@ -49292,7 +47134,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
               __pyx_v_e_gaps2 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->int_arr_extend(__pyx_v_self, __pyx_v_e_gaps2, (&__pyx_v_len2), (__pyx_v_e_gaps1 + __pyx_v_k), __pyx_v_step);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1343
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1343
  *                             if n-m >= 1:    # extractor.py doesn't restrict target-side gap length
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, e_gaps1+k, step)
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &m, 1)             # <<<<<<<<<<<<<<
@@ -49301,7 +47143,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
               __pyx_v_e_gaps2 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->int_arr_extend(__pyx_v_self, __pyx_v_e_gaps2, (&__pyx_v_len2), (&__pyx_v_m), 1);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1344
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1344
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, e_gaps1+k, step)
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &m, 1)
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &n, 1)             # <<<<<<<<<<<<<<
@@ -49318,7 +47160,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         __pyx_L29:;
       }
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1345
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1345
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &m, 1)
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &n, 1)
  *                 k = k + step             # <<<<<<<<<<<<<<
@@ -49328,7 +47170,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_v_k = (__pyx_v_k + __pyx_v_step);
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1346
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1346
  *                                 e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &n, 1)
  *                 k = k + step
  *             free(e_gaps1)             # <<<<<<<<<<<<<<
@@ -49337,7 +47179,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     free(__pyx_v_e_gaps1);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1347
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1347
  *                 k = k + step
  *             free(e_gaps1)
  *             e_gaps1 = e_gaps2             # <<<<<<<<<<<<<<
@@ -49346,7 +47188,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_e_gaps1 = __pyx_v_e_gaps2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1348
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1348
  *             free(e_gaps1)
  *             e_gaps1 = e_gaps2
  *             len1 = len2             # <<<<<<<<<<<<<<
@@ -49356,7 +47198,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_v_len1 = __pyx_v_len2;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1350
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1350
  *             len1 = len2
  * 
  *         step = 1+(num_gaps*2)             # <<<<<<<<<<<<<<
@@ -49365,7 +47207,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_step = (1 + (__pyx_v_num_gaps * 2));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1351
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1351
  * 
  *         step = 1+(num_gaps*2)
  *         e_gaps2 = <int*> malloc(0)             # <<<<<<<<<<<<<<
@@ -49374,7 +47216,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_e_gaps2 = ((int *)malloc(0));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1352
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1352
  *         step = 1+(num_gaps*2)
  *         e_gaps2 = <int*> malloc(0)
  *         len2 = 0             # <<<<<<<<<<<<<<
@@ -49383,7 +47225,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_len2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1353
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1353
  *         e_gaps2 = <int*> malloc(0)
  *         len2 = 0
  *         for i from e_high <= i <= e_x_high:             # <<<<<<<<<<<<<<
@@ -49393,7 +47235,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   __pyx_t_3 = __pyx_v_e_x_high;
   for (__pyx_v_i = __pyx_v_e_high; __pyx_v_i <= __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1354
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1354
  *         len2 = 0
  *         for i from e_high <= i <= e_x_high:
  *             j = 0             # <<<<<<<<<<<<<<
@@ -49402,7 +47244,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_j = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1355
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1355
  *         for i from e_high <= i <= e_x_high:
  *             j = 0
  *             while j < len1:             # <<<<<<<<<<<<<<
@@ -49413,7 +47255,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_6 = (__pyx_v_j < __pyx_v_len1);
       if (!__pyx_t_6) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1356
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1356
  *             j = 0
  *             while j < len1:
  *                 if i - e_gaps1[j] <= self.train_max_initial_size and i >= e_gaps1[j+step-1]:             # <<<<<<<<<<<<<<
@@ -49429,7 +47271,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       }
       if (__pyx_t_2) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1357
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1357
  *             while j < len1:
  *                 if i - e_gaps1[j] <= self.train_max_initial_size and i >= e_gaps1[j+step-1]:
  *                     e_gaps2 = self.int_arr_extend(e_gaps2, &len2, e_gaps1+j, step)             # <<<<<<<<<<<<<<
@@ -49438,7 +47280,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
         __pyx_v_e_gaps2 = ((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->int_arr_extend(__pyx_v_self, __pyx_v_e_gaps2, (&__pyx_v_len2), (__pyx_v_e_gaps1 + __pyx_v_j), __pyx_v_step);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1358
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1358
  *                 if i - e_gaps1[j] <= self.train_max_initial_size and i >= e_gaps1[j+step-1]:
  *                     e_gaps2 = self.int_arr_extend(e_gaps2, &len2, e_gaps1+j, step)
  *                     e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &i, 1)             # <<<<<<<<<<<<<<
@@ -49450,7 +47292,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       }
       __pyx_L37:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1359
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1359
  *                     e_gaps2 = self.int_arr_extend(e_gaps2, &len2, e_gaps1+j, step)
  *                     e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &i, 1)
  *                 j = j + step             # <<<<<<<<<<<<<<
@@ -49461,7 +47303,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     }
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1360
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1360
  *                     e_gaps2 = self.int_arr_extend(e_gaps2, &len2, &i, 1)
  *                 j = j + step
  *         free(e_gaps1)             # <<<<<<<<<<<<<<
@@ -49470,7 +47312,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   free(__pyx_v_e_gaps1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1361
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1361
  *                 j = j + step
  *         free(e_gaps1)
  *         e_gaps1 = e_gaps2             # <<<<<<<<<<<<<<
@@ -49479,7 +47321,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_e_gaps1 = __pyx_v_e_gaps2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1362
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1362
  *         free(e_gaps1)
  *         e_gaps1 = e_gaps2
  *         len1 = len2             # <<<<<<<<<<<<<<
@@ -49488,7 +47330,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_len1 = __pyx_v_len2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1364
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1364
  *         len1 = len2
  * 
  *         step = (num_gaps+1)*2             # <<<<<<<<<<<<<<
@@ -49497,7 +47339,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_step = ((__pyx_v_num_gaps + 1) * 2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1365
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1365
  * 
  *         step = (num_gaps+1)*2
  *         i = 0             # <<<<<<<<<<<<<<
@@ -49506,7 +47348,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   __pyx_v_i = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1367
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1367
  *         i = 0
  * 
  *         while i < len1:             # <<<<<<<<<<<<<<
@@ -49517,7 +47359,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_t_2 = (__pyx_v_i < __pyx_v_len1);
     if (!__pyx_t_2) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1368
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1368
  * 
  *         while i < len1:
  *             ephr_arr._clear()             # <<<<<<<<<<<<<<
@@ -49526,7 +47368,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_ephr_arr->__pyx_vtab)->_clear(__pyx_v_ephr_arr);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1369
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1369
  *         while i < len1:
  *             ephr_arr._clear()
  *             num_chunks = 0             # <<<<<<<<<<<<<<
@@ -49535,7 +47377,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_num_chunks = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1370
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1370
  *             ephr_arr._clear()
  *             num_chunks = 0
  *             indexes = []             # <<<<<<<<<<<<<<
@@ -49543,12 +47385,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  *                 if e_gaps1[i+2*j] < e_gaps1[i+(2*j)+1]:
  */
     __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
     __Pyx_XDECREF(((PyObject *)__pyx_v_indexes));
     __pyx_v_indexes = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1371
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1371
  *             num_chunks = 0
  *             indexes = []
  *             for j from 0 <= j < num_gaps+1:             # <<<<<<<<<<<<<<
@@ -49558,7 +47400,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_t_9 = (__pyx_v_num_gaps + 1);
     for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_9; __pyx_v_j++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1372
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1372
  *             indexes = []
  *             for j from 0 <= j < num_gaps+1:
  *                 if e_gaps1[i+2*j] < e_gaps1[i+(2*j)+1]:             # <<<<<<<<<<<<<<
@@ -49568,7 +47410,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_2 = ((__pyx_v_e_gaps1[(__pyx_v_i + (2 * __pyx_v_j))]) < (__pyx_v_e_gaps1[((__pyx_v_i + (2 * __pyx_v_j)) + 1)]));
       if (__pyx_t_2) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1373
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1373
  *             for j from 0 <= j < num_gaps+1:
  *                 if e_gaps1[i+2*j] < e_gaps1[i+(2*j)+1]:
  *                     num_chunks = num_chunks + 1             # <<<<<<<<<<<<<<
@@ -49580,7 +47422,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       }
       __pyx_L42:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1374
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1374
  *                 if e_gaps1[i+2*j] < e_gaps1[i+(2*j)+1]:
  *                     num_chunks = num_chunks + 1
  *                 for k from e_gaps1[i+2*j] <= k < e_gaps1[i+(2*j)+1]:             # <<<<<<<<<<<<<<
@@ -49590,19 +47432,22 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_3 = (__pyx_v_e_gaps1[((__pyx_v_i + (2 * __pyx_v_j)) + 1)]);
       for (__pyx_v_k = (__pyx_v_e_gaps1[(__pyx_v_i + (2 * __pyx_v_j))]); __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1375
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1375
  *                     num_chunks = num_chunks + 1
  *                 for k from e_gaps1[i+2*j] <= k < e_gaps1[i+(2*j)+1]:
  *                     indexes.append(k)             # <<<<<<<<<<<<<<
  *                     ephr_arr._append(self.eid2symid[self.eda.data.arr[e_sent_start+k]])
  *                 if j < num_gaps:
  */
+        if (unlikely(((PyObject *)__pyx_v_indexes) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_1 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_t_10 = PyList_Append(__pyx_v_indexes, __pyx_t_1); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1376
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1376
  *                 for k from e_gaps1[i+2*j] <= k < e_gaps1[i+(2*j)+1]:
  *                     indexes.append(k)
  *                     ephr_arr._append(self.eid2symid[self.eda.data.arr[e_sent_start+k]])             # <<<<<<<<<<<<<<
@@ -49617,7 +47462,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
         ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_ephr_arr->__pyx_vtab)->_append(__pyx_v_ephr_arr, __pyx_t_4);
       }
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1377
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1377
  *                     indexes.append(k)
  *                     ephr_arr._append(self.eid2symid[self.eda.data.arr[e_sent_start+k]])
  *                 if j < num_gaps:             # <<<<<<<<<<<<<<
@@ -49627,19 +47472,22 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_t_2 = (__pyx_v_j < __pyx_v_num_gaps);
       if (__pyx_t_2) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1378
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1378
  *                     ephr_arr._append(self.eid2symid[self.eda.data.arr[e_sent_start+k]])
  *                 if j < num_gaps:
  *                     indexes.append(sym_setindex(self.category, e_gap_order[j]+1))             # <<<<<<<<<<<<<<
  *                     ephr_arr._append(sym_setindex(self.category, e_gap_order[j]+1))
  *             i = i + step
  */
+        if (unlikely(((PyObject *)__pyx_v_indexes) == Py_None)) {
+          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+        }
         __pyx_t_1 = PyInt_FromLong(__pyx_f_3_sa_sym_setindex(__pyx_v_self->category, ((__pyx_v_e_gap_order[__pyx_v_j]) + 1))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_t_10 = PyList_Append(__pyx_v_indexes, __pyx_t_1); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1379
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1379
  *                 if j < num_gaps:
  *                     indexes.append(sym_setindex(self.category, e_gap_order[j]+1))
  *                     ephr_arr._append(sym_setindex(self.category, e_gap_order[j]+1))             # <<<<<<<<<<<<<<
@@ -49652,7 +47500,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __pyx_L45:;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1380
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1380
  *                     indexes.append(sym_setindex(self.category, e_gap_order[j]+1))
  *                     ephr_arr._append(sym_setindex(self.category, e_gap_order[j]+1))
  *             i = i + step             # <<<<<<<<<<<<<<
@@ -49661,7 +47509,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
     __pyx_v_i = (__pyx_v_i + __pyx_v_step);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1381
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1381
  *                     ephr_arr._append(sym_setindex(self.category, e_gap_order[j]+1))
  *             i = i + step
  *             if ephr_arr.len <= self.max_target_length and num_chunks <= self.max_target_chunks:             # <<<<<<<<<<<<<<
@@ -49677,7 +47525,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     }
     if (__pyx_t_7) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1382
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1382
  *             i = i + step
  *             if ephr_arr.len <= self.max_target_length and num_chunks <= self.max_target_chunks:
  *                 result.append((Phrase(ephr_arr),indexes))             # <<<<<<<<<<<<<<
@@ -49685,7 +47533,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  *         free(e_gaps1)
  */
       __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
       __Pyx_INCREF(((PyObject *)__pyx_v_ephr_arr));
       PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_ephr_arr));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_ephr_arr));
@@ -49693,7 +47541,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
       __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11);
       __Pyx_GIVEREF(__pyx_t_11);
       __Pyx_INCREF(((PyObject *)__pyx_v_indexes));
@@ -49709,7 +47557,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
     __pyx_L46:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1384
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1384
  *                 result.append((Phrase(ephr_arr),indexes))
  * 
  *         free(e_gaps1)             # <<<<<<<<<<<<<<
@@ -49718,7 +47566,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   free(__pyx_v_e_gaps1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1385
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1385
  * 
  *         free(e_gaps1)
  *         free(e_gap_order)             # <<<<<<<<<<<<<<
@@ -49727,7 +47575,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  */
   free(__pyx_v_e_gap_order);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1386
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1386
  *         free(e_gaps1)
  *         free(e_gap_order)
  *         return result             # <<<<<<<<<<<<<<
@@ -49755,7 +47603,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1388
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1388
  *         return result
  * 
  *     cdef IntList create_alignments(self, int* sent_links, int num_links, findexes, eindexes):             # <<<<<<<<<<<<<<
@@ -49763,7 +47611,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract_phrases(struct _
  *         cdef IntList ret = IntList()
  */
 
-static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_create_alignments(CYTHON_UNUSED struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int *__pyx_v_sent_links, int __pyx_v_num_links, PyObject *__pyx_v_findexes, PyObject *__pyx_v_eindexes) {
+static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_create_alignments(struct __pyx_obj_3_sa_HieroCachingRuleFactory *__pyx_v_self, int *__pyx_v_sent_links, int __pyx_v_num_links, PyObject *__pyx_v_findexes, PyObject *__pyx_v_eindexes) {
   unsigned int __pyx_v_i;
   struct __pyx_obj_3_sa_IntList *__pyx_v_ret = 0;
   PyObject *__pyx_v_s = NULL;
@@ -49781,9 +47629,9 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create_alignments", 0);
+  __Pyx_RefNannySetupContext("create_alignments");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1390
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1390
  *     cdef IntList create_alignments(self, int* sent_links, int num_links, findexes, eindexes):
  *         cdef unsigned i
  *         cdef IntList ret = IntList()             # <<<<<<<<<<<<<<
@@ -49795,7 +47643,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
   __pyx_v_ret = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1391
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1391
  *         cdef unsigned i
  *         cdef IntList ret = IntList()
  *         for i in range(len(findexes)):             # <<<<<<<<<<<<<<
@@ -49806,7 +47654,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1392
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1392
  *         cdef IntList ret = IntList()
  *         for i in range(len(findexes)):
  *             s = findexes[i]             # <<<<<<<<<<<<<<
@@ -49819,19 +47667,20 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
     __pyx_v_s = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1393
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1393
  *         for i in range(len(findexes)):
  *             s = findexes[i]
  *             if (s<0):             # <<<<<<<<<<<<<<
  *                 continue
  *             idx = 0
  */
-    __pyx_t_1 = PyObject_RichCompare(__pyx_v_s, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_s, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1394
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1394
  *             s = findexes[i]
  *             if (s<0):
  *                 continue             # <<<<<<<<<<<<<<
@@ -49843,7 +47692,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
     }
     __pyx_L5:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1395
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1395
  *             if (s<0):
  *                 continue
  *             idx = 0             # <<<<<<<<<<<<<<
@@ -49854,7 +47703,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
     __Pyx_XDECREF(__pyx_v_idx);
     __pyx_v_idx = __pyx_int_0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1396
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1396
  *                 continue
  *             idx = 0
  *             while (idx < num_links*2):             # <<<<<<<<<<<<<<
@@ -49864,13 +47713,14 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
     while (1) {
       __pyx_t_1 = PyInt_FromLong((__pyx_v_num_links * 2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_idx, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_idx, __pyx_t_1, Py_LT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       if (!__pyx_t_4) break;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1397
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1397
  *             idx = 0
  *             while (idx < num_links*2):
  *                 if (sent_links[idx] == s):             # <<<<<<<<<<<<<<
@@ -49880,13 +47730,14 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
       __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_5 = PyInt_FromLong((__pyx_v_sent_links[__pyx_t_6])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_v_s, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_v_s, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (__pyx_t_4) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1398
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1398
  *             while (idx < num_links*2):
  *                 if (sent_links[idx] == s):
  *                     j = eindexes.index(sent_links[idx+1])             # <<<<<<<<<<<<<<
@@ -49902,7 +47753,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
         __pyx_t_5 = PyInt_FromLong((__pyx_v_sent_links[__pyx_t_6])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_7));
         PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
         __Pyx_GIVEREF(__pyx_t_5);
         __pyx_t_5 = 0;
@@ -49914,7 +47765,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
         __pyx_v_j = __pyx_t_5;
         __pyx_t_5 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1399
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1399
  *                 if (sent_links[idx] == s):
  *                     j = eindexes.index(sent_links[idx+1])
  *                     ret.append(i*65536+j)             # <<<<<<<<<<<<<<
@@ -49934,7 +47785,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
       }
       __pyx_L8:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1400
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1400
  *                     j = eindexes.index(sent_links[idx+1])
  *                     ret.append(i*65536+j)
  *                 idx += 2             # <<<<<<<<<<<<<<
@@ -49950,7 +47801,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
     __pyx_L3_continue:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1401
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1401
  *                     ret.append(i*65536+j)
  *                 idx += 2
  *         return ret             # <<<<<<<<<<<<<<
@@ -49980,7 +47831,7 @@ static struct __pyx_obj_3_sa_IntList *__pyx_f_3_sa_23HieroCachingRuleFactory_cre
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1403
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1403
  *         return ret
  * 
  *     cdef extract(self, Phrase phrase, Matching* matching, int* chunklen, int num_chunks):             # <<<<<<<<<<<<<<
@@ -50020,7 +47871,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   int __pyx_v_f_sent_end;
   int __pyx_v_e_sent_len;
   int __pyx_v_f_sent_len;
-  CYTHON_UNUSED int __pyx_v_e_word_count;
+  int __pyx_v_e_word_count;
   int __pyx_v_f_x_low;
   int __pyx_v_f_x_high;
   int __pyx_v_e_x_low;
@@ -50031,7 +47882,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   PyObject *__pyx_v_phrase_list = 0;
   struct __pyx_obj_3_sa_IntList *__pyx_v_fphr_arr = 0;
   struct __pyx_obj_3_sa_Phrase *__pyx_v_fphr = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_reason_for_failure = 0;
+  PyObject *__pyx_v_reason_for_failure = 0;
   PyObject *__pyx_v_sofar = NULL;
   PyObject *__pyx_v_als = NULL;
   PyObject *__pyx_v_al = NULL;
@@ -50072,9 +47923,9 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("extract", 0);
+  __Pyx_RefNannySetupContext("extract");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1416
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1416
  *         cdef reason_for_failure
  * 
  *         fphr_arr = IntList()             # <<<<<<<<<<<<<<
@@ -50086,7 +47937,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   __pyx_v_fphr_arr = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1417
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1417
  * 
  *         fphr_arr = IntList()
  *         phrase_len = phrase.n             # <<<<<<<<<<<<<<
@@ -50095,7 +47946,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_phrase_len = __pyx_v_phrase->n;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1418
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1418
  *         fphr_arr = IntList()
  *         phrase_len = phrase.n
  *         extracts = []             # <<<<<<<<<<<<<<
@@ -50103,11 +47954,11 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  * 
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_extracts = ((PyObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1419
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1419
  *         phrase_len = phrase.n
  *         extracts = []
  *         sent_links = self.alignment._get_sent_links(matching.sent_id, &num_links)             # <<<<<<<<<<<<<<
@@ -50116,7 +47967,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_sent_links = ((struct __pyx_vtabstruct_3_sa_Alignment *)__pyx_v_self->alignment->__pyx_vtab)->_get_sent_links(__pyx_v_self->alignment, __pyx_v_matching->sent_id, (&__pyx_v_num_links));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1421
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1421
  *         sent_links = self.alignment._get_sent_links(matching.sent_id, &num_links)
  * 
  *         e_sent_start = self.eda.sent_index.arr[matching.sent_id]             # <<<<<<<<<<<<<<
@@ -50125,7 +47976,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_sent_start = (__pyx_v_self->eda->sent_index->arr[__pyx_v_matching->sent_id]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1422
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1422
  * 
  *         e_sent_start = self.eda.sent_index.arr[matching.sent_id]
  *         e_sent_end = self.eda.sent_index.arr[matching.sent_id+1]             # <<<<<<<<<<<<<<
@@ -50134,7 +47985,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_sent_end = (__pyx_v_self->eda->sent_index->arr[(__pyx_v_matching->sent_id + 1)]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1423
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1423
  *         e_sent_start = self.eda.sent_index.arr[matching.sent_id]
  *         e_sent_end = self.eda.sent_index.arr[matching.sent_id+1]
  *         e_sent_len = e_sent_end - e_sent_start - 1             # <<<<<<<<<<<<<<
@@ -50143,7 +47994,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_sent_len = ((__pyx_v_e_sent_end - __pyx_v_e_sent_start) - 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1424
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1424
  *         e_sent_end = self.eda.sent_index.arr[matching.sent_id+1]
  *         e_sent_len = e_sent_end - e_sent_start - 1
  *         f_sent_start = self.fda.sent_index.arr[matching.sent_id]             # <<<<<<<<<<<<<<
@@ -50152,7 +48003,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_sent_start = (__pyx_v_self->fda->sent_index->arr[__pyx_v_matching->sent_id]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1425
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1425
  *         e_sent_len = e_sent_end - e_sent_start - 1
  *         f_sent_start = self.fda.sent_index.arr[matching.sent_id]
  *         f_sent_end = self.fda.sent_index.arr[matching.sent_id+1]             # <<<<<<<<<<<<<<
@@ -50161,7 +48012,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_sent_end = (__pyx_v_self->fda->sent_index->arr[(__pyx_v_matching->sent_id + 1)]);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1426
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1426
  *         f_sent_start = self.fda.sent_index.arr[matching.sent_id]
  *         f_sent_end = self.fda.sent_index.arr[matching.sent_id+1]
  *         f_sent_len = f_sent_end - f_sent_start - 1             # <<<<<<<<<<<<<<
@@ -50170,7 +48021,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_sent_len = ((__pyx_v_f_sent_end - __pyx_v_f_sent_start) - 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1428
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1428
  *         f_sent_len = f_sent_end - f_sent_start - 1
  * 
  *         self.findexes1.reset()             # <<<<<<<<<<<<<<
@@ -50184,7 +48035,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1429
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1429
  * 
  *         self.findexes1.reset()
  *         sofar = 0             # <<<<<<<<<<<<<<
@@ -50194,7 +48045,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_sofar = __pyx_int_0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1430
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1430
  *         self.findexes1.reset()
  *         sofar = 0
  *         for i in range(num_chunks):             # <<<<<<<<<<<<<<
@@ -50205,7 +48056,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1431
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1431
  *         sofar = 0
  *         for i in range(num_chunks):
  *             for j in range(chunklen[i]):             # <<<<<<<<<<<<<<
@@ -50216,7 +48067,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
       __pyx_v_j = __pyx_t_6;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1432
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1432
  *         for i in range(num_chunks):
  *             for j in range(chunklen[i]):
  *                 self.findexes1.append(matching.arr[matching.start+i]+j-f_sent_start);             # <<<<<<<<<<<<<<
@@ -50230,7 +48081,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1433
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1433
  *             for j in range(chunklen[i]):
  *                 self.findexes1.append(matching.arr[matching.start+i]+j-f_sent_start);
  *                 sofar += 1             # <<<<<<<<<<<<<<
@@ -50244,7 +48095,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_1 = 0;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1434
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1434
  *                 self.findexes1.append(matching.arr[matching.start+i]+j-f_sent_start);
  *                 sofar += 1
  *             if (i+1<num_chunks):             # <<<<<<<<<<<<<<
@@ -50254,7 +48105,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_7 = ((__pyx_v_i + 1) < __pyx_v_num_chunks);
     if (__pyx_t_7) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1435
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1435
  *                 sofar += 1
  *             if (i+1<num_chunks):
  *                 self.findexes1.append(phrase[sofar])             # <<<<<<<<<<<<<<
@@ -50268,7 +48119,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1436
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1436
  *             if (i+1<num_chunks):
  *                 self.findexes1.append(phrase[sofar])
  *                 sofar += 1             # <<<<<<<<<<<<<<
@@ -50285,7 +48136,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_L7:;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1439
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1439
  * 
  * 
  *         e_links_low = <int*> malloc(e_sent_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50294,7 +48145,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_links_low = ((int *)malloc((__pyx_v_e_sent_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1440
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1440
  * 
  *         e_links_low = <int*> malloc(e_sent_len*sizeof(int))
  *         e_links_high = <int*> malloc(e_sent_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50303,7 +48154,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_links_high = ((int *)malloc((__pyx_v_e_sent_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1441
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1441
  *         e_links_low = <int*> malloc(e_sent_len*sizeof(int))
  *         e_links_high = <int*> malloc(e_sent_len*sizeof(int))
  *         f_links_low = <int*> malloc(f_sent_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50312,7 +48163,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_links_low = ((int *)malloc((__pyx_v_f_sent_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1442
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1442
  *         e_links_high = <int*> malloc(e_sent_len*sizeof(int))
  *         f_links_low = <int*> malloc(f_sent_len*sizeof(int))
  *         f_links_high = <int*> malloc(f_sent_len*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50321,7 +48172,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_links_high = ((int *)malloc((__pyx_v_f_sent_len * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1443
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1443
  *         f_links_low = <int*> malloc(f_sent_len*sizeof(int))
  *         f_links_high = <int*> malloc(f_sent_len*sizeof(int))
  *         f_gap_low = <int*> malloc((num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50330,7 +48181,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_gap_low = ((int *)malloc(((__pyx_v_num_chunks + 1) * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1444
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1444
  *         f_links_high = <int*> malloc(f_sent_len*sizeof(int))
  *         f_gap_low = <int*> malloc((num_chunks+1)*sizeof(int))
  *         f_gap_high = <int*> malloc((num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50339,7 +48190,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_gap_high = ((int *)malloc(((__pyx_v_num_chunks + 1) * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1445
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1445
  *         f_gap_low = <int*> malloc((num_chunks+1)*sizeof(int))
  *         f_gap_high = <int*> malloc((num_chunks+1)*sizeof(int))
  *         e_gap_low = <int*> malloc((num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50348,7 +48199,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_gap_low = ((int *)malloc(((__pyx_v_num_chunks + 1) * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1446
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1446
  *         f_gap_high = <int*> malloc((num_chunks+1)*sizeof(int))
  *         e_gap_low = <int*> malloc((num_chunks+1)*sizeof(int))
  *         e_gap_high = <int*> malloc((num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50357,7 +48208,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_e_gap_high = ((int *)malloc(((__pyx_v_num_chunks + 1) * (sizeof(int)))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1447
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1447
  *         e_gap_low = <int*> malloc((num_chunks+1)*sizeof(int))
  *         e_gap_high = <int*> malloc((num_chunks+1)*sizeof(int))
  *         memset(f_gap_low, 0, (num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50366,7 +48217,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   memset(__pyx_v_f_gap_low, 0, ((__pyx_v_num_chunks + 1) * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1448
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1448
  *         e_gap_high = <int*> malloc((num_chunks+1)*sizeof(int))
  *         memset(f_gap_low, 0, (num_chunks+1)*sizeof(int))
  *         memset(f_gap_high, 0, (num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50375,7 +48226,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   memset(__pyx_v_f_gap_high, 0, ((__pyx_v_num_chunks + 1) * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1449
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1449
  *         memset(f_gap_low, 0, (num_chunks+1)*sizeof(int))
  *         memset(f_gap_high, 0, (num_chunks+1)*sizeof(int))
  *         memset(e_gap_low, 0, (num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50384,7 +48235,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   memset(__pyx_v_e_gap_low, 0, ((__pyx_v_num_chunks + 1) * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1450
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1450
  *         memset(f_gap_high, 0, (num_chunks+1)*sizeof(int))
  *         memset(e_gap_low, 0, (num_chunks+1)*sizeof(int))
  *         memset(e_gap_high, 0, (num_chunks+1)*sizeof(int))             # <<<<<<<<<<<<<<
@@ -50393,7 +48244,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   memset(__pyx_v_e_gap_high, 0, ((__pyx_v_num_chunks + 1) * (sizeof(int))));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1452
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1452
  *         memset(e_gap_high, 0, (num_chunks+1)*sizeof(int))
  * 
  *         reason_for_failure = ""             # <<<<<<<<<<<<<<
@@ -50403,7 +48254,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_45));
   __pyx_v_reason_for_failure = ((PyObject *)__pyx_kp_s_45);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1454
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1454
  *         reason_for_failure = ""
  * 
  *         for i from 0 <= i < e_sent_len:             # <<<<<<<<<<<<<<
@@ -50413,7 +48264,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   __pyx_t_3 = __pyx_v_e_sent_len;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1455
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1455
  * 
  *         for i from 0 <= i < e_sent_len:
  *             e_links_low[i] = -1             # <<<<<<<<<<<<<<
@@ -50422,7 +48273,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
     (__pyx_v_e_links_low[__pyx_v_i]) = -1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1456
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1456
  *         for i from 0 <= i < e_sent_len:
  *             e_links_low[i] = -1
  *             e_links_high[i] = -1             # <<<<<<<<<<<<<<
@@ -50432,7 +48283,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     (__pyx_v_e_links_high[__pyx_v_i]) = -1;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1457
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1457
  *             e_links_low[i] = -1
  *             e_links_high[i] = -1
  *         for i from 0 <= i < f_sent_len:             # <<<<<<<<<<<<<<
@@ -50442,7 +48293,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   __pyx_t_3 = __pyx_v_f_sent_len;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1458
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1458
  *             e_links_high[i] = -1
  *         for i from 0 <= i < f_sent_len:
  *             f_links_low[i] = -1             # <<<<<<<<<<<<<<
@@ -50451,7 +48302,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
     (__pyx_v_f_links_low[__pyx_v_i]) = -1;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1459
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1459
  *         for i from 0 <= i < f_sent_len:
  *             f_links_low[i] = -1
  *             f_links_high[i] = -1             # <<<<<<<<<<<<<<
@@ -50461,7 +48312,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     (__pyx_v_f_links_high[__pyx_v_i]) = -1;
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1465
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1465
  *         # links that we care about (but then how to look up
  *         # when we want to check something on the e side?)
  *         i = 0             # <<<<<<<<<<<<<<
@@ -50470,7 +48321,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_i = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1466
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1466
  *         # when we want to check something on the e side?)
  *         i = 0
  *         while i < num_links*2:             # <<<<<<<<<<<<<<
@@ -50481,7 +48332,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_7 = (__pyx_v_i < (__pyx_v_num_links * 2));
     if (!__pyx_t_7) break;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1467
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1467
  *         i = 0
  *         while i < num_links*2:
  *             f_i = sent_links[i]             # <<<<<<<<<<<<<<
@@ -50490,7 +48341,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
     __pyx_v_f_i = (__pyx_v_sent_links[__pyx_v_i]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1468
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1468
  *         while i < num_links*2:
  *             f_i = sent_links[i]
  *             e_i = sent_links[i+1]             # <<<<<<<<<<<<<<
@@ -50499,7 +48350,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
     __pyx_v_e_i = (__pyx_v_sent_links[(__pyx_v_i + 1)]);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1469
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1469
  *             f_i = sent_links[i]
  *             e_i = sent_links[i+1]
  *             if f_links_low[f_i] == -1 or f_links_low[f_i] > e_i:             # <<<<<<<<<<<<<<
@@ -50515,7 +48366,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     if (__pyx_t_9) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1470
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1470
  *             e_i = sent_links[i+1]
  *             if f_links_low[f_i] == -1 or f_links_low[f_i] > e_i:
  *                 f_links_low[f_i] = e_i             # <<<<<<<<<<<<<<
@@ -50527,7 +48378,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     __pyx_L14:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1471
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1471
  *             if f_links_low[f_i] == -1 or f_links_low[f_i] > e_i:
  *                 f_links_low[f_i] = e_i
  *             if f_links_high[f_i] == -1 or f_links_high[f_i] < e_i + 1:             # <<<<<<<<<<<<<<
@@ -50543,7 +48394,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     if (__pyx_t_8) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1472
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1472
  *                 f_links_low[f_i] = e_i
  *             if f_links_high[f_i] == -1 or f_links_high[f_i] < e_i + 1:
  *                 f_links_high[f_i] = e_i + 1             # <<<<<<<<<<<<<<
@@ -50555,7 +48406,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     __pyx_L15:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1473
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1473
  *             if f_links_high[f_i] == -1 or f_links_high[f_i] < e_i + 1:
  *                 f_links_high[f_i] = e_i + 1
  *             if e_links_low[e_i] == -1 or e_links_low[e_i] > f_i:             # <<<<<<<<<<<<<<
@@ -50571,7 +48422,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     if (__pyx_t_7) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1474
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1474
  *                 f_links_high[f_i] = e_i + 1
  *             if e_links_low[e_i] == -1 or e_links_low[e_i] > f_i:
  *                 e_links_low[e_i] = f_i             # <<<<<<<<<<<<<<
@@ -50583,7 +48434,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     __pyx_L16:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1475
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1475
  *             if e_links_low[e_i] == -1 or e_links_low[e_i] > f_i:
  *                 e_links_low[e_i] = f_i
  *             if e_links_high[e_i] == -1 or e_links_high[e_i] < f_i + 1:             # <<<<<<<<<<<<<<
@@ -50599,7 +48450,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     if (__pyx_t_9) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1476
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1476
  *                 e_links_low[e_i] = f_i
  *             if e_links_high[e_i] == -1 or e_links_high[e_i] < f_i + 1:
  *                 e_links_high[e_i] = f_i + 1             # <<<<<<<<<<<<<<
@@ -50611,7 +48462,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     __pyx_L17:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1477
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1477
  *             if e_links_high[e_i] == -1 or e_links_high[e_i] < f_i + 1:
  *                 e_links_high[e_i] = f_i + 1
  *             i = i + 2             # <<<<<<<<<<<<<<
@@ -50621,7 +48472,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_v_i = (__pyx_v_i + 2);
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1479
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1479
  *             i = i + 2
  * 
  *         als = []             # <<<<<<<<<<<<<<
@@ -50629,11 +48480,11 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  *             al = (matching.arr[x]-f_sent_start,f_links_low[matching.arr[x]-f_sent_start])
  */
   __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __pyx_v_als = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1480
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1480
  * 
  *         als = []
  *         for x in range(matching.start,matching.end):             # <<<<<<<<<<<<<<
@@ -50644,7 +48495,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   for (__pyx_t_4 = __pyx_v_matching->start; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_x = __pyx_t_4;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1481
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1481
  *         als = []
  *         for x in range(matching.start,matching.end):
  *             al = (matching.arr[x]-f_sent_start,f_links_low[matching.arr[x]-f_sent_start])             # <<<<<<<<<<<<<<
@@ -50656,7 +48507,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_1 = PyInt_FromLong((__pyx_v_f_links_low[((__pyx_v_matching->arr[__pyx_v_x]) - __pyx_v_f_sent_start)])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_10);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_10));
     PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
@@ -50667,17 +48518,20 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_v_al = __pyx_t_10;
     __pyx_t_10 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1482
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1482
  *         for x in range(matching.start,matching.end):
  *             al = (matching.arr[x]-f_sent_start,f_links_low[matching.arr[x]-f_sent_start])
  *             als.append(al)             # <<<<<<<<<<<<<<
  *         # check all source-side alignment constraints
  *         met_constraints = 1
  */
+    if (unlikely(((PyObject *)__pyx_v_als) == Py_None)) {
+      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1482; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+    }
     __pyx_t_11 = PyList_Append(__pyx_v_als, ((PyObject *)__pyx_v_al)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1484
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1484
  *             als.append(al)
  *         # check all source-side alignment constraints
  *         met_constraints = 1             # <<<<<<<<<<<<<<
@@ -50686,7 +48540,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_met_constraints = 1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1485
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1485
  *         # check all source-side alignment constraints
  *         met_constraints = 1
  *         if self.require_aligned_terminal:             # <<<<<<<<<<<<<<
@@ -50695,7 +48549,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   if (__pyx_v_self->require_aligned_terminal) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1486
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1486
  *         met_constraints = 1
  *         if self.require_aligned_terminal:
  *             num_aligned_chunks = 0             # <<<<<<<<<<<<<<
@@ -50704,7 +48558,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
     __pyx_v_num_aligned_chunks = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1487
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1487
  *         if self.require_aligned_terminal:
  *             num_aligned_chunks = 0
  *             for i from 0 <= i < num_chunks:             # <<<<<<<<<<<<<<
@@ -50714,7 +48568,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_3 = __pyx_v_num_chunks;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1488
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1488
  *             num_aligned_chunks = 0
  *             for i from 0 <= i < num_chunks:
  *                 for j from 0 <= j < chunklen[i]:             # <<<<<<<<<<<<<<
@@ -50724,7 +48578,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_4 = (__pyx_v_chunklen[__pyx_v_i]);
       for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_4; __pyx_v_j++) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1489
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1489
  *             for i from 0 <= i < num_chunks:
  *                 for j from 0 <= j < chunklen[i]:
  *                     if f_links_low[matching.arr[matching.start+i]+j-f_sent_start] > -1:             # <<<<<<<<<<<<<<
@@ -50734,7 +48588,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_9 = ((__pyx_v_f_links_low[(((__pyx_v_matching->arr[(__pyx_v_matching->start + __pyx_v_i)]) + __pyx_v_j) - __pyx_v_f_sent_start)]) > -1);
         if (__pyx_t_9) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1490
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1490
  *                 for j from 0 <= j < chunklen[i]:
  *                     if f_links_low[matching.arr[matching.start+i]+j-f_sent_start] > -1:
  *                         num_aligned_chunks = num_aligned_chunks + 1             # <<<<<<<<<<<<<<
@@ -50743,7 +48597,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
           __pyx_v_num_aligned_chunks = (__pyx_v_num_aligned_chunks + 1);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1491
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1491
  *                     if f_links_low[matching.arr[matching.start+i]+j-f_sent_start] > -1:
  *                         num_aligned_chunks = num_aligned_chunks + 1
  *                         break             # <<<<<<<<<<<<<<
@@ -50758,7 +48612,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_L24_break:;
     }
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1492
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1492
  *                         num_aligned_chunks = num_aligned_chunks + 1
  *                         break
  *             if num_aligned_chunks == 0:             # <<<<<<<<<<<<<<
@@ -50768,7 +48622,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_9 = (__pyx_v_num_aligned_chunks == 0);
     if (__pyx_t_9) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1493
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1493
  *                         break
  *             if num_aligned_chunks == 0:
  *                 reason_for_failure = "No aligned terminals"             # <<<<<<<<<<<<<<
@@ -50779,7 +48633,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __Pyx_DECREF(__pyx_v_reason_for_failure);
       __pyx_v_reason_for_failure = ((PyObject *)__pyx_kp_s_126);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1494
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1494
  *             if num_aligned_chunks == 0:
  *                 reason_for_failure = "No aligned terminals"
  *                 met_constraints = 0             # <<<<<<<<<<<<<<
@@ -50791,7 +48645,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     __pyx_L26:;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1495
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1495
  *                 reason_for_failure = "No aligned terminals"
  *                 met_constraints = 0
  *             if self.require_aligned_chunks and num_aligned_chunks < num_chunks:             # <<<<<<<<<<<<<<
@@ -50806,7 +48660,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     if (__pyx_t_7) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1496
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1496
  *                 met_constraints = 0
  *             if self.require_aligned_chunks and num_aligned_chunks < num_chunks:
  *                 reason_for_failure = "Unaligned chunk"             # <<<<<<<<<<<<<<
@@ -50817,7 +48671,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __Pyx_DECREF(__pyx_v_reason_for_failure);
       __pyx_v_reason_for_failure = ((PyObject *)__pyx_kp_s_127);
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1497
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1497
  *             if self.require_aligned_chunks and num_aligned_chunks < num_chunks:
  *                 reason_for_failure = "Unaligned chunk"
  *                 met_constraints = 0             # <<<<<<<<<<<<<<
@@ -50832,7 +48686,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   }
   __pyx_L20:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1499
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1499
  *                 met_constraints = 0
  * 
  *         if met_constraints and self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -50846,7 +48700,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   }
   if (__pyx_t_7) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1501
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1501
  *         if met_constraints and self.tight_phrases:
  *             # outside edge constraints are checked later
  *             for i from 0 <= i < num_chunks-1:             # <<<<<<<<<<<<<<
@@ -50856,7 +48710,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_12 = (__pyx_v_num_chunks - 1);
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_12; __pyx_v_i++) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1502
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1502
  *             # outside edge constraints are checked later
  *             for i from 0 <= i < num_chunks-1:
  *                 if f_links_low[matching.arr[matching.start+i]+chunklen[i]-f_sent_start] == -1:             # <<<<<<<<<<<<<<
@@ -50866,7 +48720,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_7 = ((__pyx_v_f_links_low[(((__pyx_v_matching->arr[(__pyx_v_matching->start + __pyx_v_i)]) + (__pyx_v_chunklen[__pyx_v_i])) - __pyx_v_f_sent_start)]) == -1);
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1503
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1503
  *             for i from 0 <= i < num_chunks-1:
  *                 if f_links_low[matching.arr[matching.start+i]+chunklen[i]-f_sent_start] == -1:
  *                     reason_for_failure = "Gaps are not tight phrases"             # <<<<<<<<<<<<<<
@@ -50877,7 +48731,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __Pyx_DECREF(__pyx_v_reason_for_failure);
         __pyx_v_reason_for_failure = ((PyObject *)__pyx_kp_s_128);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1504
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1504
  *                 if f_links_low[matching.arr[matching.start+i]+chunklen[i]-f_sent_start] == -1:
  *                     reason_for_failure = "Gaps are not tight phrases"
  *                     met_constraints = 0             # <<<<<<<<<<<<<<
@@ -50886,7 +48740,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_met_constraints = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1505
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1505
  *                     reason_for_failure = "Gaps are not tight phrases"
  *                     met_constraints = 0
  *                     break             # <<<<<<<<<<<<<<
@@ -50898,7 +48752,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       }
       __pyx_L31:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1506
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1506
  *                     met_constraints = 0
  *                     break
  *                 if f_links_low[matching.arr[matching.start+i+1]-1-f_sent_start] == -1:             # <<<<<<<<<<<<<<
@@ -50908,7 +48762,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_7 = ((__pyx_v_f_links_low[(((__pyx_v_matching->arr[((__pyx_v_matching->start + __pyx_v_i) + 1)]) - 1) - __pyx_v_f_sent_start)]) == -1);
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1507
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1507
  *                     break
  *                 if f_links_low[matching.arr[matching.start+i+1]-1-f_sent_start] == -1:
  *                     reason_for_failure = "Gaps are not tight phrases"             # <<<<<<<<<<<<<<
@@ -50919,7 +48773,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __Pyx_DECREF(__pyx_v_reason_for_failure);
         __pyx_v_reason_for_failure = ((PyObject *)__pyx_kp_s_128);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1508
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1508
  *                 if f_links_low[matching.arr[matching.start+i+1]-1-f_sent_start] == -1:
  *                     reason_for_failure = "Gaps are not tight phrases"
  *                     met_constraints = 0             # <<<<<<<<<<<<<<
@@ -50928,7 +48782,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_met_constraints = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1509
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1509
  *                     reason_for_failure = "Gaps are not tight phrases"
  *                     met_constraints = 0
  *                     break             # <<<<<<<<<<<<<<
@@ -50945,7 +48799,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   }
   __pyx_L28:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1511
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1511
  *                     break
  * 
  *         f_low = matching.arr[matching.start] - f_sent_start             # <<<<<<<<<<<<<<
@@ -50954,7 +48808,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_low = ((__pyx_v_matching->arr[__pyx_v_matching->start]) - __pyx_v_f_sent_start);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1512
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1512
  * 
  *         f_low = matching.arr[matching.start] - f_sent_start
  *         f_high = matching.arr[matching.start + matching.size - 1] + chunklen[num_chunks-1] - f_sent_start             # <<<<<<<<<<<<<<
@@ -50963,7 +48817,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   __pyx_v_f_high = (((__pyx_v_matching->arr[((__pyx_v_matching->start + __pyx_v_matching->size) - 1)]) + (__pyx_v_chunklen[(__pyx_v_num_chunks - 1)])) - __pyx_v_f_sent_start);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1513
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1513
  *         f_low = matching.arr[matching.start] - f_sent_start
  *         f_high = matching.arr[matching.start + matching.size - 1] + chunklen[num_chunks-1] - f_sent_start
  *         if met_constraints:             # <<<<<<<<<<<<<<
@@ -50972,7 +48826,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   if (__pyx_v_met_constraints) {
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1515
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1515
  *         if met_constraints:
  * 
  *             if self.find_fixpoint(f_low, f_high, f_links_low, f_links_high, e_links_low, e_links_high,             # <<<<<<<<<<<<<<
@@ -50982,7 +48836,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __pyx_t_10 = PyInt_FromLong(__pyx_v_f_high); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_10);
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1519
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1519
  *                                 self.train_max_initial_size, self.train_max_initial_size,
  *                                 self.train_min_gap_size, 0,
  *                                 self.max_nonterminals - num_chunks + 1, 1, 1, 0, 0):             # <<<<<<<<<<<<<<
@@ -50993,7 +48847,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     if (__pyx_t_3) {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1520
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1520
  *                                 self.train_min_gap_size, 0,
  *                                 self.max_nonterminals - num_chunks + 1, 1, 1, 0, 0):
  *                 gap_error = 0             # <<<<<<<<<<<<<<
@@ -51002,7 +48856,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
       __pyx_v_gap_error = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1521
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1521
  *                                 self.max_nonterminals - num_chunks + 1, 1, 1, 0, 0):
  *                 gap_error = 0
  *                 num_gaps = 0             # <<<<<<<<<<<<<<
@@ -51011,7 +48865,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
       __pyx_v_num_gaps = 0;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1523
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1523
  *                 num_gaps = 0
  * 
  *                 if f_back_low < f_low:             # <<<<<<<<<<<<<<
@@ -51021,7 +48875,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_7 = (__pyx_v_f_back_low < __pyx_v_f_low);
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1524
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1524
  * 
  *                 if f_back_low < f_low:
  *                     f_gap_low[0] = f_back_low             # <<<<<<<<<<<<<<
@@ -51030,7 +48884,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         (__pyx_v_f_gap_low[0]) = __pyx_v_f_back_low;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1525
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1525
  *                 if f_back_low < f_low:
  *                     f_gap_low[0] = f_back_low
  *                     f_gap_high[0] = f_low             # <<<<<<<<<<<<<<
@@ -51039,7 +48893,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         (__pyx_v_f_gap_high[0]) = __pyx_v_f_low;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1526
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1526
  *                     f_gap_low[0] = f_back_low
  *                     f_gap_high[0] = f_low
  *                     num_gaps = 1             # <<<<<<<<<<<<<<
@@ -51048,7 +48902,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_num_gaps = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1527
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1527
  *                     f_gap_high[0] = f_low
  *                     num_gaps = 1
  *                     gap_start = 0             # <<<<<<<<<<<<<<
@@ -51057,7 +48911,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_gap_start = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1528
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1528
  *                     num_gaps = 1
  *                     gap_start = 0
  *                     phrase_len = phrase_len+1             # <<<<<<<<<<<<<<
@@ -51066,7 +48920,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_phrase_len = (__pyx_v_phrase_len + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1529
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1529
  *                     gap_start = 0
  *                     phrase_len = phrase_len+1
  *                     if phrase_len > self.max_length:             # <<<<<<<<<<<<<<
@@ -51076,7 +48930,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_7 = (__pyx_v_phrase_len > __pyx_v_self->max_length);
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1530
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1530
  *                     phrase_len = phrase_len+1
  *                     if phrase_len > self.max_length:
  *                         gap_error = 1             # <<<<<<<<<<<<<<
@@ -51088,7 +48942,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         __pyx_L36:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1531
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1531
  *                     if phrase_len > self.max_length:
  *                         gap_error = 1
  *                     if self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -51097,7 +48951,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         if (__pyx_v_self->tight_phrases) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1532
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1532
  *                         gap_error = 1
  *                     if self.tight_phrases:
  *                         if f_links_low[f_back_low] == -1 or f_links_low[f_low-1] == -1:             # <<<<<<<<<<<<<<
@@ -51113,7 +48967,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           if (__pyx_t_8) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1533
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1533
  *                     if self.tight_phrases:
  *                         if f_links_low[f_back_low] == -1 or f_links_low[f_low-1] == -1:
  *                             gap_error = 1             # <<<<<<<<<<<<<<
@@ -51122,7 +48976,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_gap_error = 1;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1534
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1534
  *                         if f_links_low[f_back_low] == -1 or f_links_low[f_low-1] == -1:
  *                             gap_error = 1
  *                             reason_for_failure = "Inside edges of preceding subphrase are not tight"             # <<<<<<<<<<<<<<
@@ -51142,7 +48996,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1536
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1536
  *                             reason_for_failure = "Inside edges of preceding subphrase are not tight"
  *                 else:
  *                     gap_start = 1             # <<<<<<<<<<<<<<
@@ -51151,7 +49005,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_gap_start = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1537
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1537
  *                 else:
  *                     gap_start = 1
  *                     if self.tight_phrases and f_links_low[f_low] == -1:             # <<<<<<<<<<<<<<
@@ -51166,7 +49020,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1540
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1540
  *                         # this is not a hard error.    we can't extract this phrase
  *                         # but we still might be able to extract a superphrase
  *                         met_constraints = 0             # <<<<<<<<<<<<<<
@@ -51180,7 +49034,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       }
       __pyx_L35:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1542
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1542
  *                         met_constraints = 0
  * 
  *                 for i from 0 <= i < matching.size - 1:             # <<<<<<<<<<<<<<
@@ -51190,7 +49044,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_12 = (__pyx_v_matching->size - 1);
       for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_12; __pyx_v_i++) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1543
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1543
  * 
  *                 for i from 0 <= i < matching.size - 1:
  *                     f_gap_low[1+i] = matching.arr[matching.start+i] + chunklen[i] - f_sent_start             # <<<<<<<<<<<<<<
@@ -51199,7 +49053,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         (__pyx_v_f_gap_low[(1 + __pyx_v_i)]) = (((__pyx_v_matching->arr[(__pyx_v_matching->start + __pyx_v_i)]) + (__pyx_v_chunklen[__pyx_v_i])) - __pyx_v_f_sent_start);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1544
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1544
  *                 for i from 0 <= i < matching.size - 1:
  *                     f_gap_low[1+i] = matching.arr[matching.start+i] + chunklen[i] - f_sent_start
  *                     f_gap_high[1+i] = matching.arr[matching.start+i+1] - f_sent_start             # <<<<<<<<<<<<<<
@@ -51208,7 +49062,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         (__pyx_v_f_gap_high[(1 + __pyx_v_i)]) = ((__pyx_v_matching->arr[((__pyx_v_matching->start + __pyx_v_i) + 1)]) - __pyx_v_f_sent_start);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1545
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1545
  *                     f_gap_low[1+i] = matching.arr[matching.start+i] + chunklen[i] - f_sent_start
  *                     f_gap_high[1+i] = matching.arr[matching.start+i+1] - f_sent_start
  *                     num_gaps = num_gaps + 1             # <<<<<<<<<<<<<<
@@ -51218,7 +49072,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_v_num_gaps = (__pyx_v_num_gaps + 1);
       }
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1547
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1547
  *                     num_gaps = num_gaps + 1
  * 
  *                 if f_high < f_back_high:             # <<<<<<<<<<<<<<
@@ -51228,7 +49082,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_7 = (__pyx_v_f_high < __pyx_v_f_back_high);
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1548
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1548
  * 
  *                 if f_high < f_back_high:
  *                     f_gap_low[gap_start+num_gaps] = f_high             # <<<<<<<<<<<<<<
@@ -51237,7 +49091,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         (__pyx_v_f_gap_low[(__pyx_v_gap_start + __pyx_v_num_gaps)]) = __pyx_v_f_high;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1549
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1549
  *                 if f_high < f_back_high:
  *                     f_gap_low[gap_start+num_gaps] = f_high
  *                     f_gap_high[gap_start+num_gaps] = f_back_high             # <<<<<<<<<<<<<<
@@ -51246,7 +49100,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         (__pyx_v_f_gap_high[(__pyx_v_gap_start + __pyx_v_num_gaps)]) = __pyx_v_f_back_high;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1550
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1550
  *                     f_gap_low[gap_start+num_gaps] = f_high
  *                     f_gap_high[gap_start+num_gaps] = f_back_high
  *                     num_gaps = num_gaps + 1             # <<<<<<<<<<<<<<
@@ -51255,7 +49109,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_num_gaps = (__pyx_v_num_gaps + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1551
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1551
  *                     f_gap_high[gap_start+num_gaps] = f_back_high
  *                     num_gaps = num_gaps + 1
  *                     phrase_len = phrase_len+1             # <<<<<<<<<<<<<<
@@ -51264,7 +49118,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_phrase_len = (__pyx_v_phrase_len + 1);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1552
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1552
  *                     num_gaps = num_gaps + 1
  *                     phrase_len = phrase_len+1
  *                     if phrase_len > self.max_length:             # <<<<<<<<<<<<<<
@@ -51274,7 +49128,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_7 = (__pyx_v_phrase_len > __pyx_v_self->max_length);
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1553
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1553
  *                     phrase_len = phrase_len+1
  *                     if phrase_len > self.max_length:
  *                         gap_error = 1             # <<<<<<<<<<<<<<
@@ -51286,7 +49140,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         __pyx_L43:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1554
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1554
  *                     if phrase_len > self.max_length:
  *                         gap_error = 1
  *                     if self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -51295,7 +49149,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         if (__pyx_v_self->tight_phrases) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1555
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1555
  *                         gap_error = 1
  *                     if self.tight_phrases:
  *                         if f_links_low[f_back_high-1] == -1 or f_links_low[f_high] == -1:             # <<<<<<<<<<<<<<
@@ -51311,7 +49165,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           if (__pyx_t_9) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1556
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1556
  *                     if self.tight_phrases:
  *                         if f_links_low[f_back_high-1] == -1 or f_links_low[f_high] == -1:
  *                             gap_error = 1             # <<<<<<<<<<<<<<
@@ -51320,7 +49174,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_gap_error = 1;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1557
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1557
  *                         if f_links_low[f_back_high-1] == -1 or f_links_low[f_high] == -1:
  *                             gap_error = 1
  *                             reason_for_failure = "Inside edges of following subphrase are not tight"             # <<<<<<<<<<<<<<
@@ -51340,7 +49194,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       }
       /*else*/ {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1559
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1559
  *                             reason_for_failure = "Inside edges of following subphrase are not tight"
  *                 else:
  *                     if self.tight_phrases and f_links_low[f_high-1] == -1:             # <<<<<<<<<<<<<<
@@ -51355,7 +49209,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1560
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1560
  *                 else:
  *                     if self.tight_phrases and f_links_low[f_high-1] == -1:
  *                         met_constraints = 0             # <<<<<<<<<<<<<<
@@ -51369,7 +49223,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       }
       __pyx_L42:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1562
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1562
  *                         met_constraints = 0
  * 
  *                 if gap_error == 0:             # <<<<<<<<<<<<<<
@@ -51379,7 +49233,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_7 = (__pyx_v_gap_error == 0);
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1563
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1563
  * 
  *                 if gap_error == 0:
  *                     e_word_count = e_high - e_low             # <<<<<<<<<<<<<<
@@ -51388,7 +49242,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_e_word_count = (__pyx_v_e_high - __pyx_v_e_low);
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1564
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1564
  *                 if gap_error == 0:
  *                     e_word_count = e_high - e_low
  *                     for i from 0 <= i < num_gaps: # check integrity of subphrases             # <<<<<<<<<<<<<<
@@ -51398,7 +49252,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_3 = __pyx_v_num_gaps;
         for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1565
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1565
  *                     e_word_count = e_high - e_low
  *                     for i from 0 <= i < num_gaps: # check integrity of subphrases
  *                         if self.find_fixpoint(f_gap_low[gap_start+i], f_gap_high[gap_start+i],             # <<<<<<<<<<<<<<
@@ -51408,7 +49262,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_10 = PyInt_FromLong((__pyx_v_f_gap_high[(__pyx_v_gap_start + __pyx_v_i)])); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1570
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1570
  *                                             f_gap_low+gap_start+i, f_gap_high+gap_start+i,
  *                                             f_sent_len, e_sent_len,
  *                                             self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -51419,7 +49273,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           if (__pyx_t_7) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1572
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1572
  *                                             self.train_max_initial_size, self.train_max_initial_size,
  *                                             0, 0, 0, 0, 0, 0, 0) == 0:
  *                             gap_error = 1             # <<<<<<<<<<<<<<
@@ -51428,7 +49282,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_gap_error = 1;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1573
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1573
  *                                             0, 0, 0, 0, 0, 0, 0) == 0:
  *                             gap_error = 1
  *                             reason_for_failure = "Subphrase [%d, %d] failed integrity check" % (f_gap_low[gap_start+i], f_gap_high[gap_start+i])             # <<<<<<<<<<<<<<
@@ -51440,7 +49294,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_1 = PyInt_FromLong((__pyx_v_f_gap_high[(__pyx_v_gap_start + __pyx_v_i)])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_1);
             __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_2);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_2));
             PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10);
             __Pyx_GIVEREF(__pyx_t_10);
             PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
@@ -51454,7 +49308,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_v_reason_for_failure = ((PyObject *)__pyx_t_1);
             __pyx_t_1 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1574
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1574
  *                             gap_error = 1
  *                             reason_for_failure = "Subphrase [%d, %d] failed integrity check" % (f_gap_low[gap_start+i], f_gap_high[gap_start+i])
  *                             break             # <<<<<<<<<<<<<<
@@ -51471,7 +49325,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       }
       __pyx_L47:;
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1576
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1576
  *                             break
  * 
  *                 if gap_error == 0:             # <<<<<<<<<<<<<<
@@ -51481,7 +49335,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
       __pyx_t_7 = (__pyx_v_gap_error == 0);
       if (__pyx_t_7) {
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1577
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1577
  * 
  *                 if gap_error == 0:
  *                     i = 1             # <<<<<<<<<<<<<<
@@ -51490,7 +49344,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         __pyx_v_i = 1;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1578
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1578
  *                 if gap_error == 0:
  *                     i = 1
  *                     self.findexes.reset()             # <<<<<<<<<<<<<<
@@ -51504,7 +49358,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1579
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1579
  *                     i = 1
  *                     self.findexes.reset()
  *                     if f_back_low < f_low:             # <<<<<<<<<<<<<<
@@ -51514,7 +49368,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_7 = (__pyx_v_f_back_low < __pyx_v_f_low);
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1580
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1580
  *                     self.findexes.reset()
  *                     if f_back_low < f_low:
  *                         fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -51523,7 +49377,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
           ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1581
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1581
  *                     if f_back_low < f_low:
  *                         fphr_arr._append(sym_setindex(self.category, i))
  *                         i = i+1             # <<<<<<<<<<<<<<
@@ -51532,7 +49386,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
           __pyx_v_i = (__pyx_v_i + 1);
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1582
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1582
  *                         fphr_arr._append(sym_setindex(self.category, i))
  *                         i = i+1
  *                         self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -51549,7 +49403,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         __pyx_L52:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1583
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1583
  *                         i = i+1
  *                         self.findexes.append(sym_setindex(self.category, i))
  *                     self.findexes.extend(self.findexes1)             # <<<<<<<<<<<<<<
@@ -51559,7 +49413,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->findexes), __pyx_n_s__extend); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_2));
         __Pyx_INCREF(((PyObject *)__pyx_v_self->findexes1));
         PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self->findexes1));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->findexes1));
@@ -51569,7 +49423,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1584
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1584
  *                         self.findexes.append(sym_setindex(self.category, i))
  *                     self.findexes.extend(self.findexes1)
  *                     for j from 0 <= j < phrase.n:             # <<<<<<<<<<<<<<
@@ -51579,7 +49433,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_3 = __pyx_v_phrase->n;
         for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1585
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1585
  *                     self.findexes.extend(self.findexes1)
  *                     for j from 0 <= j < phrase.n:
  *                         if sym_isvar(phrase.syms[j]):             # <<<<<<<<<<<<<<
@@ -51589,7 +49443,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_4 = __pyx_f_3_sa_sym_isvar((__pyx_v_phrase->syms[__pyx_v_j]));
           if (__pyx_t_4) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1586
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1586
  *                     for j from 0 <= j < phrase.n:
  *                         if sym_isvar(phrase.syms[j]):
  *                             fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -51598,7 +49452,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1587
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1587
  *                         if sym_isvar(phrase.syms[j]):
  *                             fphr_arr._append(sym_setindex(self.category, i))
  *                             i = i + 1             # <<<<<<<<<<<<<<
@@ -51610,7 +49464,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           /*else*/ {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1589
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1589
  *                             i = i + 1
  *                         else:
  *                             fphr_arr._append(phrase.syms[j])             # <<<<<<<<<<<<<<
@@ -51622,7 +49476,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_L55:;
         }
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1590
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1590
  *                         else:
  *                             fphr_arr._append(phrase.syms[j])
  *                     if f_back_high > f_high:             # <<<<<<<<<<<<<<
@@ -51632,7 +49486,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_7 = (__pyx_v_f_back_high > __pyx_v_f_high);
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1591
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1591
  *                             fphr_arr._append(phrase.syms[j])
  *                     if f_back_high > f_high:
  *                         fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -51641,7 +49495,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
           ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1592
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1592
  *                     if f_back_high > f_high:
  *                         fphr_arr._append(sym_setindex(self.category, i))
  *                         self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -51658,7 +49512,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         __pyx_L56:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1594
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1594
  *                         self.findexes.append(sym_setindex(self.category, i))
  * 
  *                     fphr = Phrase(fphr_arr)             # <<<<<<<<<<<<<<
@@ -51666,7 +49520,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  *                         phrase_list = self.extract_phrases(e_low, e_high, e_gap_low + gap_start, e_gap_high + gap_start, e_links_low, num_gaps,
  */
         __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_GOTREF(((PyObject *)__pyx_t_2));
         __Pyx_INCREF(((PyObject *)__pyx_v_fphr_arr));
         PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_fphr_arr));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr_arr));
@@ -51676,7 +49530,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_v_fphr = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_10);
         __pyx_t_10 = 0;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1595
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1595
  * 
  *                     fphr = Phrase(fphr_arr)
  *                     if met_constraints:             # <<<<<<<<<<<<<<
@@ -51685,7 +49539,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
         if (__pyx_v_met_constraints) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1598
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1598
  *                         phrase_list = self.extract_phrases(e_low, e_high, e_gap_low + gap_start, e_gap_high + gap_start, e_links_low, num_gaps,
  *                                             f_back_low, f_back_high, f_gap_low + gap_start, f_gap_high + gap_start, f_links_low,
  *                                             matching.sent_id, e_sent_len, e_sent_start)             # <<<<<<<<<<<<<<
@@ -51697,7 +49551,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_v_phrase_list = __pyx_t_10;
           __pyx_t_10 = 0;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1599
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1599
  *                                             f_back_low, f_back_high, f_gap_low + gap_start, f_gap_high + gap_start, f_links_low,
  *                                             matching.sent_id, e_sent_len, e_sent_start)
  *                         if len(phrase_list) > 0:             # <<<<<<<<<<<<<<
@@ -51708,7 +49562,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_7 = (__pyx_t_13 > 0);
           if (__pyx_t_7) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1600
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1600
  *                                             matching.sent_id, e_sent_len, e_sent_start)
  *                         if len(phrase_list) > 0:
  *                             pair_count = 1.0 / len(phrase_list)             # <<<<<<<<<<<<<<
@@ -51725,7 +49579,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           /*else*/ {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1602
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1602
  *                             pair_count = 1.0 / len(phrase_list)
  *                         else:
  *                             pair_count = 0             # <<<<<<<<<<<<<<
@@ -51734,7 +49588,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_pair_count = 0.0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1603
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1603
  *                         else:
  *                             pair_count = 0
  *                             reason_for_failure = "Didn't extract anything from [%d, %d] -> [%d, %d]" % (f_back_low, f_back_high, e_low, e_high)             # <<<<<<<<<<<<<<
@@ -51750,7 +49604,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_14 = PyInt_FromLong(__pyx_v_e_high); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_14);
             __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_15);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_15));
             PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_10);
             __Pyx_GIVEREF(__pyx_t_10);
             PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);
@@ -51772,7 +49626,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           __pyx_L58:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1604
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1604
  *                             pair_count = 0
  *                             reason_for_failure = "Didn't extract anything from [%d, %d] -> [%d, %d]" % (f_back_low, f_back_high, e_low, e_high)
  *                         for (phrase2,eindexes) in phrase_list:             # <<<<<<<<<<<<<<
@@ -51788,20 +49642,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_16 = Py_TYPE(__pyx_t_14)->tp_iternext;
           }
           for (;;) {
-            if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_14)) {
+            if (PyList_CheckExact(__pyx_t_14)) {
               if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_14)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_15 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #else
-              __pyx_t_15 = PySequence_ITEM(__pyx_t_14, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
-            } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_14)) {
+              __pyx_t_15 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++;
+            } else if (PyTuple_CheckExact(__pyx_t_14)) {
               if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_14)) break;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #else
-              __pyx_t_15 = PySequence_ITEM(__pyx_t_14, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
+              __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++;
             } else {
               __pyx_t_15 = __pyx_t_16(__pyx_t_14);
               if (unlikely(!__pyx_t_15)) {
@@ -51815,33 +49661,27 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if ((likely(PyTuple_CheckExact(__pyx_t_15))) || (PyList_CheckExact(__pyx_t_15))) {
               PyObject* sequence = __pyx_t_15;
-              #if CYTHON_COMPILING_IN_CPYTHON
-              Py_ssize_t size = Py_SIZE(sequence);
-              #else
-              Py_ssize_t size = PySequence_Size(sequence);
-              #endif
-              if (unlikely(size != 2)) {
-                if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              }
-              #if CYTHON_COMPILING_IN_CPYTHON
               if (likely(PyTuple_CheckExact(sequence))) {
+                if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                  if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                  else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                }
                 __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
                 __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
               } else {
+                if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                  if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                  else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                  {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                }
                 __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
                 __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
               }
               __Pyx_INCREF(__pyx_t_1);
               __Pyx_INCREF(__pyx_t_2);
-              #else
-              __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              #endif
               __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-            } else
-            {
+            } else {
               Py_ssize_t index = -1;
               __pyx_t_10 = PyObject_GetIter(__pyx_t_15); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_10);
@@ -51852,13 +49692,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               index = 1; __pyx_t_2 = __pyx_t_17(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L61_unpacking_failed;
               __Pyx_GOTREF(__pyx_t_2);
               if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __pyx_t_17 = NULL;
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
               goto __pyx_L62_unpacking_done;
               __pyx_L61_unpacking_failed:;
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              __pyx_t_17 = NULL;
-              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+              if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+              if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
               {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __pyx_L62_unpacking_done:;
             }
@@ -51869,7 +49708,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_v_eindexes = __pyx_t_2;
             __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1605
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1605
  *                             reason_for_failure = "Didn't extract anything from [%d, %d] -> [%d, %d]" % (f_back_low, f_back_high, e_low, e_high)
  *                         for (phrase2,eindexes) in phrase_list:
  *                             als1 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)             # <<<<<<<<<<<<<<
@@ -51885,7 +49724,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_v_als1 = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
             __pyx_t_2 = 0;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1606
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1606
  *                         for (phrase2,eindexes) in phrase_list:
  *                             als1 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)
  *                             extracts.append((fphr, phrase2, pair_count, tuple(als1)))             # <<<<<<<<<<<<<<
@@ -51895,7 +49734,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_2 = PyFloat_FromDouble(__pyx_v_pair_count); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_2);
             __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_15);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_15));
             __Pyx_INCREF(((PyObject *)__pyx_v_als1));
             PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_als1));
             __Pyx_GIVEREF(((PyObject *)__pyx_v_als1));
@@ -51903,7 +49742,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(((PyObject *)__pyx_t_15)); __pyx_t_15 = 0;
             __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            __Pyx_GOTREF(__pyx_t_15);
+            __Pyx_GOTREF(((PyObject *)__pyx_t_15));
             __Pyx_INCREF(((PyObject *)__pyx_v_fphr));
             PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_fphr));
             __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr));
@@ -51926,7 +49765,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         __pyx_L57:;
 
-        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1608
+        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1608
  *                             extracts.append((fphr, phrase2, pair_count, tuple(als1)))
  * 
  *                     if (num_gaps < self.max_nonterminals and             # <<<<<<<<<<<<<<
@@ -51936,7 +49775,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         __pyx_t_7 = (__pyx_v_num_gaps < __pyx_v_self->max_nonterminals);
         if (__pyx_t_7) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1609
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1609
  * 
  *                     if (num_gaps < self.max_nonterminals and
  *                         phrase_len < self.max_length and             # <<<<<<<<<<<<<<
@@ -51946,7 +49785,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_9 = (__pyx_v_phrase_len < __pyx_v_self->max_length);
           if (__pyx_t_9) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1610
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1610
  *                     if (num_gaps < self.max_nonterminals and
  *                         phrase_len < self.max_length and
  *                         f_back_high - f_back_low + self.train_min_gap_size <= self.train_max_initial_size):             # <<<<<<<<<<<<<<
@@ -51964,7 +49803,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
         }
         if (__pyx_t_9) {
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1611
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1611
  *                         phrase_len < self.max_length and
  *                         f_back_high - f_back_low + self.train_min_gap_size <= self.train_max_initial_size):
  *                         if (f_back_low == f_low and             # <<<<<<<<<<<<<<
@@ -51974,7 +49813,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_9 = (__pyx_v_f_back_low == __pyx_v_f_low);
           if (__pyx_t_9) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1612
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1612
  *                         f_back_high - f_back_low + self.train_min_gap_size <= self.train_max_initial_size):
  *                         if (f_back_low == f_low and
  *                                 f_low >= self.train_min_gap_size and             # <<<<<<<<<<<<<<
@@ -51984,7 +49823,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_7 = (__pyx_v_f_low >= __pyx_v_self->train_min_gap_size);
             if (__pyx_t_7) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1613
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1613
  *                         if (f_back_low == f_low and
  *                                 f_low >= self.train_min_gap_size and
  *                                 ((not self.tight_phrases) or (f_links_low[f_low-1] != -1 and f_links_low[f_back_high-1] != -1))):             # <<<<<<<<<<<<<<
@@ -52014,7 +49853,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           if (__pyx_t_7) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1614
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1614
  *                                 f_low >= self.train_min_gap_size and
  *                                 ((not self.tight_phrases) or (f_links_low[f_low-1] != -1 and f_links_low[f_back_high-1] != -1))):
  *                             f_x_low = f_low-self.train_min_gap_size             # <<<<<<<<<<<<<<
@@ -52023,7 +49862,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_f_x_low = (__pyx_v_f_low - __pyx_v_self->train_min_gap_size);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1615
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1615
  *                                 ((not self.tight_phrases) or (f_links_low[f_low-1] != -1 and f_links_low[f_back_high-1] != -1))):
  *                             f_x_low = f_low-self.train_min_gap_size
  *                             met_constraints = 1             # <<<<<<<<<<<<<<
@@ -52032,7 +49871,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_met_constraints = 1;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1616
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1616
  *                             f_x_low = f_low-self.train_min_gap_size
  *                             met_constraints = 1
  *                             if self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -52041,7 +49880,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_self->tight_phrases) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1617
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1617
  *                             met_constraints = 1
  *                             if self.tight_phrases:
  *                                 while f_x_low >= 0 and f_links_low[f_x_low] == -1:             # <<<<<<<<<<<<<<
@@ -52058,7 +49897,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (!__pyx_t_18) break;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1618
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1618
  *                             if self.tight_phrases:
  *                                 while f_x_low >= 0 and f_links_low[f_x_low] == -1:
  *                                     f_x_low = f_x_low - 1             # <<<<<<<<<<<<<<
@@ -52071,7 +49910,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L65:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1619
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1619
  *                                 while f_x_low >= 0 and f_links_low[f_x_low] == -1:
  *                                     f_x_low = f_x_low - 1
  *                             if f_x_low < 0 or f_back_high - f_x_low > self.train_max_initial_size:             # <<<<<<<<<<<<<<
@@ -52087,7 +49926,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if (__pyx_t_9) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1620
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1620
  *                                     f_x_low = f_x_low - 1
  *                             if f_x_low < 0 or f_back_high - f_x_low > self.train_max_initial_size:
  *                                 met_constraints = 0             # <<<<<<<<<<<<<<
@@ -52099,7 +49938,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L68:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1622
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1622
  *                                 met_constraints = 0
  * 
  *                             if (met_constraints and             # <<<<<<<<<<<<<<
@@ -52108,7 +49947,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_met_constraints) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1623
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1623
  * 
  *                             if (met_constraints and
  *                                 self.find_fixpoint(f_x_low, f_back_high,             # <<<<<<<<<<<<<<
@@ -52118,7 +49957,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_14 = PyInt_FromLong(__pyx_v_f_back_high); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_14);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1627
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1627
  *                                             e_low, e_high, &e_x_low, &e_x_high, &f_x_low, &f_x_high,
  *                                             f_sent_len, e_sent_len,
  *                                             self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -52128,7 +49967,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               if (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->find_fixpoint(__pyx_v_self, __pyx_v_f_x_low, __pyx_t_14, __pyx_v_f_links_low, __pyx_v_f_links_high, __pyx_v_e_links_low, __pyx_v_e_links_high, __pyx_v_e_low, __pyx_v_e_high, (&__pyx_v_e_x_low), (&__pyx_v_e_x_high), (&__pyx_v_f_x_low), (&__pyx_v_f_x_high), __pyx_v_f_sent_len, __pyx_v_e_sent_len, __pyx_v_self->train_max_initial_size, __pyx_v_self->train_max_initial_size, 1, 1, 1, 1, 0, 1, 0)) {
                 __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1629
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1629
  *                                             self.train_max_initial_size, self.train_max_initial_size,
  *                                             1, 1, 1, 1, 0, 1, 0) and
  *                                 ((not self.tight_phrases) or f_links_low[f_x_low] != -1) and             # <<<<<<<<<<<<<<
@@ -52144,7 +49983,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (__pyx_t_7) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1630
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1630
  *                                             1, 1, 1, 1, 0, 1, 0) and
  *                                 ((not self.tight_phrases) or f_links_low[f_x_low] != -1) and
  *                                 self.find_fixpoint(f_x_low, f_low,    # check integrity of new subphrase             # <<<<<<<<<<<<<<
@@ -52154,7 +49993,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   __pyx_t_1 = PyInt_FromLong(__pyx_v_f_low); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_1);
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1634
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1634
  *                                             -1, -1, e_gap_low, e_gap_high, f_gap_low, f_gap_high,
  *                                             f_sent_len, e_sent_len,
  *                                             self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -52177,7 +50016,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if (__pyx_t_9) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1636
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1636
  *                                             self.train_max_initial_size, self.train_max_initial_size,
  *                                             0, 0, 0, 0, 0, 0, 0)):
  *                                 fphr_arr._clear()             # <<<<<<<<<<<<<<
@@ -52186,7 +50025,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_clear(__pyx_v_fphr_arr);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1637
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1637
  *                                             0, 0, 0, 0, 0, 0, 0)):
  *                                 fphr_arr._clear()
  *                                 i = 1             # <<<<<<<<<<<<<<
@@ -52195,7 +50034,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               __pyx_v_i = 1;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1638
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1638
  *                                 fphr_arr._clear()
  *                                 i = 1
  *                                 self.findexes.reset()             # <<<<<<<<<<<<<<
@@ -52209,7 +50048,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1639
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1639
  *                                 i = 1
  *                                 self.findexes.reset()
  *                                 self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52223,7 +50062,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1640
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1640
  *                                 self.findexes.reset()
  *                                 self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52232,7 +50071,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1641
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1641
  *                                 self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 i = i+1             # <<<<<<<<<<<<<<
@@ -52241,7 +50080,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               __pyx_v_i = (__pyx_v_i + 1);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1642
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1642
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 i = i+1
  *                                 self.findexes.extend(self.findexes1)             # <<<<<<<<<<<<<<
@@ -52251,7 +50090,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_14 = PyObject_GetAttr(((PyObject *)__pyx_v_self->findexes), __pyx_n_s__extend); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_14);
               __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_1);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_1));
               __Pyx_INCREF(((PyObject *)__pyx_v_self->findexes1));
               PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->findexes1));
               __Pyx_GIVEREF(((PyObject *)__pyx_v_self->findexes1));
@@ -52261,7 +50100,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
               __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1643
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1643
  *                                 i = i+1
  *                                 self.findexes.extend(self.findexes1)
  *                                 for j from 0 <= j < phrase.n:             # <<<<<<<<<<<<<<
@@ -52271,7 +50110,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_3 = __pyx_v_phrase->n;
               for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1644
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1644
  *                                 self.findexes.extend(self.findexes1)
  *                                 for j from 0 <= j < phrase.n:
  *                                     if sym_isvar(phrase.syms[j]):             # <<<<<<<<<<<<<<
@@ -52281,7 +50120,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_4 = __pyx_f_3_sa_sym_isvar((__pyx_v_phrase->syms[__pyx_v_j]));
                 if (__pyx_t_4) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1645
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1645
  *                                 for j from 0 <= j < phrase.n:
  *                                     if sym_isvar(phrase.syms[j]):
  *                                         fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52290,7 +50129,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
                   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1646
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1646
  *                                     if sym_isvar(phrase.syms[j]):
  *                                         fphr_arr._append(sym_setindex(self.category, i))
  *                                         i = i + 1             # <<<<<<<<<<<<<<
@@ -52302,7 +50141,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 /*else*/ {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1648
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1648
  *                                         i = i + 1
  *                                     else:
  *                                         fphr_arr._append(phrase.syms[j])             # <<<<<<<<<<<<<<
@@ -52314,7 +50153,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_L72:;
               }
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1649
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1649
  *                                     else:
  *                                         fphr_arr._append(phrase.syms[j])
  *                                 if f_back_high > f_high:             # <<<<<<<<<<<<<<
@@ -52324,7 +50163,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_9 = (__pyx_v_f_back_high > __pyx_v_f_high);
               if (__pyx_t_9) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1650
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1650
  *                                         fphr_arr._append(phrase.syms[j])
  *                                 if f_back_high > f_high:
  *                                     fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52333,7 +50172,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
                 ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1651
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1651
  *                                 if f_back_high > f_high:
  *                                     fphr_arr._append(sym_setindex(self.category, i))
  *                                     self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52350,7 +50189,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               __pyx_L73:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1652
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1652
  *                                     fphr_arr._append(sym_setindex(self.category, i))
  *                                     self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr = Phrase(fphr_arr)             # <<<<<<<<<<<<<<
@@ -52358,7 +50197,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  *                                                     f_x_low, f_x_high, f_gap_low, f_gap_high, f_links_low, matching.sent_id,
  */
               __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_1);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_1));
               __Pyx_INCREF(((PyObject *)__pyx_v_fphr_arr));
               PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_fphr_arr));
               __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr_arr));
@@ -52369,7 +50208,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_v_fphr = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_15);
               __pyx_t_15 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1655
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1655
  *                                 phrase_list = self.extract_phrases(e_x_low, e_x_high, e_gap_low, e_gap_high, e_links_low, num_gaps+1,
  *                                                     f_x_low, f_x_high, f_gap_low, f_gap_high, f_links_low, matching.sent_id,
  *                                                     e_sent_len, e_sent_start)             # <<<<<<<<<<<<<<
@@ -52382,7 +50221,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_v_phrase_list = __pyx_t_15;
               __pyx_t_15 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1656
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1656
  *                                                     f_x_low, f_x_high, f_gap_low, f_gap_high, f_links_low, matching.sent_id,
  *                                                     e_sent_len, e_sent_start)
  *                                 if len(phrase_list) > 0:             # <<<<<<<<<<<<<<
@@ -52393,7 +50232,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_9 = (__pyx_t_13 > 0);
               if (__pyx_t_9) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1657
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1657
  *                                                     e_sent_len, e_sent_start)
  *                                 if len(phrase_list) > 0:
  *                                     pair_count = 1.0 / len(phrase_list)             # <<<<<<<<<<<<<<
@@ -52410,7 +50249,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               /*else*/ {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1659
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1659
  *                                     pair_count = 1.0 / len(phrase_list)
  *                                 else:
  *                                     pair_count = 0             # <<<<<<<<<<<<<<
@@ -52421,7 +50260,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               __pyx_L74:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1660
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1660
  *                                 else:
  *                                     pair_count = 0
  *                                 for phrase2,eindexes in phrase_list:             # <<<<<<<<<<<<<<
@@ -52437,20 +50276,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_16 = Py_TYPE(__pyx_t_15)->tp_iternext;
               }
               for (;;) {
-                if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_15)) {
+                if (PyList_CheckExact(__pyx_t_15)) {
                   if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_15)) break;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  __pyx_t_1 = PyList_GET_ITEM(__pyx_t_15, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #else
-                  __pyx_t_1 = PySequence_ITEM(__pyx_t_15, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
-                } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_15)) {
+                  __pyx_t_1 = PyList_GET_ITEM(__pyx_t_15, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++;
+                } else if (PyTuple_CheckExact(__pyx_t_15)) {
                   if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_15)) break;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_15, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #else
-                  __pyx_t_1 = PySequence_ITEM(__pyx_t_15, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
+                  __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_15, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++;
                 } else {
                   __pyx_t_1 = __pyx_t_16(__pyx_t_15);
                   if (unlikely(!__pyx_t_1)) {
@@ -52464,33 +50295,27 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
                   PyObject* sequence = __pyx_t_1;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  Py_ssize_t size = Py_SIZE(sequence);
-                  #else
-                  Py_ssize_t size = PySequence_Size(sequence);
-                  #endif
-                  if (unlikely(size != 2)) {
-                    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-                    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  }
-                  #if CYTHON_COMPILING_IN_CPYTHON
                   if (likely(PyTuple_CheckExact(sequence))) {
+                    if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                      if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
                     __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); 
                     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
                   } else {
+                    if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                      if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
                     __pyx_t_14 = PyList_GET_ITEM(sequence, 0); 
                     __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
                   }
                   __Pyx_INCREF(__pyx_t_14);
                   __Pyx_INCREF(__pyx_t_2);
-                  #else
-                  __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
                   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-                } else
-                {
+                } else {
                   Py_ssize_t index = -1;
                   __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_10);
@@ -52501,13 +50326,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   index = 1; __pyx_t_2 = __pyx_t_17(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L77_unpacking_failed;
                   __Pyx_GOTREF(__pyx_t_2);
                   if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  __pyx_t_17 = NULL;
                   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                   goto __pyx_L78_unpacking_done;
                   __pyx_L77_unpacking_failed:;
                   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-                  __pyx_t_17 = NULL;
-                  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+                  if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                  if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
                   {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __pyx_L78_unpacking_done:;
                 }
@@ -52518,7 +50342,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_v_eindexes = __pyx_t_2;
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1661
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1661
  *                                     pair_count = 0
  *                                 for phrase2,eindexes in phrase_list:
  *                                     als2 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)             # <<<<<<<<<<<<<<
@@ -52534,7 +50358,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_v_als2 = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1662
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1662
  *                                 for phrase2,eindexes in phrase_list:
  *                                     als2 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als2)))             # <<<<<<<<<<<<<<
@@ -52544,7 +50368,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_2 = PyFloat_FromDouble(__pyx_v_pair_count); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_2);
                 __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_1);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_1));
                 __Pyx_INCREF(((PyObject *)__pyx_v_als2));
                 PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_als2));
                 __Pyx_GIVEREF(((PyObject *)__pyx_v_als2));
@@ -52552,7 +50376,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __Pyx_GOTREF(__pyx_t_14);
                 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
                 __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_1);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_1));
                 __Pyx_INCREF(((PyObject *)__pyx_v_fphr));
                 PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_fphr));
                 __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr));
@@ -52578,7 +50402,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           __pyx_L64:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1664
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1664
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als2)))
  * 
  *                         if (f_back_high == f_high and             # <<<<<<<<<<<<<<
@@ -52588,7 +50412,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_9 = (__pyx_v_f_back_high == __pyx_v_f_high);
           if (__pyx_t_9) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1665
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1665
  * 
  *                         if (f_back_high == f_high and
  *                             f_sent_len - f_high >= self.train_min_gap_size and             # <<<<<<<<<<<<<<
@@ -52598,7 +50422,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_7 = ((__pyx_v_f_sent_len - __pyx_v_f_high) >= __pyx_v_self->train_min_gap_size);
             if (__pyx_t_7) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1666
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1666
  *                         if (f_back_high == f_high and
  *                             f_sent_len - f_high >= self.train_min_gap_size and
  *                             ((not self.tight_phrases) or (f_links_low[f_high] != -1 and f_links_low[f_back_low] != -1))):             # <<<<<<<<<<<<<<
@@ -52628,7 +50452,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           if (__pyx_t_7) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1667
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1667
  *                             f_sent_len - f_high >= self.train_min_gap_size and
  *                             ((not self.tight_phrases) or (f_links_low[f_high] != -1 and f_links_low[f_back_low] != -1))):
  *                             f_x_high = f_high+self.train_min_gap_size             # <<<<<<<<<<<<<<
@@ -52637,7 +50461,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_f_x_high = (__pyx_v_f_high + __pyx_v_self->train_min_gap_size);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1668
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1668
  *                             ((not self.tight_phrases) or (f_links_low[f_high] != -1 and f_links_low[f_back_low] != -1))):
  *                             f_x_high = f_high+self.train_min_gap_size
  *                             met_constraints = 1             # <<<<<<<<<<<<<<
@@ -52646,7 +50470,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_met_constraints = 1;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1669
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1669
  *                             f_x_high = f_high+self.train_min_gap_size
  *                             met_constraints = 1
  *                             if self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -52655,7 +50479,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_self->tight_phrases) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1670
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1670
  *                             met_constraints = 1
  *                             if self.tight_phrases:
  *                                 while f_x_high <= f_sent_len and f_links_low[f_x_high-1] == -1:             # <<<<<<<<<<<<<<
@@ -52672,7 +50496,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (!__pyx_t_18) break;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1671
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1671
  *                             if self.tight_phrases:
  *                                 while f_x_high <= f_sent_len and f_links_low[f_x_high-1] == -1:
  *                                     f_x_high = f_x_high + 1             # <<<<<<<<<<<<<<
@@ -52685,7 +50509,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L80:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1672
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1672
  *                                 while f_x_high <= f_sent_len and f_links_low[f_x_high-1] == -1:
  *                                     f_x_high = f_x_high + 1
  *                             if f_x_high > f_sent_len or f_x_high - f_back_low > self.train_max_initial_size:             # <<<<<<<<<<<<<<
@@ -52701,7 +50525,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if (__pyx_t_9) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1673
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1673
  *                                     f_x_high = f_x_high + 1
  *                             if f_x_high > f_sent_len or f_x_high - f_back_low > self.train_max_initial_size:
  *                                 met_constraints = 0             # <<<<<<<<<<<<<<
@@ -52713,7 +50537,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L83:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1675
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1675
  *                                 met_constraints = 0
  * 
  *                             if (met_constraints and             # <<<<<<<<<<<<<<
@@ -52722,7 +50546,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_met_constraints) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1676
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1676
  * 
  *                             if (met_constraints and
  *                                 self.find_fixpoint(f_back_low, f_x_high,             # <<<<<<<<<<<<<<
@@ -52732,7 +50556,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_15 = PyInt_FromLong(__pyx_v_f_x_high); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_15);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1680
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1680
  *                                             e_low, e_high, &e_x_low, &e_x_high, &f_x_low, &f_x_high,
  *                                             f_sent_len, e_sent_len,
  *                                             self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -52742,7 +50566,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               if (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->find_fixpoint(__pyx_v_self, __pyx_v_f_back_low, __pyx_t_15, __pyx_v_f_links_low, __pyx_v_f_links_high, __pyx_v_e_links_low, __pyx_v_e_links_high, __pyx_v_e_low, __pyx_v_e_high, (&__pyx_v_e_x_low), (&__pyx_v_e_x_high), (&__pyx_v_f_x_low), (&__pyx_v_f_x_high), __pyx_v_f_sent_len, __pyx_v_e_sent_len, __pyx_v_self->train_max_initial_size, __pyx_v_self->train_max_initial_size, 1, 1, 1, 0, 1, 1, 0)) {
                 __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1682
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1682
  *                                             self.train_max_initial_size, self.train_max_initial_size,
  *                                             1, 1, 1, 0, 1, 1, 0) and
  *                                 ((not self.tight_phrases) or f_links_low[f_x_high-1] != -1) and             # <<<<<<<<<<<<<<
@@ -52758,7 +50582,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (__pyx_t_7) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1683
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1683
  *                                             1, 1, 1, 0, 1, 1, 0) and
  *                                 ((not self.tight_phrases) or f_links_low[f_x_high-1] != -1) and
  *                                 self.find_fixpoint(f_high, f_x_high,             # <<<<<<<<<<<<<<
@@ -52768,7 +50592,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   __pyx_t_14 = PyInt_FromLong(__pyx_v_f_x_high); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_14);
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1688
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1688
  *                                             f_gap_low+gap_start+num_gaps, f_gap_high+gap_start+num_gaps,
  *                                             f_sent_len, e_sent_len,
  *                                             self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -52791,7 +50615,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if (__pyx_t_9) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1690
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1690
  *                                             self.train_max_initial_size, self.train_max_initial_size,
  *                                             0, 0, 0, 0, 0, 0, 0)):
  *                                 fphr_arr._clear()             # <<<<<<<<<<<<<<
@@ -52800,7 +50624,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_clear(__pyx_v_fphr_arr);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1691
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1691
  *                                             0, 0, 0, 0, 0, 0, 0)):
  *                                 fphr_arr._clear()
  *                                 i = 1             # <<<<<<<<<<<<<<
@@ -52809,7 +50633,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               __pyx_v_i = 1;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1692
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1692
  *                                 fphr_arr._clear()
  *                                 i = 1
  *                                 self.findexes.reset()             # <<<<<<<<<<<<<<
@@ -52823,7 +50647,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1693
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1693
  *                                 i = 1
  *                                 self.findexes.reset()
  *                                 if f_back_low < f_low:             # <<<<<<<<<<<<<<
@@ -52833,7 +50657,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_9 = (__pyx_v_f_back_low < __pyx_v_f_low);
               if (__pyx_t_9) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1694
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1694
  *                                 self.findexes.reset()
  *                                 if f_back_low < f_low:
  *                                     fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52842,7 +50666,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
                 ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1695
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1695
  *                                 if f_back_low < f_low:
  *                                     fphr_arr._append(sym_setindex(self.category, i))
  *                                     i = i+1             # <<<<<<<<<<<<<<
@@ -52851,7 +50675,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
                 __pyx_v_i = (__pyx_v_i + 1);
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1696
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1696
  *                                     fphr_arr._append(sym_setindex(self.category, i))
  *                                     i = i+1
  *                                     self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52868,7 +50692,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               __pyx_L85:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1697
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1697
  *                                     i = i+1
  *                                     self.findexes.append(sym_setindex(self.category, i))
  *                                 self.findexes.extend(self.findexes1)             # <<<<<<<<<<<<<<
@@ -52878,7 +50702,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_15 = PyObject_GetAttr(((PyObject *)__pyx_v_self->findexes), __pyx_n_s__extend); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_15);
               __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_14);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_14));
               __Pyx_INCREF(((PyObject *)__pyx_v_self->findexes1));
               PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_v_self->findexes1));
               __Pyx_GIVEREF(((PyObject *)__pyx_v_self->findexes1));
@@ -52888,7 +50712,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1698
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1698
  *                                     self.findexes.append(sym_setindex(self.category, i))
  *                                 self.findexes.extend(self.findexes1)
  *                                 for j from 0 <= j < phrase.n:             # <<<<<<<<<<<<<<
@@ -52898,7 +50722,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_3 = __pyx_v_phrase->n;
               for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1699
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1699
  *                                 self.findexes.extend(self.findexes1)
  *                                 for j from 0 <= j < phrase.n:
  *                                     if sym_isvar(phrase.syms[j]):             # <<<<<<<<<<<<<<
@@ -52908,7 +50732,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_4 = __pyx_f_3_sa_sym_isvar((__pyx_v_phrase->syms[__pyx_v_j]));
                 if (__pyx_t_4) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1700
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1700
  *                                 for j from 0 <= j < phrase.n:
  *                                     if sym_isvar(phrase.syms[j]):
  *                                         fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52917,7 +50741,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
                   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1701
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1701
  *                                     if sym_isvar(phrase.syms[j]):
  *                                         fphr_arr._append(sym_setindex(self.category, i))
  *                                         i = i + 1             # <<<<<<<<<<<<<<
@@ -52929,7 +50753,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 /*else*/ {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1703
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1703
  *                                         i = i + 1
  *                                     else:
  *                                         fphr_arr._append(phrase.syms[j])             # <<<<<<<<<<<<<<
@@ -52941,7 +50765,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_L88:;
               }
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1704
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1704
  *                                     else:
  *                                         fphr_arr._append(phrase.syms[j])
  *                                 fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52950,7 +50774,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1705
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1705
  *                                         fphr_arr._append(phrase.syms[j])
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -52964,7 +50788,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1706
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1706
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr = Phrase(fphr_arr)             # <<<<<<<<<<<<<<
@@ -52972,7 +50796,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  *                                                     f_x_low, f_x_high, f_gap_low+gap_start, f_gap_high+gap_start, f_links_low,
  */
               __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_14);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_14));
               __Pyx_INCREF(((PyObject *)__pyx_v_fphr_arr));
               PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_v_fphr_arr));
               __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr_arr));
@@ -52983,7 +50807,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_v_fphr = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_1);
               __pyx_t_1 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1709
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1709
  *                                 phrase_list = self.extract_phrases(e_x_low, e_x_high, e_gap_low+gap_start, e_gap_high+gap_start, e_links_low, num_gaps+1,
  *                                                     f_x_low, f_x_high, f_gap_low+gap_start, f_gap_high+gap_start, f_links_low,
  *                                                     matching.sent_id, e_sent_len, e_sent_start)             # <<<<<<<<<<<<<<
@@ -52996,7 +50820,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_v_phrase_list = __pyx_t_1;
               __pyx_t_1 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1710
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1710
  *                                                     f_x_low, f_x_high, f_gap_low+gap_start, f_gap_high+gap_start, f_links_low,
  *                                                     matching.sent_id, e_sent_len, e_sent_start)
  *                                 if len(phrase_list) > 0:             # <<<<<<<<<<<<<<
@@ -53007,7 +50831,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_9 = (__pyx_t_13 > 0);
               if (__pyx_t_9) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1711
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1711
  *                                                     matching.sent_id, e_sent_len, e_sent_start)
  *                                 if len(phrase_list) > 0:
  *                                     pair_count = 1.0 / len(phrase_list)             # <<<<<<<<<<<<<<
@@ -53024,7 +50848,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               /*else*/ {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1713
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1713
  *                                     pair_count = 1.0 / len(phrase_list)
  *                                 else:
  *                                     pair_count = 0             # <<<<<<<<<<<<<<
@@ -53035,7 +50859,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               __pyx_L89:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1714
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1714
  *                                 else:
  *                                     pair_count = 0
  *                                 for phrase2, eindexes in phrase_list:             # <<<<<<<<<<<<<<
@@ -53051,20 +50875,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_16 = Py_TYPE(__pyx_t_1)->tp_iternext;
               }
               for (;;) {
-                if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_1)) {
+                if (PyList_CheckExact(__pyx_t_1)) {
                   if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  __pyx_t_14 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_14); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #else
-                  __pyx_t_14 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
-                } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_1)) {
+                  __pyx_t_14 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_14); __pyx_t_13++;
+                } else if (PyTuple_CheckExact(__pyx_t_1)) {
                   if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_14); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #else
-                  __pyx_t_14 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
+                  __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_14); __pyx_t_13++;
                 } else {
                   __pyx_t_14 = __pyx_t_16(__pyx_t_1);
                   if (unlikely(!__pyx_t_14)) {
@@ -53078,33 +50894,27 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) {
                   PyObject* sequence = __pyx_t_14;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  Py_ssize_t size = Py_SIZE(sequence);
-                  #else
-                  Py_ssize_t size = PySequence_Size(sequence);
-                  #endif
-                  if (unlikely(size != 2)) {
-                    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-                    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  }
-                  #if CYTHON_COMPILING_IN_CPYTHON
                   if (likely(PyTuple_CheckExact(sequence))) {
+                    if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                      if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
                     __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0); 
                     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
                   } else {
+                    if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                      if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
                     __pyx_t_15 = PyList_GET_ITEM(sequence, 0); 
                     __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
                   }
                   __Pyx_INCREF(__pyx_t_15);
                   __Pyx_INCREF(__pyx_t_2);
-                  #else
-                  __pyx_t_15 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
                   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-                } else
-                {
+                } else {
                   Py_ssize_t index = -1;
                   __pyx_t_10 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_10);
@@ -53115,13 +50925,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   index = 1; __pyx_t_2 = __pyx_t_17(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L92_unpacking_failed;
                   __Pyx_GOTREF(__pyx_t_2);
                   if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  __pyx_t_17 = NULL;
                   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                   goto __pyx_L93_unpacking_done;
                   __pyx_L92_unpacking_failed:;
                   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-                  __pyx_t_17 = NULL;
-                  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+                  if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                  if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
                   {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __pyx_L93_unpacking_done:;
                 }
@@ -53132,7 +50941,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_v_eindexes = __pyx_t_2;
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1715
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1715
  *                                     pair_count = 0
  *                                 for phrase2, eindexes in phrase_list:
  *                                     als3 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)             # <<<<<<<<<<<<<<
@@ -53148,7 +50957,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_v_als3 = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1716
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1716
  *                                 for phrase2, eindexes in phrase_list:
  *                                     als3 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als3)))             # <<<<<<<<<<<<<<
@@ -53158,7 +50967,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_2 = PyFloat_FromDouble(__pyx_v_pair_count); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_2);
                 __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_14);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_14));
                 __Pyx_INCREF(((PyObject *)__pyx_v_als3));
                 PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_v_als3));
                 __Pyx_GIVEREF(((PyObject *)__pyx_v_als3));
@@ -53166,7 +50975,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __Pyx_GOTREF(__pyx_t_15);
                 __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
                 __pyx_t_14 = PyTuple_New(4); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_14);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_14));
                 __Pyx_INCREF(((PyObject *)__pyx_v_fphr));
                 PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_v_fphr));
                 __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr));
@@ -53192,7 +51001,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           __pyx_L79:;
 
-          /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1717
+          /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1717
  *                                     als3 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als3)))
  *                         if (num_gaps < self.max_nonterminals - 1 and             # <<<<<<<<<<<<<<
@@ -53202,7 +51011,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           __pyx_t_9 = (__pyx_v_num_gaps < (__pyx_v_self->max_nonterminals - 1));
           if (__pyx_t_9) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1718
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1718
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als3)))
  *                         if (num_gaps < self.max_nonterminals - 1 and
  *                             phrase_len+1 < self.max_length and             # <<<<<<<<<<<<<<
@@ -53212,7 +51021,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_7 = ((__pyx_v_phrase_len + 1) < __pyx_v_self->max_length);
             if (__pyx_t_7) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1719
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1719
  *                         if (num_gaps < self.max_nonterminals - 1 and
  *                             phrase_len+1 < self.max_length and
  *                             f_back_high == f_high and             # <<<<<<<<<<<<<<
@@ -53222,7 +51031,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_18 = (__pyx_v_f_back_high == __pyx_v_f_high);
               if (__pyx_t_18) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1720
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1720
  *                             phrase_len+1 < self.max_length and
  *                             f_back_high == f_high and
  *                             f_back_low == f_low and             # <<<<<<<<<<<<<<
@@ -53232,7 +51041,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_8 = (__pyx_v_f_back_low == __pyx_v_f_low);
                 if (__pyx_t_8) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1721
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1721
  *                             f_back_high == f_high and
  *                             f_back_low == f_low and
  *                             f_back_high - f_back_low + (2*self.train_min_gap_size) <= self.train_max_initial_size and             # <<<<<<<<<<<<<<
@@ -53242,7 +51051,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   __pyx_t_19 = (((__pyx_v_f_back_high - __pyx_v_f_back_low) + (2 * __pyx_v_self->train_min_gap_size)) <= __pyx_v_self->train_max_initial_size);
                   if (__pyx_t_19) {
 
-                    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1722
+                    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1722
  *                             f_back_low == f_low and
  *                             f_back_high - f_back_low + (2*self.train_min_gap_size) <= self.train_max_initial_size and
  *                             f_low >= self.train_min_gap_size and             # <<<<<<<<<<<<<<
@@ -53252,7 +51061,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                     __pyx_t_20 = (__pyx_v_f_low >= __pyx_v_self->train_min_gap_size);
                     if (__pyx_t_20) {
 
-                      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1723
+                      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1723
  *                             f_back_high - f_back_low + (2*self.train_min_gap_size) <= self.train_max_initial_size and
  *                             f_low >= self.train_min_gap_size and
  *                             f_high <= f_sent_len - self.train_min_gap_size and             # <<<<<<<<<<<<<<
@@ -53262,7 +51071,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                       __pyx_t_21 = (__pyx_v_f_high <= (__pyx_v_f_sent_len - __pyx_v_self->train_min_gap_size));
                       if (__pyx_t_21) {
 
-                        /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1724
+                        /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1724
  *                             f_low >= self.train_min_gap_size and
  *                             f_high <= f_sent_len - self.train_min_gap_size and
  *                             ((not self.tight_phrases) or (f_links_low[f_low-1] != -1 and f_links_low[f_high] != -1))):             # <<<<<<<<<<<<<<
@@ -53312,7 +51121,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
           }
           if (__pyx_t_7) {
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1726
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1726
  *                             ((not self.tight_phrases) or (f_links_low[f_low-1] != -1 and f_links_low[f_high] != -1))):
  * 
  *                             met_constraints = 1             # <<<<<<<<<<<<<<
@@ -53321,7 +51130,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_met_constraints = 1;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1727
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1727
  * 
  *                             met_constraints = 1
  *                             f_x_low = f_low-self.train_min_gap_size             # <<<<<<<<<<<<<<
@@ -53330,7 +51139,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_f_x_low = (__pyx_v_f_low - __pyx_v_self->train_min_gap_size);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1728
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1728
  *                             met_constraints = 1
  *                             f_x_low = f_low-self.train_min_gap_size
  *                             if self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -53339,7 +51148,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_self->tight_phrases) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1729
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1729
  *                             f_x_low = f_low-self.train_min_gap_size
  *                             if self.tight_phrases:
  *                                 while f_x_low >= 0 and f_links_low[f_x_low] == -1:             # <<<<<<<<<<<<<<
@@ -53356,7 +51165,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (!__pyx_t_18) break;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1730
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1730
  *                             if self.tight_phrases:
  *                                 while f_x_low >= 0 and f_links_low[f_x_low] == -1:
  *                                     f_x_low = f_x_low - 1             # <<<<<<<<<<<<<<
@@ -53369,7 +51178,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L95:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1731
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1731
  *                                 while f_x_low >= 0 and f_links_low[f_x_low] == -1:
  *                                     f_x_low = f_x_low - 1
  *                             if f_x_low < 0:             # <<<<<<<<<<<<<<
@@ -53379,7 +51188,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             __pyx_t_18 = (__pyx_v_f_x_low < 0);
             if (__pyx_t_18) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1732
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1732
  *                                     f_x_low = f_x_low - 1
  *                             if f_x_low < 0:
  *                                 met_constraints = 0             # <<<<<<<<<<<<<<
@@ -53391,7 +51200,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L98:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1734
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1734
  *                                 met_constraints = 0
  * 
  *                             f_x_high = f_high+self.train_min_gap_size             # <<<<<<<<<<<<<<
@@ -53400,7 +51209,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             __pyx_v_f_x_high = (__pyx_v_f_high + __pyx_v_self->train_min_gap_size);
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1735
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1735
  * 
  *                             f_x_high = f_high+self.train_min_gap_size
  *                             if self.tight_phrases:             # <<<<<<<<<<<<<<
@@ -53409,7 +51218,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_self->tight_phrases) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1736
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1736
  *                             f_x_high = f_high+self.train_min_gap_size
  *                             if self.tight_phrases:
  *                                 while f_x_high <= f_sent_len and f_links_low[f_x_high-1] == -1:             # <<<<<<<<<<<<<<
@@ -53426,7 +51235,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (!__pyx_t_9) break;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1737
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1737
  *                             if self.tight_phrases:
  *                                 while f_x_high <= f_sent_len and f_links_low[f_x_high-1] == -1:
  *                                     f_x_high = f_x_high + 1             # <<<<<<<<<<<<<<
@@ -53439,7 +51248,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L99:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1738
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1738
  *                                 while f_x_high <= f_sent_len and f_links_low[f_x_high-1] == -1:
  *                                     f_x_high = f_x_high + 1
  *                             if f_x_high > f_sent_len or f_x_high - f_x_low > self.train_max_initial_size:             # <<<<<<<<<<<<<<
@@ -53455,7 +51264,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if (__pyx_t_7) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1739
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1739
  *                                     f_x_high = f_x_high + 1
  *                             if f_x_high > f_sent_len or f_x_high - f_x_low > self.train_max_initial_size:
  *                                 met_constraints = 0             # <<<<<<<<<<<<<<
@@ -53467,7 +51276,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             __pyx_L102:;
 
-            /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1741
+            /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1741
  *                                 met_constraints = 0
  * 
  *                             if (met_constraints and             # <<<<<<<<<<<<<<
@@ -53476,7 +51285,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
             if (__pyx_v_met_constraints) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1742
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1742
  * 
  *                             if (met_constraints and
  *                                 self.find_fixpoint(f_x_low, f_x_high,             # <<<<<<<<<<<<<<
@@ -53486,7 +51295,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_1 = PyInt_FromLong(__pyx_v_f_x_high); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_1);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1746
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1746
  *                                                 e_low, e_high, &e_x_low, &e_x_high, &f_x_low, &f_x_high,
  *                                                 f_sent_len, e_sent_len,
  *                                                 self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -53496,7 +51305,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               if (((struct __pyx_vtabstruct_3_sa_HieroCachingRuleFactory *)__pyx_v_self->__pyx_vtab)->find_fixpoint(__pyx_v_self, __pyx_v_f_x_low, __pyx_t_1, __pyx_v_f_links_low, __pyx_v_f_links_high, __pyx_v_e_links_low, __pyx_v_e_links_high, __pyx_v_e_low, __pyx_v_e_high, (&__pyx_v_e_x_low), (&__pyx_v_e_x_high), (&__pyx_v_f_x_low), (&__pyx_v_f_x_high), __pyx_v_f_sent_len, __pyx_v_e_sent_len, __pyx_v_self->train_max_initial_size, __pyx_v_self->train_max_initial_size, 1, 1, 2, 1, 1, 1, 1)) {
                 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1748
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1748
  *                                                 self.train_max_initial_size, self.train_max_initial_size,
  *                                                 1, 1, 2, 1, 1, 1, 1) and
  *                                 ((not self.tight_phrases) or (f_links_low[f_x_low] != -1 and f_links_low[f_x_high-1] != -1)) and             # <<<<<<<<<<<<<<
@@ -53518,7 +51327,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if (__pyx_t_9) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1749
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1749
  *                                                 1, 1, 2, 1, 1, 1, 1) and
  *                                 ((not self.tight_phrases) or (f_links_low[f_x_low] != -1 and f_links_low[f_x_high-1] != -1)) and
  *                                 self.find_fixpoint(f_x_low, f_low,             # <<<<<<<<<<<<<<
@@ -53528,7 +51337,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   __pyx_t_15 = PyInt_FromLong(__pyx_v_f_low); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_15);
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1753
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1753
  *                                                 -1, -1, e_gap_low, e_gap_high, f_gap_low, f_gap_high,
  *                                                 f_sent_len, e_sent_len,
  *                                                 self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -53539,7 +51348,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                   if (__pyx_t_3) {
 
-                    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1755
+                    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1755
  *                                                 self.train_max_initial_size, self.train_max_initial_size,
  *                                                 0, 0, 0, 0, 0, 0, 0) and
  *                                 self.find_fixpoint(f_high, f_x_high,             # <<<<<<<<<<<<<<
@@ -53549,7 +51358,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                     __pyx_t_15 = PyInt_FromLong(__pyx_v_f_x_high); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                     __Pyx_GOTREF(__pyx_t_15);
 
-                    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1760
+                    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1760
  *                                                 f_gap_low+1+num_gaps, f_gap_high+1+num_gaps,
  *                                                 f_sent_len, e_sent_len,
  *                                                 self.train_max_initial_size, self.train_max_initial_size,             # <<<<<<<<<<<<<<
@@ -53577,7 +51386,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
             }
             if (__pyx_t_8) {
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1762
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1762
  *                                                 self.train_max_initial_size, self.train_max_initial_size,
  *                                                 0, 0, 0, 0, 0, 0, 0)):
  *                                 fphr_arr._clear()             # <<<<<<<<<<<<<<
@@ -53586,7 +51395,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_clear(__pyx_v_fphr_arr);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1763
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1763
  *                                                 0, 0, 0, 0, 0, 0, 0)):
  *                                 fphr_arr._clear()
  *                                 i = 1             # <<<<<<<<<<<<<<
@@ -53595,7 +51404,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               __pyx_v_i = 1;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1764
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1764
  *                                 fphr_arr._clear()
  *                                 i = 1
  *                                 self.findexes.reset()             # <<<<<<<<<<<<<<
@@ -53609,7 +51418,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
               __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1765
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1765
  *                                 i = 1
  *                                 self.findexes.reset()
  *                                 self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -53623,7 +51432,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
               __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1766
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1766
  *                                 self.findexes.reset()
  *                                 self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -53632,7 +51441,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1767
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1767
  *                                 self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 i = i+1             # <<<<<<<<<<<<<<
@@ -53641,7 +51450,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               __pyx_v_i = (__pyx_v_i + 1);
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1768
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1768
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 i = i+1
  *                                 self.findexes.extend(self.findexes1)             # <<<<<<<<<<<<<<
@@ -53651,7 +51460,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self->findexes), __pyx_n_s__extend); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_1);
               __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_15);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_15));
               __Pyx_INCREF(((PyObject *)__pyx_v_self->findexes1));
               PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_self->findexes1));
               __Pyx_GIVEREF(((PyObject *)__pyx_v_self->findexes1));
@@ -53661,7 +51470,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(((PyObject *)__pyx_t_15)); __pyx_t_15 = 0;
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1769
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1769
  *                                 i = i+1
  *                                 self.findexes.extend(self.findexes1)
  *                                 for j from 0 <= j < phrase.n:             # <<<<<<<<<<<<<<
@@ -53671,7 +51480,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_3 = __pyx_v_phrase->n;
               for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1770
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1770
  *                                 self.findexes.extend(self.findexes1)
  *                                 for j from 0 <= j < phrase.n:
  *                                     if sym_isvar(phrase.syms[j]):             # <<<<<<<<<<<<<<
@@ -53681,7 +51490,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_4 = __pyx_f_3_sa_sym_isvar((__pyx_v_phrase->syms[__pyx_v_j]));
                 if (__pyx_t_4) {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1771
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1771
  *                                 for j from 0 <= j < phrase.n:
  *                                     if sym_isvar(phrase.syms[j]):
  *                                         fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -53690,7 +51499,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
                   ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1772
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1772
  *                                     if sym_isvar(phrase.syms[j]):
  *                                         fphr_arr._append(sym_setindex(self.category, i))
  *                                         i = i + 1             # <<<<<<<<<<<<<<
@@ -53702,7 +51511,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 /*else*/ {
 
-                  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1774
+                  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1774
  *                                         i = i + 1
  *                                     else:
  *                                         fphr_arr._append(phrase.syms[j])             # <<<<<<<<<<<<<<
@@ -53714,7 +51523,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_L106:;
               }
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1775
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1775
  *                                     else:
  *                                         fphr_arr._append(phrase.syms[j])
  *                                 fphr_arr._append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -53723,7 +51532,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
               ((struct __pyx_vtabstruct_3_sa_IntList *)__pyx_v_fphr_arr->__pyx_vtab)->_append(__pyx_v_fphr_arr, __pyx_f_3_sa_sym_setindex(__pyx_v_self->category, __pyx_v_i));
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1776
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1776
  *                                         fphr_arr._append(phrase.syms[j])
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 self.findexes.append(sym_setindex(self.category, i))             # <<<<<<<<<<<<<<
@@ -53737,7 +51546,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
               __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1777
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1777
  *                                 fphr_arr._append(sym_setindex(self.category, i))
  *                                 self.findexes.append(sym_setindex(self.category, i))
  *                                 fphr = Phrase(fphr_arr)             # <<<<<<<<<<<<<<
@@ -53745,7 +51554,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  *                                                     f_x_low, f_x_high, f_gap_low, f_gap_high, f_links_low,
  */
               __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-              __Pyx_GOTREF(__pyx_t_15);
+              __Pyx_GOTREF(((PyObject *)__pyx_t_15));
               __Pyx_INCREF(((PyObject *)__pyx_v_fphr_arr));
               PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_fphr_arr));
               __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr_arr));
@@ -53756,7 +51565,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_v_fphr = ((struct __pyx_obj_3_sa_Phrase *)__pyx_t_14);
               __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1780
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1780
  *                                 phrase_list = self.extract_phrases(e_x_low, e_x_high, e_gap_low, e_gap_high, e_links_low, num_gaps+2,
  *                                                     f_x_low, f_x_high, f_gap_low, f_gap_high, f_links_low,
  *                                                     matching.sent_id, e_sent_len, e_sent_start)             # <<<<<<<<<<<<<<
@@ -53769,7 +51578,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_v_phrase_list = __pyx_t_14;
               __pyx_t_14 = 0;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1781
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1781
  *                                                     f_x_low, f_x_high, f_gap_low, f_gap_high, f_links_low,
  *                                                     matching.sent_id, e_sent_len, e_sent_start)
  *                                 if len(phrase_list) > 0:             # <<<<<<<<<<<<<<
@@ -53780,7 +51589,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               __pyx_t_8 = (__pyx_t_13 > 0);
               if (__pyx_t_8) {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1782
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1782
  *                                                     matching.sent_id, e_sent_len, e_sent_start)
  *                                 if len(phrase_list) > 0:
  *                                     pair_count = 1.0 / len(phrase_list)             # <<<<<<<<<<<<<<
@@ -53797,7 +51606,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               /*else*/ {
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1784
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1784
  *                                     pair_count = 1.0 / len(phrase_list)
  *                                 else:
  *                                     pair_count = 0             # <<<<<<<<<<<<<<
@@ -53808,7 +51617,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
               }
               __pyx_L107:;
 
-              /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1785
+              /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1785
  *                                 else:
  *                                     pair_count = 0
  *                                 for phrase2, eindexes in phrase_list:             # <<<<<<<<<<<<<<
@@ -53824,20 +51633,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_16 = Py_TYPE(__pyx_t_14)->tp_iternext;
               }
               for (;;) {
-                if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_14)) {
+                if (PyList_CheckExact(__pyx_t_14)) {
                   if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_14)) break;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  __pyx_t_15 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #else
-                  __pyx_t_15 = PySequence_ITEM(__pyx_t_14, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
-                } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_14)) {
+                  __pyx_t_15 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++;
+                } else if (PyTuple_CheckExact(__pyx_t_14)) {
                   if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_14)) break;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #else
-                  __pyx_t_15 = PySequence_ITEM(__pyx_t_14, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
+                  __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_15); __pyx_t_13++;
                 } else {
                   __pyx_t_15 = __pyx_t_16(__pyx_t_14);
                   if (unlikely(!__pyx_t_15)) {
@@ -53851,33 +51652,27 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 }
                 if ((likely(PyTuple_CheckExact(__pyx_t_15))) || (PyList_CheckExact(__pyx_t_15))) {
                   PyObject* sequence = __pyx_t_15;
-                  #if CYTHON_COMPILING_IN_CPYTHON
-                  Py_ssize_t size = Py_SIZE(sequence);
-                  #else
-                  Py_ssize_t size = PySequence_Size(sequence);
-                  #endif
-                  if (unlikely(size != 2)) {
-                    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-                    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-                    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  }
-                  #if CYTHON_COMPILING_IN_CPYTHON
                   if (likely(PyTuple_CheckExact(sequence))) {
+                    if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+                      if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
                     __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
                     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
                   } else {
+                    if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+                      if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+                      else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+                      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                    }
                     __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
                     __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
                   }
                   __Pyx_INCREF(__pyx_t_1);
                   __Pyx_INCREF(__pyx_t_2);
-                  #else
-                  __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  #endif
                   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-                } else
-                {
+                } else {
                   Py_ssize_t index = -1;
                   __pyx_t_10 = PyObject_GetIter(__pyx_t_15); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __Pyx_GOTREF(__pyx_t_10);
@@ -53888,13 +51683,12 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                   index = 1; __pyx_t_2 = __pyx_t_17(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L110_unpacking_failed;
                   __Pyx_GOTREF(__pyx_t_2);
                   if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                  __pyx_t_17 = NULL;
                   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                   goto __pyx_L111_unpacking_done;
                   __pyx_L110_unpacking_failed:;
                   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-                  __pyx_t_17 = NULL;
-                  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+                  if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+                  if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
                   {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                   __pyx_L111_unpacking_done:;
                 }
@@ -53905,7 +51699,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_v_eindexes = __pyx_t_2;
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1786
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1786
  *                                     pair_count = 0
  *                                 for phrase2, eindexes in phrase_list:
  *                                     als4 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)             # <<<<<<<<<<<<<<
@@ -53921,7 +51715,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_v_als4 = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
                 __pyx_t_2 = 0;
 
-                /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1787
+                /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1787
  *                                 for phrase2, eindexes in phrase_list:
  *                                     als4 = self.create_alignments(sent_links,num_links,self.findexes,eindexes)
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als4)))             # <<<<<<<<<<<<<<
@@ -53931,7 +51725,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __pyx_t_2 = PyFloat_FromDouble(__pyx_v_pair_count); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 __Pyx_GOTREF(__pyx_t_2);
                 __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_15);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_15));
                 __Pyx_INCREF(((PyObject *)__pyx_v_als4));
                 PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_als4));
                 __Pyx_GIVEREF(((PyObject *)__pyx_v_als4));
@@ -53939,7 +51733,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
                 __Pyx_GOTREF(__pyx_t_1);
                 __Pyx_DECREF(((PyObject *)__pyx_t_15)); __pyx_t_15 = 0;
                 __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-                __Pyx_GOTREF(__pyx_t_15);
+                __Pyx_GOTREF(((PyObject *)__pyx_t_15));
                 __Pyx_INCREF(((PyObject *)__pyx_v_fphr));
                 PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_fphr));
                 __Pyx_GIVEREF(((PyObject *)__pyx_v_fphr));
@@ -53974,7 +51768,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
     }
     /*else*/ {
 
-      /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1789
+      /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1789
  *                                     extracts.append((fphr, phrase2, pair_count, tuple(als4)))
  *             else:
  *                 reason_for_failure = "Unable to extract basic phrase"             # <<<<<<<<<<<<<<
@@ -53990,7 +51784,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   }
   __pyx_L33:;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1791
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1791
  *                 reason_for_failure = "Unable to extract basic phrase"
  * 
  *         free(sent_links)             # <<<<<<<<<<<<<<
@@ -53999,7 +51793,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_sent_links);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1792
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1792
  * 
  *         free(sent_links)
  *         free(f_links_low)             # <<<<<<<<<<<<<<
@@ -54008,7 +51802,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_f_links_low);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1793
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1793
  *         free(sent_links)
  *         free(f_links_low)
  *         free(f_links_high)             # <<<<<<<<<<<<<<
@@ -54017,7 +51811,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_f_links_high);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1794
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1794
  *         free(f_links_low)
  *         free(f_links_high)
  *         free(e_links_low)             # <<<<<<<<<<<<<<
@@ -54026,7 +51820,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_e_links_low);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1795
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1795
  *         free(f_links_high)
  *         free(e_links_low)
  *         free(e_links_high)             # <<<<<<<<<<<<<<
@@ -54035,7 +51829,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_e_links_high);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1796
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1796
  *         free(e_links_low)
  *         free(e_links_high)
  *         free(f_gap_low)             # <<<<<<<<<<<<<<
@@ -54044,7 +51838,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_f_gap_low);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1797
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1797
  *         free(e_links_high)
  *         free(f_gap_low)
  *         free(f_gap_high)             # <<<<<<<<<<<<<<
@@ -54053,7 +51847,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_f_gap_high);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1798
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1798
  *         free(f_gap_low)
  *         free(f_gap_high)
  *         free(e_gap_low)             # <<<<<<<<<<<<<<
@@ -54062,7 +51856,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_e_gap_low);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1799
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1799
  *         free(f_gap_high)
  *         free(e_gap_low)
  *         free(e_gap_high)             # <<<<<<<<<<<<<<
@@ -54071,7 +51865,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
  */
   free(__pyx_v_e_gap_high);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1801
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1801
  *         free(e_gap_high)
  * 
  *         return extracts             # <<<<<<<<<<<<<<
@@ -54111,21 +51905,7 @@ static PyObject *__pyx_f_3_sa_23HieroCachingRuleFactory_extract(struct __pyx_obj
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_13FeatureVector_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_13FeatureVector_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_3_sa_13FeatureVector___cinit__(((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":7
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":7
  * 
  * cdef class FeatureVector:
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -54133,7 +51913,8 @@ static int __pyx_pw_3_sa_13FeatureVector_1__cinit__(PyObject *__pyx_v_self, PyOb
  *         self.values = FloatList(INITIAL_CAPACITY, INCREMENT)
  */
 
-static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self) {
+static int __pyx_pf_3_sa_13FeatureVector___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_13FeatureVector___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -54142,9 +51923,12 @@ static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_Feature
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  __Pyx_RefNannySetupContext("__cinit__");
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":8
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":8
  * cdef class FeatureVector:
  *     def __cinit__(self):
  *         self.names = IntList(INITIAL_CAPACITY, INCREMENT)             # <<<<<<<<<<<<<<
@@ -54156,7 +51940,7 @@ static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_Feature
   __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__INCREMENT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
@@ -54167,12 +51951,12 @@ static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_Feature
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->names);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->names));
-  __pyx_v_self->names = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->names);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->names));
+  ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->names = ((struct __pyx_obj_3_sa_IntList *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":9
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":9
  *     def __cinit__(self):
  *         self.names = IntList(INITIAL_CAPACITY, INCREMENT)
  *         self.values = FloatList(INITIAL_CAPACITY, INCREMENT)             # <<<<<<<<<<<<<<
@@ -54184,7 +51968,7 @@ static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_Feature
   __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__INCREMENT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
@@ -54195,9 +51979,9 @@ static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_Feature
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_3);
-  __Pyx_GOTREF(__pyx_v_self->values);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->values));
-  __pyx_v_self->values = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_3);
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->values);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->values));
+  ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->values = ((struct __pyx_obj_3_sa_FloatList *)__pyx_t_3);
   __pyx_t_3 = 0;
 
   __pyx_r = 0;
@@ -54213,39 +51997,52 @@ static int __pyx_pf_3_sa_13FeatureVector___cinit__(struct __pyx_obj_3_sa_Feature
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_13FeatureVector_3set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_3_sa_13FeatureVector_3set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":11
+ *         self.values = FloatList(INITIAL_CAPACITY, INCREMENT)
+ * 
+ *     def set(self, unsigned name, float value):             # <<<<<<<<<<<<<<
+ *         self.names.append(name)
+ *         self.values.append(value)
+ */
+
+static PyObject *__pyx_pf_3_sa_13FeatureVector_1set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_3_sa_13FeatureVector_1set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   unsigned int __pyx_v_name;
   float __pyx_v_value;
-  PyObject *__pyx_r = 0;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("set (wrapper)", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__name,&__pyx_n_s__value,0};
+  __Pyx_RefNannySetupContext("set");
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__name,&__pyx_n_s__value,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
       kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name);
+        if (likely(values[0])) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
+        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value);
+        if (likely(values[1])) kw_args--;
         else {
           __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "set") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -54254,7 +52051,7 @@ static PyObject *__pyx_pw_3_sa_13FeatureVector_3set(PyObject *__pyx_v_self, PyOb
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
     __pyx_v_name = __Pyx_PyInt_AsUnsignedInt(values[0]); if (unlikely((__pyx_v_name == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_value = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_value = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
@@ -54264,30 +52061,8 @@ static PyObject *__pyx_pw_3_sa_13FeatureVector_3set(PyObject *__pyx_v_self, PyOb
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_3_sa_13FeatureVector_2set(((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":11
- *         self.values = FloatList(INITIAL_CAPACITY, INCREMENT)
- * 
- *     def set(self, unsigned name, float value):             # <<<<<<<<<<<<<<
- *         self.names.append(name)
- *         self.values.append(value)
- */
-
-static PyObject *__pyx_pf_3_sa_13FeatureVector_2set(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self, unsigned int __pyx_v_name, float __pyx_v_value) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("set", 0);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":12
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":12
  * 
  *     def set(self, unsigned name, float value):
  *         self.names.append(name)             # <<<<<<<<<<<<<<
@@ -54296,12 +52071,12 @@ static PyObject *__pyx_pf_3_sa_13FeatureVector_2set(struct __pyx_obj_3_sa_Featur
  */
   __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->names), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->names), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":13
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":13
  *     def set(self, unsigned name, float value):
  *         self.names.append(name)
  *         self.values.append(value)             # <<<<<<<<<<<<<<
@@ -54310,7 +52085,7 @@ static PyObject *__pyx_pf_3_sa_13FeatureVector_2set(struct __pyx_obj_3_sa_Featur
  */
   __pyx_t_2 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_Append(((PyObject *)__pyx_v_self->values), __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Append(((PyObject *)((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self)->values), __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -54327,20 +52102,9 @@ static PyObject *__pyx_pf_3_sa_13FeatureVector_2set(struct __pyx_obj_3_sa_Featur
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static PyObject *__pyx_gb_3_sa_13FeatureVector_6generator5(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
+static PyObject *__pyx_gb_3_sa_13FeatureVector_3generator5(struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_13FeatureVector_5__iter__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_13FeatureVector_5__iter__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_13FeatureVector_4__iter__(((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":15
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":15
  *         self.values.append(value)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -54348,45 +52112,36 @@ static PyObject *__pyx_pw_3_sa_13FeatureVector_5__iter__(PyObject *__pyx_v_self)
  *         for i in range(self.names.len):
  */
 
-static PyObject *__pyx_pf_3_sa_13FeatureVector_4__iter__(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_13FeatureVector_2__iter__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_13FeatureVector_2__iter__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__iter__", 0);
+  __Pyx_RefNannySetupContext("__iter__");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *)__pyx_ptype_3_sa___pyx_scope_struct_9___iter__->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_9___iter__, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_13FeatureVector_6generator5, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_13FeatureVector_3generator5;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.FeatureVector.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_13FeatureVector_6generator5(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_13FeatureVector_3generator5(struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   int __pyx_t_1;
   unsigned int __pyx_t_2;
@@ -54395,8 +52150,8 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_6generator5(__pyx_GeneratorObject
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -54406,34 +52161,34 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_6generator5(__pyx_GeneratorObject
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":17
  *     def __iter__(self):
  *         cdef unsigned i
  *         for i in range(self.names.len):             # <<<<<<<<<<<<<<
  *             yield (FD.word(self.names[i]), self.values[i])
  * 
  */
-  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->names->len;
+  __pyx_t_1 = ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_cur_scope->__pyx_v_self)->names->len;
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_cur_scope->__pyx_v_i = __pyx_t_2;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":18
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":18
  *         cdef unsigned i
  *         for i in range(self.names.len):
  *             yield (FD.word(self.names[i]), self.values[i])             # <<<<<<<<<<<<<<
  * 
  *     def __str__(self):
  */
-    __pyx_t_3 = __Pyx_GetItemInt(((PyObject *)__pyx_cur_scope->__pyx_v_self->names), __pyx_cur_scope->__pyx_v_i, sizeof(unsigned int)+1, PyLong_FromUnsignedLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetItemInt(((PyObject *)((struct __pyx_obj_3_sa_FeatureVector *)__pyx_cur_scope->__pyx_v_self)->names), __pyx_cur_scope->__pyx_v_i, sizeof(unsigned int)+1, PyLong_FromUnsignedLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = PyBytes_FromString(((struct __pyx_vtabstruct_3_sa_StringMap *)__pyx_v_3_sa_FD->__pyx_vtab)->word(__pyx_v_3_sa_FD, __pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
-    __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_cur_scope->__pyx_v_self->values), __pyx_cur_scope->__pyx_v_i, sizeof(unsigned int)+1, PyLong_FromUnsignedLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)((struct __pyx_obj_3_sa_FeatureVector *)__pyx_cur_scope->__pyx_v_self)->values), __pyx_cur_scope->__pyx_v_i, sizeof(unsigned int)+1, PyLong_FromUnsignedLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
@@ -54447,14 +52202,14 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_6generator5(__pyx_GeneratorObject
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
     __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
@@ -54463,25 +52218,13 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_6generator5(__pyx_GeneratorObject
   __Pyx_AddTraceback("__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
+static PyObject *__pyx_gb_3_sa_7__str___3generator8(struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */
 
-/* Python wrapper */
-static PyObject *__pyx_pw_3_sa_13FeatureVector_8__str__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_3_sa_13FeatureVector_8__str__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_3_sa_13FeatureVector_7__str__(((struct __pyx_obj_3_sa_FeatureVector *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":21
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":21
  * 
  *     def __str__(self):
  *         return ' '.join('%s=%s' % feat for feat in self)             # <<<<<<<<<<<<<<
@@ -54489,53 +52232,45 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_Genera
  * cdef class Scorer:
  */
 
-static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str___genexpr(PyObject *__pyx_self) {
+static PyObject *__pyx_pf_3_sa_7__str___2genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_3_sa_7__str___2genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("genexpr", 0);
+  __Pyx_RefNannySetupContext("genexpr");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *)__pyx_ptype_3_sa___pyx_scope_struct_11_genexpr->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_11_genexpr, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
-  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *) __pyx_self;
+  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *)__pyx_self;
   __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
-  {
-    __pyx_GeneratorObject *gen = __Pyx_Generator_New((__pyx_generator_body_t) __pyx_gb_3_sa_13FeatureVector_7__str___2generator8, (PyObject *) __pyx_cur_scope); if (unlikely(!gen)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_cur_scope);
-    __Pyx_RefNannyFinishContext();
-    return (PyObject *) gen;
-  }
+  __pyx_self = __pyx_self;
+  __pyx_cur_scope->__pyx_base.resume_label = 0;
+  __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_3_sa_7__str___3generator8;
+  __Pyx_GIVEREF(__pyx_cur_scope);
+  __Pyx_RefNannyFinishContext();
+  return (PyObject *) __pyx_cur_scope;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("_sa.FeatureVector.__str__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_GeneratorObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
+static PyObject *__pyx_gb_3_sa_7__str___3generator8(struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */
 {
-  struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *__pyx_cur_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *)__pyx_generator->closure);
   PyObject *__pyx_r = NULL;
   PyObject *__pyx_t_1 = NULL;
   Py_ssize_t __pyx_t_2;
   PyObject *(*__pyx_t_3)(PyObject *);
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("None", 0);
-  switch (__pyx_generator->resume_label) {
+  __Pyx_RefNannySetupContext("None");
+  switch (__pyx_cur_scope->__pyx_base.resume_label) {
     case 0: goto __pyx_L3_first_run;
     case 1: goto __pyx_L6_resume_from_yield;
     default: /* CPython raises the right error here */
@@ -54544,30 +52279,21 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_Genera
   }
   __pyx_L3_first_run:;
   if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-  if (PyList_CheckExact(((PyObject *)__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self))) {
-    __pyx_t_1 = ((PyObject *)__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
+  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }if (PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) {
+    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -54595,7 +52321,7 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_Genera
     __Pyx_XGIVEREF(__pyx_r);
     __Pyx_RefNannyFinishContext();
     /* return from generator, yielding value */
-    __pyx_generator->resume_label = 1;
+    __pyx_cur_scope->__pyx_base.resume_label = 1;
     return __pyx_r;
     __pyx_L6_resume_from_yield:;
     __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
@@ -54606,7 +52332,7 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_Genera
     if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  PyErr_SetNone(PyExc_StopIteration);
+  PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -54614,13 +52340,12 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_Genera
   __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_r);
-  __pyx_generator->resume_label = -1;
-  __Pyx_Generator_clear((PyObject*)__pyx_generator);
+  __pyx_cur_scope->__pyx_base.resume_label = -1;
   __Pyx_RefNannyFinishContext();
   return NULL;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":20
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":20
  *             yield (FD.word(self.names[i]), self.values[i])
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -54628,7 +52353,8 @@ static PyObject *__pyx_gb_3_sa_13FeatureVector_7__str___2generator8(__pyx_Genera
  * 
  */
 
-static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str__(struct __pyx_obj_3_sa_FeatureVector *__pyx_v_self) {
+static PyObject *__pyx_pf_3_sa_13FeatureVector_4__str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_3_sa_13FeatureVector_4__str__(PyObject *__pyx_v_self) {
   struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *__pyx_cur_scope;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -54638,18 +52364,18 @@ static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str__(struct __pyx_obj_3_sa_Fe
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__str__", 0);
+  __Pyx_RefNannySetupContext("__str__");
   __pyx_cur_scope = (struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *)__pyx_ptype_3_sa___pyx_scope_struct_10___str__->tp_new(__pyx_ptype_3_sa___pyx_scope_struct_10___str__, __pyx_empty_tuple, NULL);
   if (unlikely(!__pyx_cur_scope)) {
     __Pyx_RefNannyFinishContext();
     return NULL;
   }
   __Pyx_GOTREF(__pyx_cur_scope);
+  __Pyx_INCREF(__pyx_v_self);
   __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
-  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":21
  * 
  *     def __str__(self):
  *         return ' '.join('%s=%s' % feat for feat in self)             # <<<<<<<<<<<<<<
@@ -54659,10 +52385,10 @@ static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str__(struct __pyx_obj_3_sa_Fe
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_67), __pyx_n_s__join); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_pf_3_sa_13FeatureVector_7__str___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_pf_3_sa_7__str___2genexpr(((PyObject*)__pyx_cur_scope), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
@@ -54689,23 +52415,7 @@ static PyObject *__pyx_pf_3_sa_13FeatureVector_7__str__(struct __pyx_obj_3_sa_Fe
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_3_sa_6Scorer_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_3_sa_6Scorer_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_models = 0;
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
-  __Pyx_INCREF(__pyx_args);
-  __pyx_v_models = __pyx_args;
-  __pyx_r = __pyx_pf_3_sa_6Scorer___init__(((struct __pyx_obj_3_sa_Scorer *)__pyx_v_self), __pyx_v_models);
-  __Pyx_XDECREF(__pyx_v_models);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":25
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":25
  * cdef class Scorer:
  *     cdef models
  *     def __init__(self, *models):             # <<<<<<<<<<<<<<
@@ -54713,7 +52423,9 @@ static int __pyx_pw_3_sa_6Scorer_1__init__(PyObject *__pyx_v_self, PyObject *__p
  *         self.models = zip(names, models)
  */
 
-static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_self, PyObject *__pyx_v_models) {
+static int __pyx_pf_3_sa_6Scorer___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_3_sa_6Scorer___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_models = 0;
   PyObject *__pyx_v_names = NULL;
   PyObject *__pyx_v_model = NULL;
   int __pyx_r;
@@ -54726,9 +52438,12 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__init__", 0);
+  __Pyx_RefNannySetupContext("__init__");
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
+  __Pyx_INCREF(__pyx_args);
+  __pyx_v_models = __pyx_args;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":26
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":26
  *     cdef models
  *     def __init__(self, *models):
  *         names = [FD.index(<char *>model.__name__) for model in models]             # <<<<<<<<<<<<<<
@@ -54736,15 +52451,14 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
  * 
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  if (unlikely(((PyObject *)__pyx_v_models) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
+  }
   __pyx_t_2 = ((PyObject *)__pyx_v_models); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
   for (;;) {
     if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #else
-    __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #endif
+    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++;
     __Pyx_XDECREF(__pyx_v_model);
     __pyx_v_model = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -54754,7 +52468,7 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = PyInt_FromLong(((struct __pyx_vtabstruct_3_sa_StringMap *)__pyx_v_3_sa_FD->__pyx_vtab)->index(__pyx_v_3_sa_FD, ((char *)__pyx_t_5))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -54762,7 +52476,7 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
   __pyx_v_names = __pyx_t_1;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":27
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":27
  *     def __init__(self, *models):
  *         names = [FD.index(<char *>model.__name__) for model in models]
  *         self.models = zip(names, models)             # <<<<<<<<<<<<<<
@@ -54770,7 +52484,7 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
  *     cdef FeatureVector score(self, ctx):
  */
   __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(((PyObject *)__pyx_v_names));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_names));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_names));
@@ -54781,9 +52495,9 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->models);
-  __Pyx_DECREF(__pyx_v_self->models);
-  __pyx_v_self->models = __pyx_t_2;
+  __Pyx_GOTREF(((struct __pyx_obj_3_sa_Scorer *)__pyx_v_self)->models);
+  __Pyx_DECREF(((struct __pyx_obj_3_sa_Scorer *)__pyx_v_self)->models);
+  ((struct __pyx_obj_3_sa_Scorer *)__pyx_v_self)->models = __pyx_t_2;
   __pyx_t_2 = 0;
 
   __pyx_r = 0;
@@ -54795,13 +52509,14 @@ static int __pyx_pf_3_sa_6Scorer___init__(struct __pyx_obj_3_sa_Scorer *__pyx_v_
   __Pyx_AddTraceback("_sa.Scorer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_models);
   __Pyx_XDECREF(__pyx_v_names);
   __Pyx_XDECREF(__pyx_v_model);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":29
+/* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":29
  *         self.models = zip(names, models)
  * 
  *     cdef FeatureVector score(self, ctx):             # <<<<<<<<<<<<<<
@@ -54826,9 +52541,9 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("score", 0);
+  __Pyx_RefNannySetupContext("score");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":30
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":30
  * 
  *     cdef FeatureVector score(self, ctx):
  *         cdef FeatureVector scores = FeatureVector()             # <<<<<<<<<<<<<<
@@ -54840,7 +52555,7 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
   __pyx_v_scores = ((struct __pyx_obj_3_sa_FeatureVector *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":31
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":31
  *     cdef FeatureVector score(self, ctx):
  *         cdef FeatureVector scores = FeatureVector()
  *         for name, model in self.models:             # <<<<<<<<<<<<<<
@@ -54856,20 +52571,12 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) {
+    if (PyList_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
+    } else if (PyTuple_CheckExact(__pyx_t_1)) {
       if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++;
     } else {
       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
       if (unlikely(!__pyx_t_4)) {
@@ -54883,33 +52590,27 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
       PyObject* sequence = __pyx_t_4;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      Py_ssize_t size = Py_SIZE(sequence);
-      #else
-      Py_ssize_t size = PySequence_Size(sequence);
-      #endif
-      if (unlikely(size != 2)) {
-        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
+        if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
+          if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
       } else {
+        if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
+          if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
+          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
+          {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
         __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
       }
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_6);
-      #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    } else
-    {
+    } else {
       Py_ssize_t index = -1;
       __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
@@ -54920,13 +52621,12 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
       index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
       if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
       __pyx_L5_unpacking_failed:;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_8 = NULL;
-      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
+      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
       {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L6_unpacking_done:;
     }
@@ -54937,7 +52637,7 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
     __pyx_v_model = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":32
+    /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":32
  *         cdef FeatureVector scores = FeatureVector()
  *         for name, model in self.models:
  *             scores.set(name, model(ctx))             # <<<<<<<<<<<<<<
@@ -54946,7 +52646,7 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
     __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_scores), __pyx_n_s__set); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     __Pyx_INCREF(__pyx_v_ctx);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_ctx);
     __Pyx_GIVEREF(__pyx_v_ctx);
@@ -54954,7 +52654,7 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_6));
     __Pyx_INCREF(__pyx_v_name);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
@@ -54969,7 +52669,7 @@ static struct __pyx_obj_3_sa_FeatureVector *__pyx_f_3_sa_6Scorer_score(struct __
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":33
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":33
  *         for name, model in self.models:
  *             scores.set(name, model(ctx))
  *         return scores             # <<<<<<<<<<<<<<
@@ -55005,7 +52705,7 @@ static PyObject *__pyx_tp_new_3_sa_FloatList(PyTypeObject *t, PyObject *a, PyObj
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_FloatList *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_FloatList;
-  if (__pyx_pw_3_sa_9FloatList_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_9FloatList___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -55016,7 +52716,7 @@ static void __pyx_tp_dealloc_3_sa_FloatList(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_9FloatList_3__dealloc__(o);
+    __pyx_pf_3_sa_9FloatList_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -55033,7 +52733,7 @@ static PyObject *__pyx_sq_item_3_sa_FloatList(PyObject *o, Py_ssize_t i) {
 
 static int __pyx_mp_ass_subscript_3_sa_FloatList(PyObject *o, PyObject *i, PyObject *v) {
   if (v) {
-    return __pyx_pw_3_sa_9FloatList_7__setitem__(o, i, v);
+    return __pyx_pf_3_sa_9FloatList_3__setitem__(o, i, v);
   }
   else {
     PyErr_Format(PyExc_NotImplementedError,
@@ -55043,9 +52743,9 @@ static int __pyx_mp_ass_subscript_3_sa_FloatList(PyObject *o, PyObject *i, PyObj
 }
 
 static PyMethodDef __pyx_methods_3_sa_FloatList[] = {
-  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_3_sa_9FloatList_11append, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_3_sa_9FloatList_13write, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_3_sa_9FloatList_15read, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pf_3_sa_9FloatList_5append, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pf_3_sa_9FloatList_6write, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pf_3_sa_9FloatList_7read, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -55108,7 +52808,7 @@ static PyNumberMethods __pyx_tp_as_number_FloatList = {
 };
 
 static PySequenceMethods __pyx_tp_as_sequence_FloatList = {
-  __pyx_pw_3_sa_9FloatList_9__len__, /*sq_length*/
+  __pyx_pf_3_sa_9FloatList_4__len__, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
   __pyx_sq_item_3_sa_FloatList, /*sq_item*/
@@ -55121,8 +52821,8 @@ static PySequenceMethods __pyx_tp_as_sequence_FloatList = {
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_FloatList = {
-  __pyx_pw_3_sa_9FloatList_9__len__, /*mp_length*/
-  __pyx_pw_3_sa_9FloatList_5__getitem__, /*mp_subscript*/
+  __pyx_pf_3_sa_9FloatList_4__len__, /*mp_length*/
+  __pyx_pf_3_sa_9FloatList_2__getitem__, /*mp_subscript*/
   __pyx_mp_ass_subscript_3_sa_FloatList, /*mp_ass_subscript*/
 };
 
@@ -55210,7 +52910,7 @@ static PyObject *__pyx_tp_new_3_sa_IntList(PyTypeObject *t, PyObject *a, PyObjec
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_IntList *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_IntList;
-  if (__pyx_pw_3_sa_7IntList_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_7IntList___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -55221,7 +52921,7 @@ static void __pyx_tp_dealloc_3_sa_IntList(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_7IntList_15__dealloc__(o);
+    __pyx_pf_3_sa_7IntList_7__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -55238,7 +52938,7 @@ static PyObject *__pyx_sq_item_3_sa_IntList(PyObject *o, Py_ssize_t i) {
 
 static int __pyx_mp_ass_subscript_3_sa_IntList(PyObject *o, PyObject *i, PyObject *v) {
   if (v) {
-    return __pyx_pw_3_sa_7IntList_22__setitem__(o, i, v);
+    return __pyx_pf_3_sa_7IntList_11__setitem__(o, i, v);
   }
   else {
     PyErr_Format(PyExc_NotImplementedError,
@@ -55248,16 +52948,16 @@ static int __pyx_mp_ass_subscript_3_sa_IntList(PyObject *o, PyObject *i, PyObjec
 }
 
 static PyMethodDef __pyx_methods_3_sa_IntList[] = {
-  {__Pyx_NAMESTR("index"), (PyCFunction)__pyx_pw_3_sa_7IntList_5index, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("partition"), (PyCFunction)__pyx_pw_3_sa_7IntList_7partition, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("_doquicksort"), (PyCFunction)__pyx_pw_3_sa_7IntList_9_doquicksort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("sort"), (PyCFunction)__pyx_pw_3_sa_7IntList_11sort, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("reset"), (PyCFunction)__pyx_pw_3_sa_7IntList_13reset, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getSize"), (PyCFunction)__pyx_pw_3_sa_7IntList_26getSize, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_3_sa_7IntList_28append, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pw_3_sa_7IntList_30extend, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_3_sa_7IntList_32write, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_3_sa_7IntList_34read, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("index"), (PyCFunction)__pyx_pf_3_sa_7IntList_2index, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("partition"), (PyCFunction)__pyx_pf_3_sa_7IntList_3partition, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("_doquicksort"), (PyCFunction)__pyx_pf_3_sa_7IntList_4_doquicksort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("sort"), (PyCFunction)__pyx_pf_3_sa_7IntList_5sort, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("reset"), (PyCFunction)__pyx_pf_3_sa_7IntList_6reset, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSize"), (PyCFunction)__pyx_pf_3_sa_7IntList_13getSize, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pf_3_sa_7IntList_14append, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pf_3_sa_7IntList_15extend, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pf_3_sa_7IntList_16write, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pf_3_sa_7IntList_17read, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -55320,7 +53020,7 @@ static PyNumberMethods __pyx_tp_as_number_IntList = {
 };
 
 static PySequenceMethods __pyx_tp_as_sequence_IntList = {
-  __pyx_pw_3_sa_7IntList_24__len__, /*sq_length*/
+  __pyx_pf_3_sa_7IntList_12__len__, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
   __pyx_sq_item_3_sa_IntList, /*sq_item*/
@@ -55333,8 +53033,8 @@ static PySequenceMethods __pyx_tp_as_sequence_IntList = {
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_IntList = {
-  __pyx_pw_3_sa_7IntList_24__len__, /*mp_length*/
-  __pyx_pw_3_sa_7IntList_20__getitem__, /*mp_subscript*/
+  __pyx_pf_3_sa_7IntList_12__len__, /*mp_length*/
+  __pyx_pf_3_sa_7IntList_10__getitem__, /*mp_subscript*/
   __pyx_mp_ass_subscript_3_sa_IntList, /*mp_ass_subscript*/
 };
 
@@ -55379,7 +53079,7 @@ static PyTypeObject __pyx_type_3_sa_IntList = {
   &__pyx_tp_as_mapping_IntList, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_3_sa_7IntList_3__str__, /*tp_str*/
+  __pyx_pf_3_sa_7IntList_1__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   &__pyx_tp_as_buffer_IntList, /*tp_as_buffer*/
@@ -55389,7 +53089,7 @@ static PyTypeObject __pyx_type_3_sa_IntList = {
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_3_sa_7IntList_17__iter__, /*tp_iter*/
+  __pyx_pf_3_sa_7IntList_8__iter__, /*tp_iter*/
   0, /*tp_iternext*/
   __pyx_methods_3_sa_IntList, /*tp_methods*/
   0, /*tp_members*/
@@ -55415,14 +53115,14 @@ static PyTypeObject __pyx_type_3_sa_IntList = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa_FeatureVector(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_FeatureVector(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa_FeatureVector *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_FeatureVector *)o);
   p->names = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->values = ((struct __pyx_obj_3_sa_FloatList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_13FeatureVector_1__cinit__(o, __pyx_empty_tuple, NULL) < 0) {
+  if (__pyx_pf_3_sa_13FeatureVector___cinit__(o, __pyx_empty_tuple, NULL) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -55430,8 +53130,8 @@ static PyObject *__pyx_tp_new_3_sa_FeatureVector(PyTypeObject *t, CYTHON_UNUSED
 
 static void __pyx_tp_dealloc_3_sa_FeatureVector(PyObject *o) {
   struct __pyx_obj_3_sa_FeatureVector *p = (struct __pyx_obj_3_sa_FeatureVector *)o;
-  Py_CLEAR(p->names);
-  Py_CLEAR(p->values);
+  Py_XDECREF(((PyObject *)p->names));
+  Py_XDECREF(((PyObject *)p->values));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -55460,7 +53160,7 @@ static int __pyx_tp_clear_3_sa_FeatureVector(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_FeatureVector[] = {
-  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_3_sa_13FeatureVector_3set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pf_3_sa_13FeatureVector_1set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -55582,7 +53282,7 @@ static PyTypeObject __pyx_type_3_sa_FeatureVector = {
   &__pyx_tp_as_mapping_FeatureVector, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_3_sa_13FeatureVector_8__str__, /*tp_str*/
+  __pyx_pf_3_sa_13FeatureVector_4__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   &__pyx_tp_as_buffer_FeatureVector, /*tp_as_buffer*/
@@ -55592,7 +53292,7 @@ static PyTypeObject __pyx_type_3_sa_FeatureVector = {
   __pyx_tp_clear_3_sa_FeatureVector, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_3_sa_13FeatureVector_5__iter__, /*tp_iter*/
+  __pyx_pf_3_sa_13FeatureVector_2__iter__, /*tp_iter*/
   0, /*tp_iternext*/
   __pyx_methods_3_sa_FeatureVector, /*tp_methods*/
   0, /*tp_members*/
@@ -55625,7 +53325,7 @@ static PyObject *__pyx_tp_new_3_sa_Phrase(PyTypeObject *t, PyObject *a, PyObject
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_Phrase *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_Phrase;
-  if (__pyx_pw_3_sa_6Phrase_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_6Phrase___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -55636,7 +53336,7 @@ static void __pyx_tp_dealloc_3_sa_Phrase(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_6Phrase_3__dealloc__(o);
+    __pyx_pf_3_sa_6Phrase_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -55651,19 +53351,19 @@ static PyObject *__pyx_sq_item_3_sa_Phrase(PyObject *o, Py_ssize_t i) {
   return r;
 }
 
-static PyObject *__pyx_getprop_3_sa_6Phrase_words(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_6Phrase_5words_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_6Phrase_words(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_6Phrase_5words___get__(o);
 }
 
 static PyMethodDef __pyx_methods_3_sa_Phrase[] = {
-  {__Pyx_NAMESTR("handle"), (PyCFunction)__pyx_pw_3_sa_6Phrase_7handle, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3_sa_6Phrase_6handle)},
-  {__Pyx_NAMESTR("strhandle"), (PyCFunction)__pyx_pw_3_sa_6Phrase_9strhandle, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("arity"), (PyCFunction)__pyx_pw_3_sa_6Phrase_11arity, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getvarpos"), (PyCFunction)__pyx_pw_3_sa_6Phrase_13getvarpos, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getvar"), (PyCFunction)__pyx_pw_3_sa_6Phrase_15getvar, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("clen"), (PyCFunction)__pyx_pw_3_sa_6Phrase_17clen, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getchunk"), (PyCFunction)__pyx_pw_3_sa_6Phrase_19getchunk, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("subst"), (PyCFunction)__pyx_pw_3_sa_6Phrase_32subst, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("handle"), (PyCFunction)__pyx_pf_3_sa_6Phrase_3handle, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3_sa_6Phrase_3handle)},
+  {__Pyx_NAMESTR("strhandle"), (PyCFunction)__pyx_pf_3_sa_6Phrase_4strhandle, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("arity"), (PyCFunction)__pyx_pf_3_sa_6Phrase_5arity, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getvarpos"), (PyCFunction)__pyx_pf_3_sa_6Phrase_6getvarpos, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getvar"), (PyCFunction)__pyx_pf_3_sa_6Phrase_7getvar, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("clen"), (PyCFunction)__pyx_pf_3_sa_6Phrase_8clen, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getchunk"), (PyCFunction)__pyx_pf_3_sa_6Phrase_9getchunk, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("subst"), (PyCFunction)__pyx_pf_3_sa_6Phrase_16subst, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -55731,7 +53431,7 @@ static PyNumberMethods __pyx_tp_as_number_Phrase = {
 };
 
 static PySequenceMethods __pyx_tp_as_sequence_Phrase = {
-  __pyx_pw_3_sa_6Phrase_25__len__, /*sq_length*/
+  __pyx_pf_3_sa_6Phrase_12__len__, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
   __pyx_sq_item_3_sa_Phrase, /*sq_item*/
@@ -55744,8 +53444,8 @@ static PySequenceMethods __pyx_tp_as_sequence_Phrase = {
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_Phrase = {
-  __pyx_pw_3_sa_6Phrase_25__len__, /*mp_length*/
-  __pyx_pw_3_sa_6Phrase_27__getitem__, /*mp_subscript*/
+  __pyx_pf_3_sa_6Phrase_12__len__, /*mp_length*/
+  __pyx_pf_3_sa_6Phrase_13__getitem__, /*mp_subscript*/
   0, /*mp_ass_subscript*/
 };
 
@@ -55780,7 +53480,7 @@ static PyTypeObject __pyx_type_3_sa_Phrase = {
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_pw_3_sa_6Phrase_21__cmp__, /*tp_compare*/
+  __pyx_pf_3_sa_6Phrase_10__cmp__, /*tp_compare*/
   #else
   0, /*reserved*/
   #endif
@@ -55788,9 +53488,9 @@ static PyTypeObject __pyx_type_3_sa_Phrase = {
   &__pyx_tp_as_number_Phrase, /*tp_as_number*/
   &__pyx_tp_as_sequence_Phrase, /*tp_as_sequence*/
   &__pyx_tp_as_mapping_Phrase, /*tp_as_mapping*/
-  __pyx_pw_3_sa_6Phrase_23__hash__, /*tp_hash*/
+  __pyx_pf_3_sa_6Phrase_11__hash__, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_3_sa_6Phrase_5__str__, /*tp_str*/
+  __pyx_pf_3_sa_6Phrase_2__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   &__pyx_tp_as_buffer_Phrase, /*tp_as_buffer*/
@@ -55800,7 +53500,7 @@ static PyTypeObject __pyx_type_3_sa_Phrase = {
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_3_sa_6Phrase_29__iter__, /*tp_iter*/
+  __pyx_pf_3_sa_6Phrase_14__iter__, /*tp_iter*/
   0, /*tp_iternext*/
   __pyx_methods_3_sa_Phrase, /*tp_methods*/
   0, /*tp_members*/
@@ -55835,7 +53535,7 @@ static PyObject *__pyx_tp_new_3_sa_Rule(PyTypeObject *t, PyObject *a, PyObject *
   p->e = ((struct __pyx_obj_3_sa_Phrase *)Py_None); Py_INCREF(Py_None);
   p->scores = ((struct __pyx_obj_3_sa_FeatureVector *)Py_None); Py_INCREF(Py_None);
   p->word_alignments = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_4Rule_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_4Rule___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -55843,10 +53543,10 @@ static PyObject *__pyx_tp_new_3_sa_Rule(PyTypeObject *t, PyObject *a, PyObject *
 
 static void __pyx_tp_dealloc_3_sa_Rule(PyObject *o) {
   struct __pyx_obj_3_sa_Rule *p = (struct __pyx_obj_3_sa_Rule *)o;
-  Py_CLEAR(p->f);
-  Py_CLEAR(p->e);
-  Py_CLEAR(p->scores);
-  Py_CLEAR(p->word_alignments);
+  Py_XDECREF(((PyObject *)p->f));
+  Py_XDECREF(((PyObject *)p->e));
+  Py_XDECREF(((PyObject *)p->scores));
+  Py_XDECREF(p->word_alignments);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -55886,18 +53586,18 @@ static int __pyx_tp_clear_3_sa_Rule(PyObject *o) {
   return 0;
 }
 
-static PyObject *__pyx_getprop_3_sa_4Rule_f(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_4Rule_1f_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_4Rule_f(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_4Rule_1f___get__(o);
 }
 
-static PyObject *__pyx_getprop_3_sa_4Rule_e(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_4Rule_1e_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_4Rule_e(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_4Rule_1e___get__(o);
 }
 
 static PyMethodDef __pyx_methods_3_sa_Rule[] = {
-  {__Pyx_NAMESTR("fmerge"), (PyCFunction)__pyx_pw_3_sa_4Rule_7fmerge, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("arity"), (PyCFunction)__pyx_pw_3_sa_4Rule_9arity, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("alignments"), (PyCFunction)__pyx_pw_3_sa_4Rule_13alignments, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("fmerge"), (PyCFunction)__pyx_pf_3_sa_4Rule_3fmerge, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("arity"), (PyCFunction)__pyx_pf_3_sa_4Rule_4arity, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("alignments"), (PyCFunction)__pyx_pf_3_sa_4Rule_6alignments, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -56015,7 +53715,7 @@ static PyTypeObject __pyx_type_3_sa_Rule = {
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_pw_3_sa_4Rule_5__cmp__, /*tp_compare*/
+  __pyx_pf_3_sa_4Rule_2__cmp__, /*tp_compare*/
   #else
   0, /*reserved*/
   #endif
@@ -56023,9 +53723,9 @@ static PyTypeObject __pyx_type_3_sa_Rule = {
   &__pyx_tp_as_number_Rule, /*tp_as_number*/
   &__pyx_tp_as_sequence_Rule, /*tp_as_sequence*/
   &__pyx_tp_as_mapping_Rule, /*tp_as_mapping*/
-  __pyx_pw_3_sa_4Rule_3__hash__, /*tp_hash*/
+  __pyx_pf_3_sa_4Rule_1__hash__, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_3_sa_4Rule_11__str__, /*tp_str*/
+  __pyx_pf_3_sa_4Rule_5__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   &__pyx_tp_as_buffer_Rule, /*tp_as_buffer*/
@@ -56062,13 +53762,13 @@ static PyTypeObject __pyx_type_3_sa_Rule = {
 };
 static struct __pyx_vtabstruct_3_sa_StringMap __pyx_vtable_3_sa_StringMap;
 
-static PyObject *__pyx_tp_new_3_sa_StringMap(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_StringMap(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa_StringMap *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_StringMap *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_StringMap;
-  if (__pyx_pw_3_sa_9StringMap_1__cinit__(o, __pyx_empty_tuple, NULL) < 0) {
+  if (__pyx_pf_3_sa_9StringMap___cinit__(o, __pyx_empty_tuple, NULL) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -56079,7 +53779,7 @@ static void __pyx_tp_dealloc_3_sa_StringMap(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_9StringMap_3__dealloc__(o);
+    __pyx_pf_3_sa_9StringMap_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -56257,7 +53957,7 @@ static PyObject *__pyx_tp_new_3_sa_DataArray(PyTypeObject *t, PyObject *a, PyObj
   p->data = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->sent_id = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->sent_index = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_9DataArray_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_9DataArray___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -56265,11 +53965,11 @@ static PyObject *__pyx_tp_new_3_sa_DataArray(PyTypeObject *t, PyObject *a, PyObj
 
 static void __pyx_tp_dealloc_3_sa_DataArray(PyObject *o) {
   struct __pyx_obj_3_sa_DataArray *p = (struct __pyx_obj_3_sa_DataArray *)o;
-  Py_CLEAR(p->word2id);
-  Py_CLEAR(p->id2word);
-  Py_CLEAR(p->data);
-  Py_CLEAR(p->sent_id);
-  Py_CLEAR(p->sent_index);
+  Py_XDECREF(p->word2id);
+  Py_XDECREF(p->id2word);
+  Py_XDECREF(((PyObject *)p->data));
+  Py_XDECREF(((PyObject *)p->sent_id));
+  Py_XDECREF(((PyObject *)p->sent_index));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -56316,19 +54016,19 @@ static int __pyx_tp_clear_3_sa_DataArray(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_DataArray[] = {
-  {__Pyx_NAMESTR("getSentId"), (PyCFunction)__pyx_pw_3_sa_9DataArray_5getSentId, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getSent"), (PyCFunction)__pyx_pw_3_sa_9DataArray_7getSent, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getSentPos"), (PyCFunction)__pyx_pw_3_sa_9DataArray_9getSentPos, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_id"), (PyCFunction)__pyx_pw_3_sa_9DataArray_11get_id, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_word"), (PyCFunction)__pyx_pw_3_sa_9DataArray_13get_word, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pw_3_sa_9DataArray_15write_text, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pw_3_sa_9DataArray_17read_text, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_bitext"), (PyCFunction)__pyx_pw_3_sa_9DataArray_19read_bitext, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_text_data"), (PyCFunction)__pyx_pw_3_sa_9DataArray_21read_text_data, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pw_3_sa_9DataArray_23read_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pw_3_sa_9DataArray_25write_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_enhanced_handle"), (PyCFunction)__pyx_pw_3_sa_9DataArray_27write_enhanced_handle, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pw_3_sa_9DataArray_29write_enhanced, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSentId"), (PyCFunction)__pyx_pf_3_sa_9DataArray_2getSentId, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSent"), (PyCFunction)__pyx_pf_3_sa_9DataArray_3getSent, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSentPos"), (PyCFunction)__pyx_pf_3_sa_9DataArray_4getSentPos, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_id"), (PyCFunction)__pyx_pf_3_sa_9DataArray_5get_id, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_word"), (PyCFunction)__pyx_pf_3_sa_9DataArray_6get_word, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pf_3_sa_9DataArray_7write_text, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pf_3_sa_9DataArray_8read_text, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_bitext"), (PyCFunction)__pyx_pf_3_sa_9DataArray_9read_bitext, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_text_data"), (PyCFunction)__pyx_pf_3_sa_9DataArray_10read_text_data, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pf_3_sa_9DataArray_11read_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pf_3_sa_9DataArray_12write_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_enhanced_handle"), (PyCFunction)__pyx_pf_3_sa_9DataArray_13write_enhanced_handle, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pf_3_sa_9DataArray_14write_enhanced, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -56391,7 +54091,7 @@ static PyNumberMethods __pyx_tp_as_number_DataArray = {
 };
 
 static PySequenceMethods __pyx_tp_as_sequence_DataArray = {
-  __pyx_pw_3_sa_9DataArray_3__len__, /*sq_length*/
+  __pyx_pf_3_sa_9DataArray_1__len__, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
   0, /*sq_item*/
@@ -56404,7 +54104,7 @@ static PySequenceMethods __pyx_tp_as_sequence_DataArray = {
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_DataArray = {
-  __pyx_pw_3_sa_9DataArray_3__len__, /*mp_length*/
+  __pyx_pf_3_sa_9DataArray_1__len__, /*mp_length*/
   0, /*mp_subscript*/
   0, /*mp_ass_subscript*/
 };
@@ -56495,7 +54195,7 @@ static PyObject *__pyx_tp_new_3_sa_Alignment(PyTypeObject *t, PyObject *a, PyObj
   p->__pyx_vtab = __pyx_vtabptr_3_sa_Alignment;
   p->links = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->sent_index = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_9Alignment_5__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_9Alignment_2__cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -56503,8 +54203,8 @@ static PyObject *__pyx_tp_new_3_sa_Alignment(PyTypeObject *t, PyObject *a, PyObj
 
 static void __pyx_tp_dealloc_3_sa_Alignment(PyObject *o) {
   struct __pyx_obj_3_sa_Alignment *p = (struct __pyx_obj_3_sa_Alignment *)o;
-  Py_CLEAR(p->links);
-  Py_CLEAR(p->sent_index);
+  Py_XDECREF(((PyObject *)p->links));
+  Py_XDECREF(((PyObject *)p->sent_index));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -56533,14 +54233,14 @@ static int __pyx_tp_clear_3_sa_Alignment(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_Alignment[] = {
-  {__Pyx_NAMESTR("unlink"), (PyCFunction)__pyx_pw_3_sa_9Alignment_1unlink, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_9Alignment_unlink)},
-  {__Pyx_NAMESTR("get_sent_links"), (PyCFunction)__pyx_pw_3_sa_9Alignment_3get_sent_links, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pw_3_sa_9Alignment_7read_text, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pw_3_sa_9Alignment_9read_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pw_3_sa_9Alignment_11write_text, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pw_3_sa_9Alignment_13write_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pw_3_sa_9Alignment_15write_enhanced, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("alignment"), (PyCFunction)__pyx_pw_3_sa_9Alignment_17alignment, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_9Alignment_16alignment)},
+  {__Pyx_NAMESTR("unlink"), (PyCFunction)__pyx_pf_3_sa_9Alignment_unlink, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_9Alignment_unlink)},
+  {__Pyx_NAMESTR("get_sent_links"), (PyCFunction)__pyx_pf_3_sa_9Alignment_1get_sent_links, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pf_3_sa_9Alignment_3read_text, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pf_3_sa_9Alignment_4read_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pf_3_sa_9Alignment_5write_text, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pf_3_sa_9Alignment_6write_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pf_3_sa_9Alignment_7write_enhanced, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("alignment"), (PyCFunction)__pyx_pf_3_sa_9Alignment_8alignment, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_9Alignment_8alignment)},
   {0, 0, 0, 0}
 };
 
@@ -56713,7 +54413,7 @@ static PyObject *__pyx_tp_new_3_sa_BiLex(PyTypeObject *t, PyObject *a, PyObject
   p->id2fword = Py_None; Py_INCREF(Py_None);
   p->eword2id = Py_None; Py_INCREF(Py_None);
   p->fword2id = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_5BiLex_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_5BiLex___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -56721,14 +54421,14 @@ static PyObject *__pyx_tp_new_3_sa_BiLex(PyTypeObject *t, PyObject *a, PyObject
 
 static void __pyx_tp_dealloc_3_sa_BiLex(PyObject *o) {
   struct __pyx_obj_3_sa_BiLex *p = (struct __pyx_obj_3_sa_BiLex *)o;
-  Py_CLEAR(p->col1);
-  Py_CLEAR(p->col2);
-  Py_CLEAR(p->f_index);
-  Py_CLEAR(p->e_index);
-  Py_CLEAR(p->id2eword);
-  Py_CLEAR(p->id2fword);
-  Py_CLEAR(p->eword2id);
-  Py_CLEAR(p->fword2id);
+  Py_XDECREF(((PyObject *)p->col1));
+  Py_XDECREF(((PyObject *)p->col2));
+  Py_XDECREF(((PyObject *)p->f_index));
+  Py_XDECREF(((PyObject *)p->e_index));
+  Py_XDECREF(p->id2eword);
+  Py_XDECREF(p->id2fword);
+  Py_XDECREF(p->eword2id);
+  Py_XDECREF(p->fword2id);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -56793,14 +54493,14 @@ static int __pyx_tp_clear_3_sa_BiLex(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_BiLex[] = {
-  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pw_3_sa_5BiLex_3write_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pw_3_sa_5BiLex_5read_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_e_id"), (PyCFunction)__pyx_pw_3_sa_5BiLex_7get_e_id, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_f_id"), (PyCFunction)__pyx_pw_3_sa_5BiLex_9get_f_id, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pw_3_sa_5BiLex_11read_text, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pw_3_sa_5BiLex_13write_enhanced, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_score"), (PyCFunction)__pyx_pw_3_sa_5BiLex_15get_score, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pw_3_sa_5BiLex_17write_text, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_5BiLex_16write_text)},
+  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pf_3_sa_5BiLex_1write_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pf_3_sa_5BiLex_2read_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_e_id"), (PyCFunction)__pyx_pf_3_sa_5BiLex_3get_e_id, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_f_id"), (PyCFunction)__pyx_pf_3_sa_5BiLex_4get_f_id, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pf_3_sa_5BiLex_5read_text, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pf_3_sa_5BiLex_6write_enhanced, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_score"), (PyCFunction)__pyx_pf_3_sa_5BiLex_7get_score, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pf_3_sa_5BiLex_8write_text, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_5BiLex_8write_text)},
   {0, 0, 0, 0}
 };
 
@@ -56958,7 +54658,7 @@ static PyTypeObject __pyx_type_3_sa_BiLex = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa_BitSetIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_BitSetIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
   return o;
@@ -56969,7 +54669,7 @@ static void __pyx_tp_dealloc_3_sa_BitSetIterator(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_BitSetIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_3_sa_14BitSetIterator_1__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pf_3_sa_14BitSetIterator___next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -57102,7 +54802,7 @@ static PyTypeObject __pyx_type_3_sa_BitSetIterator = {
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
-  __pyx_pw_3_sa_14BitSetIterator_1__next__, /*tp_iternext*/
+  __pyx_pf_3_sa_14BitSetIterator___next__, /*tp_iternext*/
   __pyx_methods_3_sa_BitSetIterator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
@@ -57127,10 +54827,10 @@ static PyTypeObject __pyx_type_3_sa_BitSetIterator = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa_BitSet(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_BitSet(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
-  if (__pyx_pw_3_sa_6BitSet_1__cinit__(o, __pyx_empty_tuple, NULL) < 0) {
+  if (__pyx_pf_3_sa_6BitSet___cinit__(o, __pyx_empty_tuple, NULL) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -57141,7 +54841,7 @@ static void __pyx_tp_dealloc_3_sa_BitSet(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_6BitSet_3__dealloc__(o);
+    __pyx_pf_3_sa_6BitSet_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -57150,10 +54850,10 @@ static void __pyx_tp_dealloc_3_sa_BitSet(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_BitSet[] = {
-  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_3_sa_6BitSet_7insert, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("findsucc"), (PyCFunction)__pyx_pw_3_sa_6BitSet_9findsucc, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("min"), (PyCFunction)__pyx_pw_3_sa_6BitSet_13min, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("max"), (PyCFunction)__pyx_pw_3_sa_6BitSet_15max, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pf_3_sa_6BitSet_3insert, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("findsucc"), (PyCFunction)__pyx_pf_3_sa_6BitSet_4findsucc, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("min"), (PyCFunction)__pyx_pf_3_sa_6BitSet_6min, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("max"), (PyCFunction)__pyx_pf_3_sa_6BitSet_7max, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -57216,20 +54916,20 @@ static PyNumberMethods __pyx_tp_as_number_BitSet = {
 };
 
 static PySequenceMethods __pyx_tp_as_sequence_BitSet = {
-  __pyx_pw_3_sa_6BitSet_17__len__, /*sq_length*/
+  __pyx_pf_3_sa_6BitSet_8__len__, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
   0, /*sq_item*/
   0, /*sq_slice*/
   0, /*sq_ass_item*/
   0, /*sq_ass_slice*/
-  __pyx_pw_3_sa_6BitSet_19__contains__, /*sq_contains*/
+  __pyx_pf_3_sa_6BitSet_9__contains__, /*sq_contains*/
   0, /*sq_inplace_concat*/
   0, /*sq_inplace_repeat*/
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_BitSet = {
-  __pyx_pw_3_sa_6BitSet_17__len__, /*mp_length*/
+  __pyx_pf_3_sa_6BitSet_8__len__, /*mp_length*/
   0, /*mp_subscript*/
   0, /*mp_ass_subscript*/
 };
@@ -57275,7 +54975,7 @@ static PyTypeObject __pyx_type_3_sa_BitSet = {
   &__pyx_tp_as_mapping_BitSet, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_3_sa_6BitSet_11__str__, /*tp_str*/
+  __pyx_pf_3_sa_6BitSet_5__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   &__pyx_tp_as_buffer_BitSet, /*tp_as_buffer*/
@@ -57285,7 +54985,7 @@ static PyTypeObject __pyx_type_3_sa_BitSet = {
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_3_sa_6BitSet_5__iter__, /*tp_iter*/
+  __pyx_pf_3_sa_6BitSet_2__iter__, /*tp_iter*/
   0, /*tp_iternext*/
   __pyx_methods_3_sa_BitSet, /*tp_methods*/
   0, /*tp_members*/
@@ -57311,7 +55011,7 @@ static PyTypeObject __pyx_type_3_sa_BitSet = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa_VEBIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_VEBIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
   return o;
@@ -57322,7 +55022,7 @@ static void __pyx_tp_dealloc_3_sa_VEBIterator(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_VEBIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_3_sa_11VEBIterator_1__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pf_3_sa_11VEBIterator___next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -57455,7 +55155,7 @@ static PyTypeObject __pyx_type_3_sa_VEBIterator = {
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
-  __pyx_pw_3_sa_11VEBIterator_1__next__, /*tp_iternext*/
+  __pyx_pf_3_sa_11VEBIterator___next__, /*tp_iternext*/
   __pyx_methods_3_sa_VEBIterator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
@@ -57487,7 +55187,7 @@ static PyObject *__pyx_tp_new_3_sa_VEB(PyTypeObject *t, PyObject *a, PyObject *k
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_VEB *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_VEB;
-  if (__pyx_pw_3_sa_3VEB_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_3VEB___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -57498,7 +55198,7 @@ static void __pyx_tp_dealloc_3_sa_VEB(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_3VEB_3__dealloc__(o);
+    __pyx_pf_3_sa_3VEB_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -57507,8 +55207,8 @@ static void __pyx_tp_dealloc_3_sa_VEB(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_VEB[] = {
-  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_3_sa_3VEB_7insert, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("findsucc"), (PyCFunction)__pyx_pw_3_sa_3VEB_9findsucc, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pf_3_sa_3VEB_3insert, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("findsucc"), (PyCFunction)__pyx_pf_3_sa_3VEB_4findsucc, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -57571,20 +55271,20 @@ static PyNumberMethods __pyx_tp_as_number_VEB = {
 };
 
 static PySequenceMethods __pyx_tp_as_sequence_VEB = {
-  __pyx_pw_3_sa_3VEB_11__len__, /*sq_length*/
+  __pyx_pf_3_sa_3VEB_5__len__, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
   0, /*sq_item*/
   0, /*sq_slice*/
   0, /*sq_ass_item*/
   0, /*sq_ass_slice*/
-  __pyx_pw_3_sa_3VEB_13__contains__, /*sq_contains*/
+  __pyx_pf_3_sa_3VEB_6__contains__, /*sq_contains*/
   0, /*sq_inplace_concat*/
   0, /*sq_inplace_repeat*/
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_VEB = {
-  __pyx_pw_3_sa_3VEB_11__len__, /*mp_length*/
+  __pyx_pf_3_sa_3VEB_5__len__, /*mp_length*/
   0, /*mp_subscript*/
   0, /*mp_ass_subscript*/
 };
@@ -57640,7 +55340,7 @@ static PyTypeObject __pyx_type_3_sa_VEB = {
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_3_sa_3VEB_5__iter__, /*tp_iter*/
+  __pyx_pf_3_sa_3VEB_2__iter__, /*tp_iter*/
   0, /*tp_iternext*/
   __pyx_methods_3_sa_VEB, /*tp_methods*/
   0, /*tp_members*/
@@ -57673,7 +55373,7 @@ static PyObject *__pyx_tp_new_3_sa_LCP(PyTypeObject *t, PyObject *a, PyObject *k
   p = ((struct __pyx_obj_3_sa_LCP *)o);
   p->sa = ((struct __pyx_obj_3_sa_SuffixArray *)Py_None); Py_INCREF(Py_None);
   p->lcp = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_3LCP_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_3LCP___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -57681,8 +55381,8 @@ static PyObject *__pyx_tp_new_3_sa_LCP(PyTypeObject *t, PyObject *a, PyObject *k
 
 static void __pyx_tp_dealloc_3_sa_LCP(PyObject *o) {
   struct __pyx_obj_3_sa_LCP *p = (struct __pyx_obj_3_sa_LCP *)o;
-  Py_CLEAR(p->sa);
-  Py_CLEAR(p->lcp);
+  Py_XDECREF(((PyObject *)p->sa));
+  Py_XDECREF(((PyObject *)p->lcp));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -57711,7 +55411,7 @@ static int __pyx_tp_clear_3_sa_LCP(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_LCP[] = {
-  {__Pyx_NAMESTR("compute_stats"), (PyCFunction)__pyx_pw_3_sa_3LCP_3compute_stats, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_3LCP_2compute_stats)},
+  {__Pyx_NAMESTR("compute_stats"), (PyCFunction)__pyx_pf_3_sa_3LCP_1compute_stats, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_3LCP_1compute_stats)},
   {0, 0, 0, 0}
 };
 
@@ -57870,7 +55570,7 @@ static PyTypeObject __pyx_type_3_sa_LCP = {
 };
 static struct __pyx_vtabstruct_3_sa_Alphabet __pyx_vtable_3_sa_Alphabet;
 
-static PyObject *__pyx_tp_new_3_sa_Alphabet(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_Alphabet(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa_Alphabet *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
@@ -57879,7 +55579,7 @@ static PyObject *__pyx_tp_new_3_sa_Alphabet(PyTypeObject *t, CYTHON_UNUSED PyObj
   p->terminals = ((struct __pyx_obj_3_sa_StringMap *)Py_None); Py_INCREF(Py_None);
   p->nonterminals = ((struct __pyx_obj_3_sa_StringMap *)Py_None); Py_INCREF(Py_None);
   p->id2sym = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_8Alphabet_1__cinit__(o, __pyx_empty_tuple, NULL) < 0) {
+  if (__pyx_pf_3_sa_8Alphabet___cinit__(o, __pyx_empty_tuple, NULL) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -57891,14 +55591,14 @@ static void __pyx_tp_dealloc_3_sa_Alphabet(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_8Alphabet_3__dealloc__(o);
+    __pyx_pf_3_sa_8Alphabet_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
   }
-  Py_CLEAR(p->terminals);
-  Py_CLEAR(p->nonterminals);
-  Py_CLEAR(p->id2sym);
+  Py_XDECREF(((PyObject *)p->terminals));
+  Py_XDECREF(((PyObject *)p->nonterminals));
+  Py_XDECREF(((PyObject *)p->id2sym));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -57932,12 +55632,12 @@ static int __pyx_tp_clear_3_sa_Alphabet(PyObject *o) {
   return 0;
 }
 
-static PyObject *__pyx_getprop_3_sa_8Alphabet_terminals(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_8Alphabet_9terminals_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_8Alphabet_terminals(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_8Alphabet_9terminals___get__(o);
 }
 
-static PyObject *__pyx_getprop_3_sa_8Alphabet_nonterminals(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_8Alphabet_12nonterminals_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_8Alphabet_nonterminals(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_8Alphabet_12nonterminals___get__(o);
 }
 
 static PyMethodDef __pyx_methods_3_sa_Alphabet[] = {
@@ -58111,7 +55811,7 @@ static PyObject *__pyx_tp_new_3_sa_TrieMap(PyTypeObject *t, PyObject *a, PyObjec
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_TrieMap *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_TrieMap;
-  if (__pyx_pw_3_sa_7TrieMap_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_7TrieMap___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -58122,7 +55822,7 @@ static void __pyx_tp_dealloc_3_sa_TrieMap(PyObject *o) {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_3_sa_7TrieMap_3__dealloc__(o);
+    __pyx_pf_3_sa_7TrieMap_1__dealloc__(o);
     if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
@@ -58131,9 +55831,9 @@ static void __pyx_tp_dealloc_3_sa_TrieMap(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_TrieMap[] = {
-  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_3_sa_7TrieMap_5insert, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("contains"), (PyCFunction)__pyx_pw_3_sa_7TrieMap_7contains, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("toMap"), (PyCFunction)__pyx_pw_3_sa_7TrieMap_9toMap, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pf_3_sa_7TrieMap_2insert, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("contains"), (PyCFunction)__pyx_pf_3_sa_7TrieMap_3contains, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("toMap"), (PyCFunction)__pyx_pf_3_sa_7TrieMap_4toMap, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -58300,7 +56000,7 @@ static PyObject *__pyx_tp_new_3_sa_Precomputation(PyTypeObject *t, PyObject *a,
   p->__pyx_vtab = __pyx_vtabptr_3_sa_Precomputation;
   p->precomputed_index = Py_None; Py_INCREF(Py_None);
   p->precomputed_collocations = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_14Precomputation_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_14Precomputation___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -58308,8 +56008,8 @@ static PyObject *__pyx_tp_new_3_sa_Precomputation(PyTypeObject *t, PyObject *a,
 
 static void __pyx_tp_dealloc_3_sa_Precomputation(PyObject *o) {
   struct __pyx_obj_3_sa_Precomputation *p = (struct __pyx_obj_3_sa_Precomputation *)o;
-  Py_CLEAR(p->precomputed_index);
-  Py_CLEAR(p->precomputed_collocations);
+  Py_XDECREF(p->precomputed_index);
+  Py_XDECREF(p->precomputed_collocations);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -58338,9 +56038,9 @@ static int __pyx_tp_clear_3_sa_Precomputation(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_Precomputation[] = {
-  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pw_3_sa_14Precomputation_3read_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pw_3_sa_14Precomputation_5write_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("precompute"), (PyCFunction)__pyx_pw_3_sa_14Precomputation_7precompute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pf_3_sa_14Precomputation_1read_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pf_3_sa_14Precomputation_2write_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("precompute"), (PyCFunction)__pyx_pf_3_sa_14Precomputation_3precompute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -58508,7 +56208,7 @@ static PyObject *__pyx_tp_new_3_sa_SuffixArray(PyTypeObject *t, PyObject *a, PyO
   p->darray = ((struct __pyx_obj_3_sa_DataArray *)Py_None); Py_INCREF(Py_None);
   p->sa = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->ha = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_11SuffixArray_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_11SuffixArray___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -58516,9 +56216,9 @@ static PyObject *__pyx_tp_new_3_sa_SuffixArray(PyTypeObject *t, PyObject *a, PyO
 
 static void __pyx_tp_dealloc_3_sa_SuffixArray(PyObject *o) {
   struct __pyx_obj_3_sa_SuffixArray *p = (struct __pyx_obj_3_sa_SuffixArray *)o;
-  Py_CLEAR(p->darray);
-  Py_CLEAR(p->sa);
-  Py_CLEAR(p->ha);
+  Py_XDECREF(((PyObject *)p->darray));
+  Py_XDECREF(((PyObject *)p->sa));
+  Py_XDECREF(((PyObject *)p->ha));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -58560,16 +56260,16 @@ static PyObject *__pyx_sq_item_3_sa_SuffixArray(PyObject *o, Py_ssize_t i) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_SuffixArray[] = {
-  {__Pyx_NAMESTR("getSentId"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_5getSentId, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getSent"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_7getSent, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("getSentPos"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_9getSentPos, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_11read_text, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3_sa_11SuffixArray_10read_text)},
-  {__Pyx_NAMESTR("q3sort"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_13q3sort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3_sa_11SuffixArray_12q3sort)},
-  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_15write_text, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_17read_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_19write_binary, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_21write_enhanced, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("lookup"), (PyCFunction)__pyx_pw_3_sa_11SuffixArray_23lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSentId"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_2getSentId, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSent"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_3getSent, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("getSentPos"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_4getSentPos, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_text"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_5read_text, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3_sa_11SuffixArray_5read_text)},
+  {__Pyx_NAMESTR("q3sort"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_6q3sort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3_sa_11SuffixArray_6q3sort)},
+  {__Pyx_NAMESTR("write_text"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_7write_text, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read_binary"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_8read_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_binary"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_9write_binary, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_enhanced"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_10write_enhanced, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("lookup"), (PyCFunction)__pyx_pf_3_sa_11SuffixArray_11lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
@@ -58646,7 +56346,7 @@ static PySequenceMethods __pyx_tp_as_sequence_SuffixArray = {
 
 static PyMappingMethods __pyx_tp_as_mapping_SuffixArray = {
   0, /*mp_length*/
-  __pyx_pw_3_sa_11SuffixArray_3__getitem__, /*mp_subscript*/
+  __pyx_pf_3_sa_11SuffixArray_1__getitem__, /*mp_subscript*/
   0, /*mp_ass_subscript*/
 };
 
@@ -58727,13 +56427,13 @@ static PyTypeObject __pyx_type_3_sa_SuffixArray = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa_TrieNode(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_TrieNode(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa_TrieNode *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_TrieNode *)o);
   p->children = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_8TrieNode_1__cinit__(o, __pyx_empty_tuple, NULL) < 0) {
+  if (__pyx_pf_3_sa_8TrieNode___cinit__(o, __pyx_empty_tuple, NULL) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -58741,7 +56441,7 @@ static PyObject *__pyx_tp_new_3_sa_TrieNode(PyTypeObject *t, CYTHON_UNUSED PyObj
 
 static void __pyx_tp_dealloc_3_sa_TrieNode(PyObject *o) {
   struct __pyx_obj_3_sa_TrieNode *p = (struct __pyx_obj_3_sa_TrieNode *)o;
-  Py_CLEAR(p->children);
+  Py_XDECREF(p->children);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -58763,16 +56463,16 @@ static int __pyx_tp_clear_3_sa_TrieNode(PyObject *o) {
   return 0;
 }
 
-static PyObject *__pyx_getprop_3_sa_8TrieNode_children(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_8TrieNode_8children_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_8TrieNode_children(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_8TrieNode_8children___get__(o);
 }
 
-static int __pyx_setprop_3_sa_8TrieNode_children(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_8TrieNode_children(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_8TrieNode_8children_3__set__(o, v);
+    return __pyx_pf_3_sa_8TrieNode_8children_1__set__(o, v);
   }
   else {
-    return __pyx_pw_3_sa_8TrieNode_8children_5__del__(o);
+    return __pyx_pf_3_sa_8TrieNode_8children_2__del__(o);
   }
 }
 
@@ -58947,7 +56647,7 @@ static PyObject *__pyx_tp_new_3_sa_ExtendedTrieNode(PyTypeObject *t, PyObject *a
   p->phrase = Py_None; Py_INCREF(Py_None);
   p->phrase_location = Py_None; Py_INCREF(Py_None);
   p->suffix_link = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_16ExtendedTrieNode_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_16ExtendedTrieNode___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -58955,9 +56655,9 @@ static PyObject *__pyx_tp_new_3_sa_ExtendedTrieNode(PyTypeObject *t, PyObject *a
 
 static void __pyx_tp_dealloc_3_sa_ExtendedTrieNode(PyObject *o) {
   struct __pyx_obj_3_sa_ExtendedTrieNode *p = (struct __pyx_obj_3_sa_ExtendedTrieNode *)o;
-  Py_CLEAR(p->phrase);
-  Py_CLEAR(p->phrase_location);
-  Py_CLEAR(p->suffix_link);
+  Py_XDECREF(p->phrase);
+  Py_XDECREF(p->phrase_location);
+  Py_XDECREF(p->suffix_link);
   __pyx_tp_dealloc_3_sa_TrieNode(o);
 }
 
@@ -58993,42 +56693,42 @@ static int __pyx_tp_clear_3_sa_ExtendedTrieNode(PyObject *o) {
   return 0;
 }
 
-static PyObject *__pyx_getprop_3_sa_16ExtendedTrieNode_phrase(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_16ExtendedTrieNode_phrase(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_16ExtendedTrieNode_6phrase___get__(o);
 }
 
-static int __pyx_setprop_3_sa_16ExtendedTrieNode_phrase(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_16ExtendedTrieNode_phrase(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_3__set__(o, v);
+    return __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_1__set__(o, v);
   }
   else {
-    return __pyx_pw_3_sa_16ExtendedTrieNode_6phrase_5__del__(o);
+    return __pyx_pf_3_sa_16ExtendedTrieNode_6phrase_2__del__(o);
   }
 }
 
-static PyObject *__pyx_getprop_3_sa_16ExtendedTrieNode_phrase_location(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_16ExtendedTrieNode_phrase_location(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location___get__(o);
 }
 
-static int __pyx_setprop_3_sa_16ExtendedTrieNode_phrase_location(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_16ExtendedTrieNode_phrase_location(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_3__set__(o, v);
+    return __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_1__set__(o, v);
   }
   else {
-    return __pyx_pw_3_sa_16ExtendedTrieNode_15phrase_location_5__del__(o);
+    return __pyx_pf_3_sa_16ExtendedTrieNode_15phrase_location_2__del__(o);
   }
 }
 
-static PyObject *__pyx_getprop_3_sa_16ExtendedTrieNode_suffix_link(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_16ExtendedTrieNode_suffix_link(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link___get__(o);
 }
 
-static int __pyx_setprop_3_sa_16ExtendedTrieNode_suffix_link(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_16ExtendedTrieNode_suffix_link(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_3__set__(o, v);
+    return __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_1__set__(o, v);
   }
   else {
-    return __pyx_pw_3_sa_16ExtendedTrieNode_11suffix_link_5__del__(o);
+    return __pyx_pf_3_sa_16ExtendedTrieNode_11suffix_link_2__del__(o);
   }
 }
 
@@ -59203,7 +56903,7 @@ static PyObject *__pyx_tp_new_3_sa_TrieTable(PyTypeObject *t, PyObject *a, PyObj
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_TrieTable *)o);
   p->root = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_9TrieTable_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_9TrieTable___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -59211,7 +56911,7 @@ static PyObject *__pyx_tp_new_3_sa_TrieTable(PyTypeObject *t, PyObject *a, PyObj
 
 static void __pyx_tp_dealloc_3_sa_TrieTable(PyObject *o) {
   struct __pyx_obj_3_sa_TrieTable *p = (struct __pyx_obj_3_sa_TrieTable *)o;
-  Py_CLEAR(p->root);
+  Py_XDECREF(p->root);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -59233,13 +56933,13 @@ static int __pyx_tp_clear_3_sa_TrieTable(PyObject *o) {
   return 0;
 }
 
-static PyObject *__pyx_getprop_3_sa_9TrieTable_extended(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_9TrieTable_8extended_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_9TrieTable_extended(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_9TrieTable_8extended___get__(o);
 }
 
-static int __pyx_setprop_3_sa_9TrieTable_extended(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_9TrieTable_extended(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_9TrieTable_8extended_3__set__(o, v);
+    return __pyx_pf_3_sa_9TrieTable_8extended_1__set__(o, v);
   }
   else {
     PyErr_SetString(PyExc_NotImplementedError, "__del__");
@@ -59247,13 +56947,13 @@ static int __pyx_setprop_3_sa_9TrieTable_extended(PyObject *o, PyObject *v, CYTH
   }
 }
 
-static PyObject *__pyx_getprop_3_sa_9TrieTable_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_9TrieTable_5count_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_9TrieTable_count(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_9TrieTable_5count___get__(o);
 }
 
-static int __pyx_setprop_3_sa_9TrieTable_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_9TrieTable_count(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_9TrieTable_5count_3__set__(o, v);
+    return __pyx_pf_3_sa_9TrieTable_5count_1__set__(o, v);
   }
   else {
     PyErr_SetString(PyExc_NotImplementedError, "__del__");
@@ -59261,16 +56961,16 @@ static int __pyx_setprop_3_sa_9TrieTable_count(PyObject *o, PyObject *v, CYTHON_
   }
 }
 
-static PyObject *__pyx_getprop_3_sa_9TrieTable_root(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_3_sa_9TrieTable_4root_1__get__(o);
+static PyObject *__pyx_getprop_3_sa_9TrieTable_root(PyObject *o, void *x) {
+  return __pyx_pf_3_sa_9TrieTable_4root___get__(o);
 }
 
-static int __pyx_setprop_3_sa_9TrieTable_root(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_setprop_3_sa_9TrieTable_root(PyObject *o, PyObject *v, void *x) {
   if (v) {
-    return __pyx_pw_3_sa_9TrieTable_4root_3__set__(o, v);
+    return __pyx_pf_3_sa_9TrieTable_4root_1__set__(o, v);
   }
   else {
-    return __pyx_pw_3_sa_9TrieTable_4root_5__del__(o);
+    return __pyx_pf_3_sa_9TrieTable_4root_2__del__(o);
   }
 }
 
@@ -59447,7 +57147,7 @@ static PyObject *__pyx_tp_new_3_sa_PhraseLocation(PyTypeObject *t, PyObject *a,
   p = ((struct __pyx_obj_3_sa_PhraseLocation *)o);
   p->__pyx_vtab = __pyx_vtabptr_3_sa_PhraseLocation;
   p->arr = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_14PhraseLocation_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_14PhraseLocation___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -59455,7 +57155,7 @@ static PyObject *__pyx_tp_new_3_sa_PhraseLocation(PyTypeObject *t, PyObject *a,
 
 static void __pyx_tp_dealloc_3_sa_PhraseLocation(PyObject *o) {
   struct __pyx_obj_3_sa_PhraseLocation *p = (struct __pyx_obj_3_sa_PhraseLocation *)o;
-  Py_CLEAR(p->arr);
+  Py_XDECREF(((PyObject *)p->arr));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -59641,7 +57341,7 @@ static PyObject *__pyx_tp_new_3_sa_Sampler(PyTypeObject *t, PyObject *a, PyObjec
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa_Sampler *)o);
   p->sa = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_7Sampler_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_7Sampler___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -59649,7 +57349,7 @@ static PyObject *__pyx_tp_new_3_sa_Sampler(PyTypeObject *t, PyObject *a, PyObjec
 
 static void __pyx_tp_dealloc_3_sa_Sampler(PyObject *o) {
   struct __pyx_obj_3_sa_Sampler *p = (struct __pyx_obj_3_sa_Sampler *)o;
-  Py_CLEAR(p->sa);
+  Py_XDECREF(((PyObject *)p->sa));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -59672,7 +57372,7 @@ static int __pyx_tp_clear_3_sa_Sampler(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_Sampler[] = {
-  {__Pyx_NAMESTR("sample"), (PyCFunction)__pyx_pw_3_sa_7Sampler_3sample, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_7Sampler_2sample)},
+  {__Pyx_NAMESTR("sample"), (PyCFunction)__pyx_pf_3_sa_7Sampler_1sample, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_7Sampler_1sample)},
   {0, 0, 0, 0}
 };
 
@@ -59853,7 +57553,7 @@ static PyObject *__pyx_tp_new_3_sa_HieroCachingRuleFactory(PyTypeObject *t, PyOb
   p->fid2symid = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->findexes = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   p->findexes1 = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
-  if (__pyx_pw_3_sa_23HieroCachingRuleFactory_1__cinit__(o, a, k) < 0) {
+  if (__pyx_pf_3_sa_23HieroCachingRuleFactory___cinit__(o, a, k) < 0) {
     Py_DECREF(o); o = 0;
   }
   return o;
@@ -59861,22 +57561,22 @@ static PyObject *__pyx_tp_new_3_sa_HieroCachingRuleFactory(PyTypeObject *t, PyOb
 
 static void __pyx_tp_dealloc_3_sa_HieroCachingRuleFactory(PyObject *o) {
   struct __pyx_obj_3_sa_HieroCachingRuleFactory *p = (struct __pyx_obj_3_sa_HieroCachingRuleFactory *)o;
-  Py_CLEAR(p->rules);
-  Py_CLEAR(p->sampler);
-  Py_CLEAR(p->scorer);
-  Py_CLEAR(p->precomputed_index);
-  Py_CLEAR(p->precomputed_collocations);
-  Py_CLEAR(p->precompute_file);
-  Py_CLEAR(p->max_rank);
-  Py_CLEAR(p->prev_norm_prefix);
-  Py_CLEAR(p->fsa);
-  Py_CLEAR(p->fda);
-  Py_CLEAR(p->eda);
-  Py_CLEAR(p->alignment);
-  Py_CLEAR(p->eid2symid);
-  Py_CLEAR(p->fid2symid);
-  Py_CLEAR(p->findexes);
-  Py_CLEAR(p->findexes1);
+  Py_XDECREF(((PyObject *)p->rules));
+  Py_XDECREF(((PyObject *)p->sampler));
+  Py_XDECREF(((PyObject *)p->scorer));
+  Py_XDECREF(p->precomputed_index);
+  Py_XDECREF(p->precomputed_collocations);
+  Py_XDECREF(p->precompute_file);
+  Py_XDECREF(p->max_rank);
+  Py_XDECREF(p->prev_norm_prefix);
+  Py_XDECREF(((PyObject *)p->fsa));
+  Py_XDECREF(((PyObject *)p->fda));
+  Py_XDECREF(((PyObject *)p->eda));
+  Py_XDECREF(((PyObject *)p->alignment));
+  Py_XDECREF(((PyObject *)p->eid2symid));
+  Py_XDECREF(((PyObject *)p->fid2symid));
+  Py_XDECREF(((PyObject *)p->findexes));
+  Py_XDECREF(((PyObject *)p->findexes1));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -59989,17 +57689,17 @@ static int __pyx_tp_clear_3_sa_HieroCachingRuleFactory(PyObject *o) {
 }
 
 static PyMethodDef __pyx_methods_3_sa_HieroCachingRuleFactory[] = {
-  {__Pyx_NAMESTR("configure"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_3configure, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3_sa_23HieroCachingRuleFactory_2configure)},
-  {__Pyx_NAMESTR("pattern2phrase"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_5pattern2phrase, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("pattern2phrase_plus"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_7pattern2phrase_plus, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("precompute"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_9precompute, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_precomputed_collocation"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_11get_precomputed_collocation, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("advance"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_13advance, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_all_nodes_isteps_away"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_15get_all_nodes_isteps_away, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("reachable"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_17reachable, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("shortest"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_19shortest, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get_next_states"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_21get_next_states, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("input"), (PyCFunction)__pyx_pw_3_sa_23HieroCachingRuleFactory_23input, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_23HieroCachingRuleFactory_22input)},
+  {__Pyx_NAMESTR("configure"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_1configure, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3_sa_23HieroCachingRuleFactory_1configure)},
+  {__Pyx_NAMESTR("pattern2phrase"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_2pattern2phrase, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("pattern2phrase_plus"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_3pattern2phrase_plus, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("precompute"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_4precompute, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_precomputed_collocation"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_5get_precomputed_collocation, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("advance"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_6advance, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_all_nodes_isteps_away"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_7get_all_nodes_isteps_away, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("reachable"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_8reachable, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("shortest"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_9shortest, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get_next_states"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_10get_next_states, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("input"), (PyCFunction)__pyx_pf_3_sa_23HieroCachingRuleFactory_11input, METH_O, __Pyx_DOCSTR(__pyx_doc_3_sa_23HieroCachingRuleFactory_11input)},
   {0, 0, 0, 0}
 };
 
@@ -60158,7 +57858,7 @@ static PyTypeObject __pyx_type_3_sa_HieroCachingRuleFactory = {
 };
 static struct __pyx_vtabstruct_3_sa_Scorer __pyx_vtable_3_sa_Scorer;
 
-static PyObject *__pyx_tp_new_3_sa_Scorer(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa_Scorer(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa_Scorer *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
@@ -60170,7 +57870,7 @@ static PyObject *__pyx_tp_new_3_sa_Scorer(PyTypeObject *t, CYTHON_UNUSED PyObjec
 
 static void __pyx_tp_dealloc_3_sa_Scorer(PyObject *o) {
   struct __pyx_obj_3_sa_Scorer *p = (struct __pyx_obj_3_sa_Scorer *)o;
-  Py_CLEAR(p->models);
+  Py_XDECREF(p->models);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -60334,7 +58034,7 @@ static PyTypeObject __pyx_type_3_sa_Scorer = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_3_sa_6Scorer_1__init__, /*tp_init*/
+  __pyx_pf_3_sa_6Scorer___init__, /*tp_init*/
   0, /*tp_alloc*/
   __pyx_tp_new_3_sa_Scorer, /*tp_new*/
   0, /*tp_free*/
@@ -60350,10 +58050,220 @@ static PyTypeObject __pyx_type_3_sa_Scorer = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct____iter__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *p;
+static PyObject *__pyx_tp_new_3_sa___pyx_Generator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_Generator_object *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
+  p = ((struct __pyx_Generator_object *)o);
+  p->exc_type = 0;
+  p->exc_value = 0;
+  p->exc_traceback = 0;
+  return o;
+}
+
+static void __pyx_tp_dealloc_3_sa___pyx_Generator(PyObject *o) {
+  struct __pyx_Generator_object *p = (struct __pyx_Generator_object *)o;
+  Py_XDECREF(p->exc_type);
+  Py_XDECREF(p->exc_value);
+  Py_XDECREF(p->exc_traceback);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_3_sa___pyx_Generator(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_Generator_object *p = (struct __pyx_Generator_object *)o;
+  if (p->exc_type) {
+    e = (*v)(p->exc_type, a); if (e) return e;
+  }
+  if (p->exc_value) {
+    e = (*v)(p->exc_value, a); if (e) return e;
+  }
+  if (p->exc_traceback) {
+    e = (*v)(p->exc_traceback, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_3_sa___pyx_Generator(PyObject *o) {
+  struct __pyx_Generator_object *p = (struct __pyx_Generator_object *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->exc_type);
+  p->exc_type = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->exc_value);
+  p->exc_value = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->exc_traceback);
+  p->exc_traceback = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_3_sa___pyx_Generator[] = {
+  {__Pyx_NAMESTR("send"), (PyCFunction)__Pyx_Generator_Send, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("close"), (PyCFunction)__Pyx_Generator_Close, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("throw"), (PyCFunction)__Pyx_Generator_Throw, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number___pyx_Generator = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_long*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if PY_VERSION_HEX >= 0x02050000
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence___pyx_Generator = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping___pyx_Generator = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer___pyx_Generator = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+static PyTypeObject __pyx_Generator_type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("_sa.__pyx_Generator"), /*tp_name*/
+  sizeof(struct __pyx_Generator_object), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_3_sa___pyx_Generator, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  &__pyx_tp_as_number___pyx_Generator, /*tp_as_number*/
+  &__pyx_tp_as_sequence___pyx_Generator, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping___pyx_Generator, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer___pyx_Generator, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_3_sa___pyx_Generator, /*tp_traverse*/
+  __pyx_tp_clear_3_sa___pyx_Generator, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  PyObject_SelfIter, /*tp_iter*/
+  __Pyx_Generator_Next, /*tp_iternext*/
+  __pyx_methods_3_sa___pyx_Generator, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_3_sa___pyx_Generator, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct____iter__(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *p;
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
+  if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *)o);
   p->__pyx_v_self = 0;
   return o;
@@ -60361,13 +58271,14 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct____iter__(PyTypeObject *t,
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct____iter__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *)o;
-  Py_CLEAR(p->__pyx_v_self);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct____iter__(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_v_self) {
     e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
   }
@@ -60377,8 +58288,9 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct____iter__(PyObject *o, visi
 static int __pyx_tp_clear_3_sa___pyx_scope_struct____iter__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct____iter__ *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   return 0;
 }
@@ -60541,7 +58453,7 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct____iter__ = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_1_read_bitext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_1_read_bitext(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
@@ -60552,7 +58464,7 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_1_read_bitext(PyTypeObject
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_1_read_bitext(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *p = (struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *)o;
-  Py_CLEAR(p->__pyx_v_fp);
+  Py_XDECREF(p->__pyx_v_fp);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -60732,9 +58644,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_1_read_bitext = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_2_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_2_genexpr(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *)o);
   p->__pyx_outer_scope = 0;
@@ -60745,15 +58657,16 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_2_genexpr(PyTypeObject *t,
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_2_genexpr(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *)o;
-  Py_CLEAR(p->__pyx_outer_scope);
-  Py_CLEAR(p->__pyx_v_line);
-  Py_CLEAR(p->__pyx_t_0);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_outer_scope));
+  Py_XDECREF(p->__pyx_v_line);
+  Py_XDECREF(p->__pyx_t_0);
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_2_genexpr(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_outer_scope) {
     e = (*v)(((PyObject*)p->__pyx_outer_scope), a); if (e) return e;
   }
@@ -60769,6 +58682,7 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_2_genexpr(PyObject *o, visi
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_2_genexpr(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_2_genexpr *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_outer_scope);
   p->__pyx_outer_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_1_read_bitext *)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
@@ -60939,9 +58853,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_2_genexpr = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_3_compute_stats(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_3_compute_stats(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *)o);
   p->__pyx_v_ngram = 0;
@@ -60955,18 +58869,19 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_3_compute_stats(PyTypeObje
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_3_compute_stats(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *p = (struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *)o;
-  Py_CLEAR(p->__pyx_v_ngram);
-  Py_CLEAR(p->__pyx_v_ngram_start);
-  Py_CLEAR(p->__pyx_v_ngram_starts);
-  Py_CLEAR(p->__pyx_v_run_start);
-  Py_CLEAR(p->__pyx_v_self);
-  Py_CLEAR(p->__pyx_v_veb);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_v_ngram));
+  Py_XDECREF(((PyObject *)p->__pyx_v_ngram_start));
+  Py_XDECREF(((PyObject *)p->__pyx_v_ngram_starts));
+  Py_XDECREF(((PyObject *)p->__pyx_v_run_start));
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
+  Py_XDECREF(((PyObject *)p->__pyx_v_veb));
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_3_compute_stats(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *p = (struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_v_ngram) {
     e = (*v)(p->__pyx_v_ngram, a); if (e) return e;
   }
@@ -60991,6 +58906,7 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_3_compute_stats(PyObject *o
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_3_compute_stats(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *p = (struct __pyx_obj_3_sa___pyx_scope_struct_3_compute_stats *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_v_ngram);
   p->__pyx_v_ngram = ((PyObject*)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
@@ -61004,7 +58920,7 @@ static int __pyx_tp_clear_3_sa___pyx_scope_struct_3_compute_stats(PyObject *o) {
   p->__pyx_v_run_start = ((struct __pyx_obj_3_sa_IntList *)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_LCP *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_v_veb);
   p->__pyx_v_veb = ((struct __pyx_obj_3_sa_VEB *)Py_None); Py_INCREF(Py_None);
@@ -61170,9 +59086,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_3_compute_stats = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_4___iter__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_4___iter__(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *)o);
   p->__pyx_v_self = 0;
@@ -61181,13 +59097,14 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_4___iter__(PyTypeObject *t
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_4___iter__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *)o;
-  Py_CLEAR(p->__pyx_v_self);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_4___iter__(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_v_self) {
     e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
   }
@@ -61197,8 +59114,9 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_4___iter__(PyObject *o, vis
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_4___iter__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_4___iter__ *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_Phrase *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   return 0;
 }
@@ -61361,7 +59279,7 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_4___iter__ = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_5___str__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_5___str__(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
@@ -61372,7 +59290,7 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_5___str__(PyTypeObject *t,
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_5___str__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *)o;
-  Py_CLEAR(p->__pyx_v_self);
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -61389,7 +59307,7 @@ static int __pyx_tp_clear_3_sa___pyx_scope_struct_5___str__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *)o;
   PyObject* tmp;
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_Rule *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   return 0;
 }
@@ -61552,9 +59470,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_5___str__ = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_6_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_6_genexpr(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *)o);
   p->__pyx_outer_scope = 0;
@@ -61565,15 +59483,16 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_6_genexpr(PyTypeObject *t,
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_6_genexpr(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *)o;
-  Py_CLEAR(p->__pyx_outer_scope);
-  Py_CLEAR(p->__pyx_v_a);
-  Py_CLEAR(p->__pyx_t_0);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_outer_scope));
+  Py_XDECREF(p->__pyx_v_a);
+  Py_XDECREF(p->__pyx_t_0);
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_6_genexpr(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_outer_scope) {
     e = (*v)(((PyObject*)p->__pyx_outer_scope), a); if (e) return e;
   }
@@ -61589,6 +59508,7 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_6_genexpr(PyObject *o, visi
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_6_genexpr(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_6_genexpr *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_outer_scope);
   p->__pyx_outer_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_5___str__ *)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
@@ -61759,9 +59679,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_6_genexpr = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_7_alignments(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_7_alignments(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *)o);
   p->__pyx_v_point = 0;
@@ -61772,15 +59692,16 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_7_alignments(PyTypeObject
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_7_alignments(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *p = (struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *)o;
-  Py_CLEAR(p->__pyx_v_point);
-  Py_CLEAR(p->__pyx_v_self);
-  Py_CLEAR(p->__pyx_t_0);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(p->__pyx_v_point);
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
+  Py_XDECREF(p->__pyx_t_0);
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_7_alignments(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *p = (struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_v_point) {
     e = (*v)(p->__pyx_v_point, a); if (e) return e;
   }
@@ -61796,11 +59717,12 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_7_alignments(PyObject *o, v
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_7_alignments(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *p = (struct __pyx_obj_3_sa___pyx_scope_struct_7_alignments *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_v_point);
   p->__pyx_v_point = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_Rule *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_t_0);
   p->__pyx_t_0 = Py_None; Py_INCREF(Py_None);
@@ -61966,9 +59888,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_7_alignments = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_8_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_8_input(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_8_input *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_8_input *)o);
   p->__pyx_v_alignment = 0;
@@ -62015,67 +59937,68 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_8_input(PyTypeObject *t, C
   p->__pyx_v_xcat_index = 0;
   p->__pyx_v_xnode = 0;
   p->__pyx_v_xroot = 0;
-  p->__pyx_t_1 = 0;
+  p->__pyx_t_2 = 0;
+  p->__pyx_t_3 = 0;
   p->__pyx_t_4 = 0;
-  p->__pyx_t_5 = 0;
   return o;
 }
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_8_input(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_8_input *p = (struct __pyx_obj_3_sa___pyx_scope_struct_8_input *)o;
-  Py_CLEAR(p->__pyx_v_alignment);
-  Py_CLEAR(p->__pyx_v_als);
-  Py_CLEAR(p->__pyx_v_alslist);
-  Py_CLEAR(p->__pyx_v_chunklen);
-  Py_CLEAR(p->__pyx_v_count);
-  Py_CLEAR(p->__pyx_v_e);
-  Py_CLEAR(p->__pyx_v_elist);
-  Py_CLEAR(p->__pyx_v_extract);
-  Py_CLEAR(p->__pyx_v_extract_start);
-  Py_CLEAR(p->__pyx_v_extract_stop);
-  Py_CLEAR(p->__pyx_v_extracts);
-  Py_CLEAR(p->__pyx_v_f);
-  Py_CLEAR(p->__pyx_v_fcount);
-  Py_CLEAR(p->__pyx_v_fphrases);
-  Py_CLEAR(p->__pyx_v_frontier);
-  Py_CLEAR(p->__pyx_v_frontier_nodes);
-  Py_CLEAR(p->__pyx_v_fwords);
-  Py_CLEAR(p->__pyx_v_hiero_phrase);
-  Py_CLEAR(p->__pyx_v_is_shadow_path);
-  Py_CLEAR(p->__pyx_v_key);
-  Py_CLEAR(p->__pyx_v_loc);
-  Py_CLEAR(p->__pyx_v_locs);
-  Py_CLEAR(p->__pyx_v_new_frontier);
-  Py_CLEAR(p->__pyx_v_new_node);
-  Py_CLEAR(p->__pyx_v_next_states);
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_nodes_isteps_away_buffer);
-  Py_CLEAR(p->__pyx_v_pathlen);
-  Py_CLEAR(p->__pyx_v_phrase);
-  Py_CLEAR(p->__pyx_v_phrase_location);
-  Py_CLEAR(p->__pyx_v_prefix);
-  Py_CLEAR(p->__pyx_v_reachable_buffer);
-  Py_CLEAR(p->__pyx_v_sa_range);
-  Py_CLEAR(p->__pyx_v_sample);
-  Py_CLEAR(p->__pyx_v_scores);
-  Py_CLEAR(p->__pyx_v_self);
-  Py_CLEAR(p->__pyx_v_spanlen);
-  Py_CLEAR(p->__pyx_v_stop_time);
-  Py_CLEAR(p->__pyx_v_suffix_link);
-  Py_CLEAR(p->__pyx_v_suffix_link_xcat_index);
-  Py_CLEAR(p->__pyx_v_word_id);
-  Py_CLEAR(p->__pyx_v_xcat_index);
-  Py_CLEAR(p->__pyx_v_xnode);
-  Py_CLEAR(p->__pyx_v_xroot);
-  Py_CLEAR(p->__pyx_t_1);
-  Py_CLEAR(p->__pyx_t_4);
-  Py_CLEAR(p->__pyx_t_5);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(p->__pyx_v_alignment);
+  Py_XDECREF(p->__pyx_v_als);
+  Py_XDECREF(p->__pyx_v_alslist);
+  Py_XDECREF(((PyObject *)p->__pyx_v_chunklen));
+  Py_XDECREF(p->__pyx_v_count);
+  Py_XDECREF(p->__pyx_v_e);
+  Py_XDECREF(p->__pyx_v_elist);
+  Py_XDECREF(p->__pyx_v_extract);
+  Py_XDECREF(p->__pyx_v_extract_start);
+  Py_XDECREF(p->__pyx_v_extract_stop);
+  Py_XDECREF(((PyObject *)p->__pyx_v_extracts));
+  Py_XDECREF(p->__pyx_v_f);
+  Py_XDECREF(p->__pyx_v_fcount);
+  Py_XDECREF(p->__pyx_v_fphrases);
+  Py_XDECREF(((PyObject *)p->__pyx_v_frontier));
+  Py_XDECREF(p->__pyx_v_frontier_nodes);
+  Py_XDECREF(p->__pyx_v_fwords);
+  Py_XDECREF(((PyObject *)p->__pyx_v_hiero_phrase));
+  Py_XDECREF(p->__pyx_v_is_shadow_path);
+  Py_XDECREF(((PyObject *)p->__pyx_v_key));
+  Py_XDECREF(p->__pyx_v_loc);
+  Py_XDECREF(((PyObject *)p->__pyx_v_locs));
+  Py_XDECREF(((PyObject *)p->__pyx_v_new_frontier));
+  Py_XDECREF(p->__pyx_v_new_node);
+  Py_XDECREF(((PyObject *)p->__pyx_v_next_states));
+  Py_XDECREF(p->__pyx_v_node);
+  Py_XDECREF(((PyObject *)p->__pyx_v_nodes_isteps_away_buffer));
+  Py_XDECREF(p->__pyx_v_pathlen);
+  Py_XDECREF(p->__pyx_v_phrase);
+  Py_XDECREF(((PyObject *)p->__pyx_v_phrase_location));
+  Py_XDECREF(p->__pyx_v_prefix);
+  Py_XDECREF(((PyObject *)p->__pyx_v_reachable_buffer));
+  Py_XDECREF(p->__pyx_v_sa_range);
+  Py_XDECREF(((PyObject *)p->__pyx_v_sample));
+  Py_XDECREF(((PyObject *)p->__pyx_v_scores));
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
+  Py_XDECREF(p->__pyx_v_spanlen);
+  Py_XDECREF(p->__pyx_v_stop_time);
+  Py_XDECREF(p->__pyx_v_suffix_link);
+  Py_XDECREF(p->__pyx_v_suffix_link_xcat_index);
+  Py_XDECREF(p->__pyx_v_word_id);
+  Py_XDECREF(p->__pyx_v_xcat_index);
+  Py_XDECREF(p->__pyx_v_xnode);
+  Py_XDECREF(p->__pyx_v_xroot);
+  Py_XDECREF(p->__pyx_t_2);
+  Py_XDECREF(p->__pyx_t_3);
+  Py_XDECREF(p->__pyx_t_4);
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_8_input(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_8_input *p = (struct __pyx_obj_3_sa___pyx_scope_struct_8_input *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_v_alignment) {
     e = (*v)(p->__pyx_v_alignment, a); if (e) return e;
   }
@@ -62208,21 +60131,22 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_8_input(PyObject *o, visitp
   if (p->__pyx_v_xroot) {
     e = (*v)(p->__pyx_v_xroot, a); if (e) return e;
   }
-  if (p->__pyx_t_1) {
-    e = (*v)(p->__pyx_t_1, a); if (e) return e;
+  if (p->__pyx_t_2) {
+    e = (*v)(p->__pyx_t_2, a); if (e) return e;
+  }
+  if (p->__pyx_t_3) {
+    e = (*v)(p->__pyx_t_3, a); if (e) return e;
   }
   if (p->__pyx_t_4) {
     e = (*v)(p->__pyx_t_4, a); if (e) return e;
   }
-  if (p->__pyx_t_5) {
-    e = (*v)(p->__pyx_t_5, a); if (e) return e;
-  }
   return 0;
 }
 
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_8_input(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_8_input *p = (struct __pyx_obj_3_sa___pyx_scope_struct_8_input *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_v_alignment);
   p->__pyx_v_alignment = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
@@ -62329,7 +60253,7 @@ static int __pyx_tp_clear_3_sa___pyx_scope_struct_8_input(PyObject *o) {
   p->__pyx_v_scores = ((struct __pyx_obj_3_sa_FeatureVector *)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_HieroCachingRuleFactory *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_v_spanlen);
   p->__pyx_v_spanlen = Py_None; Py_INCREF(Py_None);
@@ -62355,15 +60279,15 @@ static int __pyx_tp_clear_3_sa___pyx_scope_struct_8_input(PyObject *o) {
   tmp = ((PyObject*)p->__pyx_v_xroot);
   p->__pyx_v_xroot = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->__pyx_t_1);
-  p->__pyx_t_1 = Py_None; Py_INCREF(Py_None);
+  tmp = ((PyObject*)p->__pyx_t_2);
+  p->__pyx_t_2 = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__pyx_t_3);
+  p->__pyx_t_3 = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->__pyx_t_4);
   p->__pyx_t_4 = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->__pyx_t_5);
-  p->__pyx_t_5 = Py_None; Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
   return 0;
 }
 
@@ -62525,9 +60449,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_8_input = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_9___iter__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_9___iter__(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *)o);
   p->__pyx_v_self = 0;
@@ -62536,13 +60460,14 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_9___iter__(PyTypeObject *t
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_9___iter__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *)o;
-  Py_CLEAR(p->__pyx_v_self);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_9___iter__(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_v_self) {
     e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
   }
@@ -62552,8 +60477,9 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_9___iter__(PyObject *o, vis
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_9___iter__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_9___iter__ *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_FeatureVector *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   return 0;
 }
@@ -62716,7 +60642,7 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_9___iter__ = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_10___str__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_10___str__(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *p;
   PyObject *o = (*t->tp_alloc)(t, 0);
   if (!o) return 0;
@@ -62727,7 +60653,7 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_10___str__(PyTypeObject *t
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_10___str__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *)o;
-  Py_CLEAR(p->__pyx_v_self);
+  Py_XDECREF(((PyObject *)p->__pyx_v_self));
   (*Py_TYPE(o)->tp_free)(o);
 }
 
@@ -62744,7 +60670,7 @@ static int __pyx_tp_clear_3_sa___pyx_scope_struct_10___str__(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *p = (struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *)o;
   PyObject* tmp;
   tmp = ((PyObject*)p->__pyx_v_self);
-  p->__pyx_v_self = ((struct __pyx_obj_3_sa_FeatureVector *)Py_None); Py_INCREF(Py_None);
+  p->__pyx_v_self = Py_None; Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   return 0;
 }
@@ -62907,9 +60833,9 @@ static PyTypeObject __pyx_type_3_sa___pyx_scope_struct_10___str__ = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_11_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_11_genexpr(PyTypeObject *t, PyObject *a, PyObject *k) {
   struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
+  PyObject *o = __pyx_tp_new_3_sa___pyx_Generator(t, a, k);
   if (!o) return 0;
   p = ((struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *)o);
   p->__pyx_outer_scope = 0;
@@ -62920,15 +60846,16 @@ static PyObject *__pyx_tp_new_3_sa___pyx_scope_struct_11_genexpr(PyTypeObject *t
 
 static void __pyx_tp_dealloc_3_sa___pyx_scope_struct_11_genexpr(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *)o;
-  Py_CLEAR(p->__pyx_outer_scope);
-  Py_CLEAR(p->__pyx_v_feat);
-  Py_CLEAR(p->__pyx_t_0);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_XDECREF(((PyObject *)p->__pyx_outer_scope));
+  Py_XDECREF(p->__pyx_v_feat);
+  Py_XDECREF(p->__pyx_t_0);
+  __pyx_tp_dealloc_3_sa___pyx_Generator(o);
 }
 
 static int __pyx_tp_traverse_3_sa___pyx_scope_struct_11_genexpr(PyObject *o, visitproc v, void *a) {
   int e;
   struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *)o;
+  e = __pyx_tp_traverse_3_sa___pyx_Generator(o, v, a); if (e) return e;
   if (p->__pyx_outer_scope) {
     e = (*v)(((PyObject*)p->__pyx_outer_scope), a); if (e) return e;
   }
@@ -62944,6 +60871,7 @@ static int __pyx_tp_traverse_3_sa___pyx_scope_struct_11_genexpr(PyObject *o, vis
 static int __pyx_tp_clear_3_sa___pyx_scope_struct_11_genexpr(PyObject *o) {
   struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *p = (struct __pyx_obj_3_sa___pyx_scope_struct_11_genexpr *)o;
   PyObject* tmp;
+  __pyx_tp_clear_3_sa___pyx_Generator(o);
   tmp = ((PyObject*)p->__pyx_outer_scope);
   p->__pyx_outer_scope = ((struct __pyx_obj_3_sa___pyx_scope_struct_10___str__ *)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
@@ -63166,11 +61094,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_132, __pyx_k_132, sizeof(__pyx_k_132), 0, 0, 1, 0},
   {&__pyx_kp_s_133, __pyx_k_133, sizeof(__pyx_k_133), 0, 0, 1, 0},
   {&__pyx_kp_s_134, __pyx_k_134, sizeof(__pyx_k_134), 0, 0, 1, 0},
+  {&__pyx_kp_s_135, __pyx_k_135, sizeof(__pyx_k_135), 0, 0, 1, 0},
   {&__pyx_kp_s_137, __pyx_k_137, sizeof(__pyx_k_137), 0, 0, 1, 0},
-  {&__pyx_kp_s_138, __pyx_k_138, sizeof(__pyx_k_138), 0, 0, 1, 0},
   {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
-  {&__pyx_kp_s_142, __pyx_k_142, sizeof(__pyx_k_142), 0, 0, 1, 0},
-  {&__pyx_kp_s_143, __pyx_k_143, sizeof(__pyx_k_143), 0, 0, 1, 0},
   {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0},
   {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0},
   {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0},
@@ -63431,9 +61357,9 @@ static int __Pyx_InitCachedBuiltins(void) {
 
 static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants");
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":20
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":20
  *         self.word2id = {"END_OF_FILE":0, "END_OF_LINE":1}
  *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]
  *         self.data = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -63441,7 +61367,7 @@ static int __Pyx_InitCachedConstants(void) {
  *         self.sent_index = IntList(1000,1000)
  */
   __pyx_k_tuple_10 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_10);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_10));
   __Pyx_INCREF(__pyx_int_1000);
   PyTuple_SET_ITEM(__pyx_k_tuple_10, 0, __pyx_int_1000);
   __Pyx_GIVEREF(__pyx_int_1000);
@@ -63450,7 +61376,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_int_1000);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":21
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":21
  *         self.id2word = ["END_OF_FILE", "END_OF_LINE"]
  *         self.data = IntList(1000,1000)
  *         self.sent_id = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -63458,7 +61384,7 @@ static int __Pyx_InitCachedConstants(void) {
  *         self.use_sent_id = use_sent_id
  */
   __pyx_k_tuple_11 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_11);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_11));
   __Pyx_INCREF(__pyx_int_1000);
   PyTuple_SET_ITEM(__pyx_k_tuple_11, 0, __pyx_int_1000);
   __Pyx_GIVEREF(__pyx_int_1000);
@@ -63467,7 +61393,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_int_1000);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_11));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":22
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":22
  *         self.data = IntList(1000,1000)
  *         self.sent_id = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -63475,7 +61401,7 @@ static int __Pyx_InitCachedConstants(void) {
  *         if from_binary:
  */
   __pyx_k_tuple_12 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_12);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_12));
   __Pyx_INCREF(__pyx_int_1000);
   PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, __pyx_int_1000);
   __Pyx_GIVEREF(__pyx_int_1000);
@@ -63484,7 +61410,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_int_1000);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":65
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":65
  *                     f.write("%s " % self.get_word(w_id))
  *                 if w_id == 1:
  *                     f.write("\n")             # <<<<<<<<<<<<<<
@@ -63492,13 +61418,13 @@ static int __Pyx_InitCachedConstants(void) {
  *     def read_text(self, char* filename):
  */
   __pyx_k_tuple_15 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_15)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_15);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_15));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_15, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_15));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":60
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":60
  * 
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -63506,7 +61432,7 @@ static int __Pyx_InitCachedConstants(void) {
  *                 if w_id > 1:
  */
   __pyx_k_tuple_16 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_16);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_16));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_16, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63518,7 +61444,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":68
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":68
  * 
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as fp:             # <<<<<<<<<<<<<<
@@ -63526,7 +61452,7 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_17 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_17)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_17);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_17));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_17, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63538,7 +61464,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":73
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":73
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:
  *             data = (line.split(' ||| ')[side] for line in fp)             # <<<<<<<<<<<<<<
@@ -63546,13 +61472,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_19 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_19)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_19);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_19));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_18));
   PyTuple_SET_ITEM(__pyx_k_tuple_19, 0, ((PyObject *)__pyx_kp_s_18));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_18));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_19));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":72
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":72
  * 
  *     def read_bitext(self, char* filename, int side):
  *         with gzip_or_text(filename) as fp:             # <<<<<<<<<<<<<<
@@ -63560,7 +61486,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             self.read_text_data(data)
  */
   __pyx_k_tuple_20 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_20)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_20);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_20));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_20, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63572,7 +61498,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_20));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":143
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":143
  *         for i in self.data:
  *             f.write("%d " %i)
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -63580,13 +61506,13 @@ static int __Pyx_InitCachedConstants(void) {
  *             f.write("%d " %i)
  */
   __pyx_k_tuple_22 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_22)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_22);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_22));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_22, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":146
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":146
  *         for i in self.sent_index:
  *             f.write("%d " %i)
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -63594,13 +61520,13 @@ static int __Pyx_InitCachedConstants(void) {
  *             f.write("%d " %i)
  */
   __pyx_k_tuple_23 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_23);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_23));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_23, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_23));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":149
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":149
  *         for i in self.sent_id:
  *             f.write("%d " %i)
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -63608,13 +61534,13 @@ static int __Pyx_InitCachedConstants(void) {
  *             f.write("%s %d " % (word, self.word2id[word]))
  */
   __pyx_k_tuple_24 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_24)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_24);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_24));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_24, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_24));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":152
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":152
  *         for word in self.id2word:
  *             f.write("%s %d " % (word, self.word2id[word]))
  *         f.write("\n")             # <<<<<<<<<<<<<<
@@ -63622,20 +61548,20 @@ static int __Pyx_InitCachedConstants(void) {
  *     def write_enhanced(self, char* filename):
  */
   __pyx_k_tuple_26 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_26)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_26);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_26));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_26, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_26));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/data_array.pxi":155
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/data_array.pxi":155
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
  *             self.write_enhanced_handle(self, f)
  */
   __pyx_k_tuple_28 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_28)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_28);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_28));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_28, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63647,7 +61573,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_28));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":46
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":46
  * 
  *     def __cinit__(self, from_binary=None, from_text=None):
  *         self.links = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -63655,7 +61581,7 @@ static int __Pyx_InitCachedConstants(void) {
  *         if from_binary:
  */
   __pyx_k_tuple_29 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_29);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_29));
   __Pyx_INCREF(__pyx_int_1000);
   PyTuple_SET_ITEM(__pyx_k_tuple_29, 0, __pyx_int_1000);
   __Pyx_GIVEREF(__pyx_int_1000);
@@ -63664,7 +61590,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_int_1000);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_29));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":47
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":47
  *     def __cinit__(self, from_binary=None, from_text=None):
  *         self.links = IntList(1000,1000)
  *         self.sent_index = IntList(1000,1000)             # <<<<<<<<<<<<<<
@@ -63672,7 +61598,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             self.read_binary(from_binary)
  */
   __pyx_k_tuple_30 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_30);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_30));
   __Pyx_INCREF(__pyx_int_1000);
   PyTuple_SET_ITEM(__pyx_k_tuple_30, 0, __pyx_int_1000);
   __Pyx_GIVEREF(__pyx_int_1000);
@@ -63681,7 +61607,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_int_1000);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_30));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":59
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":59
  *                 pairs = line.split()
  *                 for pair in pairs:
  *                     (i, j) = map(int, pair.split('-'))             # <<<<<<<<<<<<<<
@@ -63689,13 +61615,13 @@ static int __Pyx_InitCachedConstants(void) {
  *             self.sent_index.append(len(self.links))
  */
   __pyx_k_tuple_32 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_32)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_32);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_32));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_31));
   PyTuple_SET_ITEM(__pyx_k_tuple_32, 0, ((PyObject *)__pyx_kp_s_31));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_31));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_32));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":54
  * 
  *     def read_text(self, char* filename):
  *         with gzip_or_text(filename) as f:             # <<<<<<<<<<<<<<
@@ -63703,7 +61629,7 @@ static int __Pyx_InitCachedConstants(void) {
  *                 self.sent_index.append(len(self.links))
  */
   __pyx_k_tuple_33 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_33);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_33));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_33, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63715,7 +61641,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_33));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":75
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":75
  *             for i, link in enumerate(self.links):
  *                 while i >= self.sent_index[sent_num]:
  *                     f.write("\n")             # <<<<<<<<<<<<<<
@@ -63723,13 +61649,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d-%d " % self.unlink(link))
  */
   __pyx_k_tuple_34 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_34)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_34);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_34));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_34, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_34));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":78
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":78
  *                     sent_num = sent_num + 1
  *                 f.write("%d-%d " % self.unlink(link))
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63737,13 +61663,13 @@ static int __Pyx_InitCachedConstants(void) {
  *     def write_binary(self, char* filename):
  */
   __pyx_k_tuple_36 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_36);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_36));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_36, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_36));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":71
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":71
  * 
  *     def write_text(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -63751,7 +61677,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             for i, link in enumerate(self.links):
  */
   __pyx_k_tuple_37 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_37);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_37));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_37, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63763,7 +61689,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_37));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":92
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":92
  *             for link in self.links:
  *                 f.write("%d " % link)
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63771,13 +61697,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d " % i)
  */
   __pyx_k_tuple_38 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_38)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_38);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_38));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_38, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_38));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":95
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":95
  *             for i in self.sent_index:
  *                 f.write("%d " % i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63785,13 +61711,13 @@ static int __Pyx_InitCachedConstants(void) {
  *     def alignment(self, i):
  */
   __pyx_k_tuple_39 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_39)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_39);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_39));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_39, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_39));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/alignment.pxi":88
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/alignment.pxi":88
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -63799,7 +61725,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             for link in self.links:
  */
   __pyx_k_tuple_40 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_40)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_40);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_40));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_40, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63811,7 +61737,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_40));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":297
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":297
  * 
  *             # Re-read file, placing words into buckets
  *             f.seek(0)             # <<<<<<<<<<<<<<
@@ -63819,13 +61745,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 (fword, eword, score1, score2) = line.split()
  */
   __pyx_k_tuple_43 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_43)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_43);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_43));
   __Pyx_INCREF(__pyx_int_0);
   PyTuple_SET_ITEM(__pyx_k_tuple_43, 0, __pyx_int_0);
   __Pyx_GIVEREF(__pyx_int_0);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_43));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":273
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":273
  * 
  *         fcount = IntList()
  *         with gzip_or_text(filename) as f:             # <<<<<<<<<<<<<<
@@ -63833,7 +61759,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             for line in f:
  */
   __pyx_k_tuple_44 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_44)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_44);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_44));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_44, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63845,7 +61771,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_44));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":339
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":339
  * 
  *         if i > j:
  *             raise Exception("Sort error in CLex")             # <<<<<<<<<<<<<<
@@ -63853,13 +61779,13 @@ static int __Pyx_InitCachedConstants(void) {
  *             return
  */
   __pyx_k_tuple_47 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_47)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_47);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_47));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_46));
   PyTuple_SET_ITEM(__pyx_k_tuple_47, 0, ((PyObject *)__pyx_kp_s_46));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_46));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_47));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":362
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":362
  *             for i in self.f_index:
  *                 f.write("%d " % i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63867,13 +61793,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d %f %f " % (i, s1, s2))
  */
   __pyx_k_tuple_49 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_49)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_49);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_49));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_49, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_49));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":365
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":365
  *             for i, s1, s2 in zip(self.e_index, self.col1, self.col2):
  *                 f.write("%d %f %f " % (i, s1, s2))
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63881,13 +61807,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d %s " % (i, w))
  */
   __pyx_k_tuple_51 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_51)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_51);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_51));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_51, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_51));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":368
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":368
  *             for i, w in enumerate(self.id2fword):
  *                 f.write("%d %s " % (i, w))
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63895,13 +61821,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d %s " % (i, w))
  */
   __pyx_k_tuple_53 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_53)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_53);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_53));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_53, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_53));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":371
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":371
  *             for i, w in enumerate(self.id2eword):
  *                 f.write("%d %s " % (i, w))
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -63909,13 +61835,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_54 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_54)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_54);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_54));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_54, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_54));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":359
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":359
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -63923,7 +61849,7 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d " % i)
  */
   __pyx_k_tuple_55 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_55)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_55);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_55));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_55, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63935,7 +61861,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_55));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":404
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":404
  *         cdef i, N, e_id, f_id
  * 
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -63943,7 +61869,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             f_id = 0
  */
   __pyx_k_tuple_57 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_57)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_57);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_57));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_57, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -63955,7 +61881,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_57));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":13
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":13
  *         cdef IntList rank
  * 
  *         logger.info("Constructing LCP array")             # <<<<<<<<<<<<<<
@@ -63963,13 +61889,13 @@ static int __Pyx_InitCachedConstants(void) {
  *         n = self.sa.sa.len
  */
   __pyx_k_tuple_61 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_61)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_61);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_61));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_60));
   PyTuple_SET_ITEM(__pyx_k_tuple_61, 0, ((PyObject *)__pyx_kp_s_60));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_60));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_61));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/lcp.pxi":34
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/lcp.pxi":34
  *             if h > 0:
  *                 h = h-1
  *         logger.info("LCP array completed")             # <<<<<<<<<<<<<<
@@ -63977,13 +61903,13 @@ static int __Pyx_InitCachedConstants(void) {
  *     def compute_stats(self, int max_n):
  */
   __pyx_k_tuple_63 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_63);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_63));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_62));
   PyTuple_SET_ITEM(__pyx_k_tuple_63, 0, ((PyObject *)__pyx_kp_s_62));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_62));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_63));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":297
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":297
  *         pattern_rank = {}
  * 
  *         logger.info("Precomputing frequent intersections")             # <<<<<<<<<<<<<<
@@ -63991,13 +61917,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_73 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_73)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_73);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_73));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_72));
   PyTuple_SET_ITEM(__pyx_k_tuple_73, 0, ((PyObject *)__pyx_kp_s_72));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_72));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_73));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":314
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":314
  *         queue = IntList(increment=1000)
  * 
  *         logger.info("    Computing inverted indexes...")             # <<<<<<<<<<<<<<
@@ -64005,13 +61931,13 @@ static int __Pyx_InitCachedConstants(void) {
  *         for i from 0 <= i < N:
  */
   __pyx_k_tuple_75 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_75)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_75);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_75));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_74));
   PyTuple_SET_ITEM(__pyx_k_tuple_75, 0, ((PyObject *)__pyx_kp_s_74));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_74));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_75));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":329
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":329
  *                     trie_node_data_append(node, i)
  * 
  *         logger.info("    Computing collocations...")             # <<<<<<<<<<<<<<
@@ -64019,13 +61945,13 @@ static int __Pyx_InitCachedConstants(void) {
  *         ptr1 = 0
  */
   __pyx_k_tuple_77 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_77)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_77);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_77));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_76));
   PyTuple_SET_ITEM(__pyx_k_tuple_77, 0, ((PyObject *)__pyx_kp_s_76));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_76));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_77));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":393
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":393
  *             for pattern2 in J_set:
  *                 if len(pattern1) + len(pattern2) + 1 < self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2             # <<<<<<<<<<<<<<
@@ -64033,13 +61959,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_79 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_79)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_79);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_79));
   __Pyx_INCREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_k_tuple_79, 0, __pyx_int_neg_1);
   __Pyx_GIVEREF(__pyx_int_neg_1);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_79));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":400
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":400
  *                 x = x+1
  *                 if len(pattern1) + len(pattern2) + 1 <= self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2             # <<<<<<<<<<<<<<
@@ -64047,13 +61973,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_80 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_80);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_80));
   __Pyx_INCREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_k_tuple_80, 0, __pyx_int_neg_1);
   __Pyx_GIVEREF(__pyx_int_neg_1);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_80));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":407
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":407
  *                 x = x+2
  *                 if len(pattern1) + len(pattern2) + 1<= self.max_length:
  *                     combined_pattern = pattern1 + (-1,) + pattern2             # <<<<<<<<<<<<<<
@@ -64061,13 +61987,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                     combined_pattern = pattern2 + (-1,) + pattern1
  */
   __pyx_k_tuple_81 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_81)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_81);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_81));
   __Pyx_INCREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_k_tuple_81, 0, __pyx_int_neg_1);
   __Pyx_GIVEREF(__pyx_int_neg_1);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_81));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/precomputation.pxi":409
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/precomputation.pxi":409
  *                     combined_pattern = pattern1 + (-1,) + pattern2
  *                     IJ_set.add(combined_pattern)
  *                     combined_pattern = pattern2 + (-1,) + pattern1             # <<<<<<<<<<<<<<
@@ -64075,13 +62001,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_82 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_82);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_82));
   __Pyx_INCREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_k_tuple_82, 0, __pyx_int_neg_1);
   __Pyx_GIVEREF(__pyx_int_neg_1);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":103
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":103
  * 
  *         '''Step 3: read off suffix array from inverse suffix array'''
  *         logger.info("    Finalizing sort...")             # <<<<<<<<<<<<<<
@@ -64089,13 +62015,13 @@ static int __Pyx_InitCachedConstants(void) {
  *             j = isa.arr[i]
  */
   __pyx_k_tuple_93 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_93)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_93);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_93));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_92));
   PyTuple_SET_ITEM(__pyx_k_tuple_93, 0, ((PyObject *)__pyx_kp_s_92));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_92));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_93));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":202
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":202
  *             for a_i in self.sa:
  *                 f.write("%d " % a_i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -64103,13 +62029,13 @@ static int __Pyx_InitCachedConstants(void) {
  *                 f.write("%d " % w_i)
  */
   __pyx_k_tuple_96 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_96)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_96);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_96));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_96, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_96));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":205
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":205
  *             for w_i in self.ha:
  *                 f.write("%d " % w_i)
  *             f.write("\n")             # <<<<<<<<<<<<<<
@@ -64117,13 +62043,13 @@ static int __Pyx_InitCachedConstants(void) {
  *     cdef int __search_high(self, int word_id, int offset, int low, int high):
  */
   __pyx_k_tuple_97 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_97)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_97);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_97));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
   PyTuple_SET_ITEM(__pyx_k_tuple_97, 0, ((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_97));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/suffix_array.pxi":198
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/suffix_array.pxi":198
  * 
  *     def write_enhanced(self, char* filename):
  *         with open(filename, "w") as f:             # <<<<<<<<<<<<<<
@@ -64131,7 +62057,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             for a_i in self.sa:
  */
   __pyx_k_tuple_98 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_98)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_98);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_98));
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_k_tuple_98, 0, Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -64143,7 +62069,7 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(Py_None);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_98));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":105
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":105
  *             logger.info("Sampling strategy: uniform, max sample size = %d", sample_size)
  *         else:
  *             logger.info("Sampling strategy: no sampling")             # <<<<<<<<<<<<<<
@@ -64151,13 +62077,13 @@ static int __Pyx_InitCachedConstants(void) {
  *     def sample(self, PhraseLocation phrase_location):
  */
   __pyx_k_tuple_102 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_102)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_102);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_102));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_101));
   PyTuple_SET_ITEM(__pyx_k_tuple_102, 0, ((PyObject *)__pyx_kp_s_101));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_101));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_102));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":314
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":314
  *         self.rules.root = ExtendedTrieNode(phrase_location=PhraseLocation())
  *         if alignment is None:
  *             raise Exception("Must specify an alignment object")             # <<<<<<<<<<<<<<
@@ -64165,13 +62091,13 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  */
   __pyx_k_tuple_107 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_107)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_107);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_107));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_106));
   PyTuple_SET_ITEM(__pyx_k_tuple_107, 0, ((PyObject *)__pyx_kp_s_106));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_106));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_107));
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":1020
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":1020
  *                         else:
  *                             #ERROR: We never get here
  *                             raise Exception("Keyword trie error")             # <<<<<<<<<<<<<<
@@ -64179,30 +62105,12 @@ static int __Pyx_InitCachedConstants(void) {
  *                 if lookup_required:
  */
   __pyx_k_tuple_122 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_122)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 1020; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_122);
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_122));
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_121));
   PyTuple_SET_ITEM(__pyx_k_tuple_122, 0, ((PyObject *)__pyx_kp_s_121));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_121));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_122));
 
-  /* "_sa.pyx":9
- *             resource.getrusage(resource.RUSAGE_SELF).ru_stime)
- * 
- * def gzip_or_text(char* filename):             # <<<<<<<<<<<<<<
- *     if filename.endswith('.gz'):
- *         return gzip.GzipFile(filename)
- */
-  __pyx_k_tuple_135 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_135);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__filename));
-  PyTuple_SET_ITEM(__pyx_k_tuple_135, 0, ((PyObject *)__pyx_n_s__filename));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__filename));
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__filename));
-  PyTuple_SET_ITEM(__pyx_k_tuple_135, 1, ((PyObject *)__pyx_n_s__filename));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__filename));
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_135));
-  __pyx_k_codeobj_136 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_135, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_137, __pyx_n_s__gzip_or_text, 9, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
   /* "_sa.pyx":15
  *         return open(filename)
  * 
@@ -64210,29 +62118,12 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  * include "float_list.pxi"
  */
-  __pyx_k_tuple_139 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_139);
-  __Pyx_INCREF(((PyObject *)__pyx_kp_s_138));
-  PyTuple_SET_ITEM(__pyx_k_tuple_139, 0, ((PyObject *)__pyx_kp_s_138));
-  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_138));
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_139));
-
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":104
- *     return ALPHABET.setindex(sym, id)
- * 
- * def sym_fromstring(char* string, bint terminal):             # <<<<<<<<<<<<<<
- *     return ALPHABET.fromstring(string, terminal)
- */
-  __pyx_k_tuple_140 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_140)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_140);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__string));
-  PyTuple_SET_ITEM(__pyx_k_tuple_140, 0, ((PyObject *)__pyx_n_s__string));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__string));
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__terminal));
-  PyTuple_SET_ITEM(__pyx_k_tuple_140, 1, ((PyObject *)__pyx_n_s__terminal));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__terminal));
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_140));
-  __pyx_k_codeobj_141 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_140, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_142, __pyx_n_s__sym_fromstring, 104, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_141)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_136 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_136));
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_135));
+  PyTuple_SET_ITEM(__pyx_k_tuple_136, 0, ((PyObject *)__pyx_kp_s_135));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_135));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_136));
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -64241,6 +62132,9 @@ static int __Pyx_InitCachedConstants(void) {
 }
 
 static int __Pyx_InitGlobals(void) {
+  #if PY_VERSION_HEX < 0x02040000
+  if (unlikely(__Pyx_Py23SetsImport() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
   if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
@@ -64279,18 +62173,12 @@ PyMODINIT_FUNC PyInit__sa(void)
           Py_FatalError("failed to import 'refnanny' module");
   }
   #endif
-  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__sa(void)", 0);
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__sa(void)");
   if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #ifdef __Pyx_CyFunction_USED
-  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #ifdef __pyx_binding_PyCFunctionType_USED
+  if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
@@ -64301,15 +62189,16 @@ PyMODINIT_FUNC PyInit__sa(void)
   #endif
   /*--- Module creation code ---*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_sa"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_sa"), __pyx_methods, 0, 0, PYTHON_API_VERSION);
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if CYTHON_COMPILING_IN_PYPY
-  Py_INCREF(__pyx_b);
+  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  #if PY_MAJOR_VERSION < 3
+  Py_INCREF(__pyx_m);
   #endif
+  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
+  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -64446,10 +62335,10 @@ PyMODINIT_FUNC PyInit__sa(void)
   if (__Pyx_SetAttrString(__pyx_m, "Precomputation", (PyObject *)&__pyx_type_3_sa_Precomputation) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa_Precomputation = &__pyx_type_3_sa_Precomputation;
   __pyx_vtabptr_3_sa_SuffixArray = &__pyx_vtable_3_sa_SuffixArray;
-  __pyx_vtable_3_sa_SuffixArray.__pyx___search_high = (int (*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int))__pyx_f_3_sa_11SuffixArray___search_high;
-  __pyx_vtable_3_sa_SuffixArray.__pyx___search_low = (int (*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int))__pyx_f_3_sa_11SuffixArray___search_low;
-  __pyx_vtable_3_sa_SuffixArray.__pyx___get_range = (PyObject *(*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int, int))__pyx_f_3_sa_11SuffixArray___get_range;
-  __pyx_vtable_3_sa_SuffixArray.__pyx___lookup_helper = (PyObject *(*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int))__pyx_f_3_sa_11SuffixArray___lookup_helper;
+  __pyx_vtable_3_sa_SuffixArray.__search_high = (int (*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int))__pyx_f_3_sa_11SuffixArray___search_high;
+  __pyx_vtable_3_sa_SuffixArray.__search_low = (int (*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int))__pyx_f_3_sa_11SuffixArray___search_low;
+  __pyx_vtable_3_sa_SuffixArray.__get_range = (PyObject *(*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int, int))__pyx_f_3_sa_11SuffixArray___get_range;
+  __pyx_vtable_3_sa_SuffixArray.__lookup_helper = (PyObject *(*)(struct __pyx_obj_3_sa_SuffixArray *, int, int, int, int))__pyx_f_3_sa_11SuffixArray___lookup_helper;
   if (PyType_Ready(&__pyx_type_3_sa_SuffixArray) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetVtable(__pyx_type_3_sa_SuffixArray.tp_dict, __pyx_vtabptr_3_sa_SuffixArray) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "SuffixArray", (PyObject *)&__pyx_type_3_sa_SuffixArray) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -64499,28 +62388,39 @@ PyMODINIT_FUNC PyInit__sa(void)
   if (__Pyx_SetVtable(__pyx_type_3_sa_Scorer.tp_dict, __pyx_vtabptr_3_sa_Scorer) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "Scorer", (PyObject *)&__pyx_type_3_sa_Scorer) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa_Scorer = &__pyx_type_3_sa_Scorer;
+  if (PyType_Ready(&__pyx_Generator_type) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_3_sa___pyx_Generator = &__pyx_Generator_type;
+  __pyx_type_3_sa___pyx_scope_struct____iter__.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct____iter__) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct____iter__ = &__pyx_type_3_sa___pyx_scope_struct____iter__;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_1_read_bitext) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_1_read_bitext = &__pyx_type_3_sa___pyx_scope_struct_1_read_bitext;
+  __pyx_type_3_sa___pyx_scope_struct_2_genexpr.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_2_genexpr) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_2_genexpr = &__pyx_type_3_sa___pyx_scope_struct_2_genexpr;
+  __pyx_type_3_sa___pyx_scope_struct_3_compute_stats.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_3_compute_stats) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_3_compute_stats = &__pyx_type_3_sa___pyx_scope_struct_3_compute_stats;
+  __pyx_type_3_sa___pyx_scope_struct_4___iter__.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_4___iter__) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_4___iter__ = &__pyx_type_3_sa___pyx_scope_struct_4___iter__;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_5___str__) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_5___str__ = &__pyx_type_3_sa___pyx_scope_struct_5___str__;
+  __pyx_type_3_sa___pyx_scope_struct_6_genexpr.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_6_genexpr) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_6_genexpr = &__pyx_type_3_sa___pyx_scope_struct_6_genexpr;
+  __pyx_type_3_sa___pyx_scope_struct_7_alignments.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_7_alignments) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_7_alignments = &__pyx_type_3_sa___pyx_scope_struct_7_alignments;
+  __pyx_type_3_sa___pyx_scope_struct_8_input.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_8_input) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_8_input = &__pyx_type_3_sa___pyx_scope_struct_8_input;
+  __pyx_type_3_sa___pyx_scope_struct_9___iter__.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_9___iter__) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_9___iter__ = &__pyx_type_3_sa___pyx_scope_struct_9___iter__;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_10___str__) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_10___str__ = &__pyx_type_3_sa___pyx_scope_struct_10___str__;
+  __pyx_type_3_sa___pyx_scope_struct_11_genexpr.tp_base = __pyx_ptype_3_sa___pyx_Generator;
   if (PyType_Ready(&__pyx_type_3_sa___pyx_scope_struct_11_genexpr) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_3_sa___pyx_scope_struct_11_genexpr = &__pyx_type_3_sa___pyx_scope_struct_11_genexpr;
   /*--- Type import code ---*/
@@ -64568,7 +62468,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  *     if filename.endswith('.gz'):
  *         return gzip.GzipFile(filename)
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3_sa_1gzip_or_text, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3_sa_gzip_or_text, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__gzip_or_text, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -64585,13 +62485,13 @@ PyMODINIT_FUNC PyInit__sa(void)
   __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__getLogger); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_139), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_136), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__logger, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/bilex.pxi":54
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/bilex.pxi":54
  *     cdef id2eword, id2fword, eword2id, fword2id
  * 
  *     def __cinit__(self, from_text=None, from_data=False, from_binary=None,             # <<<<<<<<<<<<<<
@@ -64604,7 +62504,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":17
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":17
  * from libc.string cimport memset
  * 
  * cdef int MIN_BOTTOM_SIZE = 32             # <<<<<<<<<<<<<<
@@ -64613,7 +62513,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_MIN_BOTTOM_SIZE = 32;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":18
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":18
  * 
  * cdef int MIN_BOTTOM_SIZE = 32
  * cdef int MIN_BOTTOM_BITS = 5             # <<<<<<<<<<<<<<
@@ -64622,7 +62522,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_MIN_BOTTOM_BITS = 5;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/veb.pxi":28
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/veb.pxi":28
  *         LOWER_MASK[i] = mask
  * 
  * _init_lower_mask()             # <<<<<<<<<<<<<<
@@ -64631,7 +62531,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_f_3_sa__init_lower_mask();
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":4
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":4
  * from libc.stdlib cimport malloc, realloc, strtol
  * 
  * cdef int INDEX_SHIFT = 3             # <<<<<<<<<<<<<<
@@ -64640,7 +62540,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_INDEX_SHIFT = 3;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":5
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":5
  * 
  * cdef int INDEX_SHIFT = 3
  * cdef int INDEX_MASK = (1<<INDEX_SHIFT)-1             # <<<<<<<<<<<<<<
@@ -64649,7 +62549,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_INDEX_MASK = ((1 << __pyx_v_3_sa_INDEX_SHIFT) - 1);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":87
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":87
  *             return self.terminals.index(s)
  * 
  * cdef Alphabet ALPHABET = Alphabet()             # <<<<<<<<<<<<<<
@@ -64664,18 +62564,18 @@ PyMODINIT_FUNC PyInit__sa(void)
   __pyx_v_3_sa_ALPHABET = ((struct __pyx_obj_3_sa_Alphabet *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/sym.pxi":104
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/sym.pxi":104
  *     return ALPHABET.setindex(sym, id)
  * 
  * def sym_fromstring(char* string, bint terminal):             # <<<<<<<<<<<<<<
  *     return ALPHABET.fromstring(string, terminal)
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3_sa_3sym_fromstring, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3_sa_1sym_fromstring, NULL, __pyx_n_s___sa); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__sym_fromstring, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":5
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":5
  * # Much faster than the Python numbers reported there.
  * # Note to reader: this code is closer to C than Python
  * import gc             # <<<<<<<<<<<<<<
@@ -64687,7 +62587,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__gc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":6
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":6
  * # Note to reader: this code is closer to C than Python
  * import gc
  * import itertools             # <<<<<<<<<<<<<<
@@ -64699,7 +62599,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__itertools, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":12
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":12
  * from libc.math cimport fmod, ceil, floor, log
  * 
  * from collections import defaultdict, Counter, namedtuple             # <<<<<<<<<<<<<<
@@ -64707,7 +62607,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  * FeatureContext = namedtuple('FeatureContext',
  */
   __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(((PyObject *)__pyx_n_s__defaultdict));
   PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__defaultdict));
   __Pyx_GIVEREF(((PyObject *)__pyx_n_s__defaultdict));
@@ -64720,33 +62620,21 @@ PyMODINIT_FUNC PyInit__sa(void)
   __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__collections), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__defaultdict);
-  if (__pyx_t_1 == NULL) {
-    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__defaultdict);
-    if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__defaultdict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__defaultdict, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Counter);
-  if (__pyx_t_1 == NULL) {
-    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__Counter);
-    if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Counter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Counter, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__namedtuple);
-  if (__pyx_t_1 == NULL) {
-    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__namedtuple);
-    if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__namedtuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__namedtuple, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":14
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":14
  * from collections import defaultdict, Counter, namedtuple
  * 
  * FeatureContext = namedtuple('FeatureContext',             # <<<<<<<<<<<<<<
@@ -64756,7 +62644,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__namedtuple); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":15
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":15
  * 
  * FeatureContext = namedtuple('FeatureContext',
  *     ['fphrase',             # <<<<<<<<<<<<<<
@@ -64764,7 +62652,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  *      'paircount',
  */
   __pyx_t_1 = PyList_New(8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __Pyx_INCREF(((PyObject *)__pyx_n_s__fphrase));
   PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__fphrase));
   __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fphrase));
@@ -64790,7 +62678,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   PyList_SET_ITEM(__pyx_t_1, 7, ((PyObject *)__pyx_n_s__test_sentence));
   __Pyx_GIVEREF(((PyObject *)__pyx_n_s__test_sentence));
   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   __Pyx_INCREF(((PyObject *)__pyx_n_s__FeatureContext));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_n_s__FeatureContext));
   __Pyx_GIVEREF(((PyObject *)__pyx_n_s__FeatureContext));
@@ -64804,7 +62692,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FeatureContext, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":25
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":25
  *     ])
  * 
  * cdef int PRECOMPUTE = 0             # <<<<<<<<<<<<<<
@@ -64813,7 +62701,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_PRECOMPUTE = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":26
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":26
  * 
  * cdef int PRECOMPUTE = 0
  * cdef int MERGE = 1             # <<<<<<<<<<<<<<
@@ -64822,7 +62710,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_MERGE = 1;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":27
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":27
  * cdef int PRECOMPUTE = 0
  * cdef int MERGE = 1
  * cdef int BAEZA_YATES = 2             # <<<<<<<<<<<<<<
@@ -64831,7 +62719,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   __pyx_v_3_sa_BAEZA_YATES = 2;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":30
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":30
  * 
  * # NOTE: was encoded as a non-terminal in the previous version
  * cdef int EPSILON = sym_fromstring('*EPS*', True)             # <<<<<<<<<<<<<<
@@ -64843,10 +62731,10 @@ PyMODINIT_FUNC PyInit__sa(void)
   __pyx_t_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_kp_s_143));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_143));
-  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_143));
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_137));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_137));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_137));
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
@@ -64858,7 +62746,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_3_sa_EPSILON = __pyx_t_4;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/rulefactory.pxi":53
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/rulefactory.pxi":53
  *     cdef public int count
  *     cdef public root
  *     def __cinit__(self, extended=False):             # <<<<<<<<<<<<<<
@@ -64871,7 +62759,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":1
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":1
  * cdef StringMap FD = StringMap() # Feature name dictionary             # <<<<<<<<<<<<<<
  * 
  * INITIAL_CAPACITY = 7 # default number of features
@@ -64884,7 +62772,7 @@ PyMODINIT_FUNC PyInit__sa(void)
   __pyx_v_3_sa_FD = ((struct __pyx_obj_3_sa_StringMap *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":3
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":3
  * cdef StringMap FD = StringMap() # Feature name dictionary
  * 
  * INITIAL_CAPACITY = 7 # default number of features             # <<<<<<<<<<<<<<
@@ -64893,7 +62781,7 @@ PyMODINIT_FUNC PyInit__sa(void)
  */
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__INITIAL_CAPACITY, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/vchahun/Sandbox/cdec/python/src/sa/features.pxi":4
+  /* "/home/hltcoe/alopez/dev/cdec/python/src/sa/features.pxi":4
  * 
  * INITIAL_CAPACITY = 7 # default number of features
  * INCREMENT = INITIAL_CAPACITY # double size             # <<<<<<<<<<<<<<
@@ -64935,6 +62823,7 @@ PyMODINIT_FUNC PyInit__sa(void)
 }
 
 /* Runtime support code */
+
 #if CYTHON_REFNANNY
 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
     PyObject *m = NULL, *p = NULL;
@@ -64966,6 +62855,92 @@ static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
     return result;
 }
 
+static int __Pyx_PyBytes_SingleTailmatch(PyObject* self, PyObject* arg, Py_ssize_t start,
+                                         Py_ssize_t end, int direction)
+{
+    const char* self_ptr = PyBytes_AS_STRING(self);
+    Py_ssize_t self_len = PyBytes_GET_SIZE(self);
+    const char* sub_ptr;
+    Py_ssize_t sub_len;
+    int retval;
+
+#if PY_VERSION_HEX >= 0x02060000
+    Py_buffer view;
+    view.obj = NULL;
+#endif
+
+    if ( PyBytes_Check(arg) ) {
+        sub_ptr = PyBytes_AS_STRING(arg);
+        sub_len = PyBytes_GET_SIZE(arg);
+    }
+#if PY_MAJOR_VERSION < 3
+    // Python 2.x allows mixing unicode and str
+    else if ( PyUnicode_Check(arg) ) {
+        return PyUnicode_Tailmatch(self, arg, start, end, direction);
+    }
+#endif
+    else {
+#if PY_VERSION_HEX < 0x02060000
+        if (unlikely(PyObject_AsCharBuffer(arg, &sub_ptr, &sub_len)))
+            return -1;
+#else
+        if (unlikely(PyObject_GetBuffer(self, &view, PyBUF_SIMPLE) == -1))
+            return -1;
+        sub_ptr = (const char*) view.buf;
+        sub_len = view.len;
+#endif
+    }
+
+    if (end > self_len)
+        end = self_len;
+    else if (end < 0)
+        end += self_len;
+    if (end < 0)
+        end = 0;
+    if (start < 0)
+        start += self_len;
+    if (start < 0)
+        start = 0;
+
+    if (direction > 0) {
+        /* endswith */
+        if (end-sub_len > start)
+            start = end - sub_len;
+    }
+
+    if (start + sub_len <= end)
+        retval = !memcmp(self_ptr+start, sub_ptr, sub_len);
+    else
+        retval = 0;
+
+#if PY_VERSION_HEX >= 0x02060000
+    if (view.obj)
+        PyBuffer_Release(&view);
+#endif
+
+    return retval;
+}
+
+static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr, Py_ssize_t start,
+                                   Py_ssize_t end, int direction)
+{
+    if (unlikely(PyTuple_Check(substr))) {
+        int result;
+        Py_ssize_t i;
+        for (i = 0; i < PyTuple_GET_SIZE(substr); i++) {
+            result = __Pyx_PyBytes_SingleTailmatch(self, PyTuple_GET_ITEM(substr, i),
+                                                   start, end, direction);
+            if (result) {
+                return result;
+            }
+        }
+        return 0;
+    }
+
+    return __Pyx_PyBytes_SingleTailmatch(self, substr, start, end, direction);
+}
+
+
 static void __Pyx_RaiseDoubleKeywordsError(
     const char* func_name,
     PyObject* kw_name)
@@ -64975,7 +62950,7 @@ static void __Pyx_RaiseDoubleKeywordsError(
         "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
         #else
         "%s() got multiple values for keyword argument '%s'", func_name,
-        PyString_AsString(kw_name));
+        PyString_AS_STRING(kw_name));
         #endif
 }
 
@@ -64991,77 +62966,55 @@ static int __Pyx_ParseOptionalKeywords(
     Py_ssize_t pos = 0;
     PyObject*** name;
     PyObject*** first_kw_arg = argnames + num_pos_args;
+
     while (PyDict_Next(kwds, &pos, &key, &value)) {
         name = first_kw_arg;
         while (*name && (**name != key)) name++;
         if (*name) {
             values[name-argnames] = value;
-            continue;
-        }
-        name = first_kw_arg;
-        #if PY_MAJOR_VERSION < 3
-        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
-            while (*name) {
-                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
-                        && _PyString_Eq(**name, key)) {
-                    values[name-argnames] = value;
-                    break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    if ((**argname == key) || (
-                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
-                             && _PyString_Eq(**argname, key))) {
-                        goto arg_passed_twice;
-                    }
-                    argname++;
+        } else {
+            #if PY_MAJOR_VERSION < 3
+            if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
+            #else
+            if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
+            #endif
+                goto invalid_keyword_type;
+            } else {
+                for (name = first_kw_arg; *name; name++) {
+                    #if PY_MAJOR_VERSION >= 3
+                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                        PyUnicode_Compare(**name, key) == 0) break;
+                    #else
+                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                        _PyString_Eq(**name, key)) break;
+                    #endif
                 }
-            }
-        } else
-        #endif
-        if (likely(PyUnicode_Check(key))) {
-            while (*name) {
-                int cmp = (**name == key) ? 0 :
-                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
-                #endif
-                    PyUnicode_Compare(**name, key);
-                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                if (cmp == 0) {
+                if (*name) {
                     values[name-argnames] = value;
-                    break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    int cmp = (**argname == key) ? 0 :
-                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
-                    #endif
-                        PyUnicode_Compare(**argname, key);
-                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                    if (cmp == 0) goto arg_passed_twice;
-                    argname++;
+                } else {
+                    /* unexpected keyword found */
+                    for (name=argnames; name != first_kw_arg; name++) {
+                        if (**name == key) goto arg_passed_twice;
+                        #if PY_MAJOR_VERSION >= 3
+                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
+                        #else
+                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                            _PyString_Eq(**name, key)) goto arg_passed_twice;
+                        #endif
+                    }
+                    if (kwds2) {
+                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+                    } else {
+                        goto invalid_keyword;
+                    }
                 }
             }
-        } else
-            goto invalid_keyword_type;
-        if (kwds2) {
-            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
-        } else {
-            goto invalid_keyword;
         }
     }
     return 0;
 arg_passed_twice:
-    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
     goto bad;
 invalid_keyword_type:
     PyErr_Format(PyExc_TypeError,
@@ -65089,6 +63042,7 @@ static void __Pyx_RaiseArgtupleInvalid(
 {
     Py_ssize_t num_expected;
     const char *more_or_less;
+
     if (num_found < num_min) {
         num_expected = num_min;
         more_or_less = "at least";
@@ -65100,15 +63054,15 @@ static void __Pyx_RaiseArgtupleInvalid(
         more_or_less = "exactly";
     }
     PyErr_Format(PyExc_TypeError,
-                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)",
                  func_name, more_or_less, num_expected,
                  (num_expected == 1) ? "" : "s", num_found);
 }
 
 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyThreadState *tstate = PyThreadState_GET();
+
     tmp_type = tstate->curexc_type;
     tmp_value = tstate->curexc_value;
     tmp_tb = tstate->curexc_traceback;
@@ -65118,60 +63072,55 @@ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyOb
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_Restore(type, value, tb);
-#endif
 }
+
 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
     PyThreadState *tstate = PyThreadState_GET();
     *type = tstate->curexc_type;
     *value = tstate->curexc_value;
     *tb = tstate->curexc_traceback;
+
     tstate->curexc_type = 0;
     tstate->curexc_value = 0;
     tstate->curexc_traceback = 0;
-#else
-    PyErr_Fetch(type, value, tb);
-#endif
 }
 
+
 #if PY_MAJOR_VERSION < 3
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
-                        CYTHON_UNUSED PyObject *cause) {
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    /* cause is unused */
     Py_XINCREF(type);
-    if (!value || value == Py_None)
-        value = NULL;
-    else
+    Py_XINCREF(value);
+    Py_XINCREF(tb);
+    /* First, check the traceback argument, replacing None with NULL. */
+    if (tb == Py_None) {
+        Py_DECREF(tb);
+        tb = 0;
+    }
+    else if (tb != NULL && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto raise_error;
+    }
+    /* Next, replace a missing value with None */
+    if (value == NULL) {
+        value = Py_None;
         Py_INCREF(value);
-    if (!tb || tb == Py_None)
-        tb = NULL;
-    else {
-        Py_INCREF(tb);
-        if (!PyTraceBack_Check(tb)) {
-            PyErr_SetString(PyExc_TypeError,
-                "raise: arg 3 must be a traceback or None");
-            goto raise_error;
-        }
     }
     #if PY_VERSION_HEX < 0x02050000
-    if (PyClass_Check(type)) {
+    if (!PyClass_Check(type))
     #else
-    if (PyType_Check(type)) {
+    if (!PyType_Check(type))
     #endif
-#if CYTHON_COMPILING_IN_PYPY
-        if (!value) {
-            Py_INCREF(Py_None);
-            value = Py_None;
-        }
-#endif
-        PyErr_NormalizeException(&type, &value, &tb);
-    } else {
-        if (value) {
+    {
+        /* Raising an instance.  The value should be a dummy. */
+        if (value != Py_None) {
             PyErr_SetString(PyExc_TypeError,
                 "instance exception may not have a separate value");
             goto raise_error;
         }
+        /* Normalize to raise <class>, <instance> */
+        Py_DECREF(value);
         value = type;
         #if PY_VERSION_HEX < 0x02050000
             if (PyInstance_Check(type)) {
@@ -65194,6 +63143,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
             }
         #endif
     }
+
     __Pyx_ErrRestore(type, value, tb);
     return;
 raise_error:
@@ -65202,9 +63152,10 @@ raise_error:
     Py_XDECREF(tb);
     return;
 }
+
 #else /* Python 3+ */
+
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
-    PyObject* owned_instance = NULL;
     if (tb == Py_None) {
         tb = 0;
     } else if (tb && !PyTraceBack_Check(tb)) {
@@ -65214,6 +63165,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     if (value == Py_None)
         value = 0;
+
     if (PyExceptionInstance_Check(type)) {
         if (value) {
             PyErr_SetString(PyExc_TypeError,
@@ -65222,36 +63174,13 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
         }
         value = type;
         type = (PyObject*) Py_TYPE(value);
-    } else if (PyExceptionClass_Check(type)) {
-        PyObject *args;
-        if (!value)
-            args = PyTuple_New(0);
-        else if (PyTuple_Check(value)) {
-            Py_INCREF(value);
-            args = value;
-        }
-        else
-            args = PyTuple_Pack(1, value);
-        if (!args)
-            goto bad;
-        owned_instance = PyEval_CallObject(type, args);
-        Py_DECREF(args);
-        if (!owned_instance)
-            goto bad;
-        value = owned_instance;
-        if (!PyExceptionInstance_Check(value)) {
-            PyErr_Format(PyExc_TypeError,
-                         "calling %R should have returned an instance of "
-                         "BaseException, not %R",
-                         type, Py_TYPE(value));
-            goto bad;
-        }
-    } else {
+    } else if (!PyExceptionClass_Check(type)) {
         PyErr_SetString(PyExc_TypeError,
             "raise: exception class must be a subclass of BaseException");
         goto bad;
     }
-    if (cause && cause != Py_None) {
+
+    if (cause) {
         PyObject *fixed_cause;
         if (PyExceptionClass_Check(cause)) {
             fixed_cause = PyObject_CallObject(cause, NULL);
@@ -65268,9 +63197,14 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
                             "BaseException");
             goto bad;
         }
+        if (!value) {
+            value = PyObject_CallObject(type, NULL);
+        }
         PyException_SetCause(value, fixed_cause);
     }
+
     PyErr_SetObject(type, value);
+
     if (tb) {
         PyThreadState *tstate = PyThreadState_GET();
         PyObject* tmp_tb = tstate->curexc_traceback;
@@ -65280,8 +63214,8 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             Py_XDECREF(tmp_tb);
         }
     }
+
 bad:
-    Py_XDECREF(owned_instance);
     return;
 }
 #endif
@@ -65305,17 +63239,13 @@ static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
 {
     PyObject* key = 0;
     Py_ssize_t pos = 0;
-#if CPYTHON_COMPILING_IN_PYPY
-    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
-        goto invalid_keyword;
-    return 1;
-#else
     while (PyDict_Next(kwdict, &pos, &key, 0)) {
         #if PY_MAJOR_VERSION < 3
         if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
+        #else
+        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key)))
         #endif
-            if (unlikely(!PyUnicode_Check(key)))
-                goto invalid_keyword_type;
+            goto invalid_keyword_type;
     }
     if ((!kw_allowed) && unlikely(key))
         goto invalid_keyword;
@@ -65324,7 +63254,6 @@ invalid_keyword_type:
     PyErr_Format(PyExc_TypeError,
         "%s() keywords must be strings", function_name);
     return 0;
-#endif
 invalid_keyword:
     PyErr_Format(PyExc_TypeError,
     #if PY_MAJOR_VERSION < 3
@@ -65337,9 +63266,9 @@ invalid_keyword:
     return 0;
 }
 
+
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *local_type, *local_value, *local_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyThreadState *tstate = PyThreadState_GET();
     local_type = tstate->curexc_type;
@@ -65348,27 +63277,19 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     tstate->curexc_type = 0;
     tstate->curexc_value = 0;
     tstate->curexc_traceback = 0;
-#else
-    PyErr_Fetch(&local_type, &local_value, &local_tb);
-#endif
     PyErr_NormalizeException(&local_type, &local_value, &local_tb);
-#if CYTHON_COMPILING_IN_CPYTHON
     if (unlikely(tstate->curexc_type))
-#else
-    if (unlikely(PyErr_Occurred()))
-#endif
         goto bad;
     #if PY_MAJOR_VERSION >= 3
     if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
         goto bad;
     #endif
-    Py_INCREF(local_type);
-    Py_INCREF(local_value);
-    Py_INCREF(local_tb);
     *type = local_type;
     *value = local_value;
     *tb = local_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
+    Py_INCREF(local_type);
+    Py_INCREF(local_value);
+    Py_INCREF(local_tb);
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
@@ -65376,13 +63297,10 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     tstate->exc_value = local_value;
     tstate->exc_traceback = local_tb;
     /* Make sure tstate is in a consistent state when we XDECREF
-       these objects (DECREF may run arbitrary code). */
+       these objects (XDECREF may run arbitrary code). */
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_SetExcInfo(local_type, local_value, local_tb);
-#endif
     return 0;
 bad:
     *type = 0;
@@ -65394,6 +63312,7 @@ bad:
     return -1;
 }
 
+
 static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) {
     PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
 }
@@ -65411,40 +63330,23 @@ static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
     return r;
 }
 
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
     PyErr_Format(PyExc_ValueError,
-                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+                 "need more than %"PY_FORMAT_SIZE_T"d value%s to unpack",
+                 index, (index == 1) ? "" : "s");
 }
 
-static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
     PyErr_Format(PyExc_ValueError,
-                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
-                 index, (index == 1) ? "" : "s");
+                 "too many values to unpack (expected %"PY_FORMAT_SIZE_T"d)", expected);
 }
 
-static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    PyObject* exc_type = tstate->curexc_type;
-    if (unlikely(exc_type)) {
-        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
-            PyObject *exc_value, *exc_tb;
-            exc_value = tstate->curexc_value;
-            exc_tb = tstate->curexc_traceback;
-            tstate->curexc_type = 0;
-            tstate->curexc_value = 0;
-            tstate->curexc_traceback = 0;
-            Py_DECREF(exc_type);
-            Py_XDECREF(exc_value);
-            Py_XDECREF(exc_tb);
-            return 0;
-        } else {
-            return -1;
-        }
-    }
-    return 0;
-#else
-    if (unlikely(PyErr_Occurred())) {
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    if (unlikely(retval)) {
+        Py_DECREF(retval);
+        __Pyx_RaiseTooManyValuesError(expected);
+        return -1;
+    } else if (PyErr_Occurred()) {
         if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
             PyErr_Clear();
             return 0;
@@ -65453,25 +63355,11 @@ static CYTHON_INLINE int __Pyx_IterFinish(void) {
         }
     }
     return 0;
-#endif
 }
 
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
-    if (unlikely(retval)) {
-        Py_DECREF(retval);
-        __Pyx_RaiseTooManyValuesError(expected);
-        return -1;
-    } else {
-        return __Pyx_IterFinish();
-    }
-    return 0;
-}
 
 static double __Pyx__PyObject_AsDouble(PyObject* obj) {
     PyObject* float_value;
-#if CYTHON_COMPILING_IN_PYPY
-    float_value = PyNumber_Float(obj);
-#else
     if (Py_TYPE(obj)->tp_as_number && Py_TYPE(obj)->tp_as_number->nb_float) {
         return PyFloat_AsDouble(obj);
     } else if (PyUnicode_CheckExact(obj) || PyBytes_CheckExact(obj)) {
@@ -65488,7 +63376,6 @@ static double __Pyx__PyObject_AsDouble(PyObject* obj) {
         PyTuple_SET_ITEM(args, 0, 0);
         Py_DECREF(args);
     }
-#endif
     if (likely(float_value)) {
         double value = PyFloat_AS_DOUBLE(float_value);
         Py_DECREF(float_value);
@@ -65522,158 +63409,8 @@ static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed
     return 0;
 }
 
-static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-}
-
-static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
-    if (t == Py_None) {
-      __Pyx_RaiseNoneNotIterableError();
-    } else if (PyTuple_GET_SIZE(t) < index) {
-      __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
-    } else {
-      __Pyx_RaiseTooManyValuesError(index);
-    }
-}
-
-static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
-                                             int is_tuple, int has_known_size, int decref_tuple) {
-    Py_ssize_t index;
-    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
-    if (!is_tuple && unlikely(!PyTuple_Check(tuple))) {
-        iternextfunc iternext;
-        iter = PyObject_GetIter(tuple);
-        if (unlikely(!iter)) goto bad;
-        if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
-        iternext = Py_TYPE(iter)->tp_iternext;
-        value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
-        value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
-        if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
-        Py_DECREF(iter);
-    } else {
-        if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) {
-            __Pyx_UnpackTupleError(tuple, 2);
-            goto bad;
-        }
-#if CYTHON_COMPILING_IN_PYPY
-        value1 = PySequence_ITEM(tuple, 0);
-        if (unlikely(!value1)) goto bad;
-        value2 = PySequence_ITEM(tuple, 1);
-        if (unlikely(!value2)) goto bad;
-#else
-        value1 = PyTuple_GET_ITEM(tuple, 0);
-        value2 = PyTuple_GET_ITEM(tuple, 1);
-        Py_INCREF(value1);
-        Py_INCREF(value2);
-#endif
-        if (decref_tuple) { Py_DECREF(tuple); }
-    }
-    *pvalue1 = value1;
-    *pvalue2 = value2;
-    return 0;
-unpacking_failed:
-    if (!has_known_size && __Pyx_IterFinish() == 0)
-        __Pyx_RaiseNeedMoreValuesError(index);
-bad:
-    Py_XDECREF(iter);
-    Py_XDECREF(value1);
-    Py_XDECREF(value2);
-    if (decref_tuple) { Py_XDECREF(tuple); }
-    return -1;
-}
-
-static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
-                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
-    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
-    *p_source_is_dict = is_dict;
-#if !CYTHON_COMPILING_IN_PYPY
-    if (is_dict) {
-        *p_orig_length = PyDict_Size(iterable);
-        Py_INCREF(iterable);
-        return iterable;
-    }
-#endif
-    *p_orig_length = 0;
-    if (method_name) {
-        PyObject* iter;
-        iterable = PyObject_CallMethodObjArgs(iterable, method_name, NULL);
-        if (!iterable)
-            return NULL;
-#if !CYTHON_COMPILING_IN_PYPY
-        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
-            return iterable;
-#endif
-        iter = PyObject_GetIter(iterable);
-        Py_DECREF(iterable);
-        return iter;
-    }
-    return PyObject_GetIter(iterable);
-}
-static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* iter_obj, Py_ssize_t orig_length, Py_ssize_t* ppos,
-                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
-    PyObject* next_item;
-#if !CYTHON_COMPILING_IN_PYPY
-    if (source_is_dict) {
-        PyObject *key, *value;
-        if (unlikely(orig_length != PyDict_Size(iter_obj))) {
-            PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
-            return -1;
-        }
-        if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
-            return 0;
-        }
-        if (pitem) {
-            PyObject* tuple = PyTuple_New(2);
-            if (unlikely(!tuple)) {
-                return -1;
-            }
-            Py_INCREF(key);
-            Py_INCREF(value);
-            PyTuple_SET_ITEM(tuple, 0, key);
-            PyTuple_SET_ITEM(tuple, 1, value);
-            *pitem = tuple;
-        } else {
-            if (pkey) {
-                Py_INCREF(key);
-                *pkey = key;
-            }
-            if (pvalue) {
-                Py_INCREF(value);
-                *pvalue = value;
-            }
-        }
-        return 1;
-    } else if (PyTuple_CheckExact(iter_obj)) {
-        Py_ssize_t pos = *ppos;
-        if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
-        *ppos = pos + 1;
-        next_item = PyTuple_GET_ITEM(iter_obj, pos);
-        Py_INCREF(next_item);
-    } else if (PyList_CheckExact(iter_obj)) {
-        Py_ssize_t pos = *ppos;
-        if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
-        *ppos = pos + 1;
-        next_item = PyList_GET_ITEM(iter_obj, pos);
-        Py_INCREF(next_item);
-    } else
-#endif
-    {
-        next_item = PyIter_Next(iter_obj);
-        if (unlikely(!next_item)) {
-            return __Pyx_IterFinish();
-        }
-    }
-    if (pitem) {
-        *pitem = next_item;
-    } else if (pkey && pvalue) {
-        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
-            return -1;
-    } else if (pkey) {
-        *pkey = next_item;
-    } else {
-        *pvalue = next_item;
-    }
-    return 1;
+static CYTHON_INLINE void __Pyx_RaiseNoneIndexingError(void) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is unsubscriptable");
 }
 
 static CYTHON_INLINE int __Pyx_div_int(int a, int b) {
@@ -65684,7 +63421,6 @@ static CYTHON_INLINE int __Pyx_div_int(int a, int b) {
 }
 
 static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
     PyThreadState *tstate = PyThreadState_GET();
     *type = tstate->exc_type;
     *value = tstate->exc_value;
@@ -65692,12 +63428,9 @@ static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value,
     Py_XINCREF(*type);
     Py_XINCREF(*value);
     Py_XINCREF(*tb);
-#else
-    PyErr_GetExcInfo(type, value, tb);
-#endif
 }
+
 static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->exc_type;
@@ -65709,9 +63442,6 @@ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb)
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_SetExcInfo(type, value, tb);
-#endif
 }
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) {
@@ -65740,33 +63470,12 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) {
         goto bad;
     #if PY_VERSION_HEX >= 0x02050000
     {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                /* try package relative import first */
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
-                }
-            }
-            level = 0; /* try absolute import on failure */
-        }
-        #endif
-        if (!module) {
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-        }
+        PyObject *py_level = PyInt_FromLong(level);
+        if (!py_level)
+            goto bad;
+        module = PyObject_CallFunctionObjArgs(py_import,
+            name, global_dict, empty_dict, list, py_level, NULL);
+        Py_DECREF(py_level);
     }
     #else
     if (level>0) {
@@ -65783,422 +63492,106 @@ bad:
     return module;
 }
 
-static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name) {
-#if PY_MAJOR_VERSION < 3
-    PyErr_Format(PyExc_ImportError, "cannot import name %.230s",
-                 PyString_AsString(name));
-#else
-    PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
-#endif
-}
-
-static PyObject *
-__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
-{
-    if (op->func_doc == NULL && op->func.m_ml->ml_doc) {
-#if PY_MAJOR_VERSION >= 3
-        op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
-#else
-        op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
-#endif
-    }
-    if (op->func_doc == 0) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-    Py_INCREF(op->func_doc);
-    return op->func_doc;
-}
-static int
-__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp = op->func_doc;
-    if (value == NULL)
-        op->func_doc = Py_None; /* Mark as deleted */
-    else
-        op->func_doc = value;
-    Py_INCREF(op->func_doc);
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op)
-{
-    if (op->func_name == NULL) {
-#if PY_MAJOR_VERSION >= 3
-        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
-#else
-        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
-#endif
-    }
-    Py_INCREF(op->func_name);
-    return op->func_name;
-}
-static int
-__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-#if PY_MAJOR_VERSION >= 3
-    if (value == NULL || !PyUnicode_Check(value)) {
-#else
-    if (value == NULL || !PyString_Check(value)) {
-#endif
-        PyErr_SetString(PyExc_TypeError,
-                        "__name__ must be set to a string object");
-        return -1;
-    }
-    tmp = op->func_name;
-    Py_INCREF(value);
-    op->func_name = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
-{
-    PyObject *self;
-    self = m->func_closure;
-    if (self == NULL)
-        self = Py_None;
-    Py_INCREF(self);
-    return self;
-}
-static PyObject *
-__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op)
-{
-    if (op->func_dict == NULL) {
-        op->func_dict = PyDict_New();
-        if (op->func_dict == NULL)
-            return NULL;
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+    if (s1 == s2) {   /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */
+        return (equals == Py_EQ);
+    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+        if (PyBytes_GET_SIZE(s1) != PyBytes_GET_SIZE(s2)) {
+            return (equals == Py_NE);
+        } else if (PyBytes_GET_SIZE(s1) == 1) {
+            if (equals == Py_EQ)
+                return (PyBytes_AS_STRING(s1)[0] == PyBytes_AS_STRING(s2)[0]);
+            else
+                return (PyBytes_AS_STRING(s1)[0] != PyBytes_AS_STRING(s2)[0]);
+        } else {
+            int result = memcmp(PyBytes_AS_STRING(s1), PyBytes_AS_STRING(s2), (size_t)PyBytes_GET_SIZE(s1));
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
     }
-    Py_INCREF(op->func_dict);
-    return op->func_dict;
 }
-static int
-__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-    if (value == NULL) {
-        PyErr_SetString(PyExc_TypeError,
-               "function's dictionary may not be deleted");
-        return -1;
-    }
-    if (!PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-               "setting function's dictionary to a non-dict");
-        return -1;
-    }
-    tmp = op->func_dict;
-    Py_INCREF(value);
-    op->func_dict = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_globals(CYTHON_UNUSED __pyx_CyFunctionObject *op)
-{
-    PyObject* dict = PyModule_GetDict(__pyx_m);
-    Py_XINCREF(dict);
-    return dict;
-}
-static PyObject *
-__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op)
-{
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-static PyObject *
-__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op)
-{
-    PyObject* result = (op->func_code) ? op->func_code : Py_None;
-    Py_INCREF(result);
-    return result;
-}
-static PyObject *
-__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op)
-{
-    if (op->defaults_tuple) {
-        Py_INCREF(op->defaults_tuple);
-        return op->defaults_tuple;
-    }
-    if (op->defaults_getter) {
-        PyObject *res = op->defaults_getter((PyObject *) op);
-        if (res) {
-            Py_INCREF(res);
-            op->defaults_tuple = res;
+
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
+    if (s1 == s2) {   /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */
+        return (equals == Py_EQ);
+    } else if (PyUnicode_CheckExact(s1) & PyUnicode_CheckExact(s2)) {
+        if (PyUnicode_GET_SIZE(s1) != PyUnicode_GET_SIZE(s2)) {
+            return (equals == Py_NE);
+        } else if (PyUnicode_GET_SIZE(s1) == 1) {
+            if (equals == Py_EQ)
+                return (PyUnicode_AS_UNICODE(s1)[0] == PyUnicode_AS_UNICODE(s2)[0]);
+            else
+                return (PyUnicode_AS_UNICODE(s1)[0] != PyUnicode_AS_UNICODE(s2)[0]);
+        } else {
+            int result = PyUnicode_Compare(s1, s2);
+            if ((result == -1) && unlikely(PyErr_Occurred()))
+                return -1;
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
         }
-        return res;
+    } else if ((s1 == Py_None) & PyUnicode_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyUnicode_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
     }
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-static PyGetSetDef __pyx_CyFunction_getsets[] = {
-    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
-    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
-    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
-    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
-    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
-    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
-    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
-    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
-    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
-    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
-    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
-    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
-    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
-    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, 0, 0, 0},
-    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, 0, 0, 0},
-    {0, 0, 0, 0, 0}
-};
-#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */
-#define PY_WRITE_RESTRICTED WRITE_RESTRICTED
-#endif
-static PyMemberDef __pyx_CyFunction_members[] = {
-    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0},
-    {0, 0, 0,  0, 0}
-};
-static PyObject *
-__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
-{
-#if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
-#else
-    return PyString_FromString(m->func.m_ml->ml_name);
-#endif
 }
-static PyMethodDef __pyx_CyFunction_methods[] = {
-    {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
-    {0, 0, 0, 0}
-};
-static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags,
-                                      PyObject *closure, PyObject *module, PyObject* code) {
-    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
+
+
+static PyObject *__pyx_binding_PyCFunctionType_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module) {
+    __pyx_binding_PyCFunctionType_object *op = PyObject_GC_New(__pyx_binding_PyCFunctionType_object, __pyx_binding_PyCFunctionType);
     if (op == NULL)
         return NULL;
-    op->flags = flags;
-    op->func_weakreflist = NULL;
     op->func.m_ml = ml;
-    op->func.m_self = (PyObject *) op;
-    Py_XINCREF(closure);
-    op->func_closure = closure;
+    Py_XINCREF(self);
+    op->func.m_self = self;
     Py_XINCREF(module);
     op->func.m_module = module;
-    op->func_dict = NULL;
-    op->func_name = NULL;
-    op->func_doc = NULL;
-    op->func_classobj = NULL;
-    Py_XINCREF(code);
-    op->func_code = code;
-    op->defaults_pyobjects = 0;
-    op->defaults = NULL;
-    op->defaults_tuple = NULL;
-    op->defaults_getter = NULL;
     PyObject_GC_Track(op);
-    return (PyObject *) op;
-}
-static int
-__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
-{
-    Py_CLEAR(m->func_closure);
-    Py_CLEAR(m->func.m_module);
-    Py_CLEAR(m->func_dict);
-    Py_CLEAR(m->func_name);
-    Py_CLEAR(m->func_doc);
-    Py_CLEAR(m->func_code);
-    Py_CLEAR(m->func_classobj);
-    Py_CLEAR(m->defaults_tuple);
-    if (m->defaults) {
-        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
-        int i;
-        for (i = 0; i < m->defaults_pyobjects; i++)
-            Py_XDECREF(pydefaults[i]);
-        PyMem_Free(m->defaults);
-        m->defaults = NULL;
-    }
-    return 0;
+    return (PyObject *)op;
 }
-static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
-{
+
+static void __pyx_binding_PyCFunctionType_dealloc(__pyx_binding_PyCFunctionType_object *m) {
     PyObject_GC_UnTrack(m);
-    if (m->func_weakreflist != NULL)
-        PyObject_ClearWeakRefs((PyObject *) m);
-    __Pyx_CyFunction_clear(m);
+    Py_XDECREF(m->func.m_self);
+    Py_XDECREF(m->func.m_module);
     PyObject_GC_Del(m);
 }
-static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
-{
-    Py_VISIT(m->func_closure);
-    Py_VISIT(m->func.m_module);
-    Py_VISIT(m->func_dict);
-    Py_VISIT(m->func_name);
-    Py_VISIT(m->func_doc);
-    Py_VISIT(m->func_code);
-    Py_VISIT(m->func_classobj);
-    Py_VISIT(m->defaults_tuple);
-    if (m->defaults) {
-        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
-        int i;
-        for (i = 0; i < m->defaults_pyobjects; i++)
-            Py_VISIT(pydefaults[i]);
-    }
-    return 0;
-}
-static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
-{
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
-        Py_INCREF(func);
-        return func;
-    }
-    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
-        if (type == NULL)
-            type = (PyObject *)(Py_TYPE(obj));
-        return PyMethod_New(func,
-                            type, (PyObject *)(Py_TYPE(type)));
-    }
+
+static PyObject *__pyx_binding_PyCFunctionType_descr_get(PyObject *func, PyObject *obj, PyObject *type) {
     if (obj == Py_None)
-        obj = NULL;
+            obj = NULL;
     return PyMethod_New(func, obj, type);
 }
-static PyObject*
-__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
-{
-    PyObject *func_name = __Pyx_CyFunction_get_name(op);
-#if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromFormat("<cyfunction %U at %p>",
-                                func_name, (void *)op);
-#else
-    return PyString_FromFormat("<cyfunction %s at %p>",
-                               PyString_AsString(func_name), (void *)op);
-#endif
-}
-#if CYTHON_COMPILING_IN_PYPY
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-    PyCFunctionObject* f = (PyCFunctionObject*)func;
-    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
-    PyObject *self = PyCFunction_GET_SELF(func);
-    Py_ssize_t size;
-    switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
-    case METH_VARARGS:
-        if (likely(kw == NULL) || PyDict_Size(kw) == 0)
-            return (*meth)(self, arg);
-        break;
-    case METH_VARARGS | METH_KEYWORDS:
-        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
-    case METH_NOARGS:
-        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
-            size = PyTuple_GET_SIZE(arg);
-            if (size == 0)
-                return (*meth)(self, NULL);
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes no arguments (%zd given)",
-                f->m_ml->ml_name, size);
-            return NULL;
-        }
-        break;
-    case METH_O:
-        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
-            size = PyTuple_GET_SIZE(arg);
-            if (size == 1)
-                return (*meth)(self, PyTuple_GET_ITEM(arg, 0));
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes exactly one argument (%zd given)",
-                f->m_ml->ml_name, size);
-            return NULL;
-        }
-        break;
-    default:
-        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
-                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
-                        "longer supported!");
-        return NULL;
-    }
-    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
-                 f->m_ml->ml_name);
-    return NULL;
-}
-#else
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-	return PyCFunction_Call(func, arg, kw);
-}
-#endif
-static PyTypeObject __pyx_CyFunctionType_type = {
-    PyVarObject_HEAD_INIT(0, 0)
-    __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/
-    sizeof(__pyx_CyFunctionObject),   /*tp_basicsize*/
-    0,                                  /*tp_itemsize*/
-    (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/
-    0,                                  /*tp_print*/
-    0,                                  /*tp_getattr*/
-    0,                                  /*tp_setattr*/
-#if PY_MAJOR_VERSION < 3
-    0,                                  /*tp_compare*/
-#else
-    0,                                  /*reserved*/
-#endif
-    (reprfunc) __Pyx_CyFunction_repr,   /*tp_repr*/
-    0,                                  /*tp_as_number*/
-    0,                                  /*tp_as_sequence*/
-    0,                                  /*tp_as_mapping*/
-    0,                                  /*tp_hash*/
-    __Pyx_CyFunction_Call,              /*tp_call*/
-    0,                                  /*tp_str*/
-    0,                                  /*tp_getattro*/
-    0,                                  /*tp_setattro*/
-    0,                                  /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/
-    0,                                  /*tp_doc*/
-    (traverseproc) __Pyx_CyFunction_traverse,   /*tp_traverse*/
-    (inquiry) __Pyx_CyFunction_clear,   /*tp_clear*/
-    0,                                  /*tp_richcompare*/
-    offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */
-    0,                                  /*tp_iter*/
-    0,                                  /*tp_iternext*/
-    __pyx_CyFunction_methods,           /*tp_methods*/
-    __pyx_CyFunction_members,           /*tp_members*/
-    __pyx_CyFunction_getsets,           /*tp_getset*/
-    0,                                  /*tp_base*/
-    0,                                  /*tp_dict*/
-    __Pyx_CyFunction_descr_get,         /*tp_descr_get*/
-    0,                                  /*tp_descr_set*/
-    offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/
-    0,                                  /*tp_init*/
-    0,                                  /*tp_alloc*/
-    0,                                  /*tp_new*/
-    0,                                  /*tp_free*/
-    0,                                  /*tp_is_gc*/
-    0,                                  /*tp_bases*/
-    0,                                  /*tp_mro*/
-    0,                                  /*tp_cache*/
-    0,                                  /*tp_subclasses*/
-    0,                                  /*tp_weaklist*/
-    0,                                  /*tp_del*/
-#if PY_VERSION_HEX >= 0x02060000
-    0,                                  /*tp_version_tag*/
-#endif
-};
-static int __Pyx_CyFunction_init(void) {
-#if !CYTHON_COMPILING_IN_PYPY
-    __pyx_CyFunctionType_type.tp_call = PyCFunction_Call;
-#endif
-    if (PyType_Ready(&__pyx_CyFunctionType_type) < 0)
+
+static int __pyx_binding_PyCFunctionType_init(void) {
+    __pyx_binding_PyCFunctionType_type = PyCFunction_Type;
+    __pyx_binding_PyCFunctionType_type.tp_name = __Pyx_NAMESTR("cython_binding_builtin_function_or_method");
+    __pyx_binding_PyCFunctionType_type.tp_dealloc = (destructor)__pyx_binding_PyCFunctionType_dealloc;
+    __pyx_binding_PyCFunctionType_type.tp_descr_get = __pyx_binding_PyCFunctionType_descr_get;
+    if (PyType_Ready(&__pyx_binding_PyCFunctionType_type) < 0) {
         return -1;
-    __pyx_CyFunctionType = &__pyx_CyFunctionType_type;
+    }
+    __pyx_binding_PyCFunctionType = &__pyx_binding_PyCFunctionType_type;
     return 0;
-}
-static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults = PyMem_Malloc(size);
-    if (!m->defaults)
-        return PyErr_NoMemory();
-    memset(m->defaults, 0, sizeof(size));
-    m->defaults_pyobjects = pyobjects;
-    return m->defaults;
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults_tuple = tuple;
-    Py_INCREF(tuple);
+
 }
 
 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
@@ -66601,8 +63994,8 @@ static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject*
     }
 }
 
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) {
+static void __Pyx_WriteUnraisable(const char *name, int clineno,
+                                  int lineno, const char *filename) {
     PyObject *old_exc, *old_val, *old_tb;
     PyObject *ctx;
     __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
@@ -66622,522 +64015,125 @@ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
 
 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
     PyThreadState *tstate = PyThreadState_GET();
+
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
+
     tstate->exc_type = *type;
     tstate->exc_value = *value;
     tstate->exc_traceback = *tb;
-#else
-    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
-    PyErr_SetExcInfo(*type, *value, *tb);
-#endif
+
     *type = tmp_type;
     *value = tmp_value;
     *tb = tmp_tb;
 }
 
-static PyObject *__Pyx_Generator_Next(PyObject *self);
-static PyObject *__Pyx_Generator_Send(PyObject *self, PyObject *value);
-static PyObject *__Pyx_Generator_Close(PyObject *self);
-static PyObject *__Pyx_Generator_Throw(PyObject *gen, PyObject *args);
-static PyTypeObject *__pyx_GeneratorType = 0;
-#define __Pyx_Generator_CheckExact(obj) (Py_TYPE(obj) == __pyx_GeneratorType)
-#define __Pyx_Generator_Undelegate(gen) Py_CLEAR((gen)->yieldfrom)
-#if 1 || PY_VERSION_HEX < 0x030300B0
-static int __Pyx_PyGen_FetchStopIterationValue(PyObject **pvalue) {
-    PyObject *et, *ev, *tb;
-    PyObject *value = NULL;
-    __Pyx_ErrFetch(&et, &ev, &tb);
-    if (!et) {
-        Py_XDECREF(tb);
-        Py_XDECREF(ev);
-        Py_INCREF(Py_None);
-        *pvalue = Py_None;
-        return 0;
-    }
-    if (unlikely(et != PyExc_StopIteration) &&
-            unlikely(!PyErr_GivenExceptionMatches(et, PyExc_StopIteration))) {
-        __Pyx_ErrRestore(et, ev, tb);
-        return -1;
-    }
-    if (likely(et == PyExc_StopIteration)) {
-        if (likely(!ev) || !PyObject_IsInstance(ev, PyExc_StopIteration)) {
-            if (!ev) {
-                Py_INCREF(Py_None);
-                ev = Py_None;
-            }
-            Py_XDECREF(tb);
-            Py_DECREF(et);
-            *pvalue = ev;
-            return 0;
-        }
-    }
-    PyErr_NormalizeException(&et, &ev, &tb);
-    if (unlikely(!PyObject_IsInstance(ev, PyExc_StopIteration))) {
-        __Pyx_ErrRestore(et, ev, tb);
-        return -1;
-    }
-    Py_XDECREF(tb);
-    Py_DECREF(et);
-#if PY_VERSION_HEX >= 0x030300A0
-    value = ((PyStopIterationObject *)ev)->value;
-    Py_INCREF(value);
-    Py_DECREF(ev);
-#else
-    {
-        PyObject* args = PyObject_GetAttrString(ev, "args");
-        Py_DECREF(ev);
-        if (likely(args)) {
-            value = PyObject_GetItem(args, 0);
-            Py_DECREF(args);
-        }
-        if (unlikely(!value)) {
-            __Pyx_ErrRestore(NULL, NULL, NULL);
-            Py_INCREF(Py_None);
-            value = Py_None;
-        }
-    }
-#endif
-    *pvalue = value;
-    return 0;
-}
-#endif
-static CYTHON_INLINE
-void __Pyx_Generator_ExceptionClear(__pyx_GeneratorObject *self) {
-    PyObject *exc_type = self->exc_type;
-    PyObject *exc_value = self->exc_value;
-    PyObject *exc_traceback = self->exc_traceback;
+static CYTHON_INLINE void __Pyx_Generator_ExceptionClear(struct __pyx_Generator_object *self)
+{
+    Py_XDECREF(self->exc_type);
+    Py_XDECREF(self->exc_value);
+    Py_XDECREF(self->exc_traceback);
+
     self->exc_type = NULL;
     self->exc_value = NULL;
     self->exc_traceback = NULL;
-    Py_XDECREF(exc_type);
-    Py_XDECREF(exc_value);
-    Py_XDECREF(exc_traceback);
 }
-static CYTHON_INLINE
-int __Pyx_Generator_CheckRunning(__pyx_GeneratorObject *gen) {
-    if (unlikely(gen->is_running)) {
+
+static CYTHON_INLINE PyObject *__Pyx_Generator_SendEx(struct __pyx_Generator_object *self, PyObject *value)
+{
+    PyObject *retval;
+
+    if (self->is_running) {
         PyErr_SetString(PyExc_ValueError,
                         "generator already executing");
-        return 1;
+        return NULL;
     }
-    return 0;
-}
-static CYTHON_INLINE
-PyObject *__Pyx_Generator_SendEx(__pyx_GeneratorObject *self, PyObject *value) {
-    PyObject *retval;
-    assert(!self->is_running);
-    if (unlikely(self->resume_label == 0)) {
-        if (unlikely(value && value != Py_None)) {
+
+    if (self->resume_label == 0) {
+        if (value && value != Py_None) {
             PyErr_SetString(PyExc_TypeError,
                             "can't send non-None value to a "
                             "just-started generator");
             return NULL;
         }
     }
-    if (unlikely(self->resume_label == -1)) {
+
+    if (self->resume_label == -1) {
         PyErr_SetNone(PyExc_StopIteration);
         return NULL;
     }
-    if (value) {
-#if CYTHON_COMPILING_IN_PYPY
-#else
-        /* Generators always return to their most recent caller, not
-         * necessarily their creator. */
-        if (self->exc_traceback) {
-            PyThreadState *tstate = PyThreadState_GET();
-            PyTracebackObject *tb = (PyTracebackObject *) self->exc_traceback;
-            PyFrameObject *f = tb->tb_frame;
-            Py_XINCREF(tstate->frame);
-            assert(f->f_back == NULL);
-            f->f_back = tstate->frame;
-        }
-#endif
-        __Pyx_ExceptionSwap(&self->exc_type, &self->exc_value,
-                            &self->exc_traceback);
-    } else {
+
+
+    if (value)
+        __Pyx_ExceptionSwap(&self->exc_type, &self->exc_value, &self->exc_traceback);
+    else
         __Pyx_Generator_ExceptionClear(self);
-    }
+
     self->is_running = 1;
     retval = self->body((PyObject *) self, value);
     self->is_running = 0;
-    if (retval) {
-        __Pyx_ExceptionSwap(&self->exc_type, &self->exc_value,
-                            &self->exc_traceback);
-#if CYTHON_COMPILING_IN_PYPY
-#else
-        /* Don't keep the reference to f_back any longer than necessary.  It
-         * may keep a chain of frames alive or it could create a reference
-         * cycle. */
-        if (self->exc_traceback) {
-            PyTracebackObject *tb = (PyTracebackObject *) self->exc_traceback;
-            PyFrameObject *f = tb->tb_frame;
-            Py_CLEAR(f->f_back);
-        }
-#endif
-    } else {
+
+    if (retval)
+        __Pyx_ExceptionSwap(&self->exc_type, &self->exc_value, &self->exc_traceback);
+    else
         __Pyx_Generator_ExceptionClear(self);
-    }
+
     return retval;
 }
-static CYTHON_INLINE
-PyObject *__Pyx_Generator_FinishDelegation(__pyx_GeneratorObject *gen) {
-    PyObject *ret;
-    PyObject *val = NULL;
-    __Pyx_Generator_Undelegate(gen);
-    __Pyx_PyGen_FetchStopIterationValue(&val);
-    ret = __Pyx_Generator_SendEx(gen, val);
-    Py_XDECREF(val);
-    return ret;
-}
-static PyObject *__Pyx_Generator_Next(PyObject *self) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject*) self;
-    PyObject *yf = gen->yieldfrom;
-    if (unlikely(__Pyx_Generator_CheckRunning(gen)))
-        return NULL;
-    if (yf) {
-        PyObject *ret;
-        gen->is_running = 1;
-        ret = Py_TYPE(yf)->tp_iternext(yf);
-        gen->is_running = 0;
-        if (likely(ret)) {
-            return ret;
-        }
-        return __Pyx_Generator_FinishDelegation(gen);
-    }
-    return __Pyx_Generator_SendEx(gen, Py_None);
+
+static PyObject *__Pyx_Generator_Next(PyObject *self)
+{
+    return __Pyx_Generator_SendEx((struct __pyx_Generator_object *) self, Py_None);
 }
-static PyObject *__Pyx_Generator_Send(PyObject *self, PyObject *value) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject*) self;
-    PyObject *yf = gen->yieldfrom;
-    if (unlikely(__Pyx_Generator_CheckRunning(gen)))
-        return NULL;
-    if (yf) {
-        PyObject *ret;
-        gen->is_running = 1;
-        if (__Pyx_Generator_CheckExact(yf)) {
-            ret = __Pyx_Generator_Send(yf, value);
-        } else {
-            if (value == Py_None)
-                ret = PyIter_Next(yf);
-            else
-                ret = PyObject_CallMethod(yf, (char*)"send", (char*)"O", value);
-        }
-        gen->is_running = 0;
-        if (likely(ret)) {
-            return ret;
-        }
-        return __Pyx_Generator_FinishDelegation(gen);
-    }
-    return __Pyx_Generator_SendEx(gen, value);
-}
-static int __Pyx_Generator_CloseIter(__pyx_GeneratorObject *gen, PyObject *yf) {
-    PyObject *retval = NULL;
-    int err = 0;
-    if (__Pyx_Generator_CheckExact(yf)) {
-        retval = __Pyx_Generator_Close(yf);
-        if (!retval)
-            return -1;
-    } else {
-        PyObject *meth;
-        gen->is_running = 1;
-        meth = PyObject_GetAttrString(yf, "close");
-        if (unlikely(!meth)) {
-            if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
-                PyErr_WriteUnraisable(yf);
-            }
-            PyErr_Clear();
-        } else {
-            retval = PyObject_CallFunction(meth, NULL);
-            Py_DECREF(meth);
-            if (!retval)
-                err = -1;
-        }
-        gen->is_running = 0;
-    }
-    Py_XDECREF(retval);
-    return err;
-}
-static PyObject *__Pyx_Generator_Close(PyObject *self) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject *) self;
-    PyObject *retval, *raised_exception;
-    PyObject *yf = gen->yieldfrom;
-    int err = 0;
-    if (unlikely(__Pyx_Generator_CheckRunning(gen)))
-        return NULL;
-    if (yf) {
-        Py_INCREF(yf);
-        err = __Pyx_Generator_CloseIter(gen, yf);
-        __Pyx_Generator_Undelegate(gen);
-        Py_DECREF(yf);
-    }
-    if (err == 0)
+
+static PyObject *__Pyx_Generator_Send(PyObject *self, PyObject *value)
+{
+    return __Pyx_Generator_SendEx((struct __pyx_Generator_object *) self, value);
+}
+
+static PyObject *__Pyx_Generator_Close(PyObject *self)
+{
+    struct __pyx_Generator_object *generator = (struct __pyx_Generator_object *) self;
+    PyObject *retval;
 #if PY_VERSION_HEX < 0x02050000
-        PyErr_SetNone(PyExc_StopIteration);
+    PyErr_SetNone(PyExc_StopIteration);
 #else
-        PyErr_SetNone(PyExc_GeneratorExit);
+    PyErr_SetNone(PyExc_GeneratorExit);
 #endif
-    retval = __Pyx_Generator_SendEx(gen, NULL);
+    retval = __Pyx_Generator_SendEx(generator, NULL);
     if (retval) {
         Py_DECREF(retval);
         PyErr_SetString(PyExc_RuntimeError,
                         "generator ignored GeneratorExit");
         return NULL;
     }
-    raised_exception = PyErr_Occurred();
-    if (!raised_exception
-        || raised_exception == PyExc_StopIteration
-#if PY_VERSION_HEX >= 0x02050000
-        || raised_exception == PyExc_GeneratorExit
-        || PyErr_GivenExceptionMatches(raised_exception, PyExc_GeneratorExit)
+#if PY_VERSION_HEX < 0x02050000
+    if (PyErr_ExceptionMatches(PyExc_StopIteration))
+#else
+    if (PyErr_ExceptionMatches(PyExc_StopIteration)
+        || PyErr_ExceptionMatches(PyExc_GeneratorExit))
 #endif
-        || PyErr_GivenExceptionMatches(raised_exception, PyExc_StopIteration))
     {
-        if (raised_exception) PyErr_Clear();      /* ignore these errors */
+        PyErr_Clear();          /* ignore these errors */
         Py_INCREF(Py_None);
         return Py_None;
     }
     return NULL;
 }
-static PyObject *__Pyx_Generator_Throw(PyObject *self, PyObject *args) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject *) self;
+
+static PyObject *__Pyx_Generator_Throw(PyObject *self, PyObject *args, CYTHON_UNUSED PyObject *kwds)
+{
+    struct __pyx_Generator_object *generator = (struct __pyx_Generator_object *) self;
     PyObject *typ;
     PyObject *tb = NULL;
     PyObject *val = NULL;
-    PyObject *yf = gen->yieldfrom;
+
     if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))
         return NULL;
-    if (unlikely(__Pyx_Generator_CheckRunning(gen)))
-        return NULL;
-    if (yf) {
-        PyObject *ret;
-        Py_INCREF(yf);
-#if PY_VERSION_HEX >= 0x02050000
-        if (PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit)) {
-            int err = __Pyx_Generator_CloseIter(gen, yf);
-            Py_DECREF(yf);
-            __Pyx_Generator_Undelegate(gen);
-            if (err < 0)
-                return __Pyx_Generator_SendEx(gen, NULL);
-            goto throw_here;
-        }
-#endif
-        gen->is_running = 1;
-        if (__Pyx_Generator_CheckExact(yf)) {
-            ret = __Pyx_Generator_Throw(yf, args);
-        } else {
-            PyObject *meth = PyObject_GetAttrString(yf, "throw");
-            if (unlikely(!meth)) {
-                Py_DECREF(yf);
-                if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
-                    gen->is_running = 0;
-                    return NULL;
-                }
-                PyErr_Clear();
-                __Pyx_Generator_Undelegate(gen);
-                gen->is_running = 0;
-                goto throw_here;
-            }
-            ret = PyObject_CallObject(meth, args);
-            Py_DECREF(meth);
-        }
-        gen->is_running = 0;
-        Py_DECREF(yf);
-        if (!ret) {
-            ret = __Pyx_Generator_FinishDelegation(gen);
-        }
-        return ret;
-    }
-throw_here:
     __Pyx_Raise(typ, val, tb, NULL);
-    return __Pyx_Generator_SendEx(gen, NULL);
-}
-static int __Pyx_Generator_traverse(PyObject *self, visitproc visit, void *arg) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject *) self;
-    Py_VISIT(gen->closure);
-    Py_VISIT(gen->classobj);
-    Py_VISIT(gen->yieldfrom);
-    Py_VISIT(gen->exc_type);
-    Py_VISIT(gen->exc_value);
-    Py_VISIT(gen->exc_traceback);
-    return 0;
-}
-static int __Pyx_Generator_clear(PyObject *self) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject *) self;
-    Py_CLEAR(gen->closure);
-    Py_CLEAR(gen->classobj);
-    Py_CLEAR(gen->yieldfrom);
-    Py_CLEAR(gen->exc_type);
-    Py_CLEAR(gen->exc_value);
-    Py_CLEAR(gen->exc_traceback);
-    return 0;
-}
-static void __Pyx_Generator_dealloc(PyObject *self) {
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject *) self;
-    PyObject_GC_UnTrack(gen);
-    if (gen->gi_weakreflist != NULL)
-        PyObject_ClearWeakRefs(self);
-    PyObject_GC_Track(self);
-    if (gen->resume_label > 0) {
-        Py_TYPE(gen)->tp_del(self);
-        if (self->ob_refcnt > 0)
-            return;                     /* resurrected.  :( */
-    }
-    PyObject_GC_UnTrack(self);
-    __Pyx_Generator_clear(self);
-    PyObject_GC_Del(gen);
-}
-static void __Pyx_Generator_del(PyObject *self) {
-    PyObject *res;
-    PyObject *error_type, *error_value, *error_traceback;
-    __pyx_GeneratorObject *gen = (__pyx_GeneratorObject *) self;
-    if (gen->resume_label <= 0)
-        return ;
-    assert(self->ob_refcnt == 0);
-    self->ob_refcnt = 1;
-    __Pyx_ErrFetch(&error_type, &error_value, &error_traceback);
-    res = __Pyx_Generator_Close(self);
-    if (res == NULL)
-        PyErr_WriteUnraisable(self);
-    else
-        Py_DECREF(res);
-    __Pyx_ErrRestore(error_type, error_value, error_traceback);
-    /* Undo the temporary resurrection; can't use DECREF here, it would
-     * cause a recursive call.
-     */
-    assert(self->ob_refcnt > 0);
-    if (--self->ob_refcnt == 0)
-        return; /* this is the normal path out */
-    /* close() resurrected it!  Make it look like the original Py_DECREF
-     * never happened.
-     */
-    {
-        Py_ssize_t refcnt = self->ob_refcnt;
-        _Py_NewReference(self);
-        self->ob_refcnt = refcnt;
-    }
-#if CYTHON_COMPILING_FOR_CPYTHON
-    assert(PyType_IS_GC(self->ob_type) &&
-           _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
-    /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
-     * we need to undo that. */
-    _Py_DEC_REFTOTAL;
-#endif
-    /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
-     * chain, so no more to do there.
-     * If COUNT_ALLOCS, the original decref bumped tp_frees, and
-     * _Py_NewReference bumped tp_allocs:  both of those need to be
-     * undone.
-     */
-#ifdef COUNT_ALLOCS
-    --Py_TYPE(self)->tp_frees;
-    --Py_TYPE(self)->tp_allocs;
-#endif
-}
-static PyMemberDef __pyx_Generator_memberlist[] = {
-    {(char *) "gi_running",
-#if PY_VERSION_HEX >= 0x02060000
-     T_BOOL,
-#else
-     T_BYTE,
-#endif
-     offsetof(__pyx_GeneratorObject, is_running),
-     READONLY,
-     NULL},
-    {0, 0, 0, 0, 0}
-};
-static PyMethodDef __pyx_Generator_methods[] = {
-    {__Pyx_NAMESTR("send"), (PyCFunction) __Pyx_Generator_Send, METH_O, 0},
-    {__Pyx_NAMESTR("throw"), (PyCFunction) __Pyx_Generator_Throw, METH_VARARGS, 0},
-    {__Pyx_NAMESTR("close"), (PyCFunction) __Pyx_Generator_Close, METH_NOARGS, 0},
-    {0, 0, 0, 0}
-};
-static PyTypeObject __pyx_GeneratorType_type = {
-    PyVarObject_HEAD_INIT(0, 0)
-    __Pyx_NAMESTR("generator"),         /*tp_name*/
-    sizeof(__pyx_GeneratorObject),      /*tp_basicsize*/
-    0,                                  /*tp_itemsize*/
-    (destructor) __Pyx_Generator_dealloc,/*tp_dealloc*/
-    0,                                  /*tp_print*/
-    0,                                  /*tp_getattr*/
-    0,                                  /*tp_setattr*/
-#if PY_MAJOR_VERSION < 3
-    0,                                  /*tp_compare*/
-#else
-    0,                                  /*reserved*/
-#endif
-    0,                                   /*tp_repr*/
-    0,                                  /*tp_as_number*/
-    0,                                  /*tp_as_sequence*/
-    0,                                  /*tp_as_mapping*/
-    0,                                  /*tp_hash*/
-    0,                                  /*tp_call*/
-    0,                                  /*tp_str*/
-    0,                                  /*tp_getattro*/
-    0,                                  /*tp_setattro*/
-    0,                                  /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/
-    0,                                  /*tp_doc*/
-    (traverseproc) __Pyx_Generator_traverse,   /*tp_traverse*/
-    0,                                  /*tp_clear*/
-    0,                                  /*tp_richcompare*/
-    offsetof(__pyx_GeneratorObject, gi_weakreflist), /* tp_weaklistoffse */
-    0,                                  /*tp_iter*/
-    (iternextfunc) __Pyx_Generator_Next, /*tp_iternext*/
-    __pyx_Generator_methods,            /*tp_methods*/
-    __pyx_Generator_memberlist,         /*tp_members*/
-    0,                                  /*tp_getset*/
-    0,                                  /*tp_base*/
-    0,                                  /*tp_dict*/
-    0,                                  /*tp_descr_get*/
-    0,                                  /*tp_descr_set*/
-    0,                                  /*tp_dictoffset*/
-    0,                                  /*tp_init*/
-    0,                                  /*tp_alloc*/
-    0,                                  /*tp_new*/
-    0,                                  /*tp_free*/
-    0,                                  /*tp_is_gc*/
-    0,                                  /*tp_bases*/
-    0,                                  /*tp_mro*/
-    0,                                  /*tp_cache*/
-    0,                                  /*tp_subclasses*/
-    0,                                  /*tp_weaklist*/
-    __Pyx_Generator_del,                /*tp_del*/
-#if PY_VERSION_HEX >= 0x02060000
-    0,                                  /*tp_version_tag*/
-#endif
-};
-static __pyx_GeneratorObject *__Pyx_Generator_New(__pyx_generator_body_t body,
-                                                  PyObject *closure) {
-    __pyx_GeneratorObject *gen =
-        PyObject_GC_New(__pyx_GeneratorObject, &__pyx_GeneratorType_type);
-    if (gen == NULL)
-        return NULL;
-    gen->body = body;
-    gen->closure = closure;
-    Py_XINCREF(closure);
-    gen->is_running = 0;
-    gen->resume_label = 0;
-    gen->classobj = NULL;
-    gen->yieldfrom = NULL;
-    gen->exc_type = NULL;
-    gen->exc_value = NULL;
-    gen->exc_traceback = NULL;
-    gen->gi_weakreflist = NULL;
-    PyObject_GC_Track(gen);
-    return gen;
-}
-static int __pyx_Generator_init(void) {
-    __pyx_GeneratorType_type.tp_getattro = PyObject_GenericGetAttr;
-    __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter;
-    if (PyType_Ready(&__pyx_GeneratorType_type)) {
-        return -1;
-    }
-    __pyx_GeneratorType = &__pyx_GeneratorType_type;
-    return 0;
+    return __Pyx_Generator_SendEx(generator, NULL);
 }
 
 static int __Pyx_check_binary_version(void) {
@@ -67166,6 +64162,7 @@ static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *s
         void (*fp)(void);
         void *p;
     } tmp;
+
     d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__");
     if (!d) {
         PyErr_Clear();
@@ -67212,105 +64209,29 @@ bad:
     return -1;
 }
 
-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
-    int start = 0, mid = 0, end = count - 1;
-    if (end >= 0 && code_line > entries[end].code_line) {
-        return count;
-    }
-    while (start < end) {
-        mid = (start + end) / 2;
-        if (code_line < entries[mid].code_line) {
-            end = mid;
-        } else if (code_line > entries[mid].code_line) {
-             start = mid + 1;
-        } else {
-            return mid;
-        }
-    }
-    if (code_line <= entries[mid].code_line) {
-        return mid;
-    } else {
-        return mid + 1;
-    }
-}
-static PyCodeObject *__pyx_find_code_object(int code_line) {
-    PyCodeObject* code_object;
-    int pos;
-    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
-        return NULL;
-    }
-    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
-    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
-        return NULL;
-    }
-    code_object = __pyx_code_cache.entries[pos].code_object;
-    Py_INCREF(code_object);
-    return code_object;
-}
-static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
-    int pos, i;
-    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
-    if (unlikely(!code_line)) {
-        return;
-    }
-    if (unlikely(!entries)) {
-        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
-        if (likely(entries)) {
-            __pyx_code_cache.entries = entries;
-            __pyx_code_cache.max_count = 64;
-            __pyx_code_cache.count = 1;
-            entries[0].code_line = code_line;
-            entries[0].code_object = code_object;
-            Py_INCREF(code_object);
-        }
-        return;
-    }
-    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
-    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
-        PyCodeObject* tmp = entries[pos].code_object;
-        entries[pos].code_object = code_object;
-        Py_DECREF(tmp);
-        return;
-    }
-    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
-        int new_max = __pyx_code_cache.max_count + 64;
-        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
-            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
-        if (unlikely(!entries)) {
-            return;
-        }
-        __pyx_code_cache.entries = entries;
-        __pyx_code_cache.max_count = new_max;
-    }
-    for (i=__pyx_code_cache.count; i>pos; i--) {
-        entries[i] = entries[i-1];
-    }
-    entries[pos].code_line = code_line;
-    entries[pos].code_object = code_object;
-    __pyx_code_cache.count++;
-    Py_INCREF(code_object);
-}
-
 #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
-static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
-            const char *funcname, int c_line,
-            int py_line, const char *filename) {
-    PyCodeObject *py_code = 0;
+
+static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
+                               int __pyx_lineno, const char *__pyx_filename) {
     PyObject *py_srcfile = 0;
     PyObject *py_funcname = 0;
+    PyObject *py_globals = 0;
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+
     #if PY_MAJOR_VERSION < 3
-    py_srcfile = PyString_FromString(filename);
+    py_srcfile = PyString_FromString(__pyx_filename);
     #else
-    py_srcfile = PyUnicode_FromString(filename);
+    py_srcfile = PyUnicode_FromString(__pyx_filename);
     #endif
     if (!py_srcfile) goto bad;
-    if (c_line) {
+    if (__pyx_clineno) {
         #if PY_MAJOR_VERSION < 3
-        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
         #else
-        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
         #endif
     }
     else {
@@ -67321,45 +64242,28 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
         #endif
     }
     if (!py_funcname) goto bad;
-    py_code = __Pyx_PyCode_New(
+    py_globals = PyModule_GetDict(__pyx_m);
+    if (!py_globals) goto bad;
+    py_code = PyCode_New(
         0,            /*int argcount,*/
+        #if PY_MAJOR_VERSION >= 3
         0,            /*int kwonlyargcount,*/
+        #endif
         0,            /*int nlocals,*/
         0,            /*int stacksize,*/
         0,            /*int flags,*/
         __pyx_empty_bytes, /*PyObject *code,*/
-        __pyx_empty_tuple, /*PyObject *consts,*/
-        __pyx_empty_tuple, /*PyObject *names,*/
-        __pyx_empty_tuple, /*PyObject *varnames,*/
-        __pyx_empty_tuple, /*PyObject *freevars,*/
-        __pyx_empty_tuple, /*PyObject *cellvars,*/
+        __pyx_empty_tuple,  /*PyObject *consts,*/
+        __pyx_empty_tuple,  /*PyObject *names,*/
+        __pyx_empty_tuple,  /*PyObject *varnames,*/
+        __pyx_empty_tuple,  /*PyObject *freevars,*/
+        __pyx_empty_tuple,  /*PyObject *cellvars,*/
         py_srcfile,   /*PyObject *filename,*/
         py_funcname,  /*PyObject *name,*/
-        py_line,      /*int firstlineno,*/
+        __pyx_lineno,   /*int firstlineno,*/
         __pyx_empty_bytes  /*PyObject *lnotab*/
     );
-    Py_DECREF(py_srcfile);
-    Py_DECREF(py_funcname);
-    return py_code;
-bad:
-    Py_XDECREF(py_srcfile);
-    Py_XDECREF(py_funcname);
-    return NULL;
-}
-static void __Pyx_AddTraceback(const char *funcname, int c_line,
-                               int py_line, const char *filename) {
-    PyCodeObject *py_code = 0;
-    PyObject *py_globals = 0;
-    PyFrameObject *py_frame = 0;
-    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
-    if (!py_code) {
-        py_code = __Pyx_CreateCodeObjectForTraceback(
-            funcname, c_line, py_line, filename);
-        if (!py_code) goto bad;
-        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
-    }
-    py_globals = PyModule_GetDict(__pyx_m);
-    if (!py_globals) goto bad;
+    if (!py_code) goto bad;
     py_frame = PyFrame_New(
         PyThreadState_GET(), /*PyThreadState *tstate,*/
         py_code,             /*PyCodeObject *code,*/
@@ -67367,9 +64271,11 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
         0                    /*PyObject *locals*/
     );
     if (!py_frame) goto bad;
-    py_frame->f_lineno = py_line;
+    py_frame->f_lineno = __pyx_lineno;
     PyTraceBack_Here(py_frame);
 bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
     Py_XDECREF(py_code);
     Py_XDECREF(py_frame);
 }
@@ -67404,7 +64310,6 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     return 0;
 }
 
-
 /* Type Conversion Functions */
 
 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
diff --git a/python/src/sa/rulefactory.pxi b/python/src/sa/rulefactory.pxi
index 287b9a67..54471ccd 100644
--- a/python/src/sa/rulefactory.pxi
+++ b/python/src/sa/rulefactory.pxi
@@ -1103,7 +1103,7 @@ cdef class HieroCachingRuleFactory:
                                     count = len(locs)
                                     scores = self.scorer.score(FeatureContext(
                                                f, e, count, fcount[f], num_samples,
-                                               (i,k), locs, fwords
+                                               (k,i), locs, fwords
                                                ))
                                     yield Rule(self.category, f, e, scores, alignment)
 
-- 
cgit v1.2.3