Generated by Cython 0.14.1 on Fri Dec 23 22:28:58 2011

Raw output: sandbox.c

 1: from numpy cimport *
  /* "sandbox.pyx":1
 * from numpy cimport *             # <<<<<<<<<<<<<<
 * cimport numpy as cnp
 * import numpy as np
 */
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 2: cimport numpy as cnp
 3: import numpy as np
  /* "sandbox.pyx":3
 * from numpy cimport *
 * cimport numpy as cnp
 * import numpy as np             # <<<<<<<<<<<<<<
 * 
 * cimport cpython
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4: 
 5: cimport cpython
 6: 
 7: cnp.import_array()
  /* "sandbox.pyx":7
 * cimport cpython
 * 
 * cnp.import_array()             # <<<<<<<<<<<<<<
 * 
 * cdef class SeriesIterator:
 */
  import_array();
 8: 
 9: cdef class SeriesIterator:
/* "sandbox.pyx":9
 * cnp.import_array()
 * 
 * cdef class SeriesIterator:             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, arr):
 */

struct __pyx_obj_7sandbox_SeriesIterator {
  PyObject_HEAD
};

 10: 
 11:     def __init__(self, arr):
/* "sandbox.pyx":11
 * cdef class SeriesIterator:
 * 
 *     def __init__(self, arr):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

static int __pyx_pf_7sandbox_14SeriesIterator___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pf_7sandbox_14SeriesIterator___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arr = 0;
  int __pyx_r;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,0};
  __Pyx_RefNannySetupContext("__init__");
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[1] = {0};
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr);
      if (likely(values[0])) kw_args--;
      else goto __pyx_L5_argtuple_error;
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_arr = values[0];
  } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
    goto __pyx_L5_argtuple_error;
  } else {
    __pyx_v_arr = PyTuple_GET_ITEM(__pyx_args, 0);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("sandbox.SeriesIterator.__init__");
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12:         pass
 13: 
 14:     def next(self):
/* "sandbox.pyx":14
 *         pass
 * 
 *     def next(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

static PyObject *__pyx_pf_7sandbox_14SeriesIterator_1next(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pf_7sandbox_14SeriesIterator_1next(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("next");

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 15:         pass
 16: 
 17: def foo(object o):
/* "sandbox.pyx":17
 *         pass
 * 
 * def foo(object o):             # <<<<<<<<<<<<<<
 *     cdef int64_t bar = o
 *     return bar
 */

