docstr: Tests if a given dataset has labels or not
  
  Parameters
  ----------
  stage : str
      name of the dataset to test
docstr_tok: ["Tests","if","a","given","dataset","has","labels","or","not","Parameters","--","--","--","--","--","stage",":","str","name","of","the","dataset","to","test"]
code: def has_labels(self, stage: str) -> bool:
      """Tests if a given dataset has labels or not
  
      Parameters
      ----------
      stage : str
          name of the dataset to test
      """
      assert stage in self.available_dataset_names
      dataset = self.get_dataset(stage)
      if hasattr(dataset, "has_labels"):
          return dataset.has_labels
  
      sample = dataset[0]
      if hasattr(sample, "y"):
          return sample.y is not None
      return False
  
imports: import os
  from abc import ABC, abstractmethod
  import logging
  import functools
  from functools import partial
  import numpy
  import torch
  import torch_geometric
  from torch_geometric.transforms import Compose, FixedPoints
  import copy
  from torch_points3d.models import model_interface
  from torch_points3d.core.data_transform import instantiate_transforms, MultiScaleTransform
  from torch_points3d.core.data_transform import instantiate_filters
  from torch_points3d.datasets.batch import SimpleBatch
  from torch_points3d.datasets.multiscale_data import MultiScaleBatch
  from torch_points3d.utils.enums import ConvolutionFormat
  from torch_points3d.utils.config import ConvolutionFormatFactory
  from torch_points3d.utils.colors import COLORS, colored_print
label_desc: Use image node_id 29 for calling the BaseDataset obj's underlying member method code with example usage: obj.has_labels(stage) and returns: False, dataset, unknown