diff --git a/.zenodo.json b/.zenodo.json index a02e1127367..a79e2f381e6 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -1,10 +1,10 @@ { "description": "Mirror of the Sage https://sagemath.org/ source tree", "license": "other-open", - "title": "sagemath/sage: 10.0.rc0", - "version": "10.0.rc0", + "title": "sagemath/sage: 10.0.rc3", + "version": "10.0.rc3", "upload_type": "software", - "publication_date": "2023-04-23", + "publication_date": "2023-05-12", "creators": [ { "affiliation": "SageMath.org", @@ -15,7 +15,7 @@ "related_identifiers": [ { "scheme": "url", - "identifier": "https://github.com/sagemath/sage/tree/10.0.rc0", + "identifier": "https://github.com/sagemath/sage/tree/10.0.rc3", "relation": "isSupplementTo" }, { diff --git a/VERSION.txt b/VERSION.txt index 80302dc05a6..beba69b49b1 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -SageMath version 10.0.rc0, Release Date: 2023-04-23 +SageMath version 10.0.rc3, Release Date: 2023-05-12 diff --git a/build/pkgs/configure/checksums.ini b/build/pkgs/configure/checksums.ini index f53866ba618..6613130e4db 100644 --- a/build/pkgs/configure/checksums.ini +++ b/build/pkgs/configure/checksums.ini @@ -1,4 +1,4 @@ tarball=configure-VERSION.tar.gz -sha1=527827bf6b3d445dc433219b4423f824dc95ec94 -md5=edf7a6212cc3e0f37acad73af1f059c8 -cksum=998886037 +sha1=959551bd3287d8fef9ca0452060876d14476112f +md5=3151567a6d8a667f3ce7ecfbadb30a32 +cksum=3323217204 diff --git a/build/pkgs/configure/package-version.txt b/build/pkgs/configure/package-version.txt index d832a6d6092..f2e0a411f86 100644 --- a/build/pkgs/configure/package-version.txt +++ b/build/pkgs/configure/package-version.txt @@ -1 +1 @@ -eca2a773d086dbbd6c88bb36e2fac4748aa602bf +937f7d915f988499400b698254c3a960eacf1f6d diff --git a/build/pkgs/eclib/checksums.ini b/build/pkgs/eclib/checksums.ini index ddf84c8173f..266e6bfac1c 100644 --- a/build/pkgs/eclib/checksums.ini +++ b/build/pkgs/eclib/checksums.ini @@ -1,5 +1,5 @@ tarball=eclib-VERSION.tar.bz2 -sha1=7c8b64bd9a1b8f4f489690a53c1f329afc953f2c -md5=03a87ae2b490f11b81ec6b305cbc8087 -cksum=111064162 -upstream_url=https://github.com/JohnCremona/eclib/releases/download/VERSION/eclib-VERSION.tar.bz2 +sha1=bd49acf96c4e7246c8ca3e5d188ae1b03a3aeff3 +md5=42721f2f1343c49dc774763a57a85ca6 +cksum=3624641360 +upstream_url=https://github.com/JohnCremona/eclib/releases/download/vVERSION/eclib-VERSION.tar.bz2 diff --git a/build/pkgs/eclib/package-version.txt b/build/pkgs/eclib/package-version.txt index 6f50c16be9c..b5f339e560b 100644 --- a/build/pkgs/eclib/package-version.txt +++ b/build/pkgs/eclib/package-version.txt @@ -1 +1 @@ -20221012 +20230424 diff --git a/build/pkgs/eclib/spkg-configure.m4 b/build/pkgs/eclib/spkg-configure.m4 index 2d8d19a7e6e..c98781201cc 100644 --- a/build/pkgs/eclib/spkg-configure.m4 +++ b/build/pkgs/eclib/spkg-configure.m4 @@ -1,7 +1,7 @@ SAGE_SPKG_CONFIGURE([eclib], [ SAGE_SPKG_DEPCHECK([ntl pari flint], [ dnl Trac #31443, #34029: use existing eclib only if the version reported by pkg-config is correct - m4_pushdef([SAGE_ECLIB_VER],["20221012"]) + m4_pushdef([SAGE_ECLIB_VER],["20230424"]) PKG_CHECK_MODULES([ECLIB], [eclib = SAGE_ECLIB_VER], [ AC_CACHE_CHECK([for mwrank version == SAGE_ECLIB_VER], [ac_cv_path_MWRANK], [ AC_PATH_PROGS_FEATURE_CHECK([MWRANK], [mwrank], [ diff --git a/build/pkgs/gcc/spkg-configure.m4 b/build/pkgs/gcc/spkg-configure.m4 index fe4d220a189..d0dee7dc130 100644 --- a/build/pkgs/gcc/spkg-configure.m4 +++ b/build/pkgs/gcc/spkg-configure.m4 @@ -165,8 +165,8 @@ SAGE_SPKG_CONFIGURE_BASE([gcc], [ # Install our own GCC if the system-provided one is older than gcc 8 SAGE_SHOULD_INSTALL_GCC([you have $CXX version $GXX_VERSION, which is quite old]) ], - [1[[3-9]].*], [ - # Install our own GCC if the system-provided one is newer than 12.x. + [1[[4-9]].*], [ + # Install our own GCC if the system-provided one is newer than 13.x. # See https://github.com/sagemath/sage/issues/29456 SAGE_SHOULD_INSTALL_GCC([$CXX is g++ version $GXX_VERSION, which is too recent for this version of Sage]) ]) diff --git a/build/pkgs/gfortran/spkg-configure.m4 b/build/pkgs/gfortran/spkg-configure.m4 index 1a2d6ba767c..d2841f740aa 100644 --- a/build/pkgs/gfortran/spkg-configure.m4 +++ b/build/pkgs/gfortran/spkg-configure.m4 @@ -86,8 +86,8 @@ SAGE_SPKG_CONFIGURE([gfortran], [ # Install our own gfortran if the system-provided one is older than gcc-4.8. SAGE_SHOULD_INSTALL_GFORTRAN([$FC is version $GFORTRAN_VERSION, which is quite old]) ], - [1[[3-9]].*], [ - # Install our own gfortran if the system-provided one is newer than 12.x. + [1[[4-9]].*], [ + # Install our own gfortran if the system-provided one is newer than 13.x. # See https://github.com/sagemath/sage/issues/29456, https://github.com/sagemath/sage/issues/31838 SAGE_MUST_INSTALL_GFORTRAN([$FC is version $GFORTRAN_VERSION, which is too recent for this version of Sage]) ]) diff --git a/build/pkgs/givaro/patches/218.patch b/build/pkgs/givaro/patches/218.patch new file mode 100644 index 00000000000..15178289ca8 --- /dev/null +++ b/build/pkgs/givaro/patches/218.patch @@ -0,0 +1,23 @@ +From c7744bb133496cd7ac04688f345646d505e1bf52 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Thu, 19 Jan 2023 09:12:22 -0500 +Subject: [PATCH] Add missing #include for (u)int64_t + +Fixes failure to compile on GCC 13. +--- + src/library/poly1/givdegree.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/library/poly1/givdegree.h b/src/library/poly1/givdegree.h +index 3753a425..eb85a0dd 100644 +--- a/src/library/poly1/givdegree.h ++++ b/src/library/poly1/givdegree.h +@@ -19,6 +19,8 @@ + #ifndef __GIVARO_poly1degree_H + #define __GIVARO_poly1degree_H + ++#include ++ + #include + + namespace Givaro { diff --git a/build/pkgs/openblas/spkg-configure.m4 b/build/pkgs/openblas/spkg-configure.m4 index 3743839a51a..06affdacff8 100644 --- a/build/pkgs/openblas/spkg-configure.m4 +++ b/build/pkgs/openblas/spkg-configure.m4 @@ -10,7 +10,7 @@ SAGE_SPKG_CONFIGURE([openblas], [ dnl Reject openblas 0.3.22 - https://github.com/sagemath/sage/pull/35371 m4_pushdef([SAGE_OPENBLAS_LT_VERSION_MAJOR], [0]) m4_pushdef([SAGE_OPENBLAS_LT_VERSION_MINOR], [3]) - m4_pushdef([SAGE_OPENBLAS_LT_VERSION_MICRO], [22]) + m4_pushdef([SAGE_OPENBLAS_LT_VERSION_MICRO], [99]) m4_pushdef([SAGE_OPENBLAS_LT_VERSION], [SAGE_OPENBLAS_LT_VERSION_MAJOR.SAGE_OPENBLAS_LT_VERSION_MINOR.SAGE_OPENBLAS_LT_VERSION_MICRO]) PKG_CHECK_MODULES([OPENBLAS], [openblas >= ]SAGE_OPENBLAS_MIN_VERSION [openblas < ]SAGE_OPENBLAS_LT_VERSION, [ LIBS="$OPENBLAS_LIBS $LIBS" @@ -40,6 +40,21 @@ SAGE_SPKG_CONFIGURE([openblas], [ AC_MSG_WARN([Unable to locate the directory of openblas.pc. This should not happen!]) sage_spkg_install_openblas=yes ]) + AS_IF([test x$sage_spkg_install_openblas != xyes], [ + AC_MSG_CHECKING([the OpenBLAS version using openblas_get_config]) + AC_LANG_PUSH([C]) + AC_RUN_IFELSE([ + dnl Reject 0.3.22 - see https://github.com/sagemath/sage/pull/35377 + AC_LANG_PROGRAM([[#include + char *openblas_get_config(void); ]], + [[if (!strncmp(openblas_get_config(), "OpenBLAS 0.3.22", 15)) return 1;]]) + ], [ + AC_MSG_RESULT([good]) + ], [ + AC_MSG_RESULT([known bad version]) + sage_spkg_install_openblas=yes]) + AC_LANG_POP([C]) + ]) AS_IF([test x$sage_spkg_install_openblas != xyes], [ AC_SUBST([SAGE_SYSTEM_FACADE_PC_FILES]) AC_SUBST([SAGE_OPENBLAS_PC_COMMAND], ["\$(LN) -sf \"$OPENBLASPCDIR/openblas.pc\" \"\$(@)\""]) @@ -66,6 +81,7 @@ SAGE_SPKG_CONFIGURE([openblas], [ AC_LANG_PUSH([C]) AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include + #include char *openblas_get_config(void); int version[3]; ]], [[version[0] = version[1] = version[2] = 0; @@ -86,7 +102,8 @@ SAGE_SPKG_CONFIGURE([openblas], [ >=10000 * ]]SAGE_OPENBLAS_LT_VERSION_MAJOR[[ + 100 * ]]SAGE_OPENBLAS_LT_VERSION_MINOR[[ + ]]SAGE_OPENBLAS_LT_VERSION_MICRO[[) - return 1;]]) + return 1; + if (!strncmp(openblas_get_config(), "OpenBLAS 0.3.22", 15)) return 1;]]) ], [AS_VAR_SET([HAVE_OPENBLAS], [yes])], [AS_VAR_SET([HAVE_OPENBLAS], [no])], [AS_VAR_SET([HAVE_OPENBLAS], [yes])]) AC_LANG_POP([C]) diff --git a/build/pkgs/openssl/checksums.ini b/build/pkgs/openssl/checksums.ini index 216fe96e725..a443f001e4a 100644 --- a/build/pkgs/openssl/checksums.ini +++ b/build/pkgs/openssl/checksums.ini @@ -1,5 +1,5 @@ tarball=openssl-VERSION.tar.gz -sha1=a5305213c681a5a4322dad7347a6e66b7b6ef3c7 -md5=163bb3e58c143793d1dc6a6ec7d185d5 -cksum=439183449 +sha1=580d8a7232327fe1fa6e7db54ac060d4321f40ab +md5=61e017cf4fea1b599048f621f1490fbd +cksum=1708357994 upstream_url=https://www.openssl.org/source/openssl-VERSION.tar.gz diff --git a/build/pkgs/openssl/package-version.txt b/build/pkgs/openssl/package-version.txt index eca690e737b..67786e246ef 100644 --- a/build/pkgs/openssl/package-version.txt +++ b/build/pkgs/openssl/package-version.txt @@ -1 +1 @@ -3.0.5 +3.0.8 diff --git a/build/pkgs/sage_conf/install-requires.txt b/build/pkgs/sage_conf/install-requires.txt index 12c50205204..92f87843a26 100644 --- a/build/pkgs/sage_conf/install-requires.txt +++ b/build/pkgs/sage_conf/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sage-conf ~= 10.0rc0 +sage-conf ~= 10.0rc3 diff --git a/build/pkgs/sage_docbuild/install-requires.txt b/build/pkgs/sage_docbuild/install-requires.txt index 9427ffa651a..3bea2a59cde 100644 --- a/build/pkgs/sage_docbuild/install-requires.txt +++ b/build/pkgs/sage_docbuild/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sage-docbuild ~= 10.0rc0 +sage-docbuild ~= 10.0rc3 diff --git a/build/pkgs/sage_setup/install-requires.txt b/build/pkgs/sage_setup/install-requires.txt index 76e91a53891..edce6aef14d 100644 --- a/build/pkgs/sage_setup/install-requires.txt +++ b/build/pkgs/sage_setup/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sage-setup ~= 10.0rc0 +sage-setup ~= 10.0rc3 diff --git a/build/pkgs/sage_sws2rst/install-requires.txt b/build/pkgs/sage_sws2rst/install-requires.txt index 8a6ea6942ca..6673b9142bf 100644 --- a/build/pkgs/sage_sws2rst/install-requires.txt +++ b/build/pkgs/sage_sws2rst/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sage-sws2rst ~= 10.0rc0 +sage-sws2rst ~= 10.0rc3 diff --git a/build/pkgs/sagelib/install-requires.txt b/build/pkgs/sagelib/install-requires.txt index a46f2946a3f..648cc1710ac 100644 --- a/build/pkgs/sagelib/install-requires.txt +++ b/build/pkgs/sagelib/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sagelib ~= 10.0rc0 +sagelib ~= 10.0rc3 diff --git a/build/pkgs/sagemath_categories/install-requires.txt b/build/pkgs/sagemath_categories/install-requires.txt index a82cc377fb3..5bbc990e31c 100644 --- a/build/pkgs/sagemath_categories/install-requires.txt +++ b/build/pkgs/sagemath_categories/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sagemath-categories ~= 10.0rc0 +sagemath-categories ~= 10.0rc3 diff --git a/build/pkgs/sagemath_environment/install-requires.txt b/build/pkgs/sagemath_environment/install-requires.txt index 82784f39b75..27341713914 100644 --- a/build/pkgs/sagemath_environment/install-requires.txt +++ b/build/pkgs/sagemath_environment/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sagemath-environment ~= 10.0rc0 +sagemath-environment ~= 10.0rc3 diff --git a/build/pkgs/sagemath_objects/install-requires.txt b/build/pkgs/sagemath_objects/install-requires.txt index 4b9159f4f50..e0febeb6fe2 100644 --- a/build/pkgs/sagemath_objects/install-requires.txt +++ b/build/pkgs/sagemath_objects/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sagemath-objects ~= 10.0rc0 +sagemath-objects ~= 10.0rc3 diff --git a/build/pkgs/sagemath_repl/install-requires.txt b/build/pkgs/sagemath_repl/install-requires.txt index 598794015dd..4d857f7b9d6 100644 --- a/build/pkgs/sagemath_repl/install-requires.txt +++ b/build/pkgs/sagemath_repl/install-requires.txt @@ -1,2 +1,2 @@ # This file is updated on every release by the sage-update-version script -sagemath-repl ~= 10.0rc0 +sagemath-repl ~= 10.0rc3 diff --git a/build/pkgs/zeromq/distros/arch.txt b/build/pkgs/zeromq/distros/arch.txt new file mode 100644 index 00000000000..bd4caa9e83d --- /dev/null +++ b/build/pkgs/zeromq/distros/arch.txt @@ -0,0 +1 @@ +zeromq diff --git a/build/pkgs/zeromq/distros/gentoo.txt b/build/pkgs/zeromq/distros/gentoo.txt new file mode 100644 index 00000000000..2e8ad6358d5 --- /dev/null +++ b/build/pkgs/zeromq/distros/gentoo.txt @@ -0,0 +1 @@ +net-libs/zeromq diff --git a/build/pkgs/zeromq/patches/438d5d88392baffa6c2c5e0737d9de19d6686f0d.patch b/build/pkgs/zeromq/patches/438d5d88392baffa6c2c5e0737d9de19d6686f0d.patch new file mode 100644 index 00000000000..75bfbd8744b --- /dev/null +++ b/build/pkgs/zeromq/patches/438d5d88392baffa6c2c5e0737d9de19d6686f0d.patch @@ -0,0 +1,58 @@ +From 438d5d88392baffa6c2c5e0737d9de19d6686f0d Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Tue, 20 Dec 2022 21:45:16 +0000 +Subject: [PATCH] src/secure_allocator.hpp: define missing 'rebind' type + +`gcc-13` added an assert to standard headers to make sure custom +allocators have intended implementation of rebind type instead +of inherited rebind. gcc change: + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=64c986b49558a7 + +Without the fix build fails on this week's `gcc-13` as: + + [ 92%] Building CXX object tests/CMakeFiles/test_security_curve.dir/test_security_curve.cpp.o + In file included from /<>/gcc-13.0.0/include/c++/13.0.0/ext/alloc_traits.h:34, + from /<>/gcc-13.0.0/include/c++/13.0.0/bits/stl_uninitialized.h:64, + from /<>/gcc-13.0.0/include/c++/13.0.0/memory:69, + from tests/../src/secure_allocator.hpp:42, + from tests/../src/curve_client_tools.hpp:49, + from tests/test_security_curve.cpp:53: + /<>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h: In instantiation of 'struct std::__allocator_traits_base::__rebind, unsigned char, void>': + /<>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:94:11: required by substitution of 'template using std::__alloc_rebind = typename std::__allocator_traits_base::__rebind<_Alloc, _Up>::type [with _Alloc = zmq::secure_allocator_t; _Up = unsigned char]' + /<>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:228:8: required by substitution of 'template template using std::allocator_traits< >::rebind_alloc = std::__alloc_rebind<_Alloc, _Tp> [with _Tp = unsigned char; _Alloc = zmq::secure_allocator_t]' + /<>/gcc-13.0.0/include/c++/13.0.0/ext/alloc_traits.h:126:65: required from 'struct __gnu_cxx::__alloc_traits, unsigned char>::rebind' + /<>/gcc-13.0.0/include/c++/13.0.0/bits/stl_vector.h:88:21: required from 'struct std::_Vector_base >' + /<>/gcc-13.0.0/include/c++/13.0.0/bits/stl_vector.h:423:11: required from 'class std::vector >' + tests/../src/curve_client_tools.hpp:64:76: required from here + /<>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:70:31: error: static assertion failed: allocator_traits::rebind_alloc must be A + 70 | _Tp>::value, + | ^~~~~ + +The change adds trivial `rebind` definition with expected return type +and satisfies conversion requirements. +--- + src/secure_allocator.hpp | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/secure_allocator.hpp b/src/secure_allocator.hpp +index e0871dcc99..5e97368911 100644 +--- a/src/secure_allocator.hpp ++++ b/src/secure_allocator.hpp +@@ -99,6 +99,17 @@ bool operator!= (const secure_allocator_t &, const secure_allocator_t &) + #else + template struct secure_allocator_t : std::allocator + { ++ secure_allocator_t () ZMQ_DEFAULT; ++ ++ template ++ secure_allocator_t (const secure_allocator_t &) ZMQ_NOEXCEPT ++ { ++ } ++ ++ template struct rebind ++ { ++ typedef secure_allocator_t other; ++ }; + }; + #endif + } diff --git a/pkgs/sage-conf/VERSION.txt b/pkgs/sage-conf/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sage-conf/VERSION.txt +++ b/pkgs/sage-conf/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sage-conf_pypi/VERSION.txt b/pkgs/sage-conf_pypi/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sage-conf_pypi/VERSION.txt +++ b/pkgs/sage-conf_pypi/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sage-docbuild/VERSION.txt b/pkgs/sage-docbuild/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sage-docbuild/VERSION.txt +++ b/pkgs/sage-docbuild/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sage-setup/VERSION.txt b/pkgs/sage-setup/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sage-setup/VERSION.txt +++ b/pkgs/sage-setup/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sage-sws2rst/VERSION.txt b/pkgs/sage-sws2rst/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sage-sws2rst/VERSION.txt +++ b/pkgs/sage-sws2rst/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sagemath-categories/VERSION.txt b/pkgs/sagemath-categories/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sagemath-categories/VERSION.txt +++ b/pkgs/sagemath-categories/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sagemath-environment/VERSION.txt b/pkgs/sagemath-environment/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sagemath-environment/VERSION.txt +++ b/pkgs/sagemath-environment/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sagemath-objects/VERSION.txt b/pkgs/sagemath-objects/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sagemath-objects/VERSION.txt +++ b/pkgs/sagemath-objects/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/pkgs/sagemath-repl/VERSION.txt b/pkgs/sagemath-repl/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/pkgs/sagemath-repl/VERSION.txt +++ b/pkgs/sagemath-repl/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/src/.relint.yml b/src/.relint.yml index acf727359fa..7996583cb4f 100644 --- a/src/.relint.yml +++ b/src/.relint.yml @@ -49,7 +49,7 @@ namespace package. Type import_statements("SOME_IDENTIFIER") to find a more specific import, or use 'sage --fiximports' to fix automatically in the source file. # Keep in sync with SAGE_ROOT/src/sage/misc/replace_dot_all.py - pattern: 'from\s+sage(|[.](arith|categories|combinat|crypto|databases|data_structures|dynamics|ext|game_theory|games|graphs|groups|interfaces|manifolds|matrix|matroids|misc|modules|monoids|numerical|probability|quadratic_forms|quivers|rings|sat|schemes|sets|stats|tensor)[a-z0-9_.]*|[.]libs)[.]all\s+import' + pattern: 'from\s+sage(|[.](arith|categories|combinat|crypto|databases|data_structures|dynamics|ext|game_theory|games|graphs|groups|interfaces|manifolds|matrix|matroids|misc|modules|monoids|numerical|probability|quadratic_forms|quivers|rings|sat|schemes|sets|stats|symbolic|tensor)[a-z0-9_.]*|[.]libs)[.]all\s+import' # imports from .all are allowed in all.py; also allow in some modules that need sage.all filePattern: '(.*/|)(?!(all|benchmark|dev_tools|parsing|sage_eval))[^/.]*[.](py|pyx|pxi)$' diff --git a/src/VERSION.txt b/src/VERSION.txt index ac3700a9a2a..61e1e964f69 100644 --- a/src/VERSION.txt +++ b/src/VERSION.txt @@ -1 +1 @@ -10.0.rc0 +10.0.rc3 diff --git a/src/bin/sage-version.sh b/src/bin/sage-version.sh index 657bc30d205..3163501ac4d 100644 --- a/src/bin/sage-version.sh +++ b/src/bin/sage-version.sh @@ -4,6 +4,6 @@ # which stops "setup.py develop" from rewriting it as a Python file. : # This file is auto-generated by the sage-update-version script, do not edit! -SAGE_VERSION='10.0.rc0' -SAGE_RELEASE_DATE='2023-04-23' -SAGE_VERSION_BANNER='SageMath version 10.0.rc0, Release Date: 2023-04-23' +SAGE_VERSION='10.0.rc3' +SAGE_RELEASE_DATE='2023-05-12' +SAGE_VERSION_BANNER='SageMath version 10.0.rc3, Release Date: 2023-05-12' diff --git a/src/sage/categories/classical_crystals.py b/src/sage/categories/classical_crystals.py index 373d07378d9..744b1cb6e44 100644 --- a/src/sage/categories/classical_crystals.py +++ b/src/sage/categories/classical_crystals.py @@ -181,7 +181,7 @@ def demazure_character(self, w, f=None): u = self.algebra(ZZ).sum_of_monomials(self.module_generators) u = self.demazure_operator(u, word) if f is None: - from sage.symbolic.all import SR as P + from sage.symbolic.ring import SR as P x = [P.var('x%s' % (i+1)) for i in range(n)] # TODO: use P.linear_combination when PolynomialRing will be a ModulesWithBasis return sum((coeff*prod((x[i]**(c.weight()[i]) for i in range(n)), P.one()) for c, coeff in u), P.zero()) diff --git a/src/sage/functions/error.py b/src/sage/functions/error.py index ca665622f20..bd12c2eb3a8 100644 --- a/src/sage/functions/error.py +++ b/src/sage/functions/error.py @@ -46,10 +46,10 @@ from sage.symbolic.expression import Expression from sage.functions.all import exp from sage.misc.functional import sqrt -from sage.symbolic.constants import pi +from sage.symbolic.constants import I, pi from sage.rings.rational import Rational from sage.rings.infinity import unsigned_infinity -from sage.symbolic.expression import I + class Function_erf(BuiltinFunction): r""" diff --git a/src/sage/misc/functional.py b/src/sage/misc/functional.py index 6e0e2abde37..aee5d035a66 100644 --- a/src/sage/misc/functional.py +++ b/src/sage/misc/functional.py @@ -1881,8 +1881,7 @@ def _do_sqrt(x, prec=None, extend=True, all=False): from sage.rings.complex_mpfr import ComplexField return ComplexField(prec)(x).sqrt(all=all) if x == -1: - from sage.symbolic.expression import I - z = I + from sage.symbolic.constants import I as z else: from sage.symbolic.ring import SR z = SR(x).sqrt() diff --git a/src/sage/modular/modform_hecketriangle/element.py b/src/sage/modular/modform_hecketriangle/element.py index ae58a6ad08f..9cb02cb7cde 100644 --- a/src/sage/modular/modform_hecketriangle/element.py +++ b/src/sage/modular/modform_hecketriangle/element.py @@ -285,7 +285,7 @@ def lseries(self, num_prec=None, max_imaginary_part=0, max_asymp_coeffs=40): -23.9781792831... """ from sage.rings.integer_ring import ZZ - from sage.symbolic.all import pi + from sage.symbolic.constants import pi from sage.misc.functional import sqrt from sage.lfunctions.dokchitser import Dokchitser diff --git a/src/sage/modules/vector_symbolic_dense.py b/src/sage/modules/vector_symbolic_dense.py index 12152d97fcb..200d82ebf15 100644 --- a/src/sage/modules/vector_symbolic_dense.py +++ b/src/sage/modules/vector_symbolic_dense.py @@ -55,7 +55,7 @@ #***************************************************************************** from . import free_module_element -from sage.symbolic.all import Expression +from sage.symbolic.expression import Expression def apply_map(phi): diff --git a/src/sage/quadratic_forms/genera/genus.py b/src/sage/quadratic_forms/genera/genus.py index f80c2ae7d40..e15a95e9dff 100644 --- a/src/sage/quadratic_forms/genera/genus.py +++ b/src/sage/quadratic_forms/genera/genus.py @@ -121,7 +121,8 @@ def genera(sig_pair, determinant, max_scale=None, even=False): return genera -genera = staticmethod(genera) +# #35557: In Python < 3.10, a staticmethod cannot be called directly +_genera_staticmethod = staticmethod(genera) def _local_genera(p, rank, det_val, max_scale, even): diff --git a/src/sage/quadratic_forms/quadratic_form.py b/src/sage/quadratic_forms/quadratic_form.py index 8d5bd96bc32..e2691795ba4 100644 --- a/src/sage/quadratic_forms/quadratic_form.py +++ b/src/sage/quadratic_forms/quadratic_form.py @@ -502,9 +502,8 @@ class QuadraticForm(SageObject): ]) # Genus - lazy_import("sage.quadratic_forms.genera.genus", [ - "genera" - ]) + lazy_import("sage.quadratic_forms.genera.genus", + "_genera_staticmethod", as_="genera") def __init__(self, R, n=None, entries=None, unsafe_initialization=False, number_of_automorphisms=None, determinant=None): """ diff --git a/src/sage/rings/infinity.py b/src/sage/rings/infinity.py index aabe2572f31..c1ac3aee408 100644 --- a/src/sage/rings/infinity.py +++ b/src/sage/rings/infinity.py @@ -216,15 +216,17 @@ #***************************************************************************** from sys import maxsize + +import sage.rings.abc + +from sage.misc.fast_methods import Singleton +from sage.misc.lazy_import import lazy_import from sage.rings.ring import Ring from sage.structure.element import RingElement, InfinityElement from sage.structure.richcmp import rich_to_bool, richcmp -from sage.misc.fast_methods import Singleton -import sage.rings.abc -import sage.rings.integer -import sage.rings.rational -import sage.rings.integer_ring +lazy_import('sage.rings.integer', 'Integer') + _obj = {} class _uniq(): @@ -327,12 +329,11 @@ def __pari__(self): sage: pari(oo) +oo """ - # For some reason, it seems problematic to import sage.libs.all.pari, - # so we call it directly. + from sage.libs.pari.all import pari if self._sign >= 0: - return sage.libs.all.pari('oo') + return pari('oo') else: - return sage.libs.all.pari('-oo') + return pari('-oo') def _latex_(self): r""" @@ -850,7 +851,7 @@ def _div_(self, other): 0 """ if isinstance(other, UnsignedInfinity): - return sage.rings.integer_ring.ZZ(0) + return Integer(0) raise ValueError("quotient of number < oo by number < oo not defined") def _richcmp_(self, other, op): @@ -1390,7 +1391,7 @@ def _mul_(self, other): if other.is_zero(): if isinstance(self, InfinityElement): raise SignError("cannot multiply infinity by zero") - return sage.rings.integer_ring.ZZ(0) + return Integer(0) if self.value < 0: if isinstance(other, InfinityElement): return -other @@ -1402,7 +1403,7 @@ def _mul_(self, other): if self.value == 0: if isinstance(other, InfinityElement): raise SignError("cannot multiply infinity by zero") - return sage.rings.integer_ring.ZZ(0) + return Integer(0) def _div_(self, other): """ diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py index 05342a39364..1627b841c30 100644 --- a/src/sage/rings/number_field/number_field.py +++ b/src/sage/rings/number_field/number_field.py @@ -8285,7 +8285,8 @@ def _coerce_map_from_(self, R): sage: K.coerce(sqrt(2)) Traceback (most recent call last): ... - TypeError: no canonical coercion from Symbolic Ring to Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095? + TypeError: no canonical coercion from Symbolic Ring to Number Field in a + with defining polynomial x^2 - 2 with a = 1.414213562373095? TESTS:: diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index b8ecbb7a14b..9000c358b26 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -8234,7 +8234,7 @@ cdef class Polynomial(CommutativePolynomial): if isinstance(L, sage.rings.abc.SymbolicRing): if self.degree() == 2: from sage.misc.functional import sqrt - from sage.symbolic.expression import I + from sage.symbolic.constants import I coeffs = self.list() D = coeffs[1]*coeffs[1] - 4*coeffs[0]*coeffs[2] l = None diff --git a/src/sage/rings/real_double.pyx b/src/sage/rings/real_double.pyx index 72bb242078d..21a2f293ee9 100644 --- a/src/sage/rings/real_double.pyx +++ b/src/sage/rings/real_double.pyx @@ -1522,7 +1522,7 @@ cdef class RealDoubleElement(FieldElement): def round(self): """ Round ``self`` to the nearest integer. - + This uses the convention of rounding half to even (i.e., if the fractional part of ``self`` is `0.5`, then it is rounded to the nearest even integer). diff --git a/src/sage/rings/real_mpfr.pyx b/src/sage/rings/real_mpfr.pyx index 0dd8adb3040..18d1345ec81 100644 --- a/src/sage/rings/real_mpfr.pyx +++ b/src/sage/rings/real_mpfr.pyx @@ -153,10 +153,6 @@ from .rational cimport Rational from sage.categories.map cimport Map -cdef ZZ, QQ, RDF -from .integer_ring import ZZ -from .rational_field import QQ -from .real_double import RDF from .real_double cimport RealDoubleElement import sage.rings.rational_field @@ -729,6 +725,10 @@ cdef class RealField_class(sage.rings.abc.RealField): sage: R.get_action(ZZ) Right scalar multiplication by Integer Ring on Univariate Polynomial Ring in x over Real Field with 53 bits of precision """ + from .integer_ring import ZZ + from .rational_field import QQ + from .real_double import RDF + if S is ZZ: return ZZtoRR(ZZ, self) elif S is QQ: @@ -1872,6 +1872,8 @@ cdef class RealNumber(sage.structure.element.RingElement): sage: RealField(100)(2).imag() 0 """ + from .integer_ring import ZZ + return ZZ(0) def str(self, int base=10, size_t digits=0, *, no_sci=None, @@ -2992,7 +2994,7 @@ cdef class RealNumber(sage.structure.element.RingElement): """ Round ``self`` to the nearest representable integer, rounding halfway cases away from zero. - + .. NOTE:: The rounding mode of the parent field does not affect the result. diff --git a/src/sage/symbolic/all.py b/src/sage/symbolic/all.py index 63e6b0037a8..399ab56e78c 100644 --- a/src/sage/symbolic/all.py +++ b/src/sage/symbolic/all.py @@ -1,11 +1,10 @@ from sage.misc.lazy_import import lazy_import -lazy_import("sage.symbolic.expression", "I", deprecation=(18036, +lazy_import("sage.symbolic.constants", "I", deprecation=(18036, "import I from sage.symbolic.constants for the imaginary unit viewed as an element of SR, or from sage.rings.imaginary_unit for the element of ZZ[i]")) -lazy_import("sage.symbolic.expression", "I", as_="i", deprecation=(18036, +lazy_import("sage.symbolic.constants", "I", as_="i", deprecation=(18036, "import I from sage.symbolic.constants for the imaginary unit viewed as an element of SR, or from sage.rings.imaginary_unit for the element of ZZ[i]")) -import sage.symbolic.expression # initialize pynac before .ring from .ring import SR from .constants import (pi, e, NaN, golden_ratio, log2, euler_gamma, catalan, khinchin, twinprime, mertens, glaisher) diff --git a/src/sage/symbolic/comparison_impl.pxi b/src/sage/symbolic/comparison_impl.pxi index 90a921112ac..c07ed620de1 100644 --- a/src/sage/symbolic/comparison_impl.pxi +++ b/src/sage/symbolic/comparison_impl.pxi @@ -35,8 +35,6 @@ There is also a mixed version: from cpython cimport * -from sage.symbolic.ring import SR - cdef int print_order_c(Expression lhs, Expression rhs): """ @@ -80,8 +78,10 @@ cpdef int print_order(lhs, rhs) except -2: 1 """ if not isinstance(lhs, Expression): + from sage.symbolic.ring import SR lhs = SR(lhs) if not isinstance(rhs, Expression): + from sage.symbolic.ring import SR rhs = SR(rhs) return print_order_c(lhs, rhs) @@ -103,7 +103,10 @@ class _print_key(): sage: _print_key(1) """ - self.ex = ex if isinstance(ex, Expression) else SR(ex) + if not isinstance(ex, Expression): + from sage.symbolic.ring import SR + ex = SR(ex) + self.ex = ex def __lt__(self, other): """ @@ -171,7 +174,10 @@ class _math_key(): sage: _math_key(1) """ - self.ex = ex if isinstance(ex, Expression) else SR(ex) + if not isinstance(ex, Expression): + from sage.symbolic.ring import SR + ex = SR(ex) + self.ex = ex def __lt__(self, other): """ @@ -284,8 +290,10 @@ cpdef int mixed_order(lhs, rhs) except -2: if lhs is rhs: return 0 if not isinstance(lhs, Expression): + from sage.symbolic.ring import SR lhs = SR(lhs) if not isinstance(rhs, Expression): + from sage.symbolic.ring import SR rhs = SR(rhs) less_than = _mixed_key(lhs) < _mixed_key(rhs) if less_than: @@ -318,7 +326,10 @@ class _mixed_key(): sage: _mixed_key(1) """ - self.ex = ex if isinstance(ex, Expression) else SR(ex) + if not isinstance(ex, Expression): + from sage.symbolic.ring import SR + ex = SR(ex) + self.ex = ex def __lt__(self, other): """ diff --git a/src/sage/symbolic/constants.py b/src/sage/symbolic/constants.py index 587b63e2dcb..fe99c7a6656 100644 --- a/src/sage/symbolic/constants.py +++ b/src/sage/symbolic/constants.py @@ -227,7 +227,10 @@ constants_name_table[repr(unsigned_infinity)] = unsigned_infinity constants_name_table[repr(minus_infinity)] = minus_infinity -from sage.symbolic.expression import register_symbol, I +from sage.symbolic.expression import register_symbol, init_pynac_I + +I = init_pynac_I() + register_symbol(infinity, {'maxima':'inf'}, 0) register_symbol(minus_infinity, {'maxima':'minf'}, 0) register_symbol(unsigned_infinity, {'maxima':'infinity'}, 0) diff --git a/src/sage/symbolic/constants_c_impl.pxi b/src/sage/symbolic/constants_c_impl.pxi index 14369e848ca..093f9b79037 100644 --- a/src/sage/symbolic/constants_c_impl.pxi +++ b/src/sage/symbolic/constants_c_impl.pxi @@ -17,7 +17,6 @@ The constant `e` #***************************************************************************** from sage.symbolic.expression cimport Expression -from sage.symbolic.ring import SR # keep exp(1) for fast access @@ -126,6 +125,8 @@ cdef class E(Expression): [e 0] [0 e] """ + from sage.symbolic.ring import SR + global exp_one exp_one = SR.one().exp() Expression.__init__(self, SR, exp_one) @@ -171,7 +172,8 @@ cdef class E(Expression): try: return right.exp() except AttributeError: + from sage.symbolic.ring import SR return SR(right).exp() else: + from sage.symbolic.ring import SR return SR(left)**exp_one - diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx index dd9a8c8c538..7f3afff8bce 100644 --- a/src/sage/symbolic/expression.pyx +++ b/src/sage/symbolic/expression.pyx @@ -1053,9 +1053,9 @@ cdef class Expression(Expression_abc): Check if :trac:`7876` is fixed:: - sage: (1/2-1/2*I )*sqrt(2) + sage: (1/2-1/2*I)*sqrt(2) -(1/2*I - 1/2)*sqrt(2) - sage: latex((1/2-1/2*I )*sqrt(2)) + sage: latex((1/2-1/2*I)*sqrt(2)) -\left(\frac{1}{2} i - \frac{1}{2}\right) \, \sqrt{2} Check if :trac:`9632` is fixed:: @@ -2844,7 +2844,7 @@ cdef class Expression(Expression_abc): def _is_registered_constant_(self): """ - Return True if this symbolic expression is internally represented as + Return ``True`` if this symbolic expression is internally represented as a constant. This function is intended to provide an interface to query the internal @@ -7780,6 +7780,8 @@ cdef class Expression(Expression_abc): """ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.fraction_field import FractionField + from sage.symbolic.ring import SR + nu = SR(self.numerator()).polynomial(base_ring) de = SR(self.denominator()).polynomial(base_ring) vars = sorted(set(nu.variables() + de.variables()), key=repr) @@ -13235,6 +13237,7 @@ cdef class Expression(Expression_abc): integral, _normalize_integral_input R = self._parent if isinstance(R, sage.rings.abc.CallableSymbolicExpressionRing): + from sage.symbolic.ring import SR f = SR(self) f, v, a, b = _normalize_integral_input(f, *args) # Definite integral with respect to a positional variable. @@ -13779,6 +13782,8 @@ cpdef new_Expression(parent, x): exp = x elif isinstance(x, Factorization): from sage.misc.misc_c import prod + from sage.symbolic.ring import SR + return prod([SR(p)**e for p,e in x], SR(x.unit())) elif x in Sets(): from sage.rings.integer_ring import ZZ @@ -13854,6 +13859,7 @@ cpdef new_Expression_from_pyobject(parent, x, bint force=True, bint recursive=Tr # tuples can be packed into exprseq if isinstance(x, (tuple, list)): + from sage.symbolic.ring import SR for e in x: obj = SR._force_pyobject(e, force=(not recursive)) ex_v.push_back((obj)._gobj) diff --git a/src/sage/symbolic/expression_conversions.py b/src/sage/symbolic/expression_conversions.py index a8236db2a0b..6073110887a 100644 --- a/src/sage/symbolic/expression_conversions.py +++ b/src/sage/symbolic/expression_conversions.py @@ -18,7 +18,6 @@ from operator import eq, ne, gt, lt, ge, le, mul, pow, neg, add, truediv from functools import reduce -from sage.rings.rational_field import QQ from sage.symbolic.ring import SR from sage.structure.element import Expression from sage.functions.all import exp @@ -1224,6 +1223,8 @@ def arithmetic(self, ex, operator): if operator is pow: from sage.symbolic.constants import e, pi, I + from sage.rings.rational_field import QQ + base, expt = ex.operands() if base == e and expt / (pi * I) in QQ: return exp(expt)._algebraic_(self.field) @@ -1317,6 +1318,7 @@ def composition(self, ex, operator): if not (SR(-1).sqrt() * operand).is_real(): raise ValueError("unable to represent as an algebraic number") # Coerce (not convert, see #22571) arg to a rational + from sage.rings.rational_field import QQ arg = operand.imag()/(2*ex.parent().pi()) try: rat_arg = QQ.coerce(arg.pyobject()) @@ -2226,8 +2228,7 @@ class Exponentialize(ExpressionTreeWalker): from sage.functions.hyperbolic import sinh, cosh, sech, csch, tanh, coth from sage.functions.log import exp from sage.functions.trig import sin, cos, sec, csc, tan, cot - from sage.rings.imaginary_unit import I - from sage.symbolic.constants import e + from sage.symbolic.constants import e, I from sage.rings.integer import Integer from sage.symbolic.ring import SR from sage.calculus.var import function diff --git a/src/sage/symbolic/function.pyx b/src/sage/symbolic/function.pyx index 4979188159a..0d347103756 100644 --- a/src/sage/symbolic/function.pyx +++ b/src/sage/symbolic/function.pyx @@ -918,7 +918,7 @@ cdef class BuiltinFunction(Function): return [arg] def __call__(self, *args, bint coerce=True, bint hold=False, - bint dont_call_method_on_arg=False): + bint dont_call_method_on_arg=False): r""" Evaluate this function on the given arguments and return the result. diff --git a/src/sage/symbolic/function_factory.py b/src/sage/symbolic/function_factory.py index e32480bd99a..4c2542c77e3 100644 --- a/src/sage/symbolic/function_factory.py +++ b/src/sage/symbolic/function_factory.py @@ -193,8 +193,7 @@ def function(s, **kwds) -> Union[SymbolicFunction, list[SymbolicFunction]]: (a, b) sage: cr = function('cr') sage: f = cr(a) - sage: g = f.diff(a).integral(b) - sage: g + sage: g = f.diff(a).integral(b); g b*diff(cr(a), a) sage: foo = function("foo", nargs=2) sage: x,y,z = var("x y z") @@ -218,7 +217,8 @@ def function(s, **kwds) -> Union[SymbolicFunction, list[SymbolicFunction]]: sage: 2*f Traceback (most recent call last): ... - TypeError: unsupported operand parent(s) for *: 'Integer Ring' and '' + TypeError: unsupported operand parent(s) for *: 'Integer Ring' and + '' You now need to evaluate the function in order to do the arithmetic:: diff --git a/src/sage/symbolic/pynac_impl.pxi b/src/sage/symbolic/pynac_impl.pxi index a610add5ef8..114257901a2 100644 --- a/src/sage/symbolic/pynac_impl.pxi +++ b/src/sage/symbolic/pynac_impl.pxi @@ -1873,7 +1873,7 @@ cdef py_atan2(x, y): sage: atan2(RDF(-3), RDF(-1)) -1.8925468811915387 """ - from sage.symbolic.constants import pi, NaN + from sage.symbolic.constants import I, pi, NaN P = coercion_model.common_parent(x, y) if P is ZZ: P = RR @@ -2417,22 +2417,21 @@ import sage.rings.real_double ginac_pyinit_Float(sage.rings.real_double.RDF) cdef Element pynac_I -I = None def init_pynac_I(): """ - Initialize the numeric I object in pynac. We use the generator of QQ(i). + Initialize the numeric ``I`` object in pynac. We use the generator of ``QQ(i)``. EXAMPLES:: - sage: from sage.symbolic.expression import I as symbolic_I + sage: from sage.symbolic.constants import I as symbolic_I sage: symbolic_I I sage: symbolic_I^2 -1 - Note that conversions to real fields will give TypeErrors:: + Note that conversions to real fields will give :class:`TypeError`:: sage: float(symbolic_I) Traceback (most recent call last): @@ -2480,22 +2479,22 @@ def init_pynac_I(): sage: maxima(2*symbolic_I) 2*%i - TESTS: + TESTS:: sage: repr(symbolic_I) 'I' sage: latex(symbolic_I) i - sage: sage.symbolic.expression.init_pynac_I() - sage: type(sage.symbolic.expression.I) + sage: I = sage.symbolic.expression.init_pynac_I() + sage: type(I) - sage: type(sage.symbolic.expression.I.pyobject()) + sage: type(I.pyobject()) Check that :trac:`10064` is fixed:: - sage: y = symbolic_I*symbolic_I*x / x # so y is the expression -1 + sage: y = symbolic_I*symbolic_I*x / x # so y is the expression -1 sage: y.is_positive() False sage: z = -x / x @@ -2509,12 +2508,12 @@ def init_pynac_I(): sage: x * ((3*I + 4)*x - 5) ((3*I + 4)*x - 5)*x """ - global pynac_I, I + global pynac_I from sage.rings.number_field.number_field import GaussianField pynac_I = GaussianField().gen() ginac_pyinit_I(pynac_I) from .ring import SR - I = new_Expression_from_GEx(SR, g_I) + return new_Expression_from_GEx(SR, g_I) def init_function_table(): @@ -2610,6 +2609,5 @@ def init_function_table(): init_function_table() -init_pynac_I() set_ginac_fn_serial() diff --git a/src/sage/version.py b/src/sage/version.py index cb3cc3ab01d..81a64f4f2fd 100644 --- a/src/sage/version.py +++ b/src/sage/version.py @@ -1,5 +1,5 @@ # Sage version information for Python scripts # This file is auto-generated by the sage-update-version script, do not edit! -version = '10.0.rc0' -date = '2023-04-23' -banner = 'SageMath version 10.0.rc0, Release Date: 2023-04-23' +version = '10.0.rc3' +date = '2023-05-12' +banner = 'SageMath version 10.0.rc3, Release Date: 2023-05-12'