Processing math: 100%

First time here? Check out the FAQ!

Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

answered 4 years ago

Max Alekseyev gravatar image

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get its variety with 128 solutions in a minute or so.

def myvariety(sys,vars=None):
    R = sys[0].parent()
    F = sys[0].lc().parent()   # base ring

    J = R.ideal( sys )

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    if len(nvars)>0:
        B = J.elimination_ideal(nvars).basis
    else:
        B = J.groebner_basis()

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 2
No.2 Revision

While there is a bug in Singular Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get its variety with 128 solutions in a minute or so.

def myvariety(sys,vars=None):
    R = sys[0].parent()
    F = sys[0].lc().parent()   # base ring

    J = R.ideal( sys )

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    if len(nvars)>0:
        B = J.elimination_ideal(nvars).basis
    else:
        B = J.groebner_basis()

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 3
No.3 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get its the corresponding variety with 128 solutions points in a minute or so.

def myvariety(sys,vars=None):
    R = sys[0].parent()
    F = sys[0].lc().parent()   # base ring

    J = R.ideal( sys )

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    if len(nvars)>0:
        B = J.elimination_ideal(nvars).basis
    else:
        B = J.groebner_basis()

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 4
No.4 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety with 128 points in a minute or so.

def myvariety(sys,vars=None):
    R = sys[0].parent()
    F = sys[0].lc().parent()   # base ring

    J = R.ideal( ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    if len(nvars)>0:
        B = J.elimination_ideal(nvars).basis
    else:
        B = J.groebner_basis()

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 5
No.5 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety with 128 points in a minute or so.

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()
    F = sys[0].lc().parent() R.base_ring()           # base ring

    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    if len(nvars)>0:
        B = J.elimination_ideal(nvars).basis
    else:
        B = J.groebner_basis()

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 6
No.6 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety with 128 points in a minute or so.

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()
    F = R.base_ring()           # base ring

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    if len(nvars)>0:
        B = J.elimination_ideal(nvars).basis
    else:
        B = J.groebner_basis()

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 7
No.7 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method. In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety with 128 points in a minute or so.

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()
    F = R.base_ring()           # base ring

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in sys], J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 8
No.8 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety with 128 points in a minute or so.so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()
    F = R.base_ring()           # base ring

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 9
No.9 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety with 128 points of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()
    F = R.base_ring()           # base ring

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 10
No.10 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()
    F = R.base_ring()           # base ring

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    pol = F[v](B[0])       # converting to univariate polynomial

    for q,_ in pol.roots():
B[0].univariate_polynomial().roots():
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 11
No.11 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myroots(p):
    return p.roots(multiplicities=False)

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    for q,_ in B[0].univariate_polynomial().roots():
myroots(B[0].univariate_polynomial()):
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 12
No.12 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myroots(p):
    return p.roots(multiplicities=False)

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    for q,_ q in myroots(B[0].univariate_polynomial()):
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 13
No.13 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myroots(p):
    return p.roots(multiplicities=False)

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return([dict()])
return [dict()]

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    for q in myroots(B[0].univariate_polynomial()):
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 14
No.14 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myroots(p):
    return p.roots(multiplicities=False)

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return [dict()]

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    for q in myroots(B[0].univariate_polynomial()):
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 15
No.15 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myroots(p):
    return p.roots(multiplicities=False)

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return [dict()]

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    for q in myroots(B[0].univariate_polynomial()):
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T
click to hide/show revision 16
No.16 Revision

While there is a bug in Singular preventing from using the built-in .variety() method, I've done my own quick-n-dirty alternative implementation of this method.

In your example just run myvariety( Eq[0,0].coefficients() + Eq[1,0].coefficients() + [q^4+q for q in K.gens()] )to get the corresponding variety of size 128 in a minute or so. In fact, the variety here represents a vector space over GF(2) spanned by 7 vectors (and 128=27).

def myroots(p):
    return p.roots(multiplicities=False)

def myvariety(sys,vars=None):
    J = ideal( sys )
    R = J.ring()

    if vars==None:
        vars = R.gens()
    if len(vars)==0:
        return [dict()]

    T = list()

    v = vars[0]
    nvars = vars[1:]

    B = J.elimination_ideal(nvars).basis

    assert len(B) == 1
    assert B[0] != 0

    for q in myroots(B[0].univariate_polynomial()):
        S = myvariety( [r.subs({v:q}) for r in J.interreduced_basis()], nvars )
        for s in S:
            s.update({v:q})
        T += S
    return T