class_docstr: Track Activeloop Deeplake Dataset with versioning.
  
  It is generally advised to commit dataset changes before logging to runs. If dataset is a view on head of
  uncommitted changes, it's recommmended to commit dataset changes first then creating a view and loggging it.
  By default, this is ignored and results in limited traceability. Set both ``auto_commit`` and ``auto_save_view``
  to ``True`` for automatic commit or saves.
  Unsaved views created on a dataset head with changes passed to this class cannot be saved.
  
  :param auto_commit: If dataset head node and uncommitted dataset changes are present an auto_commit
      will trigger a dataset commit ``autocommit on aim run`` to enable reproducibility of the run,
      defaults to ``False``.
  
  :param auto_save_view: Triggers a save of a view if dataset is an unsaved view on a committed head
      to enable reproducibility of the run, defaults to ``False``.
  
  :raises TypeError: if the dataset is not a deeplake.Dataset
  :raises ValueError: if the dataset is a view and has uncommitted changes on its head but should be saved.
  
  .. code-block:: python
  
      import deeplake
  
      from aim.sdk.objects.plugins.deeplake_dataset import DeeplakeDataset
      from aim.sdk import Run
  
      # create dataset object
      ds = deeplake.dataset('hub://activeloop/cifar100-test')
  
      # log dataset metadata
      run = Run(system_tracking_interval=None)
      run['deeplake_ds'] = DeeplakeDataset(ds)
code: def _get_ds_meta(self, ds: deeplake.Dataset):
      return {
          "path": ds.path,
          "commit_id": ds.commit_id,
          "branch": ds.branch,
          "has_head_changes": ds.has_head_changes,
          "pending_commit_id": ds.pending_commit_id
          if ds.has_head_changes
          else None,
          "info": dict(
              ds.info
          ),  # Info might contain keys such as "description" and "title"
          "num_samples": ds.num_samples,
          "max_len": ds.max_len,
          "min_len": ds.min_len,
          "is_view": ds.is_view,
          "view_info": self.view_info,
          "tensors": {
              group: self._tensor_meta(tensor)
              for group, tensor in ds.tensors.items()
          },
          "size_approx": ds.size_approx(),
          "deeplake_version": ds.meta.version,
      }
  
file_path: aim/aim/sdk/objects/plugins/deeplake_dataset.py
imports: from aim.storage.object import CustomObject
  import deeplake
  import warnings
  import logging
  from deeplake.util.exceptions import ReadOnlyModeError
label_desc: Use image node_id 2 for calling the DeeplakeDataset obj's underlying member method code with example usage: obj._get_ds_meta(ds) and returns: dict