(a, b)
return a.func == b.func and (
        a.has(C.TrigonometricFunction) and b.has(C.TrigonometricFunction) or
        a.has(C.HyperbolicFunction) and b.has(C.HyperbolicFunction))
Helper to tell whether ``a`` and ``b`` have the same sorts
    of symbols in them -- no need to test hyperbolic patterns against
    expressions that have no hyperbolics in them.
Helper to tell whether ``a`` and ``b`` have the same sorts
    of symbols in them -- no need to test hyperbolic patterns against
    expressions that have no hyperbolics in them.
Helper to tell whether a and b have the same sorts of symbols in them -- no need to test hyperbolic patterns against expressions that have no hyperbolics in them .
def _dotrig(a, b):
    """Helper to tell whether ``a`` and ``b`` have the same sorts
    of symbols in them -- no need to test hyperbolic patterns against
    expressions that have no hyperbolics in them."""
    return a.func == b.func and (
        a.has(C.TrigonometricFunction) and b.has(C.TrigonometricFunction) or
        a.has(C.HyperbolicFunction) and b.has(C.HyperbolicFunction))
def _dotrig ( a , b ) : return a . func == b . func and ( a . has ( C . TrigonometricFunction ) and b . has ( C . TrigonometricFunction ) or a . has ( C . HyperbolicFunction ) and b . has ( C . HyperbolicFunction ) )