class_docstr: [Separation](https://fairmlbook.org) (pg. 12) allows correlation between the
  predictions and the protected variable to the extent that it is justified by
  the gold labels.
  
  # Parameters
  
  num_classes : `int`
      Number of classes.
  num_protected_variable_labels : `int`
      Number of protected variable labels.
  dist_metric : `str`
      Distance metric (kl_divergence, wasserstein) for calculating the distance between
      the distribution over predicted labels given a gold label and a sensitive attribute from the
      distribution over predicted labels given only the gold label. If both distributions do not
      have equal support, you should use wasserstein distance.
  
  !!! Note
      Assumes integer labels, with each item to be classified having a single correct class.
class_docstr_tok: ["[","Separation","]","(","https",":","\/\/fairmlbook.org",")","(","pg",".","12",")","allows","correlation","between","the","predictions","and","the","protected","variable","to","the","extent","that","it","is","justified","by","the","gold","labels",".","#","Parameters","num_classes",":","`","int","`","Number","of","classes",".","num_protected_variable_labels",":","`","int","`","Number","of","protected","variable","labels",".","dist_metric",":","`","str","`","Distance","metric","(","kl_divergence",",","wasserstein",")","for","calculating","the","distance","between","the","distribution","over","predicted","labels","given","a","gold","label","and","a","sensitive","attribute","from","the","distribution","over","predicted","labels","given","only","the","gold","label",".","If","both","distributions","do","not","have","equal","support",",","you","should","use","wasserstein","distance",".","!","!","!","Note","Assumes","integer","labels",",","with","each","item","to","be","classified","having","a","single","correct","class","."]
code: def reset(self) -> None:
      self._predicted_label_counts_by_gold_label = torch.zeros(
          (self._num_classes, self._num_classes)
      )
      self._total_predictions = torch.tensor(0)
      self._predicted_label_counts_by_gold_label_and_protected_variable_label = torch.zeros(
          (
              self._num_classes,
              self._num_protected_variable_labels,
              self._num_classes,
          )
      )
  
imports: from typing import Optional, Dict
  from scipy.stats import wasserstein_distance
  import torch
  import torch.distributed
  from torch.distributions.categorical import Categorical
  from torch.distributions.kl import kl_divergence
  from allennlp.common.util import is_distributed
  from allennlp.common.checks import ConfigurationError
  from allennlp.training.metrics.metric import Metric
label_desc: Use image node_id 4 for calling the Separation obj's underlying member method code with example usage: obj.reset() without return types