Exemplo n.º 1
0
def test_element():
    from pyeantic import eantic
    from sage.all import ZZ, QQ
    K = eantic.renf('x^2 - 2', 'x', '[1.4142 +/- 0.0001]')

    assert str(eantic.renf_elem(K, [ZZ(2), ZZ(3)])) == "(3*x+2 ~ 6.2426407)"
    assert str(eantic.renf_elem(K, [1/ZZ(2), 1/ZZ(3)])) == "(1/3*x+1/2 ~ 0.97140452)"
    def __init__(self, embedded, category=None):
        r"""
        TESTS::

            sage: from pyeantic import eantic, RealEmbeddedNumberField
            sage: K = NumberField(x**2 - 2, 'a', embedding=sqrt(AA(2)))
            sage: K = RealEmbeddedNumberField(K)

            sage: from pyeantic.real_embedded_number_field import RealEmbeddedNumberField
            sage: isinstance(K, RealEmbeddedNumberField)
            True

            sage: TestSuite(K).run()

        """
        self.number_field = embedded
        var = self.number_field.variable_name()
        self.renf = eantic.renf(
            repr(self.number_field.polynomial().change_variable_name(var)),
            var, str(RBF(self.number_field.gen())))

        Field.__init__(self, QQ, category=category)

        self.register_coercion(self.number_field)
        self.number_field.register_conversion(ConversionNumberFieldRenf(self))
Exemplo n.º 3
0
def test_arithmetic():
    from pyeantic import eantic
    from sage.all import ZZ, QQ
    K = eantic.renf('x^2 - 2', 'x', '[1.4142 +/- 0.0001]')
    a = K.gen()

    assert (a + ZZ(1)) * (a - ZZ(1)) == (a*a - ZZ(1))
    assert (a + 1/ZZ(2)) * (a - 1/ZZ(2)) == (a*a - 1/ZZ(4)) 
Exemplo n.º 4
0
def test_eantic():
    from pyeantic import eantic
    L = eantic.renf("a^3 - a^2 - a - 1", "a", "[1.84 +/- 0.01]")
    lengths = []
    lengths.append(eantic.renf_elem(L, "a"))
    lengths.append(eantic.renf_elem(L, "2*a^2 - 3"))
    iet = IntervalExchangeTransformation(lengths, [1, 0])
    iet_10_check(iet)
Exemplo n.º 5
0
def test_arithmetic():
    K = eantic.renf("x^2 - 3", "x", "1.73 +/- 0.1")
    x = K.gen()

    assert x + x == 2 * x
    assert not (x - x)
    assert (x + 1) * (x - 1) == x * x - 1
    assert x**2 == 3
    assert -x != x
Exemplo n.º 6
0
def test_cmp():
    from pyeantic import eantic
    from sage.all import ZZ, QQ
    K = eantic.renf('x^2 - 2', 'x', '[1.4142 +/- 0.0001]')
    a = K.gen()

    assert a == a
    assert a <= a
    assert a >= a
    assert a > 0
    assert 0 < a
    assert a != 0
Exemplo n.º 7
0
def test_construct():
    K = eantic.renf("A^3 - 3", "A", "1.44 +/- 0.1")
    zero = K.zero()
    one = K.one()
    A = K.gen()
    assert eantic.renf_elem(K) == zero
    assert eantic.renf_elem(K, "A") == A
    assert eantic.renf_elem(K, "A - 3") == A - 3
    assert eantic.renf_elem(K, "1") == one
    assert eantic.renf_elem(A) == A
    assert eantic.renf_elem(K, 1) == one
    assert eantic.renf_elem(K, [0, 0, 0]) == zero
    assert eantic.renf_elem(K, [1, 0, 0]) == one
    assert eantic.renf_elem(K, [0, 1, 0]) == A
Exemplo n.º 8
0
def lengths(coefficients, permutation):
    r"""
    Produces lengths for the given permutation in a ring represented by coefficients.
    """
    if len(permutation) == 2:
        lengths = [18, 3]
    elif len(permutation) == 7:
        lengths = [4, 56, 23, 11, 21, 9, 65]
    else:
        lengths = [1] * len(permutation)

    if coefficients == "mpz":
        from gmpxxyy import mpz
        return [mpz(l) for l in lengths]
    elif coefficients == "mpq":
        from gmpxxyy import mpq
        return [mpq(l) for l in lengths]
    elif coefficients == "renf_elem":
        from pyeantic import eantic
        L = eantic.renf("a^3 - a^2 - a - 1", "a", "[1.84 +/- 0.01]")
        return [eantic.renf_elem(L, l) for l in lengths]
    else:
        raise NotImplementedError(
            f"Cannot create lengths for {coefficients} yet.")
Exemplo n.º 9
0
def test_delete_parent_before_binop():
    K = eantic.renf("x^3 - 3", "x", "1.44 +/- 0.1")
    x = K.gen()
    y = K.gen() + 1
    del K
    z = x + y
Exemplo n.º 10
0
def test_repr():
    K = eantic.renf("x^2 - 3", "x", "1.73 +/- 0.1")
    x = K.gen()
    assert repr(x) == "(x ~ 1.7320508)"
Exemplo n.º 11
0
    def __init__(self, embedded, category=None):
        r"""
        TESTS::

            sage: import pyeantic
            sage: from pyeantic import RealEmbeddedNumberField

            sage: K = RealEmbeddedNumberField(QQ)
            sage: isinstance(K, pyeantic.real_embedded_number_field.RealEmbeddedNumberField)
            True

            sage: TestSuite(K).run()

        ::

            sage: K = NumberField(x**2 - 2, 'a', embedding=sqrt(AA(2)))
            sage: K = RealEmbeddedNumberField(K)

            sage: import pyeantic.real_embedded_number_field
            sage: isinstance(K, pyeantic.real_embedded_number_field.RealEmbeddedNumberField)
            True

            sage: TestSuite(K).run()

        ::

            sage: K = NumberField(x**2 - 2, 'b', embedding=sqrt(AA(2)))
            sage: K = RealEmbeddedNumberField(K)

            sage: isinstance(K, pyeantic.real_embedded_number_field.RealEmbeddedNumberField)
            True

            sage: TestSuite(K).run()

        ::

            sage: K.an_element() in K.number_field
            True
            sage: K.an_element() in QQbar
            True
            sage: K.number_field.an_element() in K
            True
            sage: 1 in K
            True

        ::

            sage: type(K.one() - K.number_field.one())
            <class 'sage.rings.number_field.number_field_element_quadratic.NumberFieldElement_quadratic'>
            sage: type(K.number_field.one() - K.one())
            <class 'sage.rings.number_field.number_field_element_quadratic.NumberFieldElement_quadratic'>
            sage: type(K.one() - 1)
            <class 'pyeantic.real_embedded_number_field.RealEmbeddedNumberField_with_category.element_class'>
            sage: type(1 - K.one())
            <class 'pyeantic.real_embedded_number_field.RealEmbeddedNumberField_with_category.element_class'>

        """
        self.number_field = embedded
        var = self.number_field.variable_name()
        self.renf = eantic.renf(
            repr(self.number_field.polynomial().change_variable_name(var)),
            var, str(RBF(self.number_field.gen())))

        CommutativeRing.__init__(self, QQ, category=category)

        # It is usually not a good idea to introduce cycles in the coercion
        # framework: when performing a + b with a in A and b in B, it's a bit
        # random whether the result will be in A or in B. So we make the map
        # into the SageMath number field a coercion since it makes lots of
        # stuff work that depends on having coercions to other number fields
        # and AA, QQbar, …. We register this coercion as an embedding so
        # transitive coercions are detected by the coercion framework such as
        # the coercion into AA.
        self.register_embedding(CoercionNumberFieldRenf(self))

        self.register_conversion(self.number_field)

        # Allow coercion of rationals and integers so arithmetic with integers
        # works on the SageMath prompt.
        self.register_coercion(QQ)
Exemplo n.º 12
0
def test_repr():
    K = eantic.renf("x^2 - 3", "x", "1.73 +/- 0.1")
    assert str(K) == repr(K)
    assert str(K) == "NumberField(x^2 - 3, [1.7320508075688772935274463415058723669 +/- 5.08e-38])"