class_docstr: Calculate the Jaccard index for multilabel tasks.
  
  The `Jaccard index`_ (also known as the intersetion over union or jaccard similarity coefficient) is an statistic
  that can be used to determine the similarity and diversity of a sample set. It is defined as the size of the
  intersection divided by the union of the sample sets:
  
  .. math:: J(A,B) = \frac{|A\cap B|}{|A\cup B|}
  
  This function is a simple wrapper to get the task specific versions of this metric, which is done by setting the
  ``task`` argument to either ``'binary'``, ``'multiclass'`` or ``multilabel``. See the documentation of
  :class:`~torchmetrics.classification.BinaryJaccardIndex`,
  :class:`~torchmetrics.classification.MulticlassJaccardIndex` and
  :class:`~torchmetrics.classification.MultilabelJaccardIndex` for the specific details of each argument influence
  and examples.
  
  Legacy Example:
      >>> from torch import randint, tensor
      >>> target = randint(0, 2, (10, 25, 25))
      >>> pred = tensor(target)
      >>> pred[2:5, 7:13, 9:15] = 1 - pred[2:5, 7:13, 9:15]
      >>> jaccard = JaccardIndex(task="multiclass", num_classes=2)
      >>> jaccard(pred, target)
      tensor(0.9660)
class_docstr_tok: ["Calculate","the","Jaccard","index","for","multilabel","tasks",".","The","`","Jaccard","index","`","_","(","also","known","as","the","intersetion","over","union","or","jaccard","similarity","coefficient",")","is","an","statistic","that","can","be","used","to","determine","the","similarity","and","diversity","of","a","sample","set",".","It","is","defined","as","the","size","of","the","intersection","divided","by","the","union","of","the","sample","sets",":","..","math",":",":","J","(","A",",","B",")","=","\\frac","{","|A\\cap","B|","}","{","|A\\cup","B|","}","This","function","is","a","simple","wrapper","to","get","the","task","specific","versions","of","this","metric",",","which","is","done","by","setting","the","``","task","``","argument","to","either","``","'binary","'","``",",","``","'multiclass","'","``","or","``","multilabel","``",".","See","the","documentation","of",":","class",":","`","~torchmetrics.classification.BinaryJaccardIndex","`",",",":","class",":","`","~torchmetrics.classification.MulticlassJaccardIndex","`","and",":","class",":","`","~torchmetrics.classification.MultilabelJaccardIndex","`","for","the","specific","details","of","each","argument","influence","and","examples",".","Legacy","Example",":",">",">",">","from","torch","import","randint",",","tensor",">",">",">","target","=","randint","(","0",",","2",",","(","10",",","25",",","25",")",")",">",">",">","pred","=","tensor","(","target",")",">",">",">","pred","[","2:5",",","7:13",",","9:15","]","=","1","-","pred","[","2:5",",","7:13",",","9:15","]",">",">",">","jaccard","=","JaccardIndex","(","task=","''","multiclass","''",",","num_classes=2",")",">",">",">","jaccard","(","pred",",","target",")","tensor","(","0.9660",")"]
docstr: Initialize task metric.
docstr_tok: ["Initialize","task","metric","."]
code: def __new__(  # type: ignore[misc]
      cls: Type["JaccardIndex"],
      task: Literal["binary", "multiclass", "multilabel"],
      threshold: float = 0.5,
      num_classes: Optional[int] = None,
      num_labels: Optional[int] = None,
      average: Optional[
          Literal["micro", "macro", "weighted", "none"]
      ] = "macro",
      ignore_index: Optional[int] = None,
      validate_args: bool = True,
      **kwargs: Any,
  ) -> Metric:
      """Initialize task metric."""
      task = ClassificationTask.from_str(task)
      kwargs.update(
          {"ignore_index": ignore_index, "validate_args": validate_args}
      )
      if task == ClassificationTask.BINARY:
          return BinaryJaccardIndex(threshold, **kwargs)
      if task == ClassificationTask.MULTICLASS:
          if not isinstance(num_classes, int):
              raise ValueError(
                  f"`num_classes` is expected to be `int` but `{type(num_classes)} was passed.`"
              )
          return MulticlassJaccardIndex(num_classes, average, **kwargs)
      if task == ClassificationTask.MULTILABEL:
          if not isinstance(num_labels, int):
              raise ValueError(
                  f"`num_labels` is expected to be `int` but `{type(num_labels)} was passed.`"
              )
          return MultilabelJaccardIndex(
              num_labels, threshold, average, **kwargs
          )
      raise ValueError(f"Task {task} not supported!")
  
imports: from typing import Any, Optional, Sequence, Type, Union
  from torch import Tensor
  from typing_extensions import Literal
  from torchmetrics.classification.base import _ClassificationTaskWrapper
  from torchmetrics.classification.confusion_matrix import BinaryConfusionMatrix, MulticlassConfusionMatrix, MultilabelConfusionMatrix
  from torchmetrics.functional.classification.jaccard import _jaccard_index_reduce, _multiclass_jaccard_index_arg_validation, _multilabel_jaccard_index_arg_validation
  from torchmetrics.metric import Metric
  from torchmetrics.utilities.enums import ClassificationTask
  from torchmetrics.utilities.imports import _MATPLOTLIB_AVAILABLE
  from torchmetrics.utilities.plot import _AX_TYPE, _PLOT_OUT_TYPE
label_desc: Use image node_id 1 for calling the JaccardIndex obj's underlying member method code with example usage: obj.__new__(cls, task, threshold, num_classes, num_labels, average, ignore_index, validate_args) and returns: BinaryJaccardIndex, MulticlassJaccardIndex, MultilabelJaccardIndex