Generated by Cython 0.29.30

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

 001: #cython: language_level=3, boundscheck=False
 002: """ Cython inverse efuncs for cosmology integrals"""
 003: 
 004: cimport cython
 005: from libc.math cimport exp, pow
 006: 
 007: ## Inverse efunc methods for various dark energy subclasses
 008: ## These take only scalar arguments since that is what the integral
 009: ## routines give them.
 010: 
 011: ## Implementation notes:
 012: ##  * Using a python list for nu_y seems to be faster than a ndarray,
 013: ##     given that nu_y generally has a small number of elements,
 014: ##     even when you turn off bounds checking, etc.
 015: ##  * Using pow(x, -0.5) is slightly faster than x**(-0.5) and
 016: ##    even more so than 1.0 / sqrt(x)
 017: ##  * Hardwiring in the p, 1/p, k, prefac values in nufunc is
 018: ##       nontrivially faster than declaring them with cdef
 019: 
 020: ######### LambdaCDM
 021: # No relativistic species
+022: def lcdm_inv_efunc_norel(double z, double Om0, double Ode0, double Ok0):
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_1lcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_1lcdm_inv_efunc_norel = {"lcdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_1lcdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_1lcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lcdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_norel", 1, 4, 4, 1); __PYX_ERR(0, 22, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_norel", 1, 4, 4, 2); __PYX_ERR(0, 22, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_norel", 1, 4, 4, 3); __PYX_ERR(0, 22, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lcdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 22, __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_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_norel", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 22, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.lcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_lcdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0);
  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_5cosmo_lcdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lcdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.lcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple_ = PyTuple_Pack(5, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_1lcdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lcdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_lcdm_inv_efunc_norel, 22, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 22, __pyx_L1_error)
+023:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+024:   return pow(opz**2 * (opz * Om0 + Ok0) + Ode0, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 2.0) * ((__pyx_v_opz * __pyx_v_Om0) + __pyx_v_Ok0)) + __pyx_v_Ode0), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 025: 
 026: # Massless neutrinos
+027: def lcdm_inv_efunc_nomnu(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_3lcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_3lcdm_inv_efunc_nomnu = {"lcdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_3lcdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_3lcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Or0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lcdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Or0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_nomnu", 1, 5, 5, 1); __PYX_ERR(0, 27, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_nomnu", 1, 5, 5, 2); __PYX_ERR(0, 27, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_nomnu", 1, 5, 5, 3); __PYX_ERR(0, 27, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_nomnu", 1, 5, 5, 4); __PYX_ERR(0, 27, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lcdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 27, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc_nomnu", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 27, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.lcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_2lcdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Or0);
  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_5cosmo_2lcdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Or0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lcdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.lcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__3 = PyTuple_Pack(6, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Or0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_3lcdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lcdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_lcdm_inv_efunc_nomnu, 27, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 27, __pyx_L1_error)
 028:     double Or0):
