Commits

James Taylor committed 84efd1b

Fix for fixed step records in bigwig

Comments (0)

Files changed (5)

lib/bx/bbi/bbi_file.c

-/* Generated by Cython 0.13 on Fri Dec 10 12:38:56 2010 */
+/* Generated by Cython 0.14.1 on Fri Feb 11 18:47:56 2011 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
   #define PyBytes_Repr                 PyString_Repr
   #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)
 #endif
-
 #ifndef PySet_CheckExact
-#  define PySet_CheckExact(obj)          (Py_TYPE(obj) == &PySet_Type)
+  #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
   #define PyInt_Check(op)              PyLong_Check(op)
   #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
 #endif
 
 #if PY_MAJOR_VERSION >= 3
-  #define PyBoolObject PyLongObject
+  #define PyBoolObject                 PyLongObject
 #endif
 
 
   #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)
+  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
+#else
+  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
+        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
+        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
+            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
+  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
+        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
+        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
+            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
+  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
+        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
+        (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
 #include "numpy/ufuncobject.h"
 #include "limits.h"
 
+#ifdef PYREX_WITHOUT_ASSERTIONS
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+
 /* inline attribute */
 #ifndef CYTHON_INLINE
   #if defined(__GNUC__)
   #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
     #define CYTHON_INLINE inline
   #else
-    #define CYTHON_INLINE 
+    #define CYTHON_INLINE
   #endif
 #endif
 
 #ifndef CYTHON_UNUSED
 # if defined(__GNUC__)
 #   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#     define CYTHON_UNUSED __attribute__ ((__unused__)) 
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
 #   else
 #     define CYTHON_UNUSED
 #   endif
 # elif defined(__ICC) || defined(__INTEL_COMPILER)
-#   define CYTHON_UNUSED __attribute__ ((__unused__)) 
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
 # else
-#   define CYTHON_UNUSED 
+#   define CYTHON_UNUSED
 # endif
 #endif
 
 
 #ifdef __GNUC__
 /* Test for GCC > 2.95 */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 
+#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
 #define likely(x)   __builtin_expect(!!(x), 1)
 #define unlikely(x) __builtin_expect(!!(x), 0)
 #else /* __GNUC__ > 2 ... */
 
 typedef npy_cdouble __pyx_t_5numpy_complex_t;
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":36
+/* "bx/bbi/bbi_file.pyx":36
  * cdef inline int imin(int a, int b): return a if a <= b else b
  * 
  * cdef enum summary_type:             # <<<<<<<<<<<<<<
   __pyx_e_2bx_3bbi_8bbi_file_summary_type_sd = 4
 };
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pxd":8
+/* "bx/bbi/bbi_file.pxd":8
  * cimport numpy
  * 
  * cdef class SummaryBlock:             # <<<<<<<<<<<<<<
   double sum_squares;
 };
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/cirtree_file.pxd":3
+/* "cirtree_file.pxd":3
  * from types cimport *
  * 
  * cdef class CIRTreeFile:             # <<<<<<<<<<<<<<
   __pyx_t_2bx_3bbi_5types_bits32 items_per_slot;
 };
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pxd":21
+/* "bx/bbi/bbi_file.pxd":21
  *     cdef public double sum_squares
  * 
  * cdef class SummarizedData:             # <<<<<<<<<<<<<<
   PyArrayObject *sum_squares;
 };
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":196
+/* "bx/bbi/bbi_file.pyx":210
  *         return closest_level
  * 
  * cdef class ZoomLevel:             # <<<<<<<<<<<<<<
   int item_count;
 };
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pxd":33
+/* "bx/bbi/bbi_file.pxd":33
  *     cdef public numpy.ndarray sum_squares
  * 
  * cdef class BBIFile:             # <<<<<<<<<<<<<<
   PyObject *level_list;
 };
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bpt_file.pxd":5
+/* "bpt_file.pxd":5
  * from types cimport *
  * 
  * cdef class BPTFile:             # <<<<<<<<<<<<<<
 };
 
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":62
+/* "bx/bbi/bbi_file.pyx":62
  *         self.sum_squares = numpy.zeros( self.size, dtype=numpy.float64 )
  * 
  * cdef class BBIFile:             # <<<<<<<<<<<<<<
   PyObject *(*_get_chrom_id_and_size)(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *, char *);
   PyObject *(*_best_zoom_level)(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *, int);
   PyObject *(*summarize)(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *, char *, __pyx_t_2bx_3bbi_5types_bits32, __pyx_t_2bx_3bbi_5types_bits32, int, int __pyx_skip_dispatch);
+  PyObject *(*summarize_from_full)(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *, char *, __pyx_t_2bx_3bbi_5types_bits32, __pyx_t_2bx_3bbi_5types_bits32, int, int __pyx_skip_dispatch);
   PyObject *(*query)(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *, char *, __pyx_t_2bx_3bbi_5types_bits32, __pyx_t_2bx_3bbi_5types_bits32, int, int __pyx_skip_dispatch);
   PyObject *(*_summarize_from_full)(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *, __pyx_t_2bx_3bbi_5types_bits32, __pyx_t_2bx_3bbi_5types_bits32, __pyx_t_2bx_3bbi_5types_bits32, int);
 };
 static struct __pyx_vtabstruct_2bx_3bbi_8bbi_file_BBIFile *__pyx_vtabptr_2bx_3bbi_8bbi_file_BBIFile;
 
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":196
+/* "bx/bbi/bbi_file.pyx":210
  *         return closest_level
  * 
  * cdef class ZoomLevel:             # <<<<<<<<<<<<<<
 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 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*/
 
-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
-
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
 
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
 
 static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
 
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
 
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
     PyObject *r;
 static void __Pyx_RaiseBufferIndexError(int axis); /*proto*/
 #define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
 
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
-
 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
 
 static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
 Py_ssize_t __Pyx_zeros[] = {0};
 Py_ssize_t __Pyx_minusones[] = {-1};
 
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
   #ifdef __cplusplus
     #define __Pyx_c_is_zerof(z) ((z)==(float)0)
     #define __Pyx_c_conjf(z)    (::std::conj(z))
