def test__get_nearest_correlation_matrix_invalid(self): """Test ``_get_nearest_correlation_matrix`` with a non psd input. If the matrix is not positive semi-definite, modify it to make it PSD. Input: - matrix which is not positive semi-definite. Expected Output: - modified matrix which is positive semi-definite. """ # Run not_psd_matrix = np.array([ [1, 0, 0], [0, 1, 0], [0, 0, -1], ]) output = GaussianCopula._get_nearest_correlation_matrix(not_psd_matrix) # Assert expected = [ [1, 0, 0], [0, 1, 0], [0, 0, 1], ] assert expected == output.tolist() not_psd_eigenvalues = scipy.linalg.eigh(not_psd_matrix)[0] output_eigenvalues = scipy.linalg.eigh(output)[0] assert (not_psd_eigenvalues < 0).any() assert (output_eigenvalues >= 0).all()
def test__get_nearest_correlation_matrix_valid(self): """Test ``_get_nearest_correlation_matrix`` with a psd input. If the matrix is positive semi-definite, do nothing. Input: - matrix which is positive semi-definite. Expected Output: - the input, unmodified. """ # Run correlation_matrix = np.array([ [1, 0, 0], [0, 1, 0], [0, 0, 1], ]) output = GaussianCopula._get_nearest_correlation_matrix( correlation_matrix) # Assert expected = [ [1, 0, 0], [0, 1, 0], [0, 0, 1], ] assert expected == output.tolist() assert output is correlation_matrix