+029:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+030:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 + Ode0, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(pow(((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0)) + __pyx_v_Ode0), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 031: 
 032: # With massive neutrinos
+033: def lcdm_inv_efunc(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_5lcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_5lcdm_inv_efunc = {"lcdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_5lcdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_5lcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lcdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,0};
    PyObject* values[8] = {0,0,0,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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 1); __PYX_ERR(0, 33, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 2); __PYX_ERR(0, 33, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 3); __PYX_ERR(0, 33, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 4); __PYX_ERR(0, 33, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 5); __PYX_ERR(0, 33, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 6); __PYX_ERR(0, 33, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, 7); __PYX_ERR(0, 33, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lcdm_inv_efunc") < 0)) __PYX_ERR(0, 33, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[7]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lcdm_inv_efunc", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 33, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.lcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 34, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_4lcdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_4lcdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lcdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.lcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__5 = PyTuple_Pack(10, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_opz, __pyx_n_s_Or0); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_5lcdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lcdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(8, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_lcdm_inv_efunc, 33, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 33, __pyx_L1_error)
 034:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y):
 035: 
+036:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+037:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+038:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 + Ode0, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(pow(((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0)) + __pyx_v_Ode0), -0.5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 039: 
 040: ######## FlatLambdaCDM
 041: # No relativistic species
+042: def flcdm_inv_efunc_norel(double z, double Om0, double Ode0):
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_7flcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_7flcdm_inv_efunc_norel = {"flcdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_7flcdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_7flcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flcdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_norel", 1, 3, 3, 1); __PYX_ERR(0, 42, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_norel", 1, 3, 3, 2); __PYX_ERR(0, 42, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "flcdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 42, __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_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 42, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 42, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 42, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_norel", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 42, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.flcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_6flcdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0);
  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_5cosmo_6flcdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flcdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.flcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__7 = PyTuple_Pack(3, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_7flcdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flcdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_flcdm_inv_efunc_norel, 42, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(0, 42, __pyx_L1_error)
+043:   return pow((1. + z)**3 * Om0 + Ode0, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(pow(((pow((1. + __pyx_v_z), 3.0) * __pyx_v_Om0) + __pyx_v_Ode0), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 044: 
 045: # Massless neutrinos
+046: def flcdm_inv_efunc_nomnu(double z, double Om0, double Ode0, double Or0):
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_9flcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_9flcdm_inv_efunc_nomnu = {"flcdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_9flcdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_9flcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Or0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flcdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Or0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_nomnu", 1, 4, 4, 1); __PYX_ERR(0, 46, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_nomnu", 1, 4, 4, 2); __PYX_ERR(0, 46, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_nomnu", 1, 4, 4, 3); __PYX_ERR(0, 46, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "flcdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 46, __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_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc_nomnu", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 46, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.flcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_8flcdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Or0);
  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_5cosmo_8flcdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Or0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flcdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.flcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__9 = PyTuple_Pack(5, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Or0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_9flcdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flcdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_flcdm_inv_efunc_nomnu, 46, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 46, __pyx_L1_error)
+047:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+048:   return pow(opz**3 * (opz * Or0 + Om0) + Ode0, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 3.0) * ((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0)) + __pyx_v_Ode0), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 049: 
 050: # With massive neutrinos
+051: def flcdm_inv_efunc(double z, double Om0, double Ode0, double Ogamma0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_11flcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_11flcdm_inv_efunc = {"flcdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_11flcdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_11flcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flcdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,0};
    PyObject* values[7] = {0,0,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  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, 1); __PYX_ERR(0, 51, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, 2); __PYX_ERR(0, 51, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, 3); __PYX_ERR(0, 51, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, 4); __PYX_ERR(0, 51, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, 5); __PYX_ERR(0, 51, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, 6); __PYX_ERR(0, 51, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "flcdm_inv_efunc") < 0)) __PYX_ERR(0, 51, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[6]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flcdm_inv_efunc", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 51, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.flcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 52, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_10flcdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_10flcdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flcdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.flcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__11 = PyTuple_Pack(9, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_opz, __pyx_n_s_Or0); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_11flcdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flcdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(7, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_flcdm_inv_efunc, 51, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 51, __pyx_L1_error)
 052:     double NeffPerNu, int nmasslessnu, list nu_y):
 053: 
+054:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+055:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+056:   return pow(opz**3 * (opz * Or0 + Om0) + Ode0, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 3.0) * ((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0)) + __pyx_v_Ode0), -0.5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 057: 
 058: ######## wCDM
 059: # No relativistic species
+060: def wcdm_inv_efunc_norel(double z, double Om0, double Ode0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_13wcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_13wcdm_inv_efunc_norel = {"wcdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_13wcdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_13wcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_w0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wcdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_w0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_norel", 1, 5, 5, 1); __PYX_ERR(0, 60, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_norel", 1, 5, 5, 2); __PYX_ERR(0, 60, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_norel", 1, 5, 5, 3); __PYX_ERR(0, 60, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_norel", 1, 5, 5, 4); __PYX_ERR(0, 60, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wcdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 60, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 61, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 61, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_norel", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 60, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.wcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_12wcdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_w0);
  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_5cosmo_12wcdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_w0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wcdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.wcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__13 = PyTuple_Pack(6, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_w0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_13wcdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wcdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_wcdm_inv_efunc_norel, 60, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 60, __pyx_L1_error)
 061:     double Ok0, double w0):
+062:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+063:   return pow(opz**2 * (opz * Om0 + Ok0) +
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 2.0) * ((__pyx_v_opz * __pyx_v_Om0) + __pyx_v_Ok0)) + (__pyx_v_Ode0 * pow(__pyx_v_opz, (3. * (1.0 + __pyx_v_w0))))), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 064:             Ode0 * opz**(3. * (1.0 + w0)), -0.5)
 065: 
 066: # Massless neutrinos
+067: def wcdm_inv_efunc_nomnu(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_15wcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_15wcdm_inv_efunc_nomnu = {"wcdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_15wcdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_15wcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Or0;
  double __pyx_v_w0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wcdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Or0,&__pyx_n_s_w0,0};
    PyObject* values[6] = {0,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  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_nomnu", 1, 6, 6, 1); __PYX_ERR(0, 67, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_nomnu", 1, 6, 6, 2); __PYX_ERR(0, 67, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_nomnu", 1, 6, 6, 3); __PYX_ERR(0, 67, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_nomnu", 1, 6, 6, 4); __PYX_ERR(0, 67, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_nomnu", 1, 6, 6, 5); __PYX_ERR(0, 67, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wcdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 67, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 68, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 68, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc_nomnu", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 67, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.wcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_14wcdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Or0, __pyx_v_w0);
  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_5cosmo_14wcdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Or0, double __pyx_v_w0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wcdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.wcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__15 = PyTuple_Pack(7, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Or0, __pyx_n_s_w0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_15wcdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wcdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(6, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_wcdm_inv_efunc_nomnu, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 67, __pyx_L1_error)
 068:     double Or0, double w0):
+069:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+070:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 +
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = PyFloat_FromDouble(pow(((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0)) + (__pyx_v_Ode0 * pow(__pyx_v_opz, (3. * (1.0 + __pyx_v_w0))))), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 071:           Ode0 * opz**(3. * (1.0 + w0)), -0.5)
 072: 
 073: # With massive neutrinos
+074: def wcdm_inv_efunc(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_17wcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_17wcdm_inv_efunc = {"wcdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_17wcdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_17wcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  double __pyx_v_w0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wcdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,&__pyx_n_s_w0,0};
    PyObject* values[9] = {0,0,0,0,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  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 1); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 2); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 3); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 4); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 5); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 6); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 7); __PYX_ERR(0, 74, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, 8); __PYX_ERR(0, 74, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wcdm_inv_efunc") < 0)) __PYX_ERR(0, 74, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 9) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 75, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 75, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 75, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[7]);
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 75, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wcdm_inv_efunc", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 74, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.wcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 75, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_16wcdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y, __pyx_v_w0);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_16wcdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y, double __pyx_v_w0) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wcdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.wcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__17 = PyTuple_Pack(11, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_w0, __pyx_n_s_opz, __pyx_n_s_Or0); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_17wcdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wcdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(9, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_wcdm_inv_efunc, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 74, __pyx_L1_error)
 075:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y, double w0):
 076: 
+077:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+078:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+079:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 +
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_2 = PyFloat_FromDouble(pow(((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0)) + (__pyx_v_Ode0 * pow(__pyx_v_opz, (3. * (1.0 + __pyx_v_w0))))), -0.5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 080:           Ode0 * opz**(3. * (1.0 + w0)), -0.5)
 081: 
 082: ######## Flat wCDM
 083: # No relativistic species
+084: def fwcdm_inv_efunc_norel(double z, double Om0, double Ode0, double w0):
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_19fwcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_19fwcdm_inv_efunc_norel = {"fwcdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_19fwcdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_19fwcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_w0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fwcdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_w0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_norel", 1, 4, 4, 1); __PYX_ERR(0, 84, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_norel", 1, 4, 4, 2); __PYX_ERR(0, 84, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_norel", 1, 4, 4, 3); __PYX_ERR(0, 84, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fwcdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 84, __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_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_norel", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 84, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.fwcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_18fwcdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_w0);
  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_5cosmo_18fwcdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_w0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fwcdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.fwcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__19 = PyTuple_Pack(5, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_w0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_19fwcdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fwcdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 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_cosmo_pyx, __pyx_n_s_fwcdm_inv_efunc_norel, 84, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 84, __pyx_L1_error)
+085:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+086:   return pow(opz**3 * Om0 + Ode0 * opz**(3. * (1.0 + w0)), -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 3.0) * __pyx_v_Om0) + (__pyx_v_Ode0 * pow(__pyx_v_opz, (3. * (1.0 + __pyx_v_w0))))), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 087: 
 088: # Massless neutrinos
