Generated by Cython 3.0.3

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: linkingnumber_cython.c

+001: cimport numpy as np
  __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 002: import cython
 003: # from libc.math cimport M_PI, asin, 
 004: from libc.math cimport sqrt, atan, isnan
 005: 
 006: ctypedef np.float32_t DTYPE_t
 007: from cpython.array cimport array, clone
 008: from cython cimport view
 009: from cython.view cimport array as cvarray
 010: 
 011: 
 012: @cython.boundscheck(False)
 013: @cython.wraparound(False)
 014: @cython.nonecheck(False)
 015: @cython.profile(True)
 016: @cython.cdivision(True)
+017: cpdef double _eval_lk_cython(double[:, ::1] curve1, double[:, ::1] curve2):
static PyObject *__pyx_pw_4pylk_20linkingnumber_cython_1_eval_lk_cython(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_4pylk_20linkingnumber_cython__eval_lk_cython(__Pyx_memviewslice __pyx_v_curve1, __Pyx_memviewslice __pyx_v_curve2, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_v_N1;
  int __pyx_v_N2;
  int __pyx_v_i;
  int __pyx_v_j;
  double __pyx_v_lk;
  double __pyx_v_dlk;
  double __pyx_v_nv;
  double __pyx_v_nw;
  double __pyx_v_cosbeta;
  double __pyx_v_sinbetasq;
  double __pyx_v_a0;
  double __pyx_v_a1;
  double __pyx_v_a2;
  double __pyx_v_val;
  __Pyx_memviewslice __pyx_v_p1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_p2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_q1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_q2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_v = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_w = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_r12 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e2cosbetamine1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e2mine1cosbeta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_crosse1e2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_minoneover4pi;
  double __pyx_v_a0sq;
  double __pyx_v_num;
  double __pyx_v_denom;
  double __pyx_v_t1;
  double __pyx_v_t2;
  CYTHON_UNUSED double __pyx_v_a0sqcosbeta;
  arrayobject *__pyx_v_templatemv = 0;
  double __pyx_v_a0sqsinbetasq;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_templatemv;
  __Pyx_Buffer __pyx_pybuffer_templatemv;
  double __pyx_r;
  __Pyx_TraceDeclarations
  __Pyx_TraceFrameInit(__pyx_codeobj__11)
  __Pyx_TraceCall("_eval_lk_cython", __pyx_f[0], 17, 0, __PYX_ERR(0, 17, __pyx_L1_error));
  __pyx_pybuffer_templatemv.pybuffer.buf = NULL;
  __pyx_pybuffer_templatemv.refcount = 0;
  __pyx_pybuffernd_templatemv.data = NULL;
  __pyx_pybuffernd_templatemv.rcbuffer = &__pyx_pybuffer_templatemv;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_templatemv.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("pylk.linkingnumber_cython._eval_lk_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_templatemv.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_p1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_p2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_q1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_q2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_v, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_w, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_e1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_e2, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_r12, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_e2cosbetamine1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_e2mine1cosbeta, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_crosse1e2, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_templatemv);
  __Pyx_TraceReturn(Py_None, 0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4pylk_20linkingnumber_cython_1_eval_lk_cython(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_4pylk_20linkingnumber_cython_1_eval_lk_cython = {"_eval_lk_cython", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_4pylk_20linkingnumber_cython_1_eval_lk_cython, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4pylk_20linkingnumber_cython_1_eval_lk_cython(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  __Pyx_memviewslice __pyx_v_curve1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_curve2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_eval_lk_cython (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_curve1,&__pyx_n_s_curve2,0};
  PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_curve1)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 17, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_curve2)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 17, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_eval_lk_cython", 1, 2, 2, 1); __PYX_ERR(0, 17, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_eval_lk_cython") < 0)) __PYX_ERR(0, 17, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_curve1 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_curve1.memview)) __PYX_ERR(0, 17, __pyx_L3_error)
    __pyx_v_curve2 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_curve2.memview)) __PYX_ERR(0, 17, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_eval_lk_cython", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 17, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_curve1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_curve2, 1);
  __Pyx_AddTraceback("pylk.linkingnumber_cython._eval_lk_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4pylk_20linkingnumber_cython__eval_lk_cython(__pyx_self, __pyx_v_curve1, __pyx_v_curve2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_4pylk_20linkingnumber_cython__eval_lk_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_curve1, __Pyx_memviewslice __pyx_v_curve2) {
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarations
  __Pyx_TraceFrameInit(__pyx_codeobj__11)
  __Pyx_TraceCall("_eval_lk_cython (wrapper)", __pyx_f[0], 17, 0, __PYX_ERR(0, 17, __pyx_L1_error));
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_curve1.memview)) { __Pyx_RaiseUnboundLocalError("curve1"); __PYX_ERR(0, 17, __pyx_L1_error) }
  if (unlikely(!__pyx_v_curve2.memview)) { __Pyx_RaiseUnboundLocalError("curve2"); __PYX_ERR(0, 17, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_4pylk_20linkingnumber_cython__eval_lk_cython(__pyx_v_curve1, __pyx_v_curve2, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 17, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pylk.linkingnumber_cython._eval_lk_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_TraceReturn(__pyx_r, 0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__24 = PyTuple_Pack(2, __pyx_n_s_curve1, __pyx_n_s_curve2); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
/* … */
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4pylk_20linkingnumber_cython_1_eval_lk_cython, 0, __pyx_n_s_eval_lk_cython, NULL, __pyx_n_s_pylk_linkingnumber_cython, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_eval_lk_cython, __pyx_t_7) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 018:     cdef int N1,N2,i,j
 019:     cdef double lk,dlk,nv,nw,cosbeta,sinbetasq,a0,a1,a2,val
 020:     cdef double[::1] p1,p2,q1,q2,v,w,e1,e2,r12
 021:     cdef double[::1] e2cosbetamine1,e2mine1cosbeta,crosse1e2
 022: 
 023:     cdef double minoneover4pi, a0sq, num, denom
 024:     cdef double t1,t2,a0sqcosbeta
 025: 
 026:     cdef array[double] templatemv
+027:     templatemv = array('d')
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_templatemv.rcbuffer->pybuffer);
    __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_templatemv.rcbuffer->pybuffer, (PyObject*)((arrayobject *)__pyx_t_1), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_INDIRECT, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_2 < 0)) {
      PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_templatemv.rcbuffer->pybuffer, (PyObject*)__pyx_v_templatemv, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_INDIRECT, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      }
      __pyx_t_3 = __pyx_t_4 = __pyx_t_5 = 0;
    }
    __pyx_pybuffernd_templatemv.diminfo[0].strides = __pyx_pybuffernd_templatemv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_templatemv.diminfo[0].shape = __pyx_pybuffernd_templatemv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_templatemv.diminfo[0].suboffsets = __pyx_pybuffernd_templatemv.rcbuffer->pybuffer.suboffsets[0];
    if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 27, __pyx_L1_error)
  }
  __pyx_v_templatemv = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_n_s_d); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
 028: 
