Ejemplo n.º 1
0
def test_mc_partial_integration():
    values = z.convert_to_tensor(func4_values)
    data1 = zfit.Data.from_tensor(obs='obs2',
                                  tensor=tf.expand_dims(values, axis=-1))
    limits1 = Space(limits=limits4_2dim, obs=['obs1', 'obs3'])
    limits1._set_obs_axes({'obs1': 0, 'obs3': 2})
    num_integral = zintegrate.mc_integrate(x=data1,
                                           func=func4_3deps,
                                           limits=limits1)

    vals_tensor = z.convert_to_tensor(func4_2values)

    vals_reshaped = tf.transpose(a=vals_tensor)
    data2 = zfit.Data.from_tensor(obs=['obs1', 'obs3'], tensor=vals_reshaped)

    limits2 = Space(limits=limits4_1dim, obs=['obs2'])
    limits2._set_obs_axes({'obs2': 1})
    num_integral2 = zintegrate.mc_integrate(x=data2,
                                            func=func4_3deps,
                                            limits=limits2,
                                            draws_per_dim=100)

    integral = num_integral.numpy()
    integral2 = num_integral2.numpy()
    # print("DEBUG", value:", vals_reshaped)
    assert len(integral) == len(func4_values)
    assert len(integral2) == len(func4_2values[0])
    assert func4_3deps_0and2_integrated(
        x=func4_values, limits=limits4_2dim) == pytest.approx(integral,
                                                              rel=0.03)

    assert func4_3deps_1_integrated(
        x=func4_2values, limits=limits4_1dim) == pytest.approx(integral2,
                                                               rel=0.03)
Ejemplo n.º 2
0
def test_mc_integration(chunksize):
    # simpel example
    zfit.run.chunking.active = True
    zfit.run.chunking.max_n_points = chunksize
    num_integral = zintegrate.mc_integrate(func=func1_5deps,
                                           limits=Space.from_axes(
                                               limits=limits_simple_5deps,
                                               axes=tuple(range(5))),
                                           n_axes=5)
    num_integral2 = zintegrate.mc_integrate(func=func2_1deps,
                                            limits=Space.from_axes(
                                                limits=limits2,
                                                axes=tuple(range(1))),
                                            n_axes=1)
    num_integral3 = zintegrate.mc_integrate(func=func3_2deps,
                                            limits=Space.from_axes(
                                                limits=limits3,
                                                axes=tuple(range(2))),
                                            n_axes=2)

    integral = num_integral.numpy()
    integral2 = num_integral2.numpy()
    integral3 = num_integral3.numpy()

    assert not hasattr(integral, "__len__")
    assert not hasattr(integral2, "__len__")
    assert not hasattr(integral3, "__len__")
    assert func1_5deps_fully_integrated(limits_simple_5deps) == pytest.approx(
        integral, rel=0.1)
    assert func2_1deps_fully_integrated(limits2) == pytest.approx(integral2,
                                                                  rel=0.03)
    assert func3_2deps_fully_integrated(
        Space.from_axes(limits=limits3,
                        axes=(0, 1))).numpy() == pytest.approx(integral3,
                                                               rel=0.03)
Ejemplo n.º 3
0
def test_mc_partial_integration():
    values = z.convert_to_tensor(func4_values)
    data1 = zfit.Data.from_tensor(obs="obs2",
                                  tensor=tf.expand_dims(values, axis=-1))
    limits1 = Space(limits=limits4_2dim, obs=["obs1", "obs3"], axes=(0, 2))
    num_integral = zintegrate.mc_integrate(func=func4_3deps,
                                           limits=limits1,
                                           x=data1)

    vals_tensor = z.convert_to_tensor(func4_2values)

    vals_reshaped = tf.transpose(a=vals_tensor)
    data2 = zfit.Data.from_tensor(obs=["obs1", "obs3"], tensor=vals_reshaped)

    limits2 = Space(limits=limits4_1dim, obs=["obs2"], axes=1)
    num_integral2 = zintegrate.mc_integrate(func=func4_3deps,
                                            limits=limits2,
                                            x=data2,
                                            draws_per_dim=1000)

    integral = num_integral.numpy()
    integral2 = num_integral2.numpy()
    # print("DEBUG", value:", vals_reshaped)
    assert len(integral) == len(func4_values)
    assert len(integral2) == len(func4_2values[0])
    assert func4_3deps_0and2_integrated(
        x=func4_values, limits=limits4_2dim) == pytest.approx(integral,
                                                              rel=0.05)

    assert func4_3deps_1_integrated(
        x=func4_2values, limits=limits4_1dim) == pytest.approx(integral2,
                                                               rel=0.05)
Ejemplo n.º 4
0
def test_mc_integration(chunksize, limits):
    # simpel example
    zfit.run.chunking.active = True
    zfit.run.chunking.max_n_points = chunksize
    num_integral = zintegrate.mc_integrate(func=func1_5deps,
                                           limits=Space(limits=limits_simple_5deps,
                                                        axes=tuple(range(5))),
                                           n_axes=5)
    if isinstance(limits, list):
        spaces = [Space(limits=limit, axes=tuple(range(1))) for limit in limits]
        space2 = spaces[0] + spaces[1]
    else:
        space2 = Space(limits=limits2, axes=tuple(range(1)))
    num_integral2 = zintegrate.mc_integrate(func=func2_1deps,
                                            limits=space2,
                                            n_axes=1)
    num_integral3 = zintegrate.mc_integrate(func=func3_2deps,
                                            limits=Space(limits=limits3,
                                                         axes=(0, 1)),
                                            n_axes=2)

    integral = num_integral.numpy()
    integral2 = num_integral2.numpy()
    integral3 = num_integral3.numpy()

    assert integral.shape == (1,)
    assert integral2.shape == (1,)
    assert integral3.shape == (1,)
    assert func1_5deps_fully_integrated(limits_simple_5deps) == pytest.approx(integral,
                                                                              rel=0.1)
    assert func2_1deps_fully_integrated(limits2) == pytest.approx(integral2, rel=0.03)
    assert func3_2deps_fully_integrated(
        Space(limits=limits3, axes=(0, 1))).numpy() == pytest.approx(integral3, rel=0.03)
Ejemplo n.º 5
0
def test_mc_integration():
    # simpel example
    num_integral = zintegrate.mc_integrate(func=func1_5deps,
                                           limits=Space.from_axes(limits=limits_simple_5deps,
                                                                  axes=tuple(range(5))),
                                           n_axes=5)
    num_integral2 = zintegrate.mc_integrate(func=func2_1deps,
                                            limits=Space.from_axes(limits=limits2,
                                                                   axes=tuple(range(1))),
                                            n_axes=1)
    num_integral3 = zintegrate.mc_integrate(func=func3_2deps,
                                            limits=Space.from_axes(limits=limits3,
                                                                   axes=tuple(range(2))),
                                            n_axes=2)

    integral = zfit.run(num_integral)
    integral2 = zfit.run(num_integral2)
    integral3 = zfit.run(num_integral3)

    assert not hasattr(integral, "__len__")
    assert not hasattr(integral2, "__len__")
    assert not hasattr(integral3, "__len__")
    assert func1_5deps_fully_integrated(limits_simple_5deps) == pytest.approx(integral,
                                                                              rel=0.1)
    assert func2_1deps_fully_integrated(limits2) == pytest.approx(integral2, rel=0.03)
    assert func3_2deps_fully_integrated(
        Space.from_axes(limits=limits3, axes=(0, 1))) == pytest.approx(integral3, rel=0.03)