code: def ensure_deterministic_id(name, storage, version=1, update=None):
      """Change the id of experiment to its name."""
      experiment = storage.fetch_experiments(
          {"name": name, "version": version}
      )[0]
      algo_lock_info = storage.get_algorithm_lock_info(
          uid=experiment["_id"]
      )
  
      storage.delete_experiment(uid=experiment["_id"])
      storage.delete_algorithm_lock(uid=experiment["_id"])
  
      _id = zlib.adler32(str((name, version)).encode())
      experiment["_id"] = _id
  
      if experiment["refers"]["parent_id"] is None:
          experiment["refers"]["root_id"] = _id
  
      if update is not None:
          experiment.update(update)
  
      storage.create_experiment(
          experiment,
          algo_locked=algo_lock_info.locked,
          algo_state=algo_lock_info.state,
          algo_heartbeat=algo_lock_info.heartbeat,
      )
  
imports: import copy
  import os
  import pickle
  import zlib
  from collections import Counter
  from tempfile import NamedTemporaryFile
  import pytest
  import yaml
  import orion.core.cli
  import orion.core.io.experiment_builder
  import orion.core.utils.backward
  from orion.core.worker.trial import Trial
  from orion.storage.backup import _get_exp_key, dump_database, get_experiment_parent_links, get_experiment_root_links, get_trial_parent_links
label_desc: Use image node_id 4 for calling a global function with example usage: ensure_deterministic_id(name, storage, version, update) without return types