+089: def fwcdm_inv_efunc_nomnu(double z, double Om0, double Ode0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_21fwcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_21fwcdm_inv_efunc_nomnu = {"fwcdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_21fwcdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_21fwcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Or0;
  double __pyx_v_w0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fwcdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Or0,&__pyx_n_s_w0,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_nomnu", 1, 5, 5, 1); __PYX_ERR(0, 89, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_nomnu", 1, 5, 5, 2); __PYX_ERR(0, 89, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_nomnu", 1, 5, 5, 3); __PYX_ERR(0, 89, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_nomnu", 1, 5, 5, 4); __PYX_ERR(0, 89, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fwcdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 89, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc_nomnu", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 89, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.fwcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_20fwcdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Or0, __pyx_v_w0);
  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_5cosmo_20fwcdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Or0, double __pyx_v_w0) {
  double __pyx_v_opz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fwcdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cosmo.fwcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__21 = PyTuple_Pack(6, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Or0, __pyx_n_s_w0, __pyx_n_s_opz); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_21fwcdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fwcdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 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_cosmo_pyx, __pyx_n_s_fwcdm_inv_efunc_nomnu, 89, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 89, __pyx_L1_error)
 090:     double Or0, double w0):
+091:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+092:   return pow(opz**3 * (opz * Or0 + Om0) +
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 3.0) * ((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0)) + (__pyx_v_Ode0 * pow(__pyx_v_opz, (3. * (1.0 + __pyx_v_w0))))), -0.5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 093:             Ode0 * opz**(3. * (1.0 + w0)), -0.5)
 094: 
 095: # With massive neutrinos
