def test_composed_param(): param1 = Parameter('param1', 1.) param2 = Parameter('param2', 2.) param3 = Parameter('param3', 3., floating=False) param4 = Parameter('param4', 4.) # noqa Needed to make sure it does not only take all params as deps def value_fn(p1, p2, p3): return z.math.log(3. * p1) * tf.square(p2) - p3 param_a = ComposedParameter('param_as', value_fn=value_fn, params=(param1, param2, param3)) param_a2 = ComposedParameter('param_as2', value_fn=value_fn, params={f'p{i}': p for i, p in enumerate((param1, param2, param3))}) assert param_a2.params['p1'] == param2 assert isinstance(param_a.get_cache_deps(only_floating=True), OrderedSet) assert param_a.get_cache_deps(only_floating=True) == {param1, param2} assert param_a.get_cache_deps(only_floating=False) == {param1, param2, param3} a_unchanged = value_fn(param1, param2, param3).numpy() assert a_unchanged == param_a.numpy() param2.assign(3.5) assert param2.numpy() a_changed = value_fn(param1, param2, param3).numpy() assert a_changed == param_a.numpy() assert a_changed != a_unchanged print(param_a) @z.function def print_param(p): print(p) print_param(param_a)
def test_composed_param(): param1 = Parameter('param1', 1.) param2 = Parameter('param2', 2.) param3 = Parameter('param3', 3., floating=False) param4 = Parameter( 'param4', 4.) # needed to make sure it does not only take all params as deps a = ztf.log(3. * param1) * tf.square(param2) - param3 param_a = ComposedParameter('param_as', tensor=a) assert isinstance(param_a.get_dependents(only_floating=True), OrderedSet) assert param_a.get_dependents(only_floating=True) == {param1, param2} assert param_a.get_dependents(only_floating=False) == { param1, param2, param3 } a_unchanged = zfit.run(a) assert a_unchanged == zfit.run(param_a) assert zfit.run(param2.assign(3.5)) a_changed = zfit.run(a) assert a_changed == zfit.run(param_a) assert a_changed != a_unchanged with pytest.raises(LogicalUndefinedOperationError): param_a.assign(value=5.) with pytest.raises(LogicalUndefinedOperationError): param_a.load(value=5., session=zfit.run.sess)
def test_composed_param(): param1 = Parameter('param1', 1.) param2 = Parameter('param2', 2.) param3 = Parameter('param3', 3., floating=False) param4 = Parameter( 'param4', 4.) # needed to make sure it does not only take all params as deps def a(): return z.log(3. * param1) * tf.square(param2) - param3 param_a = ComposedParameter('param_as', value_fn=a, dependents=(param1, param2, param3)) assert isinstance(param_a.get_dependents(only_floating=True), OrderedSet) assert param_a.get_dependents(only_floating=True) == {param1, param2} assert param_a.get_dependents(only_floating=False) == { param1, param2, param3 } a_unchanged = a().numpy() assert a_unchanged == param_a.numpy() assert param2.assign(3.5).numpy() a_changed = a().numpy() assert a_changed == param_a.numpy() assert a_changed != a_unchanged with pytest.raises(LogicalUndefinedOperationError): param_a.assign(value=5.) with pytest.raises(LogicalUndefinedOperationError): param_a.assign(value=5.)
def test_param_limits(): lower, upper = -4.0, 3.0 param1 = Parameter("param1", 1.0, lower=lower, upper=upper) param2 = Parameter("param2", 2.0) assert param1.has_limits assert not param2.has_limits with pytest.raises(ValueError): param1.set_value(upper + 0.5) param1.assign(upper + 0.5) assert upper == param1.value().numpy() assert param1.at_limit with pytest.raises(ValueError): param1.set_value(lower - 1.1) param1.assign(lower - 1.1) assert lower == param1.value().numpy() assert param1.at_limit param1.set_value(upper - 0.1) assert not param1.at_limit param2.lower = lower param2.assign(lower - 1.1) assert lower == param2.value().numpy()