-    /*#define __Pyx_c_absf(z)     (::std::abs(z))*/
+    #if 1
+        #define __Pyx_c_absf(z)     (::std::abs(z))
+        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
+    #endif
   #else
     #define __Pyx_c_is_zerof(z) ((z)==0)
     #define __Pyx_c_conjf(z)    (conjf(z))
-    /*#define __Pyx_c_absf(z)     (cabsf(z))*/
+    #if 1
+        #define __Pyx_c_absf(z)     (cabsf(z))
+        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
+    #endif
  #endif
 #else
     static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
     static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
-    /*static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);*/
+    #if 1
+        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
+    #endif
 #endif
 
 static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
   #ifdef __cplusplus
     #define __Pyx_c_is_zero(z) ((z)==(double)0)
     #define __Pyx_c_conj(z)    (::std::conj(z))
-    /*#define __Pyx_c_abs(z)     (::std::abs(z))*/
+    #if 1
+        #define __Pyx_c_abs(z)     (::std::abs(z))
+        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
+    #endif
   #else
     #define __Pyx_c_is_zero(z) ((z)==0)
     #define __Pyx_c_conj(z)    (conj(z))
-    /*#define __Pyx_c_abs(z)     (cabs(z))*/
+    #if 1
+        #define __Pyx_c_abs(z)     (cabs(z))
+        #define __Pyx_c_pow(a, b)  (cpow(a, b))
+    #endif
  #endif
 #else
     static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
     static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
-    /*static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);*/
+    #if 1
+        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
+    #endif
 #endif
 
 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
 static CYTHON_INLINE int __pyx_f_2bx_3bbi_8bbi_file_imin(int, int); /*proto*/
 static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t = { "float64_t", NULL, sizeof(__pyx_t_5numpy_float64_t), 'R' };
 #define __Pyx_MODULE_NAME "bx.bbi.bbi_file"
-int __pyx_module_is_main_bx__bbi__bbi_file = 0;
+static int __pyx_module_is_main_bx__bbi__bbi_file = 0;
 
 /* Implementation of bx.bbi.bbi_file */
 static PyObject *__pyx_builtin_ValueError;
 static char __pyx_k_1[] = "unzoomed_data_offset";
 static char __pyx_k_2[] = "unzoomed_index_offset";
 static char __pyx_k_3[] = "total_summary_offset";
