Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit 3c7644f

Browse files
committed
#15114 restore basic functionality, with deprecation warnings
1 parent 9f47f4c commit 3c7644f

File tree

2 files changed

+188
-0
lines changed

2 files changed

+188
-0
lines changed

src/sage/rings/real_mpfi.pyx

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ from sage.arith.constants cimport LOG_TEN_TWO_PLUS_EPSILON
265265

266266
cimport sage.structure.element
267267
from sage.structure.element cimport RingElement, Element, ModuleElement
268+
from sage.structure.element cimport have_same_parent
268269
from sage.structure.parent cimport Parent
269270
from sage.structure.richcmp cimport richcmp
270271

@@ -285,6 +286,7 @@ import operator
285286

286287
from sage.cpython.string cimport char_to_str, bytes_to_str
287288

289+
from sage.misc.superseded import deprecation
288290
import sage.rings.infinity
289291

290292
#*****************************************************************************
@@ -2568,6 +2570,107 @@ cdef class RealIntervalFieldElement(RingElement):
25682570
# Basic Arithmetic
25692571
########################
25702572

2573+
def __add__(left, right):
2574+
r"""
2575+
TESTS::
2576+
2577+
sage: RIF(1) + RR(1)
2578+
doctest:...:
2579+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2580+
See http://trac.sagemath.org/15114 for details.
2581+
2
2582+
sage: import warnings; warnings.resetwarnings()
2583+
"""
2584+
cdef RealIntervalFieldElement _left = (<RealIntervalFieldElement> left)
2585+
if have_same_parent(left, right):
2586+
return _left._add_(right)
2587+
if (type(right) is RealNumber
2588+
and _left._parent.prec() <= right.parent().prec()):
2589+
deprecation(15114, "automatic conversions from floating-point "
2590+
"numbers to intervals are deprecated")
2591+
return left + _left._parent(right)
2592+
elif isinstance(left, RealIntervalFieldElement):
2593+
return Element.__add__(left, right)
2594+
else:
2595+
return Element.__radd__(right, left)
2596+
2597+
def __sub__(left, right):
2598+
r"""
2599+
TESTS::
2600+
2601+
sage: RIF(2) - RR(1)
2602+
doctest:...:
2603+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2604+
See http://trac.sagemath.org/15114 for details.
2605+
1
2606+
sage: import warnings; warnings.resetwarnings()
2607+
"""
2608+
cdef RealIntervalFieldElement _left = (<RealIntervalFieldElement> left)
2609+
if have_same_parent(left, right):
2610+
return _left._sub_(right)
2611+
if (type(right) is RealNumber
2612+
and _left._parent.prec() <= right.parent().prec()):
2613+
deprecation(15114, "automatic conversions from floating-point "
2614+
"numbers to intervals are deprecated")
2615+
return left - _left._parent(right)
2616+
elif isinstance(left, RealIntervalFieldElement):
2617+
return Element.__sub__(left, right)
2618+
else:
2619+
return Element.__rsub__(right, left)
2620+
2621+
def __mul__(left, right):
2622+
r"""
2623+
TESTS::
2624+
2625+
sage: RIF(1) * RR(1)
2626+
doctest:...:
2627+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2628+
See http://trac.sagemath.org/15114 for details.
2629+
1
2630+
sage: import warnings; warnings.resetwarnings()
2631+
"""
2632+
cdef RealIntervalFieldElement _left = (<RealIntervalFieldElement> left)
2633+
if have_same_parent(left, right):
2634+
return _left._mul_(right)
2635+
if (type(right) is RealNumber
2636+
and _left._parent.prec() <= right.parent().prec()):
2637+
deprecation(15114, "automatic conversions from floating-point "
2638+
"numbers to intervals are deprecated")
2639+
return left * _left._parent(right)
2640+
elif isinstance(left, RealIntervalFieldElement):
2641+
return Element.__mul__(left, right)
2642+
else:
2643+
return Element.__rmul__(right, left)
2644+
2645+
def __truediv__(left, right):
2646+
r"""
2647+
TESTS::
2648+
2649+
sage: RIF(1) / RR(1/2)
2650+
doctest:...:
2651+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2652+
See http://trac.sagemath.org/15114 for details.
2653+
2
2654+
sage: import warnings; warnings.resetwarnings()
2655+
"""
2656+
cdef RealIntervalFieldElement _left = (<RealIntervalFieldElement> left)
2657+
if have_same_parent(left, right):
2658+
return _left._div_(right)
2659+
if (type(right) is RealNumber
2660+
and _left._parent.prec() <= right.parent().prec()):
2661+
deprecation(15114, "automatic conversions from floating-point "
2662+
"numbers to intervals are deprecated")
2663+
return left / _left._parent(right)
2664+
elif (type(left) is RealNumber
2665+
and left.parent().prec() >= right.parent().prec()):
2666+
deprecation(15114, "automatic conversions from floating-point "
2667+
"numbers to intervals are deprecated")
2668+
return right.parent()(left)/right
2669+
elif isinstance(left, RealIntervalFieldElement):
2670+
return Element.__truediv__(left, right)
2671+
else:
2672+
return Element.__rtruediv__(right, left)
2673+
25712674
cpdef _add_(self, other):
25722675
"""
25732676
Add two real intervals with the same parent.

src/sage/rings/real_mpfr.pyx

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ from sage.cpython.string cimport char_to_str, str_to_bytes
133133
from sage.misc.superseded import deprecation
134134

135135
from sage.structure.element cimport RingElement, Element, ModuleElement
136+
from sage.structure.element cimport have_same_parent
136137
from sage.structure.richcmp cimport rich_to_bool_sgn, rich_to_bool
137138
cdef bin_op
138139
from sage.structure.element import bin_op
@@ -2377,6 +2378,90 @@ cdef class RealNumber(sage.structure.element.RingElement):
23772378
# Basic Arithmetic
23782379
########################
23792380

2381+
def __add__(left, right):
2382+
r"""
2383+
TESTS::
2384+
2385+
sage: RR(1) + RIF(1)
2386+
doctest:...:
2387+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2388+
See http://trac.sagemath.org/15114 for details.
2389+
2
2390+
sage: import warnings; warnings.resetwarnings()
2391+
"""
2392+
if have_same_parent(left, right):
2393+
return (<RealNumber> left)._add_(right)
2394+
from .real_mpfi import RealIntervalFieldElement
2395+
if type(right) is RealIntervalFieldElement:
2396+
return right.__add__(left)
2397+
elif isinstance(left, RealNumber):
2398+
return Element.__add__(left, right)
2399+
else:
2400+
return Element.__add__(right, left)
2401+
2402+
def __sub__(left, right):
2403+
r"""
2404+
TESTS::
2405+
2406+
sage: RR(2) - RIF(1)
2407+
doctest:...:
2408+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2409+
See http://trac.sagemath.org/15114 for details.
2410+
1
2411+
sage: import warnings; warnings.resetwarnings()
2412+
"""
2413+
if have_same_parent(left, right):
2414+
return (<RealNumber> left)._sub_(right)
2415+
from .real_mpfi import RealIntervalFieldElement
2416+
if type(right) is RealIntervalFieldElement:
2417+
return (-right).__add__(left)
2418+
elif isinstance(left, RealNumber):
2419+
return Element.__sub__(left, right)
2420+
else:
2421+
return Element.__rsub__(right, left)
2422+
2423+
def __mul__(left, right):
2424+
r"""
2425+
TESTS::
2426+
2427+
sage: RR(1) * RIF(1)
2428+
doctest:...:
2429+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2430+
See http://trac.sagemath.org/15114 for details.
2431+
1
2432+
sage: import warnings; warnings.resetwarnings()
2433+
"""
2434+
if have_same_parent(left, right):
2435+
return (<RealNumber> left)._mul_(right)
2436+
from .real_mpfi import RealIntervalFieldElement
2437+
if type(right) is RealIntervalFieldElement:
2438+
return right.__mul__(left)
2439+
elif isinstance(left, RealNumber):
2440+
return Element.__mul__(left, right)
2441+
else:
2442+
return Element.__rmul__(right, left)
2443+
2444+
def __truediv__(left, right):
2445+
r"""
2446+
TESTS::
2447+
2448+
sage: RR(1) / RIF(1/2)
2449+
doctest:...:
2450+
DeprecationWarning: automatic conversions from floating-point numbers to intervals are deprecated
2451+
See http://trac.sagemath.org/15114 for details.
2452+
2
2453+
sage: import warnings; warnings.resetwarnings()
2454+
"""
2455+
if have_same_parent(left, right):
2456+
return (<RealNumber> left)._div_(right)
2457+
from .real_mpfi import RealIntervalFieldElement
2458+
if type(right) is RealIntervalFieldElement:
2459+
return right.__rtruediv__(left)
2460+
elif isinstance(left, RealNumber):
2461+
return Element.__truediv__(left, right)
2462+
else:
2463+
return Element.__rtruediv__(right, left)
2464+
23802465
cpdef _add_(self, other):
23812466
"""
23822467
Add two real numbers with the same parent.

0 commit comments

Comments
 (0)