def toPolynomial(self): def processOneSide(origLeftMonomial): newLeft = Monomial.constantMonomial(origLeftMonomial.getCoefficient()) newRight = Monomial.constantMonomial(1) for var, expo in origLeftMonomial.getVars(): switch_sides = 'Inv' in var var = var.replace('Inv','') if 'zpprime' in var: newLeftMultiply = ( Monomial.constantMonomial(-1) * Monomial.fromVariableName( var.replace('zpprime','OneMinusz'))) newRightMultiply = ( Monomial.fromVariableName( var.replace('zpprime','z'))) elif 'zprime' in var: newLeftMultiply = ( Monomial.constantMonomial(1)) newRightMultiply = ( Monomial.fromVariableName( var.replace('zprime','OneMinusz'))) else: newLeftMultiply = ( Monomial.fromVariableName(var)) newRightMultiply = ( Monomial.constantMonomial(1)) if switch_sides: newLeft = newLeft * newRightMultiply**expo newRight = newRight * newLeftMultiply**expo else: newLeft = newLeft * newLeftMultiply**expo newRight = newRight * newRightMultiply**expo return newLeft, newRight l1, r1 = processOneSide(self.left) l2, r2 = processOneSide(self.right) newLeft = Polynomial((l1*r2,)) newRight = Polynomial((l2*r1,)) substDict = dict( [ (var, Polynomial( ( Monomial.constantMonomial(1), Monomial.constantMonomial(-1)* Monomial.fromVariableName( var.replace('OneMinusz','z'))))) for var in newLeft.variables() + newRight.variables() if 'OneMinusz' in var]) return ( newLeft.substitute(substDict) - newRight.substitute(substDict))