+029:     p1 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p1 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+030:     p2 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p2 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+031:     q1 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_q1 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+032:     q2 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_q2 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+033:     v  = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_v = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+034:     w  = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+035:     e1 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e1 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+036:     e2 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e2 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+037:     r12 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_r12 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+038:     e2cosbetamine1 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e2cosbetamine1 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+039:     e2mine1cosbeta = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e2mine1cosbeta = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+040:     crosse1e2 = clone(templatemv,3,False)
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_v_templatemv), 3, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_crosse1e2 = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 041: 
+042:     N1 = len(curve1)
  __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_curve1); 
  __pyx_v_N1 = __pyx_t_7;
+043:     N2 = len(curve2)
  __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_curve2); 
  __pyx_v_N2 = __pyx_t_7;
+044:     minoneover4pi = -0.07957747154594767
  __pyx_v_minoneover4pi = -0.07957747154594767;
 045:     # N1 = curve1.shape[0]
 046:     # N2 = curve2.shape[0]
 047: 
+048:     lk = 0
  __pyx_v_lk = 0.0;
+049:     for i in range(N1):
  __pyx_t_2 = __pyx_v_N1;
  __pyx_t_8 = __pyx_t_2;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+050:         for j 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_j = __pyx_t_12;
+051:             p1 = curve1[i]
      __pyx_t_6.data = __pyx_v_curve1.data;
      __pyx_t_6.memview = __pyx_v_curve1.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_6, 1);
      {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_curve1.strides[0];
        __pyx_t_6.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_6.shape[0] = __pyx_v_curve1.shape[1];
__pyx_t_6.strides[0] = __pyx_v_curve1.strides[1];
    __pyx_t_6.suboffsets[0] = -1;

__PYX_XCLEAR_MEMVIEW(&__pyx_v_p1, 1);
      __pyx_v_p1 = __pyx_t_6;
      __pyx_t_6.memview = NULL;
      __pyx_t_6.data = NULL;
+052:             p2 = curve1[(i+1)%N1]
      __pyx_t_6.data = __pyx_v_curve1.data;
      __pyx_t_6.memview = __pyx_v_curve1.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_6, 1);
      {
    Py_ssize_t __pyx_tmp_idx = ((__pyx_v_i + 1) % __pyx_v_N1);
    Py_ssize_t __pyx_tmp_stride = __pyx_v_curve1.strides[0];
        __pyx_t_6.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_6.shape[0] = __pyx_v_curve1.shape[1];
__pyx_t_6.strides[0] = __pyx_v_curve1.strides[1];
    __pyx_t_6.suboffsets[0] = -1;

__PYX_XCLEAR_MEMVIEW(&__pyx_v_p2, 1);
      __pyx_v_p2 = __pyx_t_6;
      __pyx_t_6.memview = NULL;
      __pyx_t_6.data = NULL;
+053:             q1 = curve2[j]
      __pyx_t_6.data = __pyx_v_curve2.data;
      __pyx_t_6.memview = __pyx_v_curve2.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_6, 1);
      {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_curve2.strides[0];
        __pyx_t_6.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_6.shape[0] = __pyx_v_curve2.shape[1];
__pyx_t_6.strides[0] = __pyx_v_curve2.strides[1];
    __pyx_t_6.suboffsets[0] = -1;

__PYX_XCLEAR_MEMVIEW(&__pyx_v_q1, 1);
      __pyx_v_q1 = __pyx_t_6;
      __pyx_t_6.memview = NULL;
      __pyx_t_6.data = NULL;
+054:             q2 = curve2[(j+1)%N2]
      __pyx_t_6.data = __pyx_v_curve2.data;
      __pyx_t_6.memview = __pyx_v_curve2.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_6, 1);
      {
    Py_ssize_t __pyx_tmp_idx = ((__pyx_v_j + 1) % __pyx_v_N2);
    Py_ssize_t __pyx_tmp_stride = __pyx_v_curve2.strides[0];
        __pyx_t_6.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_6.shape[0] = __pyx_v_curve2.shape[1];
__pyx_t_6.strides[0] = __pyx_v_curve2.strides[1];
    __pyx_t_6.suboffsets[0] = -1;

__PYX_XCLEAR_MEMVIEW(&__pyx_v_q2, 1);
      __pyx_v_q2 = __pyx_t_6;
      __pyx_t_6.memview = NULL;
      __pyx_t_6.data = NULL;
 055: 
+056:             v[0] = p2[0]-p1[0]
      __pyx_t_13 = 0;
      __pyx_t_14 = 0;
      __pyx_t_15 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p2.data) + __pyx_t_13)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p1.data) + __pyx_t_14)) ))));
