Open robertwb opened 15 years ago
More fast_callable improvements:
domain=float is the same as domain=RDF, but domain=complex is not the same as domain=CDF. Make domain=complex use the same interpreter as domain=CDF
if g is a callable expression, then fast_callable(g) should use g.args() for the variables, not g.variables(). Hmm...or maybe return an error if g.args() is not equal to g.variables(), since every variable really does have to be satisfied.
Both good points. At least g.variables() should be a subset of g.args().
Replying to @jasongrout:
- if g is a callable expression, then fast_callable(g) should use g.args() for the variables, not g.variables(). Hmm...or maybe return an error if g.args() is not equal to g.variables(), since every variable really does have to be satisfied.
Attachment: improve_fast_callable.patch.gz
This is a big patch to fast_callable which
_fast_callable_
methods to make it work on a lot of different constant objects (integers/rationals/RDF/RR/CDF/CC)The patch also breaks some things---it's still a work in progress.
Attachment: fast_callable_complex.patch.gz
apply on top of previous patch
The second patch is a broken attempt at streamlining the complex support since Cython now supports C99 complex numbers.
CCing: robertwb since fast_float was his idea originally
timdumol since he's expressed interest in working on this sort of thing.
The two patches need work at this point. In particular, the improvements patch needs docs added/changed, and ptestlong needs to be run to check for breakage.
The complex number patch needs an overhaul, as I think it's completely broken at this point. The complex number patch is not necessary for resolving the issues on this ticket.
rebase to 4.4.1
Attachment: improve_fast_callable.2.patch.gz
I think it might be best just to fix #7512 in this ticket.
Attachment: improve_fast_callable.3.patch.gz
apply instead of previous patches
Still not done. A clean design still needs to happen for fast_callable on symbolics without specified variables, and the nvars option seems like a hack to make plotting work with lambda functions (since we now match the argument names of lambda functions by default).
Also, something should be done to put fast_float back (and its file) as a convenience method.
apply instead of previous patches (now doctests in plot/*.py[x] pass)
Attachment: improve_fast_callable.4.patch.gz
apply instead of previous patches (now almost all doctests in plot/plot3d/ pass)
Attachment: improve_fast_callable.5.patch.gz
I had to rework some of the transformation code because the returned function often did not have the same keyword arguments as the original function, which throws off plotting.
Attachment: improve_fast_callable.6.patch.gz
apply instead of previous patches (fixed a bunch of stuff so even more doctests pass)
To delete the fast_eval.so file from the build directory (necessary so that the cython fast_eval is eliminated when testing), do:
cd $SAGE_ROOT/devel/sage/build
find . -name fast_eval.so | xargs rm
Progress report: my current patch queue has the following failures on make ptestlong
on Sage 4.5.2:
sage -t -long 4.5.2/devel/sage/sage/structure/sage_object.pyx # 1 doctests failed
sage -t -long 4.5.2/devel/sage/sage/ext/fast_callable.pyx # Exception from doctest framework
sage -t -long 4.5.2/devel/sage/sage/rings/polynomial/polynomial_element.pyx # 9 doctests failed
sage -t -long 4.5.2/devel/sage/sage/stats/hmm/distributions.pyx # 1 doctests failed
(my patch queue is up at http://sage.math.washington.edu/home/jason/sage-4.5.2-patches and this ticket involves patches up to pickling.patch)
Description changed:
---
+++
@@ -14,4 +14,8 @@
* fast_callable of a zero multivariate polynomial returns a zero of the base ring, without paying attention to the types of the arguments
+The work on this ticket:
+* Makes #8450 easy, probably
+* Makes #7512 invalid, probably
+
Description changed:
---
+++
@@ -1,18 +1,26 @@
The code at #5093 is very good and ready to go in, but there are several improvements that have been suggested and agreed work on at a later date. They are posted here so we can merge and close the other ticket.
-Specifically,
+Specifically, this ticket addresses these issues:
-Not fixed:
+* fast_callable on list,tuple,vector,matrix arguments
+
+* fast_callable on constant arguments
+
+* fast_callable of a zero multivariate polynomial returns a zero of the base ring, without paying attention to the types of the arguments
+
+* in general replaces calls to fast_float with calls to fast_callable.
+
+* Carries out the deprecation in #5413 (removes the functionality deprecated there)
+
+Because of some of the far-reaching changes, this should probably not be merged in a point-point release.
+
+What is not fixed:
* Robert's suggestion: an option that uses a fast domain, if it's there, but ignores the domain parameter if it's not (I don't mind the idea, and the implementation is easy; what should the syntax be? Part of my problem picking a syntax is that I don't want to promise that a specialized interpreter is always faster than the Python-object interpreter, so I don't particularly want to use the word "fast" in any option names.)
-* fast_callable on list,tuple,vector,matrix arguments
-* any interaction with #5413 (my plan is to wait until either #5093 or #5413 gets a positive review, then fix the other one to match)
-* fast_callable on constant arguments (waiting for a spec from Jason!)
-* fast_callable of a zero multivariate polynomial returns a zero of the base ring, without paying attention to the types of the arguments
The work on this ticket:
Author: Jason Grout
Description changed:
---
+++
@@ -27,3 +27,7 @@
* Makes #8450 easy, probably
* Makes #7512 invalid, probably
+See also
+* #10087
+* #7165
+
What is the status of switching to fast_callable
? There seem to be a number of tickets which would benefit, not to mention the fact that fast_float
has old-style documentation which looks bad in the command line :) Plus, if fast_float
is to be deprecated (even though it seems to use fast_callable
under the hood) it would be helpful to start that process.
Anyway, just curious.
A long time ago I worked on the patches you see here; I believe that all of my work is here, anyway. I probably won't have time to work on this this summer, due to notebook enhancements. I'd like to make this one of the projects for next summer if someone hasn't beaten me to it by then.
The problem is that I think my patch is too big and needs to be broken down into smaller patches that change less at each step. It's been a long time, but I think I'm remembering that right. Anyways, as noted above, my patch queue is up on sage.math and anyone is welcome to work on it.
Description changed:
---
+++
@@ -30,4 +30,4 @@
See also
* #10087
* #7165
-
+* #11766 -- rewrite some of fast_callable to have its own recursion stack
Can I just create a new patch to switch plotting to use fast_callable
? Using fast_float
causes big problems for plotting, namely that any point at which the function is complex at some value in the call stack fails to plot. For example, the plot of abs(log(x))
will not show up for negative x
, despite the output being guaranteed to be real, since fast_float
will evaluate log(x)
first and choke on the complex number.
Sounds fine to me. Especially if all the doctests pass (including the new one or two that you write :).
Okay, thanks. This is now #15030, with a patch up.
Note that #15030 is now merged. How that does affect whatever else needs to happen here?
Anyone interested in the deprecation of fast_float
can find relevant tickets at https://trac.sagemath.org/wiki/symbolics#fast_floatdeprecation
Without looking in detail I'd guess that implementing https://github.com/pynac/pynac/issues/8 will make ex.subs()
a much faster alternative to fast_callable
.
Description changed:
---
+++
@@ -2,15 +2,18 @@
Specifically, this ticket addresses these issues:
-* fast_callable on list,tuple,vector,matrix arguments
+* `fast_callable` on `list`, `tuple`, `vector`, `matrix` arguments
-* fast_callable on constant arguments
+* `fast_callable` on constant arguments
-* fast_callable of a zero multivariate polynomial returns a zero of the base ring, without paying attention to the types of the arguments
+* `fast_callable` of a zero multivariate polynomial returns a zero of the base ring, without paying attention to the types of the arguments
-* in general replaces calls to fast_float with calls to fast_callable.
+* in general replaces calls to `fast_float` with calls to `fast_callable`.
* Carries out the deprecation in #5413 (removes the functionality deprecated there)
+
+* `fast_float` sometimes returns symbolic values instead of floating-point values (see #17684, which patches `density_plot` to work around this bug)
+
Because of some of the far-reaching changes, this should probably not be merged in a point-point release.
@@ -30,4 +33,4 @@
See also
* #10087
* #7165
-* #11766 -- rewrite some of fast_callable to have its own recursion stack
+* #11766 -- rewrite some of `fast_callable` to have its own recursion stack
The code at #5093 is very good and ready to go in, but there are several improvements that have been suggested and agreed work on at a later date. They are posted here so we can merge and close the other ticket.
Specifically, this ticket addresses these issues:
fast_callable
onlist
,tuple
,vector
,matrix
argumentsfast_callable
on constant argumentsfast_callable
of a zero multivariate polynomial returns a zero of the base ring, without paying attention to the types of the argumentsin general replaces calls to
fast_float
with calls tofast_callable
.Carries out the deprecation in #5413 (removes the functionality deprecated there)
fast_float
sometimes returns symbolic values instead of floating-point values (see #17684, which patchesdensity_plot
to work around this bug)Because of some of the far-reaching changes, this should probably not be merged in a point-point release.
What is not fixed:
The work on this ticket:
See also
10087
7165
11766 -- rewrite some of
fast_callable
to have its own recursion stackCC: @robertwb @TimDumol @eviatarbach @novoselt @orlitzky
Component: basic arithmetic
Author: Jason Grout
Issue created by migration from https://trac.sagemath.org/ticket/5572