Final Pynac Switchover Push for Sage-4.0

See also http://trac.sagemath.org/sage_trac/ticket/5930

Latest Pynac spkg

sage -f -m http://sage.math.washington.edu/home/mhansen/pynac-0.1.6-mh.spkg

Note that we do "-f -m" so that spkg/build/pynac-0.1.6-mh is left around. Now you can do

./sage -sh
cd spkg/build/pynac-0.1.6-mh/src/ginac
# change anything
make install

Mike's Repo

On sage.math, do

hg pull -u /scratch/mhansen/sage-3.4.2.alpha0-sage.math-only-x86_64-Linux/devel/sage-symbolics#symbolics_switch

where you can figure out the revision number from "hg log". Maybe tip will work.

And don't forget to do this from SAGE_ROOT:

rm devel/sage/build/*/sage/symbolic/constants*; rm devel/sage/build/sage/symbolic/constants.so

Unpickling of old SymbolicExpressions

For backward compatibility, we need to be able to unpickle the old symbolic objects.

sqrt(2)^2 (Done)

sage: sqrt(x)^2
x
sage: sqrt(2)^2
sqrt(2)^2

wstein@sage:~$ ginsh 
ginsh - GiNaC Interactive Shell (ginac V1.4.1)
...
> sqrt(2)^2;
2

Fix at http://sage.math.washington.edu/home/robertwb/patches/pynac-sqrt.patch

sqrt(16)

sage: sqrt(SR(16))
sqrt(16)
sage: 27^(1/3)
27^(1/3)

$ ginsh
> sqrt(16);
4
> 27 ^ (1/3);
3

Fix at http://sage.math.washington.edu/home/robertwb/patches/pynac-pow.patch however

sage: sqrt(27)
sqrt(27)

refuses to be simplified (despite the code to do so being executed).

Missing parentheses

sage: a = (2/3) ^ (2/3); str(a)
'2/3^(2/3)'
sage: latex(a)
\frac{2}{3}^{\frac{2}{3}}
sage: (-x)^(1/4)
-x^(1/4)

Missing mathematica conversions (done)

All should be capitalized:

sage: (tan(x) + exp(x) + sin(x))._mathematica_init_()
 '(exp[x])+(Sin[x])+(tan[x])'

(seems like something we could do generically).

* Fixed in Mike's branch.

pynac gcd broken

sage: var('n,x')
(n, x)
sage: g= (n+1)/x^n - n/x^n 
sage: g.collect_common_factors() 
/home/wstein/build/sage-3.4.2-symbolics/local/bin/sage-sage: line 198: 29952 Segmentation fault      sage-ipython "$@" -i

Since the change in the definition of gcd of rational numbers in Sage, the gcd in pynac doesn't terminate in some cases. This can crash Sage as above. A quick fix might be to change sage.symbolic.pynac.py_gcd to handle gcd of rationals as before. AFAIK, collect_common_factors() is the only function we expose to the user that calls gcd() in pynac. -- burcin

The above isn't the solution, unfortunately. Putting print statements in py_gcd shows it is never called with rational input for the above example. In fact it isn't even called by the collect_common_factors line. What happens is that there is an infinite recurssion in normal.cpp involving convering something to a polynomial.

Number Fields

Formal Derivatives (done)

Doctest Grunt Work

Massive Speed Regressions

I = sqrt(-1)

Mike:  I think what we want is just a QQ*I ring which automatically goes to SR when you do arithmetic with anything outside of it.
 me:  ok.
You suggested that before, and it makes some sense.
Can't we just make a quadratic number field, and enhance it a tiny spec.
 Mike:  I think if we had that, then everything should work out.
 Sent at 11:31 AM on Thursday
 me:  That sounds easy enough, and it would be super fast, since quadratic fields are very very fast.
 Mike:  We just don't have an exact way to work with complex numbers.
 me:  robertwb could whip it out, as he wrote quadratic fields, etc.
 Mike:  Yep
For RR we have QQ, but we don't have quite an analogue for CC.

Doctest status

As of right now -- May 7 at 11:38 am, doing

results in http://sage.math.washington.edu/home/wstein/build/sage-3.4.2-symbolics/test-all.out

Nearly all of the errors have to do with sqrt, specifically,

sage: sqrt(SR(16))
 sqrt(16)
sage: sqrt(16 + x - x)
 sqrt(16)

and

$ grep "CombinatorialFreeModule instance as first argument" /home/wstein/build/sage-3.4.2-symbolics/test-all.out | wc
    240    4080   34320

The issue is that ginac treats sqrt(x) as having an ambiguous sign, whereas before we choose a branch. The symbolic sqrt(perfect_square) is used all over in the library, so I think we need to allow this. We should not, however, simplify sqrt(x^2).

The following tests failed:

        sage -t  devel/sage/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py # 2 doctests failed
        sage -t  devel/sage/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py # 2 doctests failed
        sage -t  devel/sage/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py # 3 doctests failed
        sage -t  devel/sage/sage/quadratic_forms/special_values.py # 8 doctests failed
        sage -t  devel/sage/sage/misc/parser.pyx # 9 doctests failed
        sage -t  devel/sage/sage/misc/prandom.py # 1 doctests failed
        sage -t  devel/sage/sage/misc/preparser.py # 2 doctests failed
        sage -t  devel/sage/sage/misc/citation.pyx # 1 doctests failed
        sage -t  devel/sage/sage/numerical/optimize.py # 3 doctests failed
        sage -t  devel/sage/sage/misc/functional.py # 8 doctests failed
        sage -t  devel/sage/sage/modules/vector_real_double_dense.pyx # 7 doctests failed
        sage -t  devel/sage/sage/matrix/matrix1.pyx # 0 doctests failed
        sage -t  devel/sage/sage/matrix/tests.py # 1 doctests failed
        sage -t  devel/sage/sage/rings/real_mpfi.pyx # 34 doctests failed
        sage -t  devel/sage/sage/rings/arith.py # 10 doctests failed
        sage -t  devel/sage/sage/databases/database.py # 1 doctests failed
        sage -t  devel/sage/sage/rings/rational_field.py # 4 doctests failed
        sage -t  devel/sage/sage/rings/integer.pyx # 2 doctests failed
        sage -t  devel/sage/sage/rings/complex_double.pyx # 5 doctests failed
        sage -t  devel/sage/sage/rings/complex_number.pyx # 2 doctests failed
        sage -t  devel/sage/sage/matrix/matrix_symbolic_dense.pyx # 19 doctests failed
        sage -t  devel/sage/sage/rings/complex_interval.pyx # 1 doctests failed
        sage -t  devel/sage/sage/rings/infinity.py # Segfault
        sage -t  devel/sage/sage/rings/real_lazy.pyx # 3 doctests failed
        sage -t  devel/sage/sage/rings/power_series_ring.py # 1 doctests failed
        sage -t  devel/sage/sage/rings/complex_interval_field.py # 1 doctests failed
        sage -t  devel/sage/sage/rings/real_double.pyx # 2 doctests failed
        sage -t  devel/sage/sage/rings/rational.pyx # 12 doctests failed
        sage -t  devel/sage/sage/rings/real_mpfr.pyx # 5 doctests failed
        sage -t  devel/sage/sage/rings/number_field/number_field_base.pyx # 8 doctests failed
        sage -t  devel/sage/sage/rings/number_field/number_field_element.pyx # 4 doctests failed
        sage -t  devel/sage/sage/rings/polynomial/polynomial_element.pyx # 3 doctests failed
        sage -t  devel/sage/sage/matrix/matrix2.pyx # 3 doctests failed
        sage -t  devel/sage/sage/structure/element.pyx # 2 doctests failed
        sage -t  devel/sage/sage/structure/parent.pyx # 1 doctests failed
        sage -t  devel/sage/sage/structure/sage_object.pyx # 1 doctests failed
        sage -t  devel/sage/sage/gsl/dft.py # 1 doctests failed
        sage -t  devel/sage/sage/tests/book_stein_ent.py # 8 doctests failed
        sage -t  devel/sage/sage/combinat/species/series.py # 1 doctests failed
        sage -t  devel/sage/sage/calculus/test_sympy.py # 15 doctests failed
        sage -t  devel/sage/sage/calculus/var.pyx # 11 doctests failed
        sage -t  devel/sage/sage/calculus/functions.py # 6 doctests failed
        sage -t  devel/sage/sage/calculus/functional.py # 32 doctests failed
        sage -t  devel/sage/sage/calculus/tests.py # 40 doctests failed
        sage -t  devel/sage/sage/plot/line.py # 2 doctests failed
        sage -t  devel/sage/sage/plot/density_plot.py # 3 doctests failed
        sage -t  devel/sage/sage/plot/complex_plot.pyx # 4 doctests failed
        sage -t  devel/sage/sage/plot/plot_field.py # 1 doctests failed
        sage -t  devel/sage/sage/interfaces/gp.py # 2 doctests failed
        sage -t  devel/sage/sage/plot/contour_plot.py # 11 doctests failed
        sage -t  devel/sage/sage/plot/plot3d/transform.pyx # 1 doctests failed
        sage -t  devel/sage/sage/interfaces/expect.py # 1 doctests failed
        sage -t  devel/sage/sage/interfaces/qepcad.py # 29 doctests failed
        sage -t  devel/sage/sage/calculus/calculus.py # 98 doctests failed
        sage -t  devel/sage/sage/interfaces/maxima.py # 14 doctests failed
        sage -t  devel/sage/sage/algebras/quatalg/quaternion_algebra.py # 1 doctests failed
        sage -t  devel/sage/sage/graphs/graph_list.py # 2 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/lseries_ell.py # 13 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/padic_lseries.py # 101 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/ell_egros.py # 8 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/constructor.py # 8 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/padics.py # 25 doctests failed
        sage -t  devel/sage/sage/schemes/plane_curves/affine_curve.py # 1 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/ell_modular_symbols.py # 66 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/ell_generic.py # 13 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/sha_tate.py # 41 doctests failed
        sage -t  devel/sage/sage/plot/plot3d/parametric_plot3d.py # 4 doctests failed
        sage -t  devel/sage/sage/graphs/graph.py # 3 doctests failed
        sage -t  devel/sage/sage/ext/fast_eval.pyx # 1 doctests failed
        sage -t  devel/sage/sage/coding/code_bounds.py # 2 doctests failed
        sage -t  devel/sage/sage/sets/set.py # 2 doctests failed
        sage -t  devel/sage/sage/functions/hyperbolic.py # 11 doctests failed
        sage -t  devel/sage/sage/functions/other.py # 26 doctests failed
        sage -t  devel/sage/sage/functions/log.py # 13 doctests failed
        sage -t  devel/sage/sage/functions/functions.py # 15 doctests failed
        sage -t  devel/sage/sage/functions/special.py # 12 doctests failed
        sage -t  devel/sage/sage/functions/orthogonal_polys.py # 8 doctests failed
        sage -t  devel/sage/sage/functions/trig.py # 22 doctests failed
        sage -t  devel/sage/sage/symbolic/function.pyx # 4 doctests failed
        sage -t  devel/sage/sage/symbolic/ring.pyx # 8 doctests failed
        sage -t  devel/sage/sage/symbolic/callable.py # 2 doctests failed
        sage -t  devel/sage/sage/symbolic/constants.py # 29 doctests failed
        sage -t  devel/sage/sage/symbolic/expression_conversions.py # 1 doctests failed
        sage -t  devel/sage/sage/ext/fast_callable.pyx # 3 doctests failed
        sage -t  devel/sage/sage/schemes/elliptic_curves/ell_rational_field.py # 34 doctests failed
        sage -t  devel/sage/sage/symbolic/expression.pyx # 136 doctests failed
        sage -t  devel/sage/sage/calculus/desolvers.py # 0 doctests failed
        sage -t  devel/sage/sage/calculus/wester.py # 37 doctests failed
        sage -t  devel/sage/sage/calculus/equations.py # 0 doctests failed
        sage -t  devel/sage/sage/plot/plot.py # 0 doctests failed
        sage -t  devel/sage/sage/functions/piecewise.py # 6 doctests failed
----------------------------------------------------------------------
Total time for all tests: 734.9 seconds