def _step(i, pkm1, pkm2, qkm1, qkm2, k1, k2, k3, k4, k5, k6, k7, k8, r): xk = -(x * k1 * k2) / (k3 * k4) pk = pkm1 + pkm2 * xk qk = qkm1 + qkm2 * xk pkm2 = pkm1 pkm1 = pk qkm2 = qkm1 qkm1 = qk xk = (x * k5 * k6) / (k7 * k8) pk = pkm1 + pkm2 * xk qk = qkm1 + qkm2 * xk pkm2 = pkm1 pkm1 = pk qkm2 = qkm1 qkm1 = qk old_r = r r = tt.switch(tt.eq(qk, zero), r, pk / qk) k1 += one k2 += k26update k3 += two k4 += two k5 += one k6 -= k26update k7 += two k8 += two big_cond = tt.gt(tt.abs_(qk) + tt.abs_(pk), BIG) biginv_cond = tt.or_(tt.lt(tt.abs_(qk), BIGINV), tt.lt(tt.abs_(pk), BIGINV)) pkm2 = tt.switch(big_cond, pkm2 * BIGINV, pkm2) pkm1 = tt.switch(big_cond, pkm1 * BIGINV, pkm1) qkm2 = tt.switch(big_cond, qkm2 * BIGINV, qkm2) qkm1 = tt.switch(big_cond, qkm1 * BIGINV, qkm1) pkm2 = tt.switch(biginv_cond, pkm2 * BIG, pkm2) pkm1 = tt.switch(biginv_cond, pkm1 * BIG, pkm1) qkm2 = tt.switch(biginv_cond, qkm2 * BIG, qkm2) qkm1 = tt.switch(biginv_cond, qkm1 * BIG, qkm1) return ( (pkm1, pkm2, qkm1, qkm2, k1, k2, k3, k4, k5, k6, k7, k8, r), until(tt.abs_(old_r - r) < (THRESH * tt.abs_(r))), )
def _step(i, t, s): t *= (i - b) * value / i step = t / (a + i) s += step return ((t, s), until(tt.abs_(step) < threshold))