code: def test_experiment_exists(
      tmp_dir, scm, dvc, exp_stage, mocker, workspace
  ):
      dvc.experiments.run(
          exp_stage.addressing,
          name="foo",
          params=["foo=2"],
          tmp_dir=not workspace,
      )
  
      new_mock = mocker.spy(BaseStashQueue, "_stash_exp")
      with pytest.raises(ExperimentExistsError):
          dvc.experiments.run(
              exp_stage.addressing,
              name="foo",
              params=["foo=3"],
              tmp_dir=not workspace,
          )
      new_mock.assert_not_called()
  
      results = dvc.experiments.run(
          exp_stage.addressing,
          name="foo",
          params=["foo=3"],
          force=True,
          tmp_dir=not workspace,
      )
      exp = first(results)
  
      fs = scm.get_fs(exp)
      with fs.open("metrics.yaml", mode="r", encoding="utf-8") as fobj:
          assert fobj.read().strip() == "foo: 3"
  
imports: import itertools
  import logging
  import os
  import stat
  from textwrap import dedent
  import pytest
  from configobj import ConfigObj
  from funcy import first
  from dvc.dvcfile import PROJECT_FILE
  from dvc.env import DVC_EXP_BASELINE_REV, DVC_EXP_NAME, DVC_ROOT, DVC_STUDIO_OFFLINE, DVC_STUDIO_REPO_URL, DVC_STUDIO_TOKEN, DVC_STUDIO_URL
  from dvc.exceptions import DvcException, ReproductionError
  from dvc.repo.experiments.exceptions import ExperimentExistsError
  from dvc.repo.experiments.queue.base import BaseStashQueue
  from dvc.repo.experiments.refs import CELERY_STASH
  from dvc.repo.experiments.utils import exp_refs_by_rev
  from dvc.scm import SCMError, resolve_rev
  from dvc.stage.exceptions import StageFileDoesNotExistError
  from dvc.testing.scripts import COPY_SCRIPT
  from dvc.utils.serialize import PythonFileCorruptedError
label_desc: Use image node_id 2 for calling a global function with example usage: test_experiment_exists(tmp_dir, scm, dvc, exp_stage, mocker, workspace) without return types