예제 #1
0
def polynomialNonZeroCondition(eqns, var, andNonOne = False):
    variables = get_all_variables(eqns)

    prod = Polynomial.fromVariableName(var)

    for i in variables:
        prod = prod * Polynomial.fromVariableName(i)
        if andNonOne:
            prod = prod * (Polynomial.constantPolynomial(1) -
                           Polynomial.fromVariableName(i))

    return prod - Polynomial.constantPolynomial(1)
def _solveExactlyOverNumberField(univariatePoly, nf, timeout):
    
    variable = univariatePoly.variables()[0]

    def convertXtoY(p):
        return p.substitute({'x' : Polynomial.fromVariableName('y')})

    univariatePoly = univariatePoly.convertCoefficients(convertXtoY)
    univariatePoly = univariatePoly.substitute(
        { variable : Polynomial.constantPolynomial(
            Polynomial.fromVariableName('x'))})

    if not nf:
        assert univariatePoly.isConstant()
        newSolution       = Polynomial.fromVariableName('x')
        newNf             = univariatePoly.getConstant()
        newExpressionForX = Polynomial.constantPolynomial(0)
    else:
        nf = convertXtoY(nf)

        pariStr = "PRIAVTEsEONF = rnfequation(nfinit(%s), %s, 1)" % (
            nf, univariatePoly)

        print pariStr
        print timeout
        r = pari.pari_eval(pariStr, timeout = timeout)
        # print r

        newNf              = Polynomial.parseFromMagma(pari.pari_eval(
                "PRIAVTEsEONF[1]", timeout = timeout))
        newExpressionForX  = Polynomial.parseFromMagma(pari.pari_eval(
                "PRIAVTEsEONF[2].pol", timeout = timeout))
        factor             = int(pari.pari_eval(
                "PRIAVTEsEONF[3]", timeout = timeout))
        newSolution = (
            Polynomial.fromVariableName('x')
            - Polynomial.constantPolynomial(factor) * newExpressionForX)

    return newSolution, newNf, newExpressionForX
예제 #3
0
def get_additional_eqns_independent(t, N):
    
    # make sure cusps have indices

    # dictionary associating the decoration change vectors to Ptolemy coordinates
    d = {}

    for i, tet in zip(range(len(t.tet_list)), t.tet_list):
        for coord in simplex_coords_with_fixed_sum(4, N):
            if not N in coord:
                v = [0 for x in range((N-1) * t.num_or_cusps)]
                for j, k in zip(range(4), coord):
                    for p in range(k):
                        v[ tet.cusp_index[j] + p * t.num_or_cusps ] += 1
                d[c_parameter_var(coord, i)] = v

    variables = find_independent_integer_vectors(d)
    
    return [
        Polynomial.fromVariableName(var) - Polynomial.constantPolynomial(1) 
        for var in variables]
예제 #4
0
 def turn_pair_to_Polynomial(p):
     if p[0] == +1:
         return Polynomial.fromVariableName(p[1])
     else:
         return -Polynomial.fromVariableName(p[1])
예제 #5
0
def c_parameter(coords, tet_index):
    """
    Same as c_parameter_var but returns it as Polynomial type.
    """
    return Polynomial.fromVariableName(
        c_parameter_var(coords, tet_index))
 def convertXtoY(p):
     return p.substitute({'x' : Polynomial.fromVariableName('y')})