Changeset 8429:4e5e21559ded


Ignore:
Timestamp:
11/11/07 14:23:49 (6 years ago)
Author:
David Roe <roed@…>
Branch:
default
Message:

Updating padic classes to adapt to new PowComputer? infrastructure. Improved init. Added _set_from functions.

Location:
sage/rings/padics
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/padics/padic_fixed_mod_element.pxd

    r7016 r8429  
    1515cdef class pAdicFixedModElement(pAdicBaseGenericElement): 
    1616    cdef mpz_t value 
    17     cdef void set_from_mpz(pAdicFixedModElement self, mpz_t value) 
     17    cdef int _set_from_mpz(pAdicFixedModElement self, mpz_t value) except -1 
     18    cdef int _set_from_mpq(pAdicFixedModElement self, mpq_t x) except -1 
     19    cdef int _set_to_mpz(pAdicFixedModElement self, mpz_t dest) except -1 
     20    cdef int _set_to_mpq(pAdicFixedModElement self, mpq_t dest) except -1 
    1821    cdef pAdicFixedModElement _new_c(self) 
    1922    cdef RingElement _invert_c_impl(self) 
     
    2427    cdef object teichmuller_list(pAdicFixedModElement self) 
    2528    cdef pAdicFixedModElement unit_part_c(pAdicFixedModElement self) 
    26     cdef unsigned long valuation_c(self) 
     29    cdef long valuation_c(self) 
    2730    cdef val_unit_c(self) 
  • sage/rings/padics/padic_fixed_mod_element.pyx

    r7016 r8429  
    1717#***************************************************************************** 
    1818 
     19include "../../libs/ntl/decl.pxi" 
    1920include "../../ext/gmp.pxi" 
    2021include "../../ext/interrupt.pxi" 
     
    3031from sage.rings.rational cimport Rational 
    3132from sage.rings.padics.pow_computer cimport PowComputer_base 
     33from sage.rings.padics.padic_printing cimport pAdicPrinter_class 
    3234 
    3335#import sage.rings.padics.padic_ring_generic_element 
     
    122124        """ 
    123125        mpz_init(self.value) 
    124         pAdicGenericElement.__init__(self,parent) 
     126        pAdicBaseGenericElement.__init__(self,parent) 
    125127        if empty: 
    126128            return 
     
    143145        if PY_TYPE_CHECK(x, pAdicBaseGenericElement): 
    144146            tmp = <Integer> x.lift() 
    145             if mpz_cmp(tmp.value, self.prime_pow.pow_mpz_top()[0]) >= 0: 
    146                 mpz_mod(self.value, tmp.value, self.prime_pow.pow_mpz_top()[0]) 
     147            if mpz_cmp(tmp.value, self.prime_pow.pow_mpz_t_top()[0]) >= 0: 
     148                mpz_mod(self.value, tmp.value, self.prime_pow.pow_mpz_t_top()[0]) 
    147149            else: 
    148150                mpz_set(self.value, tmp.value) 
     
    173175 
    174176        if PY_TYPE_CHECK(x, Integer): 
    175             self.set_from_mpz((<Integer>x).value) 
     177            self._set_from_mpz((<Integer>x).value) 
    176178        elif isinstance(x, Rational): 
    177179            if self.prime_pow.prime.divides(x.denominator()): 
     
    179181            else: 
    180182                tmp = <Integer> x % parent.prime_pow(parent.precision_cap()) 
    181                 self.set_from_mpz(tmp.value) 
     183                self._set_from_mpz(tmp.value) 
    182184        elif isinstance(x, (int, long)): 
    183185            tmp = <Integer> Integer(x) 
    184             self.set_from_mpz(tmp.value) 
     186            self._set_from_mpz(tmp.value) 
    185187        else: 
    186188            raise TypeError, "unable to create p-adic element" 
     
    199201        return make_pAdicFixedModElement, (self.parent(), self.lift()) 
    200202 
    201     cdef void set_from_mpz(pAdicFixedModElement self, mpz_t value): 
    202         if mpz_sgn(value) == -1 or mpz_cmp(value, self.prime_pow.pow_mpz_top()[0]) >= 0: 
    203             mpz_mod(self.value, value, self.prime_pow.pow_mpz_top()[0]) 
     203    cdef int _set_from_mpz(pAdicFixedModElement self, mpz_t value) except -1: 
     204        if mpz_sgn(value) == -1 or mpz_cmp(value, self.prime_pow.pow_mpz_t_top()[0]) >= 0: 
     205            _sig_on 
     206            mpz_mod(self.value, value, self.prime_pow.pow_mpz_t_top()[0]) 
     207            _sig_off 
    204208        else: 
    205209            mpz_set(self.value, value) 
    206  
     210        return 0 
     211 
     212    cdef int _set_from_mpq(pAdicFixedModElement self, mpq_t x) except -1: 
     213        if mpz_divisible_p(mpq_denref(x), self.prime_pow.prime.value): 
     214            raise ValueError, "p divides denominator" 
     215        _sig_on 
     216        mpz_invert(self.value, mpq_denref(x), self.prime_pow.pow_mpz_t_top()[0]) 
     217        mpz_mul(self.value, self.value, mpq_numref(x)) 
     218        mpz_mod(self.value, self.value, self.prime_pow.pow_mpz_t_top()[0])                 
     219        _sig_off 
     220        return 0 
     221 
     222    cdef int _set_to_mpz(pAdicFixedModElement self, mpz_t dest) except -1: 
     223        mpz_set(dest, self.value) 
     224        return 0 
     225 
     226    cdef int _set_to_mpq(pAdicFixedModElement self, mpq_t dest) except -1: 
     227        mpq_set_z(dest, self.value) 
     228        return 0 
     229         
    207230    cdef pAdicFixedModElement _new_c(self): 
    208231        cdef pAdicFixedModElement x 
     
    243266            ans = self._new_c() 
    244267            _sig_on 
    245             mpz_invert(ans.value, self.value, self.prime_pow.pow_mpz_top()[0]) 
     268            mpz_invert(ans.value, self.value, self.prime_pow.pow_mpz_t_top()[0]) 
    246269            _sig_off 
    247270            return ans         
     
    318341        cdef pAdicFixedModElement ans 
    319342        ans = self._new_c() 
    320         mpz_sub(ans.value, self.prime_pow.pow_mpz_top()[0], self.value) 
    321         return ans 
    322  
    323     def __pow__(pAdicFixedModElement self, right, m): # NOTE: m ignored, always use self.prime_pow.pow_mpz_top()[0] 
     343        mpz_sub(ans.value, self.prime_pow.pow_mpz_t_top()[0], self.value) 
     344        return ans 
     345 
     346    def __pow__(pAdicFixedModElement self, right, m): # NOTE: m ignored, always use self.prime_pow.pow_mpz_t_top()[0] 
    324347        if not PY_TYPE_CHECK(right, Integer): 
    325348            right = Integer(right) #Need to make sure that this works for p-adic exponents 
     
    329352        ans = self._new_c() 
    330353        _sig_on 
    331         mpz_powm(ans.value, self.value, (<Integer>right).value, self.prime_pow.pow_mpz_top()[0]) 
     354        mpz_powm(ans.value, self.value, (<Integer>right).value, self.prime_pow.pow_mpz_t_top()[0]) 
    332355        _sig_off 
    333356        return ans 
     
    349372        ans = self._new_c() 
    350373        mpz_add(ans.value, self.value, (<pAdicFixedModElement>right).value) 
    351         if mpz_cmp(ans.value, self.prime_pow.pow_mpz_top()[0]) >= 0: 
    352             mpz_sub(ans.value, ans.value, self.prime_pow.pow_mpz_top()[0]) 
     374        if mpz_cmp(ans.value, self.prime_pow.pow_mpz_t_top()[0]) >= 0: 
     375            mpz_sub(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 
    353376        return ans 
    354377 
     
    367390        ans = self._new_c() 
    368391        mpz_mul(ans.value, self.value, (<pAdicFixedModElement>right).value) 
    369         mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_top()[0]) 
     392        mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 
    370393        return ans 
    371394 
     
    387410        mpz_sub(ans.value, self.value, (<pAdicFixedModElement>right).value) 
    388411        if mpz_sgn(ans.value) == -1: 
    389             mpz_add(ans.value, ans.value, self.prime_pow.pow_mpz_top()[0]) 
     412            mpz_add(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 
    390413        return ans 
    391414 
     
    415438            ans = self._new_c() 
    416439            _sig_on 
    417             mpz_invert(ans.value, (<pAdicFixedModElement>right).value, self.prime_pow.pow_mpz_top()[0]) 
     440            mpz_invert(ans.value, (<pAdicFixedModElement>right).value, self.prime_pow.pow_mpz_t_top()[0]) 
    418441            mpz_mul(ans.value, ans.value, self.value) 
    419             mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_top()[0]) 
     442            mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 
    420443            _sig_off 
    421444            return ans         
     
    569592        if lift_mode == 'teichmuller': 
    570593            return self.teichmuller_list() 
    571         return self.base_p_list(self.value, lift_mode) 
     594        if lift_mode == 'simple': 
     595            return (<pAdicPrinter_class>self.parent()._printer).base_p_list(self.value, True) 
     596        elif lift_mode == 'smallest': 
     597            return (<pAdicPrinter_class>self.parent()._printer).base_p_list(self.value, False) 
     598        else: 
     599            raise ValueError 
    572600 
    573601    cdef object teichmuller_list(pAdicFixedModElement self): 
     
    629657            return ans 
    630658        mpz_init(tmp) 
    631         mpz_sub_ui(tmp, self.prime_pow.pow_mpz_top()[0], 1) 
     659        mpz_sub_ui(tmp, self.prime_pow.pow_mpz_t_top()[0], 1) 
    632660        if mpz_cmp(self.value, tmp) == 0: 
    633661            ans = PY_NEW(Integer) 
     
    635663            return ans 
    636664        # check if self is an approximation to a teichmuller lift: 
    637         mpz_powm(tmp, self.value, self.prime_pow.prime.value, self.prime_pow.pow_mpz_top()[0]) 
     665        mpz_powm(tmp, self.value, self.prime_pow.prime.value, self.prime_pow.pow_mpz_t_top()[0]) 
    638666        if mpz_cmp(tmp, self.value) == 0: 
    639667            mpz_clear(tmp) 
     
    871899        return ans 
    872900         
    873     cdef unsigned long valuation_c(self): 
     901    cdef long valuation_c(self): 
    874902        if mpz_sgn(self.value) == 0: 
    875903            return self.prime_pow.prec_cap 
    876904        cdef mpz_t tmp 
    877         cdef unsigned long ans 
     905        cdef long ans 
    878906        mpz_init(tmp) 
    879907        ans = mpz_remove(tmp, self.value, self.prime_pow.prime.value) 
Note: See TracChangeset for help on using the changeset viewer.