Ticket #7614 (closed defect: fixed)

Opened 4 years ago

Last modified 4 years ago

change plot to use fast_callable

Reported by: was Owned by: was
Priority: major Milestone: sage-4.3
Component: graphics Keywords:
Cc: Work issues:
Report Upstream: N/A Reviewers: Jason Grout
Authors: William Stein Merged in: sage-4.3.rc1
Dependencies: Stopgaps:

Description (last modified by mvngu) (diff)

From this  sage-support thread:

On Sun, Dec 6, 2009 at 4:51 PM, Michel <vdbergh@gmail.com> wrote:
> Thanks for the reply. But no. The problem is not due to the fact that
> the function has a singularity. Indeed.
>
> plot(20*log(abs((1+I*x)^4),10),(x,0,3))
>
> fails with the same error which is incomprehensible to me.
>
> On the other hand turning the expression into a lambda function made
> it possible to plot it. Thanks for this practical advice.
>
> I wish someone could explain this rationally to me.
>
> 20*log(abs((1+I*x)^4),10)
>
> seems to be a perfectly fine symbolic expression so IMHO it should be
> possible to plot it.

This is a bug.  There absolutely no reason that plotting should give the error
   "float() argument must be a string or a number".
We could give an error about not being able to evaluate the function at certain
points.  However, the above error is not OK.    The error in fact is not in plotting
but in making a fast_float compiled version of the expression:

sage: s = 20*log(abs((1+I*x)^4),10)
sage: fast_float(s,x)
Traceback (most recent call last):
...
TypeError: float() argument must be a string or a number

In fact, SAge *should* be using fast_callable, not fast_float.  This works
just fine if you force it manually:

s = 20*log(abs((1+I*x)^4),10)
plot(fast_callable(s,vars=[x]), (x,0,3))
[[nice picture as output]]

Many, many thanks for your bug report.  It is bug reports from users like
you that really helps Sage to be a first-rate mathematical software system.

Attachments

trac_7614.patch Download (3.2 KB) - added by was 4 years ago.

Change History

comment:1 Changed 4 years ago by mvngu

  • Description modified (diff)

From this  sage-support thread:

On Sun, Dec 6, 2009 at 4:51 PM, Michel <vdbergh@gmail.com> wrote:
> Thanks for the reply. But no. The problem is not due to the fact that
> the function has a singularity. Indeed.
>
> plot(20*log(abs((1+I*x)^4),10),(x,0,3))
>
> fails with the same error which is incomprehensible to me.
>
> On the other hand turning the expression into a lambda function made
> it possible to plot it. Thanks for this practical advice.
>
> I wish someone could explain this rationally to me.
>
> 20*log(abs((1+I*x)^4),10)
>
> seems to be a perfectly fine symbolic expression so IMHO it should be
> possible to plot it.

This is a bug.  There absolutely no reason that plotting should give the error
   "float() argument must be a string or a number".
We could give an error about not being able to evaluate the function at certain
points.  However, the above error is not OK.    The error in fact is not in plotting
but in making a fast_float compiled version of the expression:

sage: s = 20*log(abs((1+I*x)^4),10)
sage: fast_float(s,x)
Traceback (most recent call last):
...
TypeError: float() argument must be a string or a number

In fact, SAge *should* be using fast_callable, not fast_float.  This works
just fine if you force it manually:

s = 20*log(abs((1+I*x)^4),10)
plot(fast_callable(s,vars=[x]), (x,0,3))
[[nice picture as output]]

Many, many thanks for your bug report.  It is bug reports from users like
you that really helps Sage to be a first-rate mathematical software system.

comment:2 Changed 4 years ago by mvngu

  • Description modified (diff)

comment:3 follow-up: ↓ 4 Changed 4 years ago by jason

Some of the things at #5572 need to be fixed (like constant functions) before this switch. Right now, fast_float handles things like constant functions, but fast_callable does not.

comment:4 in reply to: ↑ 3 Changed 4 years ago by was

Replying to jason:

Some of the things at #5572 need to be fixed (like constant functions) before this switch. Right now, fast_float handles things like constant functions, but fast_callable does not.

  1. fast_float is just as bad as fast_callable, IMHO, since fast_float fails to handle many things too.
  1. Nobody is working on fast_callable, as far as I know, since Carl Witty is no longer working on Sage.
  1. The specific problem under consideration could nicely by solved with a simple try/except:
    try: 
        fast_float(...)
    except:
        fast_callable(...)
    

Changed 4 years ago by was

comment:5 Changed 4 years ago by was

  • Status changed from new to needs_review

comment:6 Changed 4 years ago by jason

  • Status changed from needs_review to positive_review
  • Reviewers set to Jason Grout
  • Authors set to William Stein

passes doctests, fixes the problem above.

comment:7 Changed 4 years ago by mhansen

  • Status changed from positive_review to closed
  • Resolution set to fixed
  • Merged in set to sage-4.3.rc1

comment:8 Changed 4 years ago by mhansen

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