def test_get_likelihood_with_parents(self, bivariate_mock): """If edge has parents, their dependences are used to retrieve univariates.""" # Setup index = None left = 0 right = 1 copula_name = 'copula_name' copula_theta = 'copula_theta' instance = Edge(index, left, right, copula_name, copula_theta) instance.D = {0, 1, 2, 3} parent_1 = MagicMock(spec=Edge) parent_1.D = {1, 2, 3} parent_2 = MagicMock(spec=Edge) parent_2.D = {0, 2, 3} univariates = np.array([ [0.25, 0.75], [0.50, 0.50], [0.75, 0.25] ]).T instance_mock = bivariate_mock.return_value instance_mock.probability_density.return_value = [0] instance_mock.partial_derivative.return_value = 'partial_derivative' expected_partial_derivative_call_args = [ ( (np.array([[ [0.25, 0.75], [0.50, 0.50], ]]),), {} ), ( (np.array([[ [0.50, 0.50], [0.25, 0.75] ]]), ), {} ) ] # Run result = instance.get_likelihood(univariates) # Check value, left_given_right, right_given_left = result assert value == 0 assert left_given_right == 'partial_derivative' assert right_given_left == 'partial_derivative' bivariate_mock.assert_called_once_with(copula_type='copula_name') assert instance_mock.theta == 'copula_theta' compare_nested_iterables( instance_mock.partial_derivative.call_args_list, expected_partial_derivative_call_args )
def test_get_likelihood_no_parents(self, bivariate_mock): """get_likelihood will use current node indices if there are no parents.""" # Setup index = 0 left = 0 right = 1 copula_name = 'copula_name' copula_theta = 'copula_theta' instance = Edge(index, left, right, copula_name, copula_theta) univariates = np.array([ [0.25, 0.75], [0.50, 0.50], [0.75, 0.25] ]).T instance_mock = bivariate_mock.return_value instance_mock.probability_density.return_value = [0] instance_mock.partial_derivative.return_value = 'partial_derivative' expected_partial_derivative_call_args = [ ( (np.array([[ [0.25, 0.75], [0.50, 0.50], ]]),), {} ), ( (np.array([[ [0.50, 0.50], [0.25, 0.75] ]]), ), {} ) ] # Run result = instance.get_likelihood(univariates) # Check value, left_given_right, right_given_left = result assert value == 0 assert left_given_right == 'partial_derivative' assert right_given_left == 'partial_derivative' bivariate_mock.assert_called_once_with(copula_type='copula_name') assert instance_mock.theta == 'copula_theta' compare_nested_iterables( instance_mock.partial_derivative.call_args_list, expected_partial_derivative_call_args )