code: def generate(self) -> None:
      if self.root.exists():
          return
  
      self.root.mkdir(parents=True, exist_ok=True)
      self.meta.save(self.root / "metadata.json")
      for split, n_samples in zip(
          ["train", "val", "test"],
          [
              self.meta.train_set_size,
              self.meta.val_set_size,
              self.meta.test_set_size,
          ],
      ):
          self.generate_split(
              split + "_cc1.0",
              n_samples,
              always_cheat=True,
              counterfactual_size=0,
          )
          self.generate_split(
              f"{split}_cf{self.meta.counterfactual_size}",
              n_samples,
              always_cheat=True,
              counterfactual_size=self.meta.counterfactual_size,
          )
  
imports: import os
  from dataclasses import dataclass, asdict
  from typing import Optional, Literal, Tuple, List, Dict
  from pathlib import Path
  import json
  from tqdm import tqdm
  import hashlib
  import numpy
  import torch
  import torch.nn
  import pytorch_lightning
  from sklearn.gaussian_process import GaussianProcessRegressor
  from sklearn.gaussian_process.kernels import RBF
  from torch.utils.data import DataLoader, ConcatDataset
  from gluonts.time_feature import get_seasonality
  from .artificial import _write_data_to_file
  from meta.datasets.registry import register_data_module
  from meta.data.batch import TripletBatch
  from meta.datasets.splits import DatasetSplits
  from meta.data.sampling import TripletDataset
  from meta.common.torch import tensor_to_np
  from meta.metrics.numpy import compute_metrics
label_desc: Use image node_id 6 for calling the CheatCounterfactualArtificialDataModule obj's underlying member method code with example usage: obj.generate() without return types