+096: def fwcdm_inv_efunc(double z, double Om0, double Ode0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_23fwcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_23fwcdm_inv_efunc = {"fwcdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_23fwcdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_23fwcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  double __pyx_v_w0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fwcdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,&__pyx_n_s_w0,0};
    PyObject* values[8] = {0,0,0,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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 1); __PYX_ERR(0, 96, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 2); __PYX_ERR(0, 96, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 3); __PYX_ERR(0, 96, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 4); __PYX_ERR(0, 96, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 5); __PYX_ERR(0, 96, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 6); __PYX_ERR(0, 96, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, 7); __PYX_ERR(0, 96, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fwcdm_inv_efunc") < 0)) __PYX_ERR(0, 96, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[6]);
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fwcdm_inv_efunc", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 96, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.fwcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 97, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_22fwcdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y, __pyx_v_w0);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_22fwcdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y, double __pyx_v_w0) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fwcdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.fwcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__23 = PyTuple_Pack(10, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_w0, __pyx_n_s_opz, __pyx_n_s_Or0); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_23fwcdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fwcdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(8, 0, 10, 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_cosmo_pyx, __pyx_n_s_fwcdm_inv_efunc, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 96, __pyx_L1_error)
 097:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y, double w0):
 098: 
+099:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+100:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+101:   return pow(opz**3 * (opz * Or0 + Om0) + Ode0 * opz**(3. * (1.0 + w0)), -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(pow(((pow(__pyx_v_opz, 3.0) * ((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0)) + (__pyx_v_Ode0 * pow(__pyx_v_opz, (3. * (1.0 + __pyx_v_w0))))), -0.5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 102: 
 103: ######## w0waCDM
 104: # No relativistic species
+105: def w0wacdm_inv_efunc_norel(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_25w0wacdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_25w0wacdm_inv_efunc_norel = {"w0wacdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_25w0wacdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_25w0wacdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_w0;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wacdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_w0,&__pyx_n_s_wa,0};
    PyObject* values[6] = {0,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  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_norel", 1, 6, 6, 1); __PYX_ERR(0, 105, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_norel", 1, 6, 6, 2); __PYX_ERR(0, 105, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_norel", 1, 6, 6, 3); __PYX_ERR(0, 105, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_norel", 1, 6, 6, 4); __PYX_ERR(0, 105, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_norel", 1, 6, 6, 5); __PYX_ERR(0, 105, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "w0wacdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 105, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_norel", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 105, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.w0wacdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_24w0wacdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_w0, __pyx_v_wa);
  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_5cosmo_24w0wacdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_w0, double __pyx_v_wa) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wacdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cosmo.w0wacdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__25 = PyTuple_Pack(8, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_w0, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_25w0wacdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_w0wacdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(6, 0, 8, 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_cosmo_pyx, __pyx_n_s_w0wacdm_inv_efunc_norel, 105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 105, __pyx_L1_error)
 106:     double w0, double wa):
+107:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+108:   cdef Odescl = opz**(3. * (1 + w0 + wa)) * exp(-3.0 * wa * z / opz)
  __pyx_t_1 = ((-3.0 * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1.0 + __pyx_v_w0) + __pyx_v_wa))) * exp((__pyx_t_1 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+109:   return pow(opz**2 * (opz * Om0 + Ok0) + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, 2.0) * ((__pyx_v_opz * __pyx_v_Om0) + __pyx_v_Ok0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_1, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 110: 
 111: # Massless neutrinos
+112: def w0wacdm_inv_efunc_nomnu(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_27w0wacdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_27w0wacdm_inv_efunc_nomnu = {"w0wacdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_27w0wacdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_27w0wacdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Or0;
  double __pyx_v_w0;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wacdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Or0,&__pyx_n_s_w0,&__pyx_n_s_wa,0};
    PyObject* values[7] = {0,0,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  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, 1); __PYX_ERR(0, 112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, 2); __PYX_ERR(0, 112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, 3); __PYX_ERR(0, 112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, 4); __PYX_ERR(0, 112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, 5); __PYX_ERR(0, 112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, 6); __PYX_ERR(0, 112, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "w0wacdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 112, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc_nomnu", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 112, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.w0wacdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_26w0wacdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Or0, __pyx_v_w0, __pyx_v_wa);
  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_5cosmo_26w0wacdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Or0, double __pyx_v_w0, double __pyx_v_wa) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wacdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cosmo.w0wacdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__27 = PyTuple_Pack(9, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Or0, __pyx_n_s_w0, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_27w0wacdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_w0wacdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(7, 0, 9, 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_cosmo_pyx, __pyx_n_s_w0wacdm_inv_efunc_nomnu, 112, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 112, __pyx_L1_error)
 113:     double Or0, double w0, double wa):
+114:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+115:   cdef Odescl = opz**(3. * (1 + w0 + wa)) * exp(-3.0 * wa * z / opz)
  __pyx_t_1 = ((-3.0 * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 115, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1.0 + __pyx_v_w0) + __pyx_v_wa))) * exp((__pyx_t_1 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+116:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 +
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_1, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
+117:           Ode0 * Odescl, -0.5)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 118: 
+119: def w0wacdm_inv_efunc(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_29w0wacdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_29w0wacdm_inv_efunc = {"w0wacdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_29w0wacdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_29w0wacdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  double __pyx_v_w0;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wacdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,&__pyx_n_s_w0,&__pyx_n_s_wa,0};
    PyObject* values[10] = {0,0,0,0,0,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 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 1); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 2); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 3); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 4); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 5); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 6); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 7); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 8); __PYX_ERR(0, 119, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, 9); __PYX_ERR(0, 119, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "w0wacdm_inv_efunc") < 0)) __PYX_ERR(0, 119, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 10) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 119, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 119, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 119, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 119, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[7]);
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 121, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("w0wacdm_inv_efunc", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 119, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.w0wacdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 120, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_28w0wacdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y, __pyx_v_w0, __pyx_v_wa);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_28w0wacdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y, double __pyx_v_w0, double __pyx_v_wa) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wacdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.w0wacdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__29 = PyTuple_Pack(13, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_w0, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Or0, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_29w0wacdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_w0wacdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(10, 0, 13, 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_cosmo_pyx, __pyx_n_s_w0wacdm_inv_efunc, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 119, __pyx_L1_error)
 120:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y, double w0,
 121:     double wa):
 122: 
