Changeset 8429:4e5e21559ded
- Timestamp:
- 11/11/07 14:23:49 (6 years ago)
- Branch:
- default
- Location:
- sage/rings/padics
- Files:
-
- 2 edited
-
padic_fixed_mod_element.pxd (modified) (2 diffs)
-
padic_fixed_mod_element.pyx (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/rings/padics/padic_fixed_mod_element.pxd
r7016 r8429 15 15 cdef class pAdicFixedModElement(pAdicBaseGenericElement): 16 16 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 18 21 cdef pAdicFixedModElement _new_c(self) 19 22 cdef RingElement _invert_c_impl(self) … … 24 27 cdef object teichmuller_list(pAdicFixedModElement self) 25 28 cdef pAdicFixedModElement unit_part_c(pAdicFixedModElement self) 26 cdef unsignedlong valuation_c(self)29 cdef long valuation_c(self) 27 30 cdef val_unit_c(self) -
sage/rings/padics/padic_fixed_mod_element.pyx
r7016 r8429 17 17 #***************************************************************************** 18 18 19 include "../../libs/ntl/decl.pxi" 19 20 include "../../ext/gmp.pxi" 20 21 include "../../ext/interrupt.pxi" … … 30 31 from sage.rings.rational cimport Rational 31 32 from sage.rings.padics.pow_computer cimport PowComputer_base 33 from sage.rings.padics.padic_printing cimport pAdicPrinter_class 32 34 33 35 #import sage.rings.padics.padic_ring_generic_element … … 122 124 """ 123 125 mpz_init(self.value) 124 pAdic GenericElement.__init__(self,parent)126 pAdicBaseGenericElement.__init__(self,parent) 125 127 if empty: 126 128 return … … 143 145 if PY_TYPE_CHECK(x, pAdicBaseGenericElement): 144 146 tmp = <Integer> x.lift() 145 if mpz_cmp(tmp.value, self.prime_pow.pow_mpz_t op()[0]) >= 0:146 mpz_mod(self.value, tmp.value, self.prime_pow.pow_mpz_t op()[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]) 147 149 else: 148 150 mpz_set(self.value, tmp.value) … … 173 175 174 176 if PY_TYPE_CHECK(x, Integer): 175 self. set_from_mpz((<Integer>x).value)177 self._set_from_mpz((<Integer>x).value) 176 178 elif isinstance(x, Rational): 177 179 if self.prime_pow.prime.divides(x.denominator()): … … 179 181 else: 180 182 tmp = <Integer> x % parent.prime_pow(parent.precision_cap()) 181 self. set_from_mpz(tmp.value)183 self._set_from_mpz(tmp.value) 182 184 elif isinstance(x, (int, long)): 183 185 tmp = <Integer> Integer(x) 184 self. set_from_mpz(tmp.value)186 self._set_from_mpz(tmp.value) 185 187 else: 186 188 raise TypeError, "unable to create p-adic element" … … 199 201 return make_pAdicFixedModElement, (self.parent(), self.lift()) 200 202 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 204 208 else: 205 209 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 207 230 cdef pAdicFixedModElement _new_c(self): 208 231 cdef pAdicFixedModElement x … … 243 266 ans = self._new_c() 244 267 _sig_on 245 mpz_invert(ans.value, self.value, self.prime_pow.pow_mpz_t op()[0])268 mpz_invert(ans.value, self.value, self.prime_pow.pow_mpz_t_top()[0]) 246 269 _sig_off 247 270 return ans … … 318 341 cdef pAdicFixedModElement ans 319 342 ans = self._new_c() 320 mpz_sub(ans.value, self.prime_pow.pow_mpz_t op()[0], self.value)321 return ans 322 323 def __pow__(pAdicFixedModElement self, right, m): # NOTE: m ignored, always use self.prime_pow.pow_mpz_t op()[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] 324 347 if not PY_TYPE_CHECK(right, Integer): 325 348 right = Integer(right) #Need to make sure that this works for p-adic exponents … … 329 352 ans = self._new_c() 330 353 _sig_on 331 mpz_powm(ans.value, self.value, (<Integer>right).value, self.prime_pow.pow_mpz_t op()[0])354 mpz_powm(ans.value, self.value, (<Integer>right).value, self.prime_pow.pow_mpz_t_top()[0]) 332 355 _sig_off 333 356 return ans … … 349 372 ans = self._new_c() 350 373 mpz_add(ans.value, self.value, (<pAdicFixedModElement>right).value) 351 if mpz_cmp(ans.value, self.prime_pow.pow_mpz_t op()[0]) >= 0:352 mpz_sub(ans.value, ans.value, self.prime_pow.pow_mpz_t op()[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]) 353 376 return ans 354 377 … … 367 390 ans = self._new_c() 368 391 mpz_mul(ans.value, self.value, (<pAdicFixedModElement>right).value) 369 mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_t op()[0])392 mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 370 393 return ans 371 394 … … 387 410 mpz_sub(ans.value, self.value, (<pAdicFixedModElement>right).value) 388 411 if mpz_sgn(ans.value) == -1: 389 mpz_add(ans.value, ans.value, self.prime_pow.pow_mpz_t op()[0])412 mpz_add(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 390 413 return ans 391 414 … … 415 438 ans = self._new_c() 416 439 _sig_on 417 mpz_invert(ans.value, (<pAdicFixedModElement>right).value, self.prime_pow.pow_mpz_t op()[0])440 mpz_invert(ans.value, (<pAdicFixedModElement>right).value, self.prime_pow.pow_mpz_t_top()[0]) 418 441 mpz_mul(ans.value, ans.value, self.value) 419 mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_t op()[0])442 mpz_fdiv_r(ans.value, ans.value, self.prime_pow.pow_mpz_t_top()[0]) 420 443 _sig_off 421 444 return ans … … 569 592 if lift_mode == 'teichmuller': 570 593 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 572 600 573 601 cdef object teichmuller_list(pAdicFixedModElement self): … … 629 657 return ans 630 658 mpz_init(tmp) 631 mpz_sub_ui(tmp, self.prime_pow.pow_mpz_t op()[0], 1)659 mpz_sub_ui(tmp, self.prime_pow.pow_mpz_t_top()[0], 1) 632 660 if mpz_cmp(self.value, tmp) == 0: 633 661 ans = PY_NEW(Integer) … … 635 663 return ans 636 664 # 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_t op()[0])665 mpz_powm(tmp, self.value, self.prime_pow.prime.value, self.prime_pow.pow_mpz_t_top()[0]) 638 666 if mpz_cmp(tmp, self.value) == 0: 639 667 mpz_clear(tmp) … … 871 899 return ans 872 900 873 cdef unsignedlong valuation_c(self):901 cdef long valuation_c(self): 874 902 if mpz_sgn(self.value) == 0: 875 903 return self.prime_pow.prec_cap 876 904 cdef mpz_t tmp 877 cdef unsignedlong ans905 cdef long ans 878 906 mpz_init(tmp) 879 907 ans = mpz_remove(tmp, self.value, self.prime_pow.prime.value)
Note: See TracChangeset
for help on using the changeset viewer.
