def test_gradient_division(): gradient_a = ParameterGradient( ParameterGradientKey("vdW", "[#1:1]", "epsilon"), 2.0 * unit.kelvin) result = gradient_a / 2.0 assert np.isclose(result.value.to(unit.kelvin).magnitude, 1.0) gradient_c = ParameterGradient( ParameterGradientKey("vdW", "[#1:1]", "epsilon"), 1.0 * unit.kelvin) with pytest.raises(ValueError): gradient_a / gradient_c
def test_gradient_subtraction(): gradient_a = ParameterGradient( ParameterGradientKey("vdW", "[#1:1]", "epsilon"), 1.0 * unit.kelvin) gradient_b = ParameterGradient( ParameterGradientKey("vdW", "[#1:1]", "epsilon"), 2.0 * unit.kelvin) result = gradient_a - gradient_b assert np.isclose(result.value.to(unit.kelvin).magnitude, -1.0) result = gradient_b - gradient_a assert np.isclose(result.value.to(unit.kelvin).magnitude, 1.0) gradient_c = ParameterGradient( ParameterGradientKey("vdW", "[#6:1]", "epsilon"), 1.0 * unit.kelvin) with pytest.raises(ValueError): gradient_a - gradient_c with pytest.raises(ValueError): gradient_c - gradient_a with pytest.raises(ValueError): gradient_a - 1.0
def _execute(self, directory, available_resources): if self.forward_parameter_value < self.reverse_parameter_value: raise ValueError( f"The forward parameter value ({self.forward_parameter_value}) must " f"be larger than the reverse value ({self.reverse_parameter_value})." ) reverse_value = self.reverse_observable_value forward_value = self.forward_observable_value if isinstance(reverse_value, pint.Measurement): reverse_value = reverse_value.value if isinstance(forward_value, pint.Measurement): forward_value = forward_value.value gradient = (forward_value - reverse_value) / ( self.forward_parameter_value - self.reverse_parameter_value ) self.gradient = ParameterGradient(self.parameter_key, gradient)
from evaluator.substances import Component, ExactAmount, MoleFraction, Substance @pytest.mark.parametrize( "values", [ [random.randint(1, 10) for _ in range(10)], [random.random() for _ in range(10)], [random.random() * unit.kelvin for _ in range(10)], [ (random.random() * unit.kelvin).plus_minus(random.random() * unit.kelvin) for x in range(10) ], [ ParameterGradient( ParameterGradientKey("a", "b", "c"), random.random() * unit.kelvin ) for _ in range(10) ], ], ) def test_add_values_protocol(values): with tempfile.TemporaryDirectory() as temporary_directory: add_quantities = AddValues("add") add_quantities.values = values add_quantities.execute(temporary_directory, ComputeResources()) assert add_quantities.result == reduce(operator.add, values)
SubtractValues, WeightByMoleFraction, ) from evaluator.substances import Component, ExactAmount, MoleFraction, Substance @pytest.mark.parametrize( "values", [ [random.randint(1, 10) for _ in range(10)], [random.random() for _ in range(10)], [random.random() * unit.kelvin for _ in range(10)], [(random.random() * unit.kelvin).plus_minus( random.random() * unit.kelvin) for x in range(10)], [ ParameterGradient(ParameterGradientKey("a", "b", "c"), random.random() * unit.kelvin) for _ in range(10) ], ], ) def test_add_values_protocol(values): with tempfile.TemporaryDirectory() as temporary_directory: add_quantities = AddValues("add") add_quantities.values = values add_quantities.execute(temporary_directory, ComputeResources()) assert add_quantities.result == reduce(operator.add, values) @pytest.mark.parametrize(