(n, I0, I2, I22, I4, pm_type, i, j, k)
return G, a, b, c
Same as the helper function in ..helpers, making use of the fact that
    `F == 0` for the sphere
Same as the helper function in ..helpers, making use of the fact that
    `F == 0` for the sphere
Same as the helper function in .. helpers making use of the fact that F == 0 for the sphere
def _compute_dobrodeev(n, I0, I2, I22, I4, pm_type, i, j, k):
    """Same as the helper function in ..helpers, making use of the fact that
    `F == 0` for the sphere
    """
    # TODO prove F==0 analytically
    t = 1 if pm_type == "I" else -1

    L = fact(n) // (fact(i) * fact(n - i)) * 2 ** i
    M = fact(n) // (fact(j) * fact(k) * fact(n - j - k)) * 2 ** (j + k)
    N = L + M
    R = (
        -frac(j + k - i, i) * I2 ** 2 / I0 ** 2
        + frac(j + k - 1, n) * I4 / I0
        - frac(n - 1, n) * I22 / I0
    )
    H = frac(1, i) * (
        +(j + k - i) * I2 ** 2 / I0 ** 2
        + frac(j + k, n) * ((i - 1) * I4 / I0 - (n - 1) * I22 / I0)
    )
    Q = L / M * R + H

    G = frac(1, N)
    a = sqrt(frac(n, i) * I2 / I0)
    b = sqrt(frac(n, j + k) * (I2 / I0 + t * sqrt(k / j * Q)))
    c = sqrt(frac(n, j + k) * (I2 / I0 - t * sqrt(j / k * Q)))
    return G, a, b, c
def _compute_dobrodeev ( n , I0 , I2 , I22 , I4 , pm_type , i , j , k ) : # TODO prove F==0 analytically t = 1 if pm_type == "I" else - 1 L = fact ( n ) // ( fact ( i ) * fact ( n - i ) ) * 2 ** i M = fact ( n ) // ( fact ( j ) * fact ( k ) * fact ( n - j - k ) ) * 2 ** ( j + k ) N = L + M R = ( - frac ( j + k - i , i ) * I2 ** 2 / I0 ** 2 + frac ( j + k - 1 , n ) * I4 / I0 - frac ( n - 1 , n ) * I22 / I0 ) H = frac ( 1 , i ) * ( + ( j + k - i ) * I2 ** 2 / I0 ** 2 + frac ( j + k , n ) * ( ( i - 1 ) * I4 / I0 - ( n - 1 ) * I22 / I0 ) ) Q = L / M * R + H G = frac ( 1 , N ) a = sqrt ( frac ( n , i ) * I2 / I0 ) b = sqrt ( frac ( n , j + k ) * ( I2 / I0 + t * sqrt ( k / j * Q ) ) ) c = sqrt ( frac ( n , j + k ) * ( I2 / I0 - t * sqrt ( j / k * Q ) ) ) return G , a , b , c