Exemple #1
0
static void
_cross_site_ws_init_edge_rates(cross_site_ws_t w, const model_and_data_t m)
{
    slong i, idx;
    double tmpd;

    w->edge_rates = _arb_vec_init(w->edge_count);

    /*
     * Define the map from csr edge index to edge rate.
     * The edge rate is represented in arbitrary precision.
     */
    if (!m->edge_map)
    {
        fprintf(stderr, "internal error: edge map is uninitialized\n");
        abort();
    }
    if (!m->edge_map->order)
    {
        fprintf(stderr, "internal error: edge map order is uninitialized\n");
        abort();
    }
    if (!m->edge_rate_coefficients)
    {
        fprintf(stderr, "internal error: edge rate coeffs unavailable\n");
        abort();
    }
    for (i = 0; i < w->edge_count; i++)
    {
        idx = m->edge_map->order[i];
        tmpd = m->edge_rate_coefficients[i];
        arb_set_d(w->edge_rates + idx, tmpd);
    }
}
Exemple #2
0
void
custom_rate_mixture_get_prob(arb_t prob, const custom_rate_mixture_t x,
        slong idx, slong prec)
{
    if (x->mode == RATE_MIXTURE_UNDEFINED)
    {
        flint_fprintf(stderr, "internal error: undefined rate mixture\n");
        abort();
    }
    else if (x->mode == RATE_MIXTURE_NONE)
    {
        arb_one(prob);
    }
    else if (x->mode == RATE_MIXTURE_UNIFORM)
    {
        /*
         * This code branch involves a division that could
         * unnecessarily lose exactness in some situations.
         */
        arb_set_si(prob, x->n);
        arb_inv(prob, prob, prec);
    }
    else if (x->mode == RATE_MIXTURE_CUSTOM)
    {
        arb_set_d(prob, x->prior[idx]);
    }
    else
    {
        flint_fprintf(stderr, "internal error: "
                      "unrecognized rate mixture mode\n");
        abort();
    }
}
Exemple #3
0
void
custom_rate_mixture_expectation(arb_t rate, const custom_rate_mixture_t x, slong prec)
{
    if (x->mode == RATE_MIXTURE_UNDEFINED)
    {
        flint_fprintf(stderr, "internal error: undefined rate mixture\n");
        abort();
    }
    else if (x->mode == RATE_MIXTURE_NONE)
    {
        arb_one(rate);
    }
    else if (x->mode == RATE_MIXTURE_UNIFORM || x->mode == RATE_MIXTURE_CUSTOM)
    {
        slong i;
        arb_t tmp, tmpb;
        arb_init(tmp);
        arb_init(tmpb);
        arb_zero(rate);
        if (x->mode == RATE_MIXTURE_UNIFORM)
        {
            for (i = 0; i < x->n; i++)
            {
                arb_set_d(tmp, x->rates[i]);
                arb_add(rate, rate, tmp, prec);
            }
            arb_div_si(rate, rate, x->n, prec);
        }
        else if (x->mode == RATE_MIXTURE_CUSTOM)
        {
            for (i = 0; i < x->n; i++)
            {
                arb_set_d(tmp, x->rates[i]);
                arb_set_d(tmpb, x->prior[i]);
                arb_addmul(rate, tmp, tmpb, prec);
            }
        }
        arb_clear(tmp);
        arb_clear(tmpb);
    }
    else
    {
        flint_fprintf(stderr, "internal error: "
                      "unrecognized rate mixture mode\n");
        abort();
    }
}
int
f_thsh_shift(arb_t max, const arb_t t, params_t * p, slong prec)
{
    acb_t z;
    acb_init(z);
    arb_set(acb_realref(z), t);
    arb_set_d(acb_imagref(z), .7);

    acb_sinh(z, z, prec);
    acb_tanh(z, z, prec);
    acb_abs(max, z, prec);

    acb_clear(z);
    return 1;
}
Exemple #5
0
void test_field1(flint_rand_t state)
{
    /* tests in QQ[sqrt(5)] */
    int iter;

    fmpq_t k;
    fmpq_poly_t p;
    arb_t emb;
    renf_t nf;
    renf_elem_t a;

    fmpq_poly_init(p);
    fmpq_poly_set_coeff_si(p, 2, 1);
    fmpq_poly_set_coeff_si(p, 1, -1);
    fmpq_poly_set_coeff_si(p, 0, -1);

    arb_init(emb);
    arb_set_d(emb, 1.61803398874989);
    arb_add_error_2exp_si(emb, -20);
    renf_init(nf, p, emb, 20 + n_randint(state, 20));
    arb_clear(emb);

    renf_elem_init(a, nf);
    fmpq_init(k);

    /* (1+sqrt(5))/2 vs Fibonacci */
    fmpq_poly_zero(p);
    fmpq_poly_set_coeff_si(p, 1, -1);
    for (iter = 1; iter < 50; iter++)
    {
        fprintf(stderr, "start iter = %d\n", iter);
        fflush(stderr);
        fmpz_fib_ui(fmpq_numref(k), iter+1);
        fmpz_fib_ui(fmpq_denref(k), iter);
        fmpq_poly_set_coeff_fmpq(p, 0, k);
        renf_elem_set_fmpq_poly(a, p, nf);
        check_ceil(a, nf, 1 - iter % 2, "sqrt(5)");
        fprintf(stderr, "end\n");
        fflush(stderr);
    }

    renf_elem_clear(a, nf);
    renf_clear(nf);
    fmpq_clear(k);
    fmpq_poly_clear(p);
}
Exemple #6
0
void
custom_rate_mixture_get_rate(arb_t rate, const custom_rate_mixture_t x, slong idx)
{
    if (x->mode == RATE_MIXTURE_UNDEFINED)
    {
        flint_fprintf(stderr, "internal error: undefined rate mixture\n");
        abort();
    }
    else if (x->mode == RATE_MIXTURE_NONE)
    {
        arb_one(rate);
    }
    else if (x->mode == RATE_MIXTURE_UNIFORM || x->mode == RATE_MIXTURE_CUSTOM)
    {
        arb_set_d(rate, x->rates[idx]);
    }
    else
    {
        flint_fprintf(stderr, "internal error: "
                      "unrecognized rate mixture mode\n");
        abort();
    }
}
Exemple #7
0
int main()
{
    flint_rand_t state;

    flint_printf("wrappers....");
    fflush(stdout);

    flint_randinit(state);

    {
        arb_t a, b, c, d, z, r, u, v;
        slong prec;

        prec = 53;

        arb_init(a);
        arb_init(b);
        arb_init(c);
        arb_init(d);
        arb_init(z);
        arb_init(r);
        arb_init(u);
        arb_init(v);

        arb_set_d(a, 0.5);
        arb_set_d(b, 0.25);
        arb_set_d(c, 0.125);
        arb_set_d(z, 0.75);

        arb_hypgeom_pfq(r, a, 1, b, 1, z, 0, prec);
        arb_set_str(v, "[3.40725820729608 +/- 6.88e-15]", prec);
        TEST(r, v, "pfq");

        arb_hypgeom_pfq(r, a, 1, b, 1, z, 1, prec);
        arb_set_str(v, "[0.93977518087904 +/- 3.26e-15]", prec);
        TEST(r, v, "pfq regularized");

        arb_hypgeom_0f1(r, a, z, 0, prec);
        arb_set_str(v, "[2.91457744017593 +/- 4.17e-15]", prec);
        TEST(r, v, "0f1");

        arb_hypgeom_0f1(r, a, z, 1, prec);
        arb_set_str(v, "[1.64437423219054 +/- 3.77e-15]", prec);
        TEST(r, v, "0f1 regularized");

        arb_hypgeom_1f1(r, a, b, z, 0, prec);
        arb_set_str(v, "[3.40725820729608 +/- 6.88e-15]", prec);
        TEST(r, v, "1f1");

        arb_hypgeom_1f1(r, a, b, z, 1, prec);
        arb_set_str(v, "[0.93977518087904 +/- 3.26e-15]", prec);
        TEST(r, v, "1f1 regularized");

        arb_hypgeom_u(r, a, b, z, prec);
        arb_set_str(v, "[0.7761320390950 +/- 3.89e-14]", prec);
        TEST(r, v, "u");

        arb_hypgeom_2f1(r, a, b, c, z, 0, prec);
        arb_set_str(v, "[3.2569394189980 +/- 8.18e-14]", prec);
        TEST(r, v, "2f1");

        arb_hypgeom_2f1(r, a, b, c, z, 1, prec);
        arb_set_str(v, "[0.4323021855542 +/- 1.67e-14]", prec);
        TEST(r, v, "2f1 regularized");

        arb_hypgeom_erf(r, z, prec);
        arb_set_str(v, "[0.711155633653515 +/- 2.35e-16]", prec);
        TEST(r, v, "erf");

        arb_hypgeom_erfc(r, z, prec);
        arb_set_str(v, "[0.288844366346485 +/- 2.34e-16]", prec);
        TEST(r, v, "erfc");

        arb_hypgeom_erfi(r, z, prec);
        arb_set_str(v, "[1.03575728441196 +/- 3.17e-15]", prec);
        TEST(r, v, "erfi");

        arb_hypgeom_fresnel(r, NULL, z, 0, prec);
        arb_set_str(v, "[0.137478632382610 +/- 1.79e-16]", prec);
        TEST(r, v, "fresnel_s");

        arb_hypgeom_fresnel(r, NULL, z, 1, prec);
        arb_set_str(v, "[0.208877111233384 +/- 4.63e-16]", prec);
        TEST(r, v, "fresnel_s normalized");

        arb_hypgeom_fresnel(NULL, r, z, 0, prec);
        arb_set_str(v, "[0.726614618304550 +/- 2.11e-16]", prec);
        TEST(r, v, "fresnel_c");

        arb_hypgeom_fresnel(NULL, r, z, 1, prec);
        arb_set_str(v, "[0.693525990787136 +/- 2.76e-16]", prec);
        TEST(r, v, "fresnel_c normalized");

        arb_hypgeom_gamma_lower(r, a, z, 0, prec);
        arb_set_str(v, "[1.38132404568612 +/- 3.66e-15]", prec);
        TEST(r, v, "gamma_lower");

        arb_hypgeom_gamma_lower(r, a, z, 1, prec);
        arb_set_str(v, "[0.77932863808015 +/- 4.17e-15]", prec);
        TEST(r, v, "gamma_lower 1");

        arb_hypgeom_gamma_lower(r, a, z, 2, prec);
        arb_set_str(v, "[0.89989119796552 +/- 2.76e-15]", prec);
        TEST(r, v, "gamma_lower 2");

        arb_hypgeom_gamma_upper(r, a, z, 0, prec);
        arb_set_str(v, "[0.39112980521940 +/- 4.21e-15]", prec);
        TEST(r, v, "gamma_upper");

        arb_hypgeom_gamma_upper(r, a, z, 1, prec);
        arb_set_str(v, "[0.22067136191985 +/- 4.08e-15]", prec);
        TEST(r, v, "gamma_upper 1");

        arb_hypgeom_beta_lower(r, a, b, z, 0, prec);
        arb_set_str(v, "[2.3363313667086 +/- 3.14e-14]", prec);
        TEST(r, v, "beta_lower");

        arb_hypgeom_beta_lower(r, a, b, z, 1, prec);
        arb_set_str(v, "[0.44551489018313 +/- 6.22e-15]", prec);
        TEST(r, v, "beta_lower 1");

        arb_hypgeom_expint(r, a, z, prec);
        arb_set_str(v, "[0.45163779666301 +/- 3.10e-15]", prec);
        TEST(r, v, "expint");

        arb_hypgeom_ei(r, z, prec);
        arb_set_str(v, "[1.20733281600122 +/- 2.72e-15]", prec);
        TEST(r, v, "ei");

        arb_hypgeom_si(r, z, prec);
        arb_set_str(v, "[0.72695424715009 +/- 3.99e-15]", prec);
        TEST(r, v, "si");

        arb_hypgeom_ci(r, z, prec);
        arb_set_str(v, "[0.152163600980330 +/- 5.49e-16]", prec);
        TEST(r, v, "ci");

        arb_hypgeom_shi(r, z, prec);
        arb_set_str(v, "[0.77383681445623 +/- 5.97e-15]", prec);
        TEST(r, v, "shi");

        arb_hypgeom_chi(r, z, prec);
        arb_set_str(v, "[0.433496001544996 +/- 7.91e-16]", prec);
        TEST(r, v, "chi");

        arb_hypgeom_li(r, z, 0, prec);
        arb_set_str(v, "[-0.93693001101265 +/- 5.67e-15]", prec);
        TEST(r, v, "li");

        arb_hypgeom_li(r, z, 1, prec);
        arb_set_str(v, "[-1.98209379113014 +/- 3.56e-15]", prec);
        TEST(r, v, "li offset");

        arb_hypgeom_bessel_j(r, a, z, prec);
        arb_set_str(v, "[0.62800587637589 +/- 4.06e-15]", prec);
        TEST(r, v, "bessel_j");

        arb_hypgeom_bessel_y(r, a, z, prec);
        arb_set_str(v, "[-0.67411792914454 +/- 5.27e-15]", prec);
        TEST(r, v, "bessel_y");

        arb_hypgeom_bessel_jy(r, u, a, z, prec);
        arb_set_str(v, "[0.62800587637589 +/- 4.06e-15]", prec);
        TEST(r, v, "bessel_jy");
        arb_set_str(v, "[-0.67411792914454 +/- 5.27e-15]", prec);
        TEST(u, v, "bessel_jy");

        arb_hypgeom_bessel_i(r, a, z, prec);
        arb_set_str(v, "[0.75761498638991 +/- 4.63e-15]", prec);
        TEST(r, v, "bessel_i");

        arb_hypgeom_bessel_k(r, a, z, prec);
        arb_set_str(v, "[0.68361006034952 +/- 7.89e-15]", prec);
        TEST(r, v, "bessel_k");

        arb_hypgeom_airy(r, NULL, NULL, NULL, z, prec);
        arb_set_str(v, "[0.179336305478645 +/- 2.36e-16]", prec);
        TEST(r, v, "airy ai");

        arb_hypgeom_airy(NULL, r, NULL, NULL, z, prec);
        arb_set_str(v, "[-0.193175208104376 +/- 4.67e-16]", prec);
        TEST(r, v, "airy ai'");

        arb_hypgeom_airy(NULL, NULL, r, NULL, z, prec);
        arb_set_str(v, "[1.00693090863322 +/- 3.90e-15]", prec);
        TEST(r, v, "airy bi");

        arb_hypgeom_airy(NULL, NULL, NULL, r, z, prec);
        arb_set_str(v, "[0.690299702736886 +/- 2.34e-16]", prec);
        TEST(r, v, "airy bi'");

        arb_hypgeom_chebyshev_t(r, a, z, prec);
        arb_set_str(v, "[0.935414346693485 +/- 7.02e-16]", prec);
        TEST(r, v, "chebyshev_t");

        arb_hypgeom_chebyshev_u(r, a, z, prec);
        arb_set_str(v, "[1.33630620956212 +/- 3.41e-15]", prec);
        TEST(r, v, "chebyshev_u");

        arb_hypgeom_jacobi_p(r, a, b, c, z, prec);
        arb_set_str(v, "[1.03224258095454 +/- 6.54e-15]", prec);
        TEST(r, v, "jacobi_p");

        arb_hypgeom_gegenbauer_c(r, a, b, z, prec);
        arb_set_str(v, "[0.58153237382485 +/- 3.74e-15]", prec);
        TEST(r, v, "gegenbauer_c");

        arb_hypgeom_laguerre_l(r, a, b, z, prec);
        arb_set_str(v, "[0.76858987769621 +/- 3.19e-15]", prec);
        TEST(r, v, "laguerre_l");

        arb_hypgeom_hermite_h(r, a, z, prec);
        arb_set_str(v, "[1.31600493243946 +/- 6.52e-15]", prec);
        TEST(r, v, "hermite_h");

        arb_hypgeom_legendre_p(r, a, b, z, 0, prec);
        arb_set_str(v, "[0.90435295129350 +/- 5.79e-15]", prec);
        TEST(r, v, "legendre_q");

        arb_hypgeom_legendre_q(r, a, b, z, 0, prec);
        arb_set_str(v, "[-0.3763617490859 +/- 3.83e-14]", prec);
        TEST(r, v, "legendre_q");

        arb_clear(a);
        arb_clear(b);
        arb_clear(c);
        arb_clear(d);
        arb_clear(z);
        arb_clear(r);
        arb_clear(u);
        arb_clear(v);
    }

    flint_randclear(state);
    flint_cleanup();
    flint_printf("PASS\n");
    return EXIT_SUCCESS;
}
Exemple #8
0
void
gamma_rate_mixture_summarize(
        arb_ptr rate_mix_prior, arb_ptr rate_mix_rates, arb_ptr rate_mix_expect,
        const gamma_rate_mixture_t x, enum rate_mixture_mode mode, slong prec)
{
    slong i;
    arb_ptr r;

    arb_t p, q;
    arb_init(p);
    arb_init(q);
    arb_set_d(p, x->invariable_prior);
    arb_sub_si(q, p, 1, prec);
    arb_neg(q, q);

    /* the expectation is designed to be 1 */
    arb_one(rate_mix_expect);

    /* probabilities corresponding to gamma rate categories */
    for (i = 0; i < x->gamma_categories; i++)
    {
        r = rate_mix_prior + i;
        arb_div_si(r, q, x->gamma_categories, prec);
    }

    /* optional probability corresponding to the invariable category */
    if (x->invariable_prior)
    {
        r = rate_mix_prior + x->gamma_categories;
        arb_set(r, p);
    }

    /* set the discretized gamma rates */
    {
        arb_t s;
        arb_init(s);
        arb_set_d(s, x->gamma_shape);
        if (mode == RATE_MIXTURE_GAMMA)
        {
            gamma_rates(
                    rate_mix_rates, x->gamma_categories, s, prec);
        }
        else if (mode == RATE_MIXTURE_GAMMA_MEDIAN)
        {
            normalized_median_gamma_rates(
                    rate_mix_rates, x->gamma_categories, s, prec);
        }
        else
        {
            abort(); /* assert */
        }
        arb_clear(s);
    }

    /* normalize the rates to account for a possible invariable category */
    for (i = 0; i < x->gamma_categories; i++)
    {
        r = rate_mix_rates + i;
        arb_div(r, r, q, prec);
    }

    arb_clear(p);
    arb_clear(q);
}