code: def test_odd_num_levels_raises_warning(setup_param_file_with_groups):
      parameter_file = setup_param_file_with_groups
      problem = read_param_file(parameter_file)
      with warnings.catch_warnings(record=True) as w:
          # Cause all warnings to always be triggered.
          warnings.simplefilter("always")
          # Trigger a UserWarning as num_levels should be an even number
          sample(problem, 10, num_levels=3)
  
          categories = [issubclass(m.category, UserWarning) for m in w]
          assert any(categories), "Expected warning not raised"
  
          needle = "num_levels should be an even number, sample may be biased"
          messages = [str(m.message) for m in w]
          msg_check = [needle in hay for hay in messages]
          assert any(
              msg_check
          ), "Inappropriate num_levels warning not found"
  
imports: from numpy.testing import assert_equal, assert_allclose
  from pytest import raises, fixture, warns, mark
  import numpy
  import warnings
  from SALib.sample.morris.morris import sample, _check_group_membership, _check_if_num_levels_is_even, _compute_optimised_trajectories, _generate_p_star, _compute_b_star, _generate_trajectory, _generate_x_star
  from SALib.util import read_param_file, compute_groups_matrix, _define_problem_with_groups, _compute_delta
label_desc: Use image node_id 3 for calling a global function with example usage: test_odd_num_levels_raises_warning(setup_param_file_with_groups) without return types