-static char __pyx_k_4[] = "_get_chrom_id_and_size";
-static char __pyx_k_5[] = "_summarize_from_full";
-static char __pyx_k_6[] = "find_overlapping_blocks";
-static char __pyx_k_7[] = "_summary_blocks_in_region";
-static char __pyx_k_8[] = "ndarray is not C contiguous";
-static char __pyx_k_9[] = "ndarray is not Fortran contiguous";
-static char __pyx_k_10[] = "Non-native byte order not supported";
-static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
-static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
-static char __pyx_k_13[] = "Format string allocated too short.";
-static char __pyx_k_14[] = "\nCore implementation for reading UCSC \"big binary indexed\" files.\n\nThere isn't really any specification for the format beyond the code, so this\nmirrors Jim Kent's 'bbiRead.c' mostly. \n";
-static char __pyx_k_15[] = "bx.misc.binary_file";
-static char __pyx_k_16[] = "BBIFile.open (line 73)";
-static char __pyx_k_17[] = "BBIFile.summarize (line 111)";
-static char __pyx_k_18[] = "BBIFile.query (line 135)";
-static char __pyx_k_19[] = "ZoomLevel._summary_blocks_in_region (line 204)";
+static char __pyx_k_5[] = "_get_chrom_id_and_size";
+static char __pyx_k_6[] = "_summarize_from_full";
+static char __pyx_k_8[] = "find_overlapping_blocks";
+static char __pyx_k_9[] = "_summary_blocks_in_region";
+static char __pyx_k_10[] = "ndarray is not C contiguous";
+static char __pyx_k_12[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_14[] = "Non-native byte order not supported";
+static char __pyx_k_16[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_17[] = "Format string allocated too short, see comment in numpy.pxd";
+static char __pyx_k_20[] = "Format string allocated too short.";
+static char __pyx_k_22[] = "\nCore implementation for reading UCSC \"big binary indexed\" files.\n\nThere isn't really any specification for the format beyond the code, so this\nmirrors Jim Kent's 'bbiRead.c' mostly. \n";
+static char __pyx_k_23[] = "bx.misc.binary_file";
 static char __pyx_k__B[] = "B";
 static char __pyx_k__H[] = "H";
 static char __pyx_k__I[] = "I";
 static char __pyx_k__shape[] = "shape";
 static char __pyx_k__start[] = "start";
 static char __pyx_k__zeros[] = "zeros";
+static char __pyx_k__append[] = "append";
 static char __pyx_k__fields[] = "fields";
 static char __pyx_k__format[] = "format";
 static char __pyx_k__reader[] = "reader";
 static char __pyx_k__unpack[] = "unpack";
-static char __pyx_k__BBIFile[] = "BBIFile";
 static char __pyx_k__float64[] = "float64";
 static char __pyx_k__max_val[] = "max_val";
 static char __pyx_k__min_val[] = "min_val";
 static char __pyx_k__reserved[] = "reserved";
 static char __pyx_k__sum_data[] = "sum_data";
 static char __pyx_k__type_num[] = "type_num";
-static char __pyx_k__ZoomLevel[] = "ZoomLevel";
 static char __pyx_k__as_offset[] = "as_offset";
 static char __pyx_k__byteorder[] = "byteorder";
 static char __pyx_k__cStringIO[] = "cStringIO";
 static char __pyx_k__chrom_tree_offset[] = "chrom_tree_offset";
 static char __pyx_k___get_summary_slice[] = "_get_summary_slice";
 static char __pyx_k__defined_field_count[] = "defined_field_count";
+static char __pyx_k__summarize_from_full[] = "summarize_from_full";
 static char __pyx_k__uncompress_buf_size[] = "uncompress_buf_size";
 static PyObject *__pyx_n_s_1;
 static PyObject *__pyx_kp_u_10;
-static PyObject *__pyx_kp_u_11;
 static PyObject *__pyx_kp_u_12;
-static PyObject *__pyx_kp_u_13;
-static PyObject *__pyx_n_s_15;
+static PyObject *__pyx_kp_u_14;
 static PyObject *__pyx_kp_u_16;
 static PyObject *__pyx_kp_u_17;
-static PyObject *__pyx_kp_u_18;
-static PyObject *__pyx_kp_u_19;
 static PyObject *__pyx_n_s_2;
+static PyObject *__pyx_kp_u_20;
+static PyObject *__pyx_n_s_23;
 static PyObject *__pyx_n_s_3;
-static PyObject *__pyx_n_s_4;
 static PyObject *__pyx_n_s_5;
 static PyObject *__pyx_n_s_6;
-static PyObject *__pyx_n_s_7;
-static PyObject *__pyx_kp_u_8;
-static PyObject *__pyx_kp_u_9;
-static PyObject *__pyx_n_s__BBIFile;
+static PyObject *__pyx_n_s_8;
+static PyObject *__pyx_n_s_9;
 static PyObject *__pyx_n_s__BinaryFileReader;
 static PyObject *__pyx_n_s__II;
 static PyObject *__pyx_n_s__RuntimeError;
 static PyObject *__pyx_n_s__StringIO;
 static PyObject *__pyx_n_s__ValueError;
-static PyObject *__pyx_n_s__ZoomLevel;
 static PyObject *__pyx_n_s____main__;
 static PyObject *__pyx_n_s____test__;
 static PyObject *__pyx_n_s___best_zoom_level;
 static PyObject *__pyx_n_s___get_summary_slice;
 static PyObject *__pyx_n_s___summarize;
+static PyObject *__pyx_n_s__append;
 static PyObject *__pyx_n_s__as_offset;
 static PyObject *__pyx_n_s__base;
 static PyObject *__pyx_n_s__bbi_file;
 static PyObject *__pyx_n_s__sum_data;
 static PyObject *__pyx_n_s__sum_squares;
 static PyObject *__pyx_n_s__summarize;
+static PyObject *__pyx_n_s__summarize_from_full;
 static PyObject *__pyx_n_s__summary_size;
 static PyObject *__pyx_n_s__type_name;
 static PyObject *__pyx_n_s__type_num;
 static PyObject *__pyx_int_15;
 static PyObject *__pyx_int_32;
 static PyObject *__pyx_int_64;
-
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":30
+static PyObject *__pyx_k_tuple_4;
+static PyObject *__pyx_k_tuple_7;
+static PyObject *__pyx_k_tuple_11;
+static PyObject *__pyx_k_tuple_13;
+static PyObject *__pyx_k_tuple_15;
+static PyObject *__pyx_k_tuple_18;
+static PyObject *__pyx_k_tuple_19;
+static PyObject *__pyx_k_tuple_21;
+
+/* "bx/bbi/bbi_file.pyx":30
  * DEF summary_on_disk_size = 32
  * 
  * cdef inline int range_intersection( int start1, int end1, int start2, int end2 ):             # <<<<<<<<<<<<<<
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("range_intersection");
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":31
+  /* "bx/bbi/bbi_file.pyx":31
  * 
  * cdef inline int range_intersection( int start1, int end1, int start2, int end2 ):
  *     return min( end1, end2 ) - max( start1, start2 )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":33
+/* "bx/bbi/bbi_file.pyx":33
  *     return min( end1, end2 ) - max( start1, start2 )
  * 
  * cdef inline int imax(int a, int b): return a if a >= b else b             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":34
+/* "bx/bbi/bbi_file.pyx":34
  * 
  * cdef inline int imax(int a, int b): return a if a >= b else b
  * cdef inline int imin(int a, int b): return a if a <= b else b             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":54
+/* "bx/bbi/bbi_file.pxd":12
+ *     A block of summary data from disk
+ *     """
+ *     cdef public bits32 chrom_id             # <<<<<<<<<<<<<<
+ *     cdef public bits32 start
+ *     cdef public bits32 end
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8chrom_id___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8chrom_id___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyLong_FromUnsignedLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->chrom_id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.chrom_id.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8chrom_id_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8chrom_id_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __pyx_t_2bx_3bbi_5types_bits32 __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __Pyx_PyInt_AsUnsignedInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->chrom_id = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.chrom_id.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":13
+ *     """
+ *     cdef public bits32 chrom_id
+ *     cdef public bits32 start             # <<<<<<<<<<<<<<
+ *     cdef public bits32 end
+ *     cdef public bits32 valid_count
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_5start___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_5start___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyLong_FromUnsignedLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.start.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_5start_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_5start_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __pyx_t_2bx_3bbi_5types_bits32 __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __Pyx_PyInt_AsUnsignedInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->start = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.start.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":14
+ *     cdef public bits32 chrom_id
+ *     cdef public bits32 start
+ *     cdef public bits32 end             # <<<<<<<<<<<<<<
+ *     cdef public bits32 valid_count
+ *     cdef public double min_val
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_3end___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_3end___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyLong_FromUnsignedLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->end); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.end.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_3end_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_3end_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __pyx_t_2bx_3bbi_5types_bits32 __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __Pyx_PyInt_AsUnsignedInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->end = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.end.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":15
+ *     cdef public bits32 start
+ *     cdef public bits32 end
+ *     cdef public bits32 valid_count             # <<<<<<<<<<<<<<
+ *     cdef public double min_val
+ *     cdef public double max_val
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11valid_count___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11valid_count___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyLong_FromUnsignedLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->valid_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.valid_count.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11valid_count_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11valid_count_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __pyx_t_2bx_3bbi_5types_bits32 __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __Pyx_PyInt_AsUnsignedInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->valid_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.valid_count.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":16
+ *     cdef public bits32 end
+ *     cdef public bits32 valid_count
+ *     cdef public double min_val             # <<<<<<<<<<<<<<
+ *     cdef public double max_val
+ *     cdef public double sum_data
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7min_val___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7min_val___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->min_val); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.min_val.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7min_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7min_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  double __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->min_val = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.min_val.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":17
+ *     cdef public bits32 valid_count
+ *     cdef public double min_val
+ *     cdef public double max_val             # <<<<<<<<<<<<<<
+ *     cdef public double sum_data
+ *     cdef public double sum_squares
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7max_val___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7max_val___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->max_val); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.max_val.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7max_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_7max_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  double __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->max_val = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.max_val.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":18
+ *     cdef public double min_val
+ *     cdef public double max_val
+ *     cdef public double sum_data             # <<<<<<<<<<<<<<
+ *     cdef public double sum_squares
+ * 
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8sum_data___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8sum_data___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->sum_data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.sum_data.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8sum_data_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_8sum_data_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  double __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->sum_data = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.sum_data.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":19
+ *     cdef public double max_val
+ *     cdef public double sum_data
+ *     cdef public double sum_squares             # <<<<<<<<<<<<<<
+ * 
+ * cdef class SummarizedData:
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11sum_squares___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11sum_squares___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->sum_squares); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.sum_squares.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11sum_squares_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_12SummaryBlock_11sum_squares_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  double __pyx_t_1;
+  __Pyx_RefNannySetupContext("__set__");
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummaryBlock *)__pyx_v_self)->sum_squares = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummaryBlock.sum_squares.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pyx":54
  *     aggregation over a particular range and resolution
  *     """
  *     def __init__( self, int size ):             # <<<<<<<<<<<<<<
   return -1;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":55
+  /* "bx/bbi/bbi_file.pyx":55
  *     """
  *     def __init__( self, int size ):
  *         self.size = size             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size = __pyx_v_size;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":56
+  /* "bx/bbi/bbi_file.pyx":56
  *     def __init__( self, int size ):
  *         self.size = size
  *         self.valid_count = numpy.zeros( self.size, dtype=numpy.float64 )             # <<<<<<<<<<<<<<
   __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __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[0]; __pyx_lineno = 56; __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;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __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_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_5);
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":57
+  /* "bx/bbi/bbi_file.pyx":57
  *         self.size = size
  *         self.valid_count = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.min_val = numpy.zeros( self.size, dtype=numpy.float64 )             # <<<<<<<<<<<<<<
   __pyx_t_5 = PyInt_FromLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __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_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_1, __pyx_t_3, ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_4);
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":58
+  /* "bx/bbi/bbi_file.pyx":58
  *         self.valid_count = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.min_val = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.max_val = numpy.zeros( self.size, dtype=numpy.float64 )             # <<<<<<<<<<<<<<
   __pyx_t_4 = PyInt_FromLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __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[0]; __pyx_lineno = 58; __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;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyEval_CallObjectWithKeywords(__pyx_t_5, __pyx_t_3, ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(__pyx_t_5, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_2);
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":59
+  /* "bx/bbi/bbi_file.pyx":59
  *         self.min_val = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.max_val = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.sum_data = numpy.zeros( self.size, dtype=numpy.float64 )             # <<<<<<<<<<<<<<
   __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __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[0]; __pyx_lineno = 59; __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;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, __pyx_t_3, ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_1);
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":60
+  /* "bx/bbi/bbi_file.pyx":60
  *         self.max_val = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.sum_data = numpy.zeros( self.size, dtype=numpy.float64 )
  *         self.sum_squares = numpy.zeros( self.size, dtype=numpy.float64 )             # <<<<<<<<<<<<<<
   __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __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[0]; __pyx_lineno = 60; __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;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __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_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_5);
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":69
+/* "bx/bbi/bbi_file.pxd":26
+ *     aggregation over a particular range and resolution
+ *     """
+ *     cdef public int size             # <<<<<<<<<<<<<<
+ *     cdef public numpy.ndarray valid_count
+ *     cdef public numpy.ndarray min_val
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_4size___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_4size___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size); 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_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.size.__get__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_4size_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_4size_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  int __pyx_t_1;
+  __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[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->size = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.size.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":27
+ *     """
+ *     cdef public int size
+ *     cdef public numpy.ndarray valid_count             # <<<<<<<<<<<<<<
+ *     cdef public numpy.ndarray min_val
+ *     cdef public numpy.ndarray max_val
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11valid_count___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11valid_count___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11valid_count_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11valid_count_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__set__");
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count = ((PyArrayObject *)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.valid_count.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11valid_count_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11valid_count_2__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->valid_count = ((PyArrayObject *)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":28
+ *     cdef public int size
+ *     cdef public numpy.ndarray valid_count
+ *     cdef public numpy.ndarray min_val             # <<<<<<<<<<<<<<
+ *     cdef public numpy.ndarray max_val
+ *     cdef public numpy.ndarray sum_data
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7min_val___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7min_val___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7min_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7min_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__set__");
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val = ((PyArrayObject *)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.min_val.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7min_val_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7min_val_2__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->min_val = ((PyArrayObject *)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":29
+ *     cdef public numpy.ndarray valid_count
+ *     cdef public numpy.ndarray min_val
+ *     cdef public numpy.ndarray max_val             # <<<<<<<<<<<<<<
+ *     cdef public numpy.ndarray sum_data
+ *     cdef public numpy.ndarray sum_squares
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7max_val___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7max_val___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7max_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7max_val_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__set__");
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val = ((PyArrayObject *)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.max_val.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7max_val_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_7max_val_2__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->max_val = ((PyArrayObject *)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":30
+ *     cdef public numpy.ndarray min_val
+ *     cdef public numpy.ndarray max_val
+ *     cdef public numpy.ndarray sum_data             # <<<<<<<<<<<<<<
+ *     cdef public numpy.ndarray sum_squares
+ * 
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_8sum_data___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_8sum_data___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_8sum_data_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_8sum_data_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__set__");
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data = ((PyArrayObject *)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.sum_data.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_8sum_data_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_8sum_data_2__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_data = ((PyArrayObject *)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pxd":31
+ *     cdef public numpy.ndarray max_val
+ *     cdef public numpy.ndarray sum_data
+ *     cdef public numpy.ndarray sum_squares             # <<<<<<<<<<<<<<
+ * 
+ * cdef class BBIFile:
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11sum_squares___get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11sum_squares___get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares));
+  __pyx_r = ((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11sum_squares_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11sum_squares_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__set__");
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares = ((PyArrayObject *)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("bx.bbi.bbi_file.SummarizedData.sum_squares.__set__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11sum_squares_2__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pf_2bx_3bbi_8bbi_file_14SummarizedData_11sum_squares_2__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares));
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_SummarizedData *)__pyx_v_self)->sum_squares = ((PyArrayObject *)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "bx/bbi/bbi_file.pyx":69
  *     """
  * 
  *     def __init__( self, file=None, expected_sig=None, type_name=None ):             # <<<<<<<<<<<<<<
   return -1;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":70
+  /* "bx/bbi/bbi_file.pyx":70
  * 
  *     def __init__( self, file=None, expected_sig=None, type_name=None ):
  *         if file is not None:             # <<<<<<<<<<<<<<
   __pyx_t_1 = (__pyx_v_file != Py_None);
   if (__pyx_t_1) {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":71
+    /* "bx/bbi/bbi_file.pyx":71
  *     def __init__( self, file=None, expected_sig=None, type_name=None ):
  *         if file is not None:
  *             self.open( file, expected_sig, type_name )             # <<<<<<<<<<<<<<
     __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__open); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_INCREF(__pyx_v_file);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_file);
     __Pyx_GIVEREF(__pyx_v_file);
     __Pyx_INCREF(__pyx_v_type_name);
     PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_type_name);
     __Pyx_GIVEREF(__pyx_v_type_name);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __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_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L6;
   }
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":73
+/* "bx/bbi/bbi_file.pyx":73
  *             self.open( file, expected_sig, type_name )
  * 
  *     def open( self, file, expected_sig, type_name ):             # <<<<<<<<<<<<<<
  *         Initialize from an existing bbi file, signature (magic) must be passed
  */
 
-static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_open(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_2bx_3bbi_8bbi_file_7BBIFile_open[] = "\n        Initialize from an existing bbi file, signature (magic) must be passed\n        in since this is generic. \n        ";
-static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_open(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_1open(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_2bx_3bbi_8bbi_file_7BBIFile_1open[] = "\n        Initialize from an existing bbi file, signature (magic) must be passed\n        in since this is generic. \n        ";
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_1open(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_file = 0;
   PyObject *__pyx_v_expected_sig = 0;
   PyObject *__pyx_v_type_name = 0;
   __pyx_v_reader = Py_None; __Pyx_INCREF(Py_None);
   __pyx_v_level = ((struct __pyx_obj_2bx_3bbi_8bbi_file_ZoomLevel *)Py_None); __Pyx_INCREF(Py_None);
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":78
+  /* "bx/bbi/bbi_file.pyx":78
  *         in since this is generic.
  *         """
  *         assert expected_sig is not None             # <<<<<<<<<<<<<<
  *         self.file = file
  *         # Open the file in a BinaryFileReader, handles magic and byteswapping
  */
-  #ifndef PYREX_WITHOUT_ASSERTIONS
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
   __pyx_t_1 = (__pyx_v_expected_sig != Py_None);
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
   }
   #endif
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":79
+  /* "bx/bbi/bbi_file.pyx":79
  *         """
  *         assert expected_sig is not None
  *         self.file = file             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->file);
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->file = __pyx_v_file;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":81
+  /* "bx/bbi/bbi_file.pyx":81
  *         self.file = file
  *         # Open the file in a BinaryFileReader, handles magic and byteswapping
  *         self.reader = reader = BinaryFileReader( file, expected_sig )             # <<<<<<<<<<<<<<
   __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__BinaryFileReader); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __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[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   __Pyx_INCREF(__pyx_v_file);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_file);
   __Pyx_GIVEREF(__pyx_v_file);
   __Pyx_INCREF(__pyx_v_expected_sig);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_expected_sig);
   __Pyx_GIVEREF(__pyx_v_expected_sig);
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __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_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_INCREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->reader);
   __pyx_v_reader = __pyx_t_4;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":82
+  /* "bx/bbi/bbi_file.pyx":82
  *         # Open the file in a BinaryFileReader, handles magic and byteswapping
  *         self.reader = reader = BinaryFileReader( file, expected_sig )
  *         self.magic = expected_sig             # <<<<<<<<<<<<<<
   __pyx_t_5 = __Pyx_PyInt_AsUnsignedInt(__pyx_v_expected_sig); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->magic = __pyx_t_5;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":83
+  /* "bx/bbi/bbi_file.pyx":83
  *         self.reader = reader = BinaryFileReader( file, expected_sig )
  *         self.magic = expected_sig
  *         self.is_byteswapped = self.reader.byteswap_needed             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->is_byteswapped = __pyx_t_6;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":85
+  /* "bx/bbi/bbi_file.pyx":85
  *         self.is_byteswapped = self.reader.byteswap_needed
  *         # Read header stuff
  *         self.version = reader.read_uint16()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->version = __pyx_t_7;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":86
+  /* "bx/bbi/bbi_file.pyx":86
  *         # Read header stuff
  *         self.version = reader.read_uint16()
  *         self.zoom_levels = reader.read_uint16()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->zoom_levels = __pyx_t_7;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":87
+  /* "bx/bbi/bbi_file.pyx":87
  *         self.version = reader.read_uint16()
  *         self.zoom_levels = reader.read_uint16()
  *         self.chrom_tree_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_tree_offset = __pyx_t_8;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":88
+  /* "bx/bbi/bbi_file.pyx":88
  *         self.zoom_levels = reader.read_uint16()
  *         self.chrom_tree_offset = reader.read_uint64()
  *         self.unzoomed_data_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->unzoomed_data_offset = __pyx_t_8;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":89
+  /* "bx/bbi/bbi_file.pyx":89
  *         self.chrom_tree_offset = reader.read_uint64()
  *         self.unzoomed_data_offset = reader.read_uint64()
  *         self.unzoomed_index_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->unzoomed_index_offset = __pyx_t_8;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":90
+  /* "bx/bbi/bbi_file.pyx":90
  *         self.unzoomed_data_offset = reader.read_uint64()
  *         self.unzoomed_index_offset = reader.read_uint64()
  *         self.field_count = reader.read_uint16()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->field_count = __pyx_t_7;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":91
+  /* "bx/bbi/bbi_file.pyx":91
  *         self.unzoomed_index_offset = reader.read_uint64()
  *         self.field_count = reader.read_uint16()
  *         self.defined_field_count = reader.read_uint16()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->defined_field_count = __pyx_t_7;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":92
+  /* "bx/bbi/bbi_file.pyx":92
  *         self.field_count = reader.read_uint16()
  *         self.defined_field_count = reader.read_uint16()
  *         self.as_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->as_offset = __pyx_t_8;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":93
+  /* "bx/bbi/bbi_file.pyx":93
  *         self.defined_field_count = reader.read_uint16()
  *         self.as_offset = reader.read_uint64()
  *         self.total_summary_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->total_summary_offset = __pyx_t_8;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":94
+  /* "bx/bbi/bbi_file.pyx":94
  *         self.as_offset = reader.read_uint64()
  *         self.total_summary_offset = reader.read_uint64()
  *         self.uncompress_buf_size = reader.read_uint32()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->uncompress_buf_size = __pyx_t_5;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":96
+  /* "bx/bbi/bbi_file.pyx":96
  *         self.uncompress_buf_size = reader.read_uint32()
  *         # Skip reserved
  *         reader.seek( 64 )             # <<<<<<<<<<<<<<
  */
   __pyx_t_4 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__seek); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __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[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_int_64);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_64);
-  __Pyx_GIVEREF(__pyx_int_64);
-  __pyx_t_2 = PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":98
+
+  /* "bx/bbi/bbi_file.pyx":98
  *         reader.seek( 64 )
  *         # Read zoom headers
  *         self.level_list = []             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < self.zoom_levels:
  *             level = ZoomLevel()
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
   __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->level_list);
   __Pyx_DECREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->level_list);
-  ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->level_list = ((PyObject *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":99
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->level_list = ((PyObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "bx/bbi/bbi_file.pyx":99
  *         # Read zoom headers
  *         self.level_list = []
  *         for i from 0 <= i < self.zoom_levels:             # <<<<<<<<<<<<<<
   __pyx_t_7 = ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->zoom_levels;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":100
+    /* "bx/bbi/bbi_file.pyx":100
  *         self.level_list = []
  *         for i from 0 <= i < self.zoom_levels:
  *             level = ZoomLevel()             # <<<<<<<<<<<<<<
  *             level.bbi_file = self
  *             level.reduction_level = reader.read_uint32()
  */
-    __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_2bx_3bbi_8bbi_file_ZoomLevel)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_2bx_3bbi_8bbi_file_ZoomLevel)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_v_level));
-    __pyx_v_level = ((struct __pyx_obj_2bx_3bbi_8bbi_file_ZoomLevel *)__pyx_t_2);
-    __pyx_t_2 = 0;
-
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":101
+    __pyx_v_level = ((struct __pyx_obj_2bx_3bbi_8bbi_file_ZoomLevel *)__pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "bx/bbi/bbi_file.pyx":101
  *         for i from 0 <= i < self.zoom_levels:
  *             level = ZoomLevel()
  *             level.bbi_file = self             # <<<<<<<<<<<<<<
     __Pyx_DECREF(((PyObject *)__pyx_v_level->bbi_file));
     __pyx_v_level->bbi_file = ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self);
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":102
+    /* "bx/bbi/bbi_file.pyx":102
  *             level = ZoomLevel()
  *             level.bbi_file = self
  *             level.reduction_level = reader.read_uint32()             # <<<<<<<<<<<<<<
  *             level.reserved = reader.read_uint32()
  *             level.data_offset = reader.read_uint64()
  */