+123:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+124:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+125:   cdef Odescl = opz**(3. * (1 + w0 + wa)) * exp(-3.0 * wa * z / opz)
  __pyx_t_4 = ((-3.0 * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 125, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1.0 + __pyx_v_w0) + __pyx_v_wa))) * exp((__pyx_t_4 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+126:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_4, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 127: 
 128: ######## Flatw0waCDM
 129: # No relativistic species
+130: def fw0wacdm_inv_efunc_norel(double z, double Om0, double Ode0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_31fw0wacdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_31fw0wacdm_inv_efunc_norel = {"fw0wacdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_31fw0wacdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_31fw0wacdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_w0;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fw0wacdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_w0,&__pyx_n_s_wa,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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_norel", 1, 5, 5, 1); __PYX_ERR(0, 130, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_norel", 1, 5, 5, 2); __PYX_ERR(0, 130, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_norel", 1, 5, 5, 3); __PYX_ERR(0, 130, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_norel", 1, 5, 5, 4); __PYX_ERR(0, 130, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fw0wacdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 130, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 130, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 130, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 130, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 131, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 131, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_norel", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 130, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.fw0wacdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_30fw0wacdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_w0, __pyx_v_wa);
  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_5cosmo_30fw0wacdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_w0, double __pyx_v_wa) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fw0wacdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cosmo.fw0wacdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__31 = PyTuple_Pack(7, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_w0, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_31fw0wacdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fw0wacdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_fw0wacdm_inv_efunc_norel, 130, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 130, __pyx_L1_error)
 131:     double w0, double wa):
+132:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+133:   cdef Odescl = opz**(3. * (1 + w0 + wa)) * exp(-3.0 * wa * z / opz)
  __pyx_t_1 = ((-3.0 * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 133, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1.0 + __pyx_v_w0) + __pyx_v_wa))) * exp((__pyx_t_1 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+134:   return pow(opz**3 * Om0 + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, 3.0) * __pyx_v_Om0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_1, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 135: 
 136: # Massless neutrinos
+137: def fw0wacdm_inv_efunc_nomnu(double z, double Om0, double Ode0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_33fw0wacdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_33fw0wacdm_inv_efunc_nomnu = {"fw0wacdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_33fw0wacdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_33fw0wacdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Or0;
  double __pyx_v_w0;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fw0wacdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Or0,&__pyx_n_s_w0,&__pyx_n_s_wa,0};
    PyObject* values[6] = {0,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  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_nomnu", 1, 6, 6, 1); __PYX_ERR(0, 137, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_nomnu", 1, 6, 6, 2); __PYX_ERR(0, 137, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_nomnu", 1, 6, 6, 3); __PYX_ERR(0, 137, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_nomnu", 1, 6, 6, 4); __PYX_ERR(0, 137, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_nomnu", 1, 6, 6, 5); __PYX_ERR(0, 137, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fw0wacdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 137, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc_nomnu", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 137, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.fw0wacdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_32fw0wacdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Or0, __pyx_v_w0, __pyx_v_wa);
  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_5cosmo_32fw0wacdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Or0, double __pyx_v_w0, double __pyx_v_wa) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fw0wacdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cosmo.fw0wacdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__33 = PyTuple_Pack(8, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Or0, __pyx_n_s_w0, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_33fw0wacdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fw0wacdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(6, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_fw0wacdm_inv_efunc_nomnu, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 137, __pyx_L1_error)
 138:     double Or0, double w0, double wa):
+139:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+140:   cdef Odescl = opz**(3. * (1 + w0 + wa)) * exp(-3.0 * wa * z / opz)
  __pyx_t_1 = ((-3.0 * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 140, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1.0 + __pyx_v_w0) + __pyx_v_wa))) * exp((__pyx_t_1 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+141:   return pow((opz * Or0 + Om0) * opz**3 + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * pow(__pyx_v_opz, 3.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_1, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 142: 
 143: # With massive neutrinos
+144: def fw0wacdm_inv_efunc(double z, double Om0, double Ode0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_35fw0wacdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_35fw0wacdm_inv_efunc = {"fw0wacdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_35fw0wacdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_35fw0wacdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  double __pyx_v_w0;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fw0wacdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,&__pyx_n_s_w0,&__pyx_n_s_wa,0};
    PyObject* values[9] = {0,0,0,0,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  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 1); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 2); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 3); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 4); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 5); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 6); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 7); __PYX_ERR(0, 144, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, 8); __PYX_ERR(0, 144, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fw0wacdm_inv_efunc") < 0)) __PYX_ERR(0, 144, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 9) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 144, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 144, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 144, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[6]);
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 146, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fw0wacdm_inv_efunc", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 144, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.fw0wacdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 145, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_34fw0wacdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y, __pyx_v_w0, __pyx_v_wa);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_34fw0wacdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y, double __pyx_v_w0, double __pyx_v_wa) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fw0wacdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.fw0wacdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__35 = PyTuple_Pack(12, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_w0, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Or0, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_35fw0wacdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fw0wacdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(9, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_fw0wacdm_inv_efunc, 144, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 144, __pyx_L1_error)
 145:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y, double w0,
 146:     double wa):
 147: 
+148:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+149:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+150:   cdef Odescl = opz**(3. * (1 + w0 + wa)) * exp(-3.0 * wa * z / opz)
  __pyx_t_4 = ((-3.0 * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 150, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1.0 + __pyx_v_w0) + __pyx_v_wa))) * exp((__pyx_t_4 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+151:   return pow((opz * Or0 + Om0) * opz**3 + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * pow(__pyx_v_opz, 3.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_4, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 152: 
 153: ######## wpwaCDM
 154: # No relativistic species
+155: def wpwacdm_inv_efunc_norel(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_37wpwacdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_37wpwacdm_inv_efunc_norel = {"wpwacdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_37wpwacdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_37wpwacdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_wp;
  double __pyx_v_apiv;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wpwacdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_wp,&__pyx_n_s_apiv,&__pyx_n_s_wa,0};
    PyObject* values[7] = {0,0,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  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, 1); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, 2); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, 3); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wp)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, 4); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_apiv)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, 5); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, 6); __PYX_ERR(0, 155, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wpwacdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 155, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error)
    __pyx_v_wp = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_wp == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 156, __pyx_L3_error)
    __pyx_v_apiv = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_apiv == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 156, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 156, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_norel", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 155, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.wpwacdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_36wpwacdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_wp, __pyx_v_apiv, __pyx_v_wa);
  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_5cosmo_36wpwacdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_wp, double __pyx_v_apiv, double __pyx_v_wa) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wpwacdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cosmo.wpwacdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__37 = PyTuple_Pack(9, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_wp, __pyx_n_s_apiv, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_37wpwacdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wpwacdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(7, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_wpwacdm_inv_efunc_norel, 155, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 155, __pyx_L1_error)
 156:     double wp, double apiv, double wa):
