class_docstr: Implement a generic protocol to allow Orion to communicate using
  different storage backend
class_docstr_tok: ["Implement","a","generic","protocol","to","allow","Orion","to","communicate","using","different","storage","backend"]
docstr: Insert a new experiment inside the database
  
  Parameters
  ----------
  config:
      experiment config
  algo_locked: int
      Whether algo is initially locked (1) o not (0, default)
  algo_state: dict, optional
      Initial algo state
  algo_heartbeat: datetime, optional
      Initial algo heartbeat. Default to datetime.utcnow().
docstr_tok: ["Insert","a","new","experiment","inside","the","database","Parameters","--","--","--","--","--","config",":","experiment","config","algo_locked",":","int","Whether","algo","is","initially","locked","(","1",")","o","not","(","0",",","default",")","algo_state",":","dict",",","optional","Initial","algo","state","algo_heartbeat",":","datetime",",","optional","Initial","algo","heartbeat",".","Default","to","datetime.utcnow","(",")","."]
code: def create_experiment(
      self,
      config: ExperimentConfig,
      algo_locked: int = 0,
      algo_state: dict | None = None,
      algo_heartbeat: datetime | None = None,
  ):
      """Insert a new experiment inside the database
  
      Parameters
      ----------
      config:
          experiment config
      algo_locked: int
          Whether algo is initially locked (1) o not (0, default)
      algo_state: dict, optional
          Initial algo state
      algo_heartbeat: datetime, optional
          Initial algo heartbeat. Default to datetime.utcnow().
      """
      raise NotImplementedError()
  
imports: from __future__ import annotations
  import contextlib
  import copy
  import logging
  import typing
  from datetime import datetime
  from typing import Literal
  import orion.core
  from orion.core.io import resolve_config
  from orion.core.utils import GenericFactory
label_desc: Use image node_id 4 for calling the BaseStorageProtocol obj's underlying member method code with example usage: obj.create_experiment(config, algo_locked, algo_state, algo_heartbeat) without return types