"""
This module contains unit tests, for the most important functions of
ruspy.estimation.mpec. The values to compare the results with
are saved in resources/estimation_test. The setting of the test is documented in the
inputs section in test module.
"""
import numpy as np
import pandas as pd
import pytest
from numpy.testing import assert_almost_equal
from numpy.testing import assert_array_almost_equal
from ruspy.config import TEST_RESOURCES_DIR
from ruspy.estimation.estimation_transitions import create_transition_matrix
from ruspy.estimation.estimation_transitions import estimate_transitions
from ruspy.estimation.mpec import mpec_constraint
from ruspy.estimation.mpec import mpec_constraint_derivative
from ruspy.estimation.mpec import mpec_loglike_cost_params
from ruspy.estimation.mpec import mpec_loglike_cost_params_derivative
from ruspy.estimation.nfxp import create_state_matrix
from ruspy.model_code.cost_functions import lin_cost
from ruspy.model_code.cost_functions import lin_cost_dev
TEST_FOLDER = TEST_RESOURCES_DIR + "replication_test/"
[docs]@pytest.fixture
def outputs():
out = {}
out["mpec_likelihood"] = np.loadtxt(
TEST_RESOURCES_DIR + "estimation_test/mpec_like.txt"
)
out["mpec_constraint"] = np.loadtxt(
TEST_RESOURCES_DIR + "estimation_test/mpec_constraint.txt"
)
out["mpec_like_dev"] = np.loadtxt(
TEST_RESOURCES_DIR + "estimation_test/mpec_like_dev.txt"
)
out["mpec_constr_dev"] = np.loadtxt(
TEST_RESOURCES_DIR + "estimation_test/mpec_constr_dev.txt"
)
return out
[docs]def test_mpec_likelihood(inputs, outputs):
assert_almost_equal(
mpec_loglike_cost_params(
inputs["params"],
inputs["maint_func"],
inputs["maint_func_dev"],
inputs["num_states"],
inputs["disc_fac"],
inputs["scale"],
inputs["decision_matrix"],
inputs["state_matrix"],
),
outputs["mpec_likelihood"],
)
[docs]def test_like_dev(inputs, outputs):
assert_array_almost_equal(
mpec_loglike_cost_params_derivative(
inputs["params"],
inputs["maint_func"],
inputs["maint_func_dev"],
inputs["num_states"],
inputs["disc_fac"],
inputs["scale"],
inputs["decision_matrix"],
inputs["state_matrix"],
),
outputs["mpec_like_dev"],
)
[docs]def test_mpec_constraint(inputs, outputs):
assert_array_almost_equal(
mpec_constraint(
inputs["params"],
inputs["maint_func"],
inputs["maint_func_dev"],
inputs["num_states"],
inputs["disc_fac"],
inputs["scale"],
inputs["trans_matrix"],
),
outputs["mpec_constraint"],
)
[docs]def test_mpec_constraint_dev(inputs, outputs):
assert_array_almost_equal(
mpec_constraint_derivative(
inputs["params"],
inputs["maint_func"],
inputs["maint_func_dev"],
inputs["num_states"],
inputs["disc_fac"],
inputs["scale"],
inputs["trans_matrix"],
),
outputs["mpec_constr_dev"],
)