+157:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+158:   cdef Odescl = opz**(3. * (1. + wp + apiv * wa)) * exp(-3. * wa * z / opz)
  __pyx_t_1 = ((-3. * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 158, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1. + __pyx_v_wp) + (__pyx_v_apiv * __pyx_v_wa)))) * exp((__pyx_t_1 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+159:   return pow(opz**2 * (opz * Om0 + Ok0) + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, 2.0) * ((__pyx_v_opz * __pyx_v_Om0) + __pyx_v_Ok0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_1, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 160: 
 161: # Massless neutrinos
+162: def wpwacdm_inv_efunc_nomnu(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_39wpwacdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_39wpwacdm_inv_efunc_nomnu = {"wpwacdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_39wpwacdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_39wpwacdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Or0;
  double __pyx_v_wp;
  double __pyx_v_apiv;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wpwacdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Or0,&__pyx_n_s_wp,&__pyx_n_s_apiv,&__pyx_n_s_wa,0};
    PyObject* values[8] = {0,0,0,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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 1); __PYX_ERR(0, 162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 2); __PYX_ERR(0, 162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 3); __PYX_ERR(0, 162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 4); __PYX_ERR(0, 162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wp)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 5); __PYX_ERR(0, 162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_apiv)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 6); __PYX_ERR(0, 162, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, 7); __PYX_ERR(0, 162, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wpwacdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 162, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 162, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 162, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 162, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 162, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 163, __pyx_L3_error)
    __pyx_v_wp = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_wp == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 163, __pyx_L3_error)
    __pyx_v_apiv = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_apiv == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 163, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 163, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc_nomnu", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 162, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.wpwacdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_38wpwacdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Or0, __pyx_v_wp, __pyx_v_apiv, __pyx_v_wa);
  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_5cosmo_38wpwacdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Or0, double __pyx_v_wp, double __pyx_v_apiv, double __pyx_v_wa) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wpwacdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cosmo.wpwacdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__39 = PyTuple_Pack(10, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Or0, __pyx_n_s_wp, __pyx_n_s_apiv, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_39wpwacdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wpwacdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(8, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_wpwacdm_inv_efunc_nomnu, 162, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 162, __pyx_L1_error)
 163:     double Or0, double wp, double apiv, double wa):
+164:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+165:   cdef Odescl = opz**(3. * (1. + wp + apiv * wa)) * exp(-3. * wa * z / opz)
  __pyx_t_1 = ((-3. * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 165, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1. + __pyx_v_wp) + (__pyx_v_apiv * __pyx_v_wa)))) * exp((__pyx_t_1 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+166:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 +
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_1, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
+167:           Ode0 * Odescl, -0.5)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 168: 
 169: # With massive neutrinos
+170: def wpwacdm_inv_efunc(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_41wpwacdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_41wpwacdm_inv_efunc = {"wpwacdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_41wpwacdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_41wpwacdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  double __pyx_v_wp;
  double __pyx_v_apiv;
  double __pyx_v_wa;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wpwacdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,&__pyx_n_s_wp,&__pyx_n_s_apiv,&__pyx_n_s_wa,0};
    PyObject* values[11] = {0,0,0,0,0,0,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 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 1); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 2); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 3); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 4); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 5); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 6); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 7); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wp)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 8); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_apiv)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 9); __PYX_ERR(0, 170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wa)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, 10); __PYX_ERR(0, 170, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wpwacdm_inv_efunc") < 0)) __PYX_ERR(0, 170, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 11) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
      values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[7]);
    __pyx_v_wp = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_wp == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L3_error)
    __pyx_v_apiv = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_apiv == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 172, __pyx_L3_error)
    __pyx_v_wa = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_wa == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 172, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wpwacdm_inv_efunc", 1, 11, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 170, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.wpwacdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 171, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_40wpwacdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y, __pyx_v_wp, __pyx_v_apiv, __pyx_v_wa);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_40wpwacdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y, double __pyx_v_wp, double __pyx_v_apiv, double __pyx_v_wa) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wpwacdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.wpwacdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__41 = PyTuple_Pack(14, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_wp, __pyx_n_s_apiv, __pyx_n_s_wa, __pyx_n_s_opz, __pyx_n_s_Or0, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__41);
  __Pyx_GIVEREF(__pyx_tuple__41);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_41wpwacdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wpwacdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 170, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(11, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_wpwacdm_inv_efunc, 170, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 170, __pyx_L1_error)
 171:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y, double wp,
 172:     double apiv, double wa):
 173: 
