Module Expr Str ImportFrom alias alias ImportFrom alias alias alias alias alias alias alias alias alias ImportFrom alias Assign NameStore ListLoad Num FunctionDef arguments args NameParam defaults body Expr Str If CompareGtE NameLoad Call NameLoad NameLoad body For NameStore Call NameLoad Call NameLoad NameLoad Call NameLoad BinOpAdd NameLoad Num body Expr Call AttributeLoad NameLoad attr BinOpMult SubscriptLoad NameLoad Index BinOpSub NameLoad Num NameLoad Return SubscriptLoad NameLoad Slice BinOpAdd Call NameLoad NameLoad Num decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str If BoolOpOr CompareNotEq Call NameLoad BinOpMult NameLoad Num BinOpMult NameLoad Num CompareNotEq Call NameLoad BinOpMult NameLoad Num BinOpMult NameLoad Num CompareNotEq Call NameLoad BinOpMult NameLoad Num BinOpMult NameLoad Num body Raise Call NameLoad Str If BoolOpOr CompareNotEq Call NameLoad BinOpMult NameLoad Num BinOpMult NameLoad Num CompareNotEq Call NameLoad BinOpMult NameLoad Num BinOpMult NameLoad Num CompareNotEq Call NameLoad BinOpMult NameLoad Num BinOpMult NameLoad Num body Raise Call NameLoad Str If CompareNotEq BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num body Return Num Assign NameStore Call NameLoad BinOpPow Num Call NameLoad BinOpSub BinOpSub NameLoad NameLoad NameLoad Assign NameStore UnaryOpUSub NameLoad Assign NameStore BinOpSub BinOpAdd NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Return Num Assign NameStore BinOpAdd BinOpSub NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Return Num Assign NameStore BinOpAdd BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Return Num If BoolOpOr CompareGt Call NameLoad NameLoad NameLoad CompareGt Call NameLoad NameLoad NameLoad CompareGt Call NameLoad NameLoad NameLoad body Return Num Assign NameStore Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num BinOpAdd NameLoad Call NameLoad NameLoad BinOpAdd NameLoad Call NameLoad NameLoad BinOpAdd NameLoad Call NameLoad NameLoad Expr Call NameLoad Call NameLoad NameLoad Assign NameStore BinOpDiv Call NameLoad BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd BinOpSub NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num Assign NameStore Call NameLoad NameLoad If AttributeLoad NameLoad attr body Assign NameStore SubscriptLoad Call AttributeLoad NameLoad attr Index Num Assign NameStore Call NameLoad BinOpAdd BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad BinOpSub BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad Num Assign NameStore Call NameLoad BinOpAdd NameLoad NameLoad BinOpSub NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad Assign NameStore Num For NameStore Call NameLoad Call NameLoad NameLoad BinOpAdd Call NameLoad NameLoad Num body Assign NameStore BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub BinOpAdd NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd BinOpSub BinOpAdd NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub BinOpAdd NameLoad NameLoad NameLoad NameLoad Assign NameStore BinOpAdd NameLoad BinOpDiv Call NameLoad BinOpPow Num NameLoad NameLoad Assign NameStore BinOpMult BinOpMult NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore BinOpMult BinOpMult BinOpPow Num Call NameLoad BinOpAdd BinOpSub NameLoad NameLoad NameLoad Call NameLoad BinOpAdd BinOpMult Num NameLoad Num Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad UnaryOpUSub NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str If CompareNotEq Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad body Raise Call NameLoad Str If CompareNotEq Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad body Raise Call NameLoad Str If CompareNotEq Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad body Raise Call NameLoad Str If CompareLt BinOpSub BinOpAdd NameLoad NameLoad NameLoad Num body Return Num If CompareLt BinOpSub BinOpAdd NameLoad NameLoad NameLoad Num body Return Num If CompareLt BinOpSub BinOpAdd NameLoad NameLoad NameLoad Num body Return Num Assign NameStore Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num Expr Call NameLoad NameLoad Assign NameStore BinOpDiv Call NameLoad BinOpMult BinOpMult SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad Call NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num Assign NameStore Call NameLoad NameLoad If NameLoad body Assign NameStore SubscriptLoad Call AttributeLoad Call AttributeLoad NameLoad attr NameLoad attr Index Num Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str Assign NameStore BinOpMult BinOpMult BinOpMult Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad If CompareEq NameLoad Num body Return Num Assign NameStore Call NameLoad BinOpAdd BinOpAdd NameLoad NameLoad NameLoad BinOpAdd BinOpAdd NameLoad NameLoad NameLoad BinOpAdd BinOpAdd NameLoad NameLoad NameLoad BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Assign NameStore Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad BinOpAdd NameLoad Num BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad Expr Call NameLoad NameLoad Assign NameStore Num For NameStore Call NameLoad Call NameLoad NameLoad BinOpAdd Call NameLoad NameLoad Num body Assign NameStore BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub BinOpSub NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub BinOpSub NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub BinOpSub NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpSub BinOpSub NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Call NameLoad BinOpSub BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore BinOpAdd NameLoad BinOpDiv Call NameLoad BinOpMult BinOpPow Num NameLoad SubscriptLoad NameLoad Index BinOpAdd NameLoad Num NameLoad Assign NameStore BinOpMult BinOpMult NameLoad NameLoad BinOpPow Num Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str Assign NameStore BinOpMult BinOpPow Num Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str Assign NameStore Num Assign NameStore Call NameLoad BinOpAdd NameLoad NameLoad BinOpAdd NameLoad NameLoad BinOpAdd NameLoad NameLoad Assign NameStore Num For NameStore Call NameLoad NameLoad BinOpAdd Call NameLoad NameLoad Num body Assign NameStore BinOpAdd NameLoad BinOpMult BinOpMult BinOpMult BinOpAdd BinOpMult Num NameLoad Num Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str If BoolOpOr CompareNotEq Call NameLoad NameLoad NameLoad CompareNotEq Call NameLoad NameLoad NameLoad CompareNotEq Call NameLoad NameLoad NameLoad body Raise Call NameLoad Str If BoolOpOr CompareNotEq Call NameLoad NameLoad NameLoad CompareNotEq Call NameLoad NameLoad NameLoad CompareNotEq Call NameLoad NameLoad NameLoad body Raise Call NameLoad Str Assign NameStore BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Assign NameStore BinOpFloorDiv NameLoad Num Assign NameStore BinOpSub BinOpAdd NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Return Num Assign NameStore BinOpAdd BinOpSub NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Return Num Assign NameStore BinOpAdd BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Return Num If BinOpMod NameLoad Num body Return Num If CompareNotEq BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num body Return Num If BoolOpOr CompareGt Call NameLoad NameLoad NameLoad CompareGt Call NameLoad NameLoad NameLoad CompareGt Call NameLoad NameLoad NameLoad body Return Num Assign NameStore Call NameLoad BinOpAdd BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad BinOpSub BinOpAdd UnaryOpUSub NameLoad NameLoad NameLoad Num Assign NameStore Call NameLoad BinOpAdd NameLoad NameLoad BinOpSub NameLoad NameLoad BinOpSub BinOpAdd NameLoad NameLoad NameLoad Assign NameStore Call NameLoad BinOpAdd BinOpAdd BinOpAdd NameLoad NameLoad NameLoad Num BinOpAdd NameLoad Num Expr Call NameLoad NameLoad Assign NameStore BinOpDiv BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult BinOpAdd BinOpMult Num NameLoad Num BinOpAdd BinOpMult Num NameLoad Num BinOpAdd BinOpMult Num NameLoad Num SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index BinOpAdd NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index BinOpAdd NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index BinOpAdd NameLoad NameLoad BinOpMult Num NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore BinOpDiv BinOpDiv Call NameLoad BinOpMult BinOpMult BinOpMult SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index BinOpAdd BinOpSub NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpAdd BinOpSub NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpAdd BinOpMult Num NameLoad Num BinOpMult BinOpMult SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad Assign NameStore Num For NameStore Call NameLoad Call NameLoad NameLoad BinOpAdd Call NameLoad NameLoad Num body Assign NameStore BinOpMult BinOpMult BinOpMult BinOpMult BinOpMult SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index BinOpSub BinOpSub BinOpAdd NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub BinOpSub NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpAdd BinOpSub BinOpAdd NameLoad NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub BinOpSub BinOpAdd NameLoad NameLoad NameLoad NameLoad Assign NameStore BinOpAdd NameLoad BinOpDiv Call NameLoad BinOpPow Num NameLoad NameLoad Assign NameStore BinOpMult BinOpMult BinOpMult NameLoad NameLoad NameLoad BinOpPow Num BinOpSub BinOpAdd BinOpAdd NameLoad NameLoad NameLoad NameLoad If CompareIsNot NameLoad NameLoad body Assign NameStore Call AttributeLoad NameLoad attr NameLoad Return NameLoad decorator_list ClassDef bases NameLoad body FunctionDef arguments args NameParam defaults kwarg body If Call NameLoad GeneratorExp AttributeLoad NameLoad attr comprehension NameStore AttributeLoad NameLoad attr body Return Call NameLoad AttributeLoad NameLoad attr orelse Return NameLoad decorator_list decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad Str FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Return BinOpMult BinOpMult Call NameLoad BinOpDiv BinOpMult BinOpMult BinOpAdd BinOpMult Num NameLoad Num BinOpAdd BinOpMult Num NameLoad Num BinOpAdd BinOpMult Num NameLoad Num BinOpMult Num NameLoad Call NameLoad NameLoad NameLoad NameLoad Call NameLoad Num Call NameLoad Num Call NameLoad Num Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad BinOpSub UnaryOpUSub NameLoad NameLoad decorator_list Return BinOpMult BinOpPow UnaryOpUSub Call NameLoad Num BinOpAdd NameLoad NameLoad Call NameLoad BinOpMult BinOpDiv BinOpMult Call NameLoad NameLoad BinOpAdd NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Num BinOpSub BinOpSub BinOpAdd BinOpSub BinOpSub BinOpPow NameLoad Num BinOpPow NameLoad Num BinOpPow NameLoad Num NameLoad NameLoad NameLoad TupleLoad NameLoad Call NameLoad BinOpSub NameLoad NameLoad BinOpAdd NameLoad NameLoad decorator_list
N/A N/A 
Wigner, Clebsch-Gordan, Racah, and Gaunt coefficients

Collection of functions for calculating Wigner 3j, 6j, 9j,
Clebsch-Gordan, Racah as well as Gaunt coefficients exactly, all
evaluating to a rational number times the square root of a rational
number [Rasch03]_.

Please see the description of the individual functions for further
details and examples.

References
~~~~~~~~~~

.. [Rasch03] J. Rasch and A. C. H. Yu, 'Efficient Storage Scheme for
  Pre-calculated Wigner 3j, 6j and Gaunt Coefficients', SIAM
  J. Sci. Comput. Volume 25, Issue 4, pp. 1416-1428 (2003)

Credits and Copyright
~~~~~~~~~~~~~~~~~~~~~

This code was taken from Sage with the permission of all authors:

https://groups.google.com/forum/#!topic/sage-devel/M4NZdu-7O38

AUTHORS:

- Jens Rasch (2009-03-24): initial version for Sage

- Jens Rasch (2009-05-31): updated to sage-4.0

Copyright (C) 2008 Jens Rasch <jyr2000@gmail.com>
 __future__ print_function division sympy Integer pi sqrt sympify Dummy S Sum Ynm Function sympy.core.compatibility range N/A _Factlist N/A 1 _calc_factlist N/A N/A nn N/A N/A N/A 
    Function calculates a list of precomputed factorials in order to
    massively accelerate future calculations of the various
    coefficients.

    INPUT:

    -  ``nn`` -  integer, highest factorial to be computed

    OUTPUT:

    list of integers -- the list of precomputed factorials

    EXAMPLES:

    Calculate list of factorials::

        sage: from sage.functions.wigner import _calc_factlist
        sage: _calc_factlist(10)
        [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
     N/A N/A nn N/A len _Factlist N/A N/A ii N/A range N/A len _Factlist N/A int N/A nn 1 N/A N/A N/A N/A _Factlist append N/A N/A _Factlist N/A N/A ii 1 ii N/A N/A _Factlist N/A N/A N/A int nn 1 N/A wigner_3j N/A N/A j_1 j_2 j_3 m_1 m_2 m_3 N/A N/A N/A 
    Calculate the Wigner 3j symbol `\operatorname{Wigner3j}(j_1,j_2,j_3,m_1,m_2,m_3)`.

    INPUT:

    -  ``j_1``, ``j_2``, ``j_3``, ``m_1``, ``m_2``, ``m_3`` - integer or half integer

    OUTPUT:

    Rational number times the square root of a rational number.

    Examples
    ========

    >>> from sympy.physics.wigner import wigner_3j
    >>> wigner_3j(2, 6, 4, 0, 0, 0)
    sqrt(715)/143
    >>> wigner_3j(2, 6, 4, 0, 0, 1)
    0

    It is an error to have arguments that are not integer or half
    integer values::

        sage: wigner_3j(2.1, 6, 4, 0, 0, 0)
        Traceback (most recent call last):
        ...
        ValueError: j values must be integer or half integer
        sage: wigner_3j(2, 6, 4, 1, 0, -1.1)
        Traceback (most recent call last):
        ...
        ValueError: m values must be integer or half integer

    NOTES:

    The Wigner 3j symbol obeys the following symmetry rules:

    - invariant under any permutation of the columns (with the
      exception of a sign change where `J:=j_1+j_2+j_3`):

      .. math::

         \begin{aligned}
         \operatorname{Wigner3j}(j_1,j_2,j_3,m_1,m_2,m_3)
          &=\operatorname{Wigner3j}(j_3,j_1,j_2,m_3,m_1,m_2) \\
          &=\operatorname{Wigner3j}(j_2,j_3,j_1,m_2,m_3,m_1) \\
          &=(-1)^J \operatorname{Wigner3j}(j_3,j_2,j_1,m_3,m_2,m_1) \\
          &=(-1)^J \operatorname{Wigner3j}(j_1,j_3,j_2,m_1,m_3,m_2) \\
          &=(-1)^J \operatorname{Wigner3j}(j_2,j_1,j_3,m_2,m_1,m_3)
         \end{aligned}

    - invariant under space inflection, i.e.

      .. math::

         \operatorname{Wigner3j}(j_1,j_2,j_3,m_1,m_2,m_3)
         =(-1)^J \operatorname{Wigner3j}(j_1,j_2,j_3,-m_1,-m_2,-m_3)

    - symmetric with respect to the 72 additional symmetries based on
      the work by [Regge58]_

    - zero for `j_1`, `j_2`, `j_3` not fulfilling triangle relation

    - zero for `m_1 + m_2 + m_3 \neq 0`

    - zero for violating any one of the conditions
      `j_1 \ge |m_1|`,  `j_2 \ge |m_2|`,  `j_3 \ge |m_3|`

    ALGORITHM:

    This function uses the algorithm of [Edmonds74]_ to calculate the
    value of the 3j symbol exactly. Note that the formula contains
    alternating sums over large factorials and is therefore unsuitable
    for finite precision arithmetic and only useful for a computer
    algebra system [Rasch03]_.

    REFERENCES:

    .. [Regge58] 'Symmetry Properties of Clebsch-Gordan Coefficients',
      T. Regge, Nuovo Cimento, Volume 10, pp. 544 (1958)

    .. [Edmonds74] 'Angular Momentum in Quantum Mechanics',
      A. R. Edmonds, Princeton University Press (1974)

    AUTHORS:

    - Jens Rasch (2009-03-24): initial version
     N/A N/A N/A N/A int N/A j_1 2 N/A j_1 2 N/A N/A int N/A j_2 2 N/A j_2 2 N/A N/A int N/A j_3 2 N/A j_3 2 N/A N/A N/A ValueError j values must be integer or half integer N/A N/A N/A N/A int N/A m_1 2 N/A m_1 2 N/A N/A int N/A m_2 2 N/A m_2 2 N/A N/A int N/A m_3 2 N/A m_3 2 N/A N/A N/A ValueError m values must be integer or half integer N/A N/A N/A N/A m_1 m_2 m_3 0 N/A N/A 0 N/A prefid N/A Integer N/A -1 N/A int N/A N/A j_1 j_2 m_3 N/A m_3 N/A m_3 N/A a1 N/A N/A j_1 j_2 j_3 N/A N/A a1 0 N/A N/A 0 N/A a2 N/A N/A j_1 j_2 j_3 N/A N/A a2 0 N/A N/A 0 N/A a3 N/A N/A N/A j_1 j_2 j_3 N/A N/A a3 0 N/A N/A 0 N/A N/A N/A N/A abs m_1 j_1 N/A N/A abs m_2 j_2 N/A N/A abs m_3 j_3 N/A N/A 0 N/A maxfact N/A max N/A N/A N/A j_1 j_2 j_3 1 N/A j_1 N/A abs m_1 N/A j_2 N/A abs m_2 N/A j_3 N/A abs m_3 N/A N/A _calc_factlist N/A int maxfact N/A argsqrt N/A N/A Integer N/A N/A N/A N/A N/A N/A N/A N/A N/A _Factlist N/A N/A int N/A N/A j_1 j_2 j_3 N/A _Factlist N/A N/A int N/A N/A j_1 j_2 j_3 N/A _Factlist N/A N/A int N/A N/A N/A j_1 j_2 j_3 N/A _Factlist N/A N/A int N/A j_1 m_1 N/A _Factlist N/A N/A int N/A j_1 m_1 N/A _Factlist N/A N/A int N/A j_2 m_2 N/A _Factlist N/A N/A int N/A j_2 m_2 N/A _Factlist N/A N/A int N/A j_3 m_3 N/A _Factlist N/A N/A int N/A j_3 m_3 N/A _Factlist N/A N/A int N/A N/A N/A j_1 j_2 j_3 1 N/A ressqrt N/A sqrt argsqrt N/A N/A ressqrt is_complex N/A N/A ressqrt N/A N/A N/A ressqrt as_real_imag N/A 0 N/A imin N/A max N/A N/A N/A j_3 j_1 m_2 N/A N/A N/A j_3 j_2 m_1 0 N/A imax N/A min N/A j_2 m_2 N/A j_1 m_1 N/A N/A j_1 j_2 j_3 N/A sumres 0 N/A ii N/A range N/A int imin N/A N/A int imax 1 N/A N/A den N/A N/A N/A N/A N/A N/A _Factlist N/A ii N/A _Factlist N/A N/A int N/A N/A N/A ii j_3 j_1 m_2 N/A _Factlist N/A N/A int N/A N/A j_2 m_2 ii N/A _Factlist N/A N/A int N/A N/A j_1 ii m_1 N/A _Factlist N/A N/A int N/A N/A N/A ii j_3 j_2 m_1 N/A _Factlist N/A N/A int N/A N/A N/A j_1 j_2 j_3 ii N/A sumres N/A sumres N/A N/A Integer N/A -1 ii den N/A res N/A N/A ressqrt sumres prefid N/A res N/A clebsch_gordan N/A N/A j_1 j_2 j_3 m_1 m_2 m_3 N/A N/A N/A 
    Calculates the Clebsch-Gordan coefficient
    `\langle j_1 m_1 \; j_2 m_2 | j_3 m_3 \rangle`.

    The reference for this function is [Edmonds74]_.

    INPUT:

    -  ``j_1``, ``j_2``, ``j_3``, ``m_1``, ``m_2``, ``m_3`` - integer or half integer

    OUTPUT:

    Rational number times the square root of a rational number.

    EXAMPLES::

        >>> from sympy import S
        >>> from sympy.physics.wigner import clebsch_gordan
        >>> clebsch_gordan(S(3)/2, S(1)/2, 2, S(3)/2, S(1)/2, 2)
        1
        >>> clebsch_gordan(S(3)/2, S(1)/2, 1, S(3)/2, -S(1)/2, 1)
        sqrt(3)/2
        >>> clebsch_gordan(S(3)/2, S(1)/2, 1, -S(1)/2, S(1)/2, 0)
        -sqrt(2)/2

    NOTES:

    The Clebsch-Gordan coefficient will be evaluated via its relation
    to Wigner 3j symbols:

    .. math::

        \langle j_1 m_1 \; j_2 m_2 | j_3 m_3 \rangle
        =(-1)^{j_1-j_2+m_3} \sqrt{2j_3+1}
        \operatorname{Wigner3j}(j_1,j_2,j_3,m_1,m_2,-m_3)

    See also the documentation on Wigner 3j symbols which exhibit much
    higher symmetry relations than the Clebsch-Gordan coefficient.

    AUTHORS:

    - Jens Rasch (2009-03-24): initial version
     N/A res N/A N/A N/A -1 N/A sympify N/A N/A j_1 j_2 m_3 N/A sqrt N/A N/A 2 j_3 1 N/A wigner_3j j_1 j_2 j_3 m_1 m_2 N/A m_3 N/A res N/A _big_delta_coeff N/A N/A aa bb cc prec N/A None N/A N/A 
    Calculates the Delta coefficient of the 3 angular momenta for
    Racah symbols. Also checks that the differences are of integer
    value.

    INPUT:

    -  ``aa`` - first angular momentum, integer or half integer

    -  ``bb`` - second angular momentum, integer or half integer

    -  ``cc`` - third angular momentum, integer or half integer

    -  ``prec`` - precision of the ``sqrt()`` calculation

    OUTPUT:

    double - Value of the Delta coefficient

    EXAMPLES::

        sage: from sage.functions.wigner import _big_delta_coeff
        sage: _big_delta_coeff(1,1,1)
        1/2*sqrt(1/6)
     N/A N/A N/A int N/A N/A aa bb cc N/A N/A aa bb cc N/A N/A N/A ValueError j values must be integer or half integer and fulfill the triangle relation N/A N/A N/A int N/A N/A aa cc bb N/A N/A aa cc bb N/A N/A N/A ValueError j values must be integer or half integer and fulfill the triangle relation N/A N/A N/A int N/A N/A bb cc aa N/A N/A bb cc aa N/A N/A N/A ValueError j values must be integer or half integer and fulfill the triangle relation N/A N/A N/A N/A aa bb cc 0 N/A N/A 0 N/A N/A N/A N/A aa cc bb 0 N/A N/A 0 N/A N/A N/A N/A bb cc aa 0 N/A N/A 0 N/A maxfact N/A max N/A N/A aa bb cc N/A N/A aa cc bb N/A N/A bb cc aa N/A N/A N/A aa bb cc 1 N/A N/A _calc_factlist maxfact N/A argsqrt N/A N/A Integer N/A N/A N/A _Factlist N/A N/A int N/A N/A aa bb cc N/A _Factlist N/A N/A int N/A N/A aa cc bb N/A _Factlist N/A N/A int N/A N/A bb cc aa N/A Integer N/A _Factlist N/A N/A int N/A N/A N/A aa bb cc 1 N/A ressqrt N/A sqrt argsqrt N/A prec N/A N/A ressqrt N/A N/A N/A N/A N/A ressqrt evalf prec as_real_imag N/A 0 N/A ressqrt N/A racah N/A N/A aa bb cc dd ee ff prec N/A None N/A N/A 
    Calculate the Racah symbol `W(a,b,c,d;e,f)`.

    INPUT:

    -  ``a``, ..., ``f`` - integer or half integer

    -  ``prec`` - precision, default: ``None``. Providing a precision can
       drastically speed up the calculation.

    OUTPUT:

    Rational number times the square root of a rational number
    (if ``prec=None``), or real number if a precision is given.

    Examples
    ========

    >>> from sympy.physics.wigner import racah
    >>> racah(3,3,3,3,3,3)
    -1/14

    NOTES:

    The Racah symbol is related to the Wigner 6j symbol:

    .. math::

       \operatorname{Wigner6j}(j_1,j_2,j_3,j_4,j_5,j_6)
       =(-1)^{j_1+j_2+j_4+j_5} W(j_1,j_2,j_5,j_4,j_3,j_6)

    Please see the 6j symbol for its much richer symmetries and for
    additional properties.

    ALGORITHM:

    This function uses the algorithm of [Edmonds74]_ to calculate the
    value of the 6j symbol exactly. Note that the formula contains
    alternating sums over large factorials and is therefore unsuitable
    for finite precision arithmetic and only useful for a computer
    algebra system [Rasch03]_.

    AUTHORS:

    - Jens Rasch (2009-03-24): initial version
     N/A prefac N/A N/A N/A N/A _big_delta_coeff aa bb ee prec N/A _big_delta_coeff cc dd ee prec N/A _big_delta_coeff aa cc ff prec N/A _big_delta_coeff bb dd ff prec N/A N/A prefac 0 N/A N/A 0 N/A imin N/A max N/A N/A aa bb ee N/A N/A cc dd ee N/A N/A aa cc ff N/A N/A bb dd ff N/A imax N/A min N/A N/A N/A aa bb cc dd N/A N/A N/A aa dd ee ff N/A N/A N/A bb cc ee ff N/A maxfact N/A max N/A imax 1 N/A N/A N/A aa bb cc dd N/A N/A N/A aa dd ee ff N/A N/A N/A bb cc ee ff N/A N/A _calc_factlist maxfact N/A sumres 0 N/A kk N/A range N/A int imin N/A N/A int imax 1 N/A N/A den N/A N/A N/A N/A N/A N/A N/A _Factlist N/A N/A int N/A N/A N/A kk aa bb ee N/A _Factlist N/A N/A int N/A N/A N/A kk cc dd ee N/A _Factlist N/A N/A int N/A N/A N/A kk aa cc ff N/A _Factlist N/A N/A int N/A N/A N/A kk bb dd ff N/A _Factlist N/A N/A int N/A N/A N/A N/A aa bb cc dd kk N/A _Factlist N/A N/A int N/A N/A N/A N/A aa dd ee ff kk N/A _Factlist N/A N/A int N/A N/A N/A N/A bb cc ee ff kk N/A sumres N/A sumres N/A N/A Integer N/A N/A -1 kk N/A _Factlist N/A N/A kk 1 den N/A res N/A N/A prefac sumres N/A -1 N/A int N/A N/A N/A aa bb cc dd N/A res N/A wigner_6j N/A N/A j_1 j_2 j_3 j_4 j_5 j_6 prec N/A None N/A N/A 
    Calculate the Wigner 6j symbol `\operatorname{Wigner6j}(j_1,j_2,j_3,j_4,j_5,j_6)`.

    INPUT:

    -  ``j_1``, ..., ``j_6`` - integer or half integer

    -  ``prec`` - precision, default: ``None``. Providing a precision can
       drastically speed up the calculation.

    OUTPUT:

    Rational number times the square root of a rational number
    (if ``prec=None``), or real number if a precision is given.

    Examples
    ========

    >>> from sympy.physics.wigner import wigner_6j
    >>> wigner_6j(3,3,3,3,3,3)
    -1/14
    >>> wigner_6j(5,5,5,5,5,5)
    1/52

    It is an error to have arguments that are not integer or half
    integer values or do not fulfill the triangle relation::

        sage: wigner_6j(2.5,2.5,2.5,2.5,2.5,2.5)
        Traceback (most recent call last):
        ...
        ValueError: j values must be integer or half integer and fulfill the triangle relation
        sage: wigner_6j(0.5,0.5,1.1,0.5,0.5,1.1)
        Traceback (most recent call last):
        ...
        ValueError: j values must be integer or half integer and fulfill the triangle relation

    NOTES:

    The Wigner 6j symbol is related to the Racah symbol but exhibits
    more symmetries as detailed below.

    .. math::

       \operatorname{Wigner6j}(j_1,j_2,j_3,j_4,j_5,j_6)
        =(-1)^{j_1+j_2+j_4+j_5} W(j_1,j_2,j_5,j_4,j_3,j_6)

    The Wigner 6j symbol obeys the following symmetry rules:

    - Wigner 6j symbols are left invariant under any permutation of
      the columns:

      .. math::

         \begin{aligned}
         \operatorname{Wigner6j}(j_1,j_2,j_3,j_4,j_5,j_6)
          &=\operatorname{Wigner6j}(j_3,j_1,j_2,j_6,j_4,j_5) \\
          &=\operatorname{Wigner6j}(j_2,j_3,j_1,j_5,j_6,j_4) \\
          &=\operatorname{Wigner6j}(j_3,j_2,j_1,j_6,j_5,j_4) \\
          &=\operatorname{Wigner6j}(j_1,j_3,j_2,j_4,j_6,j_5) \\
          &=\operatorname{Wigner6j}(j_2,j_1,j_3,j_5,j_4,j_6)
         \end{aligned}

    - They are invariant under the exchange of the upper and lower
      arguments in each of any two columns, i.e.

      .. math::

         \operatorname{Wigner6j}(j_1,j_2,j_3,j_4,j_5,j_6)
          =\operatorname{Wigner6j}(j_1,j_5,j_6,j_4,j_2,j_3)
          =\operatorname{Wigner6j}(j_4,j_2,j_6,j_1,j_5,j_3)
          =\operatorname{Wigner6j}(j_4,j_5,j_3,j_1,j_2,j_6)

    - additional 6 symmetries [Regge59]_ giving rise to 144 symmetries
      in total

    - only non-zero if any triple of `j`'s fulfill a triangle relation

    ALGORITHM:

    This function uses the algorithm of [Edmonds74]_ to calculate the
    value of the 6j symbol exactly. Note that the formula contains
    alternating sums over large factorials and is therefore unsuitable
    for finite precision arithmetic and only useful for a computer
    algebra system [Rasch03]_.

    REFERENCES:

    .. [Regge59] 'Symmetry Properties of Racah Coefficients',
      T. Regge, Nuovo Cimento, Volume 11, pp. 116 (1959)
     N/A res N/A N/A -1 N/A int N/A N/A N/A j_1 j_2 j_4 j_5 N/A racah j_1 j_2 j_5 j_4 j_3 j_6 prec N/A res N/A wigner_9j N/A N/A j_1 j_2 j_3 j_4 j_5 j_6 j_7 j_8 j_9 prec N/A None N/A N/A 
    Calculate the Wigner 9j symbol
    `\operatorname{Wigner9j}(j_1,j_2,j_3,j_4,j_5,j_6,j_7,j_8,j_9)`.

    INPUT:

    -  ``j_1``, ..., ``j_9`` - integer or half integer

    -  ``prec`` - precision, default: ``None``. Providing a precision can
       drastically speed up the calculation.

    OUTPUT:

    Rational number times the square root of a rational number
    (if ``prec=None``), or real number if a precision is given.

    Examples
    ========

    >>> from sympy.physics.wigner import wigner_9j
    >>> wigner_9j(1,1,1, 1,1,1, 1,1,0 ,prec=64) # ==1/18
    0.05555555...

    It is an error to have arguments that are not integer or half
    integer values or do not fulfill the triangle relation::

        sage: wigner_9j(0.5,0.5,0.5, 0.5,0.5,0.5, 0.5,0.5,0.5,prec=64)
        Traceback (most recent call last):
        ...
        ValueError: j values must be integer or half integer and fulfill the triangle relation
        sage: wigner_9j(1,1,1, 0.5,1,1.5, 0.5,1,2.5,prec=64)
        Traceback (most recent call last):
        ...
        ValueError: j values must be integer or half integer and fulfill the triangle relation

    ALGORITHM:

    This function uses the algorithm of [Edmonds74]_ to calculate the
    value of the 3j symbol exactly. Note that the formula contains
    alternating sums over large factorials and is therefore unsuitable
    for finite precision arithmetic and only useful for a computer
    algebra system [Rasch03]_.
     N/A imin 0 N/A imax N/A min N/A j_1 j_9 N/A j_2 j_6 N/A j_4 j_8 N/A sumres 0 N/A kk N/A range imin N/A N/A int imax 1 N/A N/A sumres N/A sumres N/A N/A N/A N/A N/A 2 kk 1 N/A racah j_1 j_2 j_9 j_6 j_3 kk prec N/A racah j_4 j_6 j_8 j_2 j_5 kk prec N/A racah j_1 j_4 j_9 j_8 j_7 kk prec N/A sumres N/A gaunt N/A N/A l_1 l_2 l_3 m_1 m_2 m_3 prec N/A None N/A N/A 
    Calculate the Gaunt coefficient.

    The Gaunt coefficient is defined as the integral over three
    spherical harmonics:

    .. math::

        \begin{aligned}
        \operatorname{Gaunt}(l_1,l_2,l_3,m_1,m_2,m_3)
        &=\int Y_{l_1,m_1}(\Omega)
         Y_{l_2,m_2}(\Omega) Y_{l_3,m_3}(\Omega) \,d\Omega \\
        &=\sqrt{\frac{(2l_1+1)(2l_2+1)(2l_3+1)}{4\pi}}
         \operatorname{Wigner3j}(l_1,l_2,l_3,0,0,0)
         \operatorname{Wigner3j}(l_1,l_2,l_3,m_1,m_2,m_3)
        \end{aligned}

    INPUT:

    -  ``l_1``, ``l_2``, ``l_3``, ``m_1``, ``m_2``, ``m_3`` - integer

    -  ``prec`` - precision, default: ``None``. Providing a precision can
       drastically speed up the calculation.

    OUTPUT:

    Rational number times the square root of a rational number
    (if ``prec=None``), or real number if a precision is given.

    Examples
    ========

    >>> from sympy.physics.wigner import gaunt
    >>> gaunt(1,0,1,1,0,-1)
    -1/(2*sqrt(pi))
    >>> gaunt(1000,1000,1200,9,3,-12).n(64)
    0.00689500421922113448...

    It is an error to use non-integer values for `l` and `m`::

        sage: gaunt(1.2,0,1.2,0,0,0)
        Traceback (most recent call last):
        ...
        ValueError: l values must be integer
        sage: gaunt(1,0,1,1.1,0,-1.1)
        Traceback (most recent call last):
        ...
        ValueError: m values must be integer

    NOTES:

    The Gaunt coefficient obeys the following symmetry rules:

    - invariant under any permutation of the columns

      .. math::
        \begin{aligned}
          Y(l_1,l_2,l_3,m_1,m_2,m_3)
          &=Y(l_3,l_1,l_2,m_3,m_1,m_2) \\
          &=Y(l_2,l_3,l_1,m_2,m_3,m_1) \\
          &=Y(l_3,l_2,l_1,m_3,m_2,m_1) \\
          &=Y(l_1,l_3,l_2,m_1,m_3,m_2) \\
          &=Y(l_2,l_1,l_3,m_2,m_1,m_3)
        \end{aligned}

    - invariant under space inflection, i.e.

      .. math::
          Y(l_1,l_2,l_3,m_1,m_2,m_3)
          =Y(l_1,l_2,l_3,-m_1,-m_2,-m_3)

    - symmetric with respect to the 72 Regge symmetries as inherited
      for the `3j` symbols [Regge58]_

    - zero for `l_1`, `l_2`, `l_3` not fulfilling triangle relation

    - zero for violating any one of the conditions: `l_1 \ge |m_1|`,
      `l_2 \ge |m_2|`, `l_3 \ge |m_3|`

    - non-zero only for an even sum of the `l_i`, i.e.
      `L = l_1 + l_2 + l_3 = 2n` for `n` in `\mathbb{N}`

    ALGORITHM:

    This function uses the algorithm of [Liberatodebrito82]_ to
    calculate the value of the Gaunt coefficient exactly. Note that
    the formula contains alternating sums over large factorials and is
    therefore unsuitable for finite precision arithmetic and only
    useful for a computer algebra system [Rasch03]_.

    REFERENCES:

    .. [Liberatodebrito82] 'FORTRAN program for the integral of three
      spherical harmonics', A. Liberato de Brito,
      Comput. Phys. Commun., Volume 25, pp. 81-85 (1982)

    AUTHORS:

    - Jens Rasch (2009-03-24): initial version for Sage
     N/A N/A N/A N/A int l_1 l_1 N/A N/A int l_2 l_2 N/A N/A int l_3 l_3 N/A N/A N/A ValueError l values must be integer N/A N/A N/A N/A int m_1 m_1 N/A N/A int m_2 m_2 N/A N/A int m_3 m_3 N/A N/A N/A ValueError m values must be integer N/A sumL N/A N/A l_1 l_2 l_3 N/A bigL N/A sumL 2 N/A a1 N/A N/A l_1 l_2 l_3 N/A N/A a1 0 N/A N/A 0 N/A a2 N/A N/A l_1 l_2 l_3 N/A N/A a2 0 N/A N/A 0 N/A a3 N/A N/A N/A l_1 l_2 l_3 N/A N/A a3 0 N/A N/A 0 N/A N/A sumL 2 N/A N/A 0 N/A N/A N/A N/A m_1 m_2 m_3 0 N/A N/A 0 N/A N/A N/A N/A abs m_1 l_1 N/A N/A abs m_2 l_2 N/A N/A abs m_3 l_3 N/A N/A 0 N/A imin N/A max N/A N/A N/A l_3 l_1 m_2 N/A N/A N/A l_3 l_2 m_1 0 N/A imax N/A min N/A l_2 m_2 N/A l_1 m_1 N/A N/A l_1 l_2 l_3 N/A maxfact N/A max N/A N/A N/A l_1 l_2 l_3 1 N/A imax 1 N/A N/A _calc_factlist maxfact N/A argsqrt N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A 2 l_1 1 N/A N/A 2 l_2 1 N/A N/A 2 l_3 1 N/A _Factlist N/A N/A l_1 m_1 N/A _Factlist N/A N/A l_1 m_1 N/A _Factlist N/A N/A l_2 m_2 N/A _Factlist N/A N/A l_2 m_2 N/A _Factlist N/A N/A l_3 m_3 N/A _Factlist N/A N/A l_3 m_3 N/A 4 pi N/A ressqrt N/A sqrt argsqrt N/A prefac N/A N/A N/A Integer N/A N/A N/A N/A _Factlist N/A bigL N/A _Factlist N/A N/A N/A l_2 l_1 l_3 N/A _Factlist N/A N/A N/A l_1 l_2 l_3 N/A _Factlist N/A N/A N/A l_1 l_2 l_3 N/A _Factlist N/A N/A N/A 2 bigL 1 N/A N/A N/A _Factlist N/A N/A bigL l_1 N/A _Factlist N/A N/A bigL l_2 N/A _Factlist N/A N/A bigL l_3 N/A sumres 0 N/A ii N/A range N/A int imin N/A N/A int imax 1 N/A N/A den N/A N/A N/A N/A N/A N/A _Factlist N/A ii N/A _Factlist N/A N/A N/A N/A ii l_3 l_1 m_2 N/A _Factlist N/A N/A N/A l_2 m_2 ii N/A _Factlist N/A N/A N/A l_1 ii m_1 N/A _Factlist N/A N/A N/A N/A ii l_3 l_2 m_1 N/A _Factlist N/A N/A N/A N/A l_1 l_2 l_3 ii N/A sumres N/A sumres N/A N/A Integer N/A -1 ii den N/A res N/A N/A N/A ressqrt prefac sumres N/A -1 N/A N/A N/A bigL l_3 m_1 m_2 N/A N/A prec None N/A N/A res N/A N/A res n prec N/A res N/A Wigner3j N/A Function N/A doit N/A N/A self N/A hints N/A N/A N/A all N/A N/A obj is_number N/A obj N/A self args N/A N/A N/A wigner_3j N/A self args N/A N/A self N/A N/A dot_rot_grad_Ynm N/A N/A j p l m theta phi N/A N/A N/A 
    Returns dot product of rotational gradients of spherical harmonics.

    This function returns the right hand side of the following expression:

    .. math ::
        \vec{R}Y{_j^{p}} \cdot \vec{R}Y{_l^{m}} = (-1)^{m+p}
        \sum\limits_{k=|l-j|}^{l+j}Y{_k^{m+p}}  * \alpha_{l,m,j,p,k} *
        \frac{1}{2} (k^2-j^2-l^2+k-j-l)


    Arguments
    =========

    j, p, l, m .... indices in spherical harmonics (expressions or integers)
    theta, phi .... angle arguments in spherical harmonics

    Example
    =======

    >>> from sympy import symbols
    >>> from sympy.physics.wigner import dot_rot_grad_Ynm
    >>> theta, phi = symbols("theta phi")
    >>> dot_rot_grad_Ynm(3, 2, 2, 0, theta, phi).doit()
    3*sqrt(55)*Ynm(5, 2, theta, phi)/(11*sqrt(pi))

     N/A j N/A sympify j N/A p N/A sympify p N/A l N/A sympify l N/A m N/A sympify m N/A theta N/A sympify theta N/A phi N/A sympify phi N/A k N/A Dummy k alpha N/A N/A l m j p k N/A N/A N/A N/A N/A N/A sqrt N/A N/A N/A N/A N/A 2 l 1 N/A N/A 2 j 1 N/A N/A 2 k 1 N/A 4 pi N/A Wigner3j j l k N/A S 0 N/A S 0 N/A S 0 N/A Wigner3j j l k p m N/A N/A m p N/A N/A N/A N/A N/A N/A S 1 N/A m p N/A Sum N/A N/A N/A N/A Ynm k N/A m p theta phi N/A alpha l m j p k 2 N/A N/A N/A N/A N/A N/A k 2 N/A j 2 N/A l 2 k j l N/A k N/A abs N/A l j N/A l j N/A