+057:             v[1] = p2[1]-p1[1]
      __pyx_t_14 = 1;
      __pyx_t_13 = 1;
      __pyx_t_15 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p2.data) + __pyx_t_14)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p1.data) + __pyx_t_13)) ))));
+058:             v[2] = p2[2]-p1[2]
      __pyx_t_13 = 2;
      __pyx_t_14 = 2;
      __pyx_t_15 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p2.data) + __pyx_t_13)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p1.data) + __pyx_t_14)) ))));
 059: 
+060:             w[0] = q2[0]-q1[0]
      __pyx_t_14 = 0;
      __pyx_t_13 = 0;
      __pyx_t_15 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q2.data) + __pyx_t_14)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q1.data) + __pyx_t_13)) ))));
+061:             w[1] = q2[1]-q1[1]
      __pyx_t_13 = 1;
      __pyx_t_14 = 1;
      __pyx_t_15 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q2.data) + __pyx_t_13)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q1.data) + __pyx_t_14)) ))));
+062:             w[2] = q2[2]-q1[2]
      __pyx_t_14 = 2;
      __pyx_t_13 = 2;
      __pyx_t_15 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q2.data) + __pyx_t_14)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q1.data) + __pyx_t_13)) ))));
 063: 
+064:             nv = sqrt(v[0]**2+v[1]**2+v[2]**2)
      __pyx_t_13 = 0;
      __pyx_t_14 = 1;
      __pyx_t_15 = 2;
      __pyx_v_nv = sqrt(((pow((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_13)) ))), 2.0) + pow((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_14)) ))), 2.0)) + pow((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_15)) ))), 2.0)));
