include "sage/libs/ntl/decl.pxi"
cimport sage.structure.element
from sage.libs.gmp.types cimport mpz_t
from sage.rings.integer cimport Integer
from sage.rings.polynomial.polynomial_element cimport Polynomial
from sage.structure.element cimport FieldElement, RingElement, ModuleElement
from sage.structure.parent_base cimport ParentWithBase
from sage.libs.ntl.ntl_ZZX cimport ntl_ZZX
from sage.libs.ntl.ntl_ZZ cimport ntl_ZZ
cdef class NumberFieldElement(FieldElement):
cdef ZZX_c __numerator
cdef ZZ_c __denominator
# Pointers to the defining polynomial (with numerator) for the field.
# I keep these as pointers for arithmetic speed.
cdef ntl_ZZX __fld_numerator
cdef ntl_ZZ __fld_denominator
cdef object __multiplicative_order
cdef object __pari
cdef object __matrix
cdef _new(self)
cdef number_field(self)
cdef void _ntl_coeff_as_mpz(self, mpz_t z, long i)
cdef void _ntl_denom_as_mpz(self, mpz_t z)
cdef void _invert_c_(self, ZZX_c *num, ZZ_c *den)
cdef void _reduce_c_(self)
cpdef ModuleElement _add_(self, ModuleElement right)
cpdef ModuleElement _sub_(self, ModuleElement right)
cpdef ModuleElement _neg_(self)
cpdef bint is_rational(self)
cpdef bint is_one(self)
cdef int _randomize(self, num_bound, den_bound, distribution) except -1
cdef class NumberFieldElement_absolute(NumberFieldElement):
pass
cdef class NumberFieldElement_relative(NumberFieldElement):
pass
# TODO: cyclotomic and/or quadratic classes? (Both for differing implementations and speed).
cdef class OrderElement_absolute(NumberFieldElement_absolute):
cdef object _number_field
cdef class OrderElement_relative(NumberFieldElement_relative):
cdef object _number_field