static PyObject *__pyx_pf_7sandbox_foo(PyObject *__pyx_self, PyObject *__pyx_v_o); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_foo = {__Pyx_NAMESTR("foo"), (PyCFunction)__pyx_pf_7sandbox_foo, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_foo(PyObject *__pyx_self, PyObject *__pyx_v_o) {
  __pyx_t_5numpy_int64_t __pyx_v_bar;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("foo");
  __pyx_self = __pyx_self;

  /* "sandbox.pyx":17
 *         pass
 * 
 * def foo(object o):             # <<<<<<<<<<<<<<
 *     cdef int64_t bar = o
 *     return bar
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_foo, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__foo, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 18:     cdef int64_t bar = o
  /* "sandbox.pyx":18
 * 
 * def foo(object o):
 *     cdef int64_t bar = o             # <<<<<<<<<<<<<<
 *     return bar
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_from_py_npy_int64(__pyx_v_o); if (unlikely((__pyx_t_1 == (npy_int64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_bar = __pyx_t_1;
 19:     return bar
  /* "sandbox.pyx":19
 * def foo(object o):
 *     cdef int64_t bar = o
 *     return bar             # <<<<<<<<<<<<<<
 * 
 * def foo2():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_to_py_npy_int64(__pyx_v_bar); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("sandbox.foo");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 20: 
 21: def foo2():
/* "sandbox.pyx":21
 *     return bar
 * 
 * def foo2():             # <<<<<<<<<<<<<<
 *     print sizeof(PyObject*)
 * 
 */

static PyObject *__pyx_pf_7sandbox_1foo2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_1foo2 = {__Pyx_NAMESTR("foo2"), (PyCFunction)__pyx_pf_7sandbox_1foo2, METH_NOARGS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_1foo2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("foo2");
  __pyx_self = __pyx_self;

  /* "sandbox.pyx":21
 *     return bar
 * 
 * def foo2():             # <<<<<<<<<<<<<<
 *     print sizeof(PyObject*)
 * 
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_1foo2, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__foo2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 22:     print sizeof(PyObject*)
  /* "sandbox.pyx":22
 * 
 * def foo2():
 *     print sizeof(PyObject*)             # <<<<<<<<<<<<<<
 * 
 * def bench_dict():
 */
  __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(PyObject *))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("sandbox.foo2");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 23: 
 24: def bench_dict():
/* "sandbox.pyx":24
 *     print sizeof(PyObject*)
 * 
 * def bench_dict():             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Py_ssize_t i
 */

static PyObject *__pyx_pf_7sandbox_2bench_dict(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_2bench_dict = {__Pyx_NAMESTR("bench_dict"), (PyCFunction)__pyx_pf_7sandbox_2bench_dict, METH_NOARGS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_2bench_dict(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_v_d = 0;
  long __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("bench_dict");
  __pyx_self = __pyx_self;

  /* "sandbox.pyx":24
 *     print sizeof(PyObject*)
 * 
 * def bench_dict():             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Py_ssize_t i
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_2bench_dict, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__bench_dict, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 25:     cdef:
 26:         # Py_ssize_t i
 27:         dict d = {}
  /* "sandbox.pyx":27
 *     cdef:
 *         # Py_ssize_t i
 *         dict d = {}             # <<<<<<<<<<<<<<
 * 
 *     for i in range(1000000):
 */
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_d = __pyx_t_1;
  __pyx_t_1 = 0;
 28: 
 29:     for i in range(1000000):
  /* "sandbox.pyx":29
 *         dict d = {}
 * 
 *     for i in range(1000000):             # <<<<<<<<<<<<<<
 *         d[i] = i
 * 
 */
  for (__pyx_t_2 = 0; __pyx_t_2 < 1000000; __pyx_t_2+=1) {
    __pyx_v_i = __pyx_t_2;
 30:         d[i] = i
    /* "sandbox.pyx":30
 * 
 *     for i in range(1000000):
 *         d[i] = i             # <<<<<<<<<<<<<<
 * 
 * from cpython cimport PyObject
 */
    __pyx_t_1 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_SetItemInt(((PyObject *)__pyx_v_d), __pyx_v_i, __pyx_t_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("sandbox.bench_dict");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 31: 
 32: from cpython cimport PyObject
 33: 
 34: cdef extern from "numpy/arrayobject.h":
 35:     bint PyArray_Check(PyObject*)
 36: 
 37: cimport cython
 38: 
 39: @cython.boundscheck(False)
 40: @cython.wraparound(False)
 41: def bench_typecheck1(ndarray[object] arr):
/* "sandbox.pyx":41
 * @cython.boundscheck(False)
 * @cython.wraparound(False)
 * def bench_typecheck1(ndarray[object] arr):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i, n
 *     n = cnp.PyArray_SIZE(arr)
 */

static PyObject *__pyx_pf_7sandbox_3bench_typecheck1(PyObject *__pyx_self, PyObject *__pyx_v_arr); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_3bench_typecheck1 = {__Pyx_NAMESTR("bench_typecheck1"), (PyCFunction)__pyx_pf_7sandbox_3bench_typecheck1, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_3bench_typecheck1(PyObject *__pyx_self, PyObject *__pyx_v_arr) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  Py_buffer __pyx_bstruct_arr;
  Py_ssize_t __pyx_bstride_0_arr = 0;
  Py_ssize_t __pyx_bshape_0_arr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("bench_typecheck1");
  __pyx_self = __pyx_self;
  __pyx_bstruct_arr.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arr), __pyx_ptype_5numpy_ndarray, 1, "arr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_arr, (PyObject*)__pyx_v_arr, &__Pyx_TypeInfo_object, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_arr = __pyx_bstruct_arr.strides[0];
  __pyx_bshape_0_arr = __pyx_bstruct_arr.shape[0];

  /* "sandbox.pyx":41
 * @cython.boundscheck(False)
 * @cython.wraparound(False)
 * def bench_typecheck1(ndarray[object] arr):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i, n
 *     n = cnp.PyArray_SIZE(arr)
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_3bench_typecheck1, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__bench_typecheck1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 42:     cdef Py_ssize_t i, n
 43:     n = cnp.PyArray_SIZE(arr)
  /* "sandbox.pyx":43
 * def bench_typecheck1(ndarray[object] arr):
 *     cdef Py_ssize_t i, n
 *     n = cnp.PyArray_SIZE(arr)             # <<<<<<<<<<<<<<
 *     for i in range(n):
 *         cpython.PyFloat_Check(arr[i])
 */
  __pyx_t_1 = __pyx_v_arr;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_n = PyArray_SIZE(((PyArrayObject *)__pyx_t_1));
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 44:     for i in range(n):
  /* "sandbox.pyx":44
 *     cdef Py_ssize_t i, n
 *     n = cnp.PyArray_SIZE(arr)
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         cpython.PyFloat_Check(arr[i])
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
 45:         cpython.PyFloat_Check(arr[i])
    /* "sandbox.pyx":45
 *     n = cnp.PyArray_SIZE(arr)
 *     for i in range(n):
 *         cpython.PyFloat_Check(arr[i])             # <<<<<<<<<<<<<<
 * 
 * def bench_typecheck2(ndarray[object] arr):
 */
    __pyx_t_4 = __pyx_v_i;
    __pyx_t_1 = *__Pyx_BufPtrStrided1d(PyObject **, __pyx_bstruct_arr.buf, __pyx_t_4, __pyx_bstride_0_arr);
    __Pyx_INCREF((PyObject*)__pyx_t_1);
    PyFloat_Check(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.bench_typecheck1");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 46: 
 47: def bench_typecheck2(ndarray[object] arr):
/* "sandbox.pyx":47
 *         cpython.PyFloat_Check(arr[i])
 * 
 * def bench_typecheck2(ndarray[object] arr):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i, n
 *     cdef PyObject** buf = <PyObject**> arr.data
 */

static PyObject *__pyx_pf_7sandbox_4bench_typecheck2(PyObject *__pyx_self, PyObject *__pyx_v_arr); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_4bench_typecheck2 = {__Pyx_NAMESTR("bench_typecheck2"), (PyCFunction)__pyx_pf_7sandbox_4bench_typecheck2, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_4bench_typecheck2(PyObject *__pyx_self, PyObject *__pyx_v_arr) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyObject **__pyx_v_buf;
  Py_buffer __pyx_bstruct_arr;
  Py_ssize_t __pyx_bstride_0_arr = 0;
  Py_ssize_t __pyx_bshape_0_arr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("bench_typecheck2");
  __pyx_self = __pyx_self;
  __pyx_bstruct_arr.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arr), __pyx_ptype_5numpy_ndarray, 1, "arr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_arr, (PyObject*)__pyx_v_arr, &__Pyx_TypeInfo_object, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_arr = __pyx_bstruct_arr.strides[0];
  __pyx_bshape_0_arr = __pyx_bstruct_arr.shape[0];

  /* "sandbox.pyx":47
 *         cpython.PyFloat_Check(arr[i])
 * 
 * def bench_typecheck2(ndarray[object] arr):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i, n
 *     cdef PyObject** buf = <PyObject**> arr.data
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_4bench_typecheck2, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__bench_typecheck2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 48:     cdef Py_ssize_t i, n
 49:     cdef PyObject** buf = <PyObject**> arr.data
  /* "sandbox.pyx":49
 * def bench_typecheck2(ndarray[object] arr):
 *     cdef Py_ssize_t i, n
 *     cdef PyObject** buf = <PyObject**> arr.data             # <<<<<<<<<<<<<<
 *     n = cnp.PyArray_SIZE(arr)
 *     for i in range(n):
 */
  __pyx_v_buf = ((PyObject **)((PyArrayObject *)__pyx_v_arr)->data);
 50:     n = cnp.PyArray_SIZE(arr)
  /* "sandbox.pyx":50
 *     cdef Py_ssize_t i, n
 *     cdef PyObject** buf = <PyObject**> arr.data
 *     n = cnp.PyArray_SIZE(arr)             # <<<<<<<<<<<<<<
 *     for i in range(n):
 *         PyArray_Check(buf[i])
 */
  __pyx_t_1 = __pyx_v_arr;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_n = PyArray_SIZE(((PyArrayObject *)__pyx_t_1));
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 51:     for i in range(n):
  /* "sandbox.pyx":51
 *     cdef PyObject** buf = <PyObject**> arr.data
 *     n = cnp.PyArray_SIZE(arr)
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         PyArray_Check(buf[i])
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
 52:         PyArray_Check(buf[i])
    /* "sandbox.pyx":52
 *     n = cnp.PyArray_SIZE(arr)
 *     for i in range(n):
 *         PyArray_Check(buf[i])             # <<<<<<<<<<<<<<
 * 
 * 
 */
    PyArray_Check((__pyx_v_buf[__pyx_v_i]));
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.bench_typecheck2");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 53: 
 54: 
 55: def foo(object _chunk, object _arr):
/* "sandbox.pyx":55
 * 
 * 
 * def foo(object _chunk, object _arr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         char* dummy_buf
 */

static PyObject *__pyx_pf_7sandbox_5foo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_5foo = {__Pyx_NAMESTR("foo"), (PyCFunction)__pyx_pf_7sandbox_5foo, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_5foo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v__chunk = 0;
  PyObject *__pyx_v__arr = 0;
  char *__pyx_v_dummy_buf;
  PyArrayObject *__pyx_v_arr;
  PyArrayObject *__pyx_v_chunk;
  npy_intp *__pyx_v_shape;
  long __pyx_v_group_size;
  Py_ssize_t __pyx_v_n;
  PyObject *__pyx_v_inc;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s___chunk,&__pyx_n_s___arr,0};
  __Pyx_RefNannySetupContext("foo");
  __pyx_self = __pyx_self;
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[2] = {0,0};
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s___chunk);
      if (likely(values[0])) kw_args--;
      else goto __pyx_L5_argtuple_error;
      case  1:
      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s___arr);
      if (likely(values[1])) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("foo", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "foo") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v__chunk = values[0];
    __pyx_v__arr = values[1];
  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    __pyx_v__chunk = PyTuple_GET_ITEM(__pyx_args, 0);
    __pyx_v__arr = PyTuple_GET_ITEM(__pyx_args, 1);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("foo", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("sandbox.foo");
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_v_arr = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  __pyx_v_chunk = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  __pyx_v_inc = Py_None; __Pyx_INCREF(Py_None);

  /* "sandbox.pyx":55
 * 
 * 
 * def foo(object _chunk, object _arr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         char* dummy_buf
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_5foo, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__foo, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 56:     cdef:
 57:         char* dummy_buf
 58:         ndarray arr, result, chunk
 59: 
 60:     arr = _arr
  /* "sandbox.pyx":60
 *         ndarray arr, result, chunk
 * 
 *     arr = _arr             # <<<<<<<<<<<<<<
 *     chunk = _chunk
 * 
 */
  if (!(likely(((__pyx_v__arr) == Py_None) || likely(__Pyx_TypeTest(__pyx_v__arr, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_INCREF(__pyx_v__arr);
  __Pyx_DECREF(((PyObject *)__pyx_v_arr));
  __pyx_v_arr = ((PyArrayObject *)__pyx_v__arr);
 61:     chunk = _chunk
  /* "sandbox.pyx":61
 * 
 *     arr = _arr
 *     chunk = _chunk             # <<<<<<<<<<<<<<
 * 
 *     dummy_buf = chunk.data
 */
  if (!(likely(((__pyx_v__chunk) == Py_None) || likely(__Pyx_TypeTest(__pyx_v__chunk, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_INCREF(__pyx_v__chunk);
  __Pyx_DECREF(((PyObject *)__pyx_v_chunk));
  __pyx_v_chunk = ((PyArrayObject *)__pyx_v__chunk);
 62: 
 63:     dummy_buf = chunk.data
  /* "sandbox.pyx":63
 *     chunk = _chunk
 * 
 *     dummy_buf = chunk.data             # <<<<<<<<<<<<<<
 *     chunk.data = arr.data
 * 
 */
  __pyx_v_dummy_buf = __pyx_v_chunk->data;
 64:     chunk.data = arr.data
  /* "sandbox.pyx":64
 * 
 *     dummy_buf = chunk.data
 *     chunk.data = arr.data             # <<<<<<<<<<<<<<
 * 
 *     shape = chunk.shape
 */
  __pyx_v_chunk->data = __pyx_v_arr->data;
 65: 
 66:     shape = chunk.shape
  /* "sandbox.pyx":66
 *     chunk.data = arr.data
 * 
 *     shape = chunk.shape             # <<<<<<<<<<<<<<
 *     group_size = 0
 *     n = len(arr)
 */
  __pyx_v_shape = __pyx_v_chunk->dimensions;
 67:     group_size = 0
  /* "sandbox.pyx":67
 * 
 *     shape = chunk.shape
 *     group_size = 0             # <<<<<<<<<<<<<<
 *     n = len(arr)
 * 
 */
  __pyx_v_group_size = 0;
 68:     n = len(arr)
  /* "sandbox.pyx":68
 *     shape = chunk.shape
 *     group_size = 0
 *     n = len(arr)             # <<<<<<<<<<<<<<
 * 
 *     inc = arr.dtype.itemsize
 */
  __pyx_t_1 = PyObject_Length(((PyObject *)__pyx_v_arr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_n = __pyx_t_1;
 69: 
 70:     inc = arr.dtype.itemsize
  /* "sandbox.pyx":70
 *     n = len(arr)
 * 
 *     inc = arr.dtype.itemsize             # <<<<<<<<<<<<<<
 * 
 *     # chunk.shape[0] = 100
 */
  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_arr), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_v_inc);
  __pyx_v_inc = __pyx_t_3;
  __pyx_t_3 = 0;
 71: 
 72:     # chunk.shape[0] = 100
 73:     return chunk
  /* "sandbox.pyx":73
 * 
 *     # chunk.shape[0] = 100
 *     return chunk             # <<<<<<<<<<<<<<
 * 
 * from khash cimport *
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_chunk));
  __pyx_r = ((PyObject *)__pyx_v_chunk);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("sandbox.foo");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF((PyObject *)__pyx_v_arr);
  __Pyx_DECREF((PyObject *)__pyx_v_chunk);
  __Pyx_DECREF(__pyx_v_inc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 74: 
 75: from khash cimport *
 76: 
 77: def test(ndarray arr, Py_ssize_t size_hint):
/* "sandbox.pyx":77
 * from khash cimport *
 * 
 * def test(ndarray arr, Py_ssize_t size_hint):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_pymap_t *table
 */

static PyObject *__pyx_pf_7sandbox_6test(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_6test = {__Pyx_NAMESTR("test"), (PyCFunction)__pyx_pf_7sandbox_6test, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_6test(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_arr = 0;
  Py_ssize_t __pyx_v_size_hint;
  kh_pymap_t *__pyx_v_table;
  int __pyx_v_ret;
  khiter_t __pyx_v_k;
  PyObject **__pyx_v_data;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyArrayObject *__pyx_v_indexer;
  Py_buffer __pyx_bstruct_indexer;
  Py_ssize_t __pyx_bstride_0_indexer = 0;
  Py_ssize_t __pyx_bshape_0_indexer = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__size_hint,0};
  __Pyx_RefNannySetupContext("test");
  __pyx_self = __pyx_self;
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[2] = {0,0};
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr);
      if (likely(values[0])) kw_args--;
      else goto __pyx_L5_argtuple_error;
      case  1:
      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size_hint);
      if (likely(values[1])) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("test", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "test") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_arr = ((PyArrayObject *)values[0]);
    __pyx_v_size_hint = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_size_hint == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    __pyx_v_arr = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 0));
    __pyx_v_size_hint = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_size_hint == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("test", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("sandbox.test");
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_v_indexer = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  __pyx_bstruct_indexer.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arr), __pyx_ptype_5numpy_ndarray, 1, "arr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "sandbox.pyx":77
 * from khash cimport *
 * 
 * def test(ndarray arr, Py_ssize_t size_hint):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_pymap_t *table
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_6test, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 78:     cdef:
 79:         kh_pymap_t *table
 80:         int ret
 81:         khiter_t k
 82:         PyObject **data
 83:         Py_ssize_t i, n
 84:         ndarray[Py_ssize_t] indexer
 85: 
 86:     table = kh_init_pymap()
  /* "sandbox.pyx":86
 *         ndarray[Py_ssize_t] indexer
 * 
 *     table = kh_init_pymap()             # <<<<<<<<<<<<<<
 *     kh_resize_pymap(table, size_hint)
 * 
 */
  __pyx_v_table = kh_init_pymap();
 87:     kh_resize_pymap(table, size_hint)
  /* "sandbox.pyx":87
 * 
 *     table = kh_init_pymap()
 *     kh_resize_pymap(table, size_hint)             # <<<<<<<<<<<<<<
 * 
 *     data = <PyObject**> arr.data
 */
  kh_resize_pymap(__pyx_v_table, __pyx_v_size_hint);
 88: 
 89:     data = <PyObject**> arr.data
  /* "sandbox.pyx":89
 *     kh_resize_pymap(table, size_hint)
 * 
 *     data = <PyObject**> arr.data             # <<<<<<<<<<<<<<
 *     n = len(arr)
 * 
 */
  __pyx_v_data = ((PyObject **)__pyx_v_arr->data);
 90:     n = len(arr)
  /* "sandbox.pyx":90
 * 
 *     data = <PyObject**> arr.data
 *     n = len(arr)             # <<<<<<<<<<<<<<
 * 
 *     indexer = np.empty(n, dtype=np.int_)
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_arr);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n = __pyx_t_2;
 91: 
 92:     indexer = np.empty(n, dtype=np.int_)
  /* "sandbox.pyx":92
 *     n = len(arr)
 * 
 *     indexer = np.empty(n, dtype=np.int_)             # <<<<<<<<<<<<<<
 * 
 *     for i in range(n):
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__int_); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_indexer);
    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_indexer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_Py_ssize_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_8 < 0)) {
      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_indexer, (PyObject*)__pyx_v_indexer, &__Pyx_TypeInfo_Py_ssize_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      }
    }
    __pyx_bstride_0_indexer = __pyx_bstruct_indexer.strides[0];
    __pyx_bshape_0_indexer = __pyx_bstruct_indexer.shape[0];
    if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_7 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_v_indexer));
  __pyx_v_indexer = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 93: 
 94:     for i in range(n):
  /* "sandbox.pyx":94
 *     indexer = np.empty(n, dtype=np.int_)
 * 
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         k = kh_put_pymap(table, data[i], &ret)
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_2; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
 95:         k = kh_put_pymap(table, data[i], &ret)
    /* "sandbox.pyx":95
 * 
 *     for i in range(n):
 *         k = kh_put_pymap(table, data[i], &ret)             # <<<<<<<<<<<<<<
 * 
 *         # if not ret:
 */
    __pyx_v_k = kh_put_pymap(__pyx_v_table, (__pyx_v_data[__pyx_v_i]), (&__pyx_v_ret));
 96: 
 97:         # if not ret:
 98:         #     kh_del_pymap(table, k)
 99: 
 100:         table.vals[k] = i
    /* "sandbox.pyx":100
 *         #     kh_del_pymap(table, k)
 * 
 *         table.vals[k] = i             # <<<<<<<<<<<<<<
 * 
 *     for i in range(n):
 */
    (__pyx_v_table->vals[__pyx_v_k]) = __pyx_v_i;
  }
 101: 
 102:     for i in range(n):
  /* "sandbox.pyx":102
 *         table.vals[k] = i
 * 
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         k = kh_get_pymap(table, data[i])
 *         indexer[i] = table.vals[k]
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_2; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
 103:         k = kh_get_pymap(table, data[i])
    /* "sandbox.pyx":103
 * 
 *     for i in range(n):
 *         k = kh_get_pymap(table, data[i])             # <<<<<<<<<<<<<<
 *         indexer[i] = table.vals[k]
 * 
 */
    __pyx_v_k = kh_get_pymap(__pyx_v_table, (__pyx_v_data[__pyx_v_i]));
 104:         indexer[i] = table.vals[k]
    /* "sandbox.pyx":104
 *     for i in range(n):
 *         k = kh_get_pymap(table, data[i])
 *         indexer[i] = table.vals[k]             # <<<<<<<<<<<<<<
 * 
 *     kh_destroy_pymap(table)
 */
    __pyx_t_13 = __pyx_v_i;
    __pyx_t_8 = -1;
    if (__pyx_t_13 < 0) {
      __pyx_t_13 += __pyx_bshape_0_indexer;
      if (unlikely(__pyx_t_13 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_13 >= __pyx_bshape_0_indexer)) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    *__Pyx_BufPtrStrided1d(Py_ssize_t *, __pyx_bstruct_indexer.buf, __pyx_t_13, __pyx_bstride_0_indexer) = (__pyx_v_table->vals[__pyx_v_k]);
  }
 105: 
 106:     kh_destroy_pymap(table)
  /* "sandbox.pyx":106
 *         indexer[i] = table.vals[k]
 * 
 *     kh_destroy_pymap(table)             # <<<<<<<<<<<<<<
 * 
 *     return indexer
 */
  kh_destroy_pymap(__pyx_v_table);
 107: 
 108:     return indexer
  /* "sandbox.pyx":108
 *     kh_destroy_pymap(table)
 * 
 *     return indexer             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_indexer));
  __pyx_r = ((PyObject *)__pyx_v_indexer);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_indexer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.test");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_indexer);
  __pyx_L2:;
  __Pyx_DECREF((PyObject *)__pyx_v_indexer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 109: 
 110: 
 111: from cpython cimport PyString_AsString
 112: 
 113: def test_str(ndarray arr, Py_ssize_t size_hint):
/* "sandbox.pyx":113
 * from cpython cimport PyString_AsString
 * 
 * def test_str(ndarray arr, Py_ssize_t size_hint):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_str_t *table
 */

static PyObject *__pyx_pf_7sandbox_7test_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_7test_str = {__Pyx_NAMESTR("test_str"), (PyCFunction)__pyx_pf_7sandbox_7test_str, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_7test_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_arr = 0;
  Py_ssize_t __pyx_v_size_hint;
  kh_str_t *__pyx_v_table;
  int __pyx_v_ret;
  khiter_t __pyx_v_k;
  PyObject **__pyx_v_data;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyArrayObject *__pyx_v_indexer;
  Py_buffer __pyx_bstruct_indexer;
  Py_ssize_t __pyx_bstride_0_indexer = 0;
  Py_ssize_t __pyx_bshape_0_indexer = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__size_hint,0};
  __Pyx_RefNannySetupContext("test_str");
  __pyx_self = __pyx_self;
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[2] = {0,0};
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr);
      if (likely(values[0])) kw_args--;
      else goto __pyx_L5_argtuple_error;
      case  1:
      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size_hint);
      if (likely(values[1])) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("test_str", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "test_str") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_arr = ((PyArrayObject *)values[0]);
    __pyx_v_size_hint = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_size_hint == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    __pyx_v_arr = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 0));
    __pyx_v_size_hint = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_size_hint == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("test_str", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("sandbox.test_str");
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_v_indexer = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  __pyx_bstruct_indexer.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arr), __pyx_ptype_5numpy_ndarray, 1, "arr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "sandbox.pyx":113
 * from cpython cimport PyString_AsString
 * 
 * def test_str(ndarray arr, Py_ssize_t size_hint):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_str_t *table
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_7test_str, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__test_str, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 114:     cdef:
 115:         kh_str_t *table
 116:         kh_cstr_t val
 117:         int ret
 118:         khiter_t k
 119:         PyObject **data
 120:         Py_ssize_t i, n
 121:         ndarray[Py_ssize_t] indexer
 122: 
 123:     table = kh_init_str()
  /* "sandbox.pyx":123
 *         ndarray[Py_ssize_t] indexer
 * 
 *     table = kh_init_str()             # <<<<<<<<<<<<<<
 *     kh_resize_str(table, size_hint)
 * 
 */
  __pyx_v_table = kh_init_str();
 124:     kh_resize_str(table, size_hint)
  /* "sandbox.pyx":124
 * 
 *     table = kh_init_str()
 *     kh_resize_str(table, size_hint)             # <<<<<<<<<<<<<<
 * 
 *     data = <PyObject**> arr.data
 */
  kh_resize_str(__pyx_v_table, __pyx_v_size_hint);
 125: 
 126:     data = <PyObject**> arr.data
  /* "sandbox.pyx":126
 *     kh_resize_str(table, size_hint)
 * 
 *     data = <PyObject**> arr.data             # <<<<<<<<<<<<<<
 *     n = len(arr)
 * 
 */
  __pyx_v_data = ((PyObject **)__pyx_v_arr->data);
 127:     n = len(arr)
  /* "sandbox.pyx":127
 * 
 *     data = <PyObject**> arr.data
 *     n = len(arr)             # <<<<<<<<<<<<<<
 * 
 *     indexer = np.empty(n, dtype=np.int_)
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_arr);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n = __pyx_t_2;
 128: 
 129:     indexer = np.empty(n, dtype=np.int_)
  /* "sandbox.pyx":129
 *     n = len(arr)
 * 
 *     indexer = np.empty(n, dtype=np.int_)             # <<<<<<<<<<<<<<
 * 
 *     for i in range(n):
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__int_); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_indexer);
    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_indexer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_Py_ssize_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_8 < 0)) {
      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_indexer, (PyObject*)__pyx_v_indexer, &__Pyx_TypeInfo_Py_ssize_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      }
    }
    __pyx_bstride_0_indexer = __pyx_bstruct_indexer.strides[0];
    __pyx_bshape_0_indexer = __pyx_bstruct_indexer.shape[0];
    if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_7 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_v_indexer));
  __pyx_v_indexer = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 130: 
 131:     for i in range(n):
  /* "sandbox.pyx":131
 *     indexer = np.empty(n, dtype=np.int_)
 * 
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         k = kh_put_str(table, PyString_AsString(<object> data[i]), &ret)
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_2; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
 132:         k = kh_put_str(table, PyString_AsString(<object> data[i]), &ret)
    /* "sandbox.pyx":132
 * 
 *     for i in range(n):
 *         k = kh_put_str(table, PyString_AsString(<object> data[i]), &ret)             # <<<<<<<<<<<<<<
 * 
 *         # if not ret:
 */
    __pyx_t_6 = ((PyObject *)(__pyx_v_data[__pyx_v_i]));
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_13 = PyString_AsString(__pyx_t_6); if (unlikely(__pyx_t_13 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_k = kh_put_str(__pyx_v_table, __pyx_t_13, (&__pyx_v_ret));
 133: 
 134:         # if not ret:
 135:         #     kh_del_str(table, k)
 136: 
 137:         table.vals[k] = i
    /* "sandbox.pyx":137
 *         #     kh_del_str(table, k)
 * 
 *         table.vals[k] = i             # <<<<<<<<<<<<<<
 * 
 *     # for i in range(n):
 */
    (__pyx_v_table->vals[__pyx_v_k]) = __pyx_v_i;
  }
 138: 
 139:     # for i in range(n):
 140:     #     k = kh_get_str(table, PyString_AsString(<object> data[i]))
 141:     #     indexer[i] = table.vals[k]
 142: 
 143:     kh_destroy_str(table)
  /* "sandbox.pyx":143
 *     #     indexer[i] = table.vals[k]
 * 
 *     kh_destroy_str(table)             # <<<<<<<<<<<<<<
 * 
 *     return indexer
 */
  kh_destroy_str(__pyx_v_table);
 144: 
 145:     return indexer
  /* "sandbox.pyx":145
 *     kh_destroy_str(table)
 * 
 *     return indexer             # <<<<<<<<<<<<<<
 * 
 * # def test2(ndarray[object] arr):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_indexer));
  __pyx_r = ((PyObject *)__pyx_v_indexer);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_indexer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.test_str");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_indexer);
  __pyx_L2:;
  __Pyx_DECREF((PyObject *)__pyx_v_indexer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 146: 
 147: # def test2(ndarray[object] arr):
 148: #     cdef:
 149: #         dict table
 150: #         object obj
 151: #         Py_ssize_t i, loc, n
 152: #         ndarray[Py_ssize_t] indexer
 153: 
 154: #     n = len(arr)
 155: #     indexer = np.empty(n, dtype=np.int_)
 156: 
 157: #     table = {}
 158: #     for i in range(n):
 159: #         table[arr[i]] = i
 160: 
 161: #     for i in range(n):
 162: #         indexer[i] =  table[arr[i]]
 163: 
 164: #     return indexer
 165: 
 166: from cpython cimport Py_INCREF
 167: 
 168: def obj_unique(ndarray[object] arr):
/* "sandbox.pyx":168
 * from cpython cimport Py_INCREF
 * 
 * def obj_unique(ndarray[object] arr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_pyset_t *table
 */

static PyObject *__pyx_pf_7sandbox_8obj_unique(PyObject *__pyx_self, PyObject *__pyx_v_arr); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_8obj_unique = {__Pyx_NAMESTR("obj_unique"), (PyCFunction)__pyx_pf_7sandbox_8obj_unique, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_8obj_unique(PyObject *__pyx_self, PyObject *__pyx_v_arr) {
  kh_pyset_t *__pyx_v_table;
  PyObject *__pyx_v_obj;
  PyObject **__pyx_v_data;
  int __pyx_v_ret;
  khiter_t __pyx_v_k;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyObject *__pyx_v_uniques;
  Py_buffer __pyx_bstruct_arr;
  Py_ssize_t __pyx_bstride_0_arr = 0;
  Py_ssize_t __pyx_bshape_0_arr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("obj_unique");
  __pyx_self = __pyx_self;
  __pyx_v_obj = Py_None; __Pyx_INCREF(Py_None);
  __pyx_v_uniques = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  __pyx_bstruct_arr.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arr), __pyx_ptype_5numpy_ndarray, 1, "arr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_arr, (PyObject*)__pyx_v_arr, &__Pyx_TypeInfo_object, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_arr = __pyx_bstruct_arr.strides[0];
  __pyx_bshape_0_arr = __pyx_bstruct_arr.shape[0];

  /* "sandbox.pyx":168
 * from cpython cimport Py_INCREF
 * 
 * def obj_unique(ndarray[object] arr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_pyset_t *table
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_8obj_unique, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__obj_unique, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 169:     cdef:
 170:         kh_pyset_t *table
 171:         # PyObject *obj
 172:         object obj
 173:         PyObject **data
 174:         int ret
 175:         khiter_t k
 176:         Py_ssize_t i, n
 177:         list uniques
 178: 
 179:     n = len(arr)
  /* "sandbox.pyx":179
 *         list uniques
 * 
 *     n = len(arr)             # <<<<<<<<<<<<<<
 *     uniques = []
 * 
 */
  __pyx_t_1 = __pyx_v_arr;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n = __pyx_t_2;
 180:     uniques = []
  /* "sandbox.pyx":180
 * 
 *     n = len(arr)
 *     uniques = []             # <<<<<<<<<<<<<<
 * 
 *     table = kh_init_pyset()
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_DECREF(((PyObject *)__pyx_v_uniques));
  __pyx_v_uniques = __pyx_t_1;
  __pyx_t_1 = 0;
 181: 
 182:     table = kh_init_pyset()
  /* "sandbox.pyx":182
 *     uniques = []
 * 
 *     table = kh_init_pyset()             # <<<<<<<<<<<<<<
 * 
 *     data = <PyObject**> arr.data
 */
  __pyx_v_table = kh_init_pyset();
 183: 
 184:     data = <PyObject**> arr.data
  /* "sandbox.pyx":184
 *     table = kh_init_pyset()
 * 
 *     data = <PyObject**> arr.data             # <<<<<<<<<<<<<<
 * 
 *     # size hint
 */
  __pyx_v_data = ((PyObject **)((PyArrayObject *)__pyx_v_arr)->data);
 185: 
 186:     # size hint
 187:     kh_resize_pyset(table, n // 10)
  /* "sandbox.pyx":187
 * 
 *     # size hint
 *     kh_resize_pyset(table, n // 10)             # <<<<<<<<<<<<<<
 * 
 *     for i in range(n):
 */
  kh_resize_pyset(__pyx_v_table, __Pyx_div_Py_ssize_t(__pyx_v_n, 10));
 188: 
 189:     for i in range(n):
  /* "sandbox.pyx":189
 *     kh_resize_pyset(table, n // 10)
 * 
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         obj = arr[i]
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
 190:         obj = arr[i]
    /* "sandbox.pyx":190
 * 
 *     for i in range(n):
 *         obj = arr[i]             # <<<<<<<<<<<<<<
 * 
 *         k = kh_get_pyset(table, <PyObject*> obj)
 */
    __pyx_t_4 = __pyx_v_i;
    __pyx_t_5 = -1;
    if (__pyx_t_4 < 0) {
      __pyx_t_4 += __pyx_bshape_0_arr;
      if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0;
    } else if (unlikely(__pyx_t_4 >= __pyx_bshape_0_arr)) __pyx_t_5 = 0;
    if (unlikely(__pyx_t_5 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_5);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_1 = *__Pyx_BufPtrStrided1d(PyObject **, __pyx_bstruct_arr.buf, __pyx_t_4, __pyx_bstride_0_arr);
    __Pyx_INCREF((PyObject*)__pyx_t_1);
    __Pyx_DECREF(__pyx_v_obj);
    __pyx_v_obj = __pyx_t_1;
    __pyx_t_1 = 0;
 191: 
 192:         k = kh_get_pyset(table, <PyObject*> obj)
    /* "sandbox.pyx":192
 *         obj = arr[i]
 * 
 *         k = kh_get_pyset(table, <PyObject*> obj)             # <<<<<<<<<<<<<<
 *         if not kh_exist_pyset(table, k):
 *             k = kh_put_pyset(table, <PyObject*> obj, &ret)
 */
    __pyx_v_k = kh_get_pyset(__pyx_v_table, ((PyObject *)__pyx_v_obj));
 193:         if not kh_exist_pyset(table, k):
    /* "sandbox.pyx":193
 * 
 *         k = kh_get_pyset(table, <PyObject*> obj)
 *         if not kh_exist_pyset(table, k):             # <<<<<<<<<<<<<<
 *             k = kh_put_pyset(table, <PyObject*> obj, &ret)
 *             # uniques.append(obj)
 */
    __pyx_t_6 = (!kh_exist_pyset(__pyx_v_table, __pyx_v_k));
    if (__pyx_t_6) {
 194:             k = kh_put_pyset(table, <PyObject*> obj, &ret)
      /* "sandbox.pyx":194
 *         k = kh_get_pyset(table, <PyObject*> obj)
 *         if not kh_exist_pyset(table, k):
 *             k = kh_put_pyset(table, <PyObject*> obj, &ret)             # <<<<<<<<<<<<<<
 *             # uniques.append(obj)
 *             # Py_INCREF(<object> obj)
 */
      __pyx_v_k = kh_put_pyset(__pyx_v_table, ((PyObject *)__pyx_v_obj), (&__pyx_v_ret));
      goto __pyx_L7;
    }
    __pyx_L7:;
  }
 195:             # uniques.append(obj)
 196:             # Py_INCREF(<object> obj)
 197: 
 198:     kh_destroy_pyset(table)
  /* "sandbox.pyx":198
 *             # Py_INCREF(<object> obj)
 * 
 *     kh_destroy_pyset(table)             # <<<<<<<<<<<<<<
 * 
 *     return None
 */
  kh_destroy_pyset(__pyx_v_table);
 199: 
 200:     return None
  /* "sandbox.pyx":200
 *     kh_destroy_pyset(table)
 * 
 *     return None             # <<<<<<<<<<<<<<
 * 
 * def int64_unique(ndarray[int64_t] arr):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_None);
  __pyx_r = Py_None;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.obj_unique");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __pyx_L2:;
  __Pyx_DECREF(__pyx_v_obj);
  __Pyx_DECREF(__pyx_v_uniques);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 201: 
 202: def int64_unique(ndarray[int64_t] arr):
/* "sandbox.pyx":202
 *     return None
 * 
 * def int64_unique(ndarray[int64_t] arr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_int64_t *table
 */

static PyObject *__pyx_pf_7sandbox_9int64_unique(PyObject *__pyx_self, PyObject *__pyx_v_arr); /*proto*/
static PyMethodDef __pyx_mdef_7sandbox_9int64_unique = {__Pyx_NAMESTR("int64_unique"), (PyCFunction)__pyx_pf_7sandbox_9int64_unique, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pf_7sandbox_9int64_unique(PyObject *__pyx_self, PyObject *__pyx_v_arr) {
  kh_int64_t *__pyx_v_table;
  __pyx_t_5numpy_int64_t __pyx_v_obj;
  int __pyx_v_ret;
  khiter_t __pyx_v_k;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_j;
  Py_ssize_t __pyx_v_n;
  PyArrayObject *__pyx_v_uniques;
  Py_buffer __pyx_bstruct_arr;
  Py_ssize_t __pyx_bstride_0_arr = 0;
  Py_ssize_t __pyx_bshape_0_arr = 0;
  Py_buffer __pyx_bstruct_uniques;
  Py_ssize_t __pyx_bstride_0_uniques = 0;
  Py_ssize_t __pyx_bshape_0_uniques = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("int64_unique");
  __pyx_self = __pyx_self;
  __pyx_v_uniques = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  __pyx_bstruct_uniques.buf = NULL;
  __pyx_bstruct_arr.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arr), __pyx_ptype_5numpy_ndarray, 1, "arr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_arr, (PyObject*)__pyx_v_arr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_arr = __pyx_bstruct_arr.strides[0];
  __pyx_bshape_0_arr = __pyx_bstruct_arr.shape[0];

  /* "sandbox.pyx":202
 *     return None
 * 
 * def int64_unique(ndarray[int64_t] arr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         kh_int64_t *table
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7sandbox_9int64_unique, NULL, __pyx_n_s__sandbox); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__int64_unique, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 203:     cdef:
 204:         kh_int64_t *table
 205:         # PyObject *obj
 206:         int64_t obj
 207:         PyObject **data
 208:         int ret
 209:         khiter_t k
 210:         Py_ssize_t i, j, n
 211:         ndarray[int64_t] uniques
 212: 
 213:     n = len(arr)
  /* "sandbox.pyx":213
 *         ndarray[int64_t] uniques
 * 
 *     n = len(arr)             # <<<<<<<<<<<<<<
 *     uniques = np.empty(n, dtype='i8')
 * 
 */
  __pyx_t_1 = __pyx_v_arr;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n = __pyx_t_2;
 214:     uniques = np.empty(n, dtype='i8')
  /* "sandbox.pyx":214
 * 
 *     n = len(arr)
 *     uniques = np.empty(n, dtype='i8')             # <<<<<<<<<<<<<<
 * 
 *     table = kh_init_int64()
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__i8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 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 = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_uniques);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_uniques, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_uniques, (PyObject*)__pyx_v_uniques, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
    }
    __pyx_bstride_0_uniques = __pyx_bstruct_uniques.strides[0];
    __pyx_bshape_0_uniques = __pyx_bstruct_uniques.shape[0];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_6 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_v_uniques));
  __pyx_v_uniques = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 215: 
 216:     table = kh_init_int64()
  /* "sandbox.pyx":216
 *     uniques = np.empty(n, dtype='i8')
 * 
 *     table = kh_init_int64()             # <<<<<<<<<<<<<<
 *     kh_resize_int64(table, n)
 * 
 */
  __pyx_v_table = kh_init_int64();
 217:     kh_resize_int64(table, n)
  /* "sandbox.pyx":217
 * 
 *     table = kh_init_int64()
 *     kh_resize_int64(table, n)             # <<<<<<<<<<<<<<
 * 
 *     j = 0
 */
  kh_resize_int64(__pyx_v_table, __pyx_v_n);
 218: 
 219:     j = 0
  /* "sandbox.pyx":219
 *     kh_resize_int64(table, n)
 * 
 *     j = 0             # <<<<<<<<<<<<<<
 * 
 *     for i in range(n):
 */
  __pyx_v_j = 0;
 220: 
 221:     for i in range(n):
  /* "sandbox.pyx":221
 *     j = 0
 * 
 *     for i in range(n):             # <<<<<<<<<<<<<<
 *         obj = arr[i]
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_2; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;
 222:         obj = arr[i]
    /* "sandbox.pyx":222
 * 
 *     for i in range(n):
 *         obj = arr[i]             # <<<<<<<<<<<<<<
 * 
 *         k = kh_get_int64(table, obj)
 */
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_7 = -1;
    if (__pyx_t_12 < 0) {
      __pyx_t_12 += __pyx_bshape_0_arr;
      if (unlikely(__pyx_t_12 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_12 >= __pyx_bshape_0_arr)) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_v_obj = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_bstruct_arr.buf, __pyx_t_12, __pyx_bstride_0_arr));
 223: 
 224:         k = kh_get_int64(table, obj)
    /* "sandbox.pyx":224
 *         obj = arr[i]
 * 
 *         k = kh_get_int64(table, obj)             # <<<<<<<<<<<<<<
 *         if not kh_exist_int64(table, k):
 *             k = kh_put_int64(table, obj, &ret)
 */
    __pyx_v_k = kh_get_int64(__pyx_v_table, __pyx_v_obj);
 225:         if not kh_exist_int64(table, k):
    /* "sandbox.pyx":225
 * 
 *         k = kh_get_int64(table, obj)
 *         if not kh_exist_int64(table, k):             # <<<<<<<<<<<<<<
 *             k = kh_put_int64(table, obj, &ret)
 *             uniques[j] = obj
 */
    __pyx_t_13 = (!kh_exist_int64(__pyx_v_table, __pyx_v_k));
    if (__pyx_t_13) {
 226:             k = kh_put_int64(table, obj, &ret)
      /* "sandbox.pyx":226
 *         k = kh_get_int64(table, obj)
 *         if not kh_exist_int64(table, k):
 *             k = kh_put_int64(table, obj, &ret)             # <<<<<<<<<<<<<<
 *             uniques[j] = obj
 *             j += 1
 */
      __pyx_v_k = kh_put_int64(__pyx_v_table, __pyx_v_obj, (&__pyx_v_ret));
 227:             uniques[j] = obj
      /* "sandbox.pyx":227
 *         if not kh_exist_int64(table, k):
 *             k = kh_put_int64(table, obj, &ret)
 *             uniques[j] = obj             # <<<<<<<<<<<<<<
 *             j += 1
 *             # Py_INCREF(<object> obj)
 */
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_7 = -1;
      if (__pyx_t_14 < 0) {
        __pyx_t_14 += __pyx_bshape_0_uniques;
        if (unlikely(__pyx_t_14 < 0)) __pyx_t_7 = 0;
      } else if (unlikely(__pyx_t_14 >= __pyx_bshape_0_uniques)) __pyx_t_7 = 0;
      if (unlikely(__pyx_t_7 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_7);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_bstruct_uniques.buf, __pyx_t_14, __pyx_bstride_0_uniques) = __pyx_v_obj;
 228:             j += 1
      /* "sandbox.pyx":228
 *             k = kh_put_int64(table, obj, &ret)
 *             uniques[j] = obj
 *             j += 1             # <<<<<<<<<<<<<<
 *             # Py_INCREF(<object> obj)
 * 
 */
      __pyx_v_j = (__pyx_v_j + 1);
      goto __pyx_L7;
    }
    __pyx_L7:;
  }
 229:             # Py_INCREF(<object> obj)
 230: 
 231:     kh_destroy_int64(table)
  /* "sandbox.pyx":231
 *             # Py_INCREF(<object> obj)
 * 
 *     kh_destroy_int64(table)             # <<<<<<<<<<<<<<
 * 
 *     return np.sort(uniques[:j])
 */
  kh_destroy_int64(__pyx_v_table);
 232: 
 233:     return np.sort(uniques[:j])
  /* "sandbox.pyx":233
 *     kh_destroy_int64(table)
 * 
 *     return np.sort(uniques[:j])             # <<<<<<<<<<<<<<
 * 
 * from cpython cimport PyString_Check, PyString_AsString
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__sort); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PySequence_GetSlice(((PyObject *)__pyx_v_uniques), 0, __pyx_v_j); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_uniques);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.int64_unique");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_arr);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_uniques);
  __pyx_L2:;
  __Pyx_DECREF((PyObject *)__pyx_v_uniques);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 234: 
 235: from cpython cimport PyString_Check, PyString_AsString
 236: 
 237: cdef class StringHashTable:
/* "sandbox.pyx":237
 * from cpython cimport PyString_Check, PyString_AsString
 * 
 * cdef class StringHashTable:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */

struct __pyx_obj_7sandbox_StringHashTable {
  PyObject_HEAD
  struct __pyx_vtabstruct_7sandbox_StringHashTable *__pyx_vtab;
  kh_str_t *table;
};

/* "sandbox.pyx":237
 * from cpython cimport PyString_Check, PyString_AsString
 * 
 * cdef class StringHashTable:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */

struct __pyx_vtabstruct_7sandbox_StringHashTable {
  int (*check_type)(struct __pyx_obj_7sandbox_StringHashTable *, PyObject *);
  PyObject *(*get_item)(struct __pyx_obj_7sandbox_StringHashTable *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*set_item)(struct __pyx_obj_7sandbox_StringHashTable *, PyObject *, Py_ssize_t, int __pyx_skip_dispatch);
};
 238: 
 239:     cdef:
 240:         kh_str_t *table
 241: 
 242:     def __init__(self, size_hint=None):
/* "sandbox.pyx":242
 *         kh_str_t *table
 * 
 *     def __init__(self, size_hint=None):             # <<<<<<<<<<<<<<
 *         if size_hint is not None:
 *             kh_resize_str(self.table, size_hint)
 */

static int __pyx_pf_7sandbox_15StringHashTable___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pf_7sandbox_15StringHashTable___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_size_hint = 0;
  int __pyx_r;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size_hint,0};
  __Pyx_RefNannySetupContext("__init__");
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_None);
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size_hint);
        if (value) { values[0] = value; kw_args--; }
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_size_hint = values[0];
  } else {
    __pyx_v_size_hint = ((PyObject *)Py_None);
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: __pyx_v_size_hint = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("sandbox.StringHashTable.__init__");
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
 243:         if size_hint is not None:
  /* "sandbox.pyx":243
 * 
 *     def __init__(self, size_hint=None):
 *         if size_hint is not None:             # <<<<<<<<<<<<<<
 *             kh_resize_str(self.table, size_hint)
 * 
 */
  __pyx_t_1 = (__pyx_v_size_hint != Py_None);
  if (__pyx_t_1) {
 244:             kh_resize_str(self.table, size_hint)
    /* "sandbox.pyx":244
 *     def __init__(self, size_hint=None):
 *         if size_hint is not None:
 *             kh_resize_str(self.table, size_hint)             # <<<<<<<<<<<<<<
 * 
 *     def __cinit__(self):
 */
    __pyx_t_2 = ((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table;
    __pyx_t_3 = __Pyx_PyInt_from_py_npy_uint32(__pyx_v_size_hint); if (unlikely((__pyx_t_3 == (khint_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    kh_resize_str(__pyx_t_2, __pyx_t_3);
    goto __pyx_L6;
  }
  __pyx_L6:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("sandbox.StringHashTable.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 245: 
 246:     def __cinit__(self):
/* "sandbox.pyx":246
 *             kh_resize_str(self.table, size_hint)
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.table = kh_init_str()
 * 
 */

static int __pyx_pf_7sandbox_15StringHashTable_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pf_7sandbox_15StringHashTable_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("__cinit__");
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 247:         self.table = kh_init_str()
  /* "sandbox.pyx":247
 * 
 *     def __cinit__(self):
 *         self.table = kh_init_str()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  ((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table = kh_init_str();

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 248: 
 249:     def __dealloc__(self):
/* "sandbox.pyx":249
 *         self.table = kh_init_str()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         kh_destroy_str(self.table)
 * 
 */

static void __pyx_pf_7sandbox_15StringHashTable_2__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pf_7sandbox_15StringHashTable_2__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannySetupContext("__dealloc__");
 250:         kh_destroy_str(self.table)
  /* "sandbox.pyx":250
 * 
 *     def __dealloc__(self):
 *         kh_destroy_str(self.table)             # <<<<<<<<<<<<<<
 * 
 *     cdef inline int check_type(self, object val):
 */
  kh_destroy_str(((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table);

  __Pyx_RefNannyFinishContext();
}
 251: 
 252:     cdef inline int check_type(self, object val):
/* "sandbox.pyx":252
 *         kh_destroy_str(self.table)
 * 
 *     cdef inline int check_type(self, object val):             # <<<<<<<<<<<<<<
 *         return PyString_Check(val)
 * 
 */

static CYTHON_INLINE int __pyx_f_7sandbox_15StringHashTable_check_type(struct __pyx_obj_7sandbox_StringHashTable *__pyx_v_self, PyObject *__pyx_v_val) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("check_type");
 253:         return PyString_Check(val)
  /* "sandbox.pyx":253
 * 
 *     cdef inline int check_type(self, object val):
 *         return PyString_Check(val)             # <<<<<<<<<<<<<<
 * 
 *     cpdef get_item(self, object val):
 */
  __pyx_t_1 = __pyx_v_val;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_r = PyString_Check(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 254: 
 255:     cpdef get_item(self, object val):
/* "sandbox.pyx":255
 *         return PyString_Check(val)
 * 
 *     cpdef get_item(self, object val):             # <<<<<<<<<<<<<<
 *         cdef khiter_t k
 * 
 */

static PyObject *__pyx_pf_7sandbox_15StringHashTable_3get_item(PyObject *__pyx_v_self, PyObject *__pyx_v_val); /*proto*/
static  PyObject *__pyx_f_7sandbox_15StringHashTable_get_item(struct __pyx_obj_7sandbox_StringHashTable *__pyx_v_self, PyObject *__pyx_v_val, int __pyx_skip_dispatch) {
  khiter_t __pyx_v_k;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("get_item");
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_item); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __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_7sandbox_15StringHashTable_3get_item)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_2));
      __Pyx_INCREF(__pyx_v_val);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_val);
      __Pyx_GIVEREF(__pyx_v_val);
      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "sandbox.pyx":255
 *         return PyString_Check(val)
 * 
 *     cpdef get_item(self, object val):             # <<<<<<<<<<<<<<
 *         cdef khiter_t k
 * 
 */

static PyObject *__pyx_pf_7sandbox_15StringHashTable_3get_item(PyObject *__pyx_v_self, PyObject *__pyx_v_val); /*proto*/
static PyObject *__pyx_pf_7sandbox_15StringHashTable_3get_item(PyObject *__pyx_v_self, PyObject *__pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("get_item");
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_v_val;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = ((struct __pyx_vtabstruct_7sandbox_StringHashTable *)((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->__pyx_vtab)->get_item(((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self), __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("sandbox.StringHashTable.get_item");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 256:         cdef khiter_t k
 257: 
 258:         k = kh_get_str(self.table, PyString_AsString(val))
  /* "sandbox.pyx":258
 *         cdef khiter_t k
 * 
 *         k = kh_get_str(self.table, PyString_AsString(val))             # <<<<<<<<<<<<<<
 *         if kh_exist_str(self.table, k):
 *             return self.table.vals[k]
 */
  __pyx_t_4 = __pyx_v_self->table;
  __pyx_t_1 = __pyx_v_val;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = PyString_AsString(__pyx_t_1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_k = kh_get_str(__pyx_t_4, __pyx_t_5);
 259:         if kh_exist_str(self.table, k):
  /* "sandbox.pyx":259
 * 
 *         k = kh_get_str(self.table, PyString_AsString(val))
 *         if kh_exist_str(self.table, k):             # <<<<<<<<<<<<<<
 *             return self.table.vals[k]
 *         else:
 */
  __pyx_t_6 = kh_exist_str(__pyx_v_self->table, __pyx_v_k);
  if (__pyx_t_6) {
 260:             return self.table.vals[k]
    /* "sandbox.pyx":260
 *         k = kh_get_str(self.table, PyString_AsString(val))
 *         if kh_exist_str(self.table, k):
 *             return self.table.vals[k]             # <<<<<<<<<<<<<<
 *         else:
 *             raise KeyError(val)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_self->table->vals[__pyx_v_k])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {
 261:         else:
 262:             raise KeyError(val)
    /* "sandbox.pyx":262
 *             return self.table.vals[k]
 *         else:
 *             raise KeyError(val)             # <<<<<<<<<<<<<<
 * 
 *     cpdef set_item(self, object key, Py_ssize_t val):
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_INCREF(__pyx_v_val);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_val);
    __Pyx_GIVEREF(__pyx_v_val);
    __pyx_t_3 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("sandbox.StringHashTable.get_item");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 263: 
 264:     cpdef set_item(self, object key, Py_ssize_t val):
/* "sandbox.pyx":264
 *             raise KeyError(val)
 * 
 *     cpdef set_item(self, object key, Py_ssize_t val):             # <<<<<<<<<<<<<<
 *         cdef:
 *             khiter_t k
 */

static PyObject *__pyx_pf_7sandbox_15StringHashTable_4set_item(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static  PyObject *__pyx_f_7sandbox_15StringHashTable_set_item(struct __pyx_obj_7sandbox_StringHashTable *__pyx_v_self, PyObject *__pyx_v_key, Py_ssize_t __pyx_v_val, int __pyx_skip_dispatch) {
  khiter_t __pyx_v_k;
  int __pyx_v_ret;
  char *__pyx_v_buf;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("set_item");
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__set_item); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __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_7sandbox_15StringHashTable_4set_item)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __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 = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
      __Pyx_INCREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "sandbox.pyx":264
 *             raise KeyError(val)
 * 
 *     cpdef set_item(self, object key, Py_ssize_t val):             # <<<<<<<<<<<<<<
 *         cdef:
 *             khiter_t k
 */

static PyObject *__pyx_pf_7sandbox_15StringHashTable_4set_item(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pf_7sandbox_15StringHashTable_4set_item(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  Py_ssize_t __pyx_v_val;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__key,&__pyx_n_s__val,0};
  __Pyx_RefNannySetupContext("set_item");
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[2] = {0,0};
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key);
      if (likely(values[0])) kw_args--;
      else goto __pyx_L5_argtuple_error;
      case  1:
      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val);
      if (likely(values[1])) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("set_item", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "set_item") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_key = values[0];
    __pyx_v_val = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_val == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    __pyx_v_key = PyTuple_GET_ITEM(__pyx_args, 0);
    __pyx_v_val = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_val == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_item", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("sandbox.StringHashTable.set_item");
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_v_key;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = ((struct __pyx_vtabstruct_7sandbox_StringHashTable *)((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->__pyx_vtab)->set_item(((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self), __pyx_t_1, __pyx_v_val, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("sandbox.StringHashTable.set_item");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 265:         cdef:
 266:             khiter_t k
 267:             int ret
 268:             char* buf
 269: 
 270:         buf = PyString_AsString(key)
  /* "sandbox.pyx":270
 *             char* buf
 * 
 *         buf = PyString_AsString(key)             # <<<<<<<<<<<<<<
 * 
 *         k = kh_put_str(self.table, buf, &ret)
 */
  __pyx_t_1 = __pyx_v_key;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_4 = PyString_AsString(__pyx_t_1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_buf = __pyx_t_4;
 271: 
 272:         k = kh_put_str(self.table, buf, &ret)
  /* "sandbox.pyx":272
 *         buf = PyString_AsString(key)
 * 
 *         k = kh_put_str(self.table, buf, &ret)             # <<<<<<<<<<<<<<
 *         self.table.keys[k] = key
 *         if kh_exist_str(self.table, k):
 */
  __pyx_v_k = kh_put_str(__pyx_v_self->table, __pyx_v_buf, (&__pyx_v_ret));
 273:         self.table.keys[k] = key
  /* "sandbox.pyx":273
 * 
 *         k = kh_put_str(self.table, buf, &ret)
 *         self.table.keys[k] = key             # <<<<<<<<<<<<<<
 *         if kh_exist_str(self.table, k):
 *             self.table.vals[k] = val
 */
  __pyx_t_5 = PyBytes_AsString(__pyx_v_key); if (unlikely((__pyx_t_5 == (kh_cstr_t)NULL) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  (__pyx_v_self->table->keys[__pyx_v_k]) = __pyx_t_5;
 274:         if kh_exist_str(self.table, k):
  /* "sandbox.pyx":274
 *         k = kh_put_str(self.table, buf, &ret)
 *         self.table.keys[k] = key
 *         if kh_exist_str(self.table, k):             # <<<<<<<<<<<<<<
 *             self.table.vals[k] = val
 *         else:
 */
  __pyx_t_6 = kh_exist_str(__pyx_v_self->table, __pyx_v_k);
  if (__pyx_t_6) {
 275:             self.table.vals[k] = val
    /* "sandbox.pyx":275
 *         self.table.keys[k] = key
 *         if kh_exist_str(self.table, k):
 *             self.table.vals[k] = val             # <<<<<<<<<<<<<<
 *         else:
 *             raise KeyError(key)
 */
    (__pyx_v_self->table->vals[__pyx_v_k]) = __pyx_v_val;
    goto __pyx_L3;
  }
  /*else*/ {
 276:         else:
 277:             raise KeyError(key)
    /* "sandbox.pyx":277
 *             self.table.vals[k] = val
 *         else:
 *             raise KeyError(key)             # <<<<<<<<<<<<<<
 * 
 *     def labelize(self, ndarray[object] values):
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_INCREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    __pyx_t_2 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("sandbox.StringHashTable.set_item");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 278: 
 279:     def labelize(self, ndarray[object] values):
/* "sandbox.pyx":279
 *             raise KeyError(key)
 * 
 *     def labelize(self, ndarray[object] values):             # <<<<<<<<<<<<<<
 *         cdef:
 *             Py_ssize_t i, n = len(values)
 */

static PyObject *__pyx_pf_7sandbox_15StringHashTable_5labelize(PyObject *__pyx_v_self, PyObject *__pyx_v_values); /*proto*/
static PyObject *__pyx_pf_7sandbox_15StringHashTable_5labelize(PyObject *__pyx_v_self, PyObject *__pyx_v_values) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyArrayObject *__pyx_v_labels = 0;
  PyArrayObject *__pyx_v_counts = 0;
  PyObject *__pyx_v_reverse = 0;
  Py_ssize_t __pyx_v_idx;
  Py_ssize_t __pyx_v_count;
  int __pyx_v_ret;
  PyObject *__pyx_v_val;
  char *__pyx_v_buf;
  khiter_t __pyx_v_k;
  Py_buffer __pyx_bstruct_labels;
  Py_ssize_t __pyx_bstride_0_labels = 0;
  Py_ssize_t __pyx_bshape_0_labels = 0;
  Py_buffer __pyx_bstruct_values;
  Py_ssize_t __pyx_bstride_0_values = 0;
  Py_ssize_t __pyx_bshape_0_values = 0;
  Py_buffer __pyx_bstruct_counts;
  Py_ssize_t __pyx_bstride_0_counts = 0;
  Py_ssize_t __pyx_bshape_0_counts = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("labelize");
  __pyx_v_val = Py_None; __Pyx_INCREF(Py_None);
  __pyx_bstruct_labels.buf = NULL;
  __pyx_bstruct_counts.buf = NULL;
  __pyx_bstruct_values.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_values), __pyx_ptype_5numpy_ndarray, 1, "values", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_values, (PyObject*)__pyx_v_values, &__Pyx_TypeInfo_object, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_values = __pyx_bstruct_values.strides[0];
  __pyx_bshape_0_values = __pyx_bstruct_values.shape[0];
 280:         cdef:
 281:             Py_ssize_t i, n = len(values)
  /* "sandbox.pyx":281
 *     def labelize(self, ndarray[object] values):
 *         cdef:
 *             Py_ssize_t i, n = len(values)             # <<<<<<<<<<<<<<
 *             ndarray[int32_t] labels = np.empty(n, dtype=np.int32)
 *             ndarray[int32_t] counts = np.empty(n, dtype=np.int32)
 */
  __pyx_t_1 = __pyx_v_values;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n = __pyx_t_2;
 282:             ndarray[int32_t] labels = np.empty(n, dtype=np.int32)
  /* "sandbox.pyx":282
 *         cdef:
 *             Py_ssize_t i, n = len(values)
 *             ndarray[int32_t] labels = np.empty(n, dtype=np.int32)             # <<<<<<<<<<<<<<
 *             ndarray[int32_t] counts = np.empty(n, dtype=np.int32)
 *             dict reverse = {}
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__int32); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_labels, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_labels = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_labels.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_labels = __pyx_bstruct_labels.strides[0];
      __pyx_bshape_0_labels = __pyx_bstruct_labels.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_labels = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 283:             ndarray[int32_t] counts = np.empty(n, dtype=np.int32)
  /* "sandbox.pyx":283
 *             Py_ssize_t i, n = len(values)
 *             ndarray[int32_t] labels = np.empty(n, dtype=np.int32)
 *             ndarray[int32_t] counts = np.empty(n, dtype=np.int32)             # <<<<<<<<<<<<<<
 *             dict reverse = {}
 *             Py_ssize_t idx, count = 0
 */
  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__int32); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 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 = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_counts, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_counts = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_counts.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_counts = __pyx_bstruct_counts.strides[0];
      __pyx_bshape_0_counts = __pyx_bstruct_counts.shape[0];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_counts = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 284:             dict reverse = {}
  /* "sandbox.pyx":284
 *             ndarray[int32_t] labels = np.empty(n, dtype=np.int32)
 *             ndarray[int32_t] counts = np.empty(n, dtype=np.int32)
 *             dict reverse = {}             # <<<<<<<<<<<<<<
 *             Py_ssize_t idx, count = 0
 *             int ret
 */
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
  __pyx_v_reverse = __pyx_t_5;
  __pyx_t_5 = 0;
 285:             Py_ssize_t idx, count = 0
  /* "sandbox.pyx":285
 *             ndarray[int32_t] counts = np.empty(n, dtype=np.int32)
 *             dict reverse = {}
 *             Py_ssize_t idx, count = 0             # <<<<<<<<<<<<<<
 *             int ret
 *             object val
 */
  __pyx_v_count = 0;
 286:             int ret
 287:             object val
 288:             char *buf
 289:             khiter_t k
 290: 
 291:         for i in range(n):
  /* "sandbox.pyx":291
 *             khiter_t k
 * 
 *         for i in range(n):             # <<<<<<<<<<<<<<
 *             val = values[i]
 * 
 */
  __pyx_t_2 = __pyx_v_n;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_2; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
 292:             val = values[i]
    /* "sandbox.pyx":292
 * 
 *         for i in range(n):
 *             val = values[i]             # <<<<<<<<<<<<<<
 * 
 *             # is NaN
 */
    __pyx_t_10 = __pyx_v_i;
    __pyx_t_11 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_bshape_0_values;
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_bshape_0_values)) __pyx_t_11 = 0;
    if (unlikely(__pyx_t_11 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_11);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_5 = *__Pyx_BufPtrStrided1d(PyObject **, __pyx_bstruct_values.buf, __pyx_t_10, __pyx_bstride_0_values);
    __Pyx_INCREF((PyObject*)__pyx_t_5);
    __Pyx_DECREF(__pyx_v_val);
    __pyx_v_val = __pyx_t_5;
    __pyx_t_5 = 0;
 293: 
 294:             # is NaN
 295:             if val != val:
    /* "sandbox.pyx":295
 * 
 *             # is NaN
 *             if val != val:             # <<<<<<<<<<<<<<
 *                 labels[i] = -1
 *                 continue
 */
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_val, __pyx_v_val, Py_NE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_12) {
 296:                 labels[i] = -1
      /* "sandbox.pyx":296
 *             # is NaN
 *             if val != val:
 *                 labels[i] = -1             # <<<<<<<<<<<<<<
 *                 continue
 * 
 */
      __pyx_t_13 = __pyx_v_i;
      __pyx_t_11 = -1;
      if (__pyx_t_13 < 0) {
        __pyx_t_13 += __pyx_bshape_0_labels;
        if (unlikely(__pyx_t_13 < 0)) __pyx_t_11 = 0;
      } else if (unlikely(__pyx_t_13 >= __pyx_bshape_0_labels)) __pyx_t_11 = 0;
      if (unlikely(__pyx_t_11 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_11);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_bstruct_labels.buf, __pyx_t_13, __pyx_bstride_0_labels) = -1;
 297:                 continue
      /* "sandbox.pyx":297
 *             if val != val:
 *                 labels[i] = -1
 *                 continue             # <<<<<<<<<<<<<<
 * 
 *             # should do this in one shot?
 */
      goto __pyx_L5_continue;
      goto __pyx_L7;
    }
    __pyx_L7:;
 298: 
 299:             # should do this in one shot?
 300:             # if not self.check_type(val):
 301:             #     raise TypeError('foo')
 302: 
 303:             buf = PyString_AsString(val)
    /* "sandbox.pyx":303
 *             #     raise TypeError('foo')
 * 
 *             buf = PyString_AsString(val)             # <<<<<<<<<<<<<<
 * 
 *             k = kh_get_str(self.table, buf)
 */
    __pyx_t_14 = PyString_AsString(__pyx_v_val); if (unlikely(__pyx_t_14 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_buf = __pyx_t_14;
 304: 
 305:             k = kh_get_str(self.table, buf)
    /* "sandbox.pyx":305
 *             buf = PyString_AsString(val)
 * 
 *             k = kh_get_str(self.table, buf)             # <<<<<<<<<<<<<<
 *             if k != self.table.n_buckets:
 *                 idx = self.table.vals[k]
 */
    __pyx_v_k = kh_get_str(((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table, __pyx_v_buf);
 306:             if k != self.table.n_buckets:
    /* "sandbox.pyx":306
 * 
 *             k = kh_get_str(self.table, buf)
 *             if k != self.table.n_buckets:             # <<<<<<<<<<<<<<
 *                 idx = self.table.vals[k]
 *                 labels[i] = idx
 */
    __pyx_t_12 = (__pyx_v_k != ((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table->n_buckets);
    if (__pyx_t_12) {
 307:                 idx = self.table.vals[k]
      /* "sandbox.pyx":307
 *             k = kh_get_str(self.table, buf)
 *             if k != self.table.n_buckets:
 *                 idx = self.table.vals[k]             # <<<<<<<<<<<<<<
 *                 labels[i] = idx
 *                 # print idx
 */
      __pyx_v_idx = (((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table->vals[__pyx_v_k]);
 308:                 labels[i] = idx
      /* "sandbox.pyx":308
 *             if k != self.table.n_buckets:
 *                 idx = self.table.vals[k]
 *                 labels[i] = idx             # <<<<<<<<<<<<<<
 *                 # print idx
 *                 counts[idx] = counts[idx] + 1
 */
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_11 = -1;
      if (__pyx_t_15 < 0) {
        __pyx_t_15 += __pyx_bshape_0_labels;
        if (unlikely(__pyx_t_15 < 0)) __pyx_t_11 = 0;
      } else if (unlikely(__pyx_t_15 >= __pyx_bshape_0_labels)) __pyx_t_11 = 0;
      if (unlikely(__pyx_t_11 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_11);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_bstruct_labels.buf, __pyx_t_15, __pyx_bstride_0_labels) = __pyx_v_idx;
 309:                 # print idx
 310:                 counts[idx] = counts[idx] + 1
      /* "sandbox.pyx":310
 *                 labels[i] = idx
 *                 # print idx
 *                 counts[idx] = counts[idx] + 1             # <<<<<<<<<<<<<<
 *             else:
 *                 k = kh_put_str(self.table, buf, &ret)
 */
      __pyx_t_16 = __pyx_v_idx;
      __pyx_t_11 = -1;
      if (__pyx_t_16 < 0) {
        __pyx_t_16 += __pyx_bshape_0_counts;
        if (unlikely(__pyx_t_16 < 0)) __pyx_t_11 = 0;
      } else if (unlikely(__pyx_t_16 >= __pyx_bshape_0_counts)) __pyx_t_11 = 0;
      if (unlikely(__pyx_t_11 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_11);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_17 = __pyx_v_idx;
      __pyx_t_11 = -1;
      if (__pyx_t_17 < 0) {
        __pyx_t_17 += __pyx_bshape_0_counts;
        if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 0;
      } else if (unlikely(__pyx_t_17 >= __pyx_bshape_0_counts)) __pyx_t_11 = 0;
      if (unlikely(__pyx_t_11 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_11);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_bstruct_counts.buf, __pyx_t_17, __pyx_bstride_0_counts) = ((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_bstruct_counts.buf, __pyx_t_16, __pyx_bstride_0_counts)) + 1);
      goto __pyx_L8;
    }
    /*else*/ {
 311:             else:
 312:                 k = kh_put_str(self.table, buf, &ret)
      /* "sandbox.pyx":312
 *                 counts[idx] = counts[idx] + 1
 *             else:
 *                 k = kh_put_str(self.table, buf, &ret)             # <<<<<<<<<<<<<<
 *                 # print 'putting %s, %s' % (val, count)
 *                 if not ret:
 */
      __pyx_v_k = kh_put_str(((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table, __pyx_v_buf, (&__pyx_v_ret));
 313:                 # print 'putting %s, %s' % (val, count)
 314:                 if not ret:
      /* "sandbox.pyx":314
 *                 k = kh_put_str(self.table, buf, &ret)
 *                 # print 'putting %s, %s' % (val, count)
 *                 if not ret:             # <<<<<<<<<<<<<<
 *                     kh_del_str(self.table, k)
 * 
 */
      __pyx_t_12 = (!__pyx_v_ret);
      if (__pyx_t_12) {
 315:                     kh_del_str(self.table, k)
        /* "sandbox.pyx":315
 *                 # print 'putting %s, %s' % (val, count)
 *                 if not ret:
 *                     kh_del_str(self.table, k)             # <<<<<<<<<<<<<<
 * 
 *                 self.table.vals[k] = count
 */
        kh_del_str(((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table, __pyx_v_k);
        goto __pyx_L9;
      }
      __pyx_L9:;
 316: 
 317:                 self.table.vals[k] = count
      /* "sandbox.pyx":317
 *                     kh_del_str(self.table, k)
 * 
 *                 self.table.vals[k] = count             # <<<<<<<<<<<<<<
 *                 reverse[count] = val
 *                 labels[i] = count
 */
      (((struct __pyx_obj_7sandbox_StringHashTable *)__pyx_v_self)->table->vals[__pyx_v_k]) = __pyx_v_count;
 318:                 reverse[count] = val
      /* "sandbox.pyx":318
 * 
 *                 self.table.vals[k] = count
 *                 reverse[count] = val             # <<<<<<<<<<<<<<
 *                 labels[i] = count
 *                 counts[count] = 1
 */
      if (__Pyx_SetItemInt(((PyObject *)__pyx_v_reverse), __pyx_v_count, __pyx_v_val, sizeof(Py_ssize_t), PyInt_FromSsize_t) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 319:                 labels[i] = count
      /* "sandbox.pyx":319
 *                 self.table.vals[k] = count
 *                 reverse[count] = val
 *                 labels[i] = count             # <<<<<<<<<<<<<<
 *                 counts[count] = 1
 *                 count += 1
 */
      __pyx_t_18 = __pyx_v_i;
      __pyx_t_11 = -1;
      if (__pyx_t_18 < 0) {
        __pyx_t_18 += __pyx_bshape_0_labels;
        if (unlikely(__pyx_t_18 < 0)) __pyx_t_11 = 0;
      } else if (unlikely(__pyx_t_18 >= __pyx_bshape_0_labels)) __pyx_t_11 = 0;
      if (unlikely(__pyx_t_11 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_11);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_bstruct_labels.buf, __pyx_t_18, __pyx_bstride_0_labels) = __pyx_v_count;
 320:                 counts[count] = 1
      /* "sandbox.pyx":320
 *                 reverse[count] = val
 *                 labels[i] = count
 *                 counts[count] = 1             # <<<<<<<<<<<<<<
 *                 count += 1
 * 
 */
      __pyx_t_19 = __pyx_v_count;
      __pyx_t_11 = -1;
      if (__pyx_t_19 < 0) {
        __pyx_t_19 += __pyx_bshape_0_counts;
        if (unlikely(__pyx_t_19 < 0)) __pyx_t_11 = 0;
      } else if (unlikely(__pyx_t_19 >= __pyx_bshape_0_counts)) __pyx_t_11 = 0;
      if (unlikely(__pyx_t_11 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_11);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_bstruct_counts.buf, __pyx_t_19, __pyx_bstride_0_counts) = 1;
 321:                 count += 1
      /* "sandbox.pyx":321
 *                 labels[i] = count
 *                 counts[count] = 1
 *                 count += 1             # <<<<<<<<<<<<<<
 * 
 *         return reverse, labels, counts[:count].copy()
 */
      __pyx_v_count = (__pyx_v_count + 1);
    }
    __pyx_L8:;
    __pyx_L5_continue:;
  }
 322: 
 323:         return reverse, labels, counts[:count].copy()
  /* "sandbox.pyx":323
 *                 count += 1
 * 
 *         return reverse, labels, counts[:count].copy()             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PySequence_GetSlice(((PyObject *)__pyx_v_counts), 0, __pyx_v_count); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__copy); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
  __Pyx_INCREF(((PyObject *)__pyx_v_reverse));
  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_reverse));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_reverse));
  __Pyx_INCREF(((PyObject *)__pyx_v_labels));
  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_labels));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_labels));
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_r = ((PyObject *)__pyx_t_6);
  __pyx_t_6 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_labels);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_values);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_counts);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("sandbox.StringHashTable.labelize");
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_labels);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_values);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_counts);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_labels);
  __Pyx_XDECREF((PyObject *)__pyx_v_counts);
  __Pyx_XDECREF(__pyx_v_reverse);
  __Pyx_DECREF(__pyx_v_val);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}