code: def _get_random(self):
      # Random spheres biased towards getting more low frequency classes
      chosen_label = np.random.choice(
          self._labels, p=self._label_counts
      )
      valid_centres = self._centres_for_sampling[
          self._centres_for_sampling[:, 4] == chosen_label
      ]
      centre_idx = int(random.random() * (valid_centres.shape[0] - 1))
      centre = valid_centres[centre_idx]
      area_data = self._datas[centre[3].int()]
      cylinder_sampler = cT.CylinderSampling(
          self._radius, centre[:3], align_origin=False
      )
      return cylinder_sampler(area_data)
  
imports: import os
  import os.path
  from itertools import repeat, product
  import numpy
  import h5py
  import torch
  import random
  import glob
  from plyfile import PlyData, PlyElement
  from torch_geometric.data import InMemoryDataset, Data, extract_zip, Dataset
  from torch_geometric.data.dataset import files_exist
  from torch_geometric.data import DataLoader
  from torch_geometric.datasets import S3DIS
  import torch_geometric.transforms
  import logging
  from sklearn.neighbors import NearestNeighbors, KDTree
  from tqdm.auto import tqdm
  import csv
  import pandas
  import pickle
  import gdown
  import shutil
  from torch_points3d.datasets.samplers import BalancedRandomSampler
  import torch_points3d.core.data_transform
  from torch_points3d.datasets.base_dataset import BaseDataset
label_desc: Use image node_id 1 for calling the S3DISCylinder obj's underlying member method code with example usage: obj._get_random() and returns: cylinder_sampler