summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTravis Scrimshaw <tscrimsh at umn.edu>2015-10-16 13:31:29 -0500
committerTravis Scrimshaw <tscrimsh at umn.edu>2015-10-16 13:31:29 -0500
commit8b851a05c2569a55063539bbc8a19937851f4c93 (patch)
treea7334a2b12dc62d41d7d683926ecbf4e00abdd73
parentFixing doctest failures and letting a few other rings know they are metric sp... (diff)
parentUpdated Sage version to 6.10.beta0 (diff)
Merge branch 'develop' into public/categories/topological_metric_spaces-18175
-rw-r--r--VERSION.txt2
-rw-r--r--build/make/deps6
-rw-r--r--build/pkgs/boehm_gc/dependencies5
-rw-r--r--build/pkgs/boost_cropped/dependencies5
-rw-r--r--build/pkgs/buckygen/dependencies5
-rw-r--r--build/pkgs/cephes/dependencies5
-rw-r--r--build/pkgs/cliquer/dependencies5
-rw-r--r--build/pkgs/combinatorial_designs/dependencies5
-rw-r--r--build/pkgs/compilerwrapper/dependencies5
-rw-r--r--build/pkgs/configure/checksums.ini6
-rw-r--r--build/pkgs/configure/package-version.txt2
-rw-r--r--build/pkgs/cryptominisat/dependencies5
-rw-r--r--build/pkgs/cython/checksums.ini6
-rw-r--r--build/pkgs/cython/package-version.txt2
-rw-r--r--build/pkgs/d3js/dependencies5
-rw-r--r--build/pkgs/database_cremona_ellcurve/dependencies5
-rw-r--r--build/pkgs/database_jones_numfield/dependencies5
-rw-r--r--build/pkgs/database_stein_watkins/dependencies5
-rw-r--r--build/pkgs/database_stein_watkins_mini/dependencies5
-rw-r--r--build/pkgs/database_symbolic_data/dependencies5
-rwxr-xr-xbuild/pkgs/gcc/spkg-install4
-rw-r--r--build/pkgs/graphs/dependencies5
-rw-r--r--build/pkgs/iconv/dependencies5
-rw-r--r--build/pkgs/libogg/dependencies5
-rw-r--r--build/pkgs/lrcalc/dependencies5
-rw-r--r--build/pkgs/nauty/dependencies5
-rw-r--r--build/pkgs/ncurses/dependencies5
-rw-r--r--build/pkgs/networkx/checksums.ini6
-rw-r--r--build/pkgs/networkx/dependencies2
-rw-r--r--build/pkgs/networkx/package-version.txt2
-rwxr-xr-xbuild/pkgs/networkx/spkg-install2
-rw-r--r--build/pkgs/notebook/package-version.txt2
-rw-r--r--build/pkgs/notebook/patches/jupyter_notebook_config.py7
-rwxr-xr-xbuild/pkgs/notebook/spkg-install5
-rw-r--r--build/pkgs/openssl/dependencies5
-rw-r--r--build/pkgs/pari/checksums.ini6
-rw-r--r--build/pkgs/pari/package-version.txt2
-rw-r--r--build/pkgs/pari/patches/KERNELCFLAGS.patch16
-rw-r--r--build/pkgs/pari/patches/README.txt10
-rw-r--r--build/pkgs/pari/patches/det_garbage.patch55
-rw-r--r--build/pkgs/pari/patches/perl_regex.patch200
-rwxr-xr-xbuild/pkgs/pari/spkg-install9
-rw-r--r--build/pkgs/pari_galdata/dependencies5
-rw-r--r--build/pkgs/pari_seadata_small/dependencies5
-rw-r--r--build/pkgs/patch/dependencies5
-rw-r--r--build/pkgs/patchbot/SPKG.txt26
-rw-r--r--build/pkgs/patchbot/checksums.ini4
-rw-r--r--build/pkgs/patchbot/dependencies1
-rw-r--r--build/pkgs/patchbot/package-version.txt1
-rwxr-xr-xbuild/pkgs/patchbot/spkg-install14
-rw-r--r--build/pkgs/patchbot/type1
-rw-r--r--build/pkgs/planarity/dependencies5
-rw-r--r--build/pkgs/plantri/dependencies5
-rw-r--r--build/pkgs/polytopes_db/dependencies5
-rw-r--r--build/pkgs/rubiks/dependencies5
-rw-r--r--build/pkgs/rw/dependencies5
-rw-r--r--build/pkgs/saclib/dependencies5
-rw-r--r--build/pkgs/symmetrica/dependencies5
-rw-r--r--build/pkgs/sympow/dependencies5
-rw-r--r--build/pkgs/termcap/dependencies5
-rw-r--r--build/pkgs/valgrind/dependencies5
-rw-r--r--build/pkgs/zeromq/dependencies5
-rw-r--r--build/pkgs/zlib/dependencies5
-rw-r--r--build/sage_bootstrap/cmdline.py44
-rw-r--r--src/bin/sage-banner2
-rwxr-xr-xsrc/bin/sage-sdist8
-rw-r--r--src/bin/sage-version.sh4
-rw-r--r--src/doc/en/developer/coding_in_python.rst2
-rw-r--r--src/doc/en/reference/algebras/index.rst4
-rw-r--r--src/doc/en/reference/categories/index.rst4
-rw-r--r--src/doc/en/reference/coding/index.rst4
-rw-r--r--src/doc/en/reference/combinat/module_list.rst2
-rw-r--r--src/doc/en/reference/data_structures/index.rst1
-rw-r--r--src/doc/en/reference/graphs/index.rst1
-rw-r--r--src/doc/en/reference/index.rst1
-rw-r--r--src/doc/en/reference/polynomial_rings/polynomial_rings_univar.rst1
-rw-r--r--src/doc/en/reference/rings/asymptotic_expansions_index.rst1
-rw-r--r--src/doc/en/reference/sat/index.rst38
-rw-r--r--src/module_list.py4
-rw-r--r--src/sage/algebras/associated_graded.py341
-rw-r--r--src/sage/algebras/catalog.py2
-rw-r--r--src/sage/algebras/clifford_algebra.py80
-rw-r--r--src/sage/algebras/free_zinbiel_algebra.py253
-rw-r--r--src/sage/algebras/weyl_algebra.py47
-rw-r--r--src/sage/all.py1
-rw-r--r--src/sage/categories/algebras.py2
-rw-r--r--src/sage/categories/algebras_with_basis.py2
-rw-r--r--src/sage/categories/bialgebras.py5
-rw-r--r--src/sage/categories/cartesian_product.py38
-rw-r--r--src/sage/categories/category_with_axiom.py2
-rw-r--r--src/sage/categories/coalgebras.py39
-rw-r--r--src/sage/categories/coalgebras_with_basis.py3
-rw-r--r--src/sage/categories/covariant_functorial_construction.py4
-rw-r--r--src/sage/categories/examples/filtered_algebras_with_basis.py178
-rw-r--r--src/sage/categories/examples/filtered_modules_with_basis.py151
-rw-r--r--src/sage/categories/examples/graded_modules_with_basis.py5
-rw-r--r--src/sage/categories/filtered_algebras.py62
-rw-r--r--src/sage/categories/filtered_algebras_with_basis.py541
-rw-r--r--src/sage/categories/filtered_modules.py161
-rw-r--r--src/sage/categories/filtered_modules_with_basis.py928
-rw-r--r--src/sage/categories/finite_posets.py16
-rw-r--r--src/sage/categories/graded_algebras.py19
-rw-r--r--src/sage/categories/graded_algebras_with_basis.py137
-rw-r--r--src/sage/categories/graded_modules.py119
-rw-r--r--src/sage/categories/graded_modules_with_basis.py164
-rw-r--r--src/sage/categories/groups.py1
-rw-r--r--src/sage/categories/hopf_algebras.py3
-rw-r--r--src/sage/categories/hopf_algebras_with_basis.py1
-rw-r--r--src/sage/categories/modules.py137
-rw-r--r--src/sage/categories/modules_with_basis.py9
-rw-r--r--src/sage/categories/monoids.py3
-rw-r--r--src/sage/categories/posets.py3
-rw-r--r--src/sage/categories/pushout.py426
-rw-r--r--src/sage/categories/sets_cat.py57
-rw-r--r--src/sage/categories/super_algebras.py67
-rw-r--r--src/sage/categories/super_algebras_with_basis.py61
-rw-r--r--src/sage/categories/super_hopf_algebras_with_basis.py30
-rw-r--r--src/sage/categories/super_modules.py229
-rw-r--r--src/sage/categories/super_modules_with_basis.py185
-rw-r--r--src/sage/categories/unique_factorization_domains.py81
-rw-r--r--src/sage/coding/all.py15
-rw-r--r--src/sage/coding/codes_catalog.py9
-rw-r--r--src/sage/coding/encoder.py325
-rw-r--r--src/sage/coding/encoders_catalog.py16
-rw-r--r--src/sage/coding/linear_code.py415
-rw-r--r--src/sage/combinat/all.py2
-rw-r--r--src/sage/combinat/alternating_sign_matrix.py19
-rw-r--r--src/sage/combinat/cluster_algebra_quiver/cluster_seed.py160
-rw-r--r--src/sage/combinat/colored_permutations.py1097
-rw-r--r--src/sage/combinat/combinat.py45
-rw-r--r--src/sage/combinat/designs/block_design.py23
-rw-r--r--src/sage/combinat/designs/incidence_structures.py97
-rw-r--r--src/sage/combinat/diagram_algebras.py166
-rw-r--r--src/sage/combinat/integer_list.py10
-rw-r--r--src/sage/combinat/kazhdan_lusztig.py2
-rw-r--r--src/sage/combinat/ncsf_qsym/generic_basis_code.py5
-rw-r--r--src/sage/combinat/partition.py522
-rw-r--r--src/sage/combinat/perfect_matching.py29
-rw-r--r--src/sage/combinat/posets/__init__.py2
-rw-r--r--src/sage/combinat/posets/cartesian_product.py505
-rw-r--r--src/sage/combinat/posets/elements.py11
-rw-r--r--src/sage/combinat/posets/posets.py216
-rw-r--r--src/sage/combinat/rigged_configurations/kleber_tree.py56
-rw-r--r--src/sage/combinat/rigged_configurations/kr_tableaux.py14
-rw-r--r--src/sage/combinat/rigged_configurations/rigged_configuration_element.py119
-rw-r--r--src/sage/combinat/rigged_configurations/rigged_configurations.py22
-rw-r--r--src/sage/combinat/root_system/integrable_representations.py200
-rw-r--r--src/sage/combinat/similarity_class_type.py43
-rw-r--r--src/sage/combinat/skew_tableau.py109
-rw-r--r--src/sage/combinat/tableau.py2
-rw-r--r--src/sage/combinat/words/word_char.pyx174
-rw-r--r--src/sage/data_structures/mutable_poset.py3523
-rw-r--r--src/sage/databases/findstat.py13
-rw-r--r--src/sage/dynamics/interval_exchanges/template.py47
-rw-r--r--src/sage/functions/log.py44
-rw-r--r--src/sage/geometry/cone.py252
-rw-r--r--src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py4
-rw-r--r--src/sage/geometry/hyperplane_arrangement/arrangement.py112
-rw-r--r--src/sage/geometry/lattice_polytope.py19
-rw-r--r--src/sage/geometry/linear_expression.py17
-rw-r--r--src/sage/geometry/polyhedron/base.py30
-rw-r--r--src/sage/geometry/polyhedron/double_description.py2
-rw-r--r--src/sage/geometry/polyhedron/double_description_inhomogeneous.py4
-rw-r--r--src/sage/geometry/polyhedron/lattice_euclidean_group_element.py2
-rw-r--r--src/sage/geometry/polyhedron/palp_database.py10
-rw-r--r--src/sage/geometry/polyhedron/ppl_lattice_polytope.py17
-rw-r--r--src/sage/geometry/polyhedron/representation.py4
-rw-r--r--src/sage/graphs/asteroidal_triples.pyx2
-rw-r--r--src/sage/graphs/base/dense_graph.pyx148
-rw-r--r--src/sage/graphs/digraph.py170
-rw-r--r--src/sage/graphs/generators/classical_geometries.py183
-rw-r--r--src/sage/graphs/generators/families.py2
-rw-r--r--src/sage/graphs/generic_graph.py29
-rw-r--r--src/sage/graphs/graph.py568
-rw-r--r--src/sage/graphs/graph_generators.py4
-rw-r--r--src/sage/graphs/graph_input.py527
-rw-r--r--src/sage/graphs/hyperbolicity.pyx2
-rw-r--r--src/sage/graphs/hypergraph_generators.py19
-rw-r--r--src/sage/graphs/independent_sets.pyx2
-rw-r--r--src/sage/graphs/schnyder.py145
-rw-r--r--src/sage/graphs/strongly_regular_db.pyx314
-rw-r--r--src/sage/groups/abelian_gps/abelian_group_element.py1
-rw-r--r--src/sage/groups/abelian_gps/element_base.py10
-rw-r--r--src/sage/groups/additive_abelian/additive_abelian_group.py4
-rw-r--r--src/sage/groups/conjugacy_classes.py2
-rw-r--r--src/sage/groups/finitely_presented_named.py6
-rw-r--r--src/sage/groups/free_group.py11
-rw-r--r--src/sage/groups/matrix_gps/group_element.py13
-rw-r--r--src/sage/homology/simplicial_complex.py2
-rw-r--r--src/sage/interfaces/chomp.py8
-rw-r--r--src/sage/interfaces/octave.py262
-rw-r--r--src/sage/interfaces/sage0.py16
-rw-r--r--src/sage/libs/pari/paridecl.pxd101
-rw-r--r--src/sage/libs/singular/groebner_strategy.pyx4
-rw-r--r--src/sage/matrix/matrix_mod2_dense.pyx12
-rw-r--r--src/sage/matrix/operation_table.py22
-rw-r--r--src/sage/matroids/lean_matrix.pyx16
-rw-r--r--src/sage/matroids/matroid.pyx12
-rw-r--r--src/sage/misc/c3_controlled.pyx4
-rw-r--r--src/sage/misc/cython.py18
-rw-r--r--src/sage/misc/mrange.py107
-rw-r--r--src/sage/misc/rest_index_of_methods.py181
-rw-r--r--src/sage/misc/superseded.py38
-rw-r--r--src/sage/modular/modform_hecketriangle/abstract_ring.py4
-rw-r--r--src/sage/modular/overconvergent/weightspace.py14
-rw-r--r--src/sage/modules/fg_pid/fgp_element.py33
-rw-r--r--src/sage/modules/free_module_element.pyx15
-rw-r--r--src/sage/monoids/free_monoid_element.py17
-rw-r--r--src/sage/monoids/indexed_free_monoid.py27
-rw-r--r--src/sage/plot/arc.py253
-rw-r--r--src/sage/plot/hyperbolic_arc.py12
-rw-r--r--src/sage/plot/hyperbolic_polygon.py14
-rw-r--r--src/sage/repl/display/fancy_repr.py25
-rw-r--r--src/sage/repl/ipython_kernel/install.py20
-rw-r--r--src/sage/rings/all.py3
-rw-r--r--src/sage/rings/asymptotic/all.py1
-rw-r--r--src/sage/rings/asymptotic/asymptotic_ring.py1613
-rw-r--r--src/sage/rings/asymptotic/growth_group.py96
-rw-r--r--src/sage/rings/asymptotic/term_monoid.py213
-rw-r--r--src/sage/rings/cfinite_sequence.py12
-rw-r--r--src/sage/rings/complex_ball_acb.pyx143
-rw-r--r--src/sage/rings/complex_double.pyx20
-rw-r--r--src/sage/rings/complex_interval.pyx50
-rw-r--r--src/sage/rings/complex_interval_field.py9
-rw-r--r--src/sage/rings/complex_number.pyx8
-rw-r--r--src/sage/rings/finite_rings/element_givaro.pyx13
-rw-r--r--src/sage/rings/finite_rings/element_ntl_gf2e.pyx22
-rw-r--r--src/sage/rings/finite_rings/element_pari_ffelt.pyx56
-rw-r--r--src/sage/rings/finite_rings/hom_finite_field.pyx11
-rw-r--r--src/sage/rings/finite_rings/integer_mod.pyx12
-rw-r--r--src/sage/rings/laurent_series_ring_element.pyx3
-rw-r--r--src/sage/rings/morphism.pyx51
-rw-r--r--src/sage/rings/number_field/number_field_element.pyx5
-rw-r--r--src/sage/rings/number_field/number_field_element_quadratic.pyx21
-rw-r--r--src/sage/rings/polynomial/complex_roots.py129
-rw-r--r--src/sage/rings/polynomial/infinite_polynomial_element.py7
-rw-r--r--src/sage/rings/polynomial/laurent_polynomial.pyx34
-rw-r--r--src/sage/rings/polynomial/multi_polynomial_ideal.py51
-rw-r--r--src/sage/rings/polynomial/plural.pyx17
-rw-r--r--src/sage/rings/polynomial/polynomial_element.pyx103
-rw-r--r--src/sage/rings/polynomial/polynomial_element_generic.py68
-rw-r--r--src/sage/rings/polynomial/polynomial_real_mpfr_dense.pyx25
-rw-r--r--src/sage/rings/polynomial/refine_root.pyx141
-rw-r--r--src/sage/rings/power_series_poly.pyx18
-rw-r--r--src/sage/rings/power_series_ring_element.pyx28
-rw-r--r--src/sage/rings/qqbar.py26
-rw-r--r--src/sage/rings/rational.pyx7
-rw-r--r--src/sage/rings/real_arb.pyx341
-rw-r--r--src/sage/rings/real_lazy.pyx91
-rw-r--r--src/sage/rings/real_mpfi.pxd6
-rw-r--r--src/sage/rings/real_mpfi.pyx115
-rw-r--r--src/sage/sandpiles/sandpile.py70
-rw-r--r--src/sage/sat/all.py2
-rw-r--r--src/sage/sat/converters/polybori.py2
-rw-r--r--src/sage/sat/solvers/sat_lp.py145
-rw-r--r--src/sage/sat/solvers/satsolver.pyx60
-rw-r--r--src/sage/sets/cartesian_product.py60
-rw-r--r--src/sage/structure/element.pyx22
-rw-r--r--src/sage/symbolic/ring.pyx16
-rw-r--r--src/sage/tensor/coordinate_patch.py12
-rw-r--r--src/sage/tensor/differential_form_element.py13
-rw-r--r--src/sage/tensor/differential_forms.py4
-rw-r--r--src/sage/version.py4
-rw-r--r--src/sage_setup/autogen/pari/parser.py2
264 files changed, 18090 insertions, 3113 deletions
diff --git a/VERSION.txt b/VERSION.txt
index 2090599..9d90d56 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-Sage version 6.9.rc0, released 2015-09-25
+Sage version 6.10.beta0, released 2015-10-15
diff --git a/build/make/deps b/build/make/deps
index c9becf0..3d0fb93 100644
--- a/build/make/deps
+++ b/build/make/deps
@@ -44,6 +44,12 @@ all-sage: \
$(EXTCODE) \
$(SCRIPTS)
+# Download all packages which should be inside an sdist tarball (the -B
+# option to make forces all targets to be built unconditionally)
+download-for-sdist: base
+ env SAGE_INSTALL_FETCH_ONLY=yes $(MAKE) -B SAGERUNTIME= \
+ $(STANDARD_PACKAGES) gcc mpir python2
+
# TOOLCHAIN consists of dependencies determined by build/make/install,
# including for example the GCC package.
toolchain: $(TOOLCHAIN)
diff --git a/build/pkgs/boehm_gc/dependencies b/build/pkgs/boehm_gc/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/boehm_gc/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/boost_cropped/dependencies b/build/pkgs/boost_cropped/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/boost_cropped/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/buckygen/dependencies b/build/pkgs/buckygen/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/buckygen/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/cephes/dependencies b/build/pkgs/cephes/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/cephes/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/cliquer/dependencies b/build/pkgs/cliquer/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/cliquer/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/combinatorial_designs/dependencies b/build/pkgs/combinatorial_designs/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/combinatorial_designs/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/compilerwrapper/dependencies b/build/pkgs/compilerwrapper/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/compilerwrapper/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/configure/checksums.ini b/build/pkgs/configure/checksums.ini
index cf5c6b5..0c17054 100644
--- a/build/pkgs/configure/checksums.ini
+++ b/build/pkgs/configure/checksums.ini
@@ -1,4 +1,4 @@
tarball=configure-VERSION.tar.gz
-sha1=8cfd9c770b0b2b6740da8861b8e5fb55be6a1961
-md5=e24e7847a5df019a174b8a8f4d1928dd
-cksum=1203608624
+sha1=3e0d10789b34d6f890e1575c2a06894a90e4807e
+md5=020a9b7f31e61b57056969b6816455f1
+cksum=2662451870
diff --git a/build/pkgs/configure/package-version.txt b/build/pkgs/configure/package-version.txt
index ee977b5..52bd8e4 100644
--- a/build/pkgs/configure/package-version.txt
+++ b/build/pkgs/configure/package-version.txt
@@ -1 +1 @@
-115
+120
diff --git a/build/pkgs/cryptominisat/dependencies b/build/pkgs/cryptominisat/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/cryptominisat/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/cython/checksums.ini b/build/pkgs/cython/checksums.ini
index 9589980..f3ac441 100644
--- a/build/pkgs/cython/checksums.ini
+++ b/build/pkgs/cython/checksums.ini
@@ -1,4 +1,4 @@
tarball=Cython-VERSION.tar.gz
-sha1=2ff0f863d3b996d2265d0bf06e567e5dd23d004d
-md5=db3c5b365e1c3f71c7cd90e96473a3ab
-cksum=1672168057
+sha1=d5592dc3d529c55a5ef95346caccf11c556993bd
+md5=813df20f7ce5f00e60568e0371fbd07c
+cksum=365027876
diff --git a/build/pkgs/cython/package-version.txt b/build/pkgs/cython/package-version.txt
index e13359b..9e40e75 100644
--- a/build/pkgs/cython/package-version.txt
+++ b/build/pkgs/cython/package-version.txt
@@ -1 +1 @@
-0.23.1.p0
+0.23.3
diff --git a/build/pkgs/d3js/dependencies b/build/pkgs/d3js/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/d3js/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/database_cremona_ellcurve/dependencies b/build/pkgs/database_cremona_ellcurve/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/database_cremona_ellcurve/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/database_jones_numfield/dependencies b/build/pkgs/database_jones_numfield/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/database_jones_numfield/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/database_stein_watkins/dependencies b/build/pkgs/database_stein_watkins/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/database_stein_watkins/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/database_stein_watkins_mini/dependencies b/build/pkgs/database_stein_watkins_mini/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/database_stein_watkins_mini/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/database_symbolic_data/dependencies b/build/pkgs/database_symbolic_data/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/database_symbolic_data/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/gcc/spkg-install b/build/pkgs/gcc/spkg-install
index a934113..f9c7fe6 100755
--- a/build/pkgs/gcc/spkg-install
+++ b/build/pkgs/gcc/spkg-install
@@ -137,3 +137,7 @@ $MAKE install
# Force re-installation of mpir, mpfr and mpc with the GCC we just built.
cd "$SAGE_SPKG_INST"
rm -f mpir-* mpfr-* mpc-*
+
+# Force re-configuration: the next time that "make" is run, we don't
+# want GCC to be built again, see Trac #19324
+touch "$SAGE_ROOT/configure"
diff --git a/build/pkgs/graphs/dependencies b/build/pkgs/graphs/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/graphs/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/iconv/dependencies b/build/pkgs/iconv/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/iconv/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/libogg/dependencies b/build/pkgs/libogg/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/libogg/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/lrcalc/dependencies b/build/pkgs/lrcalc/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/lrcalc/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/nauty/dependencies b/build/pkgs/nauty/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/nauty/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/ncurses/dependencies b/build/pkgs/ncurses/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/ncurses/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/networkx/checksums.ini b/build/pkgs/networkx/checksums.ini
index 50122f0..9aaf119 100644
--- a/build/pkgs/networkx/checksums.ini
+++ b/build/pkgs/networkx/checksums.ini
@@ -1,4 +1,4 @@
tarball=networkx-VERSION.tar.gz
-sha1=d6c1524724d3e47f7621bb2072863463924bfb99
-md5=b4a9e68ecd1b0164446ee432d2e20bd0
-cksum=3256827710
+sha1=99292e464c25be5e96de295752880bf5e5f1848a
+md5=eb7a065e37250a4cc009919dacfe7a9d
+cksum=2520536431
diff --git a/build/pkgs/networkx/dependencies b/build/pkgs/networkx/dependencies
index edf2711..d4db0ff 100644
--- a/build/pkgs/networkx/dependencies
+++ b/build/pkgs/networkx/dependencies
@@ -1,4 +1,4 @@
-$(INST)/$(PYTHON)
+$(INST)/$(PYTHON) $(INST)/$(DECORATOR)
----------
All lines of this file are ignored except the first.
diff --git a/build/pkgs/networkx/package-version.txt b/build/pkgs/networkx/package-version.txt
index a8fdfda..c044b1a 100644
--- a/build/pkgs/networkx/package-version.txt
+++ b/build/pkgs/networkx/package-version.txt
@@ -1 +1 @@
-1.8.1
+1.10
diff --git a/build/pkgs/networkx/spkg-install b/build/pkgs/networkx/spkg-install
index 6769f79..5cd75ee 100755
--- a/build/pkgs/networkx/spkg-install
+++ b/build/pkgs/networkx/spkg-install
@@ -15,4 +15,4 @@ rm -rf "$SAGE_LOCAL"/spkg/network*
cd src
-python setup.py install --home="$SAGE_LOCAL" --force
+python setup.py install
diff --git a/build/pkgs/notebook/package-version.txt b/build/pkgs/notebook/package-version.txt
index c5106e6..61d8a2a 100644
--- a/build/pkgs/notebook/package-version.txt
+++ b/build/pkgs/notebook/package-version.txt
@@ -1 +1 @@
-4.0.4
+4.0.4.p1
diff --git a/build/pkgs/notebook/patches/jupyter_notebook_config.py b/build/pkgs/notebook/patches/jupyter_notebook_config.py
new file mode 100644
index 0000000..3bf63a1
--- /dev/null
+++ b/build/pkgs/notebook/patches/jupyter_notebook_config.py
@@ -0,0 +1,7 @@
+# Configuration file for Sage's builtin Jupyter notebook server
+
+# Note for distributors: Sage uses mathjax, so the notebook server
+# needs to have the mathjax_url set to wherever your distribution
+# installs mathjax.
+
+c.NotebookApp.mathjax_url = '../nbextensions/mathjax/MathJax.js'
diff --git a/build/pkgs/notebook/spkg-install b/build/pkgs/notebook/spkg-install
index afb3f30..10759a4 100755
--- a/build/pkgs/notebook/spkg-install
+++ b/build/pkgs/notebook/spkg-install
@@ -1,3 +1,8 @@
#!/usr/bin/env bash
cd src && python setup.py install
+
+# Install the Jupyter notebook configuration
+ETC_JUPYTER="$SAGE_ETC"/jupyter
+mkdir -p "$ETC_JUPYTER"
+cp ../patches/jupyter_notebook_config.py "$ETC_JUPYTER"/
diff --git a/build/pkgs/openssl/dependencies b/build/pkgs/openssl/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/openssl/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/pari/checksums.ini b/build/pkgs/pari/checksums.ini
index 8870cbb..c62c530 100644
--- a/build/pkgs/pari/checksums.ini
+++ b/build/pkgs/pari/checksums.ini
@@ -1,4 +1,4 @@
tarball=pari-VERSION.tar.gz
-sha1=307409c3917f6df71d2e10640c119e7d31c1f2e6
-md5=41936ce2dce6bd00a662bf43a772685f
-cksum=855809013
+sha1=fa23e0c8b6e38a356048d19224dc9b9658d77724
+md5=c753faaa4780de5ad8d461f0ffd70ecf
+cksum=1220765312
diff --git a/build/pkgs/pari/package-version.txt b/build/pkgs/pari/package-version.txt
index 8db184f..2b25bd1 100644
--- a/build/pkgs/pari/package-version.txt
+++ b/build/pkgs/pari/package-version.txt
@@ -1 +1 @@
-2.8-1637-g489005a.p1
+2.8-1813-g6157df4.p0
diff --git a/build/pkgs/pari/patches/KERNELCFLAGS.patch b/build/pkgs/pari/patches/KERNELCFLAGS.patch
deleted file mode 100644
index 537dbb5..0000000
--- a/build/pkgs/pari/patches/KERNELCFLAGS.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -ru src/config/get_cc b/config/get_cc
---- src/config/get_cc 2014-02-01 21:41:54.534348273 +0100
-+++ b/config/get_cc 2014-02-01 21:42:50.850930971 +0100
-@@ -94,7 +94,11 @@
- OPTFLAGS="$OPTFLAGS -fno-strict-aliasing"
- fi
- rm -f $exe $exe$exe_suff
-- KERNELCFLAGS=-funroll-loops
-+ if [ "$SAGE_DEBUG" = yes ]; then
-+ KERNELCFLAGS=-O1
-+ else
-+ KERNELCFLAGS=-funroll-loops
-+ fi
-
- DBGFLAGS=${DBGFLAGS:-"-g $warn"}
- # Specific optimisations for some architectures
diff --git a/build/pkgs/pari/patches/README.txt b/build/pkgs/pari/patches/README.txt
index 93ac577..d9aef73 100644
--- a/build/pkgs/pari/patches/README.txt
+++ b/build/pkgs/pari/patches/README.txt
@@ -11,17 +11,7 @@ Patches to configuration files:
Darwin. Submitted upstream, but upstream only applied it for PowerPC.
Since this doesn't break anything and only improves performance, add
the flag unconditionally.
-* KERNELCFLAGS.patch (Jeroen Demeyer): when SAGE_DEBUG=yes, compile
- kernel files with -O1 instead of -funroll-loops; -O0 gives a
- segmentation fault on some OS X systems when doing
- factor(10356613*10694706299664611221)
- See #13921, also reported upstream:
- - http://pari.math.u-bordeaux.fr/archives/pari-dev-1301/msg00000.html
C files:
-* det_garbage.patch (Jeroen Demeyer, #15654): When computing a
- determinant(), only collect garbage once per outer loop iteration.
- Better increase PARI stack size instead of collecting garbage too
- often.
* public_memory_functions.patch (Jeroen Demeyer, #16997): Make some of
PARI's private memory functions public to improve interface with Sage.
diff --git a/build/pkgs/pari/patches/det_garbage.patch b/build/pkgs/pari/patches/det_garbage.patch
deleted file mode 100644
index ab7af66..0000000
--- a/build/pkgs/pari/patches/det_garbage.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-diff --git a/src/basemath/alglin1.c b/src/basemath/alglin1.c
-index cada9eb..515eba9 100644
---- a/src/basemath/alglin1.c
-+++ b/src/basemath/alglin1.c
-@@ -248,6 +248,7 @@ gen_det(GEN a, void *E, const struct bb_field *ff)
- a = RgM_shallowcopy(a);
- for (i=1; i<nbco; i++)
- {
-+ int garbage = 0; /* Only gerepile() once per loop iteration */
- for(k=i; k<=nbco; k++)
- {
- gcoeff(a,k,i) = ff->red(E,gcoeff(a,k,i));
-@@ -272,7 +273,7 @@ gen_det(GEN a, void *E, const struct bb_field *ff)
- for (j=i+1; j<=nbco; j++)
- {
- gcoeff(a,j,k) = ff->add(E, gcoeff(a,j,k), ff->mul(E,m,gcoeff(a,j,i)));
-- if (gc_needed(av,1))
-+ if (gc_needed(av,1) && (garbage++ == 0))
- {
- if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i);
- gerepileall(av,4, &a,&x,&q,&m);
-@@ -3722,6 +3723,7 @@ det_simple_gauss(GEN a, GEN data, pivot_fun pivot)
- a = RgM_shallowcopy(a);
- for (i=1; i<nbco; i++)
- {
-+ int garbage = 0; /* Only gerepile() once per loop iteration */
- k = pivot(a, data, i, NULL);
- if (k > nbco) return gerepilecopy(av, gcoeff(a,i,i));
- if (k != i)
-@@ -3741,7 +3743,7 @@ det_simple_gauss(GEN a, GEN data, pivot_fun pivot)
- for (j=i+1; j<=nbco; j++)
- {
- gcoeff(a,j,k) = gsub(gcoeff(a,j,k), gmul(m,gcoeff(a,j,i)));
-- if (gc_needed(av,3))
-+ if (gc_needed(av,3) && (garbage++ == 0))
- {
- if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i);
- gerepileall(av,2, &a,&x);
-@@ -3792,6 +3794,7 @@ det_bareiss(GEN a)
- {
- GEN ci, ck, m;
- int diveuc = (gequal1(pprec)==0);
-+ int garbage = 0; /* Only gerepile() once per loop iteration */
-
- p = gcoeff(a,i,i);
- if (gequal0(p))
-@@ -3828,7 +3831,7 @@ det_bareiss(GEN a)
- GEN p1 = gsub(gmul(p,gel(ck,j)), gmul(m,gel(ci,j)));
- if (diveuc) p1 = mydiv(p1,pprec);
- gel(ck,j) = gerepileupto(av2, p1);
-- if (gc_needed(av,2))
-+ if (gc_needed(av,2) && (garbage++ == 0))
- {
- if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i);
- gerepileall(av,2, &a,&pprec);
diff --git a/build/pkgs/pari/patches/perl_regex.patch b/build/pkgs/pari/patches/perl_regex.patch
deleted file mode 100644
index 038f4d6..0000000
--- a/build/pkgs/pari/patches/perl_regex.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-commit 257750686ae1fe928a2b4b489844c1b57a108bd3
-Author: Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr>
-Date: Tue Jul 14 15:23:42 2015 +0200
-
- doc_make: escape all {} in regexps [ perl-5.22 warns on these => fatal
-
-diff --git a/src/desc/doc_make b/src/desc/doc_make
-index bb41bc9..8521a9d 100755
---- a/src/desc/doc_make
-+++ b/src/desc/doc_make
-@@ -38,13 +38,13 @@ while (<FILE>)
- $v =~ s/\[\]/[\\,]/g;
- $v =~ s/(\w\w+)/\\var{$1}/g;
- $v =~ s/\^([a-z])/\\hbox{\\kbd{\\pow}}$1/g;
-- $v =~ s/\\var{flag}/\\fl/g;
-- $v =~ s/\\var{(\d+)}/{$1}/g;
-+ $v =~ s/\\var\{flag\}/\\fl/g;
-+ $v =~ s/\\var\{(\d+)\}/{$1}/g;
- $v =~ s/_/\\_/g; # don't merge with first subst: \var{} rule kills it
-
- $v = "\$($v)\$";
- }
-- if ($doc !~ /\\syn\w*{/ && $sec !~ /programming\/control/) {
-+ if ($doc !~ /\\syn\w*\{/ && $sec !~ /programming\/control/) {
- $doc .= library_syntax($fun, $args);
- }
- s/_def_//;
-commit 742c70e505a7e75128720f619d63e882c03e9346
-Author: Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr>
-Date: Tue Jul 14 13:20:07 2015 +0200
-
- gphelp: escape all {} in regexps [ perl-5.22 warns on these => fatal ]
-
-diff --git a/doc/gphelp.in b/doc/gphelp.in
-index 00ff6bd..89f2768 100755
---- a/doc/gphelp.in
-+++ b/doc/gphelp.in
-@@ -298,7 +298,7 @@ sub treat {
- if ($pat =~ /[a-zA-Z0-9]$/) { $pat .= '\b'; } else { $pat .= '}'; }
- while (<DOC>)
- {
-- if (/\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter|label){$pat/)
-+ if (/\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter|label)\{$pat/)
- { $first = $_; last; }
- }
- if (eof(DOC))
-@@ -380,7 +380,7 @@ sub apropos_check {
- return if ($line !~ /$help/i);
-
- local($_) = $current;
-- s/\\b{(.)}/\\$1/;
-+ s/\\b\{(.)\}/\\$1/;
- s/\{\}//g;
- s/\\pow/^/;
- s/\\%/%/;
-@@ -400,7 +400,7 @@ sub apropos {
- @sentence_list = @list = "";
- while (<DOC>)
- {
-- if (/^\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter){/)
-+ if (/^\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter)\{/)
- {
- $new = &get_match($_,'{','}');
- &apropos_check($line, $current);
-@@ -748,7 +748,7 @@ sub basic_subst {
- s/\\fun\s*\{([^{}]*)\}\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*\{((?:[^{}]|\{[^{}]*\})*)\}/\\kbd{$1 \\key{$2}($3)}\\sidx{$2}/g;
-
- s/\\\\(?=[a-zA-Z])/\\bs /g;
-- s/\\b{}\\b{}/\\bs\\bs /g;
-+ s/\\b\{\}\\b\{\}/\\bs\\bs /g;
- s/\\\\/\\bs/g;
- s/(\'\'|\`\`)/"/g unless $to_pod; # (english) double quotes
- # asymptotic or isomorphic (~) [beware of ties]
-@@ -760,16 +760,16 @@ sub basic_subst {
- s/\\(~|tilde)/~/g;
-
- s/\\(equiv)(?![a-zA-Z])/ = /g;
-- s/\\`a/$tr{agrave}/; s/\\`{a}/$tr{agrave}/;
-- s/\\"o/$tr{ouml}/; s/\\"{o}/$tr{ouml}/;
-- s/\\"u/$tr{uuml}/; s/\\"{u}/$tr{uuml}/;
-- s/\\'e/$tr{eacute}/; s/\\'{e}/$tr{eacute}/;
-+ s/\\`a/$tr{agrave}/; s/\\`\{a\}/$tr{agrave}/;
-+ s/\\"o/$tr{ouml}/; s/\\"\{o\}/$tr{ouml}/;
-+ s/\\"u/$tr{uuml}/; s/\\"\{u\}/$tr{uuml}/;
-+ s/\\'e/$tr{eacute}/; s/\\'\{e\}/$tr{eacute}/;
-
- s/(^|[^\\])%.*/$1/g; # comments
- s/\\vadjust\s*\{\s*\\penalty\s*\d+\s*\}//g;
-
- # We do not strip %\n, thus:
-- s/\\kbd{\n\s*/\\kbd{/g;
-+ s/\\kbd\{\n\s*/\\kbd{/g;
- s/\$\\bf(\b|(?=[\d_]))\s*([^\$]+)\$/\$$tr{startbcode}$1$tr{endbcode}\$/g;
- s/\$/$tr{dollar}/g; # math mode
- s/\t/ /g; s/\\,//g; s/\\[ ;]/ /g; # various spaces
-@@ -779,7 +779,7 @@ sub basic_subst {
- s/\\TeX\{\}/TeX/g;
- s/\\TeX(\W)/TeX$1/g;
- s/ *\\circ\b */ o /g;
-- s/\\d?frac{\s*((?:[^{}]|\{[^{}]*\})*)}{\s*((?:[^{}]|\{[^{}]*\})*)}/($1)\/($2)/g;
-+ s/\\d?frac\{\s*((?:[^{}]|\{[^{}]*\})*)\}\{\s*((?:[^{}]|\{[^{}]*\})*)\}/($1)\/($2)/g;
- s(\\d?frac\s*(\d)\s*(\d))(($1/$2))g;
- s[{\s*(\w)\s*\\over(?![a-zA-Z])\s*(\w)\s*}]{($1/$2)}g;
- s[{\s*((?:[^{}]|\{[^{}]*\})*)\\over(?![a-zA-Z])\s*((?:[^{}]|\{[^{}]*\})*)}][($1)/($2)]g;
-@@ -796,7 +796,7 @@ sub basic_subst {
-
- s/(\\string)?\\_/_/g;
- s/\\([#\$&%|])/$1/g;
-- s/\\(hat(?![a-zA-Z])|\^)({\\?\s*})?/^/g;
-+ s/\\(hat(?![a-zA-Z])|\^)(\{\\?\s*\})?/^/g;
- s/^(\@\[podleader\]head\d *)\\pow(?![a-zA-z])( *)/$1^$2/gm;
- s/ *\\pow(?![a-zA-z]) */^/g;
-
-@@ -896,21 +896,21 @@ sub basic_subst {
- s/\\(floor|ceil|round|binom)\{/$1\{/g;
- s/\\(var|emph)\{([^\}]*)\}/$tr{startit}$2$tr{endit}/g;
- s/\\fl(?![a-zA-Z])/$tr{startit}flag$tr{endit}/g;
-- s/\\b{([^}]*)}/$tr{startcode}\\$1$tr{endcode}/g;
-+ s/\\b\{([^}]*)\}/$tr{startcode}\\$1$tr{endcode}/g;
- s/\\kbdsidx/\\sidx/g;
- s/\\sidx\{[^\}]*\}//g unless $to_pod;
- s/\\[a-zA-Z]*idx\{([^\}]*)\}/$1/g unless $to_pod;
-- s/{\\text{(st|nd|th)}}/\\text{$1}/g;
-- s/\^\\text{th}/-th/g;
-- s/1\^\\text{st}/1st/g;
-- s/2\^\\text{nd}/2nd/g;
-+ s/\{\\text\{(st|nd|th)\}\}/\\text{$1}/g;
-+ s/\^\\text\{th\}/-th/g;
-+ s/1\^\\text\{st\}/1st/g;
-+ s/2\^\\text\{nd\}/2nd/g;
-
- s/\\(text|hbox|Big)//g;
- s/^([ \t]+)\{ *\\(it|sl|bf|tt)\b/S<$1>{\\$2/gm;
- s/\{ *\\(it|sl) *(([^{}]+(?=[{}])|\{[^{}]*\})*)\}/$tr{startit}$2$tr{endit}/g;
- s/\{ *\\bf *(([^{}]+(?=[{}])|\{[^{}]*\})*)\}/$tr{startbold}$1$tr{endbold}/g;
- s/\{ *\\tt *(([^{}]+(?=[{}])|\{[^{}]*\})*)\}/$tr{startpodcode}$1$tr{endpodcode}/g;
-- $seek=1 if (s/\\emph{ */$tr{startit}/g);
-+ $seek=1 if (s/\\emph\{ */$tr{startit}/g);
- if ($seek) { $seek=0 if (s/\}/$tr{endit}/) }
- s/\\(backslash|bs)\{(\w)\}/\\$2/g;
- s/\\(backslash|bs)(?![a-zA-Z]) */\\/g;
-@@ -1028,21 +1028,21 @@ sub TeXprint_topod {
- # Try to guard \label/\sidx (removing possible '.')
- # This somehow breaks index...
- # s/(\\(?:section|subsec(?:ref|idx|op)?(unix)?)\s*{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)})\.?\s*\\(label|sidx)/$1\n\\$2/;
-- s/(\\(?:section|subsec(?:ref|idx|op)?)\s*{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)})\.?\s*\\(label|sidx)/$1\n\\$2/;
-+ s/(\\(?:section|subsec(?:ref|idx|op)?)\s*\{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)\})\.?\s*\\(label|sidx)/$1\n\\$2/;
-
- # last if /\\subsec[\\{}ref]*[\\\${]$help[}\\\$]/o;
-- s/\\chapter\s*{((?:[^{}]|\{[^{}]*\})*)}\s*/\n\n$tr{podleader}head1 NAME\n\nlibPARI - $1\n\n/;
-- s/\\appendix\s*{((?:[^{}]|\{[^{}]*\})*)}\s*/\n\n$tr{podleader}head1 NAME\n\nAppendix - $1\n\n/;
-- s/\\section\s*{((?:[^{}]|\{[^{}]*\})*)}\s*/"\n\n$tr{podleader}head1 " . indexify($1) . "\n\n"/e;
-+ s/\\chapter\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*/\n\n$tr{podleader}head1 NAME\n\nlibPARI - $1\n\n/;
-+ s/\\appendix\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*/\n\n$tr{podleader}head1 NAME\n\nAppendix - $1\n\n/;
-+ s/\\section\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*/"\n\n$tr{podleader}head1 " . indexify($1) . "\n\n"/e;
-
- # Try to delimit by :
-- s/\\subsec(?:ref)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^\n]*):[\n ]/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
-- s/\\subsubsec(?:ref)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^:]*):\s*/"\n\n$tr{podleader}head3 " . indexify("$1$3") . "\n\n"/e;
-+ s/\\subsec(?:ref)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]+})+)\}([^\n]*):[\n ]/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
-+ s/\\subsubsec(?:ref)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]+})+)\}([^:]*):\s*/"\n\n$tr{podleader}head3 " . indexify("$1$3") . "\n\n"/e;
- s/\\subsubsec\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(.*)$/"\n\n$tr{podleader}head3 " . indexify("$1") . "$3\n\n"/me;
- s/\\subseckbd\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^:]*):\s*/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
- # Try to delimit by ' '
-- s/\\subsec(?:ref)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(\S*)\s+/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
-- s/\\subsec(?:title)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]*})+)}:?\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
-+ s/\\subsec(?:ref)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]+})+)\}(\S*)\s+/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
-+ s/\\subsec(?:title)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]*})+)\}:?\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
-
- # This is to skip preface in refcard:
- /\Q$tr{podleader}\Ehead1|\\title(?![a-zA-Z])\s*\{/o and $seen_start = 1
-@@ -1097,18 +1097,18 @@ sub TeXprint_topod {
- s/\$\$(.*?)\$\$\s*/\n\nS< >$tr{startcode}$1$tr{endcode}\n\n/gs;
- s/\$([^\$]+)\$/$tr{startcode}$1$tr{endcode}/g;
-
-- s/\\s(?:ref|idx){\s*([^{}]*)}/"X<" . for_index($1) . ">"/ge; #
-- s/\\(?:ref|idx){\s*([^{}]*)}/"X<" . for_index($1) . ">$1"/ge;
-+ s/\\s(?:ref|idx)\{\s*([^{}]*)\}/"X<" . for_index($1) . ">"/ge; #
-+ s/\\(?:ref|idx)\{\s*([^{}]*)\}/"X<" . for_index($1) . ">$1"/ge;
-
- # Conflict between different versions of PARI and refcard:
--# s/\\(?:key|li)\s*{(.*)}\s*{(.+)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/msg;
--# s/\\(?:key|li)\s*{(.*)}\s*{}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mgs;
--# s/\\(key|var)(?![a-zA-Z])\s*{(\w+)}/C<$2>/mg;
-- s/\\var\s*{X<(\w+)>(\w+)}/X<$1>$tr{startcode}$2$tr{endcode}/mg;
-- s/\\var\s*{f{}lag}/$tr{startcode}flag$tr{endcode}/mg;
--
-- s/\\metax(?![a-zA-Z])\s*{(.*)}\s*{\s*(\w+)(?=C\<)(.*)}[ \t]*\n/\n\n=item C<L<$2>$3>\n\n$1\n\n/mg;
-- s/\\metax(?![a-zA-Z])\s*{(.*)}\s*{(.*)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg;
-+# s/\\(?:key|li)\s*\{(.*)\}\s*\{(.+)\}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/msg;
-+# s/\\(?:key|li)\s*\{(.*)\}\s*\{\}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mgs;
-+# s/\\(key|var)(?![a-zA-Z])\s*\{(\w+)\}/C<$2>/mg;
-+ s/\\var\s*\{X<(\w+)>(\w+)\}/X<$1>$tr{startcode}$2$tr{endcode}/mg;
-+ s/\\var\s*\{f\{\}lag\}/$tr{startcode}flag$tr{endcode}/mg;
-+
-+ s/\\metax(?![a-zA-Z])\s*\{(.*)\}\s*\{\s*(\w+)(?=C\<)(.*)\}[ \t]*\n/\n\n=item C<L<$2>$3>\n\n$1\n\n/mg;
-+ s/\\metax(?![a-zA-Z])\s*\{(.*)\}\s*\{(.*)\}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg;
- s/C\<\{\}=/C\<=/g;
- s/\\fl(?![a-zA-Z])/I<flag>/g;
- s/\\file(?![a-zA-Z])/F<file>/g;
diff --git a/build/pkgs/pari/spkg-install b/build/pkgs/pari/spkg-install
index 6a7b1eb..55a64ae 100755
--- a/build/pkgs/pari/spkg-install
+++ b/build/pkgs/pari/spkg-install
@@ -206,7 +206,14 @@ set_environment
# Set CFLAGS
if [ "$SAGE_DEBUG" = yes ]; then
# Disable optimisation, add debug symbols.
- CFLAGS="$CFLAGS -O0 -g"
+ CFLAGS="-O0 -g $CFLAGS"
+
+ # Compile kernel files with -O1 instead of -funroll-loops; -O0 gives
+ # a segmentation fault on some OS X systems when doing
+ # factor(10356613*10694706299664611221)
+ # See #13921, also reported upstream:
+ # - http://pari.math.u-bordeaux.fr/archives/pari-dev-1301/msg00000.html
+ PARI_MAKEFLAGS="KERNELCFLAGS=-O1 $PARI_MAKEFLAGS"
else
# Use PARI's default CFLAGS (with -g added).
# PARI's Configure adds -O3 to the CFLAGS, so we don't need to add
diff --git a/build/pkgs/pari_galdata/dependencies b/build/pkgs/pari_galdata/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/pari_galdata/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/pari_seadata_small/dependencies b/build/pkgs/pari_seadata_small/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/pari_seadata_small/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/patch/dependencies b/build/pkgs/patch/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/patch/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/patchbot/SPKG.txt b/build/pkgs/patchbot/SPKG.txt
new file mode 100644
index 0000000..c34994b
--- /dev/null
+++ b/build/pkgs/patchbot/SPKG.txt
@@ -0,0 +1,26 @@
+= SageMath patchbot =
+
+== Description ==
+
+Apply branches and run tests on open Sage tickets.
+
+The patchbot is used to automate the testing of git branches. It has two
+different aspects: a server side and a client side.
+
+Instructions for using the client side can be found at
+
+http://wiki.sagemath.org/buildbot/details
+
+== License ==
+
+GPLv2+
+
+== Upstream Contact ==
+
+Robert Bradshaw
+Frédéric Chapoton
+https://github.com/robertwb/sage-patchbot/
+
+== Dependencies ==
+
+python, python-dateutil, sage-scripts
diff --git a/build/pkgs/patchbot/checksums.ini b/build/pkgs/patchbot/checksums.ini
new file mode 100644
index 0000000..4a35077
--- /dev/null
+++ b/build/pkgs/patchbot/checksums.ini
@@ -0,0 +1,4 @@
+tarball=patchbot-VERSION.tar.bz2
+sha1=1850ce7004fe49b669be0b53102d32e9095cc307
+md5=a84f244c2f6e6c715676a09028750b36
+cksum=1356602931
diff --git a/build/pkgs/patchbot/dependencies b/build/pkgs/patchbot/dependencies
new file mode 100644
index 0000000..4e1e014
--- /dev/null
+++ b/build/pkgs/patchbot/dependencies
@@ -0,0 +1 @@
+# No dependencies
diff --git a/build/pkgs/patchbot/package-version.txt b/build/pkgs/patchbot/package-version.txt
new file mode 100644
index 0000000..f225a78
--- /dev/null
+++ b/build/pkgs/patchbot/package-version.txt
@@ -0,0 +1 @@
+2.5.2
diff --git a/build/pkgs/patchbot/spkg-install b/build/pkgs/patchbot/spkg-install
new file mode 100755
index 0000000..5dcc96f
--- /dev/null
+++ b/build/pkgs/patchbot/spkg-install
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+if [ "$SAGE_LOCAL" = "" ]; then
+ echo "SAGE_LOCAL undefined ... exiting";
+ echo "Maybe run 'sage -sh'?"
+ exit 1
+fi
+
+# Delete any currently existing patchbot
+rm -rf "$SAGE_LOCAL/bin/patchbot"
+
+# Copy into final location.
+# The sage-patchbot script knows how to call this...
+cp -Rv src "$SAGE_LOCAL/bin/patchbot"
diff --git a/build/pkgs/patchbot/type b/build/pkgs/patchbot/type
new file mode 100644
index 0000000..134d9bc
--- /dev/null
+++ b/build/pkgs/patchbot/type
@@ -0,0 +1 @@
+optional
diff --git a/build/pkgs/planarity/dependencies b/build/pkgs/planarity/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/planarity/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/plantri/dependencies b/build/pkgs/plantri/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/plantri/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/polytopes_db/dependencies b/build/pkgs/polytopes_db/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/polytopes_db/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/rubiks/dependencies b/build/pkgs/rubiks/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/rubiks/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/rw/dependencies b/build/pkgs/rw/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/rw/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/saclib/dependencies b/build/pkgs/saclib/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/saclib/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/symmetrica/dependencies b/build/pkgs/symmetrica/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/symmetrica/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/sympow/dependencies b/build/pkgs/sympow/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/sympow/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/termcap/dependencies b/build/pkgs/termcap/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/termcap/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/valgrind/dependencies b/build/pkgs/valgrind/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/valgrind/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/zeromq/dependencies b/build/pkgs/zeromq/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/zeromq/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/pkgs/zlib/dependencies b/build/pkgs/zlib/dependencies
new file mode 100644
index 0000000..3546cda
--- /dev/null
+++ b/build/pkgs/zlib/dependencies
@@ -0,0 +1,5 @@
+# no dependencies
+
+----------
+All lines of this file are ignored except the first.
+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile.
diff --git a/build/sage_bootstrap/cmdline.py b/build/sage_bootstrap/cmdline.py
index c1dfe89..c08d958 100644
--- a/build/sage_bootstrap/cmdline.py
+++ b/build/sage_bootstrap/cmdline.py
@@ -167,11 +167,13 @@ class SageDownloadFileApplication(object):
def run(self):
progress = True
url = None
+ print_fastest_mirror = None
destination = None
for arg in sys.argv[1:]:
if arg.startswith('--print-fastest-mirror'):
- print(MirrorList().fastest)
- sys.exit(0)
+ url = ""
+ print_fastest_mirror = True
+ continue
if arg.startswith('--quiet'):
progress = False
continue
@@ -184,13 +186,31 @@ class SageDownloadFileApplication(object):
raise ValueError('too many arguments')
if url is None:
print(dedent(self.__doc__.format(SAGE_DISTFILES=SAGE_DISTFILES)))
- sys.exit(1)
- if url.startswith('http://') or url.startswith('https://') or url.startswith('ftp://'):
- Download(url, destination, progress=progress, ignore_errors=True).run()
- else:
- # url is a tarball name
- tarball = Tarball(url)
- tarball.download()
- if destination is not None:
- tarball.save_as(destination)
-
+ sys.exit(2)
+
+ try:
+ if url.startswith('http://') or url.startswith('https://') or url.startswith('ftp://'):
+ Download(url, destination, progress=progress, ignore_errors=True).run()
+ elif print_fastest_mirror:
+ url = "fastest mirror" # For error message
+ print(MirrorList().fastest)
+ else:
+ # url is a tarball name
+ tarball = Tarball(url)
+ tarball.download()
+ if destination is not None:
+ tarball.save_as(destination)
+ except BaseException:
+ try:
+ stars = '*' * 72 + '\n'
+ sys.stderr.write(stars)
+ try:
+ import traceback
+ traceback.print_exc(file=sys.stderr)
+ sys.stderr.write(stars)
+ except:
+ pass
+ sys.stderr.write("Error downloading %s\n"%(url,))
+ sys.stderr.write(stars)
+ finally:
+ sys.exit(1)
diff --git a/src/bin/sage-banner b/src/bin/sage-banner
index 3758480..4a95ae4 100644
--- a/src/bin/sage-banner
+++ b/src/bin/sage-banner
@@ -1,5 +1,5 @@
┌────────────────────────────────────────────────────────────────────┐
-│ SageMath Version 6.9.rc0, Release Date: 2015-09-25 │
+│ SageMath Version 6.10.beta0, Release Date: 2015-10-15 │
│ Type "notebook()" for the browser-based notebook interface. │
│ Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
diff --git a/src/bin/sage-sdist b/src/bin/sage-sdist
index 6b08cec..69424b2 100755
--- a/src/bin/sage-sdist
+++ b/src/bin/sage-sdist
@@ -43,12 +43,10 @@ echo "Sage version $SAGE_VERSION, release date $SAGE_RELEASE_DATE"
TARGET="sage-$SAGE_VERSION"
sage-clone-source "$SAGE_ROOT" "$TMP_DIR/$TARGET"
-# Download and copy all upstream tarballs (the -B option to make forces
-# all targets to be built unconditionally)
+# Download and copy all upstream tarballs
cd "$SAGE_ROOT/build/make"
-SAGE_INSTALL_GCC=yes SAGE_SPKG_COPY_UPSTREAM="$TMP_DIR/$TARGET/upstream" \
-SAGE_INSTALL_FETCH_ONLY=yes \
-./install -B all-build
+export SAGE_SPKG_COPY_UPSTREAM="$TMP_DIR/$TARGET/upstream"
+$MAKE download-for-sdist
# Create source .tar.gz
cd "$TMP_DIR"
diff --git a/src/bin/sage-version.sh b/src/bin/sage-version.sh
index e5b60c9..b8eaf79 100644
--- a/src/bin/sage-version.sh
+++ b/src/bin/sage-version.sh
@@ -1,4 +1,4 @@
# Sage version information for shell scripts
# This file is auto-generated by the sage-update-version script, do not edit!
-SAGE_VERSION='6.9.rc0'
-SAGE_RELEASE_DATE='2015-09-25'
+SAGE_VERSION='6.10.beta0'
+SAGE_RELEASE_DATE='2015-10-15'
diff --git a/src/doc/en/developer/coding_in_python.rst b/src/doc/en/developer/coding_in_python.rst
index 30c65ff..d8b7419 100644
--- a/src/doc/en/developer/coding_in_python.rst
+++ b/src/doc/en/developer/coding_in_python.rst
@@ -503,7 +503,7 @@ documentation for more information on its behaviour and optional arguments.
def my_new_function():
...
- my_old_function = deprecated_function_alias(my_new_function)
+ my_old_function = deprecated_function_alias(666, my_new_function)
* **Moving an object to a different module:**
if you rename a source file or move some function (or class) to a
diff --git a/src/doc/en/reference/algebras/index.rst b/src/doc/en/reference/algebras/index.rst
index f802294..f07d5a3 100644
--- a/src/doc/en/reference/algebras/index.rst
+++ b/src/doc/en/reference/algebras/index.rst
@@ -4,6 +4,8 @@ Algebras
.. toctree::
:maxdepth: 2
+ sage/algebras/associated_graded
+
sage/algebras/catalog
sage/algebras/clifford_algebra
@@ -25,6 +27,8 @@ Algebras
sage/algebras/free_algebra_quotient
sage/algebras/free_algebra_quotient_element
+ sage/algebras/free_zinbiel_algebra
+
sage/algebras/group_algebra
sage/algebras/iwahori_hecke_algebra
diff --git a/src/doc/en/reference/categories/index.rst b/src/doc/en/reference/categories/index.rst
index 6ee9d20..518d9e6 100644
--- a/src/doc/en/reference/categories/index.rst
+++ b/src/doc/en/reference/categories/index.rst
@@ -63,6 +63,10 @@ Individual Categories
sage/categories/enumerated_sets
sage/categories/euclidean_domains
sage/categories/fields
+ sage/categories/filtered_algebras
+ sage/categories/filtered_algebras_with_basis
+ sage/categories/filtered_modules
+ sage/categories/filtered_modules_with_basis
sage/categories/finite_coxeter_groups
sage/categories/finite_crystals
sage/categories/finite_dimensional_algebras_with_basis
diff --git a/src/doc/en/reference/coding/index.rst b/src/doc/en/reference/coding/index.rst
index 004458e..6311e17 100644
--- a/src/doc/en/reference/coding/index.rst
+++ b/src/doc/en/reference/coding/index.rst
@@ -6,8 +6,10 @@ Coding Theory
.. toctree::
:maxdepth: 1
- sage/coding/channels_catalog
+ sage/coding/encoder
+ sage/coding/encoders_catalog
sage/coding/channel_constructions
+ sage/coding/channels_catalog
sage/coding/codes_catalog
sage/coding/linear_code
sage/coding/code_constructions
diff --git a/src/doc/en/reference/combinat/module_list.rst b/src/doc/en/reference/combinat/module_list.rst
index 4abd0e8..b2f82fd 100644
--- a/src/doc/en/reference/combinat/module_list.rst
+++ b/src/doc/en/reference/combinat/module_list.rst
@@ -35,6 +35,7 @@ Comprehensive Module list
sage/combinat/cluster_algebra_quiver/mutation_type
sage/combinat/cluster_algebra_quiver/quiver
sage/combinat/cluster_algebra_quiver/quiver_mutation_type
+ sage/combinat/colored_permutations
sage/combinat/combinat
sage/combinat/combinat_cython
sage/combinat/combination
@@ -162,6 +163,7 @@ Comprehensive Module list
sage/combinat/permutation_nk
sage/combinat/posets/__init__
sage/combinat/posets/all
+ sage/combinat/posets/cartesian_product
sage/combinat/posets/elements
sage/combinat/posets/hasse_diagram
sage/combinat/posets/incidence_algebras
diff --git a/src/doc/en/reference/data_structures/index.rst b/src/doc/en/reference/data_structures/index.rst
index 52e3280..90bf85e 100644
--- a/src/doc/en/reference/data_structures/index.rst
+++ b/src/doc/en/reference/data_structures/index.rst
@@ -7,5 +7,6 @@ Data Structures
sage/misc/binary_tree
sage/data_structures/bitset
sage/data_structures/bounded_integer_sequences
+ sage/data_structures/mutable_poset
.. include:: ../footer.txt
diff --git a/src/doc/en/reference/graphs/index.rst b/src/doc/en/reference/graphs/index.rst
index f71db68..a27c03f 100644
--- a/src/doc/en/reference/graphs/index.rst
+++ b/src/doc/en/reference/graphs/index.rst
@@ -91,6 +91,7 @@ Libraries of algorithms
sage/graphs/graph_latex
sage/graphs/graph_editor
sage/graphs/graph_list
+ sage/graphs/graph_input
sage/graphs/hyperbolicity
sage/graphs/tutte_polynomial
sage/graphs/generic_graph_pyx
diff --git a/src/doc/en/reference/index.rst b/src/doc/en/reference/index.rst
index 5972217..85c5201 100644
--- a/src/doc/en/reference/index.rst
+++ b/src/doc/en/reference/index.rst
@@ -78,6 +78,7 @@ Calculus
* :doc:`Symbolic Calculus <calculus/index>`
* :doc:`Mathematical Constants <constants/index>`
* :doc:`Elementary and Special Functions <functions/index>`
+* :doc:`Asymptotic Expansions <rings/asymptotic_expansions_index>` (experimental)
Geometry and Topology
---------------------
diff --git a/src/doc/en/reference/polynomial_rings/polynomial_rings_univar.rst b/src/doc/en/reference/polynomial_rings/polynomial_rings_univar.rst
index d84fd74..bd55ed8 100644
--- a/src/doc/en/reference/polynomial_rings/polynomial_rings_univar.rst
+++ b/src/doc/en/reference/polynomial_rings/polynomial_rings_univar.rst
@@ -35,6 +35,7 @@ whereas others have multiple bases.
sage/rings/polynomial/real_roots
sage/rings/polynomial/complex_roots
+ sage/rings/polynomial/refine_root
sage/rings/polynomial/ideal
sage/rings/polynomial/polynomial_quotient_ring
diff --git a/src/doc/en/reference/rings/asymptotic_expansions_index.rst b/src/doc/en/reference/rings/asymptotic_expansions_index.rst
index f6268e6..1271089 100644
--- a/src/doc/en/reference/rings/asymptotic_expansions_index.rst
+++ b/src/doc/en/reference/rings/asymptotic_expansions_index.rst
@@ -5,5 +5,6 @@ Asymptotic Expansions
sage/rings/asymptotic/growth_group
sage/rings/asymptotic/term_monoid
+ sage/rings/asymptotic/asymptotic_ring
.. include:: ../footer.txt
diff --git a/src/doc/en/reference/sat/index.rst b/src/doc/en/reference/sat/index.rst
index 3c86ef5..7f6314a 100644
--- a/src/doc/en/reference/sat/index.rst
+++ b/src/doc/en/reference/sat/index.rst
@@ -18,33 +18,36 @@ should be true, we write::
Solvers
-------
-Any SAT solver supporting the DIMACS input format is easily interfaced using the
-:class:`sage.sat.solvers.dimacs.DIMACS` blueprint. Sage ships with pre-written interfaces for *RSat*
-[RS]_ and *Glucose* [GL]_. Furthermore, Sage provides a C++ interface to the *CryptoMiniSat* [CMS]_ SAT
-solver which can be used interchangably with DIMACS-based solvers, but also provides advanced
-features. For this, the optional CryptoMiniSat package must be
-installed, this can be accomplished by typing the following in the
+By default, Sage solves SAT instances as an Integer Linear Program (see
+:mod:`sage.numerical.mip`), but any SAT solver supporting the DIMACS input
+format is easily interfaced using the :class:`sage.sat.solvers.dimacs.DIMACS`
+blueprint. Sage ships with pre-written interfaces for *RSat* [RS]_ and *Glucose*
+[GL]_. Furthermore, Sage provides a C++ interface to the *CryptoMiniSat* [CMS]_
+SAT solver which can be used interchangably with DIMACS-based solvers, but also
+provides advanced features. For this last solver, the optional CryptoMiniSat
+package must be installed, this can be accomplished by typing the following in the
shell::
sage -i cryptominisat sagelib
-Since by default Sage does not include any SAT solver, we demonstrate key features by instantiating
-a fake DIMACS-based solver. We start with a trivial example::
+We now show how to solve a simple SAT problem. ::
(x1 OR x2 OR x3) AND (x1 OR x2 OR (NOT x3))
In Sage's notation::
- sage: from sage.sat.solvers.dimacs import DIMACS
- sage: solver = DIMACS(command="sat-solver")
+ sage: solver = SAT()
sage: solver.add_clause( ( 1, 2, 3) )
sage: solver.add_clause( ( 1, 2, -3) )
+ sage: solver() # random
+ (None, True, True, False)
.. NOTE::
- :meth:`sage.sat.solvers.dimacs.DIMACS.add_clause` creates new variables when necessary. In
- particular, it creates *all* variables up to the given index. Hence, adding a literal involving
- the variable 1000 creates up to 1000 internal variables.
+ :meth:`~sage.sat.solvers.dimacs.DIMACS.add_clause` creates new variables
+ when necessary. When using CryptoMiniSat, it creates *all* variables up to
+ the given index. Hence, adding a literal involving the variable 1000 creates
+ up to 1000 internal variables.
DIMACS-base solvers can also be used to write DIMACS files::
@@ -76,14 +79,6 @@ Alternatively, there is :meth:`sage.sat.solvers.dimacs.DIMACS.clauses`::
These files can then be passed external SAT solvers.
-We demonstrate solving using CryptoMiniSat::
-
- sage: from sage.sat.solvers import CryptoMiniSat # optional - cryptominisat
- sage: cms = CryptoMiniSat() # optional - cryptominisat
- sage: cms.add_clause((1,2,-3)) # optional - cryptominisat
- sage: cms() # optional - cryptominisat
- (None, True, True, False)
-
Details on Specific Solvers
^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -92,6 +87,7 @@ Details on Specific Solvers
sage/sat/solvers/satsolver
sage/sat/solvers/dimacs
+ sage/sat/solvers/sat_lp
.. optional - cryptominisat
.. sage/sat/solvers/cryptominisat/cryptominisat
.. sage/sat/solvers/cryptominisat/solverconf
diff --git a/src/module_list.py b/src/module_list.py
index 7108872..d0a4821 100644
--- a/src/module_list.py
+++ b/src/module_list.py
@@ -1570,6 +1570,10 @@ ext_modules = [
sources = ['sage/rings/polynomial/real_roots.pyx'],
libraries=['mpfr']),
+ Extension('sage.rings.polynomial.refine_root',
+ sources = ['sage/rings/polynomial/refine_root.pyx'],
+ libraries=['gmp', 'mpfr', 'mpfi']),
+
Extension('sage.rings.polynomial.symmetric_reduction',
sources = ['sage/rings/polynomial/symmetric_reduction.pyx']),
diff --git a/src/sage/algebras/associated_graded.py b/src/sage/algebras/associated_graded.py
new file mode 100644
index 0000000..750cbe3
--- /dev/null
+++ b/src/sage/algebras/associated_graded.py
@@ -0,0 +1,341 @@
+r"""
+Associated Graded Algebras To Filtered Algebras
+
+AUTHORS:
+
+- Travis Scrimshaw (2014-10-08): Initial version
+"""
+
+#*****************************************************************************
+# Copyright (C) 2014 Travis Scrimshaw <tscrim at ucdavis.edu>
+#
+# Distributed under the terms of the GNU General Public License (GPL)
+# http://www.gnu.org/licenses/
+#*****************************************************************************
+
+from sage.misc.cachefunc import cached_method
+from copy import copy
+
+from sage.categories.modules_with_basis import ModulesWithBasis
+from sage.sets.family import Family
+from sage.combinat.free_module import CombinatorialFreeModule
+
+class AssociatedGradedAlgebra(CombinatorialFreeModule):
+ r"""
+ The associated graded algebra/module `\operatorname{gr} A`
+ of a filtered algebra/module with basis `A`.
+
+ Let `A` be a filtered module over a commutative ring `R`.
+ Let `(F_i)_{i \in I}` be the filtration of `A`, with `I` being
+ a totally ordered set. Define
+
+ .. MATH::
+
+ G_i = F_i / \sum_{j < i} F_j
+
+ for every `i \in I`, and then
+
+ .. MATH::
+
+ \operatorname{gr} A = \bigoplus_{i \in I} G_i.
+
+ There are canonical projections `p_i : F_i \to G_i` for
+ every `i \in I`. Moreover `\operatorname{gr} A` is naturally a
+ graded `R`-module with `G_i` being the `i`-th graded component.
+ This graded `R`-module is known as the *associated graded module*
+ (or, for short, just *graded module*) of `A`.
+
+ Now, assume that `A` (endowed with the filtration
+ `(F_i)_{i \in I}`) is not just a filtered `R`-module, but also
+ a filtered `R`-algebra.
+ Let `u \in G_i` and `v \in G_j`, and let `u' \in F_i` and
+ `v' \in F_j` be lifts of `u` and `v`, respectively (so that
+ `u = p_i(u')` and `v = p_j(v')`). Then, we define a
+ multiplication `*` on `\operatorname{gr} A` (not to be mistaken
+ for the multiplication of the original algebra `A`) by
+
+ .. MATH::
+
+ u * v = p_{i+j} (u' v').
+
+ The *associated graded algebra* (or, for short, just
+ *graded algebra*) of `A` is the graded algebra
+ `\operatorname{gr} A` (endowed with this multiplication).
+
+ Now, assume that `A` is a filtered `R`-algebra with basis.
+ Let `(b_x)_{x \in X}` be the basis of `A`,
+ and consider the partition `X = \bigsqcup_{i \in I} X_i` of
+ the set `X`, which is part of the data of a filtered
+ algebra with basis. We know (see
+ :class:`~sage.categories.filtered_modules_with_basis.FilteredModulesWithBasis`)
+ that `A` (being a filtered `R`-module with basis) is canonically
+ (when the basis is considered to be part of the data)
+ isomorphic to `\operatorname{gr} A` as an `R`-module. Therefore
+ the `k`-th graded component `G_k` can be identified with
+ the span of `(b_x)_{x \in X_k}`, or equivalently the
+ `k`-th homogeneous component of `A`. Suppose
+ that `u' v' = \sum_{k \leq i+j} m_k` where `m_k \in G_k` (which
+ has been identified with the `k`-th homogeneous component of `A`).
+ Then `u * v = m_{i+j}`. We also note that the choice of
+ identification of `G_k` with the `k`-th homogeneous component
+ of `A` depends on the given basis.
+
+ The basis `(b_x)_{x \in X}` of `A` gives rise to a basis
+ of `\operatorname{gr} A`. This latter basis is still indexed
+ by the elements of `X`, and consists of the images of the
+ `b_x` under the `R`-module isomorphism from `A` to
+ `\operatorname{gr} A`. It makes `\operatorname{gr} A` into
+ a graded `R`-algebra with basis.
+
+ In this class, the `R`-module isomorphism from `A` to
+ `\operatorname{gr} A` is implemented as
+ :meth:`to_graded_conversion` and also as the default
+ conversion from `A` to `\operatorname{gr} A`. Its
+ inverse map is implemented as
+ :meth:`from_graded_conversion`.
+ The projection `p_i : F_i \to G_i` is implemented as
+ :meth:`projection` ``(i)``.
+
+ INPUT:
+
+ - ``A`` -- a filtered module (or algebra) with basis
+
+ OUTPUT:
+
+ The associated graded module of `A`, if `A` is just a filtered
+ `R`-module.
+ The associated graded algebra of `A`, if `A` is a filtered
+ `R`-algebra.
+
+ EXAMPLES:
+
+ Associated graded module of a filtered module::
+
+ sage: A = Modules(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: grA.category()
+ Category of graded modules with basis over Rational Field
+ sage: x = A.basis()[Partition([3,2,1])]
+ sage: grA(x)
+ Bbar[[3, 2, 1]]
+
+ Associated graded algebra of a filtered algebra::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: grA.category()
+ Category of graded algebras with basis over Rational Field
+ sage: x,y,z = map(lambda s: grA.algebra_generators()[s], ['x','y','z'])
+ sage: x
+ bar(U['x'])
+ sage: y * x + z
+ bar(U['x']*U['y']) + bar(U['z'])
+ sage: A(y) * A(x) + A(z)
+ U['x']*U['y']
+
+ We note that the conversion between ``A`` and ``grA`` is
+ the canonical ``QQ``-module isomorphism stemming from the
+ fact that the underlying ``QQ``-modules of ``A`` and
+ ``grA`` are isomorphic::
+
+ sage: grA(A.an_element())
+ bar(U['x']^2*U['y']^2*U['z']^3)
+ sage: elt = A.an_element() + A.algebra_generators()['x'] + 2
+ sage: grelt = grA(elt); grelt
+ bar(U['x']^2*U['y']^2*U['z']^3) + bar(U['x']) + 2*bar(1)
+ sage: A(grelt) == elt
+ True
+
+ .. TODO::
+
+ The algebra ``A`` must currently be an instance of (a subclass of)
+ :class:`CombinatorialFreeModule`. This should work with any
+ filtered algebra with a basis.
+
+ .. TODO::
+
+ Implement a version of associated graded algebra for
+ filtered algebras without a distinguished basis.
+
+ REFERENCES:
+
+ - :wikipedia:`Filtered_algebra#Associated_graded_algebra`
+ """
+ def __init__(self, A, category=None):
+ """
+ Initialize ``self``.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: TestSuite(grA).run(elements=[prod(grA.algebra_generators())])
+ """
+ if A not in ModulesWithBasis(A.base_ring().category()).Filtered():
+ raise ValueError("the base algebra must be filtered and with basis")
+ self._A = A
+
+ base_ring = A.base_ring()
+ base_one = base_ring.one()
+
+ category = A.category().Graded().or_subcategory(category)
+ try:
+ opts = copy(A.print_options())
+ if not opts['prefix'] and not opts['bracket']:
+ opts['bracket'] = '('
+ opts['prefix'] = opts['prefix'] + 'bar'
+ except AttributeError:
+ opts = {'prefix': 'Abar'}
+
+ CombinatorialFreeModule.__init__(self, base_ring, A.basis().keys(),
+ category=category, **opts)
+
+ # Setup the conversion back
+ phi = self.module_morphism(diagonal=lambda x: base_one, codomain=A)
+ self._A.register_conversion(phi)
+
+ def _repr_(self):
+ """
+ Return a string representation of ``self``.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: A.graded_algebra()
+ Graded Algebra of An example of a filtered algebra with basis:
+ the universal enveloping algebra of Lie algebra of RR^3
+ with cross product over Rational Field
+ """
+ from sage.categories.algebras_with_basis import AlgebrasWithBasis
+ if self in AlgebrasWithBasis:
+ return "Graded Algebra of {}".format(self._A)
+ return "Graded Module of {}".format(self._A)
+
+ def _latex_(self):
+ r"""
+ Return a latex representation of ``self``.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: latex(A.graded_algebra())
+ \operatorname{gr} ...
+ """
+ from sage.misc.latex import latex
+ return "\\operatorname{gr} " + latex(self._A)
+
+ def _element_constructor_(self, x):
+ r"""
+ Construct an element of ``self`` from ``x``.
+
+ If ``self`` `= \operatorname{gr} A` for a filtered algebra
+ `A` with basis, and if ``x`` is an element of `A`, then
+ this returns the image of `x` under the canonical `R`-module
+ isomorphism `A \to \operatorname{gr} A`. (In this case,
+ this is equivalent to calling
+ ``self.to_graded_conversion()(x)``.)
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: grA(A.an_element())
+ bar(U['x']^2*U['y']^2*U['z']^3)
+ sage: grA(A.an_element() + A.algebra_generators()['x'] + 2)
+ bar(U['x']^2*U['y']^2*U['z']^3) + bar(U['x']) + 2*bar(1)
+ """
+ if isinstance(x, CombinatorialFreeModule.Element):
+ if x.parent() is self._A:
+ return self._from_dict(dict(x))
+ return super(AssociatedGradedAlgebra, self)._element_constructor_(x)
+
+ def gen(self, *args, **kwds):
+ """
+ Return a generator of ``self``.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: grA.gen('x')
+ bar(U['x'])
+ """
+ try:
+ x = self._A.gen(*args, **kwds)
+ except AttributeError:
+ x = self._A.algebra_generators()[args[0]]
+ return self(x)
+
+ @cached_method
+ def algebra_generators(self):
+ """
+ Return the algebra generators of ``self``.
+
+ This assumes that the algebra generators of `A` provided by
+ its ``algebra_generators`` method are homogeneous.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: grA.algebra_generators()
+ Finite family {'y': bar(U['y']), 'x': bar(U['x']), 'z': bar(U['z'])}
+ """
+ G = self._A.algebra_generators()
+ return Family(G.keys(), lambda x: self(G[x]), name="generator")
+
+ def degree_on_basis(self, x):
+ """
+ Return the degree of the basis element indexed by ``x``.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: all(A.degree_on_basis(x) == grA.degree_on_basis(x)
+ ....: for g in grA.algebra_generators() for x in g.support())
+ True
+ """
+ return self._A.degree_on_basis(x)
+
+ @cached_method
+ def one_basis(self):
+ """
+ Return the basis index of the element `1` of
+ `\operatorname{gr} A`.
+
+ This assumes that the unity `1` of `A` belongs to `F_0`.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: grA.one_basis()
+ 1
+ """
+ return self._A.one_basis()
+
+ def product_on_basis(self, x, y):
+ """
+ Return the product on basis elements given by the
+ indices ``x`` and ``y``.
+
+ EXAMPLES::
+
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
+ sage: grA = A.graded_algebra()
+ sage: G = grA.algebra_generators()
+ sage: x,y,z = G['x'], G['y'], G['z']
+ sage: x * y # indirect doctest
+ bar(U['x']*U['y'])
+ sage: y * x
+ bar(U['x']*U['y'])
+ sage: z * y * x
+ bar(U['x']*U['y']*U['z'])
+ """
+ ret = self._A.product_on_basis(x, y)
+ deg = self._A.degree_on_basis(x) + self._A.degree_on_basis(y)
+ return self.sum_of_terms([(i,c) for i,c in ret
+ if self._A.degree_on_basis(i) == deg],
+ distinct=True)
+
diff --git a/src/sage/algebras/catalog.py b/src/sage/algebras/catalog.py
index da06202..262e811 100644
--- a/src/sage/algebras/catalog.py
+++ b/src/sage/algebras/catalog.py
@@ -16,6 +16,7 @@ Let ``<tab>`` indicate pressing the tab key. So begin by typing
- :class:`algebras.FiniteDimensional
<sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra.FiniteDimensionalAlgebra>`
- :class:`algebras.Free <sage.algebras.free_algebra.FreeAlgebraFactory>`
+- :class:`algebras.FreeZinbiel <sage.algebras.free_zinbiel_algebra.FreeZinbielAlgebra>`
- :class:`algebras.PreLieAlgebra <sage.combinat.free_prelie_algebra.FreePreLieAlgebra>`
- :func:`algebras.GradedCommutative
<sage.algebras.commutative_dga.GradedCommutativeAlgebra>`
@@ -48,6 +49,7 @@ from sage.algebras.weyl_algebra import DifferentialWeylAlgebra as DifferentialWe
from sage.misc.lazy_import import lazy_import
lazy_import('sage.algebras.nil_coxeter_algebra', 'NilCoxeterAlgebra', 'NilCoxeter')
+lazy_import('sage.algebras.free_zinbiel_algebra', 'FreeZinbielAlgebra', 'FreeZinbiel')
lazy_import('sage.algebras.hall_algebra', 'HallAlgebra', 'Hall')
lazy_import('sage.algebras.jordan_algebra', 'JordanAlgebra', 'Jordan')
lazy_import('sage.algebras.shuffle_algebra', 'ShuffleAlgebra', 'Shuffle')
diff --git a/src/sage/algebras/clifford_algebra.py b/src/sage/algebras/clifford_algebra.py
index b419d98..bb88f5e 100644
--- a/src/sage/algebras/clifford_algebra.py
+++ b/src/sage/algebras/clifford_algebra.py
@@ -18,8 +18,7 @@ from sage.structure.unique_representation import UniqueRepresentation
from copy import copy
from sage.categories.algebras_with_basis import AlgebrasWithBasis
-from sage.categories.graded_algebras_with_basis import GradedAlgebrasWithBasis
-from sage.categories.graded_hopf_algebras_with_basis import GradedHopfAlgebrasWithBasis
+from sage.categories.hopf_algebras_with_basis import HopfAlgebrasWithBasis
from sage.modules.with_basis.morphism import ModuleMorphismByLinearity
from sage.categories.poor_man_map import PoorManMap
from sage.rings.all import ZZ
@@ -423,6 +422,14 @@ class CliffordAlgebra(CombinatorialFreeModule):
canonical isomorphism. The inclusion `i` is commonly used to
identify `V` with a vector subspace of `Cl(V)`.
+ The Clifford algebra `Cl(V, Q)` is a `\ZZ_2`-graded algebra
+ (where `\ZZ_2 = \ZZ / 2 \ZZ`); this grading is determined by
+ placing all elements of `V` in degree `1`. It is also an
+ `\NN`-filtered algebra, with the filtration too being defined
+ by placing all elements of `V` in degree `1`. The :meth:`degree` gives
+ the `\NN`-*filtration* degree, and to get the super degree use instead
+ :meth:`~sage.categories.super_modules.SuperModules.ElementMethods.is_even_odd`.
+
The Clifford algebra also can be considered as a covariant functor
from the category of vector spaces equipped with quadratic forms
to the category of algebras. In fact, if `(V, Q)` and `(W, R)`
@@ -465,7 +472,8 @@ class CliffordAlgebra(CombinatorialFreeModule):
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
sage: Cl = CliffordAlgebra(Q)
sage: Cl
- The Clifford algebra of the Quadratic form in 3 variables over Integer Ring with coefficients:
+ The Clifford algebra of the Quadratic form in 3 variables
+ over Integer Ring with coefficients:
[ 1 2 3 ]
[ * 4 5 ]
[ * * 6 ]
@@ -480,11 +488,6 @@ class CliffordAlgebra(CombinatorialFreeModule):
a*d
sage: d*c*b*a + a + 4*b*c
a*b*c*d + 4*b*c + a
-
- .. WARNING::
-
- The Clifford algebra is not graded, but instead filtered. This
- will be changed once :trac:`17096` is finished.
"""
@staticmethod
def __classcall_private__(cls, Q, names=None):
@@ -520,6 +523,9 @@ class CliffordAlgebra(CombinatorialFreeModule):
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
sage: Cl = CliffordAlgebra(Q)
+ sage: Cl.category()
+ Category of finite dimensional super algebras with basis
+ over (euclidean domains and infinite enumerated sets)
sage: TestSuite(Cl).run()
TESTS:
@@ -536,8 +542,7 @@ class CliffordAlgebra(CombinatorialFreeModule):
"""
self._quadratic_form = Q
R = Q.base_ring()
- if category is None:
- category = GradedAlgebrasWithBasis(R)
+ category = AlgebrasWithBasis(R.category()).Super().Filtered().or_subcategory(category)
indices = SubsetsSorted(range(Q.dim()))
CombinatorialFreeModule.__init__(self, R, indices, category=category)
self._assign_names(names)
@@ -550,7 +555,8 @@ class CliffordAlgebra(CombinatorialFreeModule):
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
sage: CliffordAlgebra(Q)
- The Clifford algebra of the Quadratic form in 3 variables over Integer Ring with coefficients:
+ The Clifford algebra of the Quadratic form in 3 variables
+ over Integer Ring with coefficients:
[ 1 2 3 ]
[ * 4 5 ]
[ * * 6 ]
@@ -826,7 +832,7 @@ class CliffordAlgebra(CombinatorialFreeModule):
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
sage: Cl.quadratic_form()
- Quadratic form in 3 variables over Integer Ring with coefficients:
+ Quadratic form in 3 variables over Integer Ring with coefficients:
[ 1 2 3 ]
[ * 4 5 ]
[ * * 6 ]
@@ -837,19 +843,8 @@ class CliffordAlgebra(CombinatorialFreeModule):
r"""
Return the degree of the monomial indexed by ``m``.
- This degree is a nonnegative integer, and should be interpreted
- as a residue class modulo `2`, since we consider ``self`` to be
- `\ZZ_2`-graded (not `\ZZ`-graded, although there is a natural
- *filtration* by the length of ``m``). The degree of the monomial
- ``m`` in this `\ZZ_2`-grading is defined to be the length of ``m``
- taken mod `2`.
-
- .. WARNING:
-
- On the :class:`ExteriorAlgebra` class (which inherits from
- :class:`CliffordAlgebra`), the :meth:`degree_on_basis`
- method is overridden to return an actual `\NN`-degree. So
- don't count on this method always returning `0` or `1` !!
+ We are considering the Clifford algebra to be `\NN`-filtered,
+ and the degree of the monomial ``m`` is the length of ``m``.
EXAMPLES::
@@ -858,9 +853,22 @@ class CliffordAlgebra(CombinatorialFreeModule):
sage: Cl.degree_on_basis((0,))
1
sage: Cl.degree_on_basis((0,1))
- 0
+ 2
"""
- return len(m) % ZZ(2)
+ return ZZ(len(m))
+
+ def graded_algebra(self):
+ """
+ Return the associated graded algebra of ``self``.
+
+ EXAMPLES::
+
+ sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
+ sage: Cl.<x,y,z> = CliffordAlgebra(Q)
+ sage: Cl.graded_algebra()
+ The exterior algebra of rank 3 over Integer Ring
+ """
+ return ExteriorAlgebra(self.base_ring(), self.variable_names())
@cached_method
def free_module(self):
@@ -1051,7 +1059,7 @@ class CliffordAlgebra(CombinatorialFreeModule):
remove_zeros=True )
for i in x)
return Cl.module_morphism(on_basis=f, codomain=self,
- category=GradedAlgebrasWithBasis(self.base_ring()))
+ category=AlgebrasWithBasis(self.base_ring()).Super())
def lift_isometry(self, m, nam