Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def create_loss(n=15000):
a_param = zfit.Parameter("variable_a15151", 1.5, -1., 20.,
step_size=z.constant(0.1))
b_param = zfit.Parameter("variable_b15151", 3.5, 0, 20)
c_param = zfit.Parameter("variable_c15151", -0.04, -1, 0.)
obs1 = zfit.Space(obs='obs1', limits=(-2.4, 9.1))
# load params for sampling
a_param.set_value(true_a)
b_param.set_value(true_b)
c_param.set_value(true_c)
gauss1 = zfit.pdf.Gauss(mu=a_param, sigma=b_param, obs=obs1)
exp1 = zfit.pdf.Exponential(lam=c_param, obs=obs1)
sum_pdf1 = zfit.pdf.SumPDF((gauss1, exp1), 0.7)
sampled_data = sum_pdf1.create_sampler(n=n)
sampled_data.resample()
def test_gradients(chunksize):
from numdifftools import Gradient
zfit.run.chunking.active = True
zfit.run.chunking.max_n_points = chunksize
initial1 = 1.
initial2 = 2
param1 = zfit.Parameter("param1", initial1)
param2 = zfit.Parameter("param2", initial2)
gauss1 = Gauss(param1, 4, obs=obs1)
gauss1.set_norm_range((-5, 5))
gauss2 = Gauss(param2, 5, obs=obs1)
gauss2.set_norm_range((-5, 5))
data1 = zfit.Data.from_tensor(obs=obs1, tensor=z.constant(1., shape=(100,)))
data1.set_data_range((-5, 5))
data2 = zfit.Data.from_tensor(obs=obs1, tensor=z.constant(1., shape=(100,)))
data2.set_data_range((-5, 5))
nll = UnbinnedNLL(model=[gauss1, gauss2], data=[data1, data2])
def loss_func(values):
for val, param in zip(values, nll.get_cache_deps(only_floating=True)):
param.set_value(val)
return nll.value().numpy()
# theoretical, numerical = tf.test.compute_gradient(loss_func, list(params))
gradient1 = nll.gradients(params=param1)
gradient_func = Gradient(loss_func)
# gradient_func = lambda *args, **kwargs: list(gradient_func_numpy(*args, **kwargs))
assert gradient1[0].numpy() == pytest.approx(gradient_func([param1.numpy()]))
def test_add():
param1 = zfit.Parameter("param1", 1.)
param2 = zfit.Parameter("param2", 2.)
param3 = zfit.Parameter("param3", 2.)
pdfs = [0] * 4
pdfs[0] = Gauss(param1, 4, obs=obs1)
pdfs[1] = Gauss(param2, 5, obs=obs1)
pdfs[2] = Gauss(3, 6, obs=obs1)
pdfs[3] = Gauss(4, 7, obs=obs1)
datas = [0] * 4
datas[0] = z.constant(1.)
datas[1] = z.constant(2.)
datas[2] = z.constant(3.)
datas[3] = z.constant(4.)
ranges = [0] * 4
ranges[0] = (1, 4)
ranges[1] = Space(limits=(2, 5), obs=obs1)
ranges[2] = Space(limits=(3, 6), obs=obs1)
ranges[3] = Space(limits=(4, 7), obs=obs1)
constraint1 = zfit.constraint.nll_gaussian(params=param1, observation=1., uncertainty=0.5)
constraint2 = zfit.constraint.nll_gaussian(params=param3, observation=2., uncertainty=0.25)
merged_contraints = [constraint1, constraint2]
nll1 = UnbinnedNLL(model=pdfs[0], data=datas[0], fit_range=ranges[0], constraints=constraint1)
nll2 = UnbinnedNLL(model=pdfs[1], data=datas[1], fit_range=ranges[1], constraints=constraint2)
nll3 = UnbinnedNLL(model=[pdfs[2], pdfs[3]], data=[datas[2], datas[3]], fit_range=[ranges[2], ranges[3]])
def test_add():
param1 = zfit.Parameter("param1", 1.)
param2 = zfit.Parameter("param2", 2.)
param3 = zfit.Parameter("param3", 2.)
pdfs = [0] * 4
pdfs[0] = Gauss(param1, 4, obs=obs1)
pdfs[1] = Gauss(param2, 5, obs=obs1)
pdfs[2] = Gauss(3, 6, obs=obs1)
pdfs[3] = Gauss(4, 7, obs=obs1)
datas = [0] * 4
datas[0] = z.constant(1.)
datas[1] = z.constant(2.)
datas[2] = z.constant(3.)
datas[3] = z.constant(4.)
ranges = [0] * 4
ranges[0] = (1, 4)
ranges[1] = Space(limits=(2, 5), obs=obs1)
ranges[2] = Space(limits=(3, 6), obs=obs1)
ranges[3] = Space(limits=(4, 7), obs=obs1)
constraint1 = zfit.constraint.nll_gaussian(params=param1, observation=1., uncertainty=0.5)
constraint2 = zfit.constraint.nll_gaussian(params=param3, observation=2., uncertainty=0.25)
merged_contraints = [constraint1, constraint2]
nll1 = UnbinnedNLL(model=pdfs[0], data=datas[0], fit_range=ranges[0], constraints=constraint1)
nll2 = UnbinnedNLL(model=pdfs[1], data=datas[1], fit_range=ranges[1], constraints=constraint2)
right = tf.cond(pred=tf.greater(mu, upper), true_fn=lambda: z.constant(0.),
false_fn=lambda: crystalball_integral_func(mu=mu, sigma=sigma, alpha=alphar, n=nr,
def _exp_integral_func_shifting(lambd, lower, upper, model):
def raw_integral(x):
return z.exp(lambd * (model._shift_x(x))) / lambd # needed due to overflow in exp otherwise
lower_int = raw_integral(x=z.constant(lower))
upper_int = raw_integral(x=z.constant(upper))
integral = (upper_int - lower_int)
return integral
def gauss_4d(x, params):
norm = params[0]
mean = tf.stack(params[1:5])
sigma = tf.stack(params[5:9])
corr = tf.stack([[z.constant(1.), params[9], params[10], params[11]],
[params[9], z.constant(1.), params[12], params[13]],
[params[10], params[12], z.constant(1.), params[14]],
[params[11], params[13], params[14], z.constant(1.)]])
cov = tf.einsum("i,ij,j->ij", sigma, corr, sigma)
invcov = tf.linalg.inv(cov)
return multivariate_gauss(x, norm, mean, invcov)
def gauss_4d(x, params):
norm = params[0]
mean = tf.stack(params[1:5])
sigma = tf.stack(params[5:9])
corr = tf.stack([[z.constant(1.), params[9], params[10], params[11]],
[params[9], z.constant(1.), params[12], params[13]],
[params[10], params[12], z.constant(1.), params[14]],
[params[11], params[13], params[14], z.constant(1.)]])
cov = tf.einsum("i,ij,j->ij", sigma, corr, sigma)
invcov = tf.linalg.inv(cov)
return multivariate_gauss(x, norm, mean, invcov)
left = tf.cond(pred=tf.less(mu, lower), true_fn=lambda: z.constant(0.),
false_fn=lambda: crystalball_integral_func(mu=mu, sigma=sigma, alpha=alphal, n=nl,