+174:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+175:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+176:   cdef Odescl = opz**(3. * (1. + wp + apiv * wa)) * exp(-3. * wa * z / opz)
  __pyx_t_4 = ((-3. * __pyx_v_wa) * __pyx_v_z);
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 176, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1. + __pyx_v_wp) + (__pyx_v_apiv * __pyx_v_wa)))) * exp((__pyx_t_4 / __pyx_v_opz)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+177:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_4, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 178: 
 179: ######## w0wzCDM
 180: # No relativistic species
+181: def w0wzcdm_inv_efunc_norel(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_43w0wzcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_43w0wzcdm_inv_efunc_norel = {"w0wzcdm_inv_efunc_norel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_43w0wzcdm_inv_efunc_norel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_43w0wzcdm_inv_efunc_norel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_w0;
  double __pyx_v_wz;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wzcdm_inv_efunc_norel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_w0,&__pyx_n_s_wz,0};
    PyObject* values[6] = {0,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  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_norel", 1, 6, 6, 1); __PYX_ERR(0, 181, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_norel", 1, 6, 6, 2); __PYX_ERR(0, 181, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_norel", 1, 6, 6, 3); __PYX_ERR(0, 181, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_norel", 1, 6, 6, 4); __PYX_ERR(0, 181, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wz)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_norel", 1, 6, 6, 5); __PYX_ERR(0, 181, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "w0wzcdm_inv_efunc_norel") < 0)) __PYX_ERR(0, 181, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 182, __pyx_L3_error)
    __pyx_v_wz = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_wz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 182, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_norel", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 181, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.w0wzcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_42w0wzcdm_inv_efunc_norel(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_w0, __pyx_v_wz);
  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_5cosmo_42w0wzcdm_inv_efunc_norel(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_w0, double __pyx_v_wz) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wzcdm_inv_efunc_norel", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.w0wzcdm_inv_efunc_norel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__43 = PyTuple_Pack(8, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_w0, __pyx_n_s_wz, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_43w0wzcdm_inv_efunc_norel, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_w0wzcdm_inv_efunc_norel, __pyx_t_1) < 0) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(6, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_w0wzcdm_inv_efunc_norel, 181, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 181, __pyx_L1_error)
 182:     double w0, double wz):
+183:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+184:   cdef Odescl = opz**(3. * (1. + w0 - wz)) * exp(-3. * wz * z)
  __pyx_t_1 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1. + __pyx_v_w0) - __pyx_v_wz))) * exp(((-3. * __pyx_v_wz) * __pyx_v_z)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Odescl = __pyx_t_1;
  __pyx_t_1 = 0;
+185:   return pow(opz**2 * (opz * Om0 + Ok0) + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble((pow(__pyx_v_opz, 2.0) * ((__pyx_v_opz * __pyx_v_Om0) + __pyx_v_Ok0))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_Odescl); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(pow(__pyx_t_4, -0.5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 186: 
 187: # Massless neutrinos
+188: def w0wzcdm_inv_efunc_nomnu(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_45w0wzcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_45w0wzcdm_inv_efunc_nomnu = {"w0wzcdm_inv_efunc_nomnu", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_45w0wzcdm_inv_efunc_nomnu, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_45w0wzcdm_inv_efunc_nomnu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Or0;
  double __pyx_v_w0;
  double __pyx_v_wz;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wzcdm_inv_efunc_nomnu (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Or0,&__pyx_n_s_w0,&__pyx_n_s_wz,0};
    PyObject* values[7] = {0,0,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  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, 1); __PYX_ERR(0, 188, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, 2); __PYX_ERR(0, 188, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, 3); __PYX_ERR(0, 188, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Or0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, 4); __PYX_ERR(0, 188, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, 5); __PYX_ERR(0, 188, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wz)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, 6); __PYX_ERR(0, 188, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "w0wzcdm_inv_efunc_nomnu") < 0)) __PYX_ERR(0, 188, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 188, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 188, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 188, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 188, __pyx_L3_error)
    __pyx_v_Or0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Or0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L3_error)
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L3_error)
    __pyx_v_wz = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_wz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc_nomnu", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 188, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.w0wzcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5cosmo_44w0wzcdm_inv_efunc_nomnu(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Or0, __pyx_v_w0, __pyx_v_wz);
  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_5cosmo_44w0wzcdm_inv_efunc_nomnu(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Or0, double __pyx_v_w0, double __pyx_v_wz) {
  double __pyx_v_opz;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wzcdm_inv_efunc_nomnu", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.w0wzcdm_inv_efunc_nomnu", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__45 = PyTuple_Pack(9, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Or0, __pyx_n_s_w0, __pyx_n_s_wz, __pyx_n_s_opz, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_45w0wzcdm_inv_efunc_nomnu, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_w0wzcdm_inv_efunc_nomnu, __pyx_t_1) < 0) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(7, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cosmo_pyx, __pyx_n_s_w0wzcdm_inv_efunc_nomnu, 188, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 188, __pyx_L1_error)
 189:     double Or0, double w0, double wz):
