I think it's safe to assume that x is an integer, unless it's explicitly not. It's pretty standard to not require assumptions, and anyway, noninteger arguments give an exception, so I think it's reasonable to assume that any argument must be an integer. It's the same as Interval(x, y) assuming x and y are real.
Aaron Meurer On Fri, Aug 30, 2019 at 5:28 AM Chris Smith <[email protected]> wrote: > > Even `Range(x, x + 10)[0]` cannot be evaluated unless we known that x is an > integer. > > Support for Range and methods which return a known value has been committed, > e.g. `Range(i + 1, i + 10)[0] -> i + 1` if `i` is an integer. > > /c > > On Thursday, August 29, 2019 at 1:26:22 PM UTC-5, Aaron Meurer wrote: >> >> On Thu, Aug 29, 2019 at 6:02 AM Chris Smith <[email protected]> wrote: >> > >> > Currently it returns NotImplemented. Were you thinking EmptySet returns >> > (oo, -oo) for (inf, sup)? >> >> Yes, I noticed that it gives NotImplementedError, but the >> mathematically correct result for it is oo for inf and -oo for sup. >> See for instance https://en.wikipedia.org/wiki/Lattice_(order) (search >> for "emtpy set"). In a lattice, join is the supremum and meet is the >> infimum. The lattice in this case would be the real numbers union -oo >> and oo, which is a complete lattice. >> >> > >> > In any case, it is not only inf and sup that are problems for a symbolic >> > range. The problem of how to represent a slice or indexed element of the >> > range is also present, e.g. `Range(x,y,z)[0]` is not `x` unless the range >> > is not empty...and if it is empty then accessing `[0]` would generate an >> > error. >> >> I'm not sure here. If we don't make any assumptions, then slicing >> cannot be allowed in any range with symbolic parameters, except in >> certain cases like Range(x, x + 10). Which means it wouldn't be very >> useful. But I'm not really sure if it's something that you'd want to >> use. >> >> Aaron Meurer >> >> > >> > On Tuesday, August 27, 2019 at 10:56:21 AM UTC-5, Aaron Meurer wrote: >> >> >> >> I think it's reasonable to return the result. I noticed that >> >> Interval.inf just returns the lower limit, even though Interval can >> >> also technically return an empty set. Actually, the infimum of the >> >> empty set is infinity, not nan, so if that's the concern, we can >> >> include that in the Piecewise result. >> >> >> >> Aaron Meurer >> >> >> >> On Mon, Aug 26, 2019 at 6:29 PM Chris Smith <[email protected]> wrote: >> >> > >> >> > Ok, that is a detail that can be changed. But the bigger question is >> >> > whether we want such an expression to be returned or if we just want to >> >> > forbid it and raise an error if a non-Piecewise result cannot be >> >> > returned. >> >> > >> >> > On Monday, August 26, 2019 at 4:22:13 PM UTC-5, Aaron Meurer wrote: >> >> >> >> >> >> I would structure the Piecewise so that there is no True (otherwise) >> >> >> condition, and the empty set cases fall under that. I think Piecewise >> >> >> already gives nan in such cases. >> >> >> >> >> >> This is also somewhat related to >> >> >> https://github.com/sympy/sympy/issues/16362. >> >> >> >> >> >> Aaron Meurer >> >> >> >> >> >> On Mon, Aug 26, 2019 at 1:57 PM Chris Smith <[email protected]> wrote: >> >> >> > >> >> >> > In this PR `Range` has been modified to accept symbolic start, stop >> >> >> > and step values, e.g. `Range(x, y, z)`. One of the decisions that >> >> >> > needs to be made is whether such Ranges should return the symbolic >> >> >> > logical statement corresponding to a given attribute or not. >> >> >> > >> >> >> > e.g. the piecewise-folded version of `Range(x, y, z).inf` is >> >> >> > >> >> >> > Piecewise( >> >> >> > (nan, ceiling((-x + y)/z) <= 0), >> >> >> > (x, z > 0), >> >> >> > (x + z*ceiling((-x + y)/z) - z, Ne(x, x + 1)), >> >> >> > (y - z, True)) >> >> >> > >> >> >> > The problem is that the nan result is really not the inf...it is >> >> >> > used to indicate that inf is not defined under conditions that would >> >> >> > lead to an EmptySet, e.g. x=z=1,y=0. Is this of any value or should >> >> >> > Range with symbols just raise a ValueError if a property cannot be >> >> >> > given as a simple expression? >> >> >> > >> >> >> > /c >> >> >> > >> >> >> > -- >> >> >> > You received this message because you are subscribed to the Google >> >> >> > Groups "sympy" group. >> >> >> > To unsubscribe from this group and stop receiving emails from it, >> >> >> > send an email to [email protected]. >> >> >> > To view this discussion on the web visit >> >> >> > https://groups.google.com/d/msgid/sympy/6dc89b8f-cf15-4d9e-861c-1ad267df7955%40googlegroups.com. >> >> > >> >> > -- >> >> > You received this message because you are subscribed to the Google >> >> > Groups "sympy" group. >> >> > To unsubscribe from this group and stop receiving emails from it, send >> >> > an email to [email protected]. >> >> > To view this discussion on the web visit >> >> > https://groups.google.com/d/msgid/sympy/95f2dab1-446c-4196-9363-b51de7ed44e1%40googlegroups.com. >> > >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "sympy" group. >> > To unsubscribe from this group and stop receiving emails from it, send an >> > email to [email protected]. >> > To view this discussion on the web visit >> > https://groups.google.com/d/msgid/sympy/dc79e5a0-a782-42f2-8220-e110191e2b5f%40googlegroups.com. > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/53fd30ac-04e5-4f07-83dc-a42f67eef1a8%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2B3yBOtVTSkrqq%2BFSLCU-Pjs-qDx3TdbLaMzSRtTnFwLw%40mail.gmail.com.
