Generated by Cython 0.29.21

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

+001: # distutils: extra_compile_args=-fopenmp
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 002: # distutils: extra_link_args=-fopenmp
 003: # cython: language_level=3, boundscheck=False, wraparound=False, initializedcheck=False
 004: 
+005: import numpy as np
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 006: cimport cython
 007: from cython.parallel import prange
 008: 
+009: def Cij_cython(char[:,::1] msa,double pseudocount, int n_states, double theta):
/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_1Cij_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cython_code_16analyse_sequence_Cij_cython[] = "\n    Return a Matrix of correleation with q-1 state (the last correlation because of gauge chosen is eij(q,)= 0)\n    ";
static PyMethodDef __pyx_mdef_11cython_code_16analyse_sequence_1Cij_cython = {"Cij_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cython_code_16analyse_sequence_1Cij_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cython_code_16analyse_sequence_Cij_cython};
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_1Cij_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_msa = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_pseudocount;
  int __pyx_v_n_states;
  double __pyx_v_theta;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Cij_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_msa,&__pyx_n_s_pseudocount,&__pyx_n_s_n_states,&__pyx_n_s_theta,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msa)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pseudocount)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Cij_cython", 1, 4, 4, 1); __PYX_ERR(0, 9, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_states)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Cij_cython", 1, 4, 4, 2); __PYX_ERR(0, 9, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_theta)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Cij_cython", 1, 4, 4, 3); __PYX_ERR(0, 9, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Cij_cython") < 0)) __PYX_ERR(0, 9, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_msa = __Pyx_PyObject_to_MemoryviewSlice_d_dc_char(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_msa.memview)) __PYX_ERR(0, 9, __pyx_L3_error)
    __pyx_v_pseudocount = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_pseudocount == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 9, __pyx_L3_error)
    __pyx_v_n_states = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_n_states == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9, __pyx_L3_error)
    __pyx_v_theta = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_theta == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 9, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Cij_cython", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 9, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.Cij_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_Cij_cython(__pyx_self, __pyx_v_msa, __pyx_v_pseudocount, __pyx_v_n_states, __pyx_v_theta);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_Cij_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_msa, double __pyx_v_pseudocount, int __pyx_v_n_states, double __pyx_v_theta) {
  int __pyx_v_site_i;
  int __pyx_v_site_j;
  int __pyx_v_index_spin_1;
  int __pyx_v_index_spin_2;
  int __pyx_v_n_states_gauge;
  __Pyx_memviewslice __pyx_v_Cij = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Fij = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_weight = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Cij_cython", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_AddTraceback("cython_code.analyse_sequence.Cij_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_Cij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Fij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_weight, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_msa, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__19 = PyTuple_Pack(12, __pyx_n_s_msa, __pyx_n_s_pseudocount, __pyx_n_s_n_states, __pyx_n_s_theta, __pyx_n_s_site_i, __pyx_n_s_site_j, __pyx_n_s_index_spin_1, __pyx_n_s_index_spin_2, __pyx_n_s_n_states_gauge, __pyx_n_s_Cij, __pyx_n_s_Fij, __pyx_n_s_weight); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11cython_code_16analyse_sequence_1Cij_cython, NULL, __pyx_n_s_cython_code_analyse_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Cij_cython, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_analyse_sequence_pyx, __pyx_n_s_Cij_cython, 9, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 9, __pyx_L1_error)
 010:     """
 011:     Return a Matrix of correleation with q-1 state (the last correlation because of gauge chosen is eij(q,)= 0)
 012:     """
 013:     cdef :
+014:         int site_i,site_j,index_spin_1,index_spin_2,n_states_gauge = int(n_states-1)
  __pyx_v_n_states_gauge = ((int)(__pyx_v_n_states - 1));
 015:         ##PMI[site_i,site_j,spin_i,spin_j]
+016:         double[::1,:,:,:] Cij = np.zeros((msa.shape[1],n_states_gauge,msa.shape[1],n_states_gauge),order = "F")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_msa.shape[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_n_states_gauge); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t((__pyx_v_msa.shape[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_n_states_gauge); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_F) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dcd_d_d__double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_Cij = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
 017:         double[::1,:,:,:] Fij
 018:         double[::1] weight
 019:     ##Cython
+020:     Fij, weight = two_body_freq_cython(msa, pseudocount, n_states, theta)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_two_body_freq_cython); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_msa, 2, (PyObject *(*)(char *)) __pyx_memview_get_char, (int (*)(char *, PyObject *)) __pyx_memview_set_char, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_pseudocount); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_n_states); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_theta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_5, __pyx_t_2, __pyx_t_3, __pyx_t_1};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __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_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_5, __pyx_t_2, __pyx_t_3, __pyx_t_1};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __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_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 20, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_10);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_11 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_6)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_10 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_10)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_10);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_1), 2) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
    __pyx_t_11 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_11 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 20, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dcd_d_d__double(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_10, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_Fij = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  __pyx_v_weight = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
 021:     ##
+022:     with nogil:
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L7:;
      }
  }
