class_docstr: Used for the below fixtures.
  
  Mainly used with cases so they don' need to be retrained at every invocation.
  The cache can be cleared using `pytest`'s built in mechanism:
  
      pytest --clear-cache
  
  To view cached items use:
  
      pytest --cache-show
  
  ..code:: python
  
      def case_fitted_model(cache, ...):
          key = "some key unique to this test"
          cache = cache(key)
          if "model" in cache:
              return cache.load("model")
  
          # ... fit model
  
          cache.save(model, "model")
          return model
  
  If multiple items are required, they can be access in much the same ways
  
  ..code:: python
  
      def case_requires_multiple_things(cache, ...):
  
          cache1 = cache("key1")
          cache2 = cache("key2")
  
  If multiple things need to be stored in one location, you can access a given path
  for a given named thing inside a cache.
  
  ..code:: python
  
      def case_fitted_model_and_populated_backend(cache, ...):
          cache = cache("some key")
code: def __exit__(self, *args, **kwargs):
      if self._lock is not None:
          self._lock.release()
  
imports: from __future__ import annotations
  from typing import Any, Callable
  import os
  import pickle
  import shutil
  import tempfile
  from functools import partial
  from pathlib import Path
  from filelock import FileLock
  from pytest import FixtureRequest
  from pytest_cases import fixture
  from test.conftest import AUTOSKLEARN_CACHE_NAME
label_desc: Use image node_id 9 for calling the Cache obj's underlying member method code with example usage: obj.__exit__() without return types