Parameter-free model discrimination criterion based on steady-state coplanarity

 

Heather A. Harrington$^{*}$, Kenneth L. Ho$^{\dagger}$, Thomas Thorne$^{*}$, Michael P. H. Stumpf$^{*}$

$^{*}$Theoretical Systems Biology, Division of Molecular Biosciences, Imperial College London, Wolfson Building, London, SW7 2AZ, UK

$^{\dagger}$Courant Institute of Mathematical Sciences and Program in Computational Biology, New York University, 251 Mercer Street, New York, NY 10012

 

About this worksheet

This worksheet contains all computations referenced in:

Harrington HA, Ho KL, Thorne T, Stumpf MPH (2012) Parameter-free model discrimination criterion based on steady-state coplanarity. Proc Natl Acad Sci USA 109(39): 15746–15751. doi:10.1073/pnas.1117073109.

which were performed using Sage version:

{{{id=140| version() /// 'Sage Version 5.0, Release Date: 2012-05-14' }}}

Please read the associated paper for details.

Sage was chosen for its strength in unifying many different software packages under a central frontend, providing capabilities for symbolic and numerical computation, both of which are used extensively here. Worksheet cells typically make use of previously computed results; cells are therefore meant to be evaluated in order of their appearance.

As a preliminary, we import all required packages and define some settings for plotting.

{{{id=141| import matplotlib as mpl from matplotlib import pyplot as plt import numpy as np from numpy.linalg import norm, svd from numpy.random import lognormal from scipy.integrate import odeint from scipy.optimize import fmin_l_bfgs_b from scipy.stats import chi phi = (1 + np.sqrt(5)) / 2 dpi = 150 /// }}}

Multisite phosphorylation

We first consider the two-site phosphorylation model from [1]:

$$\begin{align} K + S_{u} &\mathop{\longleftrightarrow}^{a_{u}}_{b_{u}} K S_{u} \mathop{\longrightarrow}^{c_{uv}} K + S_{v},\\ F + S_{v} &\mathop{\longleftrightarrow}^{\alpha_{v}}_{\beta_{v}} F S_{v} \mathop{\longrightarrow}^{\gamma_{vu}} F + S_{u}, \end{align}$$

where $u, v \in \{ 0, 1 \}^{2}$ are bit strings of length two, encoding the occupancies of each site ($0$ or $1$ for the absence or presence, respectively, of a phosphate), with $u$ having less bits than $v$; $S_{u}$ is the phosphoform with phosphorylation state $u$; $K$ is a kinase, an enzyme that adds phosphates; and $F$ is a phosphatase, an enzyme that removes phosphates.

Each enzyme can be either processive (P), where more than one phosphate modification may be achieved in a single step, or distributive (D), where only one modification is allowed before the enzyme dissociates from the substrate ($c_{0011} = 0$ for $K$, $\gamma_{1100} = 0$ for $F$). This mechanistic diversity generates four competing models: PP, PD, DP, and DD; where the first letter designates the mechanism of the kinase, and the second, that of the phosphatase.

Below, we define the required variables (throughout, we follow the convention that lowercase letters denote the concentrations of the corresponding species indicated in uppercase) and parameters

$$\begin{align} \mathbf{x} &= \left( k s_{00}, k s_{01}, k s_{10}, f s_{01}, f s_{10}, f s_{11}, k, f, s_{00}, s_{01}, s_{10}, s_{11} \right),\\ \mathbf{a} &= \left( a_{00}, a_{01}, a_{10}, b_{00}, b_{01}, b_{10}, c_{0001}, c_{0010}, c_{0011}, c_{0111}, c_{1011}, \alpha_{01}, \alpha_{10}, \alpha_{11}, \beta_{01}, \beta_{10}, \beta_{11}, \gamma_{0100}, \gamma_{1000}, \gamma_{1100}, \gamma_{1101}, \gamma_{1110} \right), \end{align}$$

respectively, where we have ordered $\mathbf{x}$ in anticipation of eliminating all variables except the $s_{u}$ using Gröbner basis methods.

{{{id=143| params = [] varias = [] params.extend(['a_00', 'a_01', 'a_10']) params.extend(['b_00', 'b_01', 'b_10']) params.extend(['c_0001', 'c_0010', 'c_0011', 'c_0111', 'c_1011']) params.extend(['alpha_01', 'alpha_10', 'alpha_11']) params.extend(['beta_01', 'beta_10', 'beta_11']) params.extend(['gamma_0100', 'gamma_1000', 'gamma_1100', 'gamma_1101', 'gamma_1110']) varias.extend(['ks_00', 'ks_01', 'ks_10', 'fs_01', 'fs_10', 'fs_11', 'k', 'f']) varias.extend(['s_00', 's_01', 's_10', 's_11']) /// }}}

We construct the polynomial ring $\mathbb{Q} [\mathbf{a}]$ in the parameters $\mathbf{a}$ with coefficients from the rational numbers $\mathbb{Q}$. The field over which we will perform all Gröbner basis calculations is the fraction field $\mathbb{K}$ of $\mathbb{Q} [\mathbf{a}]$, i.e., the polynomials generating the corresponding ideal are elements of $\mathbb{K} [\mathbf{x}]$.

{{{id=144| R = PolynomialRing(QQ, params) R.inject_variables() R = PolynomialRing(FractionField(R), varias, order='lex') R.inject_variables() /// Defining a_00, a_01, a_10, b_00, b_01, b_10, c_0001, c_0010, c_0011, c_0111, c_1011, alpha_01, alpha_10, alpha_11, beta_01, beta_10, beta_11, gamma_0100, gamma_1000, gamma_1100, gamma_1101, gamma_1110 Defining ks_00, ks_01, ks_10, fs_01, fs_10, fs_11, k, f, s_00, s_01, s_10, s_11 }}}

We then define the dynamics $\dot{\mathbf{x}} = \mathbf{f} (\mathbf{x})$ governing the PP system, assuming mass-action kinetics. The dynamics of the other models will be derived from this by setting $c_{0011} = 0$ or $\gamma_{1100} = 0$ as appropriate.

{{{id=142| f = [a_00*k*s_00 - (b_00 + c_0001 + c_0010 + c_0011)*ks_00, a_01*k*s_01 - (b_01 + c_0111)*ks_01, a_10*k*s_10 - (b_10 + c_1011)*ks_10, alpha_01*f*s_01 - (beta_01 + gamma_0100)*fs_01, alpha_10*f*s_10 - (beta_10 + gamma_1000)*fs_10, alpha_11*f*s_11 - (beta_11 + gamma_1100 + gamma_1101 + gamma_1110)*fs_11, -a_00*k*s_00 + (b_00 + c_0001 + c_0010 + c_0011)*ks_00 - a_01*k*s_01 + (b_01 + c_0111)*ks_01 - a_10*k*s_10 + (b_10 + c_1011)*ks_10, -alpha_01*f*s_01 + (beta_01 + gamma_0100)*fs_01 - alpha_10*f*s_10 + (beta_10 + gamma_1000)*fs_10 - alpha_11*f*s_11 + (beta_11 + gamma_1100 + gamma_1101 + gamma_1110)*fs_11, -a_00*k*s_00 + b_00*ks_00 + gamma_0100*fs_01 + gamma_1000*fs_10 + gamma_1100*fs_11, -a_01*k*s_01 + b_01*ks_01 + c_0001*ks_00 - alpha_01*f*s_01 + beta_01*fs_01 + gamma_1101*fs_11, -a_10*k*s_10 + b_10*ks_10 + c_0010*ks_00 - alpha_10*f*s_10 + beta_10*fs_10 + gamma_1110*fs_11, -alpha_11*f*s_11 + beta_11*fs_11 + c_0111*ks_01 + c_1011*ks_10 + c_0011*ks_00] /// }}}

As a check, we make sure that the following conservations are satisfied:

{{{id=145| pretty_print('conservation of kinase ($K$): %s' % ((f[0] + f[1] + f[2] + f[6]) == 0)) pretty_print('conservation of phosphatase ($F$): %s' % ((f[3] + f[4] + f[5] + f[7]) == 0)) pretty_print('conservation of substrate ($S$): %s' % ((f[0] + f[1] + f[2] + f[3] + f[4] + f[5] + f[8] + f[9] + f[10] + f[11]) == 0)) /// }}}

To obtain the dynamics for the PD, DP, and DD models, we need to apply certain replacement rules to the dynamics of the PP model. Sage has an internal facility for assigning variables to specific values, but there is some issue when the base rings are complicated. Below, we define a small hack that allows this to be done.

{{{id=147| def replace(f, d): return sum(map(lambda x,y: x*y, map(lambda x: x.subs(d), f.coefficients()), f.monomials())) /// }}}

We now compute the reduced Gröbner basis of each model with respect to the lexicographic ordering over the field $\mathbb{K}$.

phi = (1 + np.sqrt(5)) / 2
dpi = 150
{{{id=41| dynams = {} groebs = {} /// }}}

The PP model is first. There are twelve polynomials in the Gröbner basis, with variables:

{{{id=126| dynams['PP'] = f groebs['PP'] = R.ideal(dynams['PP']).groebner_basis() for g in groebs['PP']: pretty_print(g.variables()) /// }}}

Next is the PD model, with variables:

{{{id=150| dynams['PD'] = map(lambda x: replace(x, {gamma_1100: 0}), f) groebs['PD'] = R.ideal(dynams['PD']).groebner_basis() for g in groebs['PD']: pretty_print(g.variables()) /// }}}

Then comes the DP model, with variables:

{{{id=152| dynams['DP'] = map(lambda x: replace(x, {c_0011: 0}), f) groebs['DP'] = R.ideal(dynams['DP']).groebner_basis() for g in groebs['DP']: pretty_print(g.variables()) /// }}}

Finally, we consider the DD model, whose basis polynomials have variables:

{{{id=154| dynams['DD'] = map(lambda x: replace(x, {c_0011: 0, gamma_1100: 0}), f) groebs['DD'] = R.ideal(dynams['DD']).groebner_basis() for g in groebs['DD']: pretty_print(g.variables()) /// }}}

Each model evidently has twelve basis polynomial, none of which contain only the variables $s_{u}$. The last three come close, but all contain also the phosphatase concentration $f$. As in [1], however, we find that all three polynomials are of the form $p(f, s_{00}, s_{01}, s_{10}, s_{11}) = f \cdot q(s_{00}, s_{01}, s_{10}, s_{11})$:

{{{id=115| models = ['PP', 'PD', 'DP', 'DD'] for model in models: print 'monomials in model %s:' % model for i in [9..11]: pretty_print(groebs[model][i].monomials()) print /// monomials in model PP: monomials in model PD: monomials in model DP: monomials in model DD: }}}

hence implying that we can simply divide through by $f \neq 0$ ($f = 0$ only if there is no phosphatase in the system, which we assume not to be the case). For convenience, we also multiply through by the denominator so that all coefficients are elements of $\mathbb{Q} [\mathbf{a}]$ instead of $\mathbb{K}$ (this avoids "division by zero" issues in invariant minimization, though we have to check that we are not multiplying by zero and trivializing the invariant). This gives us three steady-state invariants for each model, in the variables $s_{00}$, $s_{01}$, $s_{10}$, and $s_{11}$ only.

{{{id=431| var_obs = ['s_00', 's_01', 's_10', 's_11'] R = PolynomialRing(QQ, params) R = PolynomialRing(FractionField(R), var_obs, order='lex') forget() for p in params: assume(var(p) > 0) invars = {} for model in models: print 'positive denominators for model %s:' % model invars[model] = [] for I in groebs[model][9:]: I = I.subs(f=1) denom = I.denominator() print bool(denom > 0) I *= denom invars[model].append(I) print /// positive denominators for model PP: True True True positive denominators for model PD: True True True positive denominators for model DP: True True True positive denominators for model DD: True True True }}}

We check that the resulting polynomials consist only of the variables $s_{00}$, $s_{01}$, $s_{10}$, and $s_{11}$ by listing the monomials in each invariant:

{{{id=163| for model in models: print 'monomials in model %s:' % model for I in invars[model]: pretty_print(I.monomials()) print /// monomials in model PP: monomials in model PD: monomials in model DP: monomials in model DD: }}}

Now that we have our steady-state invariants, we need to generate data on which to test our model selection heuristics. We do this by integrating the dynamics for each model above until steady state, using the solver LSODA from ODEPACK. Below, we define the dynamics functions required for LSODA, using Cython for acceleration.

First, the PP dynamics:

{{{id=240| %cython import numpy as np cimport numpy as np cdouble = np.double ctypedef np.double_t cdouble_t cpdef np.ndarray ode_PP(np.ndarray[cdouble_t] x, double t, double a_00, double a_01, double a_10, double b_00, double b_01, double b_10, double c_0001, double c_0010, double c_0011, double c_0111, double c_1011, double alpha_01, double alpha_10, double alpha_11, double beta_01, double beta_10, double beta_11, double gamma_0100, double gamma_1000, double gamma_1100, double gamma_1101, double gamma_1110): cdef double ks_00 = x[ 0] cdef double ks_01 = x[ 1] cdef double ks_10 = x[ 2] cdef double fs_01 = x[ 3] cdef double fs_10 = x[ 4] cdef double fs_11 = x[ 5] cdef double k = x[ 6] cdef double f = x[ 7] cdef double s_00 = x[ 8] cdef double s_01 = x[ 9] cdef double s_10 = x[10] cdef double s_11 = x[11] return np.array( [(-b_00 - c_0001 - c_0010 - c_0011)*ks_00 + a_00*k*s_00, (-b_01 - c_0111)*ks_01 + a_01*k*s_01, (-b_10 - c_1011)*ks_10 + a_10*k*s_10, (-beta_01 - gamma_0100)*fs_01 + alpha_01*f*s_01, (-beta_10 - gamma_1000)*fs_10 + alpha_10*f*s_10, (-beta_11 - gamma_1100 - gamma_1101 - gamma_1110)*fs_11 + alpha_11*f*s_11, (b_00 + c_0001 + c_0010 + c_0011)*ks_00 + (b_01 + c_0111)*ks_01 + (b_10 + c_1011)*ks_10 + (-a_00)*k*s_00 + (-a_01)*k*s_01 + (-a_10)*k*s_10, (beta_01 + gamma_0100)*fs_01 + (beta_10 + gamma_1000)*fs_10 + (beta_11 + gamma_1100 + gamma_1101 + gamma_1110)*fs_11 + (-alpha_01)*f*s_01 + (-alpha_10)*f*s_10 + (-alpha_11)*f*s_11, b_00*ks_00 + gamma_0100*fs_01 + gamma_1000*fs_10 + gamma_1100*fs_11 + (-a_00)*k*s_00, c_0001*ks_00 + b_01*ks_01 + beta_01*fs_01 + gamma_1101*fs_11 + (-a_01)*k*s_01 + (-alpha_01)*f*s_01, c_0010*ks_00 + b_10*ks_10 + beta_10*fs_10 + gamma_1110*fs_11 + (-a_10)*k*s_10 + (-alpha_10)*f*s_10, c_0011*ks_00 + c_0111*ks_01 + c_1011*ks_10 + beta_11*fs_11 + (-alpha_11)*f*s_11]) /// }}}

Then the PD dynamics:

{{{id=190| %cython import numpy as np cimport numpy as np cdouble = np.double ctypedef np.double_t cdouble_t cpdef np.ndarray ode_PD(np.ndarray[cdouble_t] x, double t, double a_00, double a_01, double a_10, double b_00, double b_01, double b_10, double c_0001, double c_0010, double c_0011, double c_0111, double c_1011, double alpha_01, double alpha_10, double alpha_11, double beta_01, double beta_10, double beta_11, double gamma_0100, double gamma_1000, double gamma_1100, double gamma_1101, double gamma_1110): cdef double ks_00 = x[ 0] cdef double ks_01 = x[ 1] cdef double ks_10 = x[ 2] cdef double fs_01 = x[ 3] cdef double fs_10 = x[ 4] cdef double fs_11 = x[ 5] cdef double k = x[ 6] cdef double f = x[ 7] cdef double s_00 = x[ 8] cdef double s_01 = x[ 9] cdef double s_10 = x[10] cdef double s_11 = x[11] return np.array( [(-b_00 - c_0001 - c_0010 - c_0011)*ks_00 + a_00*k*s_00, (-b_01 - c_0111)*ks_01 + a_01*k*s_01, (-b_10 - c_1011)*ks_10 + a_10*k*s_10, (-beta_01 - gamma_0100)*fs_01 + alpha_01*f*s_01, (-beta_10 - gamma_1000)*fs_10 + alpha_10*f*s_10, (-beta_11 - gamma_1101 - gamma_1110)*fs_11 + alpha_11*f*s_11, (b_00 + c_0001 + c_0010 + c_0011)*ks_00 + (b_01 + c_0111)*ks_01 + (b_10 + c_1011)*ks_10 + (-a_00)*k*s_00 + (-a_01)*k*s_01 + (-a_10)*k*s_10, (beta_01 + gamma_0100)*fs_01 + (beta_10 + gamma_1000)*fs_10 + (beta_11 + gamma_1101 + gamma_1110)*fs_11 + (-alpha_01)*f*s_01 + (-alpha_10)*f*s_10 + (-alpha_11)*f*s_11, b_00*ks_00 + gamma_0100*fs_01 + gamma_1000*fs_10 + (-a_00)*k*s_00, c_0001*ks_00 + b_01*ks_01 + beta_01*fs_01 + gamma_1101*fs_11 + (-a_01)*k*s_01 + (-alpha_01)*f*s_01, c_0010*ks_00 + b_10*ks_10 + beta_10*fs_10 + gamma_1110*fs_11 + (-a_10)*k*s_10 + (-alpha_10)*f*s_10, c_0011*ks_00 + c_0111*ks_01 + c_1011*ks_10 + beta_11*fs_11 + (-alpha_11)*f*s_11]) /// }}}

Next, the DP dynamics:

{{{id=191| %cython import numpy as np cimport numpy as np cdouble = np.double ctypedef np.double_t cdouble_t cpdef np.ndarray ode_DP(np.ndarray[cdouble_t] x, double t, double a_00, double a_01, double a_10, double b_00, double b_01, double b_10, double c_0001, double c_0010, double c_0011, double c_0111, double c_1011, double alpha_01, double alpha_10, double alpha_11, double beta_01, double beta_10, double beta_11, double gamma_0100, double gamma_1000, double gamma_1100, double gamma_1101, double gamma_1110): cdef double ks_00 = x[ 0] cdef double ks_01 = x[ 1] cdef double ks_10 = x[ 2] cdef double fs_01 = x[ 3] cdef double fs_10 = x[ 4] cdef double fs_11 = x[ 5] cdef double k = x[ 6] cdef double f = x[ 7] cdef double s_00 = x[ 8] cdef double s_01 = x[ 9] cdef double s_10 = x[10] cdef double s_11 = x[11] return np.array( [(-b_00 - c_0001 - c_0010)*ks_00 + a_00*k*s_00, (-b_01 - c_0111)*ks_01 + a_01*k*s_01, (-b_10 - c_1011)*ks_10 + a_10*k*s_10, (-beta_01 - gamma_0100)*fs_01 + alpha_01*f*s_01, (-beta_10 - gamma_1000)*fs_10 + alpha_10*f*s_10, (-beta_11 - gamma_1100 - gamma_1101 - gamma_1110)*fs_11 + alpha_11*f*s_11, (b_00 + c_0001 + c_0010)*ks_00 + (b_01 + c_0111)*ks_01 + (b_10 + c_1011)*ks_10 + (-a_00)*k*s_00 + (-a_01)*k*s_01 + (-a_10)*k*s_10, (beta_01 + gamma_0100)*fs_01 + (beta_10 + gamma_1000)*fs_10 + (beta_11 + gamma_1100 + gamma_1101 + gamma_1110)*fs_11 + (-alpha_01)*f*s_01 + (-alpha_10)*f*s_10 + (-alpha_11)*f*s_11, b_00*ks_00 + gamma_0100*fs_01 + gamma_1000*fs_10 + gamma_1100*fs_11 + (-a_00)*k*s_00, c_0001*ks_00 + b_01*ks_01 + beta_01*fs_01 + gamma_1101*fs_11 + (-a_01)*k*s_01 + (-alpha_01)*f*s_01, c_0010*ks_00 + b_10*ks_10 + beta_10*fs_10 + gamma_1110*fs_11 + (-a_10)*k*s_10 + (-alpha_10)*f*s_10, c_0111*ks_01 + c_1011*ks_10 + beta_11*fs_11 + (-alpha_11)*f*s_11]) /// }}}

And, finally, the DD dynamics:

{{{id=167| %cython import numpy as np cimport numpy as np cdouble = np.double ctypedef np.double_t cdouble_t cpdef np.ndarray ode_DD(np.ndarray[cdouble_t] x, double t, double a_00, double a_01, double a_10, double b_00, double b_01, double b_10, double c_0001, double c_0010, double c_0011, double c_0111, double c_1011, double alpha_01, double alpha_10, double alpha_11, double beta_01, double beta_10, double beta_11, double gamma_0100, double gamma_1000, double gamma_1100, double gamma_1101, double gamma_1110): cdef double ks_00 = x[ 0] cdef double ks_01 = x[ 1] cdef double ks_10 = x[ 2] cdef double fs_01 = x[ 3] cdef double fs_10 = x[ 4] cdef double fs_11 = x[ 5] cdef double k = x[ 6] cdef double f = x[ 7] cdef double s_00 = x[ 8] cdef double s_01 = x[ 9] cdef double s_10 = x[10] cdef double s_11 = x[11] return np.array( [(-b_00 - c_0001 - c_0010)*ks_00 + a_00*k*s_00, (-b_01 - c_0111)*ks_01 + a_01*k*s_01, (-b_10 - c_1011)*ks_10 + a_10*k*s_10, (-beta_01 - gamma_0100)*fs_01 + alpha_01*f*s_01, (-beta_10 - gamma_1000)*fs_10 + alpha_10*f*s_10, (-beta_11 - gamma_1101 - gamma_1110)*fs_11 + alpha_11*f*s_11, (b_00 + c_0001 + c_0010)*ks_00 + (b_01 + c_0111)*ks_01 + (b_10 + c_1011)*ks_10 + (-a_00)*k*s_00 + (-a_01)*k*s_01 + (-a_10)*k*s_10, (beta_01 + gamma_0100)*fs_01 + (beta_10 + gamma_1000)*fs_10 + (beta_11 + gamma_1101 + gamma_1110)*fs_11 + (-alpha_01)*f*s_01 + (-alpha_10)*f*s_10 + (-alpha_11)*f*s_11, b_00*ks_00 + gamma_0100*fs_01 + gamma_1000*fs_10 + (-a_00)*k*s_00, c_0001*ks_00 + b_01*ks_01 + beta_01*fs_01 + gamma_1101*fs_11 + (-a_01)*k*s_01 + (-alpha_01)*f*s_01, c_0010*ks_00 + b_10*ks_10 + beta_10*fs_10 + gamma_1110*fs_11 + (-a_10)*k*s_10 + (-alpha_10)*f*s_10, c_0111*ks_01 + c_1011*ks_10 + beta_11*fs_11 + (-alpha_11)*f*s_11]) /// }}}

We generate random parameters for the models, sampled from a log-normal distribution with median $\mu^{*} = e^{\mu} = 1$ and multiplicative standard deviation $\sigma^{*} = e^{\sigma} = 2$, where $\mu$ and $\sigma$ are the mean and standard deviation, respectively, of the underlying normal distribution. Using these parameters, we generate $m = 100$ time course trajectories for each model by integration of the model ODEs over the time interval $0 \leq t \leq 100$; each trajectory is seeded with random initial conditions, also sampled from a log-normal distribution with $\mu^{*} = 1$ and $\sigma^{*} = 2$.

In anticipation of our experiments with noise, we also initialize our relative errors below.

{{{id=221| prms = lognormal(0, log(2), len(params)) T = 100 nt = 100 m = 100 t = np.linspace(0, T, nt) eps = [10^(-i) for i in np.arange(1, 10)] /// }}}

We now integrate the four models.

{{{id=84| data = {} for model, ode in zip(models, [ode_PP, ode_PD, ode_DP, ode_DD]): print 'Integrating model %s...' % model data[model] = np.empty((len(eps), nt, m, len(var_obs))) for i in range(m): x0 = lognormal(0, log(2), len(varias)) d = odeint(ode, x0, t, tuple(prms)) data[model][0,:,i] = d[:,8:] /// Integrating model PP... Integrating model PD... Integrating model DP... Integrating model DD... }}}

To simulate measurement error, we corrupt the data with various levels $\epsilon$ of noise by drawing random multiplicative factors from log-normal distributions with $\mu^{*} = 1$ and $\sigma^{*} = 1 + \epsilon$, i.e., $\epsilon$ is the relative (multiplicative) error.

{{{id=335| for model in models: for i, err in enumerate(eps[1:]): data[model][i+1] = data[model][0] * lognormal(0, log(1+err), np.shape(data[model][0])) data[model][0] *= lognormal(0, log(1+eps[0]), np.shape(data[model][0])) /// }}}

We save the data for reference.

{{{id=551| save(data, 'phos_data') /// }}}

To facilitate the analysis, we load the precomputed data. This is simply for the purpose of saving time; further simulations have indicated that the saved data are representative of the general case.

{{{id=494| data = load(DATA + 'phos_data') /// }}}

To compute the coplanarity error $\Delta$, we need to consider the Jacobian of the variable transformation $\varphi$ taking the original variables to the transformed variables in each steady-state invariant. This is implemented below along with various auxiliary functions.

{{{id=488| def data_matrix(data, invar): p = invar.exponents() m, n = data.shape l = len(p) A = np.empty((m, l)) for i in range(m): for j in range(l): A[i,j] = np.prod(data[i]^p[j][-n:]) return A def transf_grad(invar): exp = invar.exponents() n = len(exp[0]) grad = [] for p in exp: g = [] for i in range(n): coeff = p[i] power = list(p) power[i] -= 1 g.append((coeff, power)) grad.append(g) return grad def coplan_err(data, invar, err): m, n = data.shape A = data_matrix(data, invar) grad = [[(x[0], x[1][-n:]) for x in y[-n:]] for y in transf_grad(invar)] for i in range(m): J = np.array([[x[0]*np.prod(data[i]^x[1]) for x in y] for y in grad]) dxi = np.dot(J, data[i]) * err err_eff = norm(dxi, np.inf) A[i] /= err_eff return norm(A, -2) /// }}}

We now compute the coplanarity error $\Delta$ for each model over each set of time course trajectories. The required computation is essentially a singular value decomposition over the data as organized by the steady-state invariants.

{{{id=177| err_coplan = {} /// }}}

The computation is quite lengthy, so we separate the process into four parts. First, we analyze each invariant on data from the PP model:

{{{id=358| dm = 'PP' err_coplan[dm] = {} for im in models: print 'Analyzing data/model pair %s/%s...' % (dm, im) err_coplan[dm][im] = [] for i, err in enumerate(eps): Delta = [] for j in range(nt): delta = [] for I in invars[im]: delta.append(coplan_err(data[dm][i,j], I, err)) Delta.append(delta) err_coplan[dm][im].append(Delta) /// Analyzing data/model pair PP/PP... Analyzing data/model pair PP/PD... Analyzing data/model pair PP/DP... Analyzing data/model pair PP/DD... }}}

Then we do the same for data from the PD model:

{{{id=361| dm = 'PD' err_coplan[dm] = {} for im in models: print 'Analyzing data/model pair %s/%s...' % (dm, im) err_coplan[dm][im] = [] for i, err in enumerate(eps): Delta = [] for j in range(nt): delta = [] for I in invars[im]: delta.append(coplan_err(data[dm][i,j], I, err)) Delta.append(delta) err_coplan[dm][im].append(Delta) /// Analyzing data/model pair PD/PP... Analyzing data/model pair PD/PD... Analyzing data/model pair PD/DP... Analyzing data/model pair PD/DD... }}}

Next for the DP model:

{{{id=360| dm = 'DP' err_coplan[dm] = {} for im in models: print 'Analyzing data/model pair %s/%s...' % (dm, im) err_coplan[dm][im] = [] for i, err in enumerate(eps): Delta = [] for j in range(nt): delta = [] for I in invars[im]: delta.append(coplan_err(data[dm][i,j], I, err)) Delta.append(delta) err_coplan[dm][im].append(Delta) /// Analyzing data/model pair DP/PP... Analyzing data/model pair DP/PD... Analyzing data/model pair DP/DP... Analyzing data/model pair DP/DD... }}}

And finally for the DD model:

{{{id=359| dm = 'DD' err_coplan[dm] = {} for im in models: print 'Analyzing data/model pair %s/%s...' % (dm, im) err_coplan[dm][im] = [] for i, err in enumerate(eps): Delta = [] for j in range(nt): delta = [] for I in invars[im]: delta.append(coplan_err(data[dm][i,j], I, err)) Delta.append(delta) err_coplan[dm][im].append(Delta) /// Analyzing data/model pair DD/PP... Analyzing data/model pair DD/PD... Analyzing data/model pair DD/DP... Analyzing data/model pair DD/DD... }}}

As before, we save the coplanarity errors for reference.

{{{id=553| save(err_coplan, 'phos_err_coplan') /// }}}

For subsequent analysis, we load the precomputed data.

{{{id=365| err_coplan = load(DATA + 'phos_err_coplan') /// }}}

The coplanarity errors for each model/data pair are shown below at $\epsilon = 10^{-9}$, from which it is clear that the DP/DD models can be rejected on the basis of PP/PD data.

{{{id=181| for dm in models: print 'Data %s:' % dm for im in models: print ' Model %s:' % im try: for i, err in enumerate(err_coplan[dm][im][-1][-1]): print ' %i: %g (p = %g)' % (i, err, 1-chi.cdf(err,m)) except: pass /// Data PP: Model PP: 0: 0.818331 (p = 1) 1: 0.752213 (p = 1) 2: 0.952091 (p = 1) Model PD: 0: 0.818331 (p = 1) 1: 0.752213 (p = 1) 2: 0.952091 (p = 1) Model DP: 0: 0.14954 (p = 1) 1: 248978 (p = 0) 2: 0.952091 (p = 1) Model DD: 0: 0.14954 (p = 1) 1: 248978 (p = 0) 2: 0.952091 (p = 1) Data PD: Model PP: 0: 0.723883 (p = 1) 1: 0.596507 (p = 1) 2: 0.995452 (p = 1) Model PD: 0: 0.723883 (p = 1) 1: 0.596507 (p = 1) 2: 0.995452 (p = 1) Model DP: 0: 0.142096 (p = 1) 1: 406268 (p = 0) 2: 0.995452 (p = 1) Model DD: 0: 0.142096 (p = 1) 1: 406268 (p = 0) 2: 0.995452 (p = 1) Data DP: Model PP: 0: 1.22594 (p = 1) 1: 1.23106 (p = 1) 2: 1.43336 (p = 1) Model PD: 0: 1.22594 (p = 1) 1: 1.23106 (p = 1) 2: 1.43336 (p = 1) Model DP: 0: 0.403542 (p = 1) 1: 1.23106 (p = 1) 2: 1.43336 (p = 1) Model DD: 0: 0.403542 (p = 1) 1: 1.23106 (p = 1) 2: 1.43336 (p = 1) Data DD: Model PP: 0: 1.09431 (p = 1) 1: 1.09431 (p = 1) 2: 1.44749 (p = 1) Model PD: 0: 1.09431 (p = 1) 1: 1.09431 (p = 1) 2: 1.44749 (p = 1) Model DP: 0: 0.318989 (p = 1) 1: 1.12753 (p = 1) 2: 1.44749 (p = 1) Model DD: 0: 0.318989 (p = 1) 1: 1.12753 (p = 1) 2: 1.44749 (p = 1) }}}

For comparison, the $\Delta$ cutoff at a significance level of $\alpha = 0.05$ is:

{{{id=552| alpha = 0.05 print 'p = %g cutoff: %g' % (alpha, chi.ppf(1-alpha, m)) /// p = 0.05 cutoff: 11.1509 }}}

We also plot the evolution of the coplanarity errors for each model pair on PP data as a function of time. The intuition is that although coplanarity is a steady-state condition, some approximation of coplanarity should be evident provided that the data are reasonably close to steady state. The results suggest that the method can also be effective for time course data near steady state, provided that there is not too much noise.

{{{id=372| figw = 8.7 / 2.54 figh = figw / phi * 0.65 mpl.rc('axes', labelsize='xx-small') mpl.rc('legend', fontsize='xx-small') mpl.rc('xtick', labelsize='xx-small') mpl.rc('ytick', labelsize='xx-small') plt.figure(figsize=(figw, figh)) ax = plt.subplot(121) err = np.array(err_coplan['PP']['PP'][7]) eps9 = plt.semilogy(t, err[:,0], 'b-') plt.semilogy(t, err[:,1], 'g-') plt.semilogy(t, err[:,2], 'r-') err = np.array(err_coplan['PP']['PP'][4]) eps6 = plt.semilogy(t, err[:,0], 'b--') plt.semilogy(t, err[:,1], 'g--') plt.semilogy(t, err[:,2], 'r--') err = np.array(err_coplan['PP']['PP'][1]) eps3 = plt.semilogy(t, err[:,0], 'b:') plt.semilogy(t, err[:,1], 'g:') plt.semilogy(t, err[:,2], 'r:') plt.ylabel(r'Coplanarity error ($\Delta$)') plt.xticks([]) plt.text(0.925, 0.85, 'PP/PD', fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.subplot(122, sharey=ax) err = np.array(err_coplan['PP']['DD'][7]) plt.semilogy(t, err[:,0], 'b-') plt.semilogy(t, err[:,1], 'g-') plt.semilogy(t, err[:,2], 'r-') err = np.array(err_coplan['PP']['DD'][4]) plt.semilogy(t, err[:,0], 'b--') plt.semilogy(t, err[:,1], 'g--') plt.semilogy(t, err[:,2], 'r--') err = np.array(err_coplan['PP']['DD'][1]) plt.semilogy(t, err[:,0], 'b:') plt.semilogy(t, err[:,1], 'g:') plt.semilogy(t, err[:,2], 'r:') plt.xticks([]) plt.setp(plt.gca().get_yticklabels(), visible=False) plt.text(0.925, 0.85, 'DP/DD', fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.figtext(0.56, 0.20, r'Time ($t$)', size='xx-small', ha='center') plt.figlegend((eps9, eps6, eps3), (r'$\epsilon = 10^{-9}$', r'$\epsilon = 10^{-6}$', r'$\epsilon = 10^{-3}$'), (0.23, 0.01), ncol=3) plt.subplots_adjust(left=0.15, right=0.99, bottom=0.3, top=0.925, wspace=0.1) plt.savefig('sage.png', dpi=dpi) plt.close() mpl.rcdefaults() /// }}}

The results clearly demonstrate that our rejection power decreases with noise. To estimate the critical noise level below which the DP/DD models can be rejected from PP data, we plot the DP/DD coplanarity errors at steady state as a function of $\epsilon$, which suggests a cutoff of $\epsilon \sim 10^{-4}$ for $\alpha = 0.05$.

{{{id=373| figw = 8.7 / 2.54 * 0.75 figh = figw / phi mpl.rc('axes', labelsize='xx-small') mpl.rc('xtick', labelsize='xx-small') mpl.rc('ytick', labelsize='xx-small') err = [x[-1] for x in err_coplan['PP']['DD']] plt.figure(figsize=(figw, figh)) plt.loglog(eps, err) plt.xlabel(r'Measurement error ($\epsilon$)') plt.ylabel(r'Coplanarity error ($\Delta$)') eps0 = np.interp([chi.ppf(1-alpha, m)], [x[1] for x in err], eps) plt.axvspan(eps[-1], eps0, alpha=0.25, color='k') plt.subplots_adjust(left=0.20, right=0.95, bottom=0.25, top=0.95) plt.savefig('sage.png', dpi=dpi) plt.close() mpl.rcdefaults() /// }}}

Next, we try using invariant minimization as a discrimination tool between the phosphorylation models. We hence define the invariant error and its log-likelihood for each model below, consisting of the values of all invariants over all data, with each value scaled as appropriate:

First, for the PP model:

{{{id=526| %cython import numpy as np cimport numpy as np from scipy.special import gamma cdouble = np.double ctypedef np.double_t cdouble_t cpdef coeffs_PP(int i, np.ndarray[cdouble_t] a): cdef double a_00 = a[ 0] cdef double a_01 = a[ 1] cdef double a_10 = a[ 2] cdef double b_00 = a[ 3] cdef double b_01 = a[ 4] cdef double b_10 = a[ 5] cdef double c_0001 = a[ 6] cdef double c_0010 = a[ 7] cdef double c_0011 = a[ 8] cdef double c_0111 = a[ 9] cdef double c_1011 = a[10] cdef double alpha_01 = a[11] cdef double alpha_10 = a[12] cdef double alpha_11 = a[13] cdef double beta_01 = a[14] cdef double beta_10 = a[15] cdef double beta_11 = a[16] cdef double gamma_0100 = a[17] cdef double gamma_1000 = a[18] cdef double gamma_1100 = a[19] cdef double gamma_1101 = a[20] cdef double gamma_1110 = a[21] if i == 0: coeffs = np.array([a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*beta_11*gamma_0100 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*beta_11*gamma_0100 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*gamma_0100*gamma_1100 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110, -a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*beta_10*gamma_1100 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1100 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1100 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_10*gamma_0100*gamma_1100 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1100 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*gamma_1000*gamma_1100 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1100 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*beta_10*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, -a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0011**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0011**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0011**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0011**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0011**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0011**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0011**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0011**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0011**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0011**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0011**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0011**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, -a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0001**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101]) elif i == 1: coeffs = np.array([a_00*b_01*b_10*c_0011*alpha_10*beta_11*gamma_1000 + a_00*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_1000 + a_00*b_01*c_0011*c_1011*alpha_10*beta_11*gamma_1000 + a_00*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_00*b_01*b_10*c_0011*alpha_10*gamma_1000*gamma_1100 + a_00*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1100 + a_00*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1100 + a_00*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_00*b_01*b_10*c_0011*alpha_10*gamma_1000*gamma_1101 + a_00*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1101 + a_00*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1101 + a_00*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_00*b_01*b_10*c_0011*alpha_10*gamma_1000*gamma_1110 + a_00*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1110 + a_00*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1110 + a_00*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, -a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1100 - a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1100 - a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1100 - a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1100 - a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1100 - a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1100 - a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1100 - a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 - a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1101 - a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1101 - a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 - a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1101 - a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1101 - a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 - a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1110 - a_00*b_01*b_10*c_0011*alpha_11*beta_10*gamma_1110 - a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 - a_00*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_1110 - a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1110 - a_00*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_1110 - a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_00*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1110 - a_00*b_01*b_10*c_0011*alpha_11*gamma_1000*gamma_1110 - a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 - a_00*b_10*c_0011*c_0111*alpha_11*gamma_1000*gamma_1110 - a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1110 - a_00*b_01*c_0011*c_1011*alpha_11*gamma_1000*gamma_1110 - a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_00*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, a_01*b_00*b_10*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1100 + a_01*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1100 + a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_01*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, -a_01*b_00*b_10*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*b_00*b_10*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_01*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, a_10*b_00*b_01*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_01*c_0011*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 + a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, a_10*b_00*b_01*c_1011*alpha_11*beta_10*gamma_1100 + a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1100 + a_10*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_1100 + a_10*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1100 + a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1100 + a_10*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1100 + a_10*b_00*b_01*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*b_01*c_0001*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*b_01*c_0011*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 + a_10*b_00*b_01*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_00*b_01*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101]) elif i == 2: coeffs = np.array([a_01*b_10*c_0010*c_0111*alpha_01*beta_10*beta_11*gamma_0100 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_01*b_10*c_0010*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110, a_10*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_01*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_01*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, a_01*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101]) return coeffs cpdef monoms_PP(int i, np.ndarray[cdouble_t] x): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: monoms = np.array([s_00*s_01, s_00*s_11, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 1: monoms = np.array([s_00*s_10, s_00*s_11, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 2: monoms = np.array([s_01**2, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) return monoms cpdef dxi_PP(int i, np.ndarray[cdouble_t] x, double eps): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: dxi = np.array([2*s_00*s_01, 2*s_00*s_11, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 1: dxi = np.array([2*s_00*s_10, 2*s_00*s_11, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 2: dxi = np.array([2*s_01**2, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) return dxi*eps cpdef inv_PP(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_PP(i, a) for j from 0 <= j < m: monoms = monoms_PP(i, x[j]) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(monoms)) return np.linalg.norm(I, 'fro') cpdef logL_PP(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x, double eps): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_PP(i, a) for j from 0 <= j < m: monoms = monoms_PP(i, x[j]) dxi = dxi_PP(i, x[j], eps) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(dxi)) cdef double nrm = np.linalg.norm(I, 'fro') logL = (1 - 0.5*m)*np.log(2) + (m - 1)*np.log(nrm) - 0.5*nrm**2 - np.log(gamma(0.5*m)) return logL /// }}}

Then for the PD model:

{{{id=205| %cython import numpy as np cimport numpy as np from scipy.special import gamma cdouble = np.double ctypedef np.double_t cdouble_t cpdef coeffs_PD(int i, np.ndarray[cdouble_t] a): cdef double a_00 = a[ 0] cdef double a_01 = a[ 1] cdef double a_10 = a[ 2] cdef double b_00 = a[ 3] cdef double b_01 = a[ 4] cdef double b_10 = a[ 5] cdef double c_0001 = a[ 6] cdef double c_0010 = a[ 7] cdef double c_0011 = a[ 8] cdef double c_0111 = a[ 9] cdef double c_1011 = a[10] cdef double alpha_01 = a[11] cdef double alpha_10 = a[12] cdef double alpha_11 = a[13] cdef double beta_01 = a[14] cdef double beta_10 = a[15] cdef double beta_11 = a[16] cdef double gamma_0100 = a[17] cdef double gamma_1000 = a[18] cdef double gamma_1100 = a[19] cdef double gamma_1101 = a[20] cdef double gamma_1110 = a[21] if i == 0: coeffs = np.array([a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*beta_11*gamma_0100 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*beta_11*gamma_0100 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 01 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_00*b_01*b_10*c_0010*c_0011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_00*b_10*c_0010*c_0011*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_00*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_00*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 10, -a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0010*c_0011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_10*c_0010*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*c_0010*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 01 - a_00*c_0010*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 01 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*beta_10*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 10, -a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_100\ 0 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_110\ 1 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0011**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 01 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 01 - a_10*c_0011**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0011**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_\ 1101 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01 + a_01*c_0011**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_01*c_0011**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_10*c_0011**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0011**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_111\ 0 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_01*c_0011**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*b_00*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0010*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0011**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*b_00*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 10 - a_10*c_0010*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 10 - a_10*c_0011**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10 + a_01*b_10*c_0010*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0011**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10 + a_01*b_00*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_\ 1110 + a_01*c_0010*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10 + a_01*c_0011**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, -a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_111\ 0 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_111\ 0 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*c_0011**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_00*b_10*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - 2*a_01*b_10*c_0001*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_11\ 10 - a_01*b_10*c_0010*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0011**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 10 - a_01*b_00*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 - 2*a_01*c_0001*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_\ 1110 - a_01*c_0010*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 10 - a_01*c_0011**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0011*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10 + a_10*c_0001*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10, a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_110\ 1 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_110\ 1 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*c_0011**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + 2*a_10*b_01*c_0001*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 01 + a_10*b_01*c_0010*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0011**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 01 + a_10*b_00*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 + 2*a_10*c_0001*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_\ 1101 + a_10*c_0010*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 01 + a_10*c_0011**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101]) elif i == 1: coeffs = np.array([a_00*b_01*b_10*c_0011*alpha_10*beta_11*gamma_1000 + a_00*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_1000 + a_00*b_01*c_0011*c_1011*alpha_10*beta_11*gamma_1000 + a_00*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_00*b_01*b_10*c_0011*alpha_10*gamma_1000*gamma_1101 + a_00*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1101 + a_00*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1101 + a_00*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_00*b_01*b_10*c_0011*alpha_10*gamma_1000*gamma_1110 + a_00*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1110 + a_00*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1110 + a_00*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, -a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1101 - a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1101 - a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 - a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1101 - a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1101 - a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 - a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1110 - a_00*b_01*b_10*c_0011*alpha_11*beta_10*gamma_1110 - a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 - a_00*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_1110 - a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1110 - a_00*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_1110 - a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_00*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1110 - a_00*b_01*b_10*c_0011*alpha_11*gamma_1000*gamma_1110 - a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 - a_00*b_10*c_0011*c_0111*alpha_11*gamma_1000*gamma_1110 - a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1110 - a_00*b_01*c_0011*c_1011*alpha_11*gamma_1000*gamma_1110 - a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_00*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, a_01*b_00*b_10*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_1000 + a_01*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1101 + a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_10*gamma_1000*gamma_1110 + a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, -a_01*b_00*b_10*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_1110 - a_01*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1110 - a_01*b_00*b_10*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_11*gamma_1000*gamma_1110 - a_01*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_01*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, a_10*b_00*b_01*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_01*c_0011*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_1000 + a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 + a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_01*c_0011*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 + a_10*c_0011*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, a_10*b_00*b_01*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_10*b_00*b_01*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_01*c_0001*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101]) elif i == 2: coeffs = np.array([a_01*b_10*c_0010*c_0111*alpha_01*beta_10*beta_11*gamma_0100 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_01*b_10*c_0010*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110, a_10*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*beta_11*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0011*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*b_10*c_0011*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*b_01*c_0011*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*c_0011*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0011*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0011*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0011*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0011*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, a_01*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0011*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0011*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0011*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101]) return coeffs cpdef monoms_PD(int i, np.ndarray[cdouble_t] x): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: monoms = np.array([s_00*s_01, s_00*s_11, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 1: monoms = np.array([s_00*s_10, s_00*s_11, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 2: monoms = np.array([s_01**2, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) return monoms cpdef dxi_PD(int i, np.ndarray[cdouble_t] x, double eps): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: dxi = np.array([2*s_00*s_01, 2*s_00*s_11, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 1: dxi = np.array([2*s_00*s_10, 2*s_00*s_11, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 2: dxi = np.array([2*s_01**2, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) return dxi*eps cpdef inv_PD(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_PD(i, a) for j from 0 <= j < m: monoms = monoms_PD(i, x[j]) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(monoms)) return np.linalg.norm(I, 'fro') cpdef logL_PD(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x, double eps): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_PD(i, a) for j from 0 <= j < m: monoms = monoms_PD(i, x[j]) dxi = dxi_PD(i, x[j], eps) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(dxi)) cdef double nrm = np.linalg.norm(I, 'fro') logL = (1 - 0.5*m)*np.log(2) + (m - 1)*np.log(nrm) - 0.5*nrm**2 - np.log(gamma(0.5*m)) return logL /// }}}

Next for the DP model:

{{{id=206| %cython import numpy as np cimport numpy as np from scipy.special import gamma cdouble = np.double ctypedef np.double_t cdouble_t cpdef coeffs_DP(int i, np.ndarray[cdouble_t] a): cdef double a_00 = a[ 0] cdef double a_01 = a[ 1] cdef double a_10 = a[ 2] cdef double b_00 = a[ 3] cdef double b_01 = a[ 4] cdef double b_10 = a[ 5] cdef double c_0001 = a[ 6] cdef double c_0010 = a[ 7] cdef double c_0011 = a[ 8] cdef double c_0111 = a[ 9] cdef double c_1011 = a[10] cdef double alpha_01 = a[11] cdef double alpha_10 = a[12] cdef double alpha_11 = a[13] cdef double beta_01 = a[14] cdef double beta_10 = a[15] cdef double beta_11 = a[16] cdef double gamma_0100 = a[17] cdef double gamma_1000 = a[18] cdef double gamma_1100 = a[19] cdef double gamma_1101 = a[20] cdef double gamma_1110 = a[21] if i == 0: coeffs = np.array([a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1100**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1100**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 + a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2, -a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1100**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100**2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2, -a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1100 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1100 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1100 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100**2 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100**2 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100**2 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100**2 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100**2 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100**2 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100**2 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 + a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 + a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1101 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1101 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 + a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + 3*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + 3*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 3*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 3*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + 2*a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2, -a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - a_01*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - a_01*b_10*c_0010**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - a_01*c_0010**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_10*c_0010**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2, -a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_01*c_0010**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - a_10*b_01*c_0010**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2, a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamma_1110]) elif i == 1: coeffs = np.array([a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1100 + a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1100 + a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1100 + a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1100 + a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1100 + a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1100 + a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1100 + a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 + a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1101 + a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1101 + a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 + a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1101 + a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1101 + a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 + a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1110 + a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 + a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1110 + a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1110 + a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 + a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1110 + a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, -a_01*b_00*b_10*c_0111*alpha_10*beta_11*gamma_1000 - a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_1000 - a_01*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_1000 - a_01*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_01*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1100 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1100 - a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1100 - a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 - a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 - a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1101 - a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1101 - a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1110 - a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, a_01*b_00*b_10*c_0111*alpha_11*beta_10*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 + a_01*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_01*b_00*b_10*c_0111*alpha_11*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 + a_01*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, -a_10*b_00*b_01*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_01*c_0010*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_10*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1100 - a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1100 - a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 - a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1100 - a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, -a_10*b_00*b_01*c_1011*alpha_11*beta_10*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_1100 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1100 - a_10*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1100 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1100 - a_10*b_00*b_01*c_1011*alpha_11*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_1000*gamma_1100 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1100 - a_10*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1100 - a_10*b_00*b_01*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_00*b_01*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101]) elif i == 2: coeffs = np.array([a_01*b_10*c_0010*c_0111*alpha_01*beta_10*beta_11*gamma_0100 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_01*b_10*c_0010*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110, a_10*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1100 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1100 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1100 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, a_01*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 + a_01*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1100 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101]) return coeffs cpdef monoms_DP(int i, np.ndarray[cdouble_t] x): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: monoms = np.array([s_00*s_01, s_00*s_10, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 1: monoms = np.array([s_00*s_11, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 2: monoms = np.array([s_01**2, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) return monoms cpdef dxi_DP(int i, np.ndarray[cdouble_t] x, double eps): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: dxi = np.array([2*s_00*s_01, 2*s_00*s_10, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 1: dxi = np.array([2*s_00*s_11, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 2: dxi = np.array([2*s_01**2, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) return dxi*eps cpdef inv_DP(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_DP(i, a) for j from 0 <= j < m: monoms = monoms_DP(i, x[j]) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(monoms)) return np.linalg.norm(I, 'fro') cpdef logL_DP(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x, double eps): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_DP(i, a) for j from 0 <= j < m: monoms = monoms_DP(i, x[j]) dxi = dxi_DP(i, x[j], eps) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(dxi)) cdef double nrm = np.linalg.norm(I, 'fro') logL = (1 - 0.5*m)*np.log(2) + (m - 1)*np.log(nrm) - 0.5*nrm**2 - np.log(gamma(0.5*m)) return logL /// }}}

And, finally, for the DD model:

{{{id=207| %cython import numpy as np cimport numpy as np from scipy.special import gamma cdouble = np.double ctypedef np.double_t cdouble_t cpdef coeffs_DD(int i, np.ndarray[cdouble_t] a): cdef double a_00 = a[ 0] cdef double a_01 = a[ 1] cdef double a_10 = a[ 2] cdef double b_00 = a[ 3] cdef double b_01 = a[ 4] cdef double b_10 = a[ 5] cdef double c_0001 = a[ 6] cdef double c_0010 = a[ 7] cdef double c_0011 = a[ 8] cdef double c_0111 = a[ 9] cdef double c_1011 = a[10] cdef double alpha_01 = a[11] cdef double alpha_10 = a[12] cdef double alpha_11 = a[13] cdef double beta_01 = a[14] cdef double beta_10 = a[15] cdef double beta_11 = a[16] cdef double gamma_0100 = a[17] cdef double gamma_1000 = a[18] cdef double gamma_1100 = a[19] cdef double gamma_1101 = a[20] cdef double gamma_1110 = a[21] if i == 0: coeffs = np.array([a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_11\ 01 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_110\ 1 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1\ 101 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1\ 101 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma\ _1101 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 + a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_11\ 10 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_111\ 0 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1\ 110 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1\ 110 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma\ _1110 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1101*gamma_1\ 110 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101*gamma\ _1110 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma\ _1110 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gam\ ma_1110 + 2*a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 + 2*a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 + 2*a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 + 2*a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*\ gamma_1110 + a_00*b_01*b_10*c_0010**2*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_00*b_01*b_10*c_0010**2*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_00*b_10*c_0010**2*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_00*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_00*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2, -a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*beta_11*gamma_1000*gamma_\ 1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gam\ ma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_11*gamma_0100*gamma_1000*gamm\ a_1101 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1101 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1101 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*\ gamma_1101 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**\ 2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101\ **2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ **2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01**2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*beta_11*gamma_1000*gamma_1\ 110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gam\ ma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_11*gamma_0100*gamma_1000*gamm\ a_1110 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*\ gamma_1110 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*\ gamma_1110 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*\ gamma_1110 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_110\ 1*gamma_1110 - 2*a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 - 2*a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01*gamma_1110 - 2*a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01*gamma_1110 - 2*a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_\ 1101*gamma_1110 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**\ 2 - a_00*b_01*b_10*c_0001*c_0010*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 - a_00*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110\ **2 - a_00*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110\ **2 - a_00*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10**2, -a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_\ 1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma\ _1101 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma\ _1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gam\ ma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_11\ 01 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamm\ a_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*ga\ mma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1\ 101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*ga\ mma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*\ gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma\ _1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**\ 2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101\ **2 - a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101\ **2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 01**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1\ 110 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma\ _1110 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma\ _1110 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gam\ ma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100*gamma_11\ 10 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1\ 110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1\ 110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gam\ ma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_11\ 10 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*g\ amma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_11\ 10 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamm\ a_1110 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma_1\ 110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*\ gamma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000*gamma\ _1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamm\ a_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1\ 110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamm\ a_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*\ gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1\ 110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma\ _1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_100\ 0*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma\ _1110 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*ga\ mma_1110 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*\ gamma_1110 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gamma\ _1110 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*\ gamma_1110 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_110\ 1*gamma_1110 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101*gam\ ma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamm\ a_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1\ 110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamm\ a_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*\ gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1\ 110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma\ _1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_110\ 1*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma\ _1110 - 2*a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 - 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 01*gamma_1110 - 2*a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 - 2*a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 01*gamma_1110 - 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_\ 1101*gamma_1110 - 2*a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101*\ gamma_1110 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*g\ amma_1110 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*g\ amma_1110 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01*gamma_1110 + a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_\ 1101*gamma_1110 + a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*b_01*c_0010**2*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**\ 2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110**2 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_10*c_0001**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**\ 2 + a_01*b_10*c_0010**2*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_111\ 0**2 + a_01*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110\ **2 - a_10*b_01*c_0010**2*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110\ **2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_11\ 10**2 - a_10*c_0010**2*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_10*c_0001**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*b_10*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10**2 + a_01*b_10*c_0010**2*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110\ **2 + a_01*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_01*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110\ **2 + 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_\ 1110**2 + a_01*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2, -a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110**2 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**\ 2 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_111\ 0**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110**2 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**\ 2 - a_01*b_10*c_0010**2*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_111\ 0**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110**2 - a_01*b_00*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_10*c_0001**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_00*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - 2*a_01*b_10*c_0001*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_11\ 10**2 - a_01*b_10*c_0010**2*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110\ **2 - a_01*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2 - a_01*b_00*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110\ **2 - 2*a_01*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_\ 1110**2 - a_01*c_0010**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110**2, -a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_\ 1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1101 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gam\ ma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_11\ 01 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamm\ a_1101 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1101 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1\ 101 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1101 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*\ gamma_1101 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma\ _1101 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**\ 2 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101**2 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ **2 - a_10*b_01*c_0010**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ **2 - a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 01**2 - a_10*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101**2 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1\ 110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_1110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma\ _1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gamma_11\ 10 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000*gam\ ma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamm\ a_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma_1\ 110 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*ga\ mma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*gamma\ _1110 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000*\ gamma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamm\ a_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1\ 110 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamm\ a_1110 - a_10*b_01*c_0010**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma_1\ 110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma\ _1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101*gamma\ _1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*g\ amma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 - a_10*b_00*b_01*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*g\ amma_1110 - a_10*b_01*c_0010**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 - a_10*b_00*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 - a_10*c_0010**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001**2*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*c_0001**2*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**2 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110**\ 2 + a_10*b_00*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001**2*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*b_01*c_0001*c_0010*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110\ **2 + a_10*b_00*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110\ **2 + a_10*c_0001**2*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110**2 + a_10*c_0001*c_0010*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_11\ 10**2, a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1\ 110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1\ 110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gam\ ma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma\ _1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_11\ 10 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma\ _1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*g\ amma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101*gamma_11\ 10 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamm\ a_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1\ 110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamm\ a_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*\ gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma_1\ 110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*ga\ mma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma\ _1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*ga\ mma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_110\ 1*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101*gamma\ _1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamm\ a_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1\ 110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamm\ a_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*\ gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma_1\ 110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma\ _1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*ga\ mma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_110\ 1*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101*gamma\ _1110 + a_10*b_00*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*g\ amma_1110 + a_10*b_01*c_0001**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 + a_10*b_00*b_01*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*g\ amma_1110 + 2*a_10*b_01*c_0001*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_11\ 01*gamma_1110 + a_10*b_01*c_0010**2*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*gamm\ a_1110 + a_10*b_00*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 + a_10*c_0001**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110 + a_10*b_00*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101\ *gamma_1110 + 2*a_10*c_0001*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_\ 1101*gamma_1110 + a_10*c_0010**2*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101*ga\ mma_1110]) elif i == 1: coeffs = np.array([a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1101 + a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1101 + a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 + a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 + a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1101 + a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1101 + a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 + a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 + a_00*b_01*b_10*c_0010*alpha_11*beta_10*gamma_1110 + a_00*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 + a_00*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1110 + a_00*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_00*b_01*b_10*c_0010*alpha_11*gamma_1000*gamma_1110 + a_00*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 + a_00*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1110 + a_00*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, -a_01*b_00*b_10*c_0111*alpha_10*beta_11*gamma_1000 - a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_1000 - a_01*b_10*c_0010*c_0111*alpha_10*beta_11*gamma_1000 - a_01*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_01*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1101 - a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1101 - a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_01*b_00*b_10*c_0111*alpha_10*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_1000*gamma_1110 - a_01*b_10*c_0010*c_0111*alpha_10*gamma_1000*gamma_1110 - a_01*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_01*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, a_01*b_00*b_10*c_0111*alpha_11*beta_10*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_1110 + a_01*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1110 + a_01*b_00*b_10*c_0111*alpha_11*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_1000*gamma_1110 + a_01*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1110, -a_10*b_00*b_01*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_01*c_0010*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_00*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_10*c_0010*c_0111*c_1011*alpha_10*beta_11*gamma_1000 - a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1101 - a_10*b_00*b_01*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*b_01*c_0010*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*b_00*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110 - a_10*c_0010*c_0111*c_1011*alpha_10*gamma_1000*gamma_1110, -a_10*b_00*b_01*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_00*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_1101 - a_10*b_00*b_01*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*b_00*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_1000*gamma_1101]) elif i == 2: coeffs = np.array([a_01*b_10*c_0010*c_0111*alpha_01*beta_10*beta_11*gamma_0100 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_01*b_10*c_0010*c_0111*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_01*b_10*c_0010*c_0111*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110, a_10*b_01*c_0010*c_1011*alpha_01*beta_10*beta_11*gamma_0100 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*beta_11*gamma_0100 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*beta_11*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_11*gamma_0100*gamma_1000 - a_01*b_10*c_0001*c_0111*alpha_10*beta_11*gamma_0100*gamma_1000 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1101 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 + a_10*b_01*c_0010*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*beta_10*gamma_0100*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*beta_01*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 + a_10*b_01*c_0010*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 + a_10*c_0010*c_0111*c_1011*alpha_01*gamma_0100*gamma_1000*gamma_1110 - a_01*b_10*c_0001*c_0111*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_01*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, a_01*b_10*c_0001*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1110 + a_01*b_10*c_0001*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*b_10*c_0010*c_0111*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110 + a_01*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*beta_11*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_11*gamma_0100*gamma_1000 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*beta_01*gamma_1000*gamma_1110 - a_10*b_01*c_0001*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110 - a_10*c_0001*c_0111*c_1011*alpha_10*gamma_0100*gamma_1000*gamma_1110, -a_10*b_01*c_0001*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*beta_10*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_10*gamma_0100*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*beta_01*gamma_1000*gamma_1101 - a_10*b_01*c_0001*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*b_01*c_0010*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0001*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101 - a_10*c_0010*c_0111*c_1011*alpha_11*gamma_0100*gamma_1000*gamma_1101]) return coeffs cpdef monoms_DD(int i, np.ndarray[cdouble_t] x): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: monoms = np.array([s_00*s_01, s_00*s_10, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 1: monoms = np.array([s_00*s_11, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) elif i == 2: monoms = np.array([s_01**2, s_01*s_10, s_01*s_11, s_10**2, s_10*s_11]) return monoms cpdef dxi_DD(int i, np.ndarray[cdouble_t] x, double eps): cdef double s_00 = x[0] cdef double s_01 = x[1] cdef double s_10 = x[2] cdef double s_11 = x[3] if i == 0: dxi = np.array([2*s_00*s_01, 2*s_00*s_10, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 1: dxi = np.array([2*s_00*s_11, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) elif i == 2: dxi = np.array([2*s_01**2, 2*s_01*s_10, 2*s_01*s_11, 2*s_10**2, 2*s_10*s_11]) return dxi*eps cpdef inv_DD(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_DD(i, a) for j from 0 <= j < m: monoms = monoms_DD(i, x[j]) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(monoms)) return np.linalg.norm(I, 'fro') cpdef logL_DD(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x, double eps): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t, ndim=2] I = np.empty((3, m)) cdef int i, j for i from 0 <= i < 3: coeffs = coeffs_DD(i, a) for j from 0 <= j < m: monoms = monoms_DD(i, x[j]) dxi = dxi_DD(i, x[j], eps) I[i,j] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(dxi)) cdef double nrm = np.linalg.norm(I, 'fro') logL = (1 - 0.5*m)*np.log(2) + (m - 1)*np.log(nrm) - 0.5*nrm**2 - np.log(gamma(0.5*m)) return logL /// }}}

We now maximize the invariant error likelihood for each model over the model parameters using L-BFGS-B. This maximization proceeds in two phases. First, we obtain an approximate optimal parameter set by minimizing the normalized invariant error, using an initial guess of $1$ for each variable. This is then taken as an initial parameter estimate for the likelihood maximization. Lower and upper bounds of $0.01$ and $100$, respectively, were applied for all variables in each optimization.

{{{id=554| x0 = np.ones(len(params)) bounds = [(0.01, 100)] * len(params) kwargs = {'fprime': None, 'approx_grad': True, 'bounds': bounds} err_invmin = {} /// }}}

As with the coplanarity error, we separate the computation into four parts. First, we analyze data from the PP model:

{{{id=377| dm = 'PP' err_invmin[dm] = {} for im, inv, logL in zip(models, [inv_PP, inv_PD, inv_DP, inv_DD], [logL_PP, logL_PD, logL_DP, logL_DD]): print 'Analyzing data/model pair %s/%s...' % (dm, im) err_invmin[dm][im] = [] for i, err in enumerate(eps): a = fmin_l_bfgs_b(lambda x: inv(x, data[dm][i,-1]), x0, **kwargs)[0] mlogL = fmin_l_bfgs_b(lambda x: -logL(x, data[dm][i,-1], err), a, **kwargs)[1] err_invmin[dm][im].append(mlogL) /// Analyzing data/model pair PP/PP... Analyzing data/model pair PP/PD... Analyzing data/model pair PP/DP... Analyzing data/model pair PP/DD... }}}

Then data from the PD model:

{{{id=380| dm = 'PD' err_invmin[dm] = {} for im, inv, logL in zip(models, [inv_PP, inv_PD, inv_DP, inv_DD], [logL_PP, logL_PD, logL_DP, logL_DD]): print 'Analyzing data/model pair %s/%s...' % (dm, im) err_invmin[dm][im] = [] for i, err in enumerate(eps): a = fmin_l_bfgs_b(lambda x: inv(x, data[dm][i,-1]), x0, **kwargs)[0] mlogL = fmin_l_bfgs_b(lambda x: -logL(x, data[dm][i,-1], err), a, **kwargs)[1] err_invmin[dm][im].append(mlogL) /// Analyzing data/model pair PD/PP... Analyzing data/model pair PD/PD... Analyzing data/model pair PD/DP... Analyzing data/model pair PD/DD... }}}

Next, data from the DP model:

{{{id=379| dm = 'DP' err_invmin[dm] = {} for im, inv, logL in zip(models, [inv_PP, inv_PD, inv_DP, inv_DD], [logL_PP, logL_PD, logL_DP, logL_DD]): print 'Analyzing data/model pair %s/%s...' % (dm, im) err_invmin[dm][im] = [] for i, err in enumerate(eps): a = fmin_l_bfgs_b(lambda x: inv(x, data[dm][i,-1]), x0, **kwargs)[0] mlogL = fmin_l_bfgs_b(lambda x: -logL(x, data[dm][i,-1], err), a, **kwargs)[1] err_invmin[dm][im].append(mlogL) /// Analyzing data/model pair DP/PP... Analyzing data/model pair DP/PD... Analyzing data/model pair DP/DP... Analyzing data/model pair DP/DD... }}}

And, finally, data from the DD model:

{{{id=230| dm = 'DD' err_invmin[dm] = {} for im, inv, logL in zip(models, [inv_PP, inv_PD, inv_DP, inv_DD], [logL_PP, logL_PD, logL_DP, logL_DD]): print 'Analyzing data/model pair %s/%s...' % (dm, im) err_invmin[dm][im] = [] for i, err in enumerate(eps): a = fmin_l_bfgs_b(lambda x: inv(x, data[dm][i,-1]), x0, **kwargs)[0] mlogL = fmin_l_bfgs_b(lambda x: -logL(x, data[dm][i,-1], err), a, **kwargs)[1] err_invmin[dm][im].append(mlogL) /// Analyzing data/model pair DD/PP... Analyzing data/model pair DD/PD... Analyzing data/model pair DD/DP... Analyzing data/model pair DD/DD... }}}

Again, we save the data for reference:

{{{id=559| save(err_invmin, 'phos_err_invmin') /// }}}

and, again, we load the precomputed data for ease of analysis.

{{{id=233| err_invmin = load(DATA + 'phos_err_invmin') /// }}}

The results of the optimization, which are essentially the Akaike information criteria (AIC) for each model, are shown below at $\epsilon = 10^{-9}$, from which we see that the correct model can be identified from the data. Recall that models with a lower AIC are preferred.

{{{id=234| for dm in models: print 'Data %s:' % dm for im in models: try: print ' Model %s: %s' % (im, err_invmin[dm][im][-1]) except: pass /// Data PP: Model PP: 1567957.7747 Model PD: 5.00163401238e+14 Model DP: 2.69557881124e+12 Model DD: 4.55377688833e+14 Data PD: Model PP: 388272790456.0 Model PD: 140942914.626 Model DP: 1.31744485418e+13 Model DD: 2.07386252711e+13 Data DP: Model PP: 4540641879.55 Model PD: 1.1074644644e+15 Model DP: 60726.1504884 Model DD: 9.80564967458e+14 Data DD: Model PP: 979693747097.0 Model PD: 8348148980.26 Model DP: 21187945329.6 Model DD: 18036913.4442 }}}

The following plot shows the invariant error AIC for each model/data pair as a function of noise, which suggests a critical noise level of $\epsilon \sim 10^{-5}$.

{{{id=250| figw = 8.7 / 2.54 figh = figw / phi * 1.1 mpl.rc('axes', titlesize='xx-small') mpl.rc('legend', fontsize='xx-small') mpl.rc('xtick', labelsize='xx-small') mpl.rc('ytick', labelsize='xx-small') plt.figure(figsize=(figw, figh)) handles = [] A_min = np.inf A_max = -np.inf for i, dm in enumerate(models): if i % 2 == 0: ax = plt.subplot(2, 2, i+1) else: plt.subplot(2, 2, i+1, sharey=ax) for im in models: A = 2*(len(params) + np.array(err_invmin[dm][im])) h = plt.loglog(eps, A) A_min = min(A_min, min(A)) A_max = max(A_max, max(A)) if i == 0: handles.append(h) if i < 2: plt.xticks([]) if i % 2 == 1: plt.setp(plt.gca().get_yticklabels(), visible=False) plt.text(0.925, 0.775, '%s data' % dm, fontsize='xx-small', ha='right', transform=plt.gca().transAxes) for i in range(2): plt.subplot(2, 2, 2*i+1) plt.ylim(A_min / 10, A_max * 10) plt.figtext(0.56, 0.11, r'Measurement error ($\epsilon$)', size='xx-small', ha='center') plt.figtext(0.01, 0.62, r'Invariant AIC ($A$)', size='xx-small', rotation='vertical', va='center') plt.figlegend(handles, models, (0.23, 0.01), ncol=4) plt.subplots_adjust(left=0.13, right=0.99, bottom=0.25, top=0.975, wspace=0.1, hspace=0.15) plt.savefig('sage.png', dpi=dpi) plt.close() mpl.rcdefaults() /// }}}

Cell death signaling

We now turn to our second example, which involves receptor-mediated cell death signaling, the so-called extrinsic pathway of apoptosis. Specifically, we focus on the formation of the death-inducing signaling complex (DISC), a multi-protein oligomer composed of FasL, a death ligand, and its cognate receptor Fas, for which we study two competing models.

The first [2], which we call the crosslinking model, is based on the successive binding of Fas ($R$) to FasL ($L$):

$$\begin{align} L + R &\mathop{\longleftrightarrow}^{3 k_{f}}_{k_{r}} C_{1},\\ C_{1} + R &\mathop{\longleftrightarrow}^{2 k_{f}}_{2 k_{r}} C_{2},\\ C_{2} + R &\mathop{\longleftrightarrow}^{k_{f}}_{3 k_{r}} C_{3}, \end{align}$$

where $C_{i}$ is the complex FasL:Fas$_{i}$.

The second [3], which we call the cluster model, posits three forms of Fas (inactive, $X$; active and unstable, $Y$; active and stable, $Z$) and specifies receptor cluster-stabilization events driven by FasL:

$$\begin{align} X &\mathop{\longleftrightarrow}^{k_{o}}_{k_{u}} Y,\\ Z &\mathop{\longrightarrow}^{k_{u}} Y,\\ jY + \left( i - j \right) Z &\mathop{\longrightarrow}^{k_{s}^{\left( i \right)}} \left( j - k \right) Y + \left( i - j + k \right) Z,\\ L + jY + \left( i - j \right) Z &\mathop{\longrightarrow}^{k_{l}^{\left( i \right)}} L + \left( j - k \right) Y + \left( i - j + k \right) Z, \end{align}$$

where the last two reactions represent entire families generated by taking $i = 2$ or $3$, with $j = 1, \dots, i$ and $k = 1, \dots, j$.

We compute the dynamics, Gröbner bases, and steady-state invariants for each model below. For steady-state invariants, we identify corresponding variables by considering the apoptotic signal $\zeta$ transduced by the DISC, defined as $\zeta = c_{1} + 2 c_{2} + 3 c_{3}$ for the crosslinking model, and $\zeta = z$ for the cluster model; the total FasL concentration ($\lambda = l + c_{1} + c_{2} + c_{3}$ and $\lambda = l$ for the crosslinking and cluster models, respectively); and the total Fas concentration ($\rho = r + c_{1} + 2 c_{2} + 3 c_{3}$ and $\rho = x + y + z$, respectively).

In all following code, $\lambda$ is represented as $\Lambda$ since the keyword lambda is reserved.

{{{id=256| dynams = {} groebs = {} invars = {} var_obs = ['Lambda', 'rho', 'zeta'] /// }}}

We begin with the crosslinking model. As for phosphorylation, we define the model variables and parameters, and the field over which Gröbner bases will be computed.

{{{id=307| cross_params = ['k_f', 'k_r'] cross_varias = ['l', 'r', 'c_1', 'c_2', 'c_3'] + var_obs R = PolynomialRing(QQ, cross_params) R.inject_variables() R = PolynomialRing(FractionField(R), cross_varias, order='lex') R.inject_variables() /// Defining k_f, k_r Defining l, r, c_1, c_2, c_3, Lambda, rho, zeta }}}

The dynamics of the model are given below:

{{{id=308| v = [3*k_f*l*r - k_r*c_1, 2*k_f*c_1*r - 2*k_r*c_2, k_f*c_2*r - 3*k_r*c_3] f = [-v[0], -v[0] - v[1] - v[2], v[0] - v[1], v[1] - v[2], v[2]] /// }}}

We check for conservation of ligand and receptor:

{{{id=309| pretty_print('conservation of FasL ($L$): %s' % ((f[0] + f[2] + f[3] + f[4]) == 0)) pretty_print('conservation of Fas ($R$): %s' % ((f[1] + f[2] + 2*f[3] + 3*f[4]) == 0)) /// }}}

Then we redefine the system dynamics in terms of $\lambda$, $\rho$, and $\zeta$, and compute a Gröbner basis using the ordering $(c_{2}, c_{3}, \lambda, \rho, \zeta)$.

{{{id=310| dynams['cross'] = f groebs['cross'] = R.ideal(map(lambda x: x.subs(l=Lambda-c_1-c_2-c_3) .subs(r=rho-c_1-2*c_2-3*c_3) .subs(c_1=zeta-2*c_2-3*c_3), dynams['cross'])).groebner_basis() for g in groebs['cross']: pretty_print(g.variables()) /// }}}

Clearly, the fourth basis polynomial is suitable; we call that our steady-state invariant.

{{{id=311| R = PolynomialRing(QQ, cross_params) R = PolynomialRing(FractionField(R), var_obs , order='lex') invars['cross'] = groebs['cross'][3] invars['cross'] *= invars['cross'].denominator() forget() for p in cross_params: assume(var(p) > 0) invars['cross'] = groebs['cross'][3] denom = invars['cross'].denominator() print 'positive denominator for crosslinking model: %s' % bool(denom > 0) invars['cross'] *= denom /// positive denominator for crosslinking model: True }}}

We now repeat the same process for the cluster model, first defining the model variables and parameters, and the base field.

{{{id=268| clust_params = ['k_o', 'k_c', 'k_u', 'k_s1', 'k_s2', 'k_s3', 'k_l1', 'k_l2', 'k_l3'] clust_varias = ['x', 'y', 'z'] + var_obs R = PolynomialRing(QQ, clust_params) R.inject_variables() R = PolynomialRing(FractionField(R), clust_varias, order='lex') R.inject_variables() /// Defining k_o, k_c, k_u, k_s1, k_s2, k_s3, k_l1, k_l2, k_l3 Defining x, y, z, Lambda, rho, zeta }}}

The system dynamics are given as follows:

{{{id=270| v = [k_o*x - k_c*y, k_u*z, k_s2*sum([y^j*z^(2-j)*k for j in [1..2] for k in [1..j]]) + k_s3*sum([y^j*z^(3-j)*k for j in [1..3] for k in [1..j]]), Lambda*(k_l2*sum([y^j*z^(2-j)*k for j in [1..2] for k in [1..j]]) + k_l3*sum([y^j*z^(3-j)*k for j in [1..3] for k in [1..j]]))] f = [-v[0], v[0] + v[1] - v[2] - v[3], -v[1] + v[2] + v[3]] /// }}}

We check for conservation of Fas (FasL is conserved trivially):

{{{id=269| pretty_print('conservation of Fas: %s' % ((f[0] + f[1] + f[2]) == 0)) /// }}}

We then compute a Gröbner basis for the ideal generated by the system dynamics using the variable ordering $(y, \lambda, \rho, \zeta)$.

{{{id=273| dynams['clust'] = f groebs['clust'] = R.ideal(map(lambda x: x.subs(x=rho-y-z).subs(z=zeta), dynams['clust'])).groebner_basis() for g in groebs['clust']: pretty_print(g.variables()) /// }}}

As with the crosslinking model, it is immediate that only one steady-state invariant exists.

{{{id=272| R = PolynomialRing(QQ, clust_params) R = PolynomialRing(FractionField(R), var_obs, order='lex') forget() for p in clust_params: assume(var(p) > 0) invars['clust'] = groebs['clust'][1] denom = invars['clust'].denominator() print 'positive denominator for cluster model: %s' % bool(denom > 0) invars['clust'] *= denom /// positive denominator for cluster model: True }}}

We list the monomials in each invariant below:

{{{id=426| models = ['cross', 'clust'] for model in models: print 'monomials in model %s:' % model pretty_print(invars[model].monomials()) print /// monomials in model cross: monomials in model clust: }}}

To generate data from the models, we define first the crosslinking model dynamics, implemented in Cython:

{{{id=313| %cython import numpy as np cimport numpy as np cdouble = np.double ctypedef np.double_t cdouble_t cpdef np.ndarray ode_cross(np.ndarray[cdouble_t] x, double t, double k_f, double k_r): cdef double l = x[0] cdef double r = x[1] cdef double c_1 = x[2] cdef double c_2 = x[3] cdef double c_3 = x[4] return np.array( [(-3*k_f)*l*r + k_r*c_1, (-3*k_f)*l*r + (-2*k_f)*r*c_1 + (-k_f)*r*c_2 + k_r*c_1 + 2*k_r*c_2 + 3*k_r*c_3, 3*k_f*l*r + (-2*k_f)*r*c_1 + (-k_r)*c_1 + 2*k_r*c_2, 2*k_f*r*c_1 + (-k_f)*r*c_2 + (-2*k_r)*c_2 + 3*k_r*c_3, k_f*r*c_2 + (-3*k_r)*c_3]) /// }}}

and then the cluster model dynamics:

{{{id=267| %cython import numpy as np cimport numpy as np cdouble = np.double ctypedef np.double_t cdouble_t cpdef np.ndarray ode_clust(np.ndarray[cdouble_t] x, double t, double k_o, double k_c, double k_u, double k_s1, double k_s2, double k_s3, double k_l1, double k_l2, double k_l3, double L): cdef double X = x[0] cdef double Y = x[1] cdef double Z = x[2] return np.array( [(-k_o)*X + k_c*Y, k_o*X + (-6*k_l3)*Y**3*L + (-6*k_s3)*Y**3 + (-3*k_l2 - 3*k_l3)*Y**2*L*Z + (-3*k_s2 - 3*k_s3)*Y**2*Z + (-k_l2 - k_l3)*Y*L*Z**2 + (-k_s2 - k_s3)*Y*Z**2 + (-k_c)*Y + k_u*Z, 6*k_l3*Y**3*L + 6*k_s3*Y**3 + (3*k_l2 + 3*k_l3)*Y**2*L*Z + (3*k_s2 + 3*k_s3)*Y**2*Z + (k_l2 + k_l3)*Y*L*Z**2 + (k_s2 + k_s3)*Y*Z**2 + (-k_u)*Z]) /// }}}

For each model, we generate parameters from a log-normal distribution with $\mu^{*} = 1$ and $\sigma^{*} = 2$. Again, we generate $m = 100$ trajectories for each model, each with initial conditions also drawn from a log-normal distribution with $\mu^{*} = 1$ and $\sigma^{*} = 2$, and again we corrupt the resulting data with various levels $\epsilon$ of noise.

{{{id=275| cross_prms = lognormal(0, log(2), len(cross_params)) clust_prms = lognormal(0, log(2), len(clust_params)) T = 50 nt = 100 m = 100 t = np.linspace(0, T, nt) eps = [10^(-i) for i in np.arange(1, 10)] /// }}}

We integrate the model equations below. Some post-processing must be performed to obtain the values of the corresponding variables $\lambda$, $\rho$, and $\zeta$.

{{{id=393| data = {} print 'Integrating crosslinking model...' data['cross'] = np.empty((len(eps), m, nt, len(var_obs))) for i in range(m): x0 = lognormal(0, log(2), 5) d = odeint(ode_cross, x0, t, tuple(cross_prms)) data['cross'][0,:,i][:,0] = d[:,0] + d[:,2] + d[:,3] + d[:,4] data['cross'][0,:,i][:,1] = d[:,1] + d[:,2] + 2*d[:,3] + 3*d[:,4] data['cross'][0,:,i][:,2] = d[:,2] + 2*d[:,3] + 3*d[:,4] print 'Integrating cluster model...' data['clust'] = np.empty((len(eps), m, nt, len(var_obs))) for i in range(m): x0 = lognormal(0, log(2), 3) l0 = lognormal(0, log(2), 1) d = odeint(ode_clust, x0, t, tuple(clust_prms) + (l0,)) data['clust'][0,:,i][:,0] = l0 data['clust'][0,:,i][:,1] = d[:,0] + d[:,1] + d[:,2] data['clust'][0,:,i][:,2] = d[:,2] /// Integrating crosslinking model... Integrating cluster model... }}}

We then corrupt the data with noise.

{{{id=405| for model in models: for i, err in enumerate(eps[1:]): data[model][i+1] = data[model][0] * lognormal(0, log(1+err), np.shape(data[model][0])) data[model][0] *= lognormal(0, log(1+eps[0]), np.shape(data[model][0])) /// }}}

We save the generated data for reference.

{{{id=507| save(data, 'apop_data') /// }}}

For ease of analysis, we load the precomputed data. Additional simulations show that these data, too, are representative of the general case.

{{{id=292| data = load(DATA + 'apop_data') /// }}}

The coplanarity error for each model/data time course pair is computed next:

{{{id=396| err_coplan = {} for dm in models: err_coplan[dm] = {} for im in models: print 'Analyzing data/model pair %s/%s...' % (dm, im) err_coplan[dm][im] = [] I = invars[im] for i, err in enumerate(eps): Delta = [] for j in range(nt): Delta.append(coplan_err(data[dm][i,j], I, err)) err_coplan[dm][im].append(Delta) /// Analyzing data/model pair cross/cross... Analyzing data/model pair cross/clust... Analyzing data/model pair clust/cross... Analyzing data/model pair clust/clust... }}}

We save the data here:

{{{id=505| save(err_coplan, 'apop_err_coplan') /// }}}

and, again, load it for subsequent analysis.

{{{id=410| err_coplan = load(DATA + 'apop_err_coplan') /// }}}

The results at $\epsilon = 10^{-9}$ show that the crosslinking model can be rejected on the basis of data from the cluster model.

{{{id=486| for dm in models: print 'Data %s:' % dm for im in models: err = err_coplan[dm][im][-1][-1] print ' Model %s: %g (p = %g)' % (im, err, 1-chi.cdf(err,m)) /// Data cross: Model cross: 2.2067 (p = 1) Model clust: 0.00592887 (p = 1) Data clust: Model cross: 1.96391e+07 (p = 0) Model clust: 2.4787 (p = 1) }}}

We plot the time evolution of the coplanarity error $\Delta$ for each model on cluster model data below at various noise levels.

{{{id=413| figw = 8.7 / 2.54 figh = figw / phi * 0.65 mpl.rc('axes', labelsize='xx-small') mpl.rc('legend', fontsize='xx-small') mpl.rc('xtick', labelsize='xx-small') mpl.rc('ytick', labelsize='xx-small') plt.figure(figsize=(figw, figh)) ax = plt.subplot(121) eps9 = plt.semilogy(t, err_coplan['clust']['cross'][7]) eps6 = plt.semilogy(t, err_coplan['clust']['cross'][4]) eps3 = plt.semilogy(t, err_coplan['clust']['cross'][1]) plt.ylabel(r'Coplanarity error ($\Delta$)') plt.xticks([]) plt.text(0.925, 0.10, 'crosslinking', fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.subplot(122, sharey=ax) plt.semilogy(t, err_coplan['clust']['clust'][7]) plt.semilogy(t, err_coplan['clust']['clust'][4]) plt.semilogy(t, err_coplan['clust']['clust'][1]) plt.xticks([]) plt.setp(plt.gca().get_yticklabels(), visible=False) plt.text(0.925, 0.85, 'cluster', fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.figtext(0.56, 0.20, r'Time ($t$)', size='xx-small', ha='center') plt.figlegend((eps9, eps6, eps3), (r'$\epsilon = 10^{-9}$', r'$\epsilon = 10^{-6}$', r'$\epsilon = 10^{-3}$'), (0.23, 0.01), ncol=3) plt.subplots_adjust(left=0.15, right=0.99, bottom=0.3, top=0.925, wspace=0.1) plt.savefig('sage.png', dpi=dpi) plt.close() mpl.rcdefaults() /// }}}

As with phosphorylation, we also study the behavior of $\Delta$ on cluster model data at steady state as a function of $\epsilon$. The critical noise level here is found to be $\epsilon \sim 10^{-2}$.

{{{id=465| figw = 8.7 / 2.54 * 0.75 figh = figw / phi mpl.rc('axes', labelsize='xx-small') mpl.rc('xtick', labelsize='xx-small') mpl.rc('ytick', labelsize='xx-small') err = [x[-1] for x in err_coplan['clust']['cross']] plt.figure(figsize=(figw, figh)) plt.loglog(eps, err) plt.loglog(eps, [x[-1] for x in err_coplan['clust']['clust']]) plt.xlabel(r'Measurement error ($\epsilon$)') plt.ylabel(r'Coplanarity error ($\Delta$)') eps0 = np.interp([chi.ppf(alpha, m)], err, eps) plt.axvspan(eps[-1], eps0, alpha=0.25, color='k') plt.text(0.82, 0.70, 'crosslinking', fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.text(0.25, 0.20, 'cluster', fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.subplots_adjust(left=0.20, right=0.95, bottom=0.25, top=0.95) plt.savefig('sage.png', dpi=dpi) plt.close() mpl.rcdefaults() /// }}}

Finally, to test invariant minimization, we define the invariant error functions for each model. First, the crosslinking model:

{{{id=562| %cython import numpy as np cimport numpy as np from scipy.special import gamma cdouble = np.double ctypedef np.double_t cdouble_t cpdef coeffs_cross(np.ndarray[cdouble_t] a): cdef double k_f = a[0] cdef double k_r = a[1] return np.array([3*k_f, -3*k_f, -k_f, k_f, -k_r]) cpdef monoms_cross(np.ndarray[cdouble_t] x): cdef double Lambda = x[0] cdef double rho = x[1] cdef double zeta = x[2] return np.array([Lambda*rho, Lambda*zeta, rho*zeta, zeta**2, zeta]) cpdef dxi_cross(np.ndarray[cdouble_t] x, double eps): cdef double Lambda = x[0] cdef double rho = x[1] cdef double zeta = x[2] return np.array([2*Lambda*rho, 2*Lambda*zeta, 2*rho*zeta, 2*zeta**2, zeta]) * eps cpdef inv_cross(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t] I = np.empty(m) cdef int i coeffs = coeffs_cross(a) for i from 0 <= i < m: monoms = monoms_cross(x[i]) I[i] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(monoms)) return np.linalg.norm(I) cpdef logL_cross(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x, double eps): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t] I = np.empty(m) cdef int i coeffs = coeffs_cross(a) for i from 0 <= i < m: monoms = monoms_cross(x[i]) dxi = dxi_cross(x[i], eps) I[i] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(dxi)) cdef double nrm = np.linalg.norm(I) logL = (1 - 0.5*m)*np.log(2) + (m - 1)*np.log(nrm) - 0.5*nrm**2 - np.log(gamma(0.5*m)) return logL /// }}}

and, then, the cluster model:

{{{id=302| %cython import numpy as np cimport numpy as np from scipy.special import gamma cdouble = np.double ctypedef np.double_t cdouble_t cpdef coeffs_clust(np.ndarray[cdouble_t] a): cdef double k_o = a[0] cdef double k_c = a[1] cdef double k_u = a[2] cdef double k_s1 = a[3] cdef double k_s2 = a[4] cdef double k_s3 = a[5] cdef double k_l1 = a[6] cdef double k_l2 = a[7] cdef double k_l3 = a[8] return np.array([78364164096*k_o**3*k_l3, -195910410240*k_o**3*k_l3 + 39182082048*k_o**2*k_c*k_l3, 39182082048*k_o**3*k_l2 + 39182082048*k_o**2*k_c*k_l2, 169789022208*k_o**3*k_l3 - 52242776064*k_o**2*k_c*k_l3 + 13060694016*k_o*k_c**2*k_l3, -65303470080*k_o**3*k_l2 - 52242776064*k_o**2*k_c*k_l2 + 13060694016*k_o*k_c**2*k_l2, -52242776064*k_o**3*k_l3 + 13060694016*k_o**2*k_c*k_l3 - 13060694016*k_o*k_c**2*k_l3, 26121388032*k_o**3*k_l2 + 13060694016*k_o**2*k_c*k_l2 - 13060694016*k_o*k_c**2*k_l2, 78364164096*k_o**3*k_s3, -195910410240*k_o**3*k_s3 + 39182082048*k_o**2*k_c*k_s3, 39182082048*k_o**3*k_s2 + 39182082048*k_o**2*k_c*k_s2, 169789022208*k_o**3*k_s3 - 52242776064*k_o**2*k_c*k_s3 + 13060694016*k_o*k_c**2*k_s3, -65303470080*k_o**3*k_s2 - 52242776064*k_o**2*k_c*k_s2 + 13060694016*k_o*k_c**2*k_s2, -52242776064*k_o**3*k_s3 + 13060694016*k_o**2*k_c*k_s3 - 13060694016*k_o*k_c**2*k_s3, 26121388032*k_o**3*k_s2 + 13060694016*k_o**2*k_c*k_s2 - 13060694016*k_o*k_c**2*k_s2, -13060694016*k_o**3*k_u - 39182082048*k_o**2*k_c*k_u - 39182082048*k_o*k_c**2*k_u - 13060694016*k_c**3*k_u]) cpdef monoms_clust(np.ndarray[cdouble_t] x): cdef double Lambda = x[0] cdef double rho = x[1] cdef double zeta = x[2] return np.array([Lambda*rho**3, Lambda*rho**2*zeta, Lambda*rho**2, Lambda*rho*zeta**2, Lambda*rho*zeta, Lambda*zeta**3, Lambda*zeta**2, rho**3, rho**2*zeta, rho**2, rho*zeta**2, rho*zeta, zeta**3, zeta**2, zeta]) cpdef dxi_clust(np.ndarray[cdouble_t] x, double eps): cdef double Lambda = x[0] cdef double rho = x[1] cdef double zeta = x[2] return np.array([4*Lambda*rho**3, 4*Lambda*rho**2*zeta, 3*Lambda*rho**2, 4*Lambda*rho*zeta**2, 3*Lambda*rho*zeta, 4*Lambda*zeta**3, 3*Lambda*zeta**2, 3*rho**3, 3*rho**2*zeta, 2*rho**2, 3*rho*zeta**2, 2*rho*zeta, 3*zeta**3, 2*zeta**2, zeta]) * eps cpdef inv_clust(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t] I = np.empty(m) cdef int i coeffs = coeffs_clust(a) for i from 0 <= i < m: monoms = monoms_clust(x[i]) I[i] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(monoms)) return np.linalg.norm(I) cpdef logL_clust(np.ndarray[cdouble_t] a, np.ndarray[cdouble_t, ndim=2] x, double eps): cdef int m = x.shape[0] cdef np.ndarray[cdouble_t] I = np.empty(m) cdef int i coeffs = coeffs_clust(a) for i from 0 <= i < m: monoms = monoms_clust(x[i]) dxi = dxi_clust(x[i], eps) I[i] = np.dot(coeffs, monoms) / np.dot(np.abs(coeffs), np.abs(dxi)) cdef double nrm = np.linalg.norm(I) logL = (1 - 0.5*m)*np.log(2) + (m - 1)*np.log(nrm) - 0.5*nrm**2 - np.log(gamma(0.5*m)) return logL /// }}}

Invariant minimization is now performed, using the same protocol as for phosphorylation.

{{{id=565| err_invmin = {} kwargs = {'fprime': None, 'approx_grad': True} for dm in models: err_invmin[dm] = {} for im, params, inv, logL in zip(models, [cross_params, clust_params], [inv_cross, inv_clust], [logL_cross, logL_clust]): print 'Analyzing data/model pair %s/%s...' % (dm, im) err_invmin[dm][im] = [] x0 = np.ones(len(params)) kwargs['bounds'] = [(0.01, 100)] * len(params) for i, err in enumerate(eps): a = fmin_l_bfgs_b(lambda x: inv(x, data[dm][i,-1]), x0, **kwargs)[0] mlogL = fmin_l_bfgs_b(lambda x: -logL(x, data[dm][i,-1], err), a, **kwargs)[1] err_invmin[dm][im].append(mlogL) /// Analyzing data/model pair cross/cross... Analyzing data/model pair cross/clust... Analyzing data/model pair clust/cross... Analyzing data/model pair clust/clust... }}}

The data are saved for reference:

{{{id=568| save(err_invmin, 'apop_err_invmin') /// }}}

and loaded for subsequent analysis.

{{{id=425| err_invmin = load(DATA + 'apop_err_invmin') /// }}}

The AIC results below at $\epsilon = 10^{-9}$ show that the correct model can be identified easily from the data.

{{{id=460| for dm in models: print 'Data %s:' % dm for im in models: try: print ' Model %s: %s' % (im, err_invmin[dm][im][-1]) except: pass /// Data cross: Model cross: 0.572388473385 Model clust: 3.6351316926e+14 Data clust: Model cross: 8.58025472568e+14 Model clust: 97468630486.8 }}}

We also plot the invariant error AIC for each model/data pair below, which suggests that invariant minimization has discriminative power below $\epsilon \sim 10^{-2}$.

{{{id=305| figw = 8.7 / 2.54 figh = figw / phi * 0.75 mpl.rc('axes', labelsize='xx-small') mpl.rc('legend', fontsize='xx-small') mpl.rc('xtick', labelsize='xx-small') mpl.rc('ytick', labelsize='xx-small') plt.figure(figsize=(figw, figh)) handles = [] A_min = np.inf A_max = -np.inf for i, dm in enumerate(models): if dm == 'cross': dms = 'crosslinking' elif dm == 'clust': dms = 'cluster' if i == 0: ax = plt.subplot(1, 2, i+1) else: plt.subplot(1, 2, i+1, sharey=ax) for im, params in zip(models, [cross_params, clust_params]): A = 2*(len(params) + np.array(err_invmin[dm][im])) h = plt.loglog(eps, A) A_min = min(A_min, min(A)) A_max = max(A_max, max(A)) if i == 0: handles.append(h) if i == 0: plt.ylabel(r'Invariant AIC ($A$)') if i % 2 == 1: plt.setp(plt.gca().get_yticklabels(), visible=False) plt.text(0.925, 0.775, '%s data' % dms, fontsize='xx-small', ha='right', transform=plt.gca().transAxes) plt.figtext(0.56, 0.17, r'Measurement error ($\epsilon$)', size='xx-small', ha='center') plt.figlegend(handles, ['crosslinking', 'cluster'], (0.30, 0.01), ncol=2) plt.subplots_adjust(left=0.15, right=0.99, bottom=0.375, top=0.95, wspace=0.1) plt.savefig('sage.png', dpi=dpi) plt.close() mpl.rcdefaults() /// }}}

References

  1. Manrai AK, Gunawardena J (2008) The geometry of multisite phosphorylation. Biophys J 95:5533–5543.
  2. Lai R, Jackson TL (2004) A mathematical model of receptor-mediated apoptosis: dying to know why FasL is a trimer. Math Biosci Eng 1:325–338.
  3. Ho KL, Harrington HA (2010) Bistability in apoptosis by receptor clustering. PLoS Comput Biol 6:e1000956.
{{{id=306| /// }}}