code: def test_num_plus_parser():
      """Ensure we catch errors relating to num_nodes/num_gpus + -i/-e being mutually exclusive"""
  
      # inclusion
      with pytest.raises(ValueError):
          dsrun.main(args="--num_nodes 1 -i localhost foo.py".split())
      with pytest.raises(ValueError):
          dsrun.main(
              args="--num_nodes 1 --num_gpus 1 -i localhost foo.py".split()
          )
      with pytest.raises(ValueError):
          dsrun.main(args="--num_gpus 1 -i localhost foo.py".split())
  
      # exclusion
      with pytest.raises(ValueError):
          dsrun.main(args="--num_nodes 1 -e localhost foo.py".split())
      with pytest.raises(ValueError):
          dsrun.main(
              args="--num_nodes 1 --num_gpus 1 -e localhost foo.py".split()
          )
      with pytest.raises(ValueError):
          dsrun.main(args="--num_gpus 1 -e localhost foo.py".split())
  
file_path: DeepSpeed/tests/unit/launcher/test_run.py
imports: import pytest
  from deepspeed.launcher import runner
label_desc: Use image node_id 5 for calling a global function with example usage: test_num_plus_parser() without return types