+023:         for site_i in prange(msa.shape[1]):
        __pyx_t_13 = (__pyx_v_msa.shape[1]);
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_15 = (__pyx_t_13 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_15 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_index_spin_1) lastprivate(__pyx_v_index_spin_2) firstprivate(__pyx_v_site_i) lastprivate(__pyx_v_site_i) lastprivate(__pyx_v_site_j)
                    #endif /* _OPENMP */
                    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_15; __pyx_t_14++){
                        {
                            __pyx_v_site_i = (int)(0 + 1 * __pyx_t_14);
                            /* Initialize private variables to invalid values */
                            __pyx_v_index_spin_1 = ((int)0xbad0bad0);
                            __pyx_v_index_spin_2 = ((int)0xbad0bad0);
                            __pyx_v_site_j = ((int)0xbad0bad0);
+024:             for site_j in range(msa.shape[1]):
                            __pyx_t_16 = (__pyx_v_msa.shape[1]);
                            __pyx_t_17 = __pyx_t_16;
                            for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_17; __pyx_t_9+=1) {
                              __pyx_v_site_j = __pyx_t_9;
+025:                 for index_spin_1 in range(n_states_gauge):
                              __pyx_t_18 = __pyx_v_n_states_gauge;
                              __pyx_t_19 = __pyx_t_18;
                              for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
                                __pyx_v_index_spin_1 = __pyx_t_20;
+026:                     for index_spin_2 in range(n_states_gauge):
                                __pyx_t_21 = __pyx_v_n_states_gauge;
                                __pyx_t_22 = __pyx_t_21;
                                for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                  __pyx_v_index_spin_2 = __pyx_t_23;
+027:                         Cij[site_i,index_spin_1,site_j,index_spin_2] = Fij[site_i,index_spin_1,site_j,index_spin_2]-Fij[site_i,index_spin_1,site_i,index_spin_1]*Fij[site_j,index_spin_2,site_j,index_spin_2]
                                  __pyx_t_24 = __pyx_v_site_i;
                                  __pyx_t_25 = __pyx_v_index_spin_1;
                                  __pyx_t_26 = __pyx_v_site_j;
                                  __pyx_t_27 = __pyx_v_index_spin_2;
                                  __pyx_t_28 = __pyx_v_site_i;
                                  __pyx_t_29 = __pyx_v_index_spin_1;
                                  __pyx_t_30 = __pyx_v_site_i;
                                  __pyx_t_31 = __pyx_v_index_spin_1;
                                  __pyx_t_32 = __pyx_v_site_j;
                                  __pyx_t_33 = __pyx_v_index_spin_2;
                                  __pyx_t_34 = __pyx_v_site_j;
                                  __pyx_t_35 = __pyx_v_index_spin_2;
                                  __pyx_t_36 = __pyx_v_site_i;
                                  __pyx_t_37 = __pyx_v_index_spin_1;
                                  __pyx_t_38 = __pyx_v_site_j;
                                  __pyx_t_39 = __pyx_v_index_spin_2;
                                  *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Cij.data) + __pyx_t_36)) ) + __pyx_t_37 * __pyx_v_Cij.strides[1]) ) + __pyx_t_38 * __pyx_v_Cij.strides[2]) ) + __pyx_t_39 * __pyx_v_Cij.strides[3]) )) = ((*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_24)) ) + __pyx_t_25 * __pyx_v_Fij.strides[1]) ) + __pyx_t_26 * __pyx_v_Fij.strides[2]) ) + __pyx_t_27 * __pyx_v_Fij.strides[3]) ))) - ((*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_28)) ) + __pyx_t_29 * __pyx_v_Fij.strides[1]) ) + __pyx_t_30 * __pyx_v_Fij.strides[2]) ) + __pyx_t_31 * __pyx_v_Fij.strides[3]) ))) * (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_32)) ) + __pyx_t_33 * __pyx_v_Fij.strides[1]) ) + __pyx_t_34 * __pyx_v_Fij.strides[2]) ) + __pyx_t_35 * __pyx_v_Fij.strides[3]) )))));
                                }
                              }
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+028:     return np.asarray(Cij), weight
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __pyx_memoryview_fromslice(__pyx_v_Cij, 4, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_weight, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;
 029: 
+030: def two_body_freq_cython(char[:,::1] msa, double pseudocount, int n_states, double theta):
/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_3two_body_freq_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11cython_code_16analyse_sequence_3two_body_freq_cython = {"two_body_freq_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cython_code_16analyse_sequence_3two_body_freq_cython, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_3two_body_freq_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_msa = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_pseudocount;
  int __pyx_v_n_states;
  double __pyx_v_theta;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_body_freq_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_msa,&__pyx_n_s_pseudocount,&__pyx_n_s_n_states,&__pyx_n_s_theta,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msa)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pseudocount)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("two_body_freq_cython", 1, 4, 4, 1); __PYX_ERR(0, 30, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_states)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("two_body_freq_cython", 1, 4, 4, 2); __PYX_ERR(0, 30, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_theta)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("two_body_freq_cython", 1, 4, 4, 3); __PYX_ERR(0, 30, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "two_body_freq_cython") < 0)) __PYX_ERR(0, 30, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_msa = __Pyx_PyObject_to_MemoryviewSlice_d_dc_char(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_msa.memview)) __PYX_ERR(0, 30, __pyx_L3_error)
    __pyx_v_pseudocount = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_pseudocount == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error)
    __pyx_v_n_states = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_n_states == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error)
    __pyx_v_theta = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_theta == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("two_body_freq_cython", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 30, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.two_body_freq_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_2two_body_freq_cython(__pyx_self, __pyx_v_msa, __pyx_v_pseudocount, __pyx_v_n_states, __pyx_v_theta);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_2two_body_freq_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_msa, double __pyx_v_pseudocount, int __pyx_v_n_states, double __pyx_v_theta) {
  __Pyx_memviewslice __pyx_v_Fij = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_site_i;
  int __pyx_v_site_j;
  int __pyx_v_index_try;
  int __pyx_v_index_spin_1;
  int __pyx_v_index_spin_2;
  double __pyx_v_z;
  __Pyx_memviewslice __pyx_v_weight = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_body_freq_cython", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("cython_code.analyse_sequence.two_body_freq_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_Fij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_weight, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_msa, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__21 = PyTuple_Pack(12, __pyx_n_s_msa, __pyx_n_s_pseudocount, __pyx_n_s_n_states, __pyx_n_s_theta, __pyx_n_s_Fij, __pyx_n_s_site_i, __pyx_n_s_site_j, __pyx_n_s_index_try, __pyx_n_s_index_spin_1, __pyx_n_s_index_spin_2, __pyx_n_s_z, __pyx_n_s_weight); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11cython_code_16analyse_sequence_3two_body_freq_cython, NULL, __pyx_n_s_cython_code_analyse_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_two_body_freq_cython, __pyx_t_1) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_analyse_sequence_pyx, __pyx_n_s_two_body_freq_cython, 30, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 30, __pyx_L1_error)
 031:     cdef:
+032:         double[::1,:,:,:] Fij = np.zeros((msa.shape[1],n_states,msa.shape[1],n_states),order = "F")
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_msa.shape[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_n_states); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t((__pyx_v_msa.shape[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_n_states); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_F) < 0) __PYX_ERR(0, 32, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dcd_d_d__double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_Fij = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
 033:         int site_i,site_j,index_try,index_spin_1,index_spin_2
 034:         double z
 035:         double[::1] weight
+036:     weight = weight_msa(msa, theta)
  __pyx_t_8 = __pyx_f_11cython_code_16analyse_sequence_weight_msa(__pyx_v_msa, __pyx_v_theta, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 36, __pyx_L1_error)
  __pyx_v_weight = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+037:     z = np.sum(weight)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_weight, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_z = __pyx_t_9;
+038:     with nogil:
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }
+039:         for site_i in prange(msa.shape[1]):
        __pyx_t_10 = (__pyx_v_msa.shape[1]);
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_12 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_index_spin_1) lastprivate(__pyx_v_index_spin_2) lastprivate(__pyx_v_index_try) firstprivate(__pyx_v_site_i) lastprivate(__pyx_v_site_i) lastprivate(__pyx_v_site_j)
                    #endif /* _OPENMP */
                    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){
                        {
                            __pyx_v_site_i = (int)(0 + 1 * __pyx_t_11);
                            /* Initialize private variables to invalid values */
                            __pyx_v_index_spin_1 = ((int)0xbad0bad0);
                            __pyx_v_index_spin_2 = ((int)0xbad0bad0);
                            __pyx_v_index_try = ((int)0xbad0bad0);
                            __pyx_v_site_j = ((int)0xbad0bad0);
+040:             for site_j in range(msa.shape[1]):
                            __pyx_t_13 = (__pyx_v_msa.shape[1]);
                            __pyx_t_14 = __pyx_t_13;
                            for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
                              __pyx_v_site_j = __pyx_t_15;
+041:                 for index_try in range(msa.shape[0]):
                              __pyx_t_16 = (__pyx_v_msa.shape[0]);
                              __pyx_t_17 = __pyx_t_16;
                              for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
                                __pyx_v_index_try = __pyx_t_18;
+042:                     Fij[site_i, msa[index_try,site_i], site_j, msa[index_try,site_j]] += weight[index_try]/z
                                __pyx_t_19 = __pyx_v_index_try;
                                __pyx_t_9 = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_weight.data) + __pyx_t_19)) )));
                                if (unlikely(__pyx_v_z == 0)) {
                                  #ifdef WITH_THREAD
                                  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                  #endif
                                  PyErr_SetString(PyExc_ZeroDivisionError, "float division");
                                  #ifdef WITH_THREAD
                                  __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                  #endif
                                  __PYX_ERR(0, 42, __pyx_L8_error)
                                }
                                __pyx_t_19 = __pyx_v_index_try;
                                __pyx_t_20 = __pyx_v_site_i;
                                __pyx_t_21 = __pyx_v_index_try;
                                __pyx_t_22 = __pyx_v_site_j;
                                __pyx_t_23 = __pyx_v_site_i;
                                __pyx_t_24 = (*((char *) ( /* dim=1 */ ((char *) (((char *) ( /* dim=0 */ (__pyx_v_msa.data + __pyx_t_19 * __pyx_v_msa.strides[0]) )) + __pyx_t_20)) )));
                                __pyx_t_25 = __pyx_v_site_j;
                                __pyx_t_26 = (*((char *) ( /* dim=1 */ ((char *) (((char *) ( /* dim=0 */ (__pyx_v_msa.data + __pyx_t_21 * __pyx_v_msa.strides[0]) )) + __pyx_t_22)) )));
                                *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_23)) ) + __pyx_t_24 * __pyx_v_Fij.strides[1]) ) + __pyx_t_25 * __pyx_v_Fij.strides[2]) ) + __pyx_t_26 * __pyx_v_Fij.strides[3]) )) += (__pyx_t_9 / __pyx_v_z);
                              }
