def normal_denom(fa, fd, ga, gd, DE):
 (dn, ds) = splitfactor(fd, DE)
 (en, es) = splitfactor(gd, DE)
 p = dn.gcd(en)
 h = en.gcd(en.diff(DE.t)).quo(p.gcd(p.diff(DE.t)))
 a = (dn * h)
 c = (a * h)
 if c.div(en)[1]:
  raise NonElementaryIntegralException
 ca = (c * ga)
 (ca, cd) = ca.cancel(gd, include=True)
 ba = ((a * fa) - ((dn * derivation(h, DE)) * fd))
 (ba, bd) = ba.cancel(fd, include=True)
 return (a, (ba, bd), (ca, cd), h)

def normal_denom ( fa , fd , ga , gd , DE ) : ( dn , ds ) = splitfactor ( fd , DE ) ( en , es ) = splitfactor ( gd , DE ) p = dn . gcd ( en ) h = en . gcd ( en . diff ( DE . t ) ) . quo ( p . gcd ( p . diff ( DE . t ) ) ) a = ( dn * h ) c = ( a * h ) if c . div ( en ) [ 1 ] : raise NonElementaryIntegralException ca = ( c * ga ) ( ca , cd ) = ca . cancel ( gd , include = True ) ba = ( ( a * fa ) - ( ( dn * derivation ( h , DE ) ) * fd ) ) ( ba , bd ) = ba . cancel ( fd , include = True ) return ( a , ( ba , bd ) , ( ca , cd ) , h )
normal part of the denominator .