class_docstr: Uniform scaling initializer.
code: def __call__(self, shape: Sequence[int], dtype: Any) -> jax.Array:
      if len(shape) < 2:
          raise ValueError(
              "Orthogonal initializer requires at least a 2D shape."
          )
      n_rows = shape[self.axis]
      n_cols = np.prod(shape) // n_rows
      matrix_shape = (
          (n_rows, n_cols) if n_rows > n_cols else (n_cols, n_rows)
      )
      norm_dst = jax.random.normal(
          hk.next_rng_key(), matrix_shape, dtype
      )
      q_mat, r_mat = jnp.linalg.qr(norm_dst)
      # Enforce Q is uniformly distributed
      q_mat *= jnp.sign(jnp.diag(r_mat))
      if n_rows < n_cols:
          q_mat = q_mat.T
      q_mat = jnp.reshape(
          q_mat, (n_rows,) + tuple(np.delete(shape, self.axis))
      )
      q_mat = jnp.moveaxis(q_mat, 0, self.axis)
      return jax.lax.convert_element_type(self.scale, dtype) * q_mat
  
imports: from collections.abc import Sequence
  from typing import Any, Union
  from haiku._src import base
  from haiku._src.typing import Initializer
  import jax
  import jax.numpy
  import numpy
label_desc: Use image node_id 2 for calling the Orthogonal obj's underlying member method code with example usage: obj.__call__(shape, dtype) and returns: unknown