def prde_normal_denom(fa, fd, G, DE):
 (dn, ds) = splitfactor(fd, DE)
 (Gas, Gds) = list(zip(*G))
 gd = reduce((lambda i, j: i.lcm(j)), Gds, Poly(1, DE.t))
 (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)
 ba = ((a * fa) - ((dn * derivation(h, DE)) * fd))
 (ba, bd) = ba.cancel(fd, include=True)
 G = [(c * A).cancel(D, include=True) for (A, D) in G]
 return (a, (ba, bd), G, h)

def prde_normal_denom ( fa , fd , G , DE ) : ( dn , ds ) = splitfactor ( fd , DE ) ( Gas , Gds ) = list ( zip ( * G ) ) gd = reduce ( ( lambda i , j : i . lcm ( j ) ) , Gds , Poly ( 1 , DE . t ) ) ( 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 ) ba = ( ( a * fa ) - ( ( dn * derivation ( h , DE ) ) * fd ) ) ( ba , bd ) = ba . cancel ( fd , include = True ) G = [ ( c * A ) . cancel ( D , include = True ) for ( A , D ) in G ] return ( a , ( ba , bd ) , G , h )
parametric risch differential equation - normal part of the denominator .