+065:             nw = sqrt(w[0]**2+w[1]**2+w[2]**2)
      __pyx_t_15 = 0;
      __pyx_t_14 = 1;
      __pyx_t_13 = 2;
      __pyx_v_nw = sqrt(((pow((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_15)) ))), 2.0) + pow((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_14)) ))), 2.0)) + pow((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_13)) ))), 2.0)));
 066: 
+067:             e1[0] = v[0]/nv
      __pyx_t_13 = 0;
      __pyx_t_14 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_14)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_13)) ))) / __pyx_v_nv);
+068:             e1[1] = v[1]/nv
      __pyx_t_13 = 1;
      __pyx_t_14 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_14)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_13)) ))) / __pyx_v_nv);
+069:             e1[2] = v[2]/nv
      __pyx_t_13 = 2;
      __pyx_t_14 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_14)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_v.data) + __pyx_t_13)) ))) / __pyx_v_nv);
+070:             e2[0] = w[0]/nw
      __pyx_t_13 = 0;
      __pyx_t_14 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_14)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_13)) ))) / __pyx_v_nw);
+071:             e2[1] = w[1]/nw
      __pyx_t_13 = 1;
      __pyx_t_14 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_14)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_13)) ))) / __pyx_v_nw);
+072:             e2[2] = w[2]/nw
      __pyx_t_13 = 2;
      __pyx_t_14 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_14)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_w.data) + __pyx_t_13)) ))) / __pyx_v_nw);
 073: 
+074:             r12[0] = q1[0]-p1[0]
      __pyx_t_13 = 0;
      __pyx_t_14 = 0;
      __pyx_t_15 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q1.data) + __pyx_t_13)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p1.data) + __pyx_t_14)) ))));
+075:             r12[1] = q1[1]-p1[1]
      __pyx_t_14 = 1;
      __pyx_t_13 = 1;
      __pyx_t_15 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q1.data) + __pyx_t_14)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p1.data) + __pyx_t_13)) ))));
+076:             r12[2] = q1[2]-p1[2]
      __pyx_t_13 = 2;
      __pyx_t_14 = 2;
      __pyx_t_15 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_15)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_q1.data) + __pyx_t_13)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_p1.data) + __pyx_t_14)) ))));
 077: 
+078:             cosbeta = e1[0]*e2[0] + e1[1]*e2[1] + e1[2]*e2[2]
      __pyx_t_14 = 0;
      __pyx_t_13 = 0;
      __pyx_t_15 = 1;
      __pyx_t_16 = 1;
      __pyx_t_17 = 2;
      __pyx_t_18 = 2;
      __pyx_v_cosbeta = ((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_14)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_13)) )))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_15)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_16)) ))))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_17)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_18)) )))));
+079:             sinbetasq = 1 - cosbeta**2
      __pyx_v_sinbetasq = (1.0 - pow(__pyx_v_cosbeta, 2.0));
 080: 
+081:             e2cosbetamine1[0] = e2[0]*cosbeta - e1[0]
      __pyx_t_18 = 0;
      __pyx_t_17 = 0;
      __pyx_t_16 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2cosbetamine1.data) + __pyx_t_16)) )) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_18)) ))) * __pyx_v_cosbeta) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_17)) ))));
+082:             e2cosbetamine1[1] = e2[1]*cosbeta - e1[1]
      __pyx_t_17 = 1;
      __pyx_t_18 = 1;
      __pyx_t_16 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2cosbetamine1.data) + __pyx_t_16)) )) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_17)) ))) * __pyx_v_cosbeta) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_18)) ))));
+083:             e2cosbetamine1[2] = e2[2]*cosbeta - e1[2]
      __pyx_t_18 = 2;
      __pyx_t_17 = 2;
      __pyx_t_16 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2cosbetamine1.data) + __pyx_t_16)) )) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_18)) ))) * __pyx_v_cosbeta) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_17)) ))));
 084: 
