code: def make_data(
      means=[[3, 2], [7, 7], [0, 8]],
      covs=[
          [[5, -1.5], [-1.5, 1]],
          [[1, 0.5], [0.5, 4]],
          [[5, 1], [1, 5]],
      ],
      labeled_sizes=[80, 40, 40],
      unlabeled_sizes=[20, 10, 10],
      avg_trace=0.8,
      num_annotators=50,
      seed=1,  # set to None for non-reproducible randomness
  ):
      np.random.seed(seed=seed)
  
      m = len(means)  # number of classes
      n = sum(labeled_sizes)
      local_data = []
      labels = []
      unlabeled_data = []
      unlabeled_labels = []
  
      for idx in range(m):
          local_data.append(
              np.random.multivariate_normal(
                  mean=means[idx],
                  cov=covs[idx],
                  size=labeled_sizes[idx],
              )
          )
          unlabeled_data.append(
              np.random.multivariate_normal(
                  mean=means[idx],
                  cov=covs[idx],
                  size=unlabeled_sizes[idx],
              )
          )
          labels.append(
              np.array([idx for i in range(labeled_sizes[idx])])
          )
          unlabeled_labels.append(
              np.array([idx for i in range(unlabeled_sizes[idx])])
          )
      X_train = np.vstack(local_data)
      X_train_unlabeled = np.vstack(unlabeled_data)
      true_labels_train = np.hstack(labels)
      true_labels_train_unlabeled = np.hstack(unlabeled_labels)
  
      # Compute p(true_label=k)
      py = np.bincount(true_labels_train) / float(
          len(true_labels_train)
      )
  
      noise_matrix = generate_noise_matrix_from_trace(
          m,
          trace=avg_trace * m,
          py=py,
          valid_noise_matrix=True,
          seed=seed,
      )
  
      # Generate our noisy labels using the noise_matrix for specified number of annotators.
      s = pd.DataFrame(
          np.vstack(
              [
                  generate_noisy_labels(true_labels_train, noise_matrix)
                  for _ in range(num_annotators)
              ]
          ).transpose()
      )
  
      # column of labels without NaNs to test _get_worst_class
      complete_labels = deepcopy(s)
  
      # Each annotator only labels approximately 20% of the dataset
      # (unlabeled points represented with NaN)
      s = s.apply(lambda x: x.mask(np.random.random(n) < 0.8))
      s.dropna(axis=1, how="all", inplace=True)
  
      # Estimate pred_probs
      latent = count.estimate_py_noise_matrices_and_cv_pred_proba(
          X=X_train,
          labels=true_labels_train,
          cv_n_folds=3,
      )
      latent_unlabeled = (
          count.estimate_py_noise_matrices_and_cv_pred_proba(
              X=X_train_unlabeled,
              labels=true_labels_train_unlabeled,
              cv_n_folds=3,
          )
      )
  
      row_NA_check = pd.notna(s).any(axis=1)
  
      return {
          "X_train": X_train[row_NA_check],
          "X_train_unlabeled": X_train_unlabeled,
          "X_train_complete": X_train,
          "true_labels_train": true_labels_train[row_NA_check],
          "true_labels_train_unlabeled": true_labels_train_unlabeled,
          "labels": s[row_NA_check].reset_index(drop=True),
          "labels_unlabeled": pd.DataFrame(
              np.full(
                  (len(true_labels_train_unlabeled), num_annotators),
                  np.NaN,
              )
          ),
          "complete_labels": complete_labels,
          "pred_probs": latent[4][row_NA_check],
          "pred_probs_unlabeled": latent_unlabeled[4],
          "pred_probs_complete": latent[4],
          "noise_matrix": noise_matrix,
      }
  
imports: import numpy
  import pytest
  from copy import deepcopy
  from cleanlab.benchmarking.noise_generation import generate_noise_matrix_from_trace
  from cleanlab.benchmarking.noise_generation import generate_noisy_labels
  from cleanlab import count
  from cleanlab.multiannotator import get_label_quality_multiannotator, get_label_quality_multiannotator_ensemble, get_active_learning_scores, get_active_learning_scores_ensemble, get_majority_vote_label, convert_long_to_wide_dataset
  from cleanlab.internal.multiannotator_utils import format_multiannotator_labels
  import pandas
  from sklearn.linear_model import LogisticRegression
label_desc: Use image node_id 1 for calling a global function with example usage: make_data(means, covs, labeled_sizes, unlabeled_sizes, avg_trace, num_annotators, seed) and returns: dict