Opened 10 years ago
Last modified 5 years ago
#8824 new defect
Make it so that numpy datatypes are integrated into the coercion model
Reported by: | jason | Owned by: | robertwb |
---|---|---|---|
Priority: | major | Milestone: | sage-6.4 |
Component: | coercion | Keywords: | |
Cc: | Merged in: | ||
Authors: | Reviewers: | ||
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | Stopgaps: |
Description
From sage-devel: http://groups.google.com/group/sage-devel/browse_frm/thread/221f569eaba874de
Hello:
Tracking a weird bug I've discovered the following: For a symbolic variable x and a numpy.float64 y, the code 'x<y' evals
to a Symbolic expression, while 'y<x' evals to a numpy.bool.
I'm afraid I'm stacked, as it is the responsability of the method
numpy.float64.lt, and I can't assign it to a custom method, for example.
Any idea what can I try so that 'y<x' evals to a Symbolic Expression
too (if you agree this should be the result)?
Sage should set the array_priority attribute to something very high in its base class(es), then let the coercion model decide how NumPy? objects should be handled (in this case, coerce to RDF or CDF).
NumPy? uses the custom convention that array_priority decides which operand gets to handle the operation.
Example:
import numpy as np class MagicOne: __array_priority__ = 1000 def __cmp__(self, other): print 'MagicOne has control' return cmp(1, other) one = MagicOne() print one < np.float64(63.3) print np.float64(63.3) < one
This prints
MagicOne has control True MagicOne has control False
Change History (5)
comment:1 Changed 10 years ago by
comment:2 Changed 6 years ago by
- Milestone changed from sage-5.11 to sage-5.12
comment:3 Changed 6 years ago by
- Milestone changed from sage-6.1 to sage-6.2
comment:4 Changed 6 years ago by
- Milestone changed from sage-6.2 to sage-6.3
comment:5 Changed 5 years ago by
- Milestone changed from sage-6.3 to sage-6.4
This might be a fitting place to record a wish: If Sage decides to do something with NumPy? arrays (not just scalars), I think the behaviour should be something like:
I.e. let matrices be operators acting on data, operating along the vectors along the rightmost dimension (matrix on right) or leftmost dimension (matrix on left).
In particular, I think it would be very bad to coerce NumPy? arrays to Sage matrices!