+085:             e2mine1cosbeta[0] = e2[0] - e1[0]*cosbeta
      __pyx_t_17 = 0;
      __pyx_t_18 = 0;
      __pyx_t_16 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2mine1cosbeta.data) + __pyx_t_16)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_17)) ))) - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_18)) ))) * __pyx_v_cosbeta));
+086:             e2mine1cosbeta[1] = e2[1] - e1[1]*cosbeta
      __pyx_t_18 = 1;
      __pyx_t_17 = 1;
      __pyx_t_16 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2mine1cosbeta.data) + __pyx_t_16)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_18)) ))) - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_17)) ))) * __pyx_v_cosbeta));
+087:             e2mine1cosbeta[2] = e2[2] - e1[2]*cosbeta
      __pyx_t_17 = 2;
      __pyx_t_18 = 2;
      __pyx_t_16 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2mine1cosbeta.data) + __pyx_t_16)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_17)) ))) - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_18)) ))) * __pyx_v_cosbeta));
 088: 
+089:             crosse1e2[0] = e1[1]*e2[2] - e1[2]*e2[1]
      __pyx_t_18 = 1;
      __pyx_t_17 = 2;
      __pyx_t_16 = 2;
      __pyx_t_15 = 1;
      __pyx_t_13 = 0;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_crosse1e2.data) + __pyx_t_13)) )) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_18)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_17)) )))) - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_16)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_15)) )))));
+090:             crosse1e2[1] = e1[2]*e2[0] - e1[0]*e2[2]
      __pyx_t_15 = 2;
      __pyx_t_16 = 0;
      __pyx_t_17 = 0;
      __pyx_t_18 = 2;
      __pyx_t_13 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_crosse1e2.data) + __pyx_t_13)) )) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_15)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_16)) )))) - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_17)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_18)) )))));
+091:             crosse1e2[2] = e1[0]*e2[1] - e1[1]*e2[0]
      __pyx_t_18 = 0;
      __pyx_t_17 = 1;
      __pyx_t_16 = 1;
      __pyx_t_15 = 0;
      __pyx_t_13 = 2;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_crosse1e2.data) + __pyx_t_13)) )) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_18)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_17)) )))) - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e1.data) + __pyx_t_16)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2.data) + __pyx_t_15)) )))));
 092: 
+093:             a1 = ( r12[0]*e2cosbetamine1[0] + r12[1]*e2cosbetamine1[1] + r12[2]*e2cosbetamine1[2] ) / sinbetasq
      __pyx_t_15 = 0;
      __pyx_t_16 = 0;
      __pyx_t_17 = 1;
      __pyx_t_18 = 1;
      __pyx_t_13 = 2;
      __pyx_t_14 = 2;
      __pyx_v_a1 = (((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_15)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2cosbetamine1.data) + __pyx_t_16)) )))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_17)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2cosbetamine1.data) + __pyx_t_18)) ))))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_13)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2cosbetamine1.data) + __pyx_t_14)) ))))) / __pyx_v_sinbetasq);
+094:             a2 = ( r12[0]*e2mine1cosbeta[0] + r12[1]*e2mine1cosbeta[1] + r12[2]*e2mine1cosbeta[2] ) / sinbetasq
      __pyx_t_14 = 0;
      __pyx_t_13 = 0;
      __pyx_t_18 = 1;
      __pyx_t_17 = 1;
      __pyx_t_16 = 2;
      __pyx_t_15 = 2;
      __pyx_v_a2 = (((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_14)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2mine1cosbeta.data) + __pyx_t_13)) )))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_18)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2mine1cosbeta.data) + __pyx_t_17)) ))))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_16)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_e2mine1cosbeta.data) + __pyx_t_15)) ))))) / __pyx_v_sinbetasq);
+095:             a0 = ( r12[0]*crosse1e2[0] + r12[1]*crosse1e2[1] + r12[2]*crosse1e2[2] ) / sinbetasq
      __pyx_t_15 = 0;
      __pyx_t_16 = 0;
      __pyx_t_17 = 1;
      __pyx_t_18 = 1;
      __pyx_t_13 = 2;
      __pyx_t_14 = 2;
      __pyx_v_a0 = (((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_15)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_crosse1e2.data) + __pyx_t_16)) )))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_17)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_crosse1e2.data) + __pyx_t_18)) ))))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_r12.data) + __pyx_t_13)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_crosse1e2.data) + __pyx_t_14)) ))))) / __pyx_v_sinbetasq);
 096: 
 097:             # dlk = _F(a1+nv,a2+nw,a0,cosbeta,sinbetasq)
 098:             # dlk = dlk - _F(a1+nv,a2,a0,cosbeta,sinbetasq)
 099:             # dlk = dlk - _F(a1,a2+nw,a0,cosbeta,sinbetasq)
 100:             # dlk = dlk + _F(a1,a2,a0,cosbeta,sinbetasq)
 101: 
+102:             dlk = 0
      __pyx_v_dlk = 0.0;
+103:             a0sq = a0**2
      __pyx_v_a0sq = pow(__pyx_v_a0, 2.0);
+104:             a0sqcosbeta = a0sq*cosbeta
      __pyx_v_a0sqcosbeta = (__pyx_v_a0sq * __pyx_v_cosbeta);
+105:             a0sqsinbetasq = a0sq*sinbetasq
      __pyx_v_a0sqsinbetasq = (__pyx_v_a0sq * __pyx_v_sinbetasq);
 106: 
+107:             t1=a1+nv
      __pyx_v_t1 = (__pyx_v_a1 + __pyx_v_nv);
+108:             t2=a2+nw
      __pyx_v_t2 = (__pyx_v_a2 + __pyx_v_nw);
+109:             num = t1*t2+a0sq*cosbeta
      __pyx_v_num = ((__pyx_v_t1 * __pyx_v_t2) + (__pyx_v_a0sq * __pyx_v_cosbeta));
+110:             denom = a0 * sqrt( t1**2 + t2**2 - 2*t1*t2*cosbeta + a0sqsinbetasq )
      __pyx_v_denom = (__pyx_v_a0 * sqrt((((pow(__pyx_v_t1, 2.0) + pow(__pyx_v_t2, 2.0)) - (((2.0 * __pyx_v_t1) * __pyx_v_t2) * __pyx_v_cosbeta)) + __pyx_v_a0sqsinbetasq)));
+111:             val = minoneover4pi * atan(num/denom)
      __pyx_v_val = (__pyx_v_minoneover4pi * atan((__pyx_v_num / __pyx_v_denom)));
+112:             if (not isnan(val)):
      __pyx_t_19 = (!isnan(__pyx_v_val));
      if (__pyx_t_19) {
/* … */
      }
+113:                 dlk = dlk + val
        __pyx_v_dlk = (__pyx_v_dlk + __pyx_v_val);
 114: 
+115:             t1=a1+nv
      __pyx_v_t1 = (__pyx_v_a1 + __pyx_v_nv);
+116:             t2=a2
      __pyx_v_t2 = __pyx_v_a2;
+117:             num = t1*t2+a0sq*cosbeta
      __pyx_v_num = ((__pyx_v_t1 * __pyx_v_t2) + (__pyx_v_a0sq * __pyx_v_cosbeta));
+118:             denom = a0 * sqrt( t1**2 + t2**2 - 2*t1*t2*cosbeta + a0sqsinbetasq )
      __pyx_v_denom = (__pyx_v_a0 * sqrt((((pow(__pyx_v_t1, 2.0) + pow(__pyx_v_t2, 2.0)) - (((2.0 * __pyx_v_t1) * __pyx_v_t2) * __pyx_v_cosbeta)) + __pyx_v_a0sqsinbetasq)));
+119:             val = minoneover4pi * atan(num/denom)
      __pyx_v_val = (__pyx_v_minoneover4pi * atan((__pyx_v_num / __pyx_v_denom)));
+120:             if (not isnan(val)):
      __pyx_t_19 = (!isnan(__pyx_v_val));
      if (__pyx_t_19) {
/* … */
      }
+121:                 dlk = dlk - val
        __pyx_v_dlk = (__pyx_v_dlk - __pyx_v_val);
 122: 
+123:             t1=a1
      __pyx_v_t1 = __pyx_v_a1;
+124:             t2=a2+nw
      __pyx_v_t2 = (__pyx_v_a2 + __pyx_v_nw);
+125:             num = t1*t2+a0sq*cosbeta
      __pyx_v_num = ((__pyx_v_t1 * __pyx_v_t2) + (__pyx_v_a0sq * __pyx_v_cosbeta));
+126:             denom = a0 * sqrt( t1**2 + t2**2 - 2*t1*t2*cosbeta + a0sqsinbetasq )
      __pyx_v_denom = (__pyx_v_a0 * sqrt((((pow(__pyx_v_t1, 2.0) + pow(__pyx_v_t2, 2.0)) - (((2.0 * __pyx_v_t1) * __pyx_v_t2) * __pyx_v_cosbeta)) + __pyx_v_a0sqsinbetasq)));
+127:             val = minoneover4pi * atan(num/denom)
      __pyx_v_val = (__pyx_v_minoneover4pi * atan((__pyx_v_num / __pyx_v_denom)));
+128:             if (not isnan(val)):
      __pyx_t_19 = (!isnan(__pyx_v_val));
      if (__pyx_t_19) {
/* … */
      }
+129:                 dlk = dlk - val
        __pyx_v_dlk = (__pyx_v_dlk - __pyx_v_val);
 130: 
+131:             t1=a1
      __pyx_v_t1 = __pyx_v_a1;
+132:             t2=a2
      __pyx_v_t2 = __pyx_v_a2;
+133:             num = t1*t2+a0sq*cosbeta
      __pyx_v_num = ((__pyx_v_t1 * __pyx_v_t2) + (__pyx_v_a0sq * __pyx_v_cosbeta));
+134:             denom = a0 * sqrt( t1**2 + t2**2 - 2*t1*t2*cosbeta + a0sqsinbetasq )
      __pyx_v_denom = (__pyx_v_a0 * sqrt((((pow(__pyx_v_t1, 2.0) + pow(__pyx_v_t2, 2.0)) - (((2.0 * __pyx_v_t1) * __pyx_v_t2) * __pyx_v_cosbeta)) + __pyx_v_a0sqsinbetasq)));
+135:             val = minoneover4pi * atan(num/denom)
      __pyx_v_val = (__pyx_v_minoneover4pi * atan((__pyx_v_num / __pyx_v_denom)));
+136:             if (not isnan(val)):
      __pyx_t_19 = (!isnan(__pyx_v_val));
      if (__pyx_t_19) {
/* … */
      }
+137:                 dlk = dlk + val
        __pyx_v_dlk = (__pyx_v_dlk + __pyx_v_val);
 138: 
 139:             # dlk = 0 
 140:             # val = _F(a1+nv,a2+nw,a0,cosbeta,sinbetasq)
 141:             # if val == val:
 142:             #     dlk = dlk + val
 143:             # val = _F(a1+nv,a2,a0,cosbeta,sinbetasq)
 144:             # if val == val:
 145:             #     dlk = dlk - val
 146:             # val = _F(a1,a2+nw,a0,cosbeta,sinbetasq)
 147:             # if val == val:
 148:             #     dlk = dlk - val   
 149:             # val = _F(a1,a2,a0,cosbeta,sinbetasq)
 150:             # if val == val:
 151:             #     dlk = dlk + val
 152: 
+153:             if (not isnan(dlk)):
      __pyx_t_19 = (!isnan(__pyx_v_dlk));
      if (__pyx_t_19) {
/* … */
      }
    }
  }
+154:                 lk = lk + dlk
        __pyx_v_lk = (__pyx_v_lk + __pyx_v_dlk);
+155:     return lk
  __pyx_r = __pyx_v_lk;
  goto __pyx_L0;
 156: 
 157: 
 158: # @cython.boundscheck(False)
 159: # @cython.wraparound(False)
 160: # @cython.nonecheck(False)
 161: # @cython.profile(True)
 162: # @cython.cdivision(True)             
 163: # cpdef double _F(double t1, double t2, double a0, double cosbeta, double sinbetasq):
 164: #     cdef double minoneover4pi, a0sq, num, denom
 165: #     minoneover4pi = -0.07957747154594767
 166: #     a0sq = a0**2
 167: #     num = t1*t2+a0sq*cosbeta
 168: #     denom = a0 * sqrt( t1**2 + t2**2 - 2*t1*t2*cosbeta + a0sq*sinbetasq )
 169: #     return minoneover4pi * atan(num/denom)