class_docstr: Compute `Tschuprow's T`_ statistic measuring the association between two categorical (nominal) data series.
  
  .. math::
      T = \sqrt{\frac{\chi^2 / n}{\sqrt{(r - 1) * (k - 1)}}}
  
  where
  
  .. math::
      \chi^2 = \sum_{i,j} \ frac{\left(n_{ij} - \frac{n_{i.} n_{.j}}{n}\right)^2}{\frac{n_{i.} n_{.j}}{n}}
  
  where :math:`n_{ij}` denotes the number of times the values :math:`(A_i, B_j)` are observed with :math:`A_i, B_j`
  represent frequencies of values in ``preds`` and ``target``, respectively. Tschuprow's T is a symmetric coefficient,
  i.e. :math:`T(preds, target) = T(target, preds)`, so order of input arguments does not matter. The output values
  lies in [0, 1] with 1 meaning the perfect association.
  
  As input to ``forward`` and ``update`` the metric accepts the following input:
  
  - ``preds`` (:class:`~torch.Tensor`): Either 1D or 2D tensor of categorical (nominal) data from the first data
    series with shape ``(batch_size,)`` or ``(batch_size, num_classes)``, respectively.
  - ``target`` (:class:`~torch.Tensor`): Either 1D or 2D tensor of categorical (nominal) data from the second data
    series with shape ``(batch_size,)`` or ``(batch_size, num_classes)``, respectively.
  
  As output of ``forward`` and ``compute`` the metric returns the following output:
  
  - ``tschuprows_t`` (:class:`~torch.Tensor`): Scalar tensor containing the Tschuprow's T statistic.
  
  Args:
      num_classes: Integer specifying the number of classes
      bias_correction: Indication of whether to use bias correction.
      nan_strategy: Indication of whether to replace or drop ``NaN`` values
      nan_replace_value: Value to replace ``NaN``s when ``nan_strategy = 'replace'``
      kwargs: Additional keyword arguments, see :ref:`Metric kwargs` for more info.
  
  Raises:
      ValueError:
          If `nan_strategy` is not one of `'replace'` and `'drop'`
      ValueError:
          If `nan_strategy` is equal to `'replace'` and `nan_replace_value` is not an `int` or `float`
  
  Example::
  
      >>> from torchmetrics.nominal import TschuprowsT
      >>> _ = torch.manual_seed(42)
      >>> preds = torch.randint(0, 4, (100,))
      >>> target = torch.round(preds + torch.randn(100)).clamp(0, 4)
      >>> tschuprows_t = TschuprowsT(num_classes=5)
      >>> tschuprows_t(preds, target)
      tensor(0.4930)
class_docstr_tok: ["Compute","`","Tschuprow","'s","T","`","_","statistic","measuring","the","association","between","two","categorical","(","nominal",")","data","series",".","..","math",":",":","T","=","\\sqrt","{","\\frac","{","\\chi^2","\/","n","}","{","\\sqrt","{","(","r","-","1",")","*","(","k","-","1",")","}","}","}","where","..","math",":",":","\\chi^2","=","\\sum_","{","i",",","j","}","\\","frac","{","\\left","(","n_","{","ij","}","-","\\frac","{","n_","{","i",".","}","n_","{",".j","}","}","{","n","}","\\right",")","^2","}","{","\\frac","{","n_","{","i",".","}","n_","{",".j","}","}","{","n","}","}","where",":","math",":","`","n_","{","ij","}","`","denotes","the","number","of","times","the","values",":","math",":","`","(","A_i",",","B_j",")","`","are","observed","with",":","math",":","`","A_i",",","B_j","`","represent","frequencies","of","values","in","``","preds","``","and","``","target","``",",","respectively",".","Tschuprow","'s","T","is","a","symmetric","coefficient",",","i.e",".",":","math",":","`","T","(","preds",",","target",")","=","T","(","target",",","preds",")","`",",","so","order","of","input","arguments","does","not","matter",".","The","output","values","lies","in","[","0",",","1","]","with","1","meaning","the","perfect","association",".","As","input","to","``","forward","``","and","``","update","``","the","metric","accepts","the","following","input",":","-","``","preds","``","(",":","class",":","`","~torch.Tensor","`",")",":","Either","1D","or","2D","tensor","of","categorical","(","nominal",")","data","from","the","first","data","series","with","shape","``","(","batch_size",",",")","``","or","``","(","batch_size",",","num_classes",")","``",",","respectively",".","-","``","target","``","(",":","class",":","`","~torch.Tensor","`",")",":","Either","1D","or","2D","tensor","of","categorical","(","nominal",")","data","from","the","second","data","series","with","shape","``","(","batch_size",",",")","``","or","``","(","batch_size",",","num_classes",")","``",",","respectively",".","As","output","of","``","forward","``","and","``","compute","``","the","metric","returns","the","following","output",":","-","``","tschuprows_t","``","(",":","class",":","`","~torch.Tensor","`",")",":","Scalar","tensor","containing","the","Tschuprow","'s","T","statistic",".","Args",":","num_classes",":","Integer","specifying","the","number","of","classes","bias_correction",":","Indication","of","whether","to","use","bias","correction",".","nan_strategy",":","Indication","of","whether","to","replace","or","drop","``","NaN","``","values","nan_replace_value",":","Value","to","replace","``","NaN","``","s","when","``","nan_strategy","=","'replace","'","``","kwargs",":","Additional","keyword","arguments",",","see",":","ref",":","`","Metric","kwargs","`","for","more","info",".","Raises",":","ValueError",":","If","`","nan_strategy","`","is","not","one","of","`","'replace","'","`","and","`","'drop","'","`","ValueError",":","If","`","nan_strategy","`","is","equal","to","`","'replace","'","`","and","`","nan_replace_value","`","is","not","an","`","int","`","or","`","float","`","Example",":",":",">",">",">","from","torchmetrics.nominal","import","TschuprowsT",">",">",">","_","=","torch.manual_seed","(","42",")",">",">",">","preds","=","torch.randint","(","0",",","4",",","(","100",",",")",")",">",">",">","target","=","torch.round","(","preds","+","torch.randn","(","100",")",")",".clamp","(","0",",","4",")",">",">",">","tschuprows_t","=","TschuprowsT","(","num_classes=5",")",">",">",">","tschuprows_t","(","preds",",","target",")","tensor","(","0.4930",")"]
code: def __init__(
      self,
      num_classes: int,
      bias_correction: bool = True,
      nan_strategy: Literal["replace", "drop"] = "replace",
      nan_replace_value: Optional[float] = 0.0,
      **kwargs: Any,
  ) -> None:
      super().__init__(**kwargs)
      self.num_classes = num_classes
      self.bias_correction = bias_correction
  
      _nominal_input_validation(nan_strategy, nan_replace_value)
      self.nan_strategy = nan_strategy
      self.nan_replace_value = nan_replace_value
  
      self.add_state(
          "confmat",
          torch.zeros(num_classes, num_classes),
          dist_reduce_fx="sum",
      )
  
file_path: torchmetrics/src/torchmetrics/nominal/tschuprows.py
imports: from typing import Any, Optional, Sequence, Union
  import torch
  from torch import Tensor
  from typing_extensions import Literal
  from torchmetrics.functional.nominal.tschuprows import _tschuprows_t_compute, _tschuprows_t_update
  from torchmetrics.functional.nominal.utils import _nominal_input_validation
  from torchmetrics.metric import Metric
  from torchmetrics.utilities.imports import _MATPLOTLIB_AVAILABLE
  from torchmetrics.utilities.plot import _AX_TYPE, _PLOT_OUT_TYPE
label_desc: Use image node_id 1 to create a new TschuprowsT object from inherited base classes: Metric with example: obj = TschuprowsT(num_classes, bias_correction, nan_strategy, nan_replace_value)