-    __pyx_t_2 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __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[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_5 = __Pyx_PyInt_AsUnsignedInt(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __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_PyInt_AsUnsignedInt(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_level->reduction_level = __pyx_t_5;
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":103
+    /* "bx/bbi/bbi_file.pyx":103
  *             level.bbi_file = self
  *             level.reduction_level = reader.read_uint32()
  *             level.reserved = reader.read_uint32()             # <<<<<<<<<<<<<<
  *             level.data_offset = reader.read_uint64()
  *             level.index_offset = reader.read_uint64()
  */
-    __pyx_t_3 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint32); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_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[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = __Pyx_PyInt_AsUnsignedInt(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyInt_AsUnsignedInt(__pyx_t_2); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_level->reserved = __pyx_t_5;
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":104
+    /* "bx/bbi/bbi_file.pyx":104
  *             level.reduction_level = reader.read_uint32()
  *             level.reserved = reader.read_uint32()
  *             level.data_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
  *             level.index_offset = reader.read_uint64()
  *             self.level_list.append( level )
  */
-    __pyx_t_2 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __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[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_8 = __Pyx_PyInt_AsUnsignedLongLong(__pyx_t_3); if (unlikely((__pyx_t_8 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_8 = __Pyx_PyInt_AsUnsignedLongLong(__pyx_t_4); if (unlikely((__pyx_t_8 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_level->data_offset = __pyx_t_8;
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":105
+    /* "bx/bbi/bbi_file.pyx":105
  *             level.reserved = reader.read_uint32()
  *             level.data_offset = reader.read_uint64()
  *             level.index_offset = reader.read_uint64()             # <<<<<<<<<<<<<<
  *             self.level_list.append( level )
  *         # Initialize and attach embedded BPTFile containing chromosome names and ids
  */
-    __pyx_t_3 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__read_uint64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_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[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_8 = __Pyx_PyInt_AsUnsignedLongLong(__pyx_t_3); if (unlikely((__pyx_t_8 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_8 = __Pyx_PyInt_AsUnsignedLongLong(__pyx_t_2); if (unlikely((__pyx_t_8 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_level->index_offset = __pyx_t_8;
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":106
+    /* "bx/bbi/bbi_file.pyx":106
  *             level.data_offset = reader.read_uint64()
  *             level.index_offset = reader.read_uint64()
  *             self.level_list.append( level )             # <<<<<<<<<<<<<<
  *         # Initialize and attach embedded BPTFile containing chromosome names and ids
  *         reader.seek( self.chrom_tree_offset )
  */
-    __pyx_t_2 = __Pyx_PyObject_Append(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->level_list, ((PyObject *)__pyx_v_level)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  }
-
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":108
+    __pyx_t_3 = __Pyx_PyObject_Append(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->level_list, ((PyObject *)__pyx_v_level)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  }
+
+  /* "bx/bbi/bbi_file.pyx":108
  *             self.level_list.append( level )
  *         # Initialize and attach embedded BPTFile containing chromosome names and ids
  *         reader.seek( self.chrom_tree_offset )             # <<<<<<<<<<<<<<
  *         self.chrom_bpt = BPTFile( file=self.file )
  * 
  */
-  __pyx_t_2 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__seek); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyLong_FromUnsignedLongLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_tree_offset); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_v_reader, __pyx_n_s__seek); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __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[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyLong_FromUnsignedLongLong(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_tree_offset); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__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[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_4);
+  __pyx_t_4 = 0;
+  __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __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;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":109
+
+  /* "bx/bbi/bbi_file.pyx":109
  *         # Initialize and attach embedded BPTFile containing chromosome names and ids
  *         reader.seek( self.chrom_tree_offset )
  *         self.chrom_bpt = BPTFile( file=self.file )             # <<<<<<<<<<<<<<
  * 
  *     cpdef summarize( self, char * chrom, bits32 start, bits32 end, int summary_size ):
  */
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
-  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__file), ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_2bx_3bbi_8bpt_file_BPTFile)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-  __Pyx_GIVEREF(__pyx_t_4);
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__file), ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyEval_CallObjectWithKeywords(((PyObject *)((PyObject*)__pyx_ptype_2bx_3bbi_8bpt_file_BPTFile)), ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+  __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_bpt);
   __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_bpt));
-  ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_bpt = ((struct __pyx_obj_2bx_3bbi_8bpt_file_BPTFile *)__pyx_t_4);
-  __pyx_t_4 = 0;
+  ((struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *)__pyx_v_self)->chrom_bpt = ((struct __pyx_obj_2bx_3bbi_8bpt_file_BPTFile *)__pyx_t_2);
+  __pyx_t_2 = 0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":111
+/* "bx/bbi/bbi_file.pyx":111
  *         self.chrom_bpt = BPTFile( file=self.file )
  * 
  *     cpdef summarize( self, char * chrom, bits32 start, bits32 end, int summary_size ):             # <<<<<<<<<<<<<<
  *         Gets `summary_size` data points over the regions `chrom`:`start`-`end`.
  */
 
-static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_summarize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_2summarize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static  PyObject *__pyx_f_2bx_3bbi_8bbi_file_7BBIFile_summarize(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *__pyx_v_self, char *__pyx_v_chrom, __pyx_t_2bx_3bbi_5types_bits32 __pyx_v_start, __pyx_t_2bx_3bbi_5types_bits32 __pyx_v_end, int __pyx_v_summary_size, int __pyx_skip_dispatch) {
   PyObject *__pyx_v_chrom_id;
   PyObject *__pyx_v_chrom_size;
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
     __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__summarize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (void *)&__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_summarize)) {
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (void *)&__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_2summarize)) {
       __Pyx_XDECREF(__pyx_r);
       __pyx_t_2 = PyBytes_FromString(__pyx_v_chrom); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_2));
       __pyx_t_5 = PyInt_FromLong(__pyx_v_summary_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __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_3);
       __pyx_t_3 = 0;
       __pyx_t_4 = 0;
       __pyx_t_5 = 0;
-      __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
       __pyx_r = __pyx_t_5;
       __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":115
+  /* "bx/bbi/bbi_file.pyx":115
  *         Gets `summary_size` data points over the regions `chrom`:`start`-`end`.
  *         """
  *         if start >= end:             # <<<<<<<<<<<<<<
   __pyx_t_7 = (__pyx_v_start >= __pyx_v_end);
   if (__pyx_t_7) {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":116
+    /* "bx/bbi/bbi_file.pyx":116
  *         """
  *         if start >= end:
  *             return None             # <<<<<<<<<<<<<<
   }
   __pyx_L3:;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":117
+  /* "bx/bbi/bbi_file.pyx":117
  *         if start >= end:
  *             return None
  *         chrom_id, chrom_size = self._get_chrom_id_and_size( chrom )             # <<<<<<<<<<<<<<
     __pyx_t_6 = 0;
   }
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":118
+  /* "bx/bbi/bbi_file.pyx":118
  *             return None
  *         chrom_id, chrom_size = self._get_chrom_id_and_size( chrom )
  *         if chrom_id is None:             # <<<<<<<<<<<<<<
   __pyx_t_7 = (__pyx_v_chrom_id == Py_None);
   if (__pyx_t_7) {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":119
+    /* "bx/bbi/bbi_file.pyx":119
  *         chrom_id, chrom_size = self._get_chrom_id_and_size( chrom )
  *         if chrom_id is None:
  *             return None             # <<<<<<<<<<<<<<
   }
   __pyx_L4:;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":124
+  /* "bx/bbi/bbi_file.pyx":124
  * 
  *         # Find appropriate zoom level
  *         cdef bits32 base_size = end - start             # <<<<<<<<<<<<<<
  */
   __pyx_v_base_size = (__pyx_v_end - __pyx_v_start);
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":125
+  /* "bx/bbi/bbi_file.pyx":125
  *         # Find appropriate zoom level
  *         cdef bits32 base_size = end - start
  *         cdef int full_reduction = base_size / summary_size             # <<<<<<<<<<<<<<
   }
   __pyx_v_full_reduction = (__pyx_v_base_size / __pyx_v_summary_size);
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":126
+  /* "bx/bbi/bbi_file.pyx":126
  *         cdef bits32 base_size = end - start
  *         cdef int full_reduction = base_size / summary_size
  *         cdef int zoom = full_reduction / 2             # <<<<<<<<<<<<<<
  */
   __pyx_v_zoom = __Pyx_div_long(__pyx_v_full_reduction, 2);
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":127
+  /* "bx/bbi/bbi_file.pyx":127
  *         cdef int full_reduction = base_size / summary_size
  *         cdef int zoom = full_reduction / 2
  *         if zoom < 0:             # <<<<<<<<<<<<<<
   __pyx_t_7 = (__pyx_v_zoom < 0);
   if (__pyx_t_7) {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":128
+    /* "bx/bbi/bbi_file.pyx":128
  *         cdef int zoom = full_reduction / 2
  *         if zoom < 0:
  *             zoom = 0             # <<<<<<<<<<<<<<
   }
   __pyx_L5:;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":129
+  /* "bx/bbi/bbi_file.pyx":129
  *         if zoom < 0:
  *             zoom = 0
  *         cdef ZoomLevel zoom_level = self._best_zoom_level( zoom )             # <<<<<<<<<<<<<<
   __pyx_v_zoom_level = ((struct __pyx_obj_2bx_3bbi_8bbi_file_ZoomLevel *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":130
+  /* "bx/bbi/bbi_file.pyx":130
  *             zoom = 0
  *         cdef ZoomLevel zoom_level = self._best_zoom_level( zoom )
  *         if zoom_level is not None:             # <<<<<<<<<<<<<<
   __pyx_t_7 = (((PyObject *)__pyx_v_zoom_level) != Py_None);
   if (__pyx_t_7) {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":131
+    /* "bx/bbi/bbi_file.pyx":131
  *         cdef ZoomLevel zoom_level = self._best_zoom_level( zoom )
  *         if zoom_level is not None:
  *             return zoom_level._summarize( chrom_id, start, end, summary_size )             # <<<<<<<<<<<<<<
   }
   /*else*/ {
 
-    /* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":133
+    /* "bx/bbi/bbi_file.pyx":133
  *             return zoom_level._summarize( chrom_id, start, end, summary_size )
  *         else:
  *             return self._summarize_from_full( chrom_id, start, end, summary_size )             # <<<<<<<<<<<<<<
  * 
- *     cpdef query( self, char * chrom, bits32 start, bits32 end, int summary_size ):
+ *     cpdef summarize_from_full( self, char * chrom, bits32 start, bits32 end, int summary_size ):
  */
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_8 = __Pyx_PyInt_AsUnsignedInt(__pyx_v_chrom_id); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":111
+/* "bx/bbi/bbi_file.pyx":111
  *         self.chrom_bpt = BPTFile( file=self.file )
  * 
  *     cpdef summarize( self, char * chrom, bits32 start, bits32 end, int summary_size ):             # <<<<<<<<<<<<<<
  *         Gets `summary_size` data points over the regions `chrom`:`start`-`end`.
  */
 
-static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_summarize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_2bx_3bbi_8bbi_file_7BBIFile_summarize[] = "\n        Gets `summary_size` data points over the regions `chrom`:`start`-`end`.\n        ";
-static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_summarize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_2summarize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_2bx_3bbi_8bbi_file_7BBIFile_2summarize[] = "\n        Gets `summary_size` data points over the regions `chrom`:`start`-`end`.\n        ";
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_2summarize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_chrom;
   __pyx_t_2bx_3bbi_5types_bits32 __pyx_v_start;
   __pyx_t_2bx_3bbi_5types_bits32 __pyx_v_end;
   return __pyx_r;
 }
 
-/* "/Users/kanwei/bx-python/lib/bx/bbi/bbi_file.pyx":135
+/* "bx/bbi/bbi_file.pyx":135
  *             return self._summarize_from_full( chrom_id, start, end, summary_size )
  * 
+ *     cpdef summarize_from_full( self, char * chrom, bits32 start, bits32 end, int summary_size ):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets `summary_size` data points over the regions `chrom`:`start`-`end`,
+ */
+
+static PyObject *__pyx_pf_2bx_3bbi_8bbi_file_7BBIFile_3summarize_from_full(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static  PyObject *__pyx_f_2bx_3bbi_8bbi_file_7BBIFile_summarize_from_full(struct __pyx_obj_2bx_3bbi_8bbi_file_BBIFile *__pyx_v_self, char *__pyx_v_chrom, __pyx_t_2bx_3bbi_5types_bits32 __pyx_v_start, __pyx_t_2bx_3bbi_5types_bits32 __pyx_v_end, int __pyx_v_summary_size, int __pyx_skip_dispatch) {
+  PyObject *__pyx_v_chrom_id;
+  PyObject *__pyx_v_chrom_size;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_7;
+  __pyx_t_2bx_3bbi_5types_bits32 __pyx_t_8;
+  __Pyx_RefNannySetupContext("summarize_from_full");
+  __pyx_v_chrom_id = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_chrom_size = Py_None; __Pyx_INCREF(Py_None);
+  /* Check if called by wrapper */