+190:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+191:   cdef Odescl = opz**(3. * (1. + w0 - wz)) * exp(-3. * wz * z)
  __pyx_t_1 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1. + __pyx_v_w0) - __pyx_v_wz))) * exp(((-3. * __pyx_v_wz) * __pyx_v_z)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Odescl = __pyx_t_1;
  __pyx_t_1 = 0;
+192:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 +
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(pow(__pyx_t_4, -0.5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
+193:           Ode0 * Odescl, -0.5)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_Odescl); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 194: 
 195: # With massive neutrinos
+196: def w0wzcdm_inv_efunc(double z, double Om0, double Ode0, double Ok0,
/* Python wrapper */
static PyObject *__pyx_pw_5cosmo_47w0wzcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5cosmo_47w0wzcdm_inv_efunc = {"w0wzcdm_inv_efunc", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5cosmo_47w0wzcdm_inv_efunc, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5cosmo_47w0wzcdm_inv_efunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_z;
  double __pyx_v_Om0;
  double __pyx_v_Ode0;
  double __pyx_v_Ok0;
  double __pyx_v_Ogamma0;
  double __pyx_v_NeffPerNu;
  int __pyx_v_nmasslessnu;
  PyObject *__pyx_v_nu_y = 0;
  double __pyx_v_w0;
  double __pyx_v_wz;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wzcdm_inv_efunc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_z,&__pyx_n_s_Om0,&__pyx_n_s_Ode0,&__pyx_n_s_Ok0,&__pyx_n_s_Ogamma0,&__pyx_n_s_NeffPerNu,&__pyx_n_s_nmasslessnu,&__pyx_n_s_nu_y,&__pyx_n_s_w0,&__pyx_n_s_wz,0};
    PyObject* values[10] = {0,0,0,0,0,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 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        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_z)) != 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_Om0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 1); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ode0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 2); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ok0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 3); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ogamma0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 4); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NeffPerNu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 5); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nmasslessnu)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 6); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nu_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 7); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 8); __PYX_ERR(0, 196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wz)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, 9); __PYX_ERR(0, 196, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "w0wzcdm_inv_efunc") < 0)) __PYX_ERR(0, 196, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 10) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
    }
    __pyx_v_z = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L3_error)
    __pyx_v_Om0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Om0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L3_error)
    __pyx_v_Ode0 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Ode0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L3_error)
    __pyx_v_Ok0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Ok0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L3_error)
    __pyx_v_Ogamma0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Ogamma0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
    __pyx_v_NeffPerNu = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_NeffPerNu == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
    __pyx_v_nmasslessnu = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nmasslessnu == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
    __pyx_v_nu_y = ((PyObject*)values[7]);
    __pyx_v_w0 = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_w0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
    __pyx_v_wz = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_wz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 198, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("w0wzcdm_inv_efunc", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 196, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cosmo.w0wzcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nu_y), (&PyList_Type), 1, "nu_y", 1))) __PYX_ERR(0, 197, __pyx_L1_error)
  __pyx_r = __pyx_pf_5cosmo_46w0wzcdm_inv_efunc(__pyx_self, __pyx_v_z, __pyx_v_Om0, __pyx_v_Ode0, __pyx_v_Ok0, __pyx_v_Ogamma0, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y, __pyx_v_w0, __pyx_v_wz);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5cosmo_46w0wzcdm_inv_efunc(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_z, double __pyx_v_Om0, double __pyx_v_Ode0, double __pyx_v_Ok0, double __pyx_v_Ogamma0, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y, double __pyx_v_w0, double __pyx_v_wz) {
  double __pyx_v_opz;
  double __pyx_v_Or0;
  PyObject *__pyx_v_Odescl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("w0wzcdm_inv_efunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cosmo.w0wzcdm_inv_efunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Odescl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__47 = PyTuple_Pack(13, __pyx_n_s_z, __pyx_n_s_Om0, __pyx_n_s_Ode0, __pyx_n_s_Ok0, __pyx_n_s_Ogamma0, __pyx_n_s_NeffPerNu, __pyx_n_s_nmasslessnu, __pyx_n_s_nu_y, __pyx_n_s_w0, __pyx_n_s_wz, __pyx_n_s_opz, __pyx_n_s_Or0, __pyx_n_s_Odescl); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5cosmo_47w0wzcdm_inv_efunc, NULL, __pyx_n_s_cosmo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_w0wzcdm_inv_efunc, __pyx_t_1) < 0) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 197:     double Ogamma0, double NeffPerNu, int nmasslessnu, list nu_y, double w0,
 198:     double wz):
 199: 
+200:   cdef double opz = 1.0 + z
  __pyx_v_opz = (1.0 + __pyx_v_z);
+201:   cdef double Or0 = Ogamma0 * (1.0 + nufunc(opz, NeffPerNu, nmasslessnu, nu_y))
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_Ogamma0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5cosmo_nufunc(__pyx_v_opz, __pyx_v_NeffPerNu, __pyx_v_nmasslessnu, __pyx_v_nu_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Or0 = __pyx_t_4;
+202:   cdef Odescl = opz**(3. * (1. + w0 - wz)) * exp(-3. * wz * z)
  __pyx_t_2 = PyFloat_FromDouble((pow(__pyx_v_opz, (3. * ((1. + __pyx_v_w0) - __pyx_v_wz))) * exp(((-3. * __pyx_v_wz) * __pyx_v_z)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_Odescl = __pyx_t_2;
  __pyx_t_2 = 0;
+203:   return pow((((opz * Or0 + Om0) * opz) + Ok0) * opz**2 + Ode0 * Odescl, -0.5)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble((((((__pyx_v_opz * __pyx_v_Or0) + __pyx_v_Om0) * __pyx_v_opz) + __pyx_v_Ok0) * pow(__pyx_v_opz, 2.0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Ode0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_v_Odescl); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(pow(__pyx_t_4, -0.5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 204: 
 205: ######## Neutrino relative density function
 206: # Scalar equivalent to FLRW.nu_realative_density in core.py
 207: #  Please see that for further discussion.
 208: # This should only be called with massive neutrinos (e.g., nu_y is not empty)
 209: # Briefly, this is just a numerical fitting function to the true relationship,
 210: #  which is too expensive to want to evaluate directly.  The
 211: #  constants which appear are:
 212: #    p = 1.83  -> numerical fitting constant from Komatsu et al.
 213: #  1/p = 0.54644... -> same constant
 214: #    k = 0.3173 -> another fitting constant
 215: #  7/8 (4/11)^(4/3) = 0.2271... -> fermion/boson constant for neutrino
 216: #                                   contribution -- see any cosmology book
 217: #  The Komatsu reference is: Komatsu et al. 2011, ApJS 192, 18
+218: cdef nufunc(double opz, double NeffPerNu, int nmasslessnu, list nu_y):
static PyObject *__pyx_f_5cosmo_nufunc(double __pyx_v_opz, double __pyx_v_NeffPerNu, int __pyx_v_nmasslessnu, PyObject *__pyx_v_nu_y) {
  int __pyx_v_N;
  double __pyx_v_k;
  double __pyx_v_rel_mass_sum;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nufunc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cosmo.nufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+219:   cdef int N = len(nu_y)
  if (unlikely(__pyx_v_nu_y == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 219, __pyx_L1_error)
  }
  __pyx_t_1 = PyList_GET_SIZE(__pyx_v_nu_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 219, __pyx_L1_error)
  __pyx_v_N = __pyx_t_1;
+220:   cdef double k = 0.3173 / opz
  if (unlikely(__pyx_v_opz == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 220, __pyx_L1_error)
  }
  __pyx_v_k = (0.3173 / __pyx_v_opz);
+221:   cdef double rel_mass_sum = nmasslessnu
  __pyx_v_rel_mass_sum = __pyx_v_nmasslessnu;
 222:   cdef unsigned int i
+223:   for i in range(N):
  __pyx_t_2 = __pyx_v_N;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
+224:     rel_mass_sum += pow(1.0 + (k * <double>nu_y[i])**1.83, 0.54644808743)
    if (unlikely(__pyx_v_nu_y == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 224, __pyx_L1_error)
    }
    __pyx_t_5 = __pyx_PyFloat_AsDouble(PyList_GET_ITEM(__pyx_v_nu_y, __pyx_v_i)); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L1_error)
    __pyx_v_rel_mass_sum = (__pyx_v_rel_mass_sum + pow((1.0 + pow((__pyx_v_k * ((double)__pyx_t_5)), 1.83)), 0.54644808743));
  }
+225:   return 0.22710731766 * NeffPerNu * rel_mass_sum
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = PyFloat_FromDouble(((0.22710731766 * __pyx_v_NeffPerNu) * __pyx_v_rel_mass_sum)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;