+043:                 for index_spin_1 in range(n_states):
                              __pyx_t_18 = __pyx_v_n_states;
                              __pyx_t_27 = __pyx_t_18;
                              for (__pyx_t_28 = 0; __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
                                __pyx_v_index_spin_1 = __pyx_t_28;
+044:                     for index_spin_2 in range(n_states):
                                __pyx_t_29 = __pyx_v_n_states;
                                __pyx_t_30 = __pyx_t_29;
                                for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) {
                                  __pyx_v_index_spin_2 = __pyx_t_31;
+045:                         if site_i != site_j:
                                  __pyx_t_32 = ((__pyx_v_site_i != __pyx_v_site_j) != 0);
                                  if (__pyx_t_32) {
/* … */
                                    goto __pyx_L18;
                                  }
+046:                             Fij[site_i,index_spin_1,site_j,index_spin_2] = pseudocount/(n_states**2) + (1-pseudocount)*Fij[site_i,index_spin_1,site_j,index_spin_2]
                                    __pyx_t_33 = __Pyx_pow_long(((long)__pyx_v_n_states), 2);
                                    if (unlikely(__pyx_t_33 == 0)) {
                                      #ifdef WITH_THREAD
                                      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                      #endif
                                      PyErr_SetString(PyExc_ZeroDivisionError, "float division");
                                      #ifdef WITH_THREAD
                                      __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                      #endif
                                      __PYX_ERR(0, 46, __pyx_L8_error)
                                    }
                                    __pyx_t_22 = __pyx_v_site_i;
                                    __pyx_t_21 = __pyx_v_index_spin_1;
                                    __pyx_t_20 = __pyx_v_site_j;
                                    __pyx_t_19 = __pyx_v_index_spin_2;
                                    __pyx_t_26 = __pyx_v_site_i;
                                    __pyx_t_25 = __pyx_v_index_spin_1;
                                    __pyx_t_24 = __pyx_v_site_j;
                                    __pyx_t_23 = __pyx_v_index_spin_2;
                                    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_26)) ) + __pyx_t_25 * __pyx_v_Fij.strides[1]) ) + __pyx_t_24 * __pyx_v_Fij.strides[2]) ) + __pyx_t_23 * __pyx_v_Fij.strides[3]) )) = ((__pyx_v_pseudocount / ((double)__pyx_t_33)) + ((1.0 - __pyx_v_pseudocount) * (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_22)) ) + __pyx_t_21 * __pyx_v_Fij.strides[1]) ) + __pyx_t_20 * __pyx_v_Fij.strides[2]) ) + __pyx_t_19 * __pyx_v_Fij.strides[3]) )))));
 047:                         else:
+048:                             Fij[site_i,index_spin_1,site_j,index_spin_2] = (index_spin_1 == index_spin_2)*1.0*(pseudocount/n_states) + (1-pseudocount)*Fij[site_i,index_spin_1,site_j,index_spin_2]
                                  /*else*/ {
                                    if (unlikely(__pyx_v_n_states == 0)) {
                                      #ifdef WITH_THREAD
                                      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                      #endif
                                      PyErr_SetString(PyExc_ZeroDivisionError, "float division");
                                      #ifdef WITH_THREAD
                                      __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                      #endif
                                      __PYX_ERR(0, 48, __pyx_L8_error)
                                    }
                                    __pyx_t_19 = __pyx_v_site_i;
                                    __pyx_t_20 = __pyx_v_index_spin_1;
                                    __pyx_t_21 = __pyx_v_site_j;
                                    __pyx_t_22 = __pyx_v_index_spin_2;
                                    __pyx_t_23 = __pyx_v_site_i;
                                    __pyx_t_24 = __pyx_v_index_spin_1;
                                    __pyx_t_25 = __pyx_v_site_j;
                                    __pyx_t_26 = __pyx_v_index_spin_2;
                                    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_23)) ) + __pyx_t_24 * __pyx_v_Fij.strides[1]) ) + __pyx_t_25 * __pyx_v_Fij.strides[2]) ) + __pyx_t_26 * __pyx_v_Fij.strides[3]) )) = ((((__pyx_v_index_spin_1 == __pyx_v_index_spin_2) * 1.0) * (__pyx_v_pseudocount / ((double)__pyx_v_n_states))) + ((1.0 - __pyx_v_pseudocount) * (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Fij.data) + __pyx_t_19)) ) + __pyx_t_20 * __pyx_v_Fij.strides[1]) ) + __pyx_t_21 * __pyx_v_Fij.strides[2]) ) + __pyx_t_22 * __pyx_v_Fij.strides[3]) )))));
                                  }
                                  __pyx_L18:;
                                }
                              }
                            }
                            goto __pyx_L20;
                            __pyx_L8_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L19;
                            __pyx_L19:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates0)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_index_spin_1;
                                __pyx_parallel_temp1 = __pyx_v_index_spin_2;
                                __pyx_parallel_temp2 = __pyx_v_index_try;
                                __pyx_parallel_temp3 = __pyx_v_site_i;
                                __pyx_parallel_temp4 = __pyx_v_site_j;
                            }
                            __pyx_L20:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_index_spin_1 = __pyx_parallel_temp0;
              __pyx_v_index_spin_2 = __pyx_parallel_temp1;
              __pyx_v_index_try = __pyx_parallel_temp2;
              __pyx_v_site_i = __pyx_parallel_temp3;
              __pyx_v_site_j = __pyx_parallel_temp4;
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L4_error;
              }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+049:     return np.asarray(Fij), np.asarray(weight)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_Fij, 4, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_weight, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 050: 
