Ticket #10484 (closed defect: fixed)
Chinese remainder code raises an error when called with Python ints
| Reported by: | davidloeffler | Owned by: | was |
|---|---|---|---|
| Priority: | major | Milestone: | sage-4.6.2 |
| Component: | number theory | Keywords: | CRT |
| Cc: | Work issues: | ||
| Report Upstream: | N/A | Reviewers: | Robert Bradshaw, Mike Hansen |
| Authors: | David Loeffler | Merged in: | sage-4.6.2.alpha0 |
| Dependencies: | Stopgaps: |
Description
Lots of the congruence subgroup code works intensively with small integers, and represents these as Python ints rather than Sage integers for speed reasons. This brought to light the following irritating bug:
sage: crt(int(2), int(3), int(5), int(7))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/storage/masiao/sage-4.6.1.alpha3/devel/sage-reviewing/<ipython console> in <module>()
/usr/local/sage/sage-4.6/local/lib/python2.6/site-packages/sage/rings/arith.pyc in crt(a, b, m, n)
2737 return CRT_list(a, b)
2738 g, alpha, beta = XGCD(m, n)
-> 2739 q, r = (b - a).quo_rem(g)
2740 if r != 0:
2741 raise ValueError("No solution to crt problem since gcd(%s,%s) does not divide %s-%s" % (m, n, a, b))
AttributeError: 'int' object has no attribute 'quo_rem'
Attachments
Change History
comment:1 Changed 2 years ago by davidloeffler
- Status changed from new to needs_review
- Authors set to David Loeffler
comment:3 Changed 2 years ago by mhansen
- Status changed from positive_review to needs_info
- Reviewers set to Robert Bradshaw, Mike Hansen
Shouldn't you use Integer(a) instead of ZZ(a) since it's about 3.5 times faster (on boxen)?
comment:4 Changed 2 years ago by davidloeffler
- Status changed from needs_info to needs_review
Here's a new patch using Integer. Sorry, I meant to overwrite the original patch -- apply only the second one.
comment:5 Changed 2 years ago by mhansen
- Status changed from needs_review to positive_review
Thanks!
Note: See
TracTickets for help on using
tickets.


Here's a tiny little patch (one line, one comment, one doctest).