code: def test_set_run_experiment_api(self):
      matching_runs = self.repo.structured_db.search_runs(
          f"Run number 3 {self.test_id}"
      )
      run = next(iter(matching_runs))
      self.assertEqual(f"Experiment 1 {self.test_id}", run.experiment)
  
      client = self.client
      # set existing experiment
      resp = client.put(
          f"/api/runs/{run.hash}",
          json={"experiment": f"Experiment 2 {self.test_id}"},
      )
      self.assertEqual(200, resp.status_code)
  
      resp = client.get(f"/api/runs/{run.hash}/info").json()
      self.assertEqual(
          f"Experiment 2 {self.test_id}",
          resp["props"]["experiment"]["name"],
      )
  
      # set non-existing experiment (create new)
      resp = client.put(
          f"/api/runs/{run.hash}",
          json={"experiment": f"New experiment {self.test_id}"},
      )
      self.assertEqual(200, resp.status_code)
      resp = client.get(f"/api/runs/{run.hash}/info").json()
      self.assertEqual(
          f"New experiment {self.test_id}",
          resp["props"]["experiment"]["name"],
      )
  
imports: import uuid
  from tests.base import PrefilledDataApiTestBase
label_desc: Use image node_id 2 for calling the TestStructuredRunApi obj's underlying member method code with example usage: obj.test_set_run_experiment_api() without return types