docs: def wigner_d(J, alpha, beta, gamma):
      u"""Return the Wigner D matrix for angular momentum J.
  
      We use the general formula from [Edmonds74]_, equation 4.1.12.
  
      The simplest possible example:
  
      >>> from sympy import Integer, symbols, pprint
      >>> half = 1/Integer(2)
      >>> alpha, beta, gamma = symbols("alpha, beta, gamma", real=True)
      >>> pprint(wigner_d(half, alpha, beta, gamma), use_unicode=True)
      ⎡  ⅈ⋅α  ⅈ⋅γ             ⅈ⋅α  -ⅈ⋅γ         ⎤
      ⎢  ───  ───             ───  ─────        ⎥
      ⎢   2    2     ⎛β⎞       2     2      ⎛β⎞ ⎥
      ⎢ ℯ   ⋅ℯ   ⋅cos⎜─⎟     ℯ   ⋅ℯ     ⋅sin⎜─⎟ ⎥
      ⎢              ⎝2⎠                    ⎝2⎠ ⎥
      ⎢                                         ⎥
      ⎢  -ⅈ⋅α   ⅈ⋅γ          -ⅈ⋅α   -ⅈ⋅γ        ⎥
      ⎢  ─────  ───          ─────  ─────       ⎥
      ⎢    2     2     ⎛β⎞     2      2      ⎛β⎞⎥
      ⎢-ℯ     ⋅ℯ   ⋅sin⎜─⎟  ℯ     ⋅ℯ     ⋅cos⎜─⎟⎥
      ⎣                ⎝2⎠                   ⎝2⎠⎦
  
      """
      d = wigner_d_small(J, beta)
      M = [J-i for i in range(2*J+1)]
      D = [[exp(I*Mi*alpha)*d[i, j]*exp(I*Mj*gamma)
            for j, Mj in enumerate(M)] for i, Mi in enumerate(M)]
      return Matrix(D)