Opened 17 months ago

Last modified 3 months ago

#29802 new defect

Documentation: Explain that min, max do not work for SR

Reported by: alexjbest Owned by:
Priority: minor Milestone: sage-9.5
Component: documentation Keywords: symbolics, infinity, minimum, maximum
Cc: Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges


On 9.2beta0

sage: a = var('a')
sage: min(a,+Infinity)
sage: min(+Infinity,a)

returning a in both cases would be best, but at the very worst this should consistently throw an error imo.

Change History (9)

comment:1 Changed 17 months ago by mkoeppe

This is Python's built-in min. Try min_symbolic

comment:2 Changed 17 months ago by alexjbest

@mkoeppe, thanks, sorry for the noise, I searched pretty hard for this information (using Google and trac search). I wonder how we could make this information more discoverable?

Perhaps adding a min method to sage.symbolic.expression.Expression to compute the minimum of self and other in this way?

comment:3 Changed 16 months ago by mkoeppe

  • Component changed from symbolics to documentation
  • Priority changed from major to minor
  • Summary changed from Minimum of Infinity and a real variable not commutative to Documentation: Explain that min, max do not work for SR

comment:4 Changed 16 months ago by kcrisman

I am pretty sure we tried doing something along the lines of making this easier to find, but apparently not. For instance, it could be useful in plot documentation too - see here.

See also:

As for the suggestion, are there any other builtins that we are able to treat in this manner? Other than things like repr() = __repr__()? I don't see anything about min or max in the Python docs on custom classes. The actual CPython source seems to implement a generic function that then gets a max via gt and min via lt, but I don't see an easy way (or desire) to hack this. Unfortunately improving doc - a lot - may be the best way to handle this. (I don't immediately see how the key argument would solve this, for instance.)

Last edited 16 months ago by kcrisman (previous) (diff)

comment:5 Changed 16 months ago by kcrisman

Interestingly, we actually do do this for abs (see builtins list), and it causes a problem, because

sage: abs?
Signature:      abs(x, /)
Docstring:      Return the absolute value of the argument.
Init docstring: Initialize self.  See help(type(self)) for accurate signature.
Type:           builtin_function_or_method

But presumably we want something more than that, such as the content here. I'm not sure why this is what is returned.

Anyway - maybe that means we can overload min/max somehow, maybe even as naively as for abs. Though note comment:2:ticket:6949.

comment:6 Changed 16 months ago by mkoeppe

See also #24296

comment:7 Changed 12 months ago by mkoeppe

  • Milestone changed from sage-9.2 to sage-9.3

comment:8 Changed 7 months ago by mkoeppe

  • Milestone changed from sage-9.3 to sage-9.4

Setting new milestone based on a cursory review of ticket status, priority, and last modification date.

comment:9 Changed 3 months ago by mkoeppe

  • Milestone changed from sage-9.4 to sage-9.5
Note: See TracTickets for help on using tickets.