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)
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)
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)
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)
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)