+051: cpdef double[::1] weight_msa(char[:,::1] msa, double theta):
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_5weight_msa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static __Pyx_memviewslice __pyx_f_11cython_code_16analyse_sequence_weight_msa(__Pyx_memviewslice __pyx_v_msa, double __pyx_v_theta, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_weight = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sum_dist = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("weight_msa", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __pyx_r.data = NULL;
  __pyx_r.memview = NULL;
  __Pyx_AddTraceback("cython_code.analyse_sequence.weight_msa", __pyx_clineno, __pyx_lineno, __pyx_filename);
  goto __pyx_L2;
  __pyx_L0:;
  if (unlikely(!__pyx_r.memview)) {
    PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
  }
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_weight, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sum_dist, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_5weight_msa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_5weight_msa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_msa = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_theta;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("weight_msa (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_msa,&__pyx_n_s_theta,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_msa)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_theta)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("weight_msa", 1, 2, 2, 1); __PYX_ERR(0, 51, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "weight_msa") < 0)) __PYX_ERR(0, 51, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_msa = __Pyx_PyObject_to_MemoryviewSlice_d_dc_char(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_msa.memview)) __PYX_ERR(0, 51, __pyx_L3_error)
    __pyx_v_theta = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_theta == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("weight_msa", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 51, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.weight_msa", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_4weight_msa(__pyx_self, __pyx_v_msa, __pyx_v_theta);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_4weight_msa(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_msa, double __pyx_v_theta) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("weight_msa", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cython_code_16analyse_sequence_weight_msa(__pyx_v_msa, __pyx_v_theta, 0); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 51, __pyx_L1_error)
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_1, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cython_code.analyse_sequence.weight_msa", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_msa, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 052:     cdef:
+053:         double[::1] weight = np.ones((msa.shape[0]))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_msa.shape[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_weight = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+054:         double[::1] sum_dist = np.zeros((msa.shape[0]))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_msa.shape[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_sum_dist = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 055:         int i,j
+056:     if theta>0:
  __pyx_t_6 = ((__pyx_v_theta > 0.0) != 0);
  if (__pyx_t_6) {
/* … */
  }
+057:         with nogil:
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L6;
          }
          __pyx_L6:;
        }
    }
+058:             for i in prange(msa.shape[0]-1):
          __pyx_t_7 = ((__pyx_v_msa.shape[0]) - 1);
          if ((1 == 0)) abort();
          {
              #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                  #undef likely
                  #undef unlikely
                  #define likely(x)   (x)
                  #define unlikely(x) (x)
              #endif
              __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
              if (__pyx_t_9 > 0)
              {
                  #ifdef _OPENMP
                  #pragma omp parallel
                  #endif /* _OPENMP */
                  {
                      #ifdef _OPENMP
                      #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j)
                      #endif /* _OPENMP */
                      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                          {
                              __pyx_v_i = (int)(0 + 1 * __pyx_t_8);
                              /* Initialize private variables to invalid values */
                              __pyx_v_j = ((int)0xbad0bad0);
+059:                 for j in range(i+1,msa.shape[0]):
                              __pyx_t_10 = (__pyx_v_msa.shape[0]);
                              __pyx_t_11 = __pyx_t_10;
                              for (__pyx_t_12 = (__pyx_v_i + 1); __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                                __pyx_v_j = __pyx_t_12;
+060:                     if hamming_dist(msa[i],msa[j])<theta:
                                __pyx_t_13.data = __pyx_v_msa.data;
                                __pyx_t_13.memview = __pyx_v_msa.memview;
                                __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_msa.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_msa.shape[1];
__pyx_t_13.strides[0] = __pyx_v_msa.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_14.data = __pyx_v_msa.data;
                                __pyx_t_14.memview = __pyx_v_msa.memview;
                                __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                                {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_msa.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_msa.shape[1];
__pyx_t_14.strides[0] = __pyx_v_msa.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_t_6 = ((__pyx_f_11cython_code_16analyse_sequence_hamming_dist(__pyx_t_13, __pyx_t_14) < __pyx_v_theta) != 0);
                                __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                __pyx_t_13.memview = NULL;
                                __pyx_t_13.data = NULL;
                                __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                                __pyx_t_14.memview = NULL;
                                __pyx_t_14.data = NULL;
                                if (__pyx_t_6) {
/* … */
                                }
                              }
                          }
                      }
                  }
              }
          }
          #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
              #undef likely
              #undef unlikely
              #define likely(x)   __builtin_expect(!!(x), 1)
              #define unlikely(x) __builtin_expect(!!(x), 0)
          #endif
        }
+061:                         sum_dist[i] += 1
                                  __pyx_t_15 = __pyx_v_i;
                                  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_sum_dist.data) + __pyx_t_15)) )) += 1.0;
+062:                         sum_dist[j] += 1
                                  __pyx_t_15 = __pyx_v_j;
                                  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_sum_dist.data) + __pyx_t_15)) )) += 1.0;
+063:     for i in range(msa.shape[0]):
  __pyx_t_9 = (__pyx_v_msa.shape[0]);
  __pyx_t_8 = __pyx_t_9;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_8; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
+064:         weight[i] = 1/(sum_dist[i]+1) #dont take into account the diagonal
    __pyx_t_15 = __pyx_v_i;
    __pyx_t_16 = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_sum_dist.data) + __pyx_t_15)) ))) + 1.0);
    if (unlikely(__pyx_t_16 == 0)) {
      PyErr_SetString(PyExc_ZeroDivisionError, "float division");
      __PYX_ERR(0, 64, __pyx_L1_error)
    }
    __pyx_t_15 = __pyx_v_i;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_weight.data) + __pyx_t_15)) )) = (1.0 / __pyx_t_16);
  }
+065:     return weight
  __PYX_INC_MEMVIEW(&__pyx_v_weight, 0);
  __pyx_r = __pyx_v_weight;
  goto __pyx_L0;
 066: 
+067: cdef double hamming_dist(char[::1] a, char[::1] b) nogil:
static double __pyx_f_11cython_code_16analyse_sequence_hamming_dist(__Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_b) {
  int __pyx_v_i;
  double __pyx_v_dist;
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cython_code.analyse_sequence.hamming_dist", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 068:     cdef:
 069:         int i
+070:         double dist = 0.0
  __pyx_v_dist = 0.0;
+071:     for i in range(a.shape[0]):
  __pyx_t_1 = (__pyx_v_a.shape[0]);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+072:         dist+= (a[i]!=b[i])*1.0
    __pyx_t_4 = __pyx_v_i;
    __pyx_t_5 = __pyx_v_i;
    __pyx_v_dist = (__pyx_v_dist + (((*((char *) ( /* dim=0 */ ((char *) (((char *) __pyx_v_a.data) + __pyx_t_4)) ))) != (*((char *) ( /* dim=0 */ ((char *) (((char *) __pyx_v_b.data) + __pyx_t_5)) )))) * 1.0));
  }
+073:     return dist/a.shape[0]
  if (unlikely((__pyx_v_a.shape[0]) == 0)) {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
    __PYX_ERR(0, 73, __pyx_L1_error)
  }
  __pyx_r = (__pyx_v_dist / ((double)(__pyx_v_a.shape[0])));
  goto __pyx_L0;
 074: 
+075: def Energy_Partner(char[:,::1] MSA_Testing, double[:,:,:,::1] Jij, int middle_index):
/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_7Energy_Partner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cython_code_16analyse_sequence_6Energy_Partner[] = "\n    Input :\n    MSA_Testing\n    Jij = Coupling inferred on MSA_training\n    Output \n    Eij = Energy protein in MSA_L1 with protein in MSA_L2\n    ";
static PyMethodDef __pyx_mdef_11cython_code_16analyse_sequence_7Energy_Partner = {"Energy_Partner", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cython_code_16analyse_sequence_7Energy_Partner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cython_code_16analyse_sequence_6Energy_Partner};
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_7Energy_Partner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_MSA_Testing = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Jij = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_middle_index;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Energy_Partner (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_MSA_Testing,&__pyx_n_s_Jij,&__pyx_n_s_middle_index,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MSA_Testing)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Jij)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Energy_Partner", 1, 3, 3, 1); __PYX_ERR(0, 75, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_middle_index)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Energy_Partner", 1, 3, 3, 2); __PYX_ERR(0, 75, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Energy_Partner") < 0)) __PYX_ERR(0, 75, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_MSA_Testing = __Pyx_PyObject_to_MemoryviewSlice_d_dc_char(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_MSA_Testing.memview)) __PYX_ERR(0, 75, __pyx_L3_error)
    __pyx_v_Jij = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Jij.memview)) __PYX_ERR(0, 75, __pyx_L3_error)
    __pyx_v_middle_index = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_middle_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 75, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Energy_Partner", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 75, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.Energy_Partner", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_6Energy_Partner(__pyx_self, __pyx_v_MSA_Testing, __pyx_v_Jij, __pyx_v_middle_index);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_6Energy_Partner(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_MSA_Testing, __Pyx_memviewslice __pyx_v_Jij, int __pyx_v_middle_index) {
  int __pyx_v_protein1;
  int __pyx_v_protein2;
  int __pyx_v_index_site_i;
  int __pyx_v_index_site_j;
  __Pyx_memviewslice __pyx_v_Eij = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Energy_Partner", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("cython_code.analyse_sequence.Energy_Partner", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_Eij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_MSA_Testing, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Jij, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__23 = PyTuple_Pack(8, __pyx_n_s_MSA_Testing, __pyx_n_s_Jij, __pyx_n_s_middle_index, __pyx_n_s_protein1, __pyx_n_s_protein2, __pyx_n_s_index_site_i, __pyx_n_s_index_site_j, __pyx_n_s_Eij); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11cython_code_16analyse_sequence_7Energy_Partner, NULL, __pyx_n_s_cython_code_analyse_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Energy_Partner, __pyx_t_1) < 0) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_analyse_sequence_pyx, __pyx_n_s_Energy_Partner, 75, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 75, __pyx_L1_error)
 076:     """
 077:     Input :
 078:     MSA_Testing
 079:     Jij = Coupling inferred on MSA_training
 080:     Output 
 081:     Eij = Energy protein in MSA_L1 with protein in MSA_L2
 082:     """
 083:     cdef:
 084:         int protein1, protein2, index_site_i, index_site_j
+085:         double[:,::1] Eij = np.zeros((MSA_Testing.shape[0],MSA_Testing.shape[0]))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_MSA_Testing.shape[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyInt_FromSsize_t((__pyx_v_MSA_Testing.shape[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_Eij = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+086:     with nogil:
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+087:         for protein1 in prange(MSA_Testing.shape[0]):
        __pyx_t_7 = (__pyx_v_MSA_Testing.shape[0]);
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_index_site_i) lastprivate(__pyx_v_index_site_j) firstprivate(__pyx_v_protein1) lastprivate(__pyx_v_protein1) lastprivate(__pyx_v_protein2)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_protein1 = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_index_site_i = ((int)0xbad0bad0);
                            __pyx_v_index_site_j = ((int)0xbad0bad0);
                            __pyx_v_protein2 = ((int)0xbad0bad0);
+088:             for protein2 in range(MSA_Testing.shape[0]):
                            __pyx_t_10 = (__pyx_v_MSA_Testing.shape[0]);
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_protein2 = __pyx_t_12;
+089:                 for index_site_i in range(middle_index):
                              __pyx_t_13 = __pyx_v_middle_index;
                              __pyx_t_14 = __pyx_t_13;
                              for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
                                __pyx_v_index_site_i = __pyx_t_15;
+090:                     for index_site_j in range(middle_index,MSA_Testing.shape[1]):
                                __pyx_t_16 = (__pyx_v_MSA_Testing.shape[1]);
                                __pyx_t_17 = __pyx_t_16;
                                for (__pyx_t_18 = __pyx_v_middle_index; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
                                  __pyx_v_index_site_j = __pyx_t_18;
+091:                         Eij[protein1,protein2] -= Jij[index_site_i, MSA_Testing[protein1,index_site_i], index_site_j, MSA_Testing[protein2,index_site_j]]
                                  __pyx_t_19 = __pyx_v_protein1;
                                  __pyx_t_20 = __pyx_v_index_site_i;
                                  __pyx_t_21 = __pyx_v_protein2;
                                  __pyx_t_22 = __pyx_v_index_site_j;
                                  __pyx_t_23 = __pyx_v_index_site_i;
                                  __pyx_t_24 = (*((char *) ( /* dim=1 */ ((char *) (((char *) ( /* dim=0 */ (__pyx_v_MSA_Testing.data + __pyx_t_19 * __pyx_v_MSA_Testing.strides[0]) )) + __pyx_t_20)) )));
                                  __pyx_t_25 = __pyx_v_index_site_j;
                                  __pyx_t_26 = (*((char *) ( /* dim=1 */ ((char *) (((char *) ( /* dim=0 */ (__pyx_v_MSA_Testing.data + __pyx_t_21 * __pyx_v_MSA_Testing.strides[0]) )) + __pyx_t_22)) )));
                                  __pyx_t_27 = __pyx_v_protein1;
                                  __pyx_t_28 = __pyx_v_protein2;
                                  *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Eij.data + __pyx_t_27 * __pyx_v_Eij.strides[0]) )) + __pyx_t_28)) )) -= (*((double *) ( /* dim=3 */ ((char *) (((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Jij.data + __pyx_t_23 * __pyx_v_Jij.strides[0]) ) + __pyx_t_24 * __pyx_v_Jij.strides[1]) ) + __pyx_t_25 * __pyx_v_Jij.strides[2]) )) + __pyx_t_26)) )));
                                }
                              }
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+092:     return np.asarray(Eij)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_Eij, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 093: 
+094: def Ising_gauge_Jij(double[::1,:,:,:] Jij):
/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_9Ising_gauge_Jij(PyObject *__pyx_self, PyObject *__pyx_arg_Jij); /*proto*/
static char __pyx_doc_11cython_code_16analyse_sequence_8Ising_gauge_Jij[] = "\n    In : Jij L*(q-1) gauge Jij[:,q] = 0\n    Out : Jij L*q gauge Ising\n    ";
static PyMethodDef __pyx_mdef_11cython_code_16analyse_sequence_9Ising_gauge_Jij = {"Ising_gauge_Jij", (PyCFunction)__pyx_pw_11cython_code_16analyse_sequence_9Ising_gauge_Jij, METH_O, __pyx_doc_11cython_code_16analyse_sequence_8Ising_gauge_Jij};
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_9Ising_gauge_Jij(PyObject *__pyx_self, PyObject *__pyx_arg_Jij) {
  __Pyx_memviewslice __pyx_v_Jij = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ising_gauge_Jij (wrapper)", 0);
  assert(__pyx_arg_Jij); {
    __pyx_v_Jij = __Pyx_PyObject_to_MemoryviewSlice_dcd_d_d__double(__pyx_arg_Jij, PyBUF_WRITABLE); if (unlikely(!__pyx_v_Jij.memview)) __PYX_ERR(0, 94, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.Ising_gauge_Jij", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_8Ising_gauge_Jij(__pyx_self, __pyx_v_Jij);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_8Ising_gauge_Jij(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_Jij) {
  int __pyx_v_index_i;
  int __pyx_v_index_j;
  int __pyx_v_state_1;
  int __pyx_v_state_2;
  int __pyx_v_n_states_gauge;
  double __pyx_v_mean_second_site;
  double __pyx_v_mean_first_site;
  double __pyx_v_mean_two_sites;
  __Pyx_memviewslice __pyx_v_Jij_out = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ising_gauge_Jij", 0);
/* … */
  /* 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_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("cython_code.analyse_sequence.Ising_gauge_Jij", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_Jij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Jij_out, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__25 = PyTuple_Pack(11, __pyx_n_s_Jij, __pyx_n_s_Jij, __pyx_n_s_index_i, __pyx_n_s_index_j, __pyx_n_s_state_1, __pyx_n_s_state_2, __pyx_n_s_n_states_gauge, __pyx_n_s_mean_second_site, __pyx_n_s_mean_first_site, __pyx_n_s_mean_two_sites, __pyx_n_s_Jij_out); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11cython_code_16analyse_sequence_9Ising_gauge_Jij, NULL, __pyx_n_s_cython_code_analyse_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ising_gauge_Jij, __pyx_t_1) < 0) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_analyse_sequence_pyx, __pyx_n_s_Ising_gauge_Jij, 94, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 94, __pyx_L1_error)
 095:     """
 096:     In : Jij L*(q-1) gauge Jij[:,q] = 0
 097:     Out : Jij L*q gauge Ising
 098:     """
 099:     cdef:
+100:         int index_i, index_j, state_1, state_2, n_states_gauge = Jij.shape[1]
  __pyx_v_n_states_gauge = (__pyx_v_Jij.shape[1]);
 101:         double mean_second_site, mean_first_site, mean_two_sites
+102:         double[:,:,:,::1] Jij_out = np.zeros((Jij.shape[0],Jij.shape[1]+1,Jij.shape[2],Jij.shape[3]+1))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_Jij.shape[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyInt_FromSsize_t(((__pyx_v_Jij.shape[1]) + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyInt_FromSsize_t((__pyx_v_Jij.shape[2])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyInt_FromSsize_t(((__pyx_v_Jij.shape[3]) + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_6);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_d_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_Jij_out = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+103:     with nogil:
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+104:         for index_i in prange(Jij.shape[0]):
        __pyx_t_9 = (__pyx_v_Jij.shape[0]);
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_11 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_11 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_index_i) lastprivate(__pyx_v_index_i) lastprivate(__pyx_v_index_j) lastprivate(__pyx_v_mean_first_site) lastprivate(__pyx_v_mean_second_site) lastprivate(__pyx_v_mean_two_sites) lastprivate(__pyx_v_state_1) lastprivate(__pyx_v_state_2)
                    #endif /* _OPENMP */
                    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
                        {
                            __pyx_v_index_i = (int)(0 + 1 * __pyx_t_10);
                            /* Initialize private variables to invalid values */
                            __pyx_v_index_j = ((int)0xbad0bad0);
                            __pyx_v_mean_first_site = ((double)__PYX_NAN());
                            __pyx_v_mean_second_site = ((double)__PYX_NAN());
                            __pyx_v_mean_two_sites = ((double)__PYX_NAN());
                            __pyx_v_state_1 = ((int)0xbad0bad0);
                            __pyx_v_state_2 = ((int)0xbad0bad0);
+105:             for index_j in range(Jij.shape[2]):
                            __pyx_t_12 = (__pyx_v_Jij.shape[2]);
                            __pyx_t_13 = __pyx_t_12;
                            for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
                              __pyx_v_index_j = __pyx_t_14;
+106:                 mean_two_sites = mean_list_2(Jij,index_i,index_j)
                              __pyx_v_mean_two_sites = __pyx_f_11cython_code_16analyse_sequence_mean_list_2(__pyx_v_Jij, __pyx_v_index_i, __pyx_v_index_j);
+107:                 for state_1 in range(n_states_gauge):
                              __pyx_t_15 = __pyx_v_n_states_gauge;
                              __pyx_t_16 = __pyx_t_15;
                              for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
                                __pyx_v_state_1 = __pyx_t_17;
+108:                     mean_second_site = mean_list(Jij,index_i,state_1,index_j)
                                __pyx_v_mean_second_site = __pyx_f_11cython_code_16analyse_sequence_mean_list(__pyx_v_Jij, __pyx_v_index_i, __pyx_v_state_1, __pyx_v_index_j);
+109:                     for state_2 in range(n_states_gauge):
                                __pyx_t_18 = __pyx_v_n_states_gauge;
                                __pyx_t_19 = __pyx_t_18;
                                for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
                                  __pyx_v_state_2 = __pyx_t_20;
+110:                         mean_first_site = mean_list_1(Jij,index_i,index_j,state_2)
                                  __pyx_v_mean_first_site = __pyx_f_11cython_code_16analyse_sequence_mean_list_1(__pyx_v_Jij, __pyx_v_index_i, __pyx_v_index_j, __pyx_v_state_2);
+111:                         Jij_out[index_i,state_1,index_j,state_2] = Jij[index_i,state_1,index_j,state_2] - mean_first_site - mean_second_site + mean_two_sites
                                  __pyx_t_21 = __pyx_v_index_i;
                                  __pyx_t_22 = __pyx_v_state_1;
                                  __pyx_t_23 = __pyx_v_index_j;
                                  __pyx_t_24 = __pyx_v_state_2;
                                  __pyx_t_25 = __pyx_v_index_i;
                                  __pyx_t_26 = __pyx_v_state_1;
                                  __pyx_t_27 = __pyx_v_index_j;
                                  __pyx_t_28 = __pyx_v_state_2;
                                  *((double *) ( /* dim=3 */ ((char *) (((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Jij_out.data + __pyx_t_25 * __pyx_v_Jij_out.strides[0]) ) + __pyx_t_26 * __pyx_v_Jij_out.strides[1]) ) + __pyx_t_27 * __pyx_v_Jij_out.strides[2]) )) + __pyx_t_28)) )) = ((((*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_Jij.data) + __pyx_t_21)) ) + __pyx_t_22 * __pyx_v_Jij.strides[1]) ) + __pyx_t_23 * __pyx_v_Jij.strides[2]) ) + __pyx_t_24 * __pyx_v_Jij.strides[3]) ))) - __pyx_v_mean_first_site) - __pyx_v_mean_second_site) + __pyx_v_mean_two_sites);
                                }
                              }
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+112:     return np.asarray(Jij_out)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_Jij_out, 4, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 113: 
+114: cdef double mean_list(double[::1,:,:,:] List, int index_fix, int index_fix_2,int index_fix_3 ) nogil:
static double __pyx_f_11cython_code_16analyse_sequence_mean_list(__Pyx_memviewslice __pyx_v_List, int __pyx_v_index_fix, int __pyx_v_index_fix_2, int __pyx_v_index_fix_3) {
  double __pyx_v_mean;
  int __pyx_v_index_list;
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cython_code.analyse_sequence.mean_list", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 115:     cdef:
+116:         double mean = 0.0
  __pyx_v_mean = 0.0;
 117:         int index_list
+118:     for index_list in range(List.shape[3]):
  __pyx_t_1 = (__pyx_v_List.shape[3]);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_index_list = __pyx_t_3;
+119:         mean += List[index_fix,index_fix_2,index_fix_3,index_list]
    __pyx_t_4 = __pyx_v_index_fix;
    __pyx_t_5 = __pyx_v_index_fix_2;
    __pyx_t_6 = __pyx_v_index_fix_3;
    __pyx_t_7 = __pyx_v_index_list;
    __pyx_v_mean = (__pyx_v_mean + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_List.data) + __pyx_t_4)) ) + __pyx_t_5 * __pyx_v_List.strides[1]) ) + __pyx_t_6 * __pyx_v_List.strides[2]) ) + __pyx_t_7 * __pyx_v_List.strides[3]) ))));
  }
+120:     return mean/(List.shape[3]+1) #zero of gauge excluded in list
  __pyx_t_1 = ((__pyx_v_List.shape[3]) + 1);
  if (unlikely(__pyx_t_1 == 0)) {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
    __PYX_ERR(0, 120, __pyx_L1_error)
  }
  __pyx_r = (__pyx_v_mean / ((double)__pyx_t_1));
  goto __pyx_L0;
 121: 
+122: cdef double mean_list_1(double[::1,:,:,:] List, int index_fix, int index_fix_2, int index_fix_3 ) nogil:
static double __pyx_f_11cython_code_16analyse_sequence_mean_list_1(__Pyx_memviewslice __pyx_v_List, int __pyx_v_index_fix, int __pyx_v_index_fix_2, int __pyx_v_index_fix_3) {
  double __pyx_v_mean;
  int __pyx_v_index_list;
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cython_code.analyse_sequence.mean_list_1", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 123:     cdef:
+124:         double mean = 0.0
  __pyx_v_mean = 0.0;
 125:         int index_list
+126:     for index_list in range(List.shape[1]):
  __pyx_t_1 = (__pyx_v_List.shape[1]);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_index_list = __pyx_t_3;
+127:         mean += List[index_fix,index_list,index_fix_2,index_fix_3]
    __pyx_t_4 = __pyx_v_index_fix;
    __pyx_t_5 = __pyx_v_index_list;
    __pyx_t_6 = __pyx_v_index_fix_2;
    __pyx_t_7 = __pyx_v_index_fix_3;
    __pyx_v_mean = (__pyx_v_mean + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_List.data) + __pyx_t_4)) ) + __pyx_t_5 * __pyx_v_List.strides[1]) ) + __pyx_t_6 * __pyx_v_List.strides[2]) ) + __pyx_t_7 * __pyx_v_List.strides[3]) ))));
  }
+128:     return mean/(List.shape[1]+1)#zero of gauge excluded in list
  __pyx_t_1 = ((__pyx_v_List.shape[1]) + 1);
  if (unlikely(__pyx_t_1 == 0)) {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
    __PYX_ERR(0, 128, __pyx_L1_error)
  }
  __pyx_r = (__pyx_v_mean / ((double)__pyx_t_1));
  goto __pyx_L0;
 129: 
+130: cdef double mean_list_2(double[::1,:,:,:] List, int index_fix_0,int index_fix_2) nogil:
static double __pyx_f_11cython_code_16analyse_sequence_mean_list_2(__Pyx_memviewslice __pyx_v_List, int __pyx_v_index_fix_0, int __pyx_v_index_fix_2) {
  double __pyx_v_mean;
  int __pyx_v_index_list;
  int __pyx_v_index_list_2;
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cython_code.analyse_sequence.mean_list_2", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 131:     cdef:
+132:         double mean = 0.0
  __pyx_v_mean = 0.0;
 133:         int index_list, index_list_2
+134:     for index_list in range(List.shape[1]):
  __pyx_t_1 = (__pyx_v_List.shape[1]);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_index_list = __pyx_t_3;
+135:         for index_list_2 in range(List.shape[3]):
    __pyx_t_4 = (__pyx_v_List.shape[3]);
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_index_list_2 = __pyx_t_6;
+136:             mean += List[index_fix_0,index_list,index_fix_2,index_list_2]
      __pyx_t_7 = __pyx_v_index_fix_0;
      __pyx_t_8 = __pyx_v_index_list;
      __pyx_t_9 = __pyx_v_index_fix_2;
      __pyx_t_10 = __pyx_v_index_list_2;
      __pyx_v_mean = (__pyx_v_mean + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_List.data) + __pyx_t_7)) ) + __pyx_t_8 * __pyx_v_List.strides[1]) ) + __pyx_t_9 * __pyx_v_List.strides[2]) ) + __pyx_t_10 * __pyx_v_List.strides[3]) ))));
    }
  }
+137:     return mean/((List.shape[1]+1)*(List.shape[3]+1))#zero of gauge excluded in list
  __pyx_t_1 = (((__pyx_v_List.shape[1]) + 1) * ((__pyx_v_List.shape[3]) + 1));
  if (unlikely(__pyx_t_1 == 0)) {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
    __PYX_ERR(0, 137, __pyx_L1_error)
  }
  __pyx_r = (__pyx_v_mean / ((double)__pyx_t_1));
  goto __pyx_L0;
 138: 
 139: 
+140: def image_plot_freq(double[:,:,:,:] freqs1, double[:,:,:,:] freqs2, int val=1000, double xmin=0, double xmax=1):
/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_11image_plot_freq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11cython_code_16analyse_sequence_11image_plot_freq = {"image_plot_freq", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cython_code_16analyse_sequence_11image_plot_freq, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_11image_plot_freq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_freqs1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_freqs2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_val;
  double __pyx_v_xmin;
  double __pyx_v_xmax;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("image_plot_freq (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_freqs1,&__pyx_n_s_freqs2,&__pyx_n_s_val,&__pyx_n_s_xmin,&__pyx_n_s_xmax,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_freqs1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_freqs2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("image_plot_freq", 0, 2, 5, 1); __PYX_ERR(0, 140, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_val);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xmin);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xmax);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "image_plot_freq") < 0)) __PYX_ERR(0, 140, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_freqs1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_freqs1.memview)) __PYX_ERR(0, 140, __pyx_L3_error)
    __pyx_v_freqs2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_freqs2.memview)) __PYX_ERR(0, 140, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L3_error)
    } else {
      __pyx_v_val = ((int)0x3E8);
    }
    if (values[3]) {
      __pyx_v_xmin = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_xmin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L3_error)
    } else {
      __pyx_v_xmin = ((double)0.0);
    }
    if (values[4]) {
      __pyx_v_xmax = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_xmax == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L3_error)
    } else {
      __pyx_v_xmax = ((double)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("image_plot_freq", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 140, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.image_plot_freq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_10image_plot_freq(__pyx_self, __pyx_v_freqs1, __pyx_v_freqs2, __pyx_v_val, __pyx_v_xmin, __pyx_v_xmax);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_10image_plot_freq(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_freqs1, __Pyx_memviewslice __pyx_v_freqs2, int __pyx_v_val, double __pyx_v_xmin, double __pyx_v_xmax) {
  __Pyx_memviewslice __pyx_v_ima = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_l;
  int __pyx_v_pos1;
  int __pyx_v_pos2;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("image_plot_freq", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("cython_code.analyse_sequence.image_plot_freq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_ima, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_freqs1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_freqs2, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__27 = PyTuple_Pack(12, __pyx_n_s_freqs1, __pyx_n_s_freqs2, __pyx_n_s_val, __pyx_n_s_xmin, __pyx_n_s_xmax, __pyx_n_s_ima, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_l, __pyx_n_s_pos1, __pyx_n_s_pos2); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11cython_code_16analyse_sequence_11image_plot_freq, NULL, __pyx_n_s_cython_code_analyse_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_image_plot_freq, __pyx_t_1) < 0) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_analyse_sequence_pyx, __pyx_n_s_image_plot_freq, 140, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 140, __pyx_L1_error)
 141:     cdef:
+142:         int[:,::1] ima = np.zeros((val,val), dtype=np.intc)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_intc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_ima = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 143:         int i,j,k,l,pos1,pos2
 144: 
 145:     #assert freqs1.shape == freqs2.shape
 146:     #assert len(freqs1.shape) == 4
 147: 
+148:     for i in prange(freqs1.shape[0] - 2, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = ((__pyx_v_freqs1.shape[0]) - 2);
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_l) lastprivate(__pyx_v_pos1) lastprivate(__pyx_v_pos2)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_k = ((int)0xbad0bad0);
                            __pyx_v_l = ((int)0xbad0bad0);
                            __pyx_v_pos1 = ((int)0xbad0bad0);
                            __pyx_v_pos2 = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+149:         for j in range(freqs1.shape[1]):
                            __pyx_t_10 = (__pyx_v_freqs1.shape[1]);
                            __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;
+150:             for k in range(i+1, freqs1.shape[2]):
                              __pyx_t_13 = (__pyx_v_freqs1.shape[2]);
                              __pyx_t_14 = __pyx_t_13;
                              for (__pyx_t_15 = (__pyx_v_i + 1); __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
                                __pyx_v_k = __pyx_t_15;
+151:                 for l in range(freqs1.shape[3]):
                                __pyx_t_16 = (__pyx_v_freqs1.shape[3]);
                                __pyx_t_17 = __pyx_t_16;
                                for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
                                  __pyx_v_l = __pyx_t_18;
+152:                     pos1 = freq_to_pos(freqs1[i,j,k,l], val, xmin, xmax)
                                  __pyx_t_19 = __pyx_v_i;
                                  __pyx_t_20 = __pyx_v_j;
                                  __pyx_t_21 = __pyx_v_k;
                                  __pyx_t_22 = __pyx_v_l;
                                  __pyx_v_pos1 = __pyx_f_11cython_code_16analyse_sequence_freq_to_pos((*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_freqs1.data + __pyx_t_19 * __pyx_v_freqs1.strides[0]) ) + __pyx_t_20 * __pyx_v_freqs1.strides[1]) ) + __pyx_t_21 * __pyx_v_freqs1.strides[2]) ) + __pyx_t_22 * __pyx_v_freqs1.strides[3]) ))), __pyx_v_val, __pyx_v_xmin, __pyx_v_xmax);
+153:                     pos2 = freq_to_pos(freqs2[i,j,k,l], val, xmin, xmax)
                                  __pyx_t_22 = __pyx_v_i;
                                  __pyx_t_21 = __pyx_v_j;
                                  __pyx_t_20 = __pyx_v_k;
                                  __pyx_t_19 = __pyx_v_l;
                                  __pyx_v_pos2 = __pyx_f_11cython_code_16analyse_sequence_freq_to_pos((*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_freqs2.data + __pyx_t_22 * __pyx_v_freqs2.strides[0]) ) + __pyx_t_21 * __pyx_v_freqs2.strides[1]) ) + __pyx_t_20 * __pyx_v_freqs2.strides[2]) ) + __pyx_t_19 * __pyx_v_freqs2.strides[3]) ))), __pyx_v_val, __pyx_v_xmin, __pyx_v_xmax);
+154:                     ima[pos1, pos2] += 1
                                  __pyx_t_19 = __pyx_v_pos1;
                                  __pyx_t_20 = __pyx_v_pos2;
                                  *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_ima.data + __pyx_t_19 * __pyx_v_ima.strides[0]) )) + __pyx_t_20)) )) += 1;
                                }
                              }
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+155:     return np.asarray(ima)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_ima, 2, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 156: 
+157: def image_plot_freq_simple(double[::1] freqs1, double[::1] freqs2, int val=1000, double xmin=0, double xmax=1):
/* Python wrapper */
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_13image_plot_freq_simple(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_11cython_code_16analyse_sequence_13image_plot_freq_simple = {"image_plot_freq_simple", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cython_code_16analyse_sequence_13image_plot_freq_simple, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_11cython_code_16analyse_sequence_13image_plot_freq_simple(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_freqs1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_freqs2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_val;
  double __pyx_v_xmin;
  double __pyx_v_xmax;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("image_plot_freq_simple (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_freqs1,&__pyx_n_s_freqs2,&__pyx_n_s_val,&__pyx_n_s_xmin,&__pyx_n_s_xmax,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_freqs1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_freqs2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("image_plot_freq_simple", 0, 2, 5, 1); __PYX_ERR(0, 157, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_val);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xmin);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xmax);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "image_plot_freq_simple") < 0)) __PYX_ERR(0, 157, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_freqs1 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_freqs1.memview)) __PYX_ERR(0, 157, __pyx_L3_error)
    __pyx_v_freqs2 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_freqs2.memview)) __PYX_ERR(0, 157, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L3_error)
    } else {
      __pyx_v_val = ((int)0x3E8);
    }
    if (values[3]) {
      __pyx_v_xmin = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_xmin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L3_error)
    } else {
      __pyx_v_xmin = ((double)0.0);
    }
    if (values[4]) {
      __pyx_v_xmax = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_xmax == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L3_error)
    } else {
      __pyx_v_xmax = ((double)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("image_plot_freq_simple", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 157, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cython_code.analyse_sequence.image_plot_freq_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cython_code_16analyse_sequence_12image_plot_freq_simple(__pyx_self, __pyx_v_freqs1, __pyx_v_freqs2, __pyx_v_val, __pyx_v_xmin, __pyx_v_xmax);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cython_code_16analyse_sequence_12image_plot_freq_simple(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_freqs1, __Pyx_memviewslice __pyx_v_freqs2, int __pyx_v_val, double __pyx_v_xmin, double __pyx_v_xmax) {
  __Pyx_memviewslice __pyx_v_ima = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  int __pyx_v_pos1;
  int __pyx_v_pos2;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("image_plot_freq_simple", 0);
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("cython_code.analyse_sequence.image_plot_freq_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_ima, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_freqs1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_freqs2, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__29 = PyTuple_Pack(9, __pyx_n_s_freqs1, __pyx_n_s_freqs2, __pyx_n_s_val, __pyx_n_s_xmin, __pyx_n_s_xmax, __pyx_n_s_ima, __pyx_n_s_i, __pyx_n_s_pos1, __pyx_n_s_pos2); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11cython_code_16analyse_sequence_13image_plot_freq_simple, NULL, __pyx_n_s_cython_code_analyse_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_image_plot_freq_simple, __pyx_t_1) < 0) __PYX_ERR(0, 157, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(5, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_analyse_sequence_pyx, __pyx_n_s_image_plot_freq_simple, 157, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 157, __pyx_L1_error)
 158:     cdef:
+159:         int[:,::1] ima = np.zeros((val,val), dtype=np.intc)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_intc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_ima = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 160:         int i,pos1,pos2
 161: 
+162:     for i in prange(freqs1.shape[0], nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = (__pyx_v_freqs1.shape[0]);
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_pos1) lastprivate(__pyx_v_pos2)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_pos1 = ((int)0xbad0bad0);
                            __pyx_v_pos2 = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+163:                     pos1 = freq_to_pos(freqs1[i], val, xmin, xmax)
                            __pyx_t_10 = __pyx_v_i;
                            __pyx_v_pos1 = __pyx_f_11cython_code_16analyse_sequence_freq_to_pos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_freqs1.data) + __pyx_t_10)) ))), __pyx_v_val, __pyx_v_xmin, __pyx_v_xmax);
+164:                     pos2 = freq_to_pos(freqs2[i], val, xmin, xmax)
                            __pyx_t_10 = __pyx_v_i;
                            __pyx_v_pos2 = __pyx_f_11cython_code_16analyse_sequence_freq_to_pos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_freqs2.data) + __pyx_t_10)) ))), __pyx_v_val, __pyx_v_xmin, __pyx_v_xmax);
+165:                     ima[pos1, pos2] += 1
                            __pyx_t_10 = __pyx_v_pos1;
                            __pyx_t_11 = __pyx_v_pos2;
                            *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_ima.data + __pyx_t_10 * __pyx_v_ima.strides[0]) )) + __pyx_t_11)) )) += 1;
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+166:     return np.asarray(ima)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_ima, 2, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 167: 
 168: 
+169: cdef int freq_to_pos(double freq, int val, double xmin, double xmax) nogil:
static int __pyx_f_11cython_code_16analyse_sequence_freq_to_pos(double __pyx_v_freq, int __pyx_v_val, double __pyx_v_xmin, double __pyx_v_xmax) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cython_code.analyse_sequence.freq_to_pos", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
+170:     return int((freq-xmin)*(val-1)/(xmax-xmin))
  __pyx_t_1 = ((__pyx_v_freq - __pyx_v_xmin) * (__pyx_v_val - 1));
  __pyx_t_2 = (__pyx_v_xmax - __pyx_v_xmin);
  if (unlikely(__pyx_t_2 == 0)) {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
    __PYX_ERR(0, 170, __pyx_L1_error)
  }
  __pyx_r = ((int)(__pyx_t_1 / __pyx_t_2));
  goto __pyx_L0;