from sage.rings.ring cimport CommutativeRing from sage.rings.number_field.number_field_element_quadratic cimport NumberFieldElement_quadratic # Residue element ctypedef long residue_element[2] cdef class ResidueRingElement cdef class ResidueRing_abstract(CommutativeRing): cdef object P, F cdef public object element_class, _residue_field cdef long n0, n1, p, e, _cardinality cdef long im_gen0 cdef object element_to_residue_field(self, residue_element x) cdef void add(self, residue_element rop, residue_element op0, residue_element op1) cdef void sub(self, residue_element rop, residue_element op0, residue_element op1) cdef void mul(self, residue_element rop, residue_element op0, residue_element op1) cdef int inv(self, residue_element rop, residue_element op) except -1 cdef bint is_unit(self, residue_element op) cdef void neg(self, residue_element rop, residue_element op) cdef ResidueRingElement new_element(self) cdef int coefficients(self, long* v0, long* v1, NumberFieldElement_quadratic x) except -1 cdef int coerce_from_nf(self, residue_element r, NumberFieldElement_quadratic x) except -1 cdef bint element_is_1(self, residue_element op) cdef bint element_is_0(self, residue_element op) cdef void set_element_to_1(self, residue_element op) cdef void set_element_to_0(self, residue_element op) cdef void set_element(self, residue_element rop, residue_element op) cdef int set_element_from_tuple(self, residue_element rop, x) except -1 cdef int cmp_element(self, residue_element left, residue_element right) cdef int pow(self, residue_element rop, residue_element op, long e) except -1 cdef bint is_square(self, residue_element op) except -2 cdef int sqrt(self, residue_element rop, residue_element op) except -1 cdef int ith_element(self, residue_element rop, long i) except -1 cpdef long cardinality(self) cdef void unsafe_ith_element(self, residue_element rop, long i) cdef int next_element(self, residue_element rop, residue_element op) except -1 cdef bint is_last_element(self, residue_element op) cdef long index_of_element(self, residue_element op) except -1 cdef long index_of_element_in_P(self, residue_element op) except -1 cdef int next_element_in_P(self, residue_element rop, residue_element op) except -1 cdef bint is_last_element_in_P(self, residue_element op) cdef element_to_str(self, residue_element op) cdef class ResidueRingElement: cdef residue_element x cdef ResidueRing_abstract _parent cpdef long index(self) cpdef parent(self) cdef new_element(self) cpdef bint is_unit(self) cpdef bint is_square(self) cpdef sqrt(self)