code: def __init__(
      self,
      weight,
      orthogonal_map: _OrthMaps,
      *,
      use_trivialization=True,
  ) -> None:
      super().__init__()
  
      # Note [Householder complex]
      # For complex tensors, it is not possible to compute the tensor `tau` necessary for
      # linalg.householder_product from the reflectors.
      # To see this, note that the reflectors have a shape like:
      # 0 0 0
      # * 0 0
      # * * 0
      # which, for complex matrices, give n(n-1) (real) parameters. Now, you need n^2 parameters
      # to parametrize the unitary matrices. Saving tau on its own does not work either, because
      # not every combination of `(A, tau)` gives a unitary matrix, meaning that if we optimise
      # them as independent tensors we would not maintain the constraint
      # An equivalent reasoning holds for rectangular matrices
      if (
          weight.is_complex()
          and orthogonal_map == _OrthMaps.householder
      ):
          raise ValueError(
              "The householder parametrization does not support complex tensors."
          )
  
      self.shape = weight.shape
      self.orthogonal_map = orthogonal_map
      if use_trivialization:
          self.register_buffer("base", None)
  
imports: from enum import Enum, auto
  import torch
  from torch import Tensor
  from ..utils import parametrize
  from ..modules import Module
  from ..None import functional
  from typing import Optional
label_desc: Use image node_id 1 to create a new _Orthogonal object from inherited base classes: Module with example: obj = _Orthogonal(weight, orthogonal_map)