docs: def add_injectable(
          name, value, autocall=True, cache=False, cache_scope=_CS_FOREVER,
          memoize=False):
      """
      Add a value that will be injected into other functions.
  
      Parameters
      ----------
      name : str
      value
          If a callable and `autocall` is True then the function's
          argument names and keyword argument values will be matched
          to registered variables when the function needs to be
          evaluated by Orca. The return value will
          be passed to any functions using this injectable. In all other
          cases, `value` will be passed through untouched.
      autocall : bool, optional
          Set to True to have injectable functions automatically called
          (with argument matching) and the result injected instead of
          the function itself.
      cache : bool, optional
          Whether to cache the return value of an injectable function.
          Only applies when `value` is a callable and `autocall` is True.
      cache_scope : {'step', 'iteration', 'forever'}, optional
          Scope for which to cache data. Default is to cache forever
          (or until manually cleared). 'iteration' caches data for each
          complete iteration of the pipeline, 'step' caches data for
          a single step of the pipeline.
      memoize : bool, optional
          If autocall is False it is still possible to cache function results
          by setting this flag to True. Cached values are stored in a dictionary
          keyed by argument values, so the argument values must be hashable.
          Memoized functions have their caches cleared according to the same
          rules as universal caching.
  
      """
      if isinstance(value, Callable):
          if autocall:
              value = _InjectableFuncWrapper(
                  name, value, cache=cache, cache_scope=cache_scope)
              # clear any cached data from a previously registered value
              value.clear_cached()
          elif not autocall and memoize:
              value = _memoize_function(value, name, cache_scope=cache_scope)
  
      logger.debug('registering injectable {!r}'.format(name))
      _INJECTABLES[name] = value