/usr/lib/python2.7/dist-packages/brial/fglm.py is in python-brial 1.2.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | if __name__ == "__main__":
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir))
def _test():
import doctest
doctest.testmod()
from .PyPolyBoRi import BooleSet, Polynomial, BoolePolynomialVector, \
FGLMStrategy, Monomial, Ring
from .blocks import declare_ring
def _fglm(I, from_ring, to_ring):
"""Unchecked variant of fglm"""
vec = BoolePolynomialVector(I)
return FGLMStrategy(from_ring, to_ring, vec).main()
def fglm(I, from_ring, to_ring):
"""
converts *reduced* Groebner Basis in from_ring to a GroebnerBasis in to_ring.
It acts independend of the global ring, which is restored at the end of the
computation,
>>> from brial.PyPolyBoRi import OrderCode
>>> dp_asc = OrderCode.dp_asc
>>> r=declare_ring(['x','y','z'],dict())
>>> old_ring = r
>>> new_ring = old_ring.clone(ordering=dp_asc)
>>> (x,y,z) = [old_ring.variable(i) for i in xrange(3)]
>>> ideal=[x+z, y+z]# lp Groebner basis
>>> list(fglm(ideal, old_ring, new_ring))
[y + x, z + x]
"""
for poly in I:
if poly.ring().id() != from_ring.id():
raise ValueError("Ideal I must be from the first ring argument")
return _fglm(I, from_ring, to_ring)
def vars_real_divisors(monomial, monomial_set):
"""
returns all elements of of monomial_set, which result multiplied by a variable in monomial.
>>> from brial.PyPolyBoRi import OrderCode
>>> dp_asc = OrderCode.dp_asc
>>> from brial.PyPolyBoRi import Ring
>>> r=Ring(1000)
>>> x = r.variable
>>> b=BooleSet([x(1)*x(2),x(2)])
>>> vars_real_divisors(x(1)*x(2)*x(3),b)
{{x(1),x(2)}}
"""
return BooleSet(Polynomial(monomial_set.divisors_of(monomial)). \
graded_part(monomial.deg() - 1))
def m_k_plus_one(completed_elements, variables):
""" calculates $m_{k+1}$ from the FGLM algorithm as described in Wichmanns diploma thesis
It would be nice to be able to efficiently extract the smallest term of a polynomial
>>> from brial.PyPolyBoRi import OrderCode
>>> dp_asc = OrderCode.dp_asc
>>> r=Ring(1000)
>>> x = r.variable
>>> s=BooleSet([x(1)*x(2),x(1),x(2),Monomial(r),x(3)])
>>> variables=BooleSet([x(1),x(2),x(3)])
>>> m_k_plus_one(s,variables)
x(2)*x(3)
>>> r2 = r.clone(ordering=dp_asc)
>>> m_k_plus_one(r2(s).set(),r2(variables).set())
x(1)*x(3)
"""
return sorted(completed_elements.cartesian_product(variables).diff(
completed_elements))[0]
if __name__ == "__main__":
_test()
|