Exemplo n.º 1
0
def test_NF_module():
    K = NumberField("a^2 - 2", "a", "1.414 +/- .1")
    trivial = NumberFieldModule(K)
    NF = NumberFieldModule(K, RealNumber.rational(1))
    M = NumberFieldModule(K, RealNumber.rational(1), RealNumber.random())

    assert str(trivial) == "K-Module()"
    assert trivial.rank() == 0
    assert NF.rank() == 1
    assert M.rank() == 2
Exemplo n.º 2
0
def random_hexagon(R2):
    x = K.gen()
    M = NumberFieldModule(K, RealNumber.rational(1), RealNumber.random(),
                          RealNumber.random())
    # The side lengths are going to be 2, 2·μ, 2·ν where μ,ν are the random parameters of M.
    one = M.gen(0)
    μ = M.gen(1)
    ν = M.gen(2)
    # We build our vectors from (2, 0), μ·(1, √3), ν.(-1, √3).
    u = R2(2 * one, 0 * one)
    v = R2(μ, x * μ)
    w = R2(-ν, x * ν)
    vectors = [u, v, u + v, -w, u + v - w, u + v]
    vertices = [[1, 3, -4, -5, -3, -2], [2, -1, -6, 4, 5, 6]]
    return Surface(vertices, vectors)
Exemplo n.º 3
0
def test_multiplication():
    from pyexactreal import RealNumber, NumberFieldModule, NumberField

    # The following came up when doing arithmetic between renf_elem_class and
    # Element<NumberField> when trying to construct a hexagon with random side
    # lengths
    K = NumberField("x^2 - 3", "x", "1.73 +/- 0.1")
    x = K.gen()

    M = NumberFieldModule(K, RealNumber.rational(1), RealNumber.random(), RealNumber.random())
    one = M.gen(0)
    μ = M.gen(1)
    ν = M.gen(2)

    assert 2*one == one + one
    assert 0*one == one - one
    assert x*μ == μ*x
    assert 2*one + μ - ν - 2*one - μ + ν == 0
    assert 0*one + x*μ + x*ν - 0*one - x*ν - x*μ == 0
Exemplo n.º 4
0
def test_serialization():
    from pyexactreal import RealNumber, ZZModule, QQModule, NumberFieldModule, NumberField
    M = ZZModule(RealNumber.rational(1))

    assert M.gen(0).to_json() == '{"parent": {"shared": 2147483649, "basis": [{"shared": 2147483650, "kind": "rational", "value": "1"}], "ring": {}}, "coefficients": ["1"]}'

    M = QQModule(RealNumber.rational(1))

    assert M.gen(0).to_json() == '{"parent": {"shared": 2147483649, "basis": [{"shared": 2147483650, "kind": "rational", "value": "1"}], "ring": {}}, "coefficients": ["1"]}'

    K = NumberField("x^2 - 3", "x", "1.73 +/- 0.1")
    M = NumberFieldModule(K, RealNumber.rational(1))

    assert M.gen(0).to_json() == '{"parent": {"shared": 2147483649, "basis": [{"shared": 2147483650, "kind": "rational", "value": "1"}], "ring": {"field": {"shared": 2147483651, "name": "x", "embedding": "[1.7320508075688772935274463415058723669 +/- 5.08e-38]", "minpoly": "x^2 - 3", "precision": 64}}}, "coefficients": [{"cereal_class_version": 0, "parent": {"shared": 2147483652, "name": "a", "embedding": "1e+0", "minpoly": "a-1", "precision": 64}, "value": "1"}]}'
Exemplo n.º 5
0
    def __init__(self, base=None, category=None):
        if base is QQ:
            self._element_factory = exactreal.Element[type(exactreal.RationalField())]
            self._module_factory = lambda gens: QQModule(*gens)
            number_field = QQ
        else:
            base = RealEmbeddedNumberField(base)
            ring = exactreal.NumberField(base.renf)
            self._element_factory = exactreal.Element[type(ring)]
            self._module_factory = lambda gens: NumberFieldModule(ring, *gens)
            number_field = base.number_field

        CommutativeRing.__init__(self, base, category=category)
        H = Hom(number_field, self)
        coercion = H.__make_element_class__(CoercionExactRealsNumberField)(H)
        self.register_coercion(coercion)