I've got the following function:
def area2(d, r):
x = (sqrt(2*r^2 - d^2) - d)/2
a2 = 2*arccos((d + x)/r)
a2 = (a2 - sin(a2))/2*r^2
return ((2*x)^2 + 4*a2) - d.parent().pi()/9
I'd like to use this function with various argument typs, among them RealField
, RealIntervalField
and the mpf
type from mpmath
. The latter appears to be a requirement for using mpmath.findroot
, as suggested by this answer.
However, the code currently fails to work with mpf
, as these numbers don't interact nicely with sage constants:
sage: area2(mpmath.mpf(4.44), mpmath.mpf(4.74))
[
]
a2 = _sage_const_2 *arccos((d + x)/r)
[
]
TypeError: cannot coerce arguments: no canonical coercion from <type 'sage.libs.mpmath.ext_main.mpf'> to Symbolic Ring
So my question is this: is there a way to write this function so that it will allow operation on all the mentioned number types, without case distinctions to cater for the different types, and without loosing precision to casts?
If this is not possible, do you know of any existing bug report asking for such a feature, should I open a new ticket, or is there any reason why such an interoperability is not technically possible?