class_docstr: Random perfect matching from ``N`` sources to ``N`` destinations where each
  source matches exactly **one** destination and each destination matches
  exactly **one** source.
  
  Samples are represented as long tensors of shape ``(N,)`` taking values in
  ``{0,...,N-1}`` and satisfying the above one-one constraint. The log
  probability of a sample ``v`` is the sum of edge logits, up to the log
  partition function ``log Z``:
  
  .. math::
  
      \log p(v) = \sum_s \text{logits}[s, v[s]] - \log Z
  
  Exact computations are expensive. To enable tractable approximations, set a
  number of belief propagation iterations via the ``bp_iters`` argument.  The
  :meth:`log_partition_function` and :meth:`log_prob` methods use a Bethe
  approximation [1,2,3,4].
  
  **References:**
  
  [1] Michael Chertkov, Lukas Kroc, Massimo Vergassola (2008)
      "Belief propagation and beyond for particle tracking"
      https://arxiv.org/pdf/0806.1199.pdf
  [2] Bert Huang, Tony Jebara (2009)
      "Approximating the Permanent with Belief Propagation"
      https://arxiv.org/pdf/0908.1769.pdf
  [3] Pascal O. Vontobel (2012)
      "The Bethe Permanent of a Non-Negative Matrix"
      https://arxiv.org/pdf/1107.4196.pdf
  [4] M Chertkov, AB Yedidia (2013)
      "Approximating the permanent with fractional belief propagation"
      http://www.jmlr.org/papers/volume14/chertkov13a/chertkov13a.pdf
  
  :param Tensor logits: An ``(N, N)``-shaped tensor of edge logits.
  :param int bp_iters: Optional number of belief propagation iterations. If
      unspecified or ``None`` expensive exact algorithms will be used.
code: def support(self):
      return OneOneMatchingConstraint(self.num_nodes)
  
imports: import itertools
  import logging
  import warnings
  import torch
  from torch.distributions import constraints
  from torch.distributions.utils import lazy_property
  from .torch import Categorical
  from .torch_distribution import TorchDistribution
label_desc: Use image node_id 2 for calling the OneOneMatching obj's underlying member method code with example usage: obj.support() and returns: OneOneMatchingConstraint