示例#1
0
def test_invalid_formulas(formula_data, exception, formula, absorb):
    """Test that an invalid formula gives rise to an exception."""
    try:
        formulation = Formulation(formula, absorb)
        formulation._build_matrix(formula_data)
        if absorb is not None:
            formulation._build_ids(formula_data)
    except exception:
        print(traceback.format_exc())
        return
    raise RuntimeError(f"Successful formulation: {formulation}.")
示例#2
0
def test_matrices(
        formula_data: Data, formulas: Iterable[str], build_columns: Callable[[Mapping[str, Array]], Sequence[Array]],
        build_derivatives: Callable[[Mapping[str, Array]], Sequence[Array]]) -> None:
    """Test that equivalent formulas build columns and derivatives as expected. Take derivatives with respect to x."""

    # construct convenience columns of ones and zeros
    ones = np.ones_like(formula_data['x'])
    zeros = np.zeros_like(formula_data['x'])

    # build columns and derivatives for each formula, making sure that it can be formatted
    for formula in formulas:
        formulation = Formulation(formula)
        assert str(formulation)
        matrix, column_formulations, underlying_data = formulation._build_matrix(formula_data)
        evaluated_matrix = np.column_stack([ones * f.evaluate(underlying_data) for f in column_formulations])
        derivatives = np.column_stack([ones * f.evaluate_derivative('x', underlying_data) for f in column_formulations])

        # build expected columns and derivatives
        supplemented_data = {'1': ones, '0': zeros, **underlying_data}
        expected_matrix = np.column_stack(build_columns(supplemented_data))
        expected_derivatives = np.column_stack(build_derivatives(supplemented_data))

        # compare columns and derivatives
        np.testing.assert_allclose(matrix, expected_matrix, rtol=0, atol=1e-14, err_msg=formula)
        np.testing.assert_allclose(matrix, evaluated_matrix, rtol=0, atol=1e-14, err_msg=formula)
        np.testing.assert_allclose(derivatives, expected_derivatives, rtol=0, atol=1e-14, err_msg=formula)