Generated by Cython 3.3.0

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: _core.c

+001: # cython: boundscheck=False, wraparound=False, cdivision=True, language_level=3
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_4) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 002: # cython: nonecheck=False, initializedcheck=False
 003: """
 004: Cython extensions for mfe.realized hot paths.
 005: 
 006: Functions
 007: ---------
 008: _autocovariance_sum     RK kernel inner loop
 009: _bpv_sum                BPV skip-k inner loop
 010: _medvar_triplets        MedRV median-of-three per triplet
 011: _hy_sweep               Hayashi-Yoshida O((N1+N2)log(N1+N2)) estimator
 012: _refresh_time_indices   Refresh-time index computation
 013: """
 014: 
+015: import numpy as np
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_np, __pyx_t_4) < (0)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 016: cimport numpy as np
 017: from numpy cimport ndarray, float64_t, int64_t
 018: from libc.math cimport fabs, sqrt, log
 019: 
 020: 
 021: # ────────────────────────────────────────────────────────────────────────────
 022: # 1. Autocovariance (realized kernel inner loop)
 023: # ────────────────────────────────────────────────────────────────────────────
 024: 
+025: def _autocovariance_sum(double[::1] returns, int H):
/* Python wrapper */
static PyObject *__pyx_pw_3mfe_8realized_5_core_1_autocovariance_sum(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_3mfe_8realized_5_core__autocovariance_sum, "gamma[h] = sum_{t=h}^{T-1} r[t]*r[t-h], h=0..H");
static PyMethodDef __pyx_mdef_3mfe_8realized_5_core_1_autocovariance_sum = {"_autocovariance_sum", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_3mfe_8realized_5_core_1_autocovariance_sum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_3mfe_8realized_5_core__autocovariance_sum};
static PyObject *__pyx_pw_3mfe_8realized_5_core_1_autocovariance_sum(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  __Pyx_memviewslice __pyx_v_returns = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_H;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_autocovariance_sum (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_returns,&__pyx_mstate_global->__pyx_n_u_H,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 25, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 25, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 25, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_autocovariance_sum", 0) < (0)) __PYX_ERR(0, 25, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_autocovariance_sum", 1, 2, 2, i); __PYX_ERR(0, 25, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 25, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 25, __pyx_L3_error)
    }
    __pyx_v_returns = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_returns.memview)) __PYX_ERR(0, 25, __pyx_L3_error)
    __pyx_v_H = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_H == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_autocovariance_sum", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 25, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_returns, 1);
  __Pyx_AddTraceback("mfe.realized._core._autocovariance_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_3mfe_8realized_5_core__autocovariance_sum(__pyx_self, __pyx_v_returns, __pyx_v_H);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_returns, 1);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_3mfe_8realized_5_core__autocovariance_sum(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_returns, int __pyx_v_H) {
  int __pyx_v_T;
  int __pyx_v_h;
  int __pyx_v_t;
  double __pyx_v_acc;
  PyObject *__pyx_v_gamma_arr = NULL;
  __Pyx_memviewslice __pyx_v_g = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("mfe.realized._core._autocovariance_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;




  __Pyx_XDECREF(__pyx_v_gamma_arr);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_g, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_3mfe_8realized_5_core_1_autocovariance_sum, 0, __pyx_mstate_global->__pyx_n_u_autocovariance_sum, NULL, __pyx_mstate_global->__pyx_n_u_mfe_realized__core, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_autocovariance_sum, __pyx_t_4) < (0)) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 026:     """gamma[h] = sum_{t=h}^{T-1} r[t]*r[t-h], h=0..H"""
+027:     cdef int T = returns.shape[0], h, t
  __pyx_v_T = (__pyx_v_returns.shape[0]);
 028:     cdef double acc
 029: 
+030:     gamma_arr = np.zeros(H + 1, dtype=np.float64)
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_long((__pyx_v_H + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_6};
    #if CYTHON_VECTORCALL
    __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 30, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_gamma_arr = __pyx_t_1;
  __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
    __pyx_mstate_global->__pyx_tuple[2] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);
+031:     cdef double[::1] g = gamma_arr
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_v_gamma_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 31, __pyx_L1_error)
  __pyx_v_g = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+032:     cdef double[::1] r = returns
  __PYX_INC_MEMVIEW(&__pyx_v_returns, 1);
  __pyx_v_r = __pyx_v_returns;
 033: 
+034:     acc = 0.0
  __pyx_v_acc = 0.0;
+035:     for t in range(T):
  __pyx_t_9 = __pyx_v_T;
  __pyx_t_10 = __pyx_t_9;

  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_t = __pyx_t_11;
+036:         acc += r[t] * r[t]
    __pyx_t_12 = __pyx_v_t;
    __pyx_t_13 = __pyx_v_t;
    __pyx_v_acc = (__pyx_v_acc + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r.data) + __pyx_t_12)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r.data) + __pyx_t_13)) )))));
  }

+037:     g[0] = acc
  __pyx_t_13 = 0;
  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_g.data) + __pyx_t_13)) )) = __pyx_v_acc;
 038: 
+039:     for h in range(1, H + 1):
  __pyx_t_14 = (__pyx_v_H + 1);
  __pyx_t_15 = __pyx_t_14;

  for (__pyx_t_9 = 1; __pyx_t_9 < __pyx_t_15; __pyx_t_9+=1) {
    __pyx_v_h = __pyx_t_9;
+040:         acc = 0.0
    __pyx_v_acc = 0.0;
+041:         for t in range(h, T):
    __pyx_t_10 = __pyx_v_T;
    __pyx_t_11 = __pyx_t_10;

    for (__pyx_t_16 = __pyx_v_h; __pyx_t_16 < __pyx_t_11; __pyx_t_16+=1) {
      __pyx_v_t = __pyx_t_16;
+042:             acc += r[t] * r[t - h]
      __pyx_t_13 = __pyx_v_t;
      __pyx_t_12 = (__pyx_v_t - __pyx_v_h);
      __pyx_v_acc = (__pyx_v_acc + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r.data) + __pyx_t_13)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r.data) + __pyx_t_12)) )))));
    }

+043:         g[h] = acc
    __pyx_t_12 = __pyx_v_h;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_g.data) + __pyx_t_12)) )) = __pyx_v_acc;
  }

 044: 
+045:     return gamma_arr
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_gamma_arr);
      __pyx_r = __pyx_v_gamma_arr;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 046: 
 047: 
 048: # ────────────────────────────────────────────────────────────────────────────
 049: # 2. BPV sum
 050: # ────────────────────────────────────────────────────────────────────────────
 051: 
+052: def _bpv_sum(double[::1] abs_returns, int skip):
/* Python wrapper */
static PyObject *__pyx_pw_3mfe_8realized_5_core_3_bpv_sum(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_3mfe_8realized_5_core_2_bpv_sum, "sum_{t=skip+1}^{T-1} |r[t]| * |r[t-skip-1]|");
static PyMethodDef __pyx_mdef_3mfe_8realized_5_core_3_bpv_sum = {"_bpv_sum", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_3mfe_8realized_5_core_3_bpv_sum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_3mfe_8realized_5_core_2_bpv_sum};
static PyObject *__pyx_pw_3mfe_8realized_5_core_3_bpv_sum(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  __Pyx_memviewslice __pyx_v_abs_returns = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_skip;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_bpv_sum (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_abs_returns,&__pyx_mstate_global->__pyx_n_u_skip,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 52, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 52, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 52, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_bpv_sum", 0) < (0)) __PYX_ERR(0, 52, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bpv_sum", 1, 2, 2, i); __PYX_ERR(0, 52, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 52, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 52, __pyx_L3_error)
    }
    __pyx_v_abs_returns = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_abs_returns.memview)) __PYX_ERR(0, 52, __pyx_L3_error)
    __pyx_v_skip = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_skip == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_bpv_sum", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 52, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_abs_returns, 1);
  __Pyx_AddTraceback("mfe.realized._core._bpv_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_3mfe_8realized_5_core_2_bpv_sum(__pyx_self, __pyx_v_abs_returns, __pyx_v_skip);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_abs_returns, 1);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_3mfe_8realized_5_core_2_bpv_sum(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_abs_returns, int __pyx_v_skip) {
  int __pyx_v_T;
  int __pyx_v_t;
  int __pyx_v_gap;
  double __pyx_v_acc;
  __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mfe.realized._core._bpv_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;




  __PYX_XCLEAR_MEMVIEW(&__pyx_v_a, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_3mfe_8realized_5_core_3_bpv_sum, 0, __pyx_mstate_global->__pyx_n_u_bpv_sum, NULL, __pyx_mstate_global->__pyx_n_u_mfe_realized__core, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bpv_sum, __pyx_t_4) < (0)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 053:     """sum_{t=skip+1}^{T-1} |r[t]| * |r[t-skip-1]|"""
+054:     cdef int T = abs_returns.shape[0], t, gap = skip + 1
  __pyx_v_T = (__pyx_v_abs_returns.shape[0]);
  __pyx_v_gap = (__pyx_v_skip + 1);
+055:     cdef double acc = 0.0
  __pyx_v_acc = 0.0;
+056:     cdef double[::1] a = abs_returns
  __PYX_INC_MEMVIEW(&__pyx_v_abs_returns, 1);
  __pyx_v_a = __pyx_v_abs_returns;
+057:     for t in range(gap, T):
  __pyx_t_1 = __pyx_v_T;
  __pyx_t_2 = __pyx_t_1;

  for (__pyx_t_3 = __pyx_v_gap; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_t = __pyx_t_3;
+058:         acc += a[t] * a[t - gap]
    __pyx_t_4 = __pyx_v_t;
    __pyx_t_5 = (__pyx_v_t - __pyx_v_gap);
    __pyx_v_acc = (__pyx_v_acc + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a.data) + __pyx_t_4)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a.data) + __pyx_t_5)) )))));
  }

+059:     return acc
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_acc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_6;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_6 = 0;
  goto __pyx_L0;
 060: 
 061: 
 062: # ────────────────────────────────────────────────────────────────────────────
 063: # 3. MedRV triplet sum
 064: # ────────────────────────────────────────────────────────────────────────────
 065: 
+066: cdef inline double _median3(double a, double b, double c) nogil:
static CYTHON_INLINE double __pyx_f_3mfe_8realized_5_core__median3(double __pyx_v_a, double __pyx_v_b, double __pyx_v_c) {
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;



  return __pyx_r;
}
 067:     """Branchless median of three values."""
+068:     if a > b:
  __pyx_t_1 = (__pyx_v_a > __pyx_v_b);

  if (__pyx_t_1) {
/* … */
  }
+069:         a, b = b, a
    __pyx_t_2 = __pyx_v_b;

    __pyx_t_3 = __pyx_v_a;

    __pyx_v_a = __pyx_t_2;
    __pyx_v_b = __pyx_t_3;
+070:     if b > c:
  __pyx_t_1 = (__pyx_v_b > __pyx_v_c);

  if (__pyx_t_1) {
/* … */
  }
+071:         b, c = c, b
    __pyx_t_3 = __pyx_v_c;

    __pyx_t_2 = __pyx_v_b;

    __pyx_v_b = __pyx_t_3;
    __pyx_v_c = __pyx_t_2;
+072:     if a > b:
  __pyx_t_1 = (__pyx_v_a > __pyx_v_b);

  if (__pyx_t_1) {
/* … */
  }
+073:         b = a
    __pyx_v_b = __pyx_v_a;
+074:     return b
  {

    __pyx_r = __pyx_v_b;
  }
  goto __pyx_L0;
 075: 
+076: def _medvar_triplets(double[::1] abs_returns):
/* Python wrapper */
static PyObject *__pyx_pw_3mfe_8realized_5_core_5_medvar_triplets(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_3mfe_8realized_5_core_4_medvar_triplets, "sum_{t=1}^{T-2} median(|r[t-1]|, |r[t]|, |r[t+1]|)^2");
static PyMethodDef __pyx_mdef_3mfe_8realized_5_core_5_medvar_triplets = {"_medvar_triplets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_3mfe_8realized_5_core_5_medvar_triplets, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_3mfe_8realized_5_core_4_medvar_triplets};
static PyObject *__pyx_pw_3mfe_8realized_5_core_5_medvar_triplets(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  __Pyx_memviewslice __pyx_v_abs_returns = { 0, 0, { 0 }, { 0 }, { 0 } };
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_medvar_triplets (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_abs_returns,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 76, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_medvar_triplets", 0) < (0)) __PYX_ERR(0, 76, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_medvar_triplets", 1, 1, 1, i); __PYX_ERR(0, 76, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 76, __pyx_L3_error)
    }
    __pyx_v_abs_returns = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_abs_returns.memview)) __PYX_ERR(0, 76, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_medvar_triplets", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 76, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_abs_returns, 1);
  __Pyx_AddTraceback("mfe.realized._core._medvar_triplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_3mfe_8realized_5_core_4_medvar_triplets(__pyx_self, __pyx_v_abs_returns);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_abs_returns, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_3mfe_8realized_5_core_4_medvar_triplets(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_abs_returns) {
  int __pyx_v_T;
  int __pyx_v_t;
  double __pyx_v_med;
  double __pyx_v_acc;
  __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mfe.realized._core._medvar_triplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;




  __PYX_XCLEAR_MEMVIEW(&__pyx_v_a, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_3mfe_8realized_5_core_5_medvar_triplets, 0, __pyx_mstate_global->__pyx_n_u_medvar_triplets, NULL, __pyx_mstate_global->__pyx_n_u_mfe_realized__core, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_medvar_triplets, __pyx_t_4) < (0)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 077:     """sum_{t=1}^{T-2} median(|r[t-1]|, |r[t]|, |r[t+1]|)^2"""
+078:     cdef int T = abs_returns.shape[0], t
  __pyx_v_T = (__pyx_v_abs_returns.shape[0]);
+079:     cdef double med, acc = 0.0
  __pyx_v_acc = 0.0;
+080:     cdef double[::1] a = abs_returns
  __PYX_INC_MEMVIEW(&__pyx_v_abs_returns, 1);
  __pyx_v_a = __pyx_v_abs_returns;
+081:     for t in range(1, T - 1):
  __pyx_t_1 = (__pyx_v_T - 1);
  __pyx_t_2 = __pyx_t_1;

  for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_t = __pyx_t_3;
+082:         med = _median3(a[t - 1], a[t], a[t + 1])
    __pyx_t_4 = (__pyx_v_t - 1);
    __pyx_t_5 = __pyx_v_t;
    __pyx_t_6 = (__pyx_v_t + 1);
    __pyx_t_7 = __pyx_f_3mfe_8realized_5_core__median3((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a.data) + __pyx_t_4)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a.data) + __pyx_t_5)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a.data) + __pyx_t_6)) )))); if (unlikely(__pyx_t_7 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L1_error)
    __pyx_v_med = __pyx_t_7;
+083:         acc += med * med
    __pyx_v_acc = (__pyx_v_acc + (__pyx_v_med * __pyx_v_med));
  }

+084:     return acc
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_acc); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_8;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_8 = 0;
  goto __pyx_L0;
 085: 
 086: 
 087: # ────────────────────────────────────────────────────────────────────────────
 088: # 4. Hayashi-Yoshida sweep-line  O((N1+N2)*k) where k = avg open r1 count
 089: # ────────────────────────────────────────────────────────────────────────────
 090: 
+091: def _hy_sweep(
/* Python wrapper */
static PyObject *__pyx_pw_3mfe_8realized_5_core_7_hy_sweep(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_3mfe_8realized_5_core_6_hy_sweep, "\n    Hayashi-Yoshida estimator via event sweep with swap-remove open-list.\n\n    Correctness: when r2[t] opens, we add r2[t] to ALL currently-open r1\n    accumulators. This correctly handles r2 intervals that both open and\n    close while r1[s] is active.\n\n    Complexity: O((N1+N2)*log(N1+N2)) for sort + O((N1+N2)*k_open) for sweep,\n    where k_open = max simultaneous open r1 intervals.\n    For typical HFT data (intervals << trading day) k_open ~ O(1).\n\n    The open_list uses swap-remove for O(1) deletion.\n    ");
static PyMethodDef __pyx_mdef_3mfe_8realized_5_core_7_hy_sweep = {"_hy_sweep", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_3mfe_8realized_5_core_7_hy_sweep, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_3mfe_8realized_5_core_6_hy_sweep};
static PyObject *__pyx_pw_3mfe_8realized_5_core_7_hy_sweep(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  __Pyx_memviewslice __pyx_v_r1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_a1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_b1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_r2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_a2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_b2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_hy_sweep (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_r1,&__pyx_mstate_global->__pyx_n_u_a1,&__pyx_mstate_global->__pyx_n_u_b1,&__pyx_mstate_global->__pyx_n_u_r2,&__pyx_mstate_global->__pyx_n_u_a2,&__pyx_mstate_global->__pyx_n_u_b2,0};
  PyObject* values[6] = {0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 91, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 91, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 91, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 91, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 91, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 91, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 91, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_hy_sweep", 0) < (0)) __PYX_ERR(0, 91, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 6; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_hy_sweep", 1, 6, 6, i); __PYX_ERR(0, 91, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 6)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 91, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 91, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 91, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 91, __pyx_L3_error)
      values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 91, __pyx_L3_error)
      values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 91, __pyx_L3_error)
    }
    __pyx_v_r1 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r1.memview)) __PYX_ERR(0, 92, __pyx_L3_error)
    __pyx_v_a1 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a1.memview)) __PYX_ERR(0, 92, __pyx_L3_error)
    __pyx_v_b1 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b1.memview)) __PYX_ERR(0, 92, __pyx_L3_error)
    __pyx_v_r2 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r2.memview)) __PYX_ERR(0, 93, __pyx_L3_error)
    __pyx_v_a2 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a2.memview)) __PYX_ERR(0, 93, __pyx_L3_error)
    __pyx_v_b2 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b2.memview)) __PYX_ERR(0, 93, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_hy_sweep", 1, 6, 6, __pyx_nargs); __PYX_ERR(0, 91, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_a1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_b1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_a2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_b2, 1);
  __Pyx_AddTraceback("mfe.realized._core._hy_sweep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_3mfe_8realized_5_core_6_hy_sweep(__pyx_self, __pyx_v_r1, __pyx_v_a1, __pyx_v_b1, __pyx_v_r2, __pyx_v_a2, __pyx_v_b2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_a1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_b1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_a2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_b2, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_3mfe_8realized_5_core_6_hy_sweep(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_r1, __Pyx_memviewslice __pyx_v_a1, __Pyx_memviewslice __pyx_v_b1, __Pyx_memviewslice __pyx_v_r2, __Pyx_memviewslice __pyx_v_a2, __Pyx_memviewslice __pyx_v_b2) {
  int __pyx_v_N1;
  int __pyx_v_N2;
  int __pyx_v_n_events;
  int __pyx_v_i;
  int __pyx_v_k;
  int __pyx_v_ev;
  int __pyx_v_idx;
  int __pyx_v_etype;
  int __pyx_v_n_open;
  int __pyx_v_j;
  PyObject *__pyx_v_ev_time_arr = NULL;
  PyObject *__pyx_v_ev_type_arr = NULL;
  PyObject *__pyx_v_ev_idx_arr = NULL;
  __Pyx_memviewslice __pyx_v_ev_time = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ev_type = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ev_idx = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_order = NULL;
  __Pyx_memviewslice __pyx_v_ord_v = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_r1_accum_arr = NULL;
  __Pyx_memviewslice __pyx_v_r1_accum = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_open_list_arr = NULL;
  __Pyx_memviewslice __pyx_v_open_list = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_open_pos_arr = NULL;
  __Pyx_memviewslice __pyx_v_open_pos = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_is_open_arr = NULL;
  __Pyx_memviewslice __pyx_v_is_open = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_total;
  double __pyx_v_rv2;
  double __pyx_v_active_r2_sum;
  int __pyx_v_last_pos;
  int __pyx_v_last_idx;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 1);
  __Pyx_AddTraceback("mfe.realized._core._hy_sweep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;










  __Pyx_XDECREF(__pyx_v_ev_time_arr);
  __Pyx_XDECREF(__pyx_v_ev_type_arr);
  __Pyx_XDECREF(__pyx_v_ev_idx_arr);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ev_time, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ev_type, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ev_idx, 1);
  __Pyx_XDECREF(__pyx_v_order);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ord_v, 1);
  __Pyx_XDECREF(__pyx_v_r1_accum_arr);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r1_accum, 1);
  __Pyx_XDECREF(__pyx_v_open_list_arr);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_open_list, 1);
  __Pyx_XDECREF(__pyx_v_open_pos_arr);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_open_pos, 1);
  __Pyx_XDECREF(__pyx_v_is_open_arr);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_is_open, 1);





  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_3mfe_8realized_5_core_7_hy_sweep, 0, __pyx_mstate_global->__pyx_n_u_hy_sweep, NULL, __pyx_mstate_global->__pyx_n_u_mfe_realized__core, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_hy_sweep, __pyx_t_4) < (0)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 092:     double[::1] r1, double[::1] a1, double[::1] b1,
 093:     double[::1] r2, double[::1] a2, double[::1] b2,
 094: ):
 095:     """
 096:     Hayashi-Yoshida estimator via event sweep with swap-remove open-list.
 097: 
 098:     Correctness: when r2[t] opens, we add r2[t] to ALL currently-open r1
 099:     accumulators. This correctly handles r2 intervals that both open and
 100:     close while r1[s] is active.
 101: 
 102:     Complexity: O((N1+N2)*log(N1+N2)) for sort + O((N1+N2)*k_open) for sweep,
 103:     where k_open = max simultaneous open r1 intervals.
 104:     For typical HFT data (intervals << trading day) k_open ~ O(1).
 105: 
 106:     The open_list uses swap-remove for O(1) deletion.
 107:     """
+108:     cdef int N1 = r1.shape[0]
  __pyx_v_N1 = (__pyx_v_r1.shape[0]);
+109:     cdef int N2 = r2.shape[0]
  __pyx_v_N2 = (__pyx_v_r2.shape[0]);
+110:     cdef int n_events = 2 * (N1 + N2)
  __pyx_v_n_events = (2 * (__pyx_v_N1 + __pyx_v_N2));
+111:     cdef int i, k = 0, ev, idx, etype, n_open = 0, j
  __pyx_v_k = 0;
  __pyx_v_n_open = 0;
 112: 
+113:     ev_time_arr = np.empty(n_events, dtype=np.float64)
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_n_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_6};
    #if CYTHON_VECTORCALL
    __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_ev_time_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+114:     ev_type_arr = np.empty(n_events, dtype=np.int32)
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n_events); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_2};
    #if CYTHON_VECTORCALL
    __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_ev_type_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+115:     ev_idx_arr  = np.empty(n_events, dtype=np.int32)
  __pyx_t_6 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_n_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_6);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
    #if CYTHON_VECTORCALL
    __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 115, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_ev_idx_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+116:     cdef double[::1] ev_time = ev_time_arr
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_v_ev_time_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 116, __pyx_L1_error)
  __pyx_v_ev_time = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+117:     cdef int[::1]    ev_type = ev_type_arr
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_ev_type_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 117, __pyx_L1_error)
  __pyx_v_ev_type = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+118:     cdef int[::1]    ev_idx  = ev_idx_arr
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_ev_idx_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 118, __pyx_L1_error)
  __pyx_v_ev_idx = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 119: 
+120:     for i in range(N1):
  __pyx_t_10 = __pyx_v_N1;
  __pyx_t_11 = __pyx_t_10;

  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
+121:         ev_time[k] = a1[i]; ev_type[k] = 1; ev_idx[k] = i; k += 1
    __pyx_t_13 = __pyx_v_i;
    __pyx_t_14 = __pyx_v_k;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ev_time.data) + __pyx_t_14)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a1.data) + __pyx_t_13)) )));
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_type.data) + __pyx_t_13)) )) = 1;
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_idx.data) + __pyx_t_13)) )) = __pyx_v_i;
    __pyx_v_k = (__pyx_v_k + 1);
+122:         ev_time[k] = b1[i]; ev_type[k] = 2; ev_idx[k] = i; k += 1
    __pyx_t_13 = __pyx_v_i;
    __pyx_t_14 = __pyx_v_k;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ev_time.data) + __pyx_t_14)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_b1.data) + __pyx_t_13)) )));
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_type.data) + __pyx_t_13)) )) = 2;
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_idx.data) + __pyx_t_13)) )) = __pyx_v_i;
    __pyx_v_k = (__pyx_v_k + 1);
  }

+123:     for i in range(N2):
  __pyx_t_10 = __pyx_v_N2;
  __pyx_t_11 = __pyx_t_10;

  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
+124:         ev_time[k] = a2[i]; ev_type[k] = 0; ev_idx[k] = i; k += 1
    __pyx_t_13 = __pyx_v_i;
    __pyx_t_14 = __pyx_v_k;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ev_time.data) + __pyx_t_14)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_a2.data) + __pyx_t_13)) )));
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_type.data) + __pyx_t_13)) )) = 0;
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_idx.data) + __pyx_t_13)) )) = __pyx_v_i;
    __pyx_v_k = (__pyx_v_k + 1);
+125:         ev_time[k] = b2[i]; ev_type[k] = 3; ev_idx[k] = i; k += 1
    __pyx_t_13 = __pyx_v_i;
    __pyx_t_14 = __pyx_v_k;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ev_time.data) + __pyx_t_14)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_b2.data) + __pyx_t_13)) )));
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_type.data) + __pyx_t_13)) )) = 3;
    __pyx_t_13 = __pyx_v_k;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_idx.data) + __pyx_t_13)) )) = __pyx_v_i;
    __pyx_v_k = (__pyx_v_k + 1);
  }

 126: 
 127:     # Sort: type tie-break ensures r2-open(0) < r1-open(1) < r1-close(2) < r2-close(3)
 128:     # lexsort: primary key = ev_time, secondary = ev_type (0 < 1 < 2 < 3)
 129:     # np.lexsort keys are applied right-to-left, so pass (type, time)
+130:     order = np.lexsort((ev_type_arr, ev_time_arr)).astype(np.int64)
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_lexsort); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_ev_type_arr);
  __Pyx_GIVEREF(__pyx_v_ev_type_arr);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ev_type_arr) != (0)) __PYX_ERR(0, 130, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_ev_time_arr);
  __Pyx_GIVEREF(__pyx_v_ev_time_arr);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_ev_time_arr) != (0)) __PYX_ERR(0, 130, __pyx_L1_error);
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_order = __pyx_t_1;
  __pyx_t_1 = 0;
+131:     cdef int64_t[::1] ord_v = order
  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_int64_t(__pyx_v_order, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 131, __pyx_L1_error)
  __pyx_v_ord_v = __pyx_t_15;
  __pyx_t_15.memview = NULL;
  __pyx_t_15.data = NULL;
 132: 
 133:     # Per-r1 accumulator: sum of r2[t] values overlapping r1[s]
+134:     r1_accum_arr = np.zeros(N1, dtype=np.float64)
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_N1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_5);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
    #if CYTHON_VECTORCALL
    __pyx_t_6 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 134, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_6);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 134, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_r1_accum_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+135:     cdef double[::1] r1_accum = r1_accum_arr
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_v_r1_accum_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 135, __pyx_L1_error)
  __pyx_v_r1_accum = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 136: 
 137:     # Compact open-list for O(1) swap-remove
+138:     open_list_arr = np.empty(N1, dtype=np.int32)
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_N1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_5};
    #if CYTHON_VECTORCALL
    __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_open_list_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+139:     cdef int[::1] open_list = open_list_arr
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_open_list_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 139, __pyx_L1_error)
  __pyx_v_open_list = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+140:     open_pos_arr = np.zeros(N1, dtype=np.int32)
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_N1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_2};
    #if CYTHON_VECTORCALL
    __pyx_t_6 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_6);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_open_pos_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+141:     cdef int[::1] open_pos = open_pos_arr
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_open_pos_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 141, __pyx_L1_error)
  __pyx_v_open_pos = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+142:     is_open_arr = np.zeros(N1, dtype=np.int32)
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_N1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_5);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_4};
    #if CYTHON_VECTORCALL
    __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_is_open_arr = __pyx_t_1;
  __pyx_t_1 = 0;
+143:     cdef int[::1] is_open = is_open_arr
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_is_open_arr, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 143, __pyx_L1_error)
  __pyx_v_is_open = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 144: 
+145:     cdef double total = 0.0, rv2, active_r2_sum = 0.0
  __pyx_v_total = 0.0;
  __pyx_v_active_r2_sum = 0.0;
 146:     cdef int last_pos, last_idx
 147: 
+148:     for ev in range(n_events):
  __pyx_t_10 = __pyx_v_n_events;
  __pyx_t_11 = __pyx_t_10;

  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_ev = __pyx_t_12;
+149:         idx   = ev_idx[ord_v[ev]]
    __pyx_t_13 = __pyx_v_ev;
    __pyx_t_16 = (*((__pyx_t_5numpy_int64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_int64_t *) __pyx_v_ord_v.data) + __pyx_t_13)) )));
    __pyx_v_idx = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_idx.data) + __pyx_t_16)) )));
+150:         etype = ev_type[ord_v[ev]]
    __pyx_t_13 = __pyx_v_ev;
    __pyx_t_16 = (*((__pyx_t_5numpy_int64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_int64_t *) __pyx_v_ord_v.data) + __pyx_t_13)) )));
    __pyx_v_etype = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ev_type.data) + __pyx_t_16)) )));
 151: 
+152:         if etype == 0:
    switch (__pyx_v_etype) {
      case 0:
/* … */
      break;
      case 1:
 153:             # r2[idx] opens: (1) track active sum; (2) add to all open r1
+154:             rv2 = r2[idx]
      __pyx_t_13 = __pyx_v_idx;
      __pyx_v_rv2 = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r2.data) + __pyx_t_13)) )));
+155:             active_r2_sum += rv2
      __pyx_v_active_r2_sum = (__pyx_v_active_r2_sum + __pyx_v_rv2);
+156:             for j in range(n_open):
      __pyx_t_17 = __pyx_v_n_open;
      __pyx_t_18 = __pyx_t_17;

      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
        __pyx_v_j = __pyx_t_19;
+157:                 r1_accum[open_list[j]] += rv2
        __pyx_t_13 = __pyx_v_j;
        __pyx_t_14 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_list.data) + __pyx_t_13)) )));
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r1_accum.data) + __pyx_t_14)) )) += __pyx_v_rv2;
      }

 158: 
+159:         elif etype == 1:
      break;
      case 2:
 160:             # r1[idx] opens: seed accumulator with r2 already active, then add to open list
+161:             r1_accum[idx] = active_r2_sum
      __pyx_t_13 = __pyx_v_idx;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r1_accum.data) + __pyx_t_13)) )) = __pyx_v_active_r2_sum;
+162:             open_pos[idx] = n_open
      __pyx_t_13 = __pyx_v_idx;
      *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_pos.data) + __pyx_t_13)) )) = __pyx_v_n_open;
+163:             open_list[n_open] = idx
      __pyx_t_13 = __pyx_v_n_open;
      *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_list.data) + __pyx_t_13)) )) = __pyx_v_idx;
+164:             is_open[idx] = 1
      __pyx_t_13 = __pyx_v_idx;
      *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_is_open.data) + __pyx_t_13)) )) = 1;
+165:             n_open += 1
      __pyx_v_n_open = (__pyx_v_n_open + 1);
 166: 
+167:         elif etype == 2:
      break;
      default:
 168:             # r1[idx] closes: finalize, swap-remove from open list
+169:             if is_open[idx]:
      __pyx_t_13 = __pyx_v_idx;
      __pyx_t_20 = ((*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_is_open.data) + __pyx_t_13)) ))) != 0);

      if (__pyx_t_20) {
/* … */
      }
+170:                 total += r1[idx] * r1_accum[idx]
        __pyx_t_13 = __pyx_v_idx;
        __pyx_t_14 = __pyx_v_idx;
        __pyx_v_total = (__pyx_v_total + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r1.data) + __pyx_t_13)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r1_accum.data) + __pyx_t_14)) )))));
+171:                 last_pos = n_open - 1
        __pyx_v_last_pos = (__pyx_v_n_open - 1);
+172:                 last_idx = open_list[last_pos]
        __pyx_t_14 = __pyx_v_last_pos;
        __pyx_v_last_idx = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_list.data) + __pyx_t_14)) )));
+173:                 open_list[open_pos[idx]] = last_idx
        __pyx_t_14 = __pyx_v_idx;
        __pyx_t_13 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_pos.data) + __pyx_t_14)) )));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_list.data) + __pyx_t_13)) )) = __pyx_v_last_idx;
+174:                 open_pos[last_idx] = open_pos[idx]
        __pyx_t_14 = __pyx_v_idx;
        __pyx_t_13 = __pyx_v_last_idx;
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_pos.data) + __pyx_t_13)) )) = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_open_pos.data) + __pyx_t_14)) )));
+175:                 n_open -= 1
        __pyx_v_n_open = (__pyx_v_n_open - 1);
+176:                 is_open[idx] = 0
        __pyx_t_14 = __pyx_v_idx;
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_is_open.data) + __pyx_t_14)) )) = 0;
 177: 
 178:         else:
 179:             # r2[idx] closes: update active sum only (r1 accumulators already got rv2 on open)
+180:             active_r2_sum -= r2[idx]
      __pyx_t_14 = __pyx_v_idx;
      __pyx_v_active_r2_sum = (__pyx_v_active_r2_sum - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r2.data) + __pyx_t_14)) ))));
      break;
    }
  }

 181: 
+182:     return total
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_total); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 183: 
 184: 
 185: # ────────────────────────────────────────────────────────────────────────────
 186: # 5. Refresh-time index computation
 187: # ────────────────────────────────────────────────────────────────────────────
 188: 
+189: def _refresh_time_indices(list times_list):
/* Python wrapper */
static PyObject *__pyx_pw_3mfe_8realized_5_core_9_refresh_time_indices(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_3mfe_8realized_5_core_8_refresh_time_indices, "\n    Compute refresh-time indices for K asynchronous series.\n    Returns (sync_indices (M,K), sync_times (M,)).\n    ");
static PyMethodDef __pyx_mdef_3mfe_8realized_5_core_9_refresh_time_indices = {"_refresh_time_indices", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_3mfe_8realized_5_core_9_refresh_time_indices, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_3mfe_8realized_5_core_8_refresh_time_indices};
static PyObject *__pyx_pw_3mfe_8realized_5_core_9_refresh_time_indices(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_times_list = 0;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_refresh_time_indices (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_times_list,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 189, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 189, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_refresh_time_indices", 0) < (0)) __PYX_ERR(0, 189, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_refresh_time_indices", 1, 1, 1, i); __PYX_ERR(0, 189, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 189, __pyx_L3_error)
    }
    __pyx_v_times_list = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_refresh_time_indices", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 189, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("mfe.realized._core._refresh_time_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_times_list), (&PyList_Type), 1, "times_list", 1))) __PYX_ERR(0, 189, __pyx_L1_error)
  __pyx_r = __pyx_pf_3mfe_8realized_5_core_8_refresh_time_indices(__pyx_self, __pyx_v_times_list);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_3mfe_8realized_5_core_8_refresh_time_indices(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_times_list) {
  struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *__pyx_cur_scope;
  int __pyx_v_K;
  double __pyx_v_t_start;
  PyObject *__pyx_v_sync_times_list = NULL;
  PyObject *__pyx_v_sync_idx_list = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_t_refresh = NULL;
  PyObject *__pyx_7genexpr__pyx_v_t = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_t = NULL;
  PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_2generator = 0;
  int __pyx_8genexpr3__pyx_v_k;
  PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_5generator1 = 0;
  int __pyx_8genexpr5__pyx_v_k;
  PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_8generator2 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *)__pyx_tp_new_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices(__pyx_mstate_global->__pyx_ptype_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 189, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_3mfe_8realized_5_core_9_refresh_time_indices, 0, __pyx_mstate_global->__pyx_n_u_refresh_time_indices, NULL, __pyx_mstate_global->__pyx_n_u_mfe_realized__core, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_refresh_time_indices, __pyx_t_4) < (0)) __PYX_ERR(0, 189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices {
  PyObject_HEAD
  PyObject *__pyx_v_cur_idx;
  PyObject *__pyx_v_lengths;
  PyObject *__pyx_v_new_idx;
  PyObject *__pyx_v_times;
};

 190:     """
 191:     Compute refresh-time indices for K asynchronous series.
 192:     Returns (sync_indices (M,K), sync_times (M,)).
 193:     """
+194:     cdef int K = len(times_list)
  if (unlikely(__pyx_v_times_list == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
    __PYX_ERR(0, 194, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_times_list); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 194, __pyx_L1_error)
  __pyx_v_K = __pyx_t_1;
+195:     times = [np.asarray(t, dtype=np.float64) for t in times_list]
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 195, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_v_times_list == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
      __PYX_ERR(0, 195, __pyx_L5_error)
    }
    __pyx_t_3 = __pyx_v_times_list; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 195, __pyx_L5_error)
        #endif
        if (__pyx_t_1 >= __pyx_temp) break;
      }
      __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_1, __Pyx_ReferenceSharing_OwnStrongReference);
      ++__pyx_t_1;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_t, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 195, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_7genexpr__pyx_v_t, __pyx_t_8};
        #if CYTHON_VECTORCALL
        __pyx_t_6 = __pyx_mstate_global->__pyx_tuple[2];
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L5_error)
        __Pyx_INCREF(__pyx_t_6);
        #else
        {
          PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
          __pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        #endif
        __pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_GIVEREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_2, __pyx_t_4))) __PYX_ERR(0, 195, __pyx_L5_error)
      __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_times = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+196:     lengths = [len(t) for t in times]
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_times; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 196, __pyx_L12_error)
        #endif
        if (__pyx_t_1 >= __pyx_temp) break;
      }
      __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_1, __Pyx_ReferenceSharing_OwnStrongReference);
      ++__pyx_t_1;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_t, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_10 = PyObject_Length(__pyx_8genexpr1__pyx_v_t); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 196, __pyx_L12_error)
      __pyx_t_4 = PyLong_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_4);

      __Pyx_GIVEREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_2, __pyx_t_4))) __PYX_ERR(0, 196, __pyx_L12_error)
      __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
    goto __pyx_L16_exit_scope;
    __pyx_L12_error:;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
    goto __pyx_L1_error;
    __pyx_L16_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_lengths = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 197: 
+198:     cdef double t_start = max(float(t[0]) for t in times)
static PyObject *__pyx_pf_3mfe_8realized_5_core_21_refresh_time_indices_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_1_genexpr *)__pyx_tp_new_3mfe_8realized_5_core___pyx_scope_struct_1_genexpr(__pyx_mstate_global->__pyx_ptype_3mfe_8realized_5_core___pyx_scope_struct_1_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_1_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 198, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_2generator, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_refresh_time_indices_locals_gen, __pyx_mstate_global->__pyx_n_u_mfe_realized__core); if (unlikely(!gen)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mfe.realized._core._refresh_time_indices.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(0, 198, __pyx_L1_error)
  }
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 198, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 198, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_t, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyNumber_Float(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__Pyx_PyFloat_FromNumber(&__pyx_t_4, NULL, 0) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;

    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 198, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  __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);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_t_3 = NULL;
  __pyx_t_4 = __pyx_pf_3mfe_8realized_5_core_21_refresh_time_indices_genexpr(NULL, __pyx_cur_scope->__pyx_v_times); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_max, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_11 = __Pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_t_start = __pyx_t_11;
/* … */
struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_1_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_t;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
};

 199: 
+200:     cur_idx = np.array([
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+201:         max(0, int(np.searchsorted(times[k], t_start, side='right')) - 1)
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_searchsorted); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_15);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[4] = {__pyx_t_8, __Pyx_PyList_GET_ITEM(__pyx_cur_scope->__pyx_v_times, __pyx_8genexpr3__pyx_v_k), __pyx_t_5, __pyx_mstate_global->__pyx_n_u_right};
        #if CYTHON_VECTORCALL
        __pyx_t_16 = __pyx_mstate_global->__pyx_tuple[3];
        if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 201, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_16);
        #else
        {
          PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_side};
          __pyx_t_16 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 201, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
        }
        #endif
        __pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_16);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 201, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_15 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyLong_SubtractObjC(__pyx_t_15, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;

      __pyx_t_17 = 0;
      __pyx_t_16 = __Pyx_PyLong_From_long(__pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __pyx_t_18 = __Pyx_PyObject_CompareBoolGt_int_int(__pyx_t_6, __pyx_t_16, Py_GT); if (unlikely((__pyx_t_18 < 0))) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      if (__pyx_t_18) {
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_15 = __pyx_t_6;
      } else {
        __pyx_t_16 = __Pyx_PyLong_From_long(__pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 201, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        if (__Pyx_PyInt_FromNumber(&__pyx_t_16, NULL, 0) < (0)) __PYX_ERR(0, 201, __pyx_L1_error)
        __pyx_t_15 = __pyx_t_16;
        __pyx_t_16 = 0;
      }

      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, __pyx_t_15))) __PYX_ERR(0, 200, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    }

  } /* exit inner scope */
+202:         for k in range(K)
    __pyx_t_12 = __pyx_v_K;
    __pyx_t_13 = __pyx_t_12;

    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
      __pyx_8genexpr3__pyx_v_k = __pyx_t_14;
+203:     ], dtype=np.int64)
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_6};
    #if CYTHON_VECTORCALL
    __pyx_t_15 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 200, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_15);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 200, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
    }
    #endif
    __pyx_t_2 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_cur_idx = __pyx_t_2;
  __pyx_t_2 = 0;
 204: 
+205:     sync_times_list = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_sync_times_list = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+206:     sync_idx_list   = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_sync_idx_list = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 207: 
+208:     for _ in range(min(lengths) * 2):
  __pyx_t_7 = NULL;
  __pyx_t_6 = NULL;
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_lengths};
    __pyx_t_15 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_min, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
  }
  __pyx_t_6 = __Pyx_PyLong_MultiplyObjC(__pyx_t_15, __pyx_mstate_global->__pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_19 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    {
      __pyx_t_2 = __pyx_t_19(__pyx_t_6);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 208, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  goto __pyx_L24_for_end;
  __pyx_L20_break:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  goto __pyx_L24_for_end;
  __pyx_L24_for_end:;
+209:         t_refresh = max(float(times[k][cur_idx[k]]) for k in range(K))
static PyObject *__pyx_pf_3mfe_8realized_5_core_21_refresh_time_indices_3genexpr(PyObject *__pyx_self, int __pyx_genexpr_arg_0) {
  struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_2_genexpr *)__pyx_tp_new_3mfe_8realized_5_core___pyx_scope_struct_2_genexpr(__pyx_mstate_global->__pyx_ptype_3mfe_8realized_5_core___pyx_scope_struct_2_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_2_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 209, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *) __pyx_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;


  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_5generator1, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_refresh_time_indices_locals_gen, __pyx_mstate_global->__pyx_n_u_mfe_realized__core); if (unlikely(!gen)) __PYX_ERR(0, 209, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mfe.realized._core._refresh_time_indices.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(0, 209, __pyx_L1_error)
  }

  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0;
  __pyx_t_2 = __pyx_t_1;

  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_cur_scope->__pyx_v_k = __pyx_t_3;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_times)) { __Pyx_RaiseClosureNameError("times"); __PYX_ERR(0, 209, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_times == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
      __PYX_ERR(0, 209, __pyx_L1_error)
    }
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_cur_idx)) { __Pyx_RaiseClosureNameError("cur_idx"); __PYX_ERR(0, 209, __pyx_L1_error) }
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_cur_idx, __pyx_cur_scope->__pyx_v_k, int, 1, __Pyx_PyLong_From_int, 0, 0, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetItem(__Pyx_PyList_GET_ITEM(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_times, __pyx_cur_scope->__pyx_v_k), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyNumber_Float(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__Pyx_PyFloat_FromNumber(&__pyx_t_4, NULL, 0) < (0)) __PYX_ERR(0, 209, __pyx_L1_error)
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;

    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;

    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;

    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 209, __pyx_L1_error)
  }

  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
    __pyx_t_7 = NULL;
    __pyx_t_15 = __pyx_pf_3mfe_8realized_5_core_21_refresh_time_indices_3genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_K); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_15};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_max, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_t_refresh, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_2_genexpr {
  PyObject_HEAD
  struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *__pyx_outer_scope;
  int __pyx_genexpr_arg_0;
  int __pyx_v_k;
  int __pyx_t_0;
  int __pyx_t_1;
  int __pyx_t_2;
};

+210:         sync_times_list.append(t_refresh)
    __pyx_t_20 = __Pyx_PyList_Append(__pyx_v_sync_times_list, __pyx_v_t_refresh); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 210, __pyx_L1_error)

+211:         sync_idx_list.append(cur_idx.copy())
    __pyx_t_15 = __pyx_cur_scope->__pyx_v_cur_idx;
    __Pyx_INCREF(__pyx_t_15);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_20 = __Pyx_PyList_Append(__pyx_v_sync_idx_list, __pyx_t_2); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 211, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

 212: 
+213:         new_idx = np.array([
    __pyx_t_15 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 213, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    { /* enter inner scope */
      __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 213, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+214:             int(np.searchsorted(times[k], t_refresh, side='left'))
        __pyx_t_16 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 214, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_searchsorted); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 214, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_9 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_8);
          assert(__pyx_t_16);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_16);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
          __pyx_t_9 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[4] = {__pyx_t_16, __Pyx_PyList_GET_ITEM(__pyx_cur_scope->__pyx_v_times, __pyx_8genexpr5__pyx_v_k), __pyx_v_t_refresh, __pyx_mstate_global->__pyx_n_u_left};
          #if CYTHON_VECTORCALL
          __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[3];
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 214, __pyx_L1_error)
          __Pyx_INCREF(__pyx_t_5);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_side};
            __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 214, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
          }
          #endif
          __pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 214, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 214, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GIVEREF(__pyx_t_8);
        if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_7, __pyx_t_8))) __PYX_ERR(0, 213, __pyx_L1_error)
        __pyx_t_8 = 0;
      }

    } /* exit inner scope */
+215:             for k in range(K)
      __pyx_t_12 = __pyx_v_K;
      __pyx_t_13 = __pyx_t_12;

      for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
        __pyx_8genexpr5__pyx_v_k = __pyx_t_14;
+216:         ], dtype=np.int64)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_15);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_7, __pyx_t_4};
      #if CYTHON_VECTORCALL
      __pyx_t_8 = __pyx_mstate_global->__pyx_tuple[2];
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 213, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_8);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
        __pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 213, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      #endif
      __pyx_t_2 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_new_idx);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_new_idx, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
 217: 
+218:         if any(new_idx[k] >= lengths[k] for k in range(K)):
static PyObject *__pyx_pf_3mfe_8realized_5_core_21_refresh_time_indices_6genexpr(PyObject *__pyx_self, int __pyx_genexpr_arg_0) {
  struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_3_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_3_genexpr *)__pyx_tp_new_3mfe_8realized_5_core___pyx_scope_struct_3_genexpr(__pyx_mstate_global->__pyx_ptype_3mfe_8realized_5_core___pyx_scope_struct_3_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_3_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 218, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *) __pyx_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;


  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_8generator2, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_refresh_time_indices_locals_gen, __pyx_mstate_global->__pyx_n_u_mfe_realized__core); if (unlikely(!gen)) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mfe.realized._core._refresh_time_indices.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_3mfe_8realized_5_core_21_refresh_time_indices_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 218, __pyx_L1_error)

  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0;
  __pyx_t_2 = __pyx_t_1;

  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_cur_scope->__pyx_v_k = __pyx_t_3;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_new_idx)) { __Pyx_RaiseClosureNameError("new_idx"); __PYX_ERR(0, 218, __pyx_L1_error) }
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_new_idx, __pyx_cur_scope->__pyx_v_k, int, 1, __Pyx_PyLong_From_int, 0, 0, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_lengths)) { __Pyx_RaiseClosureNameError("lengths"); __PYX_ERR(0, 218, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_lengths == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
      __PYX_ERR(0, 218, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_t_4, __Pyx_PyList_GET_ITEM(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_lengths, __pyx_cur_scope->__pyx_v_k), Py_GE); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_5) {

      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(Py_True);
          __pyx_r = Py_True;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
    }
  }
  /*else*/ {
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(Py_False);
        __pyx_r = Py_False;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
  }

  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
    __pyx_t_2 = __pyx_pf_3mfe_8realized_5_core_21_refresh_time_indices_6genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_K); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_18 < 0))) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_18) {
/* … */
    }
/* … */
struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct_3_genexpr {
  PyObject_HEAD
  struct __pyx_obj_3mfe_8realized_5_core___pyx_scope_struct___refresh_time_indices *__pyx_outer_scope;
  int __pyx_genexpr_arg_0;
  int __pyx_v_k;
};

+219:             break
      goto __pyx_L20_break;
+220:         cur_idx = new_idx
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_new_idx);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cur_idx);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cur_idx, __pyx_cur_scope->__pyx_v_new_idx);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_new_idx);
 221: 
 222:     return (
+223:         np.array(sync_idx_list, dtype=np.int64),
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_sync_idx_list, __pyx_t_4};
    #if CYTHON_VECTORCALL
    __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_2);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    #endif
    __pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
  }
/* … */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 223, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_8);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 223, __pyx_L1_error);
  __pyx_t_6 = 0;
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
+224:         np.array(sync_times_list, dtype=np.float64),
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_sync_times_list, __pyx_t_7};
    #if CYTHON_VECTORCALL
    __pyx_t_4 = __pyx_mstate_global->__pyx_tuple[2];
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_4);
    #else
    {
      PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
      __pyx_t_4 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    #endif
    __pyx_t_8 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
 225:     )