Exemplo n.º 1
0
def _futrig(e, **kwargs):
    """Helper for futrig."""
    from sympy.simplify.fu import (TR1, TR2, TR3, TR2i, TR10, L, TR10i, TR8,
                                   TR6, TR15, TR16, TR111, TR5, TRmorrie, TR11,
                                   TR14, TR22, TR12)
    from sympy.core.compatibility import _nodes

    if not e.has(TrigonometricFunction):
        return e

    if e.is_Mul:
        coeff, e = e.as_independent(TrigonometricFunction)
    else:
        coeff = S.One

    Lops = lambda x: (L(x), x.count_ops(), _nodes(x), len(x.args), x.is_Add)
    trigs = lambda x: x.has(TrigonometricFunction)

    tree = [
        identity,
        (
            TR3,  # canonical angles
            TR1,  # sec-csc -> cos-sin
            TR12,  # expand tan of sum
            lambda x: _eapply(factor, x, trigs),
            TR2,  # tan-cot -> sin-cos
            [identity, lambda x: _eapply(_mexpand, x, trigs)],
            TR2i,  # sin-cos ratio -> tan
            lambda x: _eapply(lambda i: factor(i.normal()), x, trigs),
            TR14,  # factored identities
            TR5,  # sin-pow -> cos_pow
            TR10,  # sin-cos of sums -> sin-cos prod
            TR11,
            TR6,  # reduce double angles and rewrite cos pows
            lambda x: _eapply(factor, x, trigs),
            TR14,  # factored powers of identities
            [identity, lambda x: _eapply(_mexpand, x, trigs)],
            TRmorrie,
            TR10i,  # sin-cos products > sin-cos of sums
            [identity, TR8],  # sin-cos products -> sin-cos of sums
            [identity, lambda x: TR2i(TR2(x))],  # tan -> sin-cos -> tan
            [
                lambda x: _eapply(expand_mul, TR5(x), trigs),
                lambda x: _eapply(expand_mul, TR15(x), trigs)
            ],  # pos/neg powers of sin
            [
                lambda x: _eapply(expand_mul, TR6(x), trigs),
                lambda x: _eapply(expand_mul, TR16(x), trigs)
            ],  # pos/neg powers of cos
            TR111,  # tan, sin, cos to neg power -> cot, csc, sec
            [identity, TR2i],  # sin-cos ratio to tan
            [identity, lambda x: _eapply(expand_mul, TR22(x), trigs)
             ],  # tan-cot to sec-csc
            TR1,
            TR2,
            TR2i,
            [identity, lambda x: _eapply(factor_terms, TR12(x), trigs)
             ],  # expand tan of sum
        )
    ]
    e = greedy(tree, objective=Lops)(e)
    return coeff * e
Exemplo n.º 2
0
def test_TR5():
    assert TR5(sin(x)**2) == -cos(x)**2 + 1
    assert TR5(sin(x)**-2) == sin(x)**(-2)
    assert TR5(sin(x)**4) == (-cos(x)**2 + 1)**2