class_docstr: Initializes array with an orthogonal system.
  
  This initializer first makes a matrix of the same shape as the
  array to be initialized whose elements are drawn independently from
  standard Gaussian distribution.
  Next, it applies QR decomposition to (the transpose of) the matrix.
  To make the decomposition (almost surely) unique, we require the diagonal
  of the triangular matrix R to be non-negative (see e.g. Edelman & Rao,
  https://web.eecs.umich.edu/~rajnrao/Acta05rmt.pdf).
  Then, it initializes the array with the (semi-)orthogonal matrix Q.
  Finally, the array is multiplied by the constant ``scale``.
  
  If the ``ndim`` of the input array is more than 2, we consider the array
  to be a matrix by concatenating all axes except the first one.
  
  The number of vectors consisting of the orthogonal system
  (i.e. first element of the shape of the array) must be equal to or smaller
  than the dimension of each vector (i.e. second element of the shape of
  the array).
  
  Attributes:
      scale (float): A constant to be multiplied by.
      dtype: Data type specifier.
      mode (str): Assertion on the initialized shape.
          ``'auto'`` (default), ``'projection'`` (before v7),
          ``'embedding'``, or ``'basis'``.
      rng (xp.random.RandomState): Pseudo-random number generator.
  
  Reference: Saxe et al., https://arxiv.org/abs/1312.6120
code: def __init__(self, scale=1.1, dtype=None, mode="auto", **kwargs):
      self.scale = scale
      self.mode = mode
      rng = None
      if kwargs:
          (rng,) = argument.parse_kwargs(kwargs, ("rng", rng))
      self.rng = rng
      try:
          self._checks = _orthogonal_constraints[mode]
      except KeyError:
          raise ValueError(
              "Invalid mode: {}. Choose from {}.".format(
                  repr(mode),
                  ", ".join(repr(m) for m in _orthogonal_constraints),
              )
          )
      super(Orthogonal, self).__init__(dtype)
  
file_path: chainer/chainer/initializers/orthogonal.py
imports: import numpy
  from chainer import backend
  from chainer import initializer
  from chainer import utils
  from chainer.utils import argument
label_desc: Use image node_id 1 to create a new Orthogonal object from inherited base classes: initializer with example: obj = Orthogonal(scale, dtype, mode)