diff --git a/.ci/create-changes-html.sh b/.ci/create-changes-html.sh
index 0e80d0d2814..0cc86f34b13 100755
--- a/.ci/create-changes-html.sh
+++ b/.ci/create-changes-html.sh
@@ -16,6 +16,12 @@ echo '' >> CHANGES.html
echo '' >> CHANGES.html
cat >> CHANGES.html << EOF
+
; d' \
-e 's;#L[0-9]*";";' \
+ -e 's;tab-set--[0-9]*-;tab-set-;' \
&& true)
# Create git repo from old doc
(cd doc && \
git init && \
- (echo "*.svg binary"; echo "*.pdf binary") >> .gitattributes && \
- (echo ".buildinfo"; echo '*.inv'; echo '.git*'; echo '*.svg'; echo '*.pdf'; echo '*.png'; echo 'searchindex.js') > .gitignore; \
+ (echo "*.svg binary"; echo "*.pdf binary") > .gitattributes && \
+ (echo ".buildinfo"; echo '*.inv'; echo '.git*'; echo '*.svg'; echo '*.pdf'; echo '*.png'; echo 'searchindex.js') > .gitignore && \
git add -A && git commit --quiet -m 'old')
fi
- name: Build doc
id: docbuild
- if: (success() || failure()) && steps.worktree.outcome == 'success' && !startsWith(github.ref, 'refs/tags/')
+ if: steps.container.outcome == 'success' && !startsWith(github.ref, 'refs/tags/')
# Always non-incremental because of the concern that
# incremental docbuild may introduce broken links (inter-file references) though build succeeds
run: |
@@ -175,18 +193,22 @@ jobs:
export MAKE="make -j5 --output-sync=recurse" SAGE_NUM_THREADS=5
make doc-clean doc-uninstall
export SAGE_USE_CDNS=yes
+ export SAGE_DOCBUILD_OPTS="--include-tests-blocks"
./config.status && make sagemath_doc_html-no-deps
shell: sh .ci/docker-exec-script.sh BUILD /sage {0}
- name: Copy doc
id: copy
- if: (success() || failure()) && steps.docbuild.outcome == 'success'
+ if: steps.docbuild.outcome == 'success'
run: |
set -ex
- # We copy everything to a local folder
- docker cp --follow-link BUILD:/sage/local/share/doc/sage/html doc
- docker cp --follow-link BUILD:/sage/local/share/doc/sage/index.html doc
- # Check if we are on PR
+ # Simpler "docker cp --follow-link ... doc" does not work
+ mkdir -p doc
+ mkdir -p temp
+ docker cp --follow-link BUILD:/sage/local/share/doc/sage/html temp
+ docker cp --follow-link BUILD:/sage/local/share/doc/sage/index.html temp
+ cp -r -L temp/* doc/
+ # Check if we are on pull request event
PR_NUMBER=""
if [[ -n "$GITHUB_REF" ]]; then
if [[ "$GITHUB_REF" =~ refs/pull/([0-9]+)/merge ]]; then
@@ -199,9 +221,10 @@ jobs:
# Wipe out chronic diffs of new doc against old doc before creating CHANGES.html
(cd doc && \
find . -name "*.html" | xargs sed -i -e '/This is documentation/ s/ built with GitHub PR .* for development/ for development/' \
- -e '/;,\;; d' \
-e 's;#L[0-9]*";";' \
+ -e 's;tab-set--[0-9]*-;tab-set-;' \
&& git commit -a -m 'wipe-out')
# Since HEAD is at commit 'wipe-out', HEAD~1 is commit 'new' (new doc), HEAD~2 is commit 'old' (old doc)
(cd doc && git diff $(git rev-parse HEAD~2) -- "*.html") > diff.txt
@@ -221,20 +244,31 @@ jobs:
- name: Upload doc
id: upload
- if: (success() || failure()) && steps.copy.outcome == 'success'
+ if: steps.copy.outcome == 'success'
uses: actions/upload-artifact@v4
with:
name: doc
path: doc.zip
+ - name: Upload doc-develop
+ # artifact doc-develop is used for doc build on pull request event
+ id: upload-push
+ if: steps.copy.outcome == 'success' && github.event_name == 'push'
+ uses: actions/upload-artifact@v4
+ with:
+ name: doc-${{ github.ref_name }}
+ path: doc.zip
+
#
- # On release tags: live doc and wheels
+ # On release tag event
#
- name: Build live doc
id: buildlivedoc
- if: (success() || failure()) && startsWith(github.ref, 'refs/tags/')
+ if: startsWith(github.ref, 'refs/tags/')
run: |
+ # Avoid running out of disk space
+ rm -rf upstream
export MAKE="make -j5 --output-sync=recurse" SAGE_NUM_THREADS=5
export PATH="build/bin:$PATH"
eval $(sage-print-system-package-command auto update)
@@ -249,7 +283,7 @@ jobs:
- name: Copy live doc
id: copylivedoc
- if: (success() || failure()) && steps.buildlivedoc.outcome == 'success'
+ if: steps.buildlivedoc.outcome == 'success'
run: |
mkdir -p ./livedoc
# We copy everything to a local folder
@@ -259,7 +293,7 @@ jobs:
zip -r livedoc.zip livedoc
- name: Upload live doc
- if: (success() || failure()) && steps.copylivedoc.outcome == 'success'
+ if: steps.copylivedoc.outcome == 'success'
uses: actions/upload-artifact@v4
with:
name: livedoc
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 4f3d1441544..a7d5ecc8835 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -170,7 +170,7 @@ jobs:
ref: ${{ inputs.sage_ref }}
fetch-depth: 10000
- name: Download upstream artifact
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
path: upstream
name: ${{ inputs.upstream_artifact }}
@@ -260,7 +260,7 @@ jobs:
cp -r .tox/$TOX_ENV/* "artifacts/$LOGS_ARTIFACT_NAME"
rm -rf "artifacts/$LOGS_ARTIFACT_NAME"/{bin,lib,pyvenv.cfg}
if: always()
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
path: artifacts
name: ${{ env.LOGS_ARTIFACT_NAME }}
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index 3d0732bcb7e..38c7feb9ad8 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -91,7 +91,7 @@ jobs:
run: |
"${{ steps.python.outputs.python-path }}" -m pip install pipx
- name: Download upstream artifact
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
path: upstream
name: ${{ inputs.upstream_artifact }}
@@ -108,7 +108,7 @@ jobs:
GH_TOKEN: ${{ github.token }}
SAGE_CI_FIXES_FROM_REPOSITORIES: ${{ vars.SAGE_CI_FIXES_FROM_REPOSITORIES }}
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
path: sage-local-artifact
name: ${{ env.LOCAL_ARTIFACT_NAME }}
@@ -147,7 +147,7 @@ jobs:
run: |
mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"; cp -r .tox/*/log "artifacts/$LOGS_ARTIFACT_NAME"
if: always()
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
path: artifacts
name: ${{ env.LOGS_ARTIFACT_NAME }}
@@ -165,7 +165,7 @@ jobs:
run: |
mkdir -p sage-local-artifact && (cd .tox/$TOX_ENV && rm -f "local/lib64" && tar -cf - $(pwd)) > sage-local-artifact/sage-${{ env.TOX_ENV }}-${{ inputs.stage }}.tar
if: contains(inputs.stage, '1')
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
path: sage-local-artifact/sage-${{ env.TOX_ENV }}-${{ inputs.stage }}.tar
name: ${{ env.LOCAL_ARTIFACT_NAME }}
diff --git a/.gitignore b/.gitignore
index 7d8c2f0adc4..0df6ef10d98 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,12 +28,15 @@
/src/lib/pkgconfig
# Environment files generated by bootstrap-conda.
-# The files without Python version are no longer generated
+# The files without Python version and in src are no longer generated
# but may still be in users' directories.
/environment.yml
/environment-3.9.yml
/environment-3.10.yml
/environment-3.11.yml
+/environment-dev-3.9.yml
+/environment-dev-3.10.yml
+/environment-dev-3.11.yml
/environment-optional.yml
/environment-optional-3.9.yml
/environment-optional-3.10.yml
@@ -147,6 +150,7 @@ __pycache__/
# Generated by sage_setup.autogen
/src/sage/ext/interpreters
!/src/sage/ext/interpreters/meson.build
+!/src/sage/ext/interpreters/README
# Generated Cython files
*.so
@@ -309,6 +313,7 @@ build-install
build/cp*
# Meson temporary files
+subprojects/wrapdb.json
src/sage/interfaces/__init__.py
src/sage/crypto/block_cipher/__init__.py
src/sage/crypto/public_key/__init__.py
diff --git a/.gitpod.yml b/.gitpod.yml
index 6d7c9ec93df..6ebcf7f67a4 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -7,7 +7,7 @@ tasks:
- name: Setup
# Create conda environment, then configure and build sage
init: >-
- && mamba env create --file src/environment-dev-3.11-linux.yml --prefix venv
+ && mamba env create --file environment-dev-3.11-linux.yml --prefix venv
&& conda config --append envs_dirs $(pwd)
&& conda activate $(pwd)/venv
&& ./bootstrap
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 052b55fe189..bf6ab3e7c3a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,7 +1,5 @@
{
- // This settings file is not ignored by git. It should be kept in sync with
- // the trac repo.
- "python.defaultInterpreterPath": "./venv/bin/python3",
+ // This settings file is not ignored by git.
"files.exclude": {
"**/__pycache__": true,
"src/**/*.cpp": true,
diff --git a/CITATION.cff b/CITATION.cff
index a3fbfd7caed..c2d778402ac 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -4,8 +4,8 @@ title: SageMath
abstract: SageMath is a free open-source mathematics software system.
authors:
- name: "The SageMath Developers"
-version: 10.5.beta8
+version: 10.5.rc0
doi: 10.5281/zenodo.8042260
-date-released: 2024-10-26
+date-released: 2024-11-16
repository-code: "https://github.com/sagemath/sage"
url: "https://www.sagemath.org/"
diff --git a/Makefile b/Makefile
index 53d2c689843..96d1ba62e94 100644
--- a/Makefile
+++ b/Makefile
@@ -122,7 +122,7 @@ sagelib-clean:
rm -rf c_lib .cython_version cython_debug; \
rm -rf build; find . -name '*.pyc' -o -name "*.so" | xargs rm -f; \
rm -f $$(find . -name "*.pyx" | sed 's/\(.*\)[.]pyx$$/\1.c \1.cpp/'); \
- rm -rf sage/ext/interpreters) \
+ cd sage/ext/interpreters/ && rm -f *.so *.c *.h *.py* *.pxd) \
&& (cd "$(SAGE_ROOT)/build/pkgs/sagelib/src/" && rm -rf build); \
fi
diff --git a/VERSION.txt b/VERSION.txt
index 5f39e0b41df..539643e825a 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-SageMath version 10.5.beta8, Release Date: 2024-10-26
+SageMath version 10.5.rc0, Release Date: 2024-11-16
diff --git a/bootstrap b/bootstrap
index 5f04a1e208c..9d19e756a38 100755
--- a/bootstrap
+++ b/bootstrap
@@ -227,9 +227,6 @@ save () {
src/doc/en/installation/*.txt \
$(find src/doc/en/reference/spkg -name index.rst -prune -o -maxdepth 1 -name "*.rst" -print) \
environment-3.[89].yml environment-3.1[0-9].yml \
- src/environment-3.[89].yml src/environment-3.1[0-9].yml \
- environment-optional-3.[89].yml environment-optional-3.1[0-9].yml \
- src/environment-optional-3.[89].yml src/environment-optional-3.1[0-9].yml \
src/Pipfile \
src/pyproject.toml \
src/requirements.txt \
diff --git a/bootstrap-conda b/bootstrap-conda
index 27e657281f9..157700ee809 100755
--- a/bootstrap-conda
+++ b/bootstrap-conda
@@ -84,7 +84,7 @@ unset ENABLE_SYSTEM_SITE_PACKAGES
echo >&2 $0:$LINENO: generate conda environment files
(
- echo "name: sage-build"
+ echo "name: sage"
echo "channels:"
echo " - conda-forge"
echo " - nodefaults"
@@ -106,58 +106,18 @@ echo >&2 $0:$LINENO: generate conda environment files
for pkg in $SAGELIB_SYSTEM_PACKAGES; do
echo " - $pkg"
done
- ) > src/environment-template.yml
-
- (
- cat environment-template.yml
- echo " # optional packages"
- for pkg in $OPTIONAL_SYSTEM_PACKAGES; do
- echo " - $pkg"
- done
- ) > environment-optional-template.yml
+ ) > environment-template.yml
(
- sed 's/name: sage/name: sage-dev/' src/environment-template.yml
+ sed 's/name: sage/name: sage-dev/' environment-template.yml
echo " # Additional dev tools"
echo " - conda-lock"
for pkg in $DEVELOP_SYSTEM_PACKAGES; do
echo " - $pkg"
done
- ) > src/environment-dev-template.yml
-
- (
- cat src/environment-template.yml
- echo " # optional packages"
- for pkg in $OPTIONAL_SYSTEM_PACKAGES $SAGELIB_OPTIONAL_SYSTEM_PACKAGES; do
- echo " - $pkg"
- done
- ) > src/environment-optional-template.yml
-
- (
- echo >&4 " - pip:"
- echo >&5 " - pip:"
- for PKG_BASE in $(sage-package list :standard: :optional: --has-file requirements.txt --no-file distros/conda.txt --no-file src; sage-package list :standard: :optional: --has-file version_requirements.txt --no-file requirements.txt --no-file distros/conda.txt --no-file src); do
- eval PKG_SCRIPTS=\$path_$PKG_BASE PKG_TYPE=\$type_$PKG_BASE
- SYSTEM_PACKAGES_FILE=$PKG_SCRIPTS/requirements.txt
- if [ ! -f $SYSTEM_PACKAGES_FILE ]; then
- SYSTEM_PACKAGES_FILE=$PKG_SCRIPTS/version_requirements.txt
- fi
- if grep -q SAGERUNTIME $PKG_SCRIPTS/dependencies $PKG_SCRIPTS/dependencies_order_only 2>/dev/null; then
- : # cannot install packages that depend on the Sage library
- else
- case "$PKG_BASE:$PKG_TYPE" in
- $DEVELOP_SPKG_PATTERN:*) FD=4;;
- *:standard) FD="4 5";;
- *) FD=5;;
- esac
- ${STRIP_COMMENTS} $SYSTEM_PACKAGES_FILE | while read -r line; do
- [ -n "$line" ] && for fd in $FD; do echo >&$fd " - $line"; done
- done
- fi
- done
- ) 4>> /dev/null 5>> src/environment-optional-template.yml
+ ) > environment-dev-template.yml
-for f in environment environment-optional src/environment src/environment-optional src/environment-dev; do
+for f in environment environment-dev; do
for python_version in 3.9 3.10 3.11; do
sed -E 's/^( *- *)python *$/\1python='$python_version'/' $f-template.yml > $f-$python_version.yml
done
diff --git a/build/bin/sage-guess-package-system b/build/bin/sage-guess-package-system
index 8e679c2eac9..33a7e2ad587 100755
--- a/build/bin/sage-guess-package-system
+++ b/build/bin/sage-guess-package-system
@@ -32,12 +32,5 @@ elif xbps-install --version > /dev/null 2>&1; then
elif pkg -v > /dev/null 2>&1; then
echo freebsd
else
- case `uname -s` in
- CYGWIN*)
- echo cygwin
- ;;
- *)
- echo unknown
- ;;
- esac
+ echo unknown
fi
diff --git a/build/bin/sage-print-system-package-command b/build/bin/sage-print-system-package-command
index daf61c48c09..5af7740e229 100755
--- a/build/bin/sage-print-system-package-command
+++ b/build/bin/sage-print-system-package-command
@@ -182,12 +182,6 @@ case $system:$command in
slackware*:install)
[ -n "$system_packages" ] && print_shell_command ${SUDO}slackpkg install $system_packages
;;
- cygwin*:update)
- print_comment "first install apt-cyg from https://github.com/transcode-open/apt-cyg"
- ;;
- cygwin*:install)
- [ -n "$system_packages" ] && print_shell_command apt-cyg install $system_packages
- ;;
freebsd*:install)
[ -n "$system_packages" ] && print_shell_command ${SUDO}pkg install $system_packages
;;
diff --git a/build/bin/sage-spkg-info b/build/bin/sage-spkg-info
index 29d833a29bf..09b4ea8c1be 100755
--- a/build/bin/sage-spkg-info
+++ b/build/bin/sage-spkg-info
@@ -85,7 +85,6 @@ for system in $systems; do
alpine) tab "Alpine";;
arch) tab "Arch Linux";;
conda) tab "conda-forge";;
- cygwin) tab "Cygwin";;
debian) tab "Debian/Ubuntu";;
fedora) tab "Fedora/Redhat/CentOS";;
freebsd) tab "FreeBSD";;
diff --git a/build/pkgs/4ti2/distros/cygwin.txt b/build/pkgs/4ti2/distros/cygwin.txt
deleted file mode 100644
index fab3a09f46e..00000000000
--- a/build/pkgs/4ti2/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-lib4ti2_0
-lib4ti2-devel
diff --git a/build/pkgs/_bootstrap/distros/cygwin.txt b/build/pkgs/_bootstrap/distros/cygwin.txt
deleted file mode 100644
index bde788ee5d9..00000000000
--- a/build/pkgs/_bootstrap/distros/cygwin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-# Packages needed for ./bootstrap
-autoconf
-automake
-libtool
diff --git a/build/pkgs/_develop/distros/cygwin.txt b/build/pkgs/_develop/distros/cygwin.txt
deleted file mode 100644
index 239772ed91d..00000000000
--- a/build/pkgs/_develop/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-gnupg2
diff --git a/build/pkgs/_prereq/distros/cygwin.txt b/build/pkgs/_prereq/distros/cygwin.txt
deleted file mode 100644
index 7a05e1aaa54..00000000000
--- a/build/pkgs/_prereq/distros/cygwin.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# This file, build/pkgs/_prereq/distros/cygwin.txt, contains names of
-# Cygwin packages needed for installation of Sage from source.
-#
-# In addition, the files build/pkgs/SPKG/distros/cygwin.txt contain
-# the names of packages that provide the equivalent of SPKG.
-#
-# One package per line. No need to escape special characters.
-# Everything on a line after a # character is ignored.
-#
-binutils
-make
-m4
-# a system python is needed for downloading the sage packages, https://github.com/sagemath/sage/issues/29090
-python39-urllib3
-python39
-perl
-perl-ExtUtils-MakeMaker
-tar
-gcc-core
-gcc-g++
-# Needed according to embray at https://github.com/sagemath/sage/issues/26964:
-# The need for which comes [...] from MPIR's configure script
-findutils
-which
-# For python3 build
-libcrypt-devel
-# For R build
-libiconv-devel
diff --git a/build/pkgs/_prereq/distros/debian.txt b/build/pkgs/_prereq/distros/debian.txt
index 785739528b4..c6598935e3c 100644
--- a/build/pkgs/_prereq/distros/debian.txt
+++ b/build/pkgs/_prereq/distros/debian.txt
@@ -11,6 +11,8 @@ binutils
make
m4
perl
+# flex is needed to build gcc
+flex
# python3-minimal is not enough on debian buster, ubuntu bionic - it does not have urllib
# system python for bootstrapping the build
python3
diff --git a/build/pkgs/_prereq/distros/fedora.txt b/build/pkgs/_prereq/distros/fedora.txt
index 2716e7eb0cd..a61a5523437 100644
--- a/build/pkgs/_prereq/distros/fedora.txt
+++ b/build/pkgs/_prereq/distros/fedora.txt
@@ -29,3 +29,5 @@ which
diffutils
# Needed for openssl 3.0
perl-IPC-Cmd
+# Needed to build gcc
+flex
diff --git a/build/pkgs/_python3.10/distros/cygwin.txt b/build/pkgs/_python3.10/distros/cygwin.txt
deleted file mode 100644
index 92826c681b4..00000000000
--- a/build/pkgs/_python3.10/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-python310
diff --git a/build/pkgs/_python3.11/distros/cygwin.txt b/build/pkgs/_python3.11/distros/cygwin.txt
deleted file mode 100644
index 1d66f45569a..00000000000
--- a/build/pkgs/_python3.11/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-python311
diff --git a/build/pkgs/_python3.12/distros/cygwin.txt b/build/pkgs/_python3.12/distros/cygwin.txt
deleted file mode 100644
index a1bf1c64c82..00000000000
--- a/build/pkgs/_python3.12/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-python312
diff --git a/build/pkgs/_python3.9/distros/cygwin.txt b/build/pkgs/_python3.9/distros/cygwin.txt
deleted file mode 100644
index 6a2d05c5edb..00000000000
--- a/build/pkgs/_python3.9/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-python39
diff --git a/build/pkgs/alabaster/checksums.ini b/build/pkgs/alabaster/checksums.ini
index a58c93e8f4a..137d299783d 100644
--- a/build/pkgs/alabaster/checksums.ini
+++ b/build/pkgs/alabaster/checksums.ini
@@ -1,4 +1,4 @@
tarball=alabaster-VERSION-py3-none-any.whl
sha1=6c86446396c69236a1542e09771e8d7b8487dcfa
sha256=b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92
-upstream_url=https://pypi.io/packages/py3/a/alabaster/alabaster-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/a/alabaster/alabaster-VERSION-py3-none-any.whl
diff --git a/build/pkgs/anyio/checksums.ini b/build/pkgs/anyio/checksums.ini
index 6559f060ac2..54c6718bec4 100644
--- a/build/pkgs/anyio/checksums.ini
+++ b/build/pkgs/anyio/checksums.ini
@@ -1,4 +1,4 @@
tarball=anyio-VERSION-py3-none-any.whl
sha1=f5bd548b3a14c9c93622bf04f7c6464e3f44966a
sha256=c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7
-upstream_url=https://pypi.io/packages/py3/a/anyio/anyio-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/a/anyio/anyio-VERSION-py3-none-any.whl
diff --git a/build/pkgs/appdirs/checksums.ini b/build/pkgs/appdirs/checksums.ini
index 0d44544631d..8e218bedd50 100644
--- a/build/pkgs/appdirs/checksums.ini
+++ b/build/pkgs/appdirs/checksums.ini
@@ -1,4 +1,4 @@
tarball=appdirs-VERSION-py2.py3-none-any.whl
sha1=fc74022712122436427f8282a47bfa430ec2db56
sha256=a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
-upstream_url=https://pypi.io/packages/py2.py3/a/appdirs/appdirs-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/a/appdirs/appdirs-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/appnope/checksums.ini b/build/pkgs/appnope/checksums.ini
index 4e49f102dd5..8a91ec591b3 100644
--- a/build/pkgs/appnope/checksums.ini
+++ b/build/pkgs/appnope/checksums.ini
@@ -1,4 +1,4 @@
tarball=appnope-VERSION.tar.gz
sha1=4dcd80020b345a184d6da6063a69e25b1d353323
sha256=1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee
-upstream_url=https://pypi.io/packages/source/a/appnope/appnope-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/a/appnope/appnope-VERSION.tar.gz
diff --git a/build/pkgs/argon2_cffi/checksums.ini b/build/pkgs/argon2_cffi/checksums.ini
index acfeee93d3a..503f84c348e 100644
--- a/build/pkgs/argon2_cffi/checksums.ini
+++ b/build/pkgs/argon2_cffi/checksums.ini
@@ -1,4 +1,4 @@
tarball=argon2-cffi-VERSION.tar.gz
sha1=c16c1506de0211bdfa23d4d51e780fb4aaff5222
sha256=d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b
-upstream_url=https://pypi.io/packages/source/a/argon2_cffi/argon2-cffi-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/a/argon2_cffi/argon2-cffi-VERSION.tar.gz
diff --git a/build/pkgs/argon2_cffi_bindings/checksums.ini b/build/pkgs/argon2_cffi_bindings/checksums.ini
index b0e7ade0b5a..1d190691c09 100644
--- a/build/pkgs/argon2_cffi_bindings/checksums.ini
+++ b/build/pkgs/argon2_cffi_bindings/checksums.ini
@@ -1,4 +1,4 @@
tarball=argon2-cffi-bindings-VERSION.tar.gz
sha1=5a9b8906d9ca73c53c2bf0a2f0a8127fda69e965
sha256=bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3
-upstream_url=https://pypi.io/packages/source/a/argon2_cffi_bindings/argon2-cffi-bindings-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/a/argon2_cffi_bindings/argon2-cffi-bindings-VERSION.tar.gz
diff --git a/build/pkgs/arrow/checksums.ini b/build/pkgs/arrow/checksums.ini
index 5ac9740854e..bc3fd448d7f 100644
--- a/build/pkgs/arrow/checksums.ini
+++ b/build/pkgs/arrow/checksums.ini
@@ -1,4 +1,4 @@
tarball=arrow-VERSION-py3-none-any.whl
sha1=fd9376ef4788dc2b1c981e6b5beb9048e046c556
sha256=c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80
-upstream_url=https://pypi.io/packages/py3/a/arrow/arrow-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/a/arrow/arrow-VERSION-py3-none-any.whl
diff --git a/build/pkgs/asttokens/checksums.ini b/build/pkgs/asttokens/checksums.ini
index d9de4a44ea3..aabceb9def5 100644
--- a/build/pkgs/asttokens/checksums.ini
+++ b/build/pkgs/asttokens/checksums.ini
@@ -1,4 +1,4 @@
tarball=asttokens-VERSION-py2.py3-none-any.whl
sha1=69a9448cd7fad3007a66f464f9daa35dd28183a6
sha256=051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24
-upstream_url=https://pypi.io/packages/py2.py3/a/asttokens/asttokens-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/a/asttokens/asttokens-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/async_lru/checksums.ini b/build/pkgs/async_lru/checksums.ini
index f1b60406ec1..a8022baf28d 100644
--- a/build/pkgs/async_lru/checksums.ini
+++ b/build/pkgs/async_lru/checksums.ini
@@ -1,4 +1,4 @@
tarball=async_lru-VERSION-py3-none-any.whl
sha1=99b2ea5d551cbad28e08e45f0d0b00827f9ff73d
sha256=ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224
-upstream_url=https://pypi.io/packages/py3/a/async_lru/async_lru-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/a/async_lru/async_lru-VERSION-py3-none-any.whl
diff --git a/build/pkgs/attrs/checksums.ini b/build/pkgs/attrs/checksums.ini
index 7d271509d6d..74bf62402c0 100644
--- a/build/pkgs/attrs/checksums.ini
+++ b/build/pkgs/attrs/checksums.ini
@@ -1,4 +1,4 @@
tarball=attrs-VERSION-py3-none-any.whl
sha1=563b272af703f8960b76f6637d009fa5fc5864d3
sha256=99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1
-upstream_url=https://pypi.io/packages/py3/a/attrs/attrs-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/a/attrs/attrs-VERSION-py3-none-any.whl
diff --git a/build/pkgs/babel/checksums.ini b/build/pkgs/babel/checksums.ini
index 84e9171f829..c7604abf9dd 100644
--- a/build/pkgs/babel/checksums.ini
+++ b/build/pkgs/babel/checksums.ini
@@ -1,4 +1,4 @@
tarball=Babel-VERSION-py3-none-any.whl
sha1=7f8671a725d0bbf28618841c441af8bd7709d527
sha256=efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287
-upstream_url=https://pypi.io/packages/py3/b/babel/Babel-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/b/babel/Babel-VERSION-py3-none-any.whl
diff --git a/build/pkgs/beautifulsoup4/checksums.ini b/build/pkgs/beautifulsoup4/checksums.ini
index 01abdd62940..9f2536bd011 100644
--- a/build/pkgs/beautifulsoup4/checksums.ini
+++ b/build/pkgs/beautifulsoup4/checksums.ini
@@ -1,4 +1,4 @@
tarball=beautifulsoup4-VERSION.tar.gz
sha1=d9cd72f81e7710692b8ff0a42e69bf93375b5fd3
sha256=492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da
-upstream_url=https://pypi.io/packages/source/b/beautifulsoup4/beautifulsoup4-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/b/beautifulsoup4/beautifulsoup4-VERSION.tar.gz
diff --git a/build/pkgs/beniget/checksums.ini b/build/pkgs/beniget/checksums.ini
index b7b3d25085b..a199e02756e 100644
--- a/build/pkgs/beniget/checksums.ini
+++ b/build/pkgs/beniget/checksums.ini
@@ -1,4 +1,4 @@
tarball=beniget-VERSION.tar.gz
sha1=0167f16d17fbd61b91e620bca07e4ec7054ce51d
sha256=75554b3b8ad0553ce2f607627dad3d95c60c441189875b98e097528f8e23ac0c
-upstream_url=https://pypi.io/packages/source/b/beniget/beniget-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/b/beniget/beniget-VERSION.tar.gz
diff --git a/build/pkgs/bleach/checksums.ini b/build/pkgs/bleach/checksums.ini
index 575b1452888..3386c286912 100644
--- a/build/pkgs/bleach/checksums.ini
+++ b/build/pkgs/bleach/checksums.ini
@@ -1,4 +1,4 @@
tarball=bleach-VERSION-py3-none-any.whl
sha1=7ba81a446171fb840d3083afadd0c87f0b599305
sha256=3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6
-upstream_url=https://pypi.io/packages/py3/b/bleach/bleach-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/b/bleach/bleach-VERSION-py3-none-any.whl
diff --git a/build/pkgs/boost_cropped/distros/cygwin.txt b/build/pkgs/boost_cropped/distros/cygwin.txt
deleted file mode 100644
index 444ab77a410..00000000000
--- a/build/pkgs/boost_cropped/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libboost-devel
diff --git a/build/pkgs/bzip2/distros/cygwin.txt b/build/pkgs/bzip2/distros/cygwin.txt
deleted file mode 100644
index 8ef7f4d0734..00000000000
--- a/build/pkgs/bzip2/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-bzip2
-libbz2-devel
diff --git a/build/pkgs/cachetools/checksums.ini b/build/pkgs/cachetools/checksums.ini
index 29f982e9277..65e1aa547ea 100644
--- a/build/pkgs/cachetools/checksums.ini
+++ b/build/pkgs/cachetools/checksums.ini
@@ -1,4 +1,4 @@
tarball=cachetools-VERSION-py3-none-any.whl
sha1=4210b349f838f75d64da22fbef7e5dc8e494c5f6
sha256=0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945
-upstream_url=https://pypi.io/packages/py3/c/cachetools/cachetools-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/cachetools/cachetools-VERSION-py3-none-any.whl
diff --git a/build/pkgs/calver/checksums.ini b/build/pkgs/calver/checksums.ini
index 8c23449b03d..d3a4c14c1d6 100644
--- a/build/pkgs/calver/checksums.ini
+++ b/build/pkgs/calver/checksums.ini
@@ -1,4 +1,4 @@
tarball=calver-VERSION-py3-none-any.whl
sha1=4553e3fbfc58908f3be2dd529e5991986f6a46b5
sha256=a1d7fcdd67797afc52ee36ffb8c8adf6643173864306547bfd1380cbce6310a0
-upstream_url=https://pypi.io/packages/py3/c/calver/calver-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/calver/calver-VERSION-py3-none-any.whl
diff --git a/build/pkgs/cddlib/distros/cygwin.txt b/build/pkgs/cddlib/distros/cygwin.txt
deleted file mode 100644
index d406d903210..00000000000
--- a/build/pkgs/cddlib/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-cddlib-devel
-cddlib-tools
diff --git a/build/pkgs/certifi/checksums.ini b/build/pkgs/certifi/checksums.ini
index ecb9291cd62..d11756ecfa1 100644
--- a/build/pkgs/certifi/checksums.ini
+++ b/build/pkgs/certifi/checksums.ini
@@ -1,4 +1,4 @@
tarball=certifi-VERSION-py3-none-any.whl
sha1=4acb42f49aed94aeb687b33d3dcb6b564ff36fac
sha256=dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1
-upstream_url=https://pypi.io/packages/py3/c/certifi/certifi-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/certifi/certifi-VERSION-py3-none-any.whl
diff --git a/build/pkgs/cffi/checksums.ini b/build/pkgs/cffi/checksums.ini
index 6b22c299649..8ae4939c66b 100644
--- a/build/pkgs/cffi/checksums.ini
+++ b/build/pkgs/cffi/checksums.ini
@@ -1,4 +1,4 @@
tarball=cffi-VERSION.tar.gz
sha1=c42a46cd11f6153f299cf10e9c236e8b2a143c21
sha256=d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9
-upstream_url=https://pypi.io/packages/source/c/cffi/cffi-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cffi/cffi-VERSION.tar.gz
diff --git a/build/pkgs/chardet/checksums.ini b/build/pkgs/chardet/checksums.ini
index 8bce7750395..e5efde10ffe 100644
--- a/build/pkgs/chardet/checksums.ini
+++ b/build/pkgs/chardet/checksums.ini
@@ -1,4 +1,4 @@
tarball=chardet-VERSION-py3-none-any.whl
sha1=2facc0387556aa8a2956ef682d49fc3eae56d30a
sha256=e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970
-upstream_url=https://pypi.io/packages/py3/c/chardet/chardet-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/chardet/chardet-VERSION-py3-none-any.whl
diff --git a/build/pkgs/charset_normalizer/checksums.ini b/build/pkgs/charset_normalizer/checksums.ini
index 0530b566631..627fa73f7cc 100644
--- a/build/pkgs/charset_normalizer/checksums.ini
+++ b/build/pkgs/charset_normalizer/checksums.ini
@@ -1,4 +1,4 @@
tarball=charset_normalizer-VERSION-py3-none-any.whl
sha1=1aa12424059bec1d95d9dda38b4ff6d062dededf
sha256=3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc
-upstream_url=https://pypi.io/packages/py3/c/charset_normalizer/charset_normalizer-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/charset_normalizer/charset_normalizer-VERSION-py3-none-any.whl
diff --git a/build/pkgs/cmake/distros/cygwin.txt b/build/pkgs/cmake/distros/cygwin.txt
deleted file mode 100644
index a3ea3e4380f..00000000000
--- a/build/pkgs/cmake/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-cmake
diff --git a/build/pkgs/colorama/checksums.ini b/build/pkgs/colorama/checksums.ini
index 3332565f156..99a9ca97c72 100644
--- a/build/pkgs/colorama/checksums.ini
+++ b/build/pkgs/colorama/checksums.ini
@@ -1,4 +1,4 @@
tarball=colorama-VERSION-py2.py3-none-any.whl
sha1=d6ab1608850fecfc0e1cf50bf93d743695c04027
sha256=4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
-upstream_url=https://pypi.io/packages/py2.py3/c/colorama/colorama-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/c/colorama/colorama-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/comm/checksums.ini b/build/pkgs/comm/checksums.ini
index 34f21ec0087..66845adf128 100644
--- a/build/pkgs/comm/checksums.ini
+++ b/build/pkgs/comm/checksums.ini
@@ -1,4 +1,4 @@
tarball=comm-VERSION-py3-none-any.whl
sha1=e7e20f9c1524a9fe059c0b6df90a68e1cd2115a9
sha256=6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a
-upstream_url=https://pypi.io/packages/py3/c/comm/comm-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/comm/comm-VERSION-py3-none-any.whl
diff --git a/build/pkgs/configure/checksums.ini b/build/pkgs/configure/checksums.ini
index 23e8fc18c65..f8bbaed10be 100644
--- a/build/pkgs/configure/checksums.ini
+++ b/build/pkgs/configure/checksums.ini
@@ -1,3 +1,3 @@
tarball=configure-VERSION.tar.gz
-sha1=03b46d88cb544ac683290487e94680de94d1ff50
-sha256=b687b542cfcce2a6865f7aa7164ea77ab00f082ef5cc8ef885e9dfb33c04679d
+sha1=87648980fa41bbd38f9bf45beb7bcdb90e12d613
+sha256=cb5129b2e60af70968a6d8de8937b0f9365a2146762bf34a09b4ad7a88c56b8b
diff --git a/build/pkgs/configure/package-version.txt b/build/pkgs/configure/package-version.txt
index f638ae2138f..91cad63eb79 100644
--- a/build/pkgs/configure/package-version.txt
+++ b/build/pkgs/configure/package-version.txt
@@ -1 +1 @@
-9a5d35a91d40c9ef83fa4976f266d706028f0596
+d9c38a7c581e6ed54fbe420122b8bba488b16074
diff --git a/build/pkgs/contourpy/checksums.ini b/build/pkgs/contourpy/checksums.ini
index 2823ef85c08..236ca51affa 100644
--- a/build/pkgs/contourpy/checksums.ini
+++ b/build/pkgs/contourpy/checksums.ini
@@ -1,4 +1,4 @@
tarball=contourpy-VERSION.tar.gz
sha1=eb8520cb7172aa8b957d8ba2d09e8f6d9a068d2a
sha256=96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab
-upstream_url=https://pypi.io/packages/source/c/contourpy/contourpy-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/contourpy/contourpy-VERSION.tar.gz
diff --git a/build/pkgs/conway_polynomials/checksums.ini b/build/pkgs/conway_polynomials/checksums.ini
index ee7479822ee..a3c4ebf5935 100644
--- a/build/pkgs/conway_polynomials/checksums.ini
+++ b/build/pkgs/conway_polynomials/checksums.ini
@@ -1,4 +1,4 @@
tarball=conway_polynomials-VERSION-py3-none-any.whl
sha1=8d61cb30eb96dfce883a5761d08d45fcb035608a
sha256=a354b4ac0a9985da75e2ac6ec6d7de2902396eff48913eeed86a962486171c28
-upstream_url=https://pypi.io/packages/py3/c/conway_polynomials/conway_polynomials-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/conway_polynomials/conway_polynomials-VERSION-py3-none-any.whl
diff --git a/build/pkgs/cppy/checksums.ini b/build/pkgs/cppy/checksums.ini
index d042532c770..93861c8add7 100644
--- a/build/pkgs/cppy/checksums.ini
+++ b/build/pkgs/cppy/checksums.ini
@@ -1,4 +1,4 @@
tarball=cppy-VERSION-py3-none-any.whl
sha1=57304a8ceaaf7cb34e4315aa9b8084b17fc0332c
sha256=c5b5eac3d3f42593a07d35275b0bc27f447b76b9ad8f27c62e3cfa286dc1988a
-upstream_url=https://pypi.io/packages/py3/c/cppy/cppy-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/c/cppy/cppy-VERSION-py3-none-any.whl
diff --git a/build/pkgs/cunningham_tables/checksums.ini b/build/pkgs/cunningham_tables/checksums.ini
index 47cb1afb35b..afcf3c0ae55 100644
--- a/build/pkgs/cunningham_tables/checksums.ini
+++ b/build/pkgs/cunningham_tables/checksums.ini
@@ -1,4 +1,4 @@
tarball=cunningham_tables-VERSION.tar.gz
sha1=8bea1a113d85bb9c37d8f213dd19525d9d026f22
sha256=ef39ab25bef5b1813071c9bd96abe3a9e683d5595c9654a3ffde5b07b7fe52b0
-upstream_url=http://users.ox.ac.uk/~coml0531/sage/cunningham_tables-VERSION.tar.gz
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/cunningham_tables-VERSION.tar.gz
diff --git a/build/pkgs/curl/distros/cygwin.txt b/build/pkgs/curl/distros/cygwin.txt
deleted file mode 100644
index 26bfd4d1186..00000000000
--- a/build/pkgs/curl/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-libcurl-devel
-curl
diff --git a/build/pkgs/cvxopt/checksums.ini b/build/pkgs/cvxopt/checksums.ini
index ca2f4711f5d..bdfc701c912 100644
--- a/build/pkgs/cvxopt/checksums.ini
+++ b/build/pkgs/cvxopt/checksums.ini
@@ -1,4 +1,4 @@
tarball=cvxopt-VERSION.tar.gz
sha1=f9c3c3fb61e87d27f05b3b66bc10734d5e6284e6
sha256=3461fa42c1b2240ba4da1d985ca73503914157fc4c77417327ed6d7d85acdbe6
-upstream_url=https://pypi.io/packages/source/c/cvxopt/cvxopt-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cvxopt/cvxopt-VERSION.tar.gz
diff --git a/build/pkgs/cvxpy/checksums.ini b/build/pkgs/cvxpy/checksums.ini
index 025278a9b01..49a7ebfbab0 100644
--- a/build/pkgs/cvxpy/checksums.ini
+++ b/build/pkgs/cvxpy/checksums.ini
@@ -1,4 +1,4 @@
tarball=cvxpy-VERSION.tar.gz
sha1=1ca24d9e2ee5add13b33724ab9a11e747fe4ed99
sha256=7a9ef34e3c57ff8c844d86f0a3834fb5575af19233947639de0ba577c6122e3e
-upstream_url=https://pypi.io/packages/source/c/cvxpy/cvxpy-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cvxpy/cvxpy-VERSION.tar.gz
diff --git a/build/pkgs/cylp/checksums.ini b/build/pkgs/cylp/checksums.ini
index d4f3ea9867b..6a053d1deed 100644
--- a/build/pkgs/cylp/checksums.ini
+++ b/build/pkgs/cylp/checksums.ini
@@ -1,4 +1,4 @@
tarball=cylp-VERSION.tar.gz
sha1=22398052ca88123b77e691a0045806a030c9b259
sha256=a7ee226caa274e190338da3d24314647df7e06599ab38cdd26c005d8b8258b16
-upstream_url=https://pypi.io/packages/source/c/cylp/cylp-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cylp/cylp-VERSION.tar.gz
diff --git a/build/pkgs/cypari/checksums.ini b/build/pkgs/cypari/checksums.ini
index d183b3c567a..1ead9490d1a 100644
--- a/build/pkgs/cypari/checksums.ini
+++ b/build/pkgs/cypari/checksums.ini
@@ -1,4 +1,4 @@
tarball=cypari2-VERSION.tar.gz
sha1=4e9f14d218bc1cea29e03a2ceec9bf3dfbfd5eb3
sha256=817606bf661b71d33e1d012421907a4f8fb09dd81b7d3e3ae179b3978020bbf1
-upstream_url=https://pypi.io/packages/source/c/cypari2/cypari2-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cypari2/cypari2-VERSION.tar.gz
diff --git a/build/pkgs/cysignals/checksums.ini b/build/pkgs/cysignals/checksums.ini
index 6bf5ec53eaa..8ba1030ffdf 100644
--- a/build/pkgs/cysignals/checksums.ini
+++ b/build/pkgs/cysignals/checksums.ini
@@ -1,4 +1,4 @@
tarball=cysignals-VERSION.tar.gz
sha1=76db7aa59d55e867c83b329c017382555253af43
sha256=0f1e321e55a07f901c86a36a1e4497f6ff9dfe700681d0130a38c36e4eb238c3
-upstream_url=https://pypi.io/packages/source/c/cysignals/cysignals-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cysignals/cysignals-VERSION.tar.gz
diff --git a/build/pkgs/cython/checksums.ini b/build/pkgs/cython/checksums.ini
index e463df31628..3eb199915d7 100644
--- a/build/pkgs/cython/checksums.ini
+++ b/build/pkgs/cython/checksums.ini
@@ -1,4 +1,4 @@
tarball=cython-VERSION.tar.gz
sha1=f692b0c6f209b75b6bbd69bdbd57fac23785c23e
sha256=7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff
-upstream_url=https://pypi.io/packages/source/c/cython/cython-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/c/cython/cython-VERSION.tar.gz
diff --git a/build/pkgs/database_cubic_hecke/checksums.ini b/build/pkgs/database_cubic_hecke/checksums.ini
index 8cc4e5407c4..830cae1c1eb 100644
--- a/build/pkgs/database_cubic_hecke/checksums.ini
+++ b/build/pkgs/database_cubic_hecke/checksums.ini
@@ -1,4 +1,4 @@
tarball=database_cubic_hecke-VERSION.tar.gz
sha1=a99713c94e4108f917aa354f53edc26a60fd3808
sha256=553654a4ce987a277fe956a9a450d738bd1f58b96c45499075e28f2bca927ae9
-upstream_url=https://pypi.io/packages/source/d/database_cubic_hecke/database_cubic_hecke-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/d/database_cubic_hecke/database_cubic_hecke-VERSION.tar.gz
diff --git a/build/pkgs/database_knotinfo/checksums.ini b/build/pkgs/database_knotinfo/checksums.ini
index d6116d6d0d3..dfdb379d56a 100644
--- a/build/pkgs/database_knotinfo/checksums.ini
+++ b/build/pkgs/database_knotinfo/checksums.ini
@@ -1,4 +1,4 @@
tarball=database_knotinfo-VERSION.tar.gz
-sha1=8bc72e561c009cc6a7c15eceedee522281fbf763
-sha256=805868c8f3c30888e5866d833aec4f9ab07ad92b7b7caeb09bfec4634b28b0fd
-upstream_url=https://pypi.io/packages/source/d/database_knotinfo/database_knotinfo-VERSION.tar.gz
+sha1=d94335a4839946e73458064d6ad1def9595101c7
+sha256=9065ec00e22bd1e43716b3e0c2d1bb9e2c32e504a24f11d81ab556428bb4aa7f
+upstream_url=https://files.pythonhosted.org/packages/source/d/database_knotinfo/database_knotinfo-VERSION.tar.gz
diff --git a/build/pkgs/database_knotinfo/package-version.txt b/build/pkgs/database_knotinfo/package-version.txt
index b150c162f6e..142bb53d9d5 100644
--- a/build/pkgs/database_knotinfo/package-version.txt
+++ b/build/pkgs/database_knotinfo/package-version.txt
@@ -1 +1 @@
-2024.5.1
+2024.10.1
diff --git a/build/pkgs/dateutil/checksums.ini b/build/pkgs/dateutil/checksums.ini
index e4cd473a834..a20d118ea27 100644
--- a/build/pkgs/dateutil/checksums.ini
+++ b/build/pkgs/dateutil/checksums.ini
@@ -1,4 +1,4 @@
tarball=python_dateutil-VERSION-py2.py3-none-any.whl
sha1=323a8e8de7e00a254fadae9c77b1264d56525178
sha256=a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427
-upstream_url=https://pypi.io/packages/py2.py3/p/python_dateutil/python_dateutil-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/p/python_dateutil/python_dateutil-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/debugpy/checksums.ini b/build/pkgs/debugpy/checksums.ini
index 1879bd6e197..8d3c15e3ae0 100644
--- a/build/pkgs/debugpy/checksums.ini
+++ b/build/pkgs/debugpy/checksums.ini
@@ -1,4 +1,4 @@
tarball=debugpy-VERSION-py2.py3-none-any.whl
sha1=cc85be805ef4f25e85bae65cf5b04badca032bb6
sha256=28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242
-upstream_url=https://pypi.io/packages/py2.py3/d/debugpy/debugpy-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/d/debugpy/debugpy-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/decorator/checksums.ini b/build/pkgs/decorator/checksums.ini
index daaa14c6732..bec87842238 100644
--- a/build/pkgs/decorator/checksums.ini
+++ b/build/pkgs/decorator/checksums.ini
@@ -1,4 +1,4 @@
tarball=decorator-VERSION.tar.gz
sha1=929f42916ac8a4aa973599d558768b8f1728db46
sha256=637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330
-upstream_url=https://pypi.io/packages/source/d/decorator/decorator-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/d/decorator/decorator-VERSION.tar.gz
diff --git a/build/pkgs/defusedxml/checksums.ini b/build/pkgs/defusedxml/checksums.ini
index a6da3a2e278..1faa620fcc7 100644
--- a/build/pkgs/defusedxml/checksums.ini
+++ b/build/pkgs/defusedxml/checksums.ini
@@ -1,4 +1,4 @@
tarball=defusedxml-VERSION.tar.gz
sha1=37667af1dc1357eb96b005c4f408ad5292d77b9f
sha256=1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69
-upstream_url=https://pypi.io/packages/source/d/defusedxml/defusedxml-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/d/defusedxml/defusedxml-VERSION.tar.gz
diff --git a/build/pkgs/distlib/checksums.ini b/build/pkgs/distlib/checksums.ini
index bd456ec2028..f5fc1bc145d 100644
--- a/build/pkgs/distlib/checksums.ini
+++ b/build/pkgs/distlib/checksums.ini
@@ -1,4 +1,4 @@
tarball=distlib-VERSION-py2.py3-none-any.whl
sha1=97ea3bb71040f0348eaea272ec17fefea5806e87
sha256=034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784
-upstream_url=https://pypi.io/packages/py2.py3/d/distlib/distlib-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/d/distlib/distlib-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/docutils/checksums.ini b/build/pkgs/docutils/checksums.ini
index 472701e55d7..20bc4e5c415 100644
--- a/build/pkgs/docutils/checksums.ini
+++ b/build/pkgs/docutils/checksums.ini
@@ -1,4 +1,4 @@
tarball=docutils-VERSION-py3-none-any.whl
sha1=a2120453cdb1498128183696711261dd5f328068
sha256=dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2
-upstream_url=https://pypi.io/packages/py3/d/docutils/docutils-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/d/docutils/docutils-VERSION-py3-none-any.whl
diff --git a/build/pkgs/ecm/patches/assembler.patch b/build/pkgs/ecm/patches/assembler.patch
new file mode 100644
index 00000000000..2e3d6c94b6d
--- /dev/null
+++ b/build/pkgs/ecm/patches/assembler.patch
@@ -0,0 +1,67 @@
+*** a/x86_64/Makefile.in Mon Nov 4 14:08:05 2024
+--- b/x86_64/Makefile.in Mon Nov 4 14:15:46 2024
+***************
+*** 355,361 ****
+ all: all-am
+
+ .SUFFIXES:
+! .SUFFIXES: .asm .lo .o .obj .s
+ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+--- 355,361 ----
+ all: all-am
+
+ .SUFFIXES:
+! .SUFFIXES: .asm .lo .o .obj .sx
+ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+***************
+*** 406,418 ****
+ distclean-compile:
+ -rm -f *.tab.c
+
+! .s.o:
+ $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $<
+
+! .s.obj:
+ $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+! .s.lo:
+ $(AM_V_CCAS)$(LTCCASCOMPILE) -c -o $@ $<
+
+ mostlyclean-libtool:
+--- 406,418 ----
+ distclean-compile:
+ -rm -f *.tab.c
+
+! .sx.o:
+ $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $<
+
+! .sx.obj:
+ $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+! .sx.lo:
+ $(AM_V_CCAS)$(LTCCASCOMPILE) -c -o $@ $<
+
+ mostlyclean-libtool:
+***************
+*** 706,713 ****
+ mulredc1_20.asm: mulredc1.m4
+ $(M4) -DLENGTH=20 $< > $@
+
+! .asm.s:
+! $(M4) -I../ -DOPERATION_$* `test -f $< || echo '$(srcdir)/'`$< >$*.s
+ # Nothing here needs the C preprocessor, and including this rule causes
+ # "make" to build .S, then .s files which fails on case-insensitive
+ # filesystems
+--- 706,713 ----
+ mulredc1_20.asm: mulredc1.m4
+ $(M4) -DLENGTH=20 $< > $@
+
+! .asm.sx:
+! $(M4) -I../ -DOPERATION_$* `test -f $< || echo '$(srcdir)/'`$< >$*.sx
+ # Nothing here needs the C preprocessor, and including this rule causes
+ # "make" to build .S, then .s files which fails on case-insensitive
+ # filesystems
diff --git a/build/pkgs/ecos_python/checksums.ini b/build/pkgs/ecos_python/checksums.ini
index 1b5791948e7..60d0d8b9728 100644
--- a/build/pkgs/ecos_python/checksums.ini
+++ b/build/pkgs/ecos_python/checksums.ini
@@ -1,4 +1,4 @@
tarball=ecos-VERSION.tar.gz
sha1=7afce63aec44522052e05fa2e1c82e12fe20fd45
sha256=f48816d73b87ae325556ea537b7c8743187311403c80e3832035224156337c4e
-upstream_url=https://pypi.io/packages/source/e/ecos/ecos-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/e/ecos/ecos-VERSION.tar.gz
diff --git a/build/pkgs/editables/checksums.ini b/build/pkgs/editables/checksums.ini
index 6470e5fd5d2..3c0fda846a1 100644
--- a/build/pkgs/editables/checksums.ini
+++ b/build/pkgs/editables/checksums.ini
@@ -1,4 +1,4 @@
tarball=editables-VERSION-py3-none-any.whl
sha1=7aa90de86b05d6dc1a04c219b01ca7eab09de113
sha256=61e5ffa82629e0d8bfe09bc44a07db3c1ab8ed1ce78a6980732870f19b5e7d4c
-upstream_url=https://pypi.io/packages/py3/e/editables/editables-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/e/editables/editables-VERSION-py3-none-any.whl
diff --git a/build/pkgs/entrypoints/checksums.ini b/build/pkgs/entrypoints/checksums.ini
index 60bb1387477..529229debcc 100644
--- a/build/pkgs/entrypoints/checksums.ini
+++ b/build/pkgs/entrypoints/checksums.ini
@@ -1,4 +1,4 @@
tarball=entrypoints-VERSION.tar.gz
sha1=ca5c5976781db7ec6e8faece06af31ff32960529
sha256=b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4
-upstream_url=https://pypi.io/packages/source/e/entrypoints/entrypoints-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/e/entrypoints/entrypoints-VERSION.tar.gz
diff --git a/build/pkgs/exceptiongroup/checksums.ini b/build/pkgs/exceptiongroup/checksums.ini
index d42fab6a958..70e89792f64 100644
--- a/build/pkgs/exceptiongroup/checksums.ini
+++ b/build/pkgs/exceptiongroup/checksums.ini
@@ -1,4 +1,4 @@
tarball=exceptiongroup-VERSION-py3-none-any.whl
sha1=fd04443cb88d35ee59387ba20f62761ea5546a7d
sha256=3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b
-upstream_url=https://pypi.io/packages/py3/e/exceptiongroup/exceptiongroup-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/e/exceptiongroup/exceptiongroup-VERSION-py3-none-any.whl
diff --git a/build/pkgs/execnet/checksums.ini b/build/pkgs/execnet/checksums.ini
index ee938e17c8b..5e6df579af0 100644
--- a/build/pkgs/execnet/checksums.ini
+++ b/build/pkgs/execnet/checksums.ini
@@ -1,4 +1,4 @@
tarball=execnet-VERSION-py3-none-any.whl
sha1=3a3b88b478a03a9c9933a7bdaea3224a118cc121
sha256=26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc
-upstream_url=https://pypi.io/packages/py3/e/execnet/execnet-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/e/execnet/execnet-VERSION-py3-none-any.whl
diff --git a/build/pkgs/executing/checksums.ini b/build/pkgs/executing/checksums.ini
index c316d78954d..9f519f28788 100644
--- a/build/pkgs/executing/checksums.ini
+++ b/build/pkgs/executing/checksums.ini
@@ -1,4 +1,4 @@
tarball=executing-VERSION-py2.py3-none-any.whl
sha1=c32699ff6868bf3613d56795016880fdadde4fc6
sha256=eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc
-upstream_url=https://pypi.io/packages/py2.py3/e/executing/executing-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/e/executing/executing-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/fastjsonschema/checksums.ini b/build/pkgs/fastjsonschema/checksums.ini
index ae58c4c8577..7d5c2bc7709 100644
--- a/build/pkgs/fastjsonschema/checksums.ini
+++ b/build/pkgs/fastjsonschema/checksums.ini
@@ -1,4 +1,4 @@
tarball=fastjsonschema-VERSION.tar.gz
sha1=eab76262783dd81303e2b1da0914a1d5a7f388aa
sha256=e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd
-upstream_url=https://pypi.io/packages/source/f/fastjsonschema/fastjsonschema-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/f/fastjsonschema/fastjsonschema-VERSION.tar.gz
diff --git a/build/pkgs/filelock/checksums.ini b/build/pkgs/filelock/checksums.ini
index e6fc5ecc6f5..57883a7087d 100644
--- a/build/pkgs/filelock/checksums.ini
+++ b/build/pkgs/filelock/checksums.ini
@@ -1,4 +1,4 @@
tarball=filelock-VERSION-py3-none-any.whl
sha1=475b56870663924527abcf2f91b7d8dd7a7ab0ee
sha256=43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f
-upstream_url=https://pypi.io/packages/py3/f/filelock/filelock-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/f/filelock/filelock-VERSION-py3-none-any.whl
diff --git a/build/pkgs/flint/distros/cygwin.txt b/build/pkgs/flint/distros/cygwin.txt
deleted file mode 100644
index cf5b84dbc05..00000000000
--- a/build/pkgs/flint/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libflint-devel
diff --git a/build/pkgs/flit_core/checksums.ini b/build/pkgs/flit_core/checksums.ini
index 0a40b9891b2..ca7a757151c 100644
--- a/build/pkgs/flit_core/checksums.ini
+++ b/build/pkgs/flit_core/checksums.ini
@@ -1,4 +1,4 @@
tarball=flit_core-VERSION-py3-none-any.whl
sha1=cf044db53e986d0735ad708cce9eba0b71684168
sha256=7aada352fb0c7f5538c4fafeddf314d3a6a92ee8e2b1de70482329e42de70301
-upstream_url=https://pypi.io/packages/py3/f/flit_core/flit_core-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/f/flit_core/flit_core-VERSION-py3-none-any.whl
diff --git a/build/pkgs/fonttools/checksums.ini b/build/pkgs/fonttools/checksums.ini
index 7cb3b54ce86..f1da656f164 100644
--- a/build/pkgs/fonttools/checksums.ini
+++ b/build/pkgs/fonttools/checksums.ini
@@ -1,4 +1,4 @@
tarball=fonttools-VERSION.tar.gz
sha1=5432f0273040b044e8d6465947e3a4c00097bdbf
sha256=c391cd5af88aacaf41dd7cfb96eeedfad297b5899a39e12f4c2c3706d0a3329d
-upstream_url=https://pypi.io/packages/source/f/fonttools/fonttools-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/f/fonttools/fonttools-VERSION.tar.gz
diff --git a/build/pkgs/fpylll/checksums.ini b/build/pkgs/fpylll/checksums.ini
index 5f258e7518e..188e768b787 100644
--- a/build/pkgs/fpylll/checksums.ini
+++ b/build/pkgs/fpylll/checksums.ini
@@ -1,4 +1,4 @@
tarball=fpylll-VERSION.tar.gz
sha1=c0bcf8c5583ebf614da9b26710a2c835d498bf34
sha256=dfd9529a26c50993a2a716177debd7994312219070574cad31b35b4f0c040a19
-upstream_url=https://pypi.io/packages/source/f/fpylll/fpylll-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/f/fpylll/fpylll-VERSION.tar.gz
diff --git a/build/pkgs/fqdn/checksums.ini b/build/pkgs/fqdn/checksums.ini
index 2e3cdea93c6..e12be04eb2c 100644
--- a/build/pkgs/fqdn/checksums.ini
+++ b/build/pkgs/fqdn/checksums.ini
@@ -1,4 +1,4 @@
tarball=fqdn-VERSION-py3-none-any.whl
sha1=85a7ac7d7f45d2e0b64c4b7653ab277ceec91ecf
sha256=3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014
-upstream_url=https://pypi.io/packages/py3/f/fqdn/fqdn-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/f/fqdn/fqdn-VERSION-py3-none-any.whl
diff --git a/build/pkgs/freetype/distros/cygwin.txt b/build/pkgs/freetype/distros/cygwin.txt
deleted file mode 100644
index efdffca75b2..00000000000
--- a/build/pkgs/freetype/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libfreetype-devel
diff --git a/build/pkgs/furo/checksums.ini b/build/pkgs/furo/checksums.ini
index eaeef993c08..492fede82ba 100644
--- a/build/pkgs/furo/checksums.ini
+++ b/build/pkgs/furo/checksums.ini
@@ -1,4 +1,4 @@
tarball=furo-VERSION-py3-none-any.whl
sha1=de4aa7aff48696580d62abed717bf1c309af10f5
sha256=b192c7c1f59805494c8ed606d9375fdac6e6ba8178e747e72bc116745fb7e13f
-upstream_url=https://pypi.io/packages/py3/f/furo/furo-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/f/furo/furo-VERSION-py3-none-any.whl
diff --git a/build/pkgs/gast/checksums.ini b/build/pkgs/gast/checksums.ini
index 6035bc7c22d..83cdc0ef554 100644
--- a/build/pkgs/gast/checksums.ini
+++ b/build/pkgs/gast/checksums.ini
@@ -1,4 +1,4 @@
tarball=gast-VERSION.tar.gz
sha1=6c113cf8d33cc654d33210335103485ab41d3dbb
sha256=9c270fe5f4b130969b54174de7db4e764b09b4f7f67ccfc32480e29f78348d97
-upstream_url=https://pypi.io/packages/source/g/gast/gast-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/g/gast/gast-VERSION.tar.gz
diff --git a/build/pkgs/gc/distros/cygwin.txt b/build/pkgs/gc/distros/cygwin.txt
deleted file mode 100644
index 3d9787221be..00000000000
--- a/build/pkgs/gc/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libgc-devel
diff --git a/build/pkgs/gcc/checksums.ini b/build/pkgs/gcc/checksums.ini
index f9c9ba9f3a8..2145abdf067 100644
--- a/build/pkgs/gcc/checksums.ini
+++ b/build/pkgs/gcc/checksums.ini
@@ -1,4 +1,4 @@
-tarball=gcc-VERSION.tar.xz
-sha1=6501872415823c95d48be28853ce3ebd6c1040c4
-sha256=0845e9621c9543a13f484e94584a49ffc0129970e9914624235fc1d061a0c083
-upstream_url=https://mirrors.kernel.org/gnu/gcc/gcc-VERSION/gcc-VERSION.tar.xz
+tarball=gcc-VERSION.tar.gz
+sha1=c25c11e209fbfa795e80e354f8f48f181decd83b
+sha256=23c2a1b2ce01e9d51948339869453229173c6889758137e7e517b545ae8bfc02
+upstream_url=https://github.com/iains/gcc-14-branch/archive/refs/tags/gcc-14.2-darwin-r2.tar.gz
diff --git a/build/pkgs/gcc/distros/cygwin.txt b/build/pkgs/gcc/distros/cygwin.txt
deleted file mode 100644
index dde4bb418b6..00000000000
--- a/build/pkgs/gcc/distros/cygwin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-gcc-core
-gcc-g++
-gcc-fortran
diff --git a/build/pkgs/gcc/package-version.txt b/build/pkgs/gcc/package-version.txt
index ac565bc1cab..07ea9fa4381 100644
--- a/build/pkgs/gcc/package-version.txt
+++ b/build/pkgs/gcc/package-version.txt
@@ -1 +1 @@
-13.3.0
+14.2.0
diff --git a/build/pkgs/gcc/patches/gcc-13_3_0.patch b/build/pkgs/gcc/patches/gcc-13_3_0.patch
deleted file mode 100644
index f121fdb6461..00000000000
--- a/build/pkgs/gcc/patches/gcc-13_3_0.patch
+++ /dev/null
@@ -1,14497 +0,0 @@
-diff --git a/Makefile.def b/Makefile.def
-index 35e994e..9b4a8a2 100644
---- a/Makefile.def
-+++ b/Makefile.def
-@@ -47,7 +47,8 @@ host_modules= { module= fixincludes; bootstrap=true;
- host_modules= { module= flex; no_check_cross= true; };
- host_modules= { module= gas; bootstrap=true; };
- host_modules= { module= gcc; bootstrap=true;
-- extra_make_flags="$(EXTRA_GCC_FLAGS)"; };
-+ extra_make_flags="$(EXTRA_GCC_FLAGS)";
-+ extra_configure_flags='@gcc_host_pie@'; };
- host_modules= { module= gmp; lib_path=.libs; bootstrap=true;
- // Work around in-tree gmp configure bug with missing flex.
- extra_configure_flags='--disable-shared LEX="touch lex.yy.c" @host_libs_picflag@';
-diff --git a/Makefile.in b/Makefile.in
-index 205d3c3..fdfd3d7 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -12016,7 +12016,7 @@ configure-gcc:
- $$s/$$module_srcdir/configure \
- --srcdir=$${topdir}/$$module_srcdir \
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
-- --target=${target_alias} \
-+ --target=${target_alias} @gcc_host_pie@ \
- || exit 1
- @endif gcc
-
-@@ -12051,7 +12051,8 @@ configure-stage1-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- \
-- $(STAGE1_CONFIGURE_FLAGS)
-+ $(STAGE1_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stage2-gcc maybe-configure-stage2-gcc
-@@ -12084,7 +12085,8 @@ configure-stage2-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGE2_CONFIGURE_FLAGS)
-+ $(STAGE2_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stage3-gcc maybe-configure-stage3-gcc
-@@ -12117,7 +12119,8 @@ configure-stage3-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGE3_CONFIGURE_FLAGS)
-+ $(STAGE3_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stage4-gcc maybe-configure-stage4-gcc
-@@ -12150,7 +12153,8 @@ configure-stage4-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGE4_CONFIGURE_FLAGS)
-+ $(STAGE4_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stageprofile-gcc maybe-configure-stageprofile-gcc
-@@ -12183,7 +12187,8 @@ configure-stageprofile-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGEprofile_CONFIGURE_FLAGS)
-+ $(STAGEprofile_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stagetrain-gcc maybe-configure-stagetrain-gcc
-@@ -12216,7 +12221,8 @@ configure-stagetrain-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGEtrain_CONFIGURE_FLAGS)
-+ $(STAGEtrain_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stagefeedback-gcc maybe-configure-stagefeedback-gcc
-@@ -12249,7 +12255,8 @@ configure-stagefeedback-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGEfeedback_CONFIGURE_FLAGS)
-+ $(STAGEfeedback_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stageautoprofile-gcc maybe-configure-stageautoprofile-gcc
-@@ -12282,7 +12289,8 @@ configure-stageautoprofile-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGEautoprofile_CONFIGURE_FLAGS)
-+ $(STAGEautoprofile_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
- .PHONY: configure-stageautofeedback-gcc maybe-configure-stageautofeedback-gcc
-@@ -12315,7 +12323,8 @@ configure-stageautofeedback-gcc:
- $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
- --with-build-libsubdir=$(HOST_SUBDIR) \
-- $(STAGEautofeedback_CONFIGURE_FLAGS)
-+ $(STAGEautofeedback_CONFIGURE_FLAGS) \
-+ @gcc_host_pie@
- @endif gcc-bootstrap
-
-
-diff --git a/c++tools/Makefile.in b/c++tools/Makefile.in
-index 77bda3d..dcb1029 100644
---- a/c++tools/Makefile.in
-+++ b/c++tools/Makefile.in
-@@ -29,8 +29,9 @@ AUTOCONF := @AUTOCONF@
- AUTOHEADER := @AUTOHEADER@
- CXX := @CXX@
- CXXFLAGS := @CXXFLAGS@
--PIEFLAG := @PIEFLAG@
--CXXOPTS := $(CXXFLAGS) $(PIEFLAG) -fno-exceptions -fno-rtti
-+PICFLAG := @PICFLAG@
-+LD_PICFLAG := @LD_PICFLAG@
-+CXXOPTS := $(CXXFLAGS) $(PICFLAG) -fno-exceptions -fno-rtti
- LDFLAGS := @LDFLAGS@
- exeext := @EXEEXT@
- LIBIBERTY := ../libiberty/libiberty.a
-@@ -90,11 +91,15 @@ ifeq (@CXX_AUX_TOOLS@,yes)
-
- all::g++-mapper-server$(exeext)
-
-+ifneq ($(PICFLAG),)
-+override LIBIBERTY := ../libiberty/pic/libiberty.a
-+endif
-+
- MAPPER.O := server.o resolver.o
- CODYLIB = ../libcody/libcody.a
- CXXINC += -I$(srcdir)/../libcody -I$(srcdir)/../include -I$(srcdir)/../gcc -I. -I../gcc
- g++-mapper-server$(exeext): $(MAPPER.O) $(CODYLIB)
-- +$(CXX) $(LDFLAGS) $(PIEFLAG) -o $@ $^ $(LIBIBERTY) $(NETLIBS)
-+ +$(CXX) $(LDFLAGS) $(PICFLAG) $(LD_PICFLAG) -o $@ $^ $(LIBIBERTY) $(NETLIBS)
-
- # copy to gcc dir so tests there can run
- all::../gcc/g++-mapper-server$(exeext)
-diff --git a/c++tools/configure b/c++tools/configure
-index 742816e..8808700 100755
---- a/c++tools/configure
-+++ b/c++tools/configure
-@@ -627,7 +627,8 @@ get_gcc_base_ver
- EGREP
- GREP
- CXXCPP
--PIEFLAG
-+LD_PICFLAG
-+PICFLAG
- MAINTAINER
- CXX_AUX_TOOLS
- AUTOHEADER
-@@ -700,6 +701,7 @@ enable_c___tools
- enable_maintainer_mode
- enable_checking
- enable_default_pie
-+enable_host_pie
- with_gcc_major_version_only
- '
- ac_precious_vars='build_alias
-@@ -1333,6 +1335,7 @@ Optional Features:
- only specific categories of checks. Categories are:
- yes,no,all,none,release.
- --enable-default-pie enable Position Independent Executable as default
-+ --enable-host-pie build host code as PIE
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -2990,12 +2993,20 @@ fi
- # Check whether --enable-default-pie was given.
- # Check whether --enable-default-pie was given.
- if test "${enable_default_pie+set}" = set; then :
-- enableval=$enable_default_pie; PIEFLAG=-fPIE
-+ enableval=$enable_default_pie; PICFLAG=-fPIE
- else
-- PIEFLAG=
-+ PICFLAG=
- fi
-
-
-+# Enable --enable-host-pie
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie; PICFLAG=-fPIE; LD_PICFLAG=-pie
-+fi
-+
-+
-+
-
- # Check if O_CLOEXEC is defined by fcntl
-
-diff --git a/c++tools/configure.ac b/c++tools/configure.ac
-index 23e98c8..44dfacc 100644
---- a/c++tools/configure.ac
-+++ b/c++tools/configure.ac
-@@ -102,8 +102,15 @@ fi
- AC_ARG_ENABLE(default-pie,
- [AS_HELP_STRING([--enable-default-pie],
- [enable Position Independent Executable as default])],
--[PIEFLAG=-fPIE], [PIEFLAG=])
--AC_SUBST([PIEFLAG])
-+[PICFLAG=-fPIE], [PICFLAG=])
-+
-+# Enable --enable-host-pie
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])],
-+[PICFLAG=-fPIE; LD_PICFLAG=-pie], [])
-+AC_SUBST(PICFLAG)
-+AC_SUBST(LD_PICFLAG)
-
- # Check if O_CLOEXEC is defined by fcntl
- AC_CACHE_CHECK(for O_CLOEXEC, ac_cv_o_cloexec, [
-diff --git a/configure b/configure
-index 117a7ef..c721ee4 100755
---- a/configure
-+++ b/configure
-@@ -687,7 +687,10 @@ extra_host_zlib_configure_flags
- extra_host_libiberty_configure_flags
- stage1_languages
- host_libs_picflag
-+PICFLAG
- host_shared
-+gcc_host_pie
-+host_pie
- extra_linker_plugin_flags
- extra_linker_plugin_configure_flags
- islinc
-@@ -830,6 +833,7 @@ enable_isl_version_check
- enable_lto
- enable_linker_plugin_configure_flags
- enable_linker_plugin_flags
-+enable_host_pie
- enable_host_shared
- enable_stage1_languages
- enable_objc_gc
-@@ -1558,6 +1562,7 @@ Optional Features:
- --enable-linker-plugin-flags=FLAGS
- additional flags for configuring and building linker
- plugins [none]
-+ --enable-host-pie build position independent host executables
- --enable-host-shared build host code as shared libraries
- --enable-stage1-languages[=all]
- choose additional languages to build during stage1.
-@@ -3451,6 +3456,8 @@ esac
-
- # Disable libffi for some systems.
- case "${target}" in
-+ aarch64*-*-darwin2*)
-+ ;;
- powerpc-*-darwin*)
- ;;
- i[3456789]86-*-darwin*)
-@@ -8414,6 +8421,20 @@ else
- fi
- fi
-
-+case $target in
-+ *-darwin2* | *-darwin1[56789]*)
-+ # For these versions, we default to using embedded rpaths.
-+ if test "x$enable_darwin_at_rpath" != "xno"; then
-+ poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
-+ fi
-+ ;;
-+ *-darwin*)
-+ # For these versions, we only use embedded rpaths on demand.
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
-+ fi
-+ ;;
-+esac
-
-
- # GCC GRAPHITE dependency isl.
-@@ -8645,6 +8666,39 @@ fi
-
-
-
-+# Handle --enable-host-pie
-+# If host PIE executables are the default (or must be forced on) for some host,
-+# we must pass that configuration to the gcc directory.
-+gcc_host_pie=
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie; host_pie=$enableval
-+ case $host in
-+ *-*-darwin2*)
-+ if test x$host_pie != xyes ; then
-+ # for Darwin20+ this is required.
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIE executables are required for the configured host, host-pie setting ignored." >&5
-+$as_echo "$as_me: WARNING: PIE executables are required for the configured host, host-pie setting ignored." >&2;}
-+ host_pie=yes
-+ gcc_host_pie=--enable-host-pie
-+ fi ;;
-+ *) ;;
-+ esac
-+else
-+ case $host in
-+ *-*-darwin2*)
-+ # Default to PIE (mandatory for aarch64).
-+ host_pie=yes
-+ gcc_host_pie=--enable-host-pie
-+ ;;
-+ *) host_pie=no ;;
-+ esac
-+fi
-+
-+
-+
-+
-+
- # Enable --enable-host-shared.
- # Checked early to determine whether jit is an 'all' language
- # Check whether --enable-host-shared was given.
-@@ -8654,26 +8708,57 @@ if test "${enable_host_shared+set}" = set; then :
- x86_64-*-darwin* | aarch64-*-darwin*)
- if test x$host_shared != xyes ; then
- # PIC is the default, and actually cannot be switched off.
-- echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIC code is required for the configured host; host-shared setting ignored." >&5
-+$as_echo "$as_me: WARNING: PIC code is required for the configured host; host-shared setting ignored." >&2;}
-+ host_shared=yes
-+ fi ;;
-+ *-*-darwin*)
-+ if test x$host_pie = xyes -a x$host_shared != xyes ; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIC code is required for PIE host executables host-shared setting ignored." >&5
-+$as_echo "$as_me: WARNING: PIC code is required for PIE host executables host-shared setting ignored." >&2;}
- host_shared=yes
- fi ;;
- *) ;;
- esac
- else
- case $host in
-+ # 64B x86_64 and Aarch64 Darwin default to PIC.
- x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
-- *) host_shared=no ;;
-+ # 32B and powerpc64 Darwin must use PIC to link PIE exes.
-+ *-*-darwin*) host_shared=$host_pie ;;
-+ *) host_shared=no;;
- esac
- fi
-
-
-
-
-+if test x$host_shared = xyes; then
-+ case $host in
-+ *-*-darwin*)
-+ # Since host shared is the default for 64b Darwin, and also enabled for
-+ # host_pie, ensure that we present the PIE flag when host_pie is active.
-+ if test x$host_pie = xyes; then
-+ PICFLAG=-fPIE
-+ fi
-+ ;;
-+ *)
-+ PICFLAG=-fPIC
-+ ;;
-+ esac
-+elif test x$host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
-+
-+
-+
- # If we are building PIC/PIE host executables, and we are building dependent
- # libs (e.g. GMP) in-tree those libs need to be configured to generate PIC
- # code.
- host_libs_picflag=
--if test "$host_shared" = "yes";then
-+if test "$host_shared" = "yes" -o "$host_pie" = "yes"; then
- host_libs_picflag='--with-pic'
- fi
-
-diff --git a/configure.ac b/configure.ac
-index b3e9bbd..a75c9e8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -710,6 +710,8 @@ esac
-
- # Disable libffi for some systems.
- case "${target}" in
-+ aarch64*-*-darwin2*)
-+ ;;
- powerpc-*-darwin*)
- ;;
- i[[3456789]]86-*-darwin*)
-@@ -1806,6 +1808,20 @@ AC_ARG_WITH(boot-ldflags,
- if test "$poststage1_libs" = ""; then
- poststage1_ldflags="-static-libstdc++ -static-libgcc"
- fi])
-+case $target in
-+ *-darwin2* | *-darwin1[[56789]]*)
-+ # For these versions, we default to using embedded rpaths.
-+ if test "x$enable_darwin_at_rpath" != "xno"; then
-+ poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
-+ fi
-+ ;;
-+ *-darwin*)
-+ # For these versions, we only use embedded rpaths on demand.
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
-+ fi
-+ ;;
-+esac
- AC_SUBST(poststage1_ldflags)
-
- # GCC GRAPHITE dependency isl.
-@@ -1891,6 +1907,36 @@ AC_ARG_ENABLE(linker-plugin-flags,
- extra_linker_plugin_flags=)
- AC_SUBST(extra_linker_plugin_flags)
-
-+# Handle --enable-host-pie
-+# If host PIE executables are the default (or must be forced on) for some host,
-+# we must pass that configuration to the gcc directory.
-+gcc_host_pie=
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build position independent host executables])],
-+[host_pie=$enableval
-+ case $host in
-+ *-*-darwin2*)
-+ if test x$host_pie != xyes ; then
-+ # for Darwin20+ this is required.
-+ AC_MSG_WARN([PIE executables are required for the configured host, host-pie setting ignored.])
-+ host_pie=yes
-+ gcc_host_pie=--enable-host-pie
-+ fi ;;
-+ *) ;;
-+ esac],
-+[case $host in
-+ *-*-darwin2*)
-+ # Default to PIE (mandatory for aarch64).
-+ host_pie=yes
-+ gcc_host_pie=--enable-host-pie
-+ ;;
-+ *) host_pie=no ;;
-+ esac])
-+
-+AC_SUBST(host_pie)
-+AC_SUBST(gcc_host_pie)
-+
- # Enable --enable-host-shared.
- # Checked early to determine whether jit is an 'all' language
- AC_ARG_ENABLE(host-shared,
-@@ -1901,23 +1947,52 @@ AC_ARG_ENABLE(host-shared,
- x86_64-*-darwin* | aarch64-*-darwin*)
- if test x$host_shared != xyes ; then
- # PIC is the default, and actually cannot be switched off.
-- echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
-+ AC_MSG_WARN([PIC code is required for the configured host; host-shared setting ignored.])
-+ host_shared=yes
-+ fi ;;
-+ *-*-darwin*)
-+ if test x$host_pie = xyes -a x$host_shared != xyes ; then
-+ AC_MSG_WARN([PIC code is required for PIE host executables host-shared setting ignored.])
- host_shared=yes
- fi ;;
- *) ;;
- esac],
- [case $host in
-+ # 64B x86_64 and Aarch64 Darwin default to PIC.
- x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
-- *) host_shared=no ;;
-+ # 32B and powerpc64 Darwin must use PIC to link PIE exes.
-+ *-*-darwin*) host_shared=$host_pie ;;
-+ *) host_shared=no;;
- esac])
-
- AC_SUBST(host_shared)
-
-+if test x$host_shared = xyes; then
-+ case $host in
-+ *-*-darwin*)
-+ # Since host shared is the default for 64b Darwin, and also enabled for
-+ # host_pie, ensure that we present the PIE flag when host_pie is active.
-+ if test x$host_pie = xyes; then
-+ PICFLAG=-fPIE
-+ fi
-+ ;;
-+ *)
-+ PICFLAG=-fPIC
-+ ;;
-+ esac
-+elif test x$host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
-+
-+AC_SUBST(PICFLAG)
-+
- # If we are building PIC/PIE host executables, and we are building dependent
- # libs (e.g. GMP) in-tree those libs need to be configured to generate PIC
- # code.
- host_libs_picflag=
--if test "$host_shared" = "yes";then
-+if test "$host_shared" = "yes" -o "$host_pie" = "yes"; then
- host_libs_picflag='--with-pic'
- fi
- AC_SUBST(host_libs_picflag)
-diff --git a/fixincludes/Makefile.in b/fixincludes/Makefile.in
-index 1937dca..e6ce41d 100644
---- a/fixincludes/Makefile.in
-+++ b/fixincludes/Makefile.in
-@@ -73,7 +73,7 @@ default : all
- # Now figure out from those variables how to compile and link.
-
- .c.o:
-- $(CC) -c $(CFLAGS) $(WARN_CFLAGS) $(CPPFLAGS) $(FIXINC_CFLAGS) $<
-+ $(CC) -c $(CFLAGS) $(PICFLAG) $(WARN_CFLAGS) $(CPPFLAGS) $(FIXINC_CFLAGS) $<
-
- # The only suffixes we want for implicit rules are .c and .o.
- .SUFFIXES:
-@@ -87,7 +87,11 @@ default : all
- ##
- ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-+ifeq ($(PICFLAG),)
- LIBIBERTY=../libiberty/libiberty.a
-+else
-+LIBIBERTY=../libiberty/pic/libiberty.a
-+endif
-
- ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \
- fixlib.o fixopts.o
-@@ -107,15 +111,15 @@ oneprocess : full-stamp
- twoprocess : test-stamp $(AF)
-
- full-stamp : $(ALLOBJ) $(LIBIBERTY)
-- $(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(ALLOBJ) $(LIBIBERTY)
-+ $(CC) $(CFLAGS) $(PICFLAG) $(LDFLAGS) $(LD_PICFLAG) -o $(FI) $(ALLOBJ) $(LIBIBERTY)
- $(STAMP) $@
-
- test-stamp : $(TESTOBJ) $(LIBIBERTY)
-- $(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(TESTOBJ) $(LIBIBERTY)
-+ $(CC) $(CFLAGS) $(PICFLAG) $(LDFLAGS) $(LD_PICFLAG) -o $(FI) $(TESTOBJ) $(LIBIBERTY)
- $(STAMP) $@
-
- $(AF): $(FIXOBJ) $(LIBIBERTY)
-- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(FIXOBJ) $(LIBIBERTY)
-+ $(CC) $(CFLAGS) $(PICFLAG) $(LDFLAGS) $(LD_PICFLAG) -o $@ $(FIXOBJ) $(LIBIBERTY)
-
- $(ALLOBJ) : $(HDR)
- fixincl.o : fixincl.c $(srcdir)/fixincl.x
-diff --git a/fixincludes/configure b/fixincludes/configure
-index bdcc41f..b2759ee 100755
---- a/fixincludes/configure
-+++ b/fixincludes/configure
-@@ -623,6 +623,8 @@ ac_subst_vars='LTLIBOBJS
- LIBOBJS
- get_gcc_base_ver
- MAINT
-+LD_PICFLAG
-+PICFLAG
- TARGET
- target_noncanonical
- WERROR
-@@ -695,6 +697,7 @@ enable_option_checking
- enable_werror_always
- with_local_prefix
- enable_twoprocess
-+enable_host_pie
- enable_maintainer_mode
- with_gcc_major_version_only
- '
-@@ -1323,6 +1326,7 @@ Optional Features:
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-werror-always enable -Werror despite compiler version
- --enable-twoprocess Use a separate process to apply the fixes
-+ --enable-host-pie build host code as PIE
- --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
-
-@@ -3044,7 +3048,6 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
- # the compiler configuration to `libtool'.
- # _LT_LANG_CXX_CONFIG
-
--
- # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
- # ---------------------------------
- # Figure out "hidden" library dependencies from verbose
-@@ -4835,6 +4838,15 @@ $as_echo "#define SEPARATE_FIX_PROC 1" >>confdefs.h
-
- fi
-
-+# Enable --enable-host-pie.
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie; PICFLAG=-fPIE; LD_PICFLAG=-pie
-+fi
-+
-+
-+
-+
- case $host in
- vax-dec-bsd* )
-
-diff --git a/fixincludes/configure.ac b/fixincludes/configure.ac
-index ef2227e..4e78511 100644
---- a/fixincludes/configure.ac
-+++ b/fixincludes/configure.ac
-@@ -68,6 +68,14 @@ if test $TARGET = twoprocess; then
- [Define if testing and fixing are done by separate process])
- fi
-
-+# Enable --enable-host-pie.
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])],
-+[PICFLAG=-fPIE; LD_PICFLAG=-pie], [])
-+AC_SUBST(PICFLAG)
-+AC_SUBST(LD_PICFLAG)
-+
- case $host in
- vax-dec-bsd* )
- AC_DEFINE(exit, xexit, [Define to xexit if the host system does not support atexit])
-diff --git a/gcc/Makefile.in b/gcc/Makefile.in
-index 775aaa1..740199c 100644
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -158,6 +158,9 @@ LDFLAGS = @LDFLAGS@
- # Should we build position-independent host code?
- PICFLAG = @PICFLAG@
-
-+# The linker flag for the above.
-+LD_PICFLAG = @LD_PICFLAG@
-+
- # Flags to determine code coverage. When coverage is disabled, this will
- # contain the optimization flags, as you normally want code coverage
- # without optimization.
-@@ -266,19 +269,19 @@ LINKER = $(CC)
- LINKER_FLAGS = $(CFLAGS)
- endif
-
-+enable_host_pie = @enable_host_pie@
-+
- # Enable Intel CET on Intel CET enabled host if needed.
- CET_HOST_FLAGS = @CET_HOST_FLAGS@
- COMPILER += $(CET_HOST_FLAGS)
-
--NO_PIE_CFLAGS = @NO_PIE_CFLAGS@
--NO_PIE_FLAG = @NO_PIE_FLAG@
- DO_LINK_MUTEX = @DO_LINK_MUTEX@
-
--# We don't want to compile the compilers with -fPIE, it make PCH fail.
--COMPILER += $(NO_PIE_CFLAGS)
-+# Maybe compile the compilers with -fPIE or -fPIC.
-+COMPILER += $(PICFLAG)
-
--# Link with -no-pie since we compile the compiler with -fno-PIE.
--LINKER += $(NO_PIE_FLAG)
-+# Link with -pie, or -no-pie, depending on the above.
-+LINKER += $(LD_PICFLAG)
-
- # Like LINKER, but use a mutex for serializing front end links.
- ifeq (@DO_LINK_MUTEX@,true)
-@@ -1050,7 +1053,7 @@ RTL_SSA_H = $(PRETTY_PRINT_H) insn-config.h splay-tree-utils.h \
- # programs built during a bootstrap.
- # autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a
- # cross compiler which does not use the native headers and libraries.
--INTERNAL_CFLAGS = -DIN_GCC $(PICFLAG) @CROSS@
-+INTERNAL_CFLAGS = -DIN_GCC @CROSS@
-
- # This is the variable actually used when we compile. If you change this,
- # you probably want to update BUILD_CFLAGS in configure.ac
-@@ -1068,21 +1071,24 @@ ALL_CXXFLAGS = $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) $(INTERNAL_CFLAGS) \
- ALL_CPPFLAGS = $(INCLUDES) $(CPPFLAGS)
-
- # This is the variable to use when using $(COMPILER).
--ALL_COMPILERFLAGS = $(ALL_CXXFLAGS)
-+ALL_COMPILERFLAGS = $(ALL_CXXFLAGS) $(PICFLAG)
-
- # This is the variable to use when using $(LINKER).
--ALL_LINKERFLAGS = $(ALL_CXXFLAGS)
-+ALL_LINKERFLAGS = $(ALL_CXXFLAGS) $(LD_PICFLAG)
-
- # Build and host support libraries.
-
--# Use the "pic" build of libiberty if --enable-host-shared, unless we are
--# building for mingw.
-+# Use the "pic" build of libiberty if --enable-host-shared or --enable-host-pie,
-+# unless we are building for mingw.
- LIBIBERTY_PICDIR=$(if $(findstring mingw,$(target)),,pic)
--ifeq ($(enable_host_shared),yes)
-+ifneq ($(enable_host_shared)$(enable_host_pie),)
- LIBIBERTY = ../libiberty/$(LIBIBERTY_PICDIR)/libiberty.a
--BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a
- else
- LIBIBERTY = ../libiberty/libiberty.a
-+endif
-+ifeq ($(enable_host_shared),yes)
-+BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a
-+else
- BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/libiberty.a
- endif
-
-@@ -1167,6 +1173,8 @@ LANG_MAKEFRAGS = @all_lang_makefrags@
- # Used by gcc/jit/Make-lang.in
- LD_VERSION_SCRIPT_OPTION = @ld_version_script_option@
- LD_SONAME_OPTION = @ld_soname_option@
-+@ENABLE_DARWIN_AT_RPATH_TRUE@DARWIN_RPATH = @rpath
-+@ENABLE_DARWIN_AT_RPATH_FALSE@DARWIN_RPATH = ${libdir}
-
- # Flags to pass to recursive makes.
- # CC is set by configure.
-@@ -1973,9 +1981,12 @@ cs-tconfig.h: Makefile
- $(SHELL) $(srcdir)/mkconfig.sh tconfig.h
-
- cs-tm.h: Makefile
-- TARGET_CPU_DEFAULT="$(target_cpu_default)" \
-- HEADERS="$(tm_include_list)" DEFINES="$(tm_defines)" \
-- $(SHELL) $(srcdir)/mkconfig.sh tm.h
-+@ENABLE_DARWIN_AT_RPATH_FALSE@ TARGET_CPU_DEFAULT="$(target_cpu_default)" \
-+@ENABLE_DARWIN_AT_RPATH_FALSE@ HEADERS="$(tm_include_list)" DEFINES="$(tm_defines)" \
-+@ENABLE_DARWIN_AT_RPATH_FALSE@ $(SHELL) $(srcdir)/mkconfig.sh tm.h
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ TARGET_CPU_DEFAULT="$(target_cpu_default)" \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ HEADERS="$(tm_include_list)" DEFINES="$(tm_defines) DARWIN_AT_RPATH=1" \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ $(SHELL) $(srcdir)/mkconfig.sh tm.h
-
- cs-tm_p.h: Makefile
- TARGET_CPU_DEFAULT="" \
-@@ -4141,6 +4152,9 @@ site.exp: ./config.status Makefile
- echo "set COMPAT_OPTIONS \"$(COMPAT_OPTIONS)\"" >> ./site.tmp; \
- else true; \
- fi
-+ @if test "X@ENABLE_DARWIN_AT_RPATH_TRUE@" != "X#" ; then \
-+ echo "set ENABLE_DARWIN_AT_RPATH 1" >> ./site.tmp; \
-+ fi
- @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./site.tmp
- @cat ./site.tmp > site.exp
- @cat site.bak | sed \
-diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4
-index 6be36df..126e09b 100644
---- a/gcc/aclocal.m4
-+++ b/gcc/aclocal.m4
-@@ -12,6 +12,56 @@
- # PARTICULAR PURPOSE.
-
- m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-+# AM_CONDITIONAL -*- Autoconf -*-
-+
-+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-+# -------------------------------------
-+# Define a conditional.
-+AC_DEFUN([AM_CONDITIONAL],
-+[AC_PREREQ([2.52])dnl
-+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
-+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-+AC_SUBST([$1_TRUE])dnl
-+AC_SUBST([$1_FALSE])dnl
-+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-+m4_define([_AM_COND_VALUE_$1], [$2])dnl
-+if $2; then
-+ $1_TRUE=
-+ $1_FALSE='#'
-+else
-+ $1_TRUE='#'
-+ $1_FALSE=
-+fi
-+AC_CONFIG_COMMANDS_PRE(
-+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-+ AC_MSG_ERROR([[conditional "$1" was never defined.
-+Usually this means the macro was only invoked conditionally.]])
-+fi])])
-+
-+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# _AM_SUBST_NOTMAKE(VARIABLE)
-+# ---------------------------
-+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-+# This macro is traced by Automake.
-+AC_DEFUN([_AM_SUBST_NOTMAKE])
-+
-+# AM_SUBST_NOTMAKE(VARIABLE)
-+# --------------------------
-+# Public sister of _AM_SUBST_NOTMAKE.
-+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-+
- m4_include([../libtool.m4])
- m4_include([../ltoptions.m4])
- m4_include([../ltsugar.m4])
-diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
-index 9507f2f..2b9b0de 100644
---- a/gcc/ada/gcc-interface/Make-lang.in
-+++ b/gcc/ada/gcc-interface/Make-lang.in
-@@ -72,7 +72,8 @@ else
- endif
-
- ALL_ADAFLAGS = \
-- $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) $(CHECKING_ADAFLAGS) $(WARN_ADAFLAGS)
-+ $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) $(CHECKING_ADAFLAGS) \
-+ $(WARN_ADAFLAGS) $(PICFLAG)
- FORCE_DEBUG_ADAFLAGS = -g
- ADA_CFLAGS =
- COMMON_ADA_INCLUDES = -I- -I. -Iada/generated -Iada -I$(srcdir)/ada
-@@ -1109,7 +1110,7 @@ ada/b_gnat1.adb : $(GNAT1_ADA_OBJS)
- ada/b_gnat1.o : ada/b_gnat1.adb
- # Do not use ADAFLAGS to get rid of -gnatg which generates a lot
- # of style messages.
-- $(CC) -c $(CFLAGS) $(ADA_CFLAGS) -gnatp -gnatws $(ADA_INCLUDES) \
-+ $(CC) -c $(CFLAGS) $(ADA_CFLAGS) $(PICFLAG) -gnatp -gnatws $(ADA_INCLUDES) \
- $< $(ADA_OUTPUT_OPTION)
-
- ada/b_gnatb.adb : $(GNATBIND_OBJS) ada/gnatbind.o
-@@ -1118,7 +1119,7 @@ ada/b_gnatb.adb : $(GNATBIND_OBJS) ada/gnatbind.o
- $(MV) b_gnatb.adb b_gnatb.ads ada/
-
- ada/b_gnatb.o : ada/b_gnatb.adb
-- $(CC) -c $(CFLAGS) $(ADA_CFLAGS) -gnatp -gnatws $(ADA_INCLUDES) \
-+ $(CC) -c $(CFLAGS) $(ADA_CFLAGS) $(PICFLAG) -gnatp -gnatws $(ADA_INCLUDES) \
- $< $(ADA_OUTPUT_OPTION)
-
- include $(srcdir)/ada/Make-generated.in
-diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
-index da6a56f..51a4bf1 100644
---- a/gcc/ada/gcc-interface/Makefile.in
-+++ b/gcc/ada/gcc-interface/Makefile.in
-@@ -91,6 +91,7 @@ LS = ls
- RANLIB = @RANLIB@
- RANLIB_FLAGS = @ranlib_flags@
- AWK = @AWK@
-+PICFLAG = @PICFLAG@
-
- COMPILER = $(CC)
- COMPILER_FLAGS = $(CFLAGS)
-@@ -239,7 +240,11 @@ ALL_CPPFLAGS = $(CPPFLAGS)
- ALL_COMPILERFLAGS = $(ALL_CFLAGS)
-
- # This is where we get libiberty.a from.
-+ifeq ($(PICFLAG),)
- LIBIBERTY = ../../libiberty/libiberty.a
-+else
-+LIBIBERTY = ../../libiberty/pic/libiberty.a
-+endif
-
- # We need to link against libbacktrace because diagnostic.c in
- # libcommon.a uses it.
-@@ -256,9 +261,6 @@ TOOLS_LIBS = ../version.o ../link.o ../targext.o ../../ggc-none.o \
- $(LIBGNAT) $(LIBINTL) $(LIBICONV) ../$(LIBBACKTRACE) ../$(LIBIBERTY) \
- $(SYSLIBS) $(TGT_LIB)
-
--# Add -no-pie to TOOLS_LIBS since some of them are compiled with -fno-PIE.
--TOOLS_LIBS += @NO_PIE_FLAG@
--
- # Specify the directories to be searched for header files.
- # Both . and srcdir are used, in that order,
- # so that tm.h and config.h will be found in the compilation
-@@ -789,12 +791,15 @@ gnatlib-shared-darwin:
- $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
- $(SO_OPTS) \
- -Wl,-install_name,@rpath/libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
-- $(MISCLIB)
-+ -nodefaultrpaths -Wl,-rpath,@loader_path/,-rpath,@loader_path/.. \
-+ -Wl,-rpath,@loader_path/../../../../ $(MISCLIB)
- cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -dynamiclib $(PICFLAG_FOR_TARGET) \
- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
- $(GNATRTL_TASKING_OBJS) \
- $(SO_OPTS) \
- -Wl,-install_name,@rpath/libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
-+ -nodefaultrpaths -Wl,-rpath,@loader_path/,-rpath,@loader_path/.. \
-+ -Wl,-rpath,@loader_path/../../../../ \
- $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
- cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
- libgnat$(soext)
-diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc
-index 4389ff9..0fe5d2a 100644
---- a/gcc/analyzer/kf.cc
-+++ b/gcc/analyzer/kf.cc
-@@ -1081,7 +1081,7 @@ register_known_functions (known_function_manager &kfm)
- like this:
- extern int *___errno(void) __attribute__((__const__));
- #define errno (*(___errno()))
-- and OS X like this:
-+ and macOS like this:
- extern int * __error(void);
- #define errno (*__error())
- and similarly __errno for newlib.
-diff --git a/gcc/builtins.cc b/gcc/builtins.cc
-index 1bfdc59..1122527 100644
---- a/gcc/builtins.cc
-+++ b/gcc/builtins.cc
-@@ -5501,6 +5501,13 @@ expand_builtin_trap (void)
- static void
- expand_builtin_unreachable (void)
- {
-+ /* If the target wants a trap in place of the fall-through, use that. */
-+ if (targetm.unreachable_should_trap ())
-+ {
-+ expand_builtin_trap ();
-+ return;
-+ }
-+
- /* Use gimple_build_builtin_unreachable or builtin_decl_unreachable
- to avoid this. */
- gcc_checking_assert (!sanitize_flags_p (SANITIZE_UNREACHABLE));
-@@ -7958,6 +7965,10 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
- case BUILT_IN_ADJUST_DESCRIPTOR:
- return expand_builtin_adjust_descriptor (exp);
-
-+ case BUILT_IN_GCC_NESTED_PTR_CREATED:
-+ case BUILT_IN_GCC_NESTED_PTR_DELETED:
-+ break; /* At present, no expansion, just call the function. */
-+
- case BUILT_IN_FORK:
- case BUILT_IN_EXECL:
- case BUILT_IN_EXECV:
-diff --git a/gcc/builtins.def b/gcc/builtins.def
-index 4ad95a1..448cf83 100644
---- a/gcc/builtins.def
-+++ b/gcc/builtins.def
-@@ -1067,6 +1067,8 @@ DEF_BUILTIN_STUB (BUILT_IN_ADJUST_TRAMPOLINE, "__builtin_adjust_trampoline")
- DEF_BUILTIN_STUB (BUILT_IN_INIT_DESCRIPTOR, "__builtin_init_descriptor")
- DEF_BUILTIN_STUB (BUILT_IN_ADJUST_DESCRIPTOR, "__builtin_adjust_descriptor")
- DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto")
-+DEF_EXT_LIB_BUILTIN (BUILT_IN_GCC_NESTED_PTR_CREATED, "__gcc_nested_func_ptr_created", BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
-+DEF_EXT_LIB_BUILTIN (BUILT_IN_GCC_NESTED_PTR_DELETED, "__gcc_nested_func_ptr_deleted", BT_FN_VOID, ATTR_NOTHROW_LIST)
-
- /* Implementing __builtin_setjmp. */
- DEF_BUILTIN_STUB (BUILT_IN_SETJMP_SETUP, "__builtin_setjmp_setup")
-diff --git a/gcc/c/c-lang.cc b/gcc/c/c-lang.cc
-index b4e0c8c..11e7aaa 100644
---- a/gcc/c/c-lang.cc
-+++ b/gcc/c/c-lang.cc
-@@ -61,6 +61,15 @@ c_get_sarif_source_language (const char *)
- return "c";
- }
-
-+/* Implement c-family hook to register language-specific features for
-+ __has_{feature,extension}. */
-+
-+void
-+c_family_register_lang_features ()
-+{
-+ c_register_features ();
-+}
-+
- #if CHECKING_P
-
- namespace selftest {
-diff --git a/gcc/c/c-objc-common.cc b/gcc/c/c-objc-common.cc
-index e4aed61..fad4662 100644
---- a/gcc/c/c-objc-common.cc
-+++ b/gcc/c/c-objc-common.cc
-@@ -34,6 +34,38 @@ along with GCC; see the file COPYING3. If not see
- static bool c_tree_printer (pretty_printer *, text_info *, const char *,
- int, bool, bool, bool, bool *, const char **);
-
-+/* Info for C language features which can be queried through
-+ __has_{feature,extension}. */
-+
-+struct c_feature_info
-+{
-+ const char *ident;
-+ const int *enable_flag;
-+};
-+
-+static const c_feature_info c_feature_table[] =
-+{
-+ { "c_alignas", &flag_isoc11 },
-+ { "c_alignof", &flag_isoc11 },
-+ { "c_atomic", &flag_isoc11 },
-+ { "c_generic_selections", &flag_isoc11 },
-+ { "c_static_assert", &flag_isoc11 },
-+ { "c_thread_local", &flag_isoc11 }
-+};
-+
-+/* Register features specific to the C language. */
-+
-+void
-+c_register_features ()
-+{
-+ for (unsigned i = 0; i < ARRAY_SIZE (c_feature_table); i++)
-+ {
-+ const c_feature_info *info = c_feature_table + i;
-+ const bool feat_p = !info->enable_flag || *info->enable_flag;
-+ c_common_register_feature (info->ident, feat_p);
-+ }
-+}
-+
- bool
- c_missing_noreturn_ok_p (tree decl)
- {
-diff --git a/gcc/c/c-objc-common.h b/gcc/c/c-objc-common.h
-index d31dacb..34dc23a 100644
---- a/gcc/c/c-objc-common.h
-+++ b/gcc/c/c-objc-common.h
-@@ -21,6 +21,9 @@ along with GCC; see the file COPYING3. If not see
- #ifndef GCC_C_OBJC_COMMON
- #define GCC_C_OBJC_COMMON
-
-+/* Implemented in c-objc-common.cc. */
-+extern void c_register_features ();
-+
- /* Lang hooks that are shared between C and ObjC are defined here. Hooks
- specific to C or ObjC go in c-lang.cc and objc/objc-lang.cc, respectively. */
-
-diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
-index 3627a3f..5abc6e8 100644
---- a/gcc/c/c-parser.cc
-+++ b/gcc/c/c-parser.cc
-@@ -217,6 +217,9 @@ struct GTY(()) c_parser {
- should translate them to the execution character set (false
- inside attributes). */
- BOOL_BITFIELD translate_strings_p : 1;
-+ /* True if we want to lex arbitrary number-like sequences as their
-+ string representation. */
-+ BOOL_BITFIELD lex_number_as_string : 1;
-
- /* Objective-C specific parser/lexer information. */
-
-@@ -291,10 +294,10 @@ c_lex_one_token (c_parser *parser, c_token *token, bool raw = false)
-
- if (raw || vec_safe_length (parser->raw_tokens) == 0)
- {
-+ int lex_flags = parser->lex_joined_string ? 0 : C_LEX_STRING_NO_JOIN;
-+ lex_flags |= parser->lex_number_as_string ? C_LEX_NUMBER_AS_STRING : 0;
- token->type = c_lex_with_flags (&token->value, &token->location,
-- &token->flags,
-- (parser->lex_joined_string
-- ? 0 : C_LEX_STRING_NO_JOIN));
-+ &token->flags, lex_flags);
- token->id_kind = C_ID_NONE;
- token->keyword = RID_MAX;
- token->pragma_kind = PRAGMA_NONE;
-@@ -4993,6 +4996,88 @@ c_parser_gnu_attribute_any_word (c_parser *parser)
- return attr_name;
- }
-
-+/* Handle parsing clang-form attribute arguments, where we need to adjust
-+ the parsing rules to relate to a specific attribute. */
-+
-+static tree
-+c_parser_clang_attribute_arguments (c_parser *parser, tree /*attr_id*/)
-+{
-+ /* We can, if required, alter the parsing on the basis of the attribute.
-+ At present, we handle the availability attr, where ach entry can be :
-+ identifier
-+ identifier=N.MM.Z
-+ identifier="string"
-+ followed by ',' or ) for the last entry*/
-+
-+ tree attr_args = NULL_TREE;
-+ do
-+ {
-+ tree name = NULL_TREE;
-+ tree value = NULL_TREE;
-+
-+ if (c_parser_next_token_is (parser, CPP_NAME)
-+ && c_parser_peek_token (parser)->id_kind == C_ID_ID)
-+ {
-+ name = c_parser_peek_token (parser)->value;
-+ c_parser_consume_token (parser);
-+ }
-+ else if (c_parser_next_token_is (parser, CPP_COMMA))
-+ name = error_mark_node; /* Comma handled below. */
-+ else
-+ {
-+ bool saved_join_state = parser->lex_joined_string;
-+ parser->lex_number_as_string = 1;
-+ parser->lex_joined_string = 1;
-+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
-+ "expected an attribute keyword");
-+ parser->lex_number_as_string = 0;
-+ parser->lex_joined_string = saved_join_state;
-+ return error_mark_node;
-+ }
-+ if (c_parser_next_token_is (parser, CPP_EQ))
-+ {
-+ c_parser_consume_token (parser); /* eat the '=' */
-+ /* We need to bludgeon the lexer into not trying to interpret the
-+ xx.yy.zz form, since that just looks like a malformed float.
-+ Also, as a result of macro processing, we can have strig literals
-+ that are in multiple pieces so, for this specific part of the
-+ parse, we need to join strings. */
-+ bool saved_join_state = parser->lex_joined_string;
-+ parser->lex_number_as_string = 1;
-+ parser->lex_joined_string = 1;
-+ /* So look at the next token, expecting a string, or something that
-+ looks initially like a number, but might be a version number. */
-+ c_parser_peek_token (parser);
-+ /* Done with the funky number parsing. */
-+ parser->lex_number_as_string = 0;
-+ parser->lex_joined_string = saved_join_state;
-+ if (c_parser_next_token_is_not (parser, CPP_CLOSE_PAREN)
-+ && c_parser_next_token_is_not (parser, CPP_COMMA))
-+ {
-+ value = c_parser_peek_token (parser)->value;
-+ /* ???: check for error mark and early-return? */
-+ c_parser_consume_token (parser);
-+ }
-+ /* else value is absent. */
-+ }
-+ else if (c_parser_next_token_is_not (parser, CPP_CLOSE_PAREN)
-+ && c_parser_next_token_is_not (parser, CPP_COMMA))
-+ {
-+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
-+ "expected %<,%> or %<=%>");
-+ return error_mark_node;
-+ }
-+ if (c_parser_next_token_is (parser, CPP_COMMA))
-+ c_parser_consume_token (parser); /* Just skip the comma. */
-+ tree t = tree_cons (value, name, NULL);
-+ if (!attr_args)
-+ attr_args = t;
-+ else
-+ chainon (attr_args, t);
-+ } while (c_parser_next_token_is_not (parser, CPP_CLOSE_PAREN));
-+ return attr_args;
-+}
-+
- /* Parse attribute arguments. This is a common form of syntax
- covering all currently valid GNU and standard attributes.
-
-@@ -5158,9 +5243,13 @@ c_parser_gnu_attribute (c_parser *parser, tree attrs,
- attrs = chainon (attrs, attr);
- return attrs;
- }
-- c_parser_consume_token (parser);
-+ c_parser_consume_token (parser); /* The '('. */
-
-- tree attr_args
-+ tree attr_args;
-+ if (attribute_clang_form_p (attr_name))
-+ attr_args = c_parser_clang_attribute_arguments (parser, attr_name);
-+ else
-+ attr_args
- = c_parser_attribute_arguments (parser,
- attribute_takes_identifier_p (attr_name),
- false,
-diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
-index 6770991..a0adac1 100644
---- a/gcc/c-family/c-attribs.cc
-+++ b/gcc/c-family/c-attribs.cc
-@@ -607,6 +607,18 @@ attribute_takes_identifier_p (const_tree attr_id)
- return targetm.attribute_takes_identifier_p (attr_id);
- }
-
-+/* Returns TRUE iff the attribute indicated by ATTR_ID needs its
-+ arguments converted to string constants. */
-+
-+bool
-+attribute_clang_form_p (const_tree attr_id)
-+{
-+ const struct attribute_spec *spec = lookup_attribute_spec (attr_id);
-+ if (spec && !strcmp ("availability", spec->name))
-+ return true;
-+ return false;
-+}
-+
- /* Verify that argument value POS at position ARGNO to attribute NAME
- applied to function FN (which is either a function declaration or function
- type) refers to a function parameter at position POS and the expected type
-diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
-index 303d7f1..e3c3fae 100644
---- a/gcc/c-family/c-common.cc
-+++ b/gcc/c-family/c-common.cc
-@@ -311,6 +311,44 @@ const struct fname_var_t fname_vars[] =
- {NULL, 0, 0},
- };
-
-+/* Flags to restrict availability of generic features that
-+ are known to __has_{feature,extension}. */
-+
-+enum
-+{
-+ HF_FLAG_NONE = 0,
-+ HF_FLAG_EXT = 1, /* Available only as an extension. */
-+ HF_FLAG_SANITIZE = 2, /* Availability depends on sanitizer flags. */
-+};
-+
-+/* Info for generic features which can be queried through
-+ __has_{feature,extension}. */
-+
-+struct hf_feature_info
-+{
-+ const char *ident;
-+ unsigned flags;
-+ unsigned mask;
-+};
-+
-+/* Table of generic features which can be queried through
-+ __has_{feature,extension}. */
-+
-+static constexpr hf_feature_info has_feature_table[] =
-+{
-+ { "address_sanitizer", HF_FLAG_SANITIZE, SANITIZE_ADDRESS },
-+ { "thread_sanitizer", HF_FLAG_SANITIZE, SANITIZE_THREAD },
-+ { "leak_sanitizer", HF_FLAG_SANITIZE, SANITIZE_LEAK },
-+ { "hwaddress_sanitizer", HF_FLAG_SANITIZE, SANITIZE_HWADDRESS },
-+ { "undefined_behavior_sanitizer", HF_FLAG_SANITIZE, SANITIZE_UNDEFINED },
-+ { "attribute_deprecated_with_message", HF_FLAG_NONE, 0 },
-+ { "attribute_unavailable_with_message", HF_FLAG_NONE, 0 },
-+ { "enumerator_attributes", HF_FLAG_NONE, 0 },
-+ { "tls", HF_FLAG_NONE, 0 },
-+ { "gnu_asm_goto_with_outputs", HF_FLAG_EXT, 0 },
-+ { "gnu_asm_goto_with_outputs_full", HF_FLAG_EXT, 0 }
-+};
-+
- /* Global visibility options. */
- struct visibility_flags visibility_options;
-
-@@ -9552,4 +9590,63 @@ c_strict_flex_array_level_of (tree array_field)
- return strict_flex_array_level;
- }
-
-+/* Map from identifiers to booleans. Value is true for features, and
-+ false for extensions. Used to implement __has_{feature,extension}. */
-+
-+using feature_map_t = hash_map ;
-+static feature_map_t *feature_map;
-+
-+/* Register a feature for __has_{feature,extension}. FEATURE_P is true
-+ if the feature identified by NAME is a feature (as opposed to an
-+ extension). */
-+
-+void
-+c_common_register_feature (const char *name, bool feature_p)
-+{
-+ bool dup = feature_map->put (get_identifier (name), feature_p);
-+ gcc_checking_assert (!dup);
-+}
-+
-+/* Lazily initialize hash table for __has_{feature,extension},
-+ dispatching to the appropriate front end to register language-specific
-+ features. */
-+
-+static void
-+init_has_feature ()
-+{
-+ gcc_checking_assert (!feature_map);
-+ feature_map = new feature_map_t;
-+
-+ for (unsigned i = 0; i < ARRAY_SIZE (has_feature_table); i++)
-+ {
-+ const hf_feature_info *info = has_feature_table + i;
-+
-+ if ((info->flags & HF_FLAG_SANITIZE) && !(flag_sanitize & info->mask))
-+ continue;
-+
-+ const bool feature_p = !(info->flags & HF_FLAG_EXT);
-+ c_common_register_feature (info->ident, feature_p);
-+ }
-+
-+ /* Register language-specific features. */
-+ c_family_register_lang_features ();
-+}
-+
-+/* If STRICT_P is true, evaluate __has_feature (IDENT).
-+ Otherwise, evaluate __has_extension (IDENT). */
-+
-+bool
-+has_feature_p (const char *ident, bool strict_p)
-+{
-+ if (!feature_map)
-+ init_has_feature ();
-+
-+ tree name = canonicalize_attr_name (get_identifier (ident));
-+ bool *feat_p = feature_map->get (name);
-+ if (!feat_p)
-+ return false;
-+
-+ return !strict_p || *feat_p;
-+}
-+
- #include "gt-c-family-c-common.h"
-diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
-index f96350b..41d69d4 100644
---- a/gcc/c-family/c-common.h
-+++ b/gcc/c-family/c-common.h
-@@ -1121,6 +1121,14 @@ extern bool c_cpp_diagnostic (cpp_reader *, enum cpp_diagnostic_level,
- ATTRIBUTE_GCC_DIAG(5,0);
- extern int c_common_has_attribute (cpp_reader *, bool);
- extern int c_common_has_builtin (cpp_reader *);
-+extern int c_common_has_feature (cpp_reader *, bool);
-+
-+/* Implemented by each front end in *-lang.cc. */
-+extern void c_family_register_lang_features ();
-+
-+/* Implemented in c-family/c-common.cc. */
-+extern void c_common_register_feature (const char *, bool);
-+extern bool has_feature_p (const char *, bool);
-
- extern bool parse_optimize_options (tree, bool);
-
-@@ -1529,6 +1537,7 @@ extern void check_for_xor_used_as_pow (location_t lhs_loc, tree lhs_val,
- /* In c-attribs.cc. */
- extern bool attribute_takes_identifier_p (const_tree);
- extern tree handle_deprecated_attribute (tree *, tree, tree, int, bool *);
-+extern bool attribute_clang_form_p (const_tree);
- extern tree handle_unused_attribute (tree *, tree, tree, int, bool *);
- extern tree handle_fallthrough_attribute (tree *, tree, tree, int, bool *);
- extern int parse_tm_stmt_attr (tree, int);
-diff --git a/gcc/c-family/c-lex.cc b/gcc/c-family/c-lex.cc
-index 0acfdaa..2a504a9 100644
---- a/gcc/c-family/c-lex.cc
-+++ b/gcc/c-family/c-lex.cc
-@@ -82,6 +82,7 @@ init_c_lex (void)
- cb->read_pch = c_common_read_pch;
- cb->has_attribute = c_common_has_attribute;
- cb->has_builtin = c_common_has_builtin;
-+ cb->has_feature = c_common_has_feature;
- cb->get_source_date_epoch = cb_get_source_date_epoch;
- cb->get_suggestion = cb_get_suggestion;
- cb->remap_filename = remap_macro_filename;
-@@ -457,16 +458,16 @@ c_common_has_attribute (cpp_reader *pfile, bool std_syntax)
- return result;
- }
-
--/* Callback for has_builtin. */
-+/* Helper for __has_{builtin,feature,extension}. */
-
--int
--c_common_has_builtin (cpp_reader *pfile)
-+static const char *
-+c_common_lex_availability_macro (cpp_reader *pfile, const char *builtin)
- {
- const cpp_token *token = get_token_no_padding (pfile);
- if (token->type != CPP_OPEN_PAREN)
- {
- cpp_error (pfile, CPP_DL_ERROR,
-- "missing '(' after \"__has_builtin\"");
-+ "missing '(' after \"__has_%s\"", builtin);
- return 0;
- }
-
-@@ -486,7 +487,7 @@ c_common_has_builtin (cpp_reader *pfile)
- else
- {
- cpp_error (pfile, CPP_DL_ERROR,
-- "macro \"__has_builtin\" requires an identifier");
-+ "macro \"__has_%s\" requires an identifier", builtin);
- if (token->type == CPP_CLOSE_PAREN)
- return 0;
- }
-@@ -505,9 +506,38 @@ c_common_has_builtin (cpp_reader *pfile)
- break;
- }
-
-+ return name;
-+}
-+
-+/* Callback for has_builtin. */
-+
-+int
-+c_common_has_builtin (cpp_reader *pfile)
-+{
-+ const char *name = c_common_lex_availability_macro (pfile, "builtin");
-+ if (!name)
-+ return 0;
-+
- return names_builtin_p (name);
- }
-
-+/* Callback for has_feature. STRICT_P is true for has_feature and false
-+ for has_extension. */
-+
-+int
-+c_common_has_feature (cpp_reader *pfile, bool strict_p)
-+{
-+ const char *builtin = strict_p ? "feature" : "extension";
-+ const char *name = c_common_lex_availability_macro (pfile, builtin);
-+ if (!name)
-+ return 0;
-+
-+ /* If -pedantic-errors is given, __has_extension is equivalent to
-+ __has_feature. */
-+ strict_p |= flag_pedantic_errors;
-+ return has_feature_p (name, strict_p);
-+}
-+
-
- /* Read a token and return its type. Fill *VALUE with its value, if
- applicable. Fill *CPP_FLAGS with the token's flags, if it is
-@@ -539,6 +569,21 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
-
- case CPP_NUMBER:
- {
-+ /* If the user wants number-like entities to be returned as a raw
-+ string, then don't try to classify them, which emits unwanted
-+ diagnostics. */
-+ if (lex_flags & C_LEX_NUMBER_AS_STRING)
-+ {
-+ /* build_string adds a trailing NUL at [len]. */
-+ tree num_string = build_string (tok->val.str.len + 1,
-+ (const char *) tok->val.str.text);
-+ TREE_TYPE (num_string) = char_array_type_node;
-+ *value = num_string;
-+ /* We will effectively note this as CPP_N_INVALID, because we
-+ made no checks here. */
-+ break;
-+ }
-+
- const char *suffix = NULL;
- unsigned int flags = cpp_classify_number (parse_in, tok, &suffix, *loc);
-
-diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
-index c68a2a2..a600d40 100644
---- a/gcc/c-family/c-opts.cc
-+++ b/gcc/c-family/c-opts.cc
-@@ -1070,7 +1070,7 @@ c_common_post_options (const char **pfilename)
-
- if (flag_extern_tls_init)
- {
-- if (!TARGET_SUPPORTS_ALIASES || !SUPPORTS_WEAK)
-+ if (!SUPPORTS_WEAK)
- {
- /* Lazy TLS initialization for a variable in another TU requires
- alias and weak reference support. */
-diff --git a/gcc/c-family/c-ppoutput.cc b/gcc/c-family/c-ppoutput.cc
-index 4aa2bef..a1488c6 100644
---- a/gcc/c-family/c-ppoutput.cc
-+++ b/gcc/c-family/c-ppoutput.cc
-@@ -162,6 +162,7 @@ init_pp_output (FILE *out_stream)
-
- cb->has_attribute = c_common_has_attribute;
- cb->has_builtin = c_common_has_builtin;
-+ cb->has_feature = c_common_has_feature;
- cb->get_source_date_epoch = cb_get_source_date_epoch;
- cb->remap_filename = remap_macro_filename;
-
-diff --git a/gcc/c-family/c-pragma.h b/gcc/c-family/c-pragma.h
-index 9cc95ab..3e86a16 100644
---- a/gcc/c-family/c-pragma.h
-+++ b/gcc/c-family/c-pragma.h
-@@ -272,6 +272,9 @@ extern enum cpp_ttype pragma_lex (tree *, location_t *loc = NULL);
- #define C_LEX_STRING_NO_JOIN 2 /* Do not concatenate strings
- nor translate them into execution
- character set. */
-+#define C_LEX_NUMBER_AS_STRING 4 /* Do not classify a number, but
-+ instead return it as a raw
-+ string. */
-
- /* This is not actually available to pragma parsers. It's merely a
- convenient location to declare this function for c-lex, after
-diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
-index a750389..c7e6620 100644
---- a/gcc/c-family/c.opt
-+++ b/gcc/c-family/c.opt
-@@ -1484,6 +1484,10 @@ Wsubobject-linkage
- C++ ObjC++ Var(warn_subobject_linkage) Warning Init(1)
- Warn if a class type has a base or a field whose type uses the anonymous namespace or depends on a type with no linkage.
-
-+Welaborated-enum-base
-+C++ ObjC++ Var(warn_elaborated_enum_base) Warning Init(1)
-+Warn if an additional enum-base is used in an elaborated-type-specifier.
-+
- Wduplicate-decl-specifier
- C ObjC Var(warn_duplicate_decl_specifier) Warning LangEnabledBy(C ObjC,Wall)
- Warn when a declaration has duplicate const, volatile, restrict or _Atomic specifier.
-@@ -1967,7 +1971,7 @@ Implement resolution of DR 150 for matching of template template arguments.
-
- fnext-runtime
- ObjC ObjC++ LTO RejectNegative Var(flag_next_runtime)
--Generate code for NeXT (Apple Mac OS X) runtime environment.
-+Generate code for NeXT (Apple macOS) runtime environment.
-
- fnil-receivers
- ObjC ObjC++ Var(flag_nil_receivers) Init(1)
-diff --git a/gcc/calls.cc b/gcc/calls.cc
-index 53b0f58..b58990f 100644
---- a/gcc/calls.cc
-+++ b/gcc/calls.cc
-@@ -1367,7 +1367,8 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
- with those made by function.cc. */
-
- /* See if this argument should be passed by invisible reference. */
-- function_arg_info arg (type, argpos < n_named_args);
-+ function_arg_info arg (type, argpos < n_named_args,
-+ argpos == n_named_args - 1);
- if (pass_by_reference (args_so_far_pnt, arg))
- {
- const bool callee_copies
-@@ -1487,10 +1488,13 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
-
- unsignedp = TYPE_UNSIGNED (type);
- arg.type = type;
-- arg.mode
-- = promote_function_mode (type, TYPE_MODE (type), &unsignedp,
-- fndecl ? TREE_TYPE (fndecl) : fntype, 0);
--
-+ arg.mode = TYPE_MODE (type);
-+// arg.mode
-+// = promote_function_mode (type, TYPE_MODE (type), &unsignedp,
-+// fndecl ? TREE_TYPE (fndecl) : fntype, 0);
-+ arg.mode = promote_function_mode (args_so_far, arg,
-+ fndecl ? TREE_TYPE (fndecl) : fntype,
-+ &unsignedp, 0);
- args[i].unsignedp = unsignedp;
- args[i].mode = arg.mode;
-
-@@ -1540,6 +1544,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
- #endif
- reg_parm_stack_space,
- args[i].pass_on_stack ? 0 : args[i].partial,
-+ args_so_far,
- fndecl, args_size, &args[i].locate);
- #ifdef BLOCK_REG_PADDING
- else
-@@ -4076,6 +4081,7 @@ split_complex_types (tree types)
- return types;
- }
-
-+extern void debug_tree (tree);
- /* Output a library call to function ORGFUN (a SYMBOL_REF rtx)
- for a value of mode OUTMODE,
- with NARGS different arguments, passed as ARGS.
-@@ -4261,6 +4267,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
- argvec[count].reg != 0,
- #endif
- reg_parm_stack_space, 0,
-+ args_so_far,
- NULL_TREE, &args_size, &argvec[count].locate);
-
- if (argvec[count].reg == 0 || argvec[count].partial != 0
-@@ -4331,8 +4338,16 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
- val = force_operand (XEXP (slot, 0), NULL_RTX);
- }
-
-- arg.mode = promote_function_mode (NULL_TREE, arg.mode, &unsigned_p,
-- NULL_TREE, 0);
-+// arg.mode = promote_function_mode (NULL_TREE, arg.mode, &unsigned_p,
-+// NULL_TREE, 0);
-+ tree t = arg.type;
-+if (t)
-+ debug_tree (t);
-+gcc_assert (!t);
-+ arg.type = NULL_TREE;
-+ arg.mode = promote_function_mode (args_so_far, arg, NULL_TREE,
-+ &unsigned_p, 0);
-+ arg.type = t;
- argvec[count].mode = arg.mode;
- argvec[count].value = convert_modes (arg.mode, GET_MODE (val), val,
- unsigned_p);
-@@ -4352,6 +4367,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
- argvec[count].reg != 0,
- #endif
- reg_parm_stack_space, argvec[count].partial,
-+ args_so_far,
- NULL_TREE, &args_size, &argvec[count].locate);
- args_size.constant += argvec[count].locate.size.constant;
- gcc_assert (!argvec[count].locate.size.var);
-diff --git a/gcc/calls.h b/gcc/calls.h
-index c7f8c5e..42a1774 100644
---- a/gcc/calls.h
-+++ b/gcc/calls.h
-@@ -35,24 +35,43 @@ class function_arg_info
- {
- public:
- function_arg_info ()
-- : type (NULL_TREE), mode (VOIDmode), named (false),
-+ : type (NULL_TREE), mode (VOIDmode), named (false), last_named (false),
- pass_by_reference (false)
- {}
-
- /* Initialize an argument of mode MODE, either before or after promotion. */
- function_arg_info (machine_mode mode, bool named)
-- : type (NULL_TREE), mode (mode), named (named), pass_by_reference (false)
-+ : type (NULL_TREE), mode (mode), named (named), last_named (false),
-+ pass_by_reference (false)
-+ {}
-+
-+ function_arg_info (machine_mode mode, bool named, bool last_named)
-+ : type (NULL_TREE), mode (mode), named (named), last_named (last_named),
-+ pass_by_reference (false)
- {}
-
- /* Initialize an unpromoted argument of type TYPE. */
- function_arg_info (tree type, bool named)
-- : type (type), mode (TYPE_MODE (type)), named (named),
-+ : type (type), mode (TYPE_MODE (type)), named (named), last_named (false),
- pass_by_reference (false)
- {}
-
-+ /* Initialize an unpromoted argument of type TYPE. */
-+ function_arg_info (tree type, bool named, bool last_named)
-+ : type (type), mode (TYPE_MODE (type)), named (named),
-+ last_named (last_named), pass_by_reference (false)
-+ {}
-+
- /* Initialize an argument with explicit properties. */
- function_arg_info (tree type, machine_mode mode, bool named)
-- : type (type), mode (mode), named (named), pass_by_reference (false)
-+ : type (type), mode (mode), named (named), last_named (false),
-+ pass_by_reference (false)
-+ {}
-+
-+ /* Initialize an argument with explicit properties. */
-+ function_arg_info (tree type, machine_mode mode, bool named, bool last_named)
-+ : type (type), mode (mode), named (named), last_named (last_named),
-+ pass_by_reference (false)
- {}
-
- /* Return true if the gimple-level type is an aggregate. */
-@@ -105,6 +124,9 @@ public:
- "..."). See also TARGET_STRICT_ARGUMENT_NAMING. */
- unsigned int named : 1;
-
-+ /* True if this is the last named argument. */
-+ unsigned int last_named : 1;
-+
- /* True if we have decided to pass the argument by reference, in which case
- the function_arg_info describes a pointer to the original argument. */
- unsigned int pass_by_reference : 1;
-diff --git a/gcc/collect2.cc b/gcc/collect2.cc
-index 63b9a0c..1d7d9a4 100644
---- a/gcc/collect2.cc
-+++ b/gcc/collect2.cc
-@@ -73,7 +73,7 @@ along with GCC; see the file COPYING3. If not see
- In a cross-compiler, this means you need a cross nm,
- but that is not quite as unpleasant as special headers. */
-
--#if !defined (OBJECT_FORMAT_COFF)
-+#if !defined (OBJECT_FORMAT_COFF) && !defined (OBJECT_FORMAT_MACHO)
- #define OBJECT_FORMAT_NONE
- #endif
-
-@@ -107,7 +107,7 @@ along with GCC; see the file COPYING3. If not see
-
- #endif /* OBJECT_FORMAT_COFF */
-
--#ifdef OBJECT_FORMAT_NONE
-+#if defined (OBJECT_FORMAT_NONE) || defined (OBJECT_FORMAT_MACHO)
-
- /* Default flags to pass to nm. */
- #ifndef NM_FLAGS
-@@ -525,7 +525,7 @@ static const char *const target_machine = TARGET_MACHINE;
-
- Return 0 if not found, otherwise return its name, allocated with malloc. */
-
--#ifdef OBJECT_FORMAT_NONE
-+#if defined (OBJECT_FORMAT_NONE) || defined (OBJECT_FORMAT_MACHO)
-
- /* Add an entry for the object file NAME to object file list LIST.
- New entries are added at the end of the list. The original pointer
-@@ -764,6 +764,12 @@ do_link (char **ld_argv, const char *atsuffix)
- }
- }
-
-+#if defined (OBJECT_FORMAT_MACHO)
-+# define LLD_NAME "ld64.lld"
-+#else
-+# define LLD_NAME "ld.lld"
-+#endif
-+
- /* Main program. */
-
- int
-@@ -777,16 +783,19 @@ main (int argc, char **argv)
- USE_BFD_LD,
- USE_LLD_LD,
- USE_MOLD_LD,
-+ USE_CLASSIC_LD,
- USE_LD_MAX
- } selected_linker = USE_DEFAULT_LD;
-+
- static const char *const ld_suffixes[USE_LD_MAX] =
- {
- "ld",
- PLUGIN_LD_SUFFIX,
- "ld.gold",
- "ld.bfd",
-- "ld.lld",
-- "ld.mold"
-+ LLD_NAME,
-+ "ld.mold",
-+ "ld-classic"
- };
- static const char *const real_ld_suffix = "real-ld";
- static const char *const collect_ld_suffix = "collect-ld";
-@@ -953,14 +962,22 @@ main (int argc, char **argv)
- if (selected_linker == USE_DEFAULT_LD)
- selected_linker = USE_PLUGIN_LD;
- }
-+#if !defined (OBJECT_FORMAT_MACHO)
- else if (strcmp (argv[i], "-fuse-ld=bfd") == 0)
- selected_linker = USE_BFD_LD;
- else if (strcmp (argv[i], "-fuse-ld=gold") == 0)
- selected_linker = USE_GOLD_LD;
-+#endif
- else if (strcmp (argv[i], "-fuse-ld=lld") == 0)
- selected_linker = USE_LLD_LD;
- else if (strcmp (argv[i], "-fuse-ld=mold") == 0)
- selected_linker = USE_MOLD_LD;
-+#if defined (OBJECT_FORMAT_MACHO)
-+ else if (strcmp (argv[i], "-fuse-ld=classic") == 0)
-+ selected_linker = USE_CLASSIC_LD;
-+#endif
-+ else if (strcmp (argv[i], "-fuse-ld=") == 0)
-+ selected_linker = USE_DEFAULT_LD;
- else if (startswith (argv[i], "-o"))
- {
- /* Parse the output filename if it's given so that we can make
-@@ -1052,7 +1069,8 @@ main (int argc, char **argv)
- ld_file_name = 0;
- #ifdef DEFAULT_LINKER
- if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD ||
-- selected_linker == USE_LLD_LD || selected_linker == USE_MOLD_LD)
-+ selected_linker == USE_LLD_LD || selected_linker == USE_MOLD_LD ||
-+ selected_linker == USE_CLASSIC_LD)
- {
- char *linker_name;
- # ifdef HOST_EXECUTABLE_SUFFIX
-@@ -2266,7 +2284,7 @@ write_aix_file (FILE *stream, struct id *list)
- }
- #endif
-
--#ifdef OBJECT_FORMAT_NONE
-+#if defined (OBJECT_FORMAT_NONE) || defined (OBJECT_FORMAT_MACHO)
-
- /* Check to make sure the file is an LTO object file. */
-
-diff --git a/gcc/common/config/aarch64/aarch64-common.cc b/gcc/common/config/aarch64/aarch64-common.cc
-index 20bc4e1..5058d2f 100644
---- a/gcc/common/config/aarch64/aarch64-common.cc
-+++ b/gcc/common/config/aarch64/aarch64-common.cc
-@@ -301,8 +301,12 @@ aarch64_get_extension_string_for_isa_flags
-
- However, assemblers with Armv8-R AArch64 support should not have this
- issue, so we don't need this fix when targeting Armv8-R. */
-- auto explicit_flags = (!(current_flags & AARCH64_FL_V8R)
-- ? AARCH64_FL_CRC : 0);
-+ aarch64_feature_flags explicit_flags =
-+#ifndef DISABLE_AARCH64_AS_CRC_BUGFIX
-+ (!(current_flags & AARCH64_ISA_V8R) ? AARCH64_FL_CRC : 0);
-+#else
-+ 0;
-+#endif
-
- /* Add the features in isa_flags & ~current_flags using the smallest
- possible number of extensions. We can do this by iterating over the
-@@ -331,7 +335,10 @@ aarch64_get_extension_string_for_isa_flags
- if (added & opt.flag_canonical)
- {
- outstr += "+";
-- outstr += opt.name;
-+ if (startswith (opt.name, "rdm"))
-+ outstr += "rdm";
-+ else
-+ outstr += opt.name;
- }
-
- /* Remove the features in current_flags & ~isa_flags. If the feature does
-@@ -344,7 +351,10 @@ aarch64_get_extension_string_for_isa_flags
- {
- current_flags &= ~opt.flags_off;
- outstr += "+no";
-- outstr += opt.name;
-+ if (startswith (opt.name, "rdm"))
-+ outstr += "rdm";
-+ else
-+ outstr += opt.name;
- }
-
- return outstr;
-diff --git a/gcc/common.opt b/gcc/common.opt
-index b055c7b..cf32af4 100644
---- a/gcc/common.opt
-+++ b/gcc/common.opt
-@@ -2794,6 +2794,10 @@ fstack-usage
- Common RejectNegative Var(flag_stack_usage)
- Output stack usage information on a per-function basis.
-
-+fstack-use-cumulative-args
-+Common RejectNegative Var(flag_stack_use_cumulative_args) Init(STACK_USE_CUMULATIVE_ARGS_INIT)
-+Use cumulative args-based stack layout hooks.
-+
- fstrength-reduce
- Common Ignore
- Does nothing. Preserved for backward compatibility.
-@@ -2862,10 +2866,25 @@ Common Var(flag_tracer) Optimization
- Perform superblock formation via tail duplication.
-
- ftrampolines
--Common Var(flag_trampolines) Init(0)
-+Common Var(flag_trampolines) Init(HEAP_TRAMPOLINES_INIT)
- For targets that normally need trampolines for nested functions, always
- generate them instead of using descriptors.
-
-+ftrampoline-impl=
-+Common Joined RejectNegative Enum(trampoline_impl) Var(flag_trampoline_impl) Init(HEAP_TRAMPOLINES_INIT ? TRAMPOLINE_IMPL_HEAP : TRAMPOLINE_IMPL_STACK)
-+Whether trampolines are generated in executable memory rather than
-+executable stack.
-+
-+Enum
-+Name(trampoline_impl) Type(enum trampoline_impl) UnknownError(unknown trampoline implementation %qs)
-+
-+EnumValue
-+Enum(trampoline_impl) String(stack) Value(TRAMPOLINE_IMPL_STACK)
-+
-+EnumValue
-+Enum(trampoline_impl) String(heap) Value(TRAMPOLINE_IMPL_HEAP)
-+
-+
- ; Zero means that floating-point math operations cannot generate a
- ; (user-visible) trap. This is the case, for example, in nonstop
- ; IEEE 754 arithmetic.
-@@ -3123,6 +3142,10 @@ fuse-ld=mold
- Common Driver Negative(fuse-ld=mold)
- Use the Modern linker (MOLD) linker instead of the default linker.
-
-+fuse-ld=classic
-+Common Driver Negative(fuse-ld=classic)
-+Use the ld-classic linker instead of the default linker.
-+
- fuse-linker-plugin
- Common Undocumented Var(flag_use_linker_plugin)
-
-diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc
-index 8ad8284..567fb10 100644
---- a/gcc/config/aarch64/aarch64-builtins.cc
-+++ b/gcc/config/aarch64/aarch64-builtins.cc
-@@ -785,6 +785,8 @@ enum aarch64_builtins
- AARCH64_RBIT,
- AARCH64_RBITL,
- AARCH64_RBITLL,
-+ /* OS-specific */
-+ AARCH64_BUILTIN_CFSTRING,
- AARCH64_BUILTIN_MAX
- };
-
-@@ -920,6 +922,9 @@ tree aarch64_fp16_ptr_type_node = NULL_TREE;
- /* Back-end node type for brain float (bfloat) types. */
- tree aarch64_bf16_ptr_type_node = NULL_TREE;
-
-+/* Pointer to __float128 on Mach-O, where the 128b float is not long double. */
-+tree aarch64_float128_ptr_type_node = NULL_TREE;
-+
- /* Wrapper around add_builtin_function. NAME is the name of the built-in
- function, TYPE is the function type, CODE is the function subcode
- (relative to AARCH64_BUILTIN_GENERAL), and ATTRS is the function
-@@ -1695,6 +1700,29 @@ aarch64_init_bf16_types (void)
- aarch64_bf16_ptr_type_node = build_pointer_type (bfloat16_type_node);
- }
-
-+/* Initialize the backend REAL_TYPE type supporting __float128 on Mach-O,
-+ as well as the related built-ins. */
-+static void
-+aarch64_init_float128_types (void)
-+{
-+ /* The __float128 type. The node has already been created as
-+ _Float128, so for C we only need to register the __float128 name for
-+ it. For C++, we create a distinct type which will mangle differently
-+ (g) vs. _Float128 (DF128_) and behave backwards compatibly. */
-+ if (float128t_type_node == NULL_TREE)
-+ {
-+ float128t_type_node = make_node (REAL_TYPE);
-+ TYPE_PRECISION (float128t_type_node)
-+ = TYPE_PRECISION (float128_type_node);
-+ SET_TYPE_MODE (float128t_type_node, TYPE_MODE (float128_type_node));
-+ layout_type (float128t_type_node);
-+ }
-+ lang_hooks.types.register_builtin_type (float128t_type_node, "__float128");
-+
-+ aarch64_float128_ptr_type_node = build_pointer_type (float128t_type_node);
-+}
-+
-+
- /* Pointer authentication builtins that will become NOP on legacy platform.
- Currently, these builtins are for internal use only (libgcc EH unwinder). */
-
-@@ -1983,8 +2011,9 @@ aarch64_general_init_builtins (void)
- aarch64_init_fpsr_fpcr_builtins ();
-
- aarch64_init_fp16_types ();
--
- aarch64_init_bf16_types ();
-+ if (TARGET_MACHO)
-+ aarch64_init_float128_types ();
-
- {
- aarch64_simd_switcher simd;
-@@ -2021,6 +2050,14 @@ aarch64_general_init_builtins (void)
- handle_arm_acle_h ();
- }
-
-+void
-+aarch64_init_subtarget_builtins (void)
-+{
-+#ifdef SUBTARGET_INIT_BUILTINS
-+ SUBTARGET_INIT_BUILTINS;
-+#endif
-+}
-+
- /* Implement TARGET_BUILTIN_DECL for the AARCH64_BUILTIN_GENERAL group. */
- tree
- aarch64_general_builtin_decl (unsigned code, bool)
-diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc
-index 578ec6f..56c83ac 100644
---- a/gcc/config/aarch64/aarch64-c.cc
-+++ b/gcc/config/aarch64/aarch64-c.cc
-@@ -224,6 +224,16 @@ aarch64_cpu_cpp_builtins (cpp_reader *pfile)
- {
- aarch64_define_unconditional_macros (pfile);
- aarch64_update_cpp_builtins (pfile);
-+
-+ if (TARGET_MACHO)
-+ {
-+ builtin_define ("__builtin_copysignq=__builtin_copysignf128");
-+ builtin_define ("__builtin_fabsq=__builtin_fabsf128");
-+ builtin_define ("__builtin_huge_valq=__builtin_huge_valf128");
-+ builtin_define ("__builtin_infq=__builtin_inff128");
-+ builtin_define ("__builtin_nanq=__builtin_nanf128");
-+ builtin_define ("__builtin_nansq=__builtin_nansf128");
-+ }
- }
-
- /* Hook to validate the current #pragma GCC target and set the state, and
-@@ -359,4 +369,8 @@ aarch64_register_pragmas (void)
- targetm.check_builtin_call = aarch64_check_builtin_call;
-
- c_register_pragma ("GCC", "aarch64", aarch64_pragma_aarch64);
-+
-+#ifdef REGISTER_SUBTARGET_PRAGMAS
-+ REGISTER_SUBTARGET_PRAGMAS ();
-+#endif
- }
-diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def
-index fdda069..2dc4ae6 100644
---- a/gcc/config/aarch64/aarch64-cores.def
-+++ b/gcc/config/aarch64/aarch64-cores.def
-@@ -165,6 +165,18 @@ AARCH64_CORE("cortex-a76.cortex-a55", cortexa76cortexa55, cortexa53, V8_2A, (F
- /* Armv8-R Architecture Processors. */
- AARCH64_CORE("cortex-r82", cortexr82, cortexa53, V8R, (), cortexa53, 0x41, 0xd15, -1)
-
-+/* Apple (A12 and M) cores.
-+ Apple implementer ID from xnu,
-+ guesses for part #, guesses for scheduler ident, generic_armv8_a for costs.
-+ A12 seems mostly 8.3,
-+ M1 seems to be 8.4 + extras (see comments in option-extensions about f16fml),
-+ M2 mostly 8.5 but with missing mandatory features.
-+ M3 is pretty much the same as M2. */
-+AARCH64_CORE("apple-a12", applea12, cortexa53, V8_3A, (), cortexa53, 0x61, 0x12, -1)
-+AARCH64_CORE("apple-m1", applem1, cortexa57, V8_4A, (F16, SB, SSBS), cortexa73, 0x61, 0x23, -1)
-+AARCH64_CORE("apple-m2", applem2, cortexa57, V8_4A, (I8MM, BF16, F16, SB, SSBS), cortexa73, 0x61, 0x23, -1)
-+AARCH64_CORE("apple-m3", applem3, cortexa57, V8_4A, (I8MM, BF16, F16, SB, SSBS), cortexa73, 0x61, 0x23, -1)
-+
- /* Armv9.0-A Architecture Processors. */
-
- /* Arm ('A') cores. */
-diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
-index 32716f6..a107f9e 100644
---- a/gcc/config/aarch64/aarch64-protos.h
-+++ b/gcc/config/aarch64/aarch64-protos.h
-@@ -109,6 +109,14 @@ enum aarch64_symbol_type
- SYMBOL_TLSLE24,
- SYMBOL_TLSLE32,
- SYMBOL_TLSLE48,
-+ SYMBOL_MO_SMALL_ABS,
-+ SYMBOL_MO_SMALL_PCR,
-+ SYMBOL_MO_SMALL_GOT,
-+ SYMBOL_MO_SMALL_TLS,
-+ SYMBOL_MO_LARGE_ABS,
-+ SYMBOL_MO_LARGE_PCR,
-+ SYMBOL_MO_LARGE_GOT,
-+ SYMBOL_MO_LARGE_TLS,
- SYMBOL_FORCE_TO_MEM
- };
-
-@@ -745,6 +753,7 @@ void aarch64_post_cfi_startproc (void);
- poly_int64 aarch64_initial_elimination_offset (unsigned, unsigned);
- int aarch64_get_condition_code (rtx);
- bool aarch64_address_valid_for_prefetch_p (rtx, bool);
-+bool aarch64_address_valid_for_unscaled_prefetch_p (rtx, bool);
- bool aarch64_bitmask_imm (unsigned HOST_WIDE_INT val, machine_mode);
- unsigned HOST_WIDE_INT aarch64_and_split_imm1 (HOST_WIDE_INT val_in);
- unsigned HOST_WIDE_INT aarch64_and_split_imm2 (HOST_WIDE_INT val_in);
-@@ -775,7 +784,11 @@ bool aarch64_is_extend_from_extract (scalar_int_mode, rtx, rtx);
- bool aarch64_is_long_call_p (rtx);
- bool aarch64_is_noplt_call_p (rtx);
- bool aarch64_label_mentioned_p (rtx);
-+#if TARGET_MACHO
-+void aarch64_darwin_declare_function_name (FILE *, const char*, tree );
-+#else
- void aarch64_declare_function_name (FILE *, const char*, tree);
-+#endif
- void aarch64_asm_output_alias (FILE *, const tree, const tree);
- void aarch64_asm_output_external (FILE *, tree, const char*);
- bool aarch64_legitimate_pic_operand_p (rtx);
-@@ -971,6 +984,7 @@ void aarch64_override_options_internal (struct gcc_options *);
-
- const char *aarch64_general_mangle_builtin_type (const_tree);
- void aarch64_general_init_builtins (void);
-+void aarch64_init_subtarget_builtins (void);
- tree aarch64_general_fold_builtin (unsigned int, tree, unsigned int, tree *);
- gimple *aarch64_general_gimple_fold_builtin (unsigned int, gcall *,
- gimple_stmt_iterator *);
-diff --git a/gcc/config/aarch64/aarch64-tune.md b/gcc/config/aarch64/aarch64-tune.md
-index 9d46d38..3c3aa72 100644
---- a/gcc/config/aarch64/aarch64-tune.md
-+++ b/gcc/config/aarch64/aarch64-tune.md
-@@ -1,5 +1,5 @@
- ;; -*- buffer-read-only: t -*-
- ;; Generated automatically by gentune.sh from aarch64-cores.def
- (define_attr "tune"
-- "cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa710,cortexa715,cortexx2,cortexx3,neoversen2,cobalt100,neoversev2,demeter"
-+ "cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,applea12,applem1,applem2,applem3,cortexa510,cortexa710,cortexa715,cortexx2,cortexx3,neoversen2,cobalt100,neoversev2,demeter"
- (const (symbol_ref "((enum attr_tune) aarch64_tune)")))
-diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
-index b8a4ab1..d2f5034 100644
---- a/gcc/config/aarch64/aarch64.cc
-+++ b/gcc/config/aarch64/aarch64.cc
-@@ -295,8 +295,10 @@ static bool aarch64_vfp_is_call_or_return_candidate (machine_mode,
- const_tree,
- machine_mode *, int *,
- bool *, bool);
-+#if !TARGET_MACHO
- static void aarch64_elf_asm_constructor (rtx, int) ATTRIBUTE_UNUSED;
- static void aarch64_elf_asm_destructor (rtx, int) ATTRIBUTE_UNUSED;
-+#endif
- static void aarch64_override_options_after_change (void);
- static bool aarch64_vector_mode_supported_p (machine_mode);
- static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool);
-@@ -2795,6 +2797,9 @@ static const struct attribute_spec aarch64_attribute_table[] =
- {
- /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
- affects_type_identity, handler, exclude } */
-+#ifdef SUBTARGET_ATTRIBUTE_TABLE
-+ SUBTARGET_ATTRIBUTE_TABLE,
-+#endif
- { "aarch64_vector_pcs", 0, 0, false, true, true, true,
- handle_aarch64_vector_pcs_attribute, NULL },
- { "arm_sve_vector_bits", 1, 1, false, true, false, true,
-@@ -3949,7 +3954,7 @@ aarch64_hard_regno_mode_ok (unsigned regno, machine_mode mode)
- if (known_le (GET_MODE_SIZE (mode), 8))
- return true;
- if (known_le (GET_MODE_SIZE (mode), 16))
-- return (regno & 1) == 0;
-+ return (regno & 1) == 0 || TARGET_MACHO; /* darwinpcs D.4 */
- }
- else if (FP_REGNUM_P (regno))
- {
-@@ -3995,8 +4000,10 @@ static bool
- aarch64_takes_arguments_in_sve_regs_p (const_tree fntype)
- {
- CUMULATIVE_ARGS args_so_far_v;
-+ /* This does not apply to variadic functions, so all the (currently
-+ uncounted) arguments must be named. */
- aarch64_init_cumulative_args (&args_so_far_v, NULL_TREE, NULL_RTX,
-- NULL_TREE, 0, true);
-+ NULL_TREE, -1, true);
- cumulative_args_t args_so_far = pack_cumulative_args (&args_so_far_v);
-
- for (tree chain = TYPE_ARG_TYPES (fntype);
-@@ -4481,6 +4488,7 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
- switch (type)
- {
- case SYMBOL_SMALL_ABSOLUTE:
-+ case SYMBOL_MO_SMALL_PCR:
- {
- /* In ILP32, the mode of dest can be either SImode or DImode. */
- rtx tmp_reg = dest;
-@@ -4491,6 +4499,21 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
- if (can_create_pseudo_p ())
- tmp_reg = gen_reg_rtx (mode);
-
-+ if (TARGET_MACHO)
-+ {
-+ rtx sym, off;
-+ split_const (imm, &sym, &off);
-+ /* Negative offsets don't work, whether by intention is TBD. */
-+ if (INTVAL (off) < 0 || INTVAL (off) > 8 * 1024 * 1024)
-+ {
-+ emit_move_insn (tmp_reg, gen_rtx_HIGH (mode, sym));
-+ emit_insn (gen_add_losym (dest, tmp_reg, sym));
-+ /* FIXME: add the SI option if/when we support ilp32. */
-+ emit_insn (gen_adddi3 (dest, dest, off));
-+ return;
-+ }
-+ /* else small enough positive offset is OK. */
-+ }
- emit_move_insn (tmp_reg, gen_rtx_HIGH (mode, copy_rtx (imm)));
- emit_insn (gen_add_losym (dest, tmp_reg, imm));
- return;
-@@ -4574,6 +4597,7 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
- return;
- }
-
-+ case SYMBOL_MO_SMALL_GOT:
- case SYMBOL_SMALL_GOT_4G:
- emit_insn (gen_rtx_SET (dest, imm));
- return;
-@@ -6855,6 +6879,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
- case SYMBOL_SMALL_TLSIE:
- case SYMBOL_SMALL_GOT_28K:
- case SYMBOL_SMALL_GOT_4G:
-+ case SYMBOL_MO_SMALL_GOT:
- case SYMBOL_TINY_GOT:
- case SYMBOL_TINY_TLSIE:
- if (const_offset != 0)
-@@ -6868,6 +6893,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
- /* FALLTHRU */
-
- case SYMBOL_SMALL_ABSOLUTE:
-+ case SYMBOL_MO_SMALL_PCR:
- case SYMBOL_TINY_ABSOLUTE:
- case SYMBOL_TLSLE12:
- case SYMBOL_TLSLE24:
-@@ -7449,6 +7475,7 @@ aarch64_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
- gcc_unreachable ();
- }
-
-+#if !TARGET_MACHO
- static bool
- aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode,
- const_tree type, int *nregs)
-@@ -7458,6 +7485,7 @@ aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode,
- &pcum->aapcs_vfp_rmode,
- nregs, NULL, pcum->silent_p);
- }
-+#endif
-
- /* Given MODE and TYPE of a function argument, return the alignment in
- bits. The idea is to suppress any stronger alignment requested by
-@@ -7481,7 +7509,7 @@ aarch64_function_arg_alignment (machine_mode mode, const_tree type,
- if (integer_zerop (TYPE_SIZE (type)))
- return 0;
-
-- gcc_assert (TYPE_MODE (type) == mode);
-+ gcc_assert (TARGET_MACHO || TYPE_MODE (type) == mode);
-
- if (!AGGREGATE_TYPE_P (type))
- {
-@@ -7641,6 +7669,14 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- Both behaviors were wrong, but in different cases. */
-
- pcum->aapcs_arg_processed = true;
-+ if (TARGET_MACHO)
-+ {
-+ /* Set suitable defaults for queries. */
-+ pcum->darwinpcs_arg_boundary
-+ = aarch64_function_arg_alignment (mode, type, &abi_break,
-+ &abi_break_packed);
-+ pcum->darwinpcs_arg_padding = BITS_PER_UNIT;
-+ }
-
- pure_scalable_type_info pst_info;
- if (type && pst_info.analyze_registers (type))
-@@ -7700,13 +7736,29 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- /* No frontends can create types with variable-sized modes, so we
- shouldn't be asked to pass or return them. */
- size = GET_MODE_SIZE (mode).to_constant ();
-+
-+ if (TARGET_MACHO)
-+ /* Since we can pack things on the stack, we need the unrounded size. */
-+ pcum->darwinpcs_stack_bytes = size;
-+
- size = ROUND_UP (size, UNITS_PER_WORD);
-
- allocate_ncrn = (type) ? !(FLOAT_TYPE_P (type)) : !FLOAT_MODE_P (mode);
-+ bool is_ha = false;
-+#if !TARGET_MACHO
- allocate_nvrn = aarch64_vfp_is_call_candidate (pcum_v,
- mode,
- type,
- &nregs);
-+#else
-+ /* We care if the value is a homogenous aggregate when laying out the stack,
-+ so use this call directly. */
-+ allocate_nvrn
-+ = aarch64_vfp_is_call_or_return_candidate (mode, type,
-+ &pcum->aapcs_vfp_rmode,
-+ &nregs, &is_ha,
-+ pcum->silent_p);
-+#endif
- gcc_assert (!sve_p || !allocate_nvrn);
-
- unsigned int alignment
-@@ -7727,7 +7779,13 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- if (!pcum->silent_p && !TARGET_FLOAT)
- aarch64_err_no_fpadvsimd (mode);
-
-- if (nvrn + nregs <= NUM_FP_ARG_REGS)
-+ if (TARGET_MACHO
-+ && !arg.named)
-+ {
-+ pcum->aapcs_nextnvrn = NUM_FP_ARG_REGS;
-+ goto on_stack;
-+ }
-+ else if (nvrn + nregs <= NUM_FP_ARG_REGS)
- {
- pcum->aapcs_nextnvrn = nvrn + nregs;
- if (!aarch64_composite_type_p (type, mode))
-@@ -7757,6 +7815,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- }
- pcum->aapcs_reg = par;
- }
-+ pcum->darwinpcs_stack_bytes = 0;
- return;
- }
- else
-@@ -7773,14 +7832,24 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- /* C6 - C9. though the sign and zero extension semantics are
- handled elsewhere. This is the case where the argument fits
- entirely general registers. */
-+
- if (allocate_ncrn && (ncrn + nregs <= NUM_ARG_REGS))
- {
- gcc_assert (nregs == 0 || nregs == 1 || nregs == 2);
-
-+ if (TARGET_MACHO
-+ && !arg.named)
-+ {
-+ pcum->aapcs_nextncrn = NUM_ARG_REGS;
-+ goto on_stack;
-+ }
-+
- /* C.8 if the argument has an alignment of 16 then the NGRN is
- rounded up to the next even number. */
- if (nregs == 2
-- && ncrn % 2)
-+ && ncrn % 2
-+ /* Darwin PCS deletes rule C.8. */
-+ && !TARGET_MACHO)
- {
- /* Emit a warning if the alignment changed when taking the
- 'packed' attribute into account. */
-@@ -7842,8 +7911,8 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- }
- pcum->aapcs_reg = par;
- }
--
- pcum->aapcs_nextncrn = ncrn + nregs;
-+ pcum->darwinpcs_stack_bytes = 0;
- return;
- }
-
-@@ -7853,7 +7922,81 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
- /* The argument is passed on stack; record the needed number of words for
- this argument and align the total size if necessary. */
- on_stack:
-- pcum->aapcs_stack_words = size / UNITS_PER_WORD;
-+
-+ if (TARGET_MACHO)
-+ {
-+ /* Darwin does not round up the allocation for smaller entities to 8
-+ bytes. It only requires the natural alignment for these.
-+
-+ but we don't do this for:
-+ * unnamed parms in variadic functions
-+ * complex types
-+ * unions
-+ * aggregates (except for homogeneous ones which are handles as the
-+ enclosed type).
-+ each entry starts a new slot.
-+
-+ 16 byte entities are naturally aligned on the stack.
-+ There was no darwinpcs for GCC 9, so neither the implementation
-+ change nor the warning should fire here (i.e. we do not need to check
-+ if 16byte entities alter the stack size). */
-+
-+ gcc_checking_assert (arg.named == pcum->named_p);
-+ pcum->darwinpcs_arg_padding = BITS_PER_UNIT;
-+ if (!pcum->named_p
-+ || TREE_CODE (type) == COMPLEX_TYPE
-+ || (TREE_CODE (type) == RECORD_TYPE
-+ && !is_ha && !SCALAR_FLOAT_MODE_P (pcum->aapcs_vfp_rmode))
-+ || TREE_CODE (type) == UNION_TYPE)
-+ {
-+ pcum->aapcs_stack_words = size / UNITS_PER_WORD;
-+ pcum->darwinpcs_sub_word_offset = 0;
-+ pcum->darwinpcs_sub_word_pos = 0;
-+ pcum->darwinpcs_arg_boundary = MAX (alignment, PARM_BOUNDARY);
-+ if (!pcum->named_p)
-+ pcum->darwinpcs_arg_padding = PARM_BOUNDARY;
-+ return;
-+ }
-+
-+ /* Updated sub-word offset aligned for the new object.
-+ We are looking for the case that the new object will fit after some
-+ existing object(s) in the same stack slot. In that case, we do not
-+ need to add any more stack space for it. */
-+ int new_off
-+ = ROUND_UP (pcum->darwinpcs_sub_word_pos, alignment / BITS_PER_UNIT);
-+
-+ if (new_off >= UNITS_PER_WORD)
-+ {
-+ /* That exceeds a stack slot, start a new one. */
-+ pcum->darwinpcs_sub_word_offset = 0;
-+ pcum->darwinpcs_sub_word_pos = 0;
-+ new_off = 0;
-+ }
-+ /* This is the end of the new object. */
-+ int new_pos = new_off + pcum->darwinpcs_stack_bytes;
-+
-+ if (pcum->darwinpcs_sub_word_pos == 0)
-+ /* New stack slot, just allocate one or more words, and note where
-+ the next arg will start. */
-+ pcum->aapcs_stack_words = size / UNITS_PER_WORD;
-+ else if (new_pos <= UNITS_PER_WORD)
-+ /* Old stack slot, object starts at new_off and goes to new_pos, we do
-+ not add any stack space. */
-+ pcum->darwinpcs_sub_word_offset = new_off;
-+ pcum->darwinpcs_sub_word_pos = new_pos;
-+ pcum->darwinpcs_arg_boundary = alignment ;
-+ if (pcum->last_named_p && new_pos > 0)
-+ {
-+ /* Round the last named arg to the start of the next stack slot. */
-+ if (new_pos <= 4)
-+ pcum->darwinpcs_arg_padding = PARM_BOUNDARY;
-+ else if (new_pos <= 6)
-+ pcum->darwinpcs_arg_padding = 4 * BITS_PER_UNIT;
-+ else if (pcum->darwinpcs_sub_word_pos <= 7)
-+ pcum->darwinpcs_arg_padding = 2 * BITS_PER_UNIT;
-+ }
-+ return;
-+ }
-
- if (warn_pcs_change
- && abi_break_packed
-@@ -7862,6 +8005,8 @@ on_stack:
- inform (input_location, "parameter passing for argument of type "
- "%qT changed in GCC 13.1", type);
-
-+ /* size was already rounded up to PARM_BOUNDARY. */
-+ pcum->aapcs_stack_words = size / UNITS_PER_WORD;
- if (alignment == 16 * BITS_PER_UNIT)
- {
- int new_size = ROUND_UP (pcum->aapcs_stack_size, 16 / UNITS_PER_WORD);
-@@ -7915,7 +8060,28 @@ aarch64_init_cumulative_args (CUMULATIVE_ARGS *pcum,
- pcum->aapcs_arg_processed = false;
- pcum->aapcs_stack_words = 0;
- pcum->aapcs_stack_size = 0;
-+ pcum->darwinpcs_stack_bytes = 0;
-+ pcum->darwinpcs_sub_word_offset = 0;
-+ pcum->darwinpcs_sub_word_pos = 0;
-+ pcum->darwinpcs_arg_boundary = BITS_PER_UNIT;
-+ pcum->darwinpcs_arg_padding = BITS_PER_UNIT;
-+ /* If we have been invoked for incoming args, then n_named will have been
-+ set to -1, but we should have a function decl - so pick up the named
-+ count from that. If that fails, and we end up with -1, this effectively
-+ corresponds to assuming that there is an arbitrary number of named
-+ args. */
-+ pcum->darwinpcs_n_named = n_named;
-+ if (n_named == (unsigned)-1 && fndecl)
-+ {
-+ tree fnt = TREE_TYPE (fndecl);
-+ if (fnt && TYPE_ARG_TYPES (fnt))
-+ pcum->darwinpcs_n_named = list_length (TYPE_ARG_TYPES (fnt));
-+ }
-+ pcum->darwinpcs_n_args_processed = 0;
-+ pcum->named_p = pcum->darwinpcs_n_named != 0;
-+ pcum->last_named_p = pcum->darwinpcs_n_named == 1;
- pcum->silent_p = silent_p;
-+ pcum->aapcs_vfp_rmode = VOIDmode;
-
- if (!silent_p
- && !TARGET_FLOAT
-@@ -7954,8 +8120,10 @@ aarch64_function_arg_advance (cumulative_args_t pcum_v,
- || pcum->pcs_variant == ARM_PCS_SVE)
- {
- aarch64_layout_arg (pcum_v, arg);
-- gcc_assert ((pcum->aapcs_reg != NULL_RTX)
-- != (pcum->aapcs_stack_words != 0));
-+ pcum->darwinpcs_n_args_processed++;
-+ gcc_assert (TARGET_MACHO
-+ || (pcum->aapcs_reg != NULL_RTX)
-+ != (pcum->aapcs_stack_words != 0));
- pcum->aapcs_arg_processed = false;
- pcum->aapcs_ncrn = pcum->aapcs_nextncrn;
- pcum->aapcs_nvrn = pcum->aapcs_nextnvrn;
-@@ -7963,6 +8131,12 @@ aarch64_function_arg_advance (cumulative_args_t pcum_v,
- pcum->aapcs_stack_size += pcum->aapcs_stack_words;
- pcum->aapcs_stack_words = 0;
- pcum->aapcs_reg = NULL_RTX;
-+ pcum->darwinpcs_arg_boundary = BITS_PER_UNIT;
-+ pcum->darwinpcs_arg_padding = BITS_PER_UNIT;
-+ pcum->named_p
-+ = pcum->darwinpcs_n_args_processed < pcum->darwinpcs_n_named;
-+ pcum->last_named_p
-+ = pcum->darwinpcs_n_args_processed + 1 == pcum->darwinpcs_n_named;
- }
- }
-
-@@ -7974,12 +8148,15 @@ aarch64_function_arg_regno_p (unsigned regno)
- || (PR_REGNUM_P (regno) && regno < P0_REGNUM + NUM_PR_ARG_REGS));
- }
-
--/* Implement FUNCTION_ARG_BOUNDARY. Every parameter gets at least
-- PARM_BOUNDARY bits of alignment, but will be given anything up
-- to STACK_BOUNDARY bits if the type requires it. This makes sure
-- that both before and after the layout of each argument, the Next
-- Stacked Argument Address (NSAA) will have a minimum alignment of
-- 8 bytes. */
-+/* Implement FUNCTION_ARG_BOUNDARY.
-+ For AAPCS64, Every parameter gets at least PARM_BOUNDARY bits of
-+ alignment, but will be given anything up to STACK_BOUNDARY bits
-+ if the type requires it. This makes sure that both before and after
-+ the layout of each argument, the Next Stacked Argument Address (NSAA)
-+ will have a minimum alignment of 8 bytes.
-+
-+ For darwinpcs, this is only called to lower va_arg entries which are
-+ always aligned as for AAPCS64. */
-
- static unsigned int
- aarch64_function_arg_boundary (machine_mode mode, const_tree type)
-@@ -7991,8 +8168,107 @@ aarch64_function_arg_boundary (machine_mode mode, const_tree type)
- &abi_break_packed);
- /* We rely on aarch64_layout_arg and aarch64_gimplify_va_arg_expr
- to emit warnings about ABI incompatibility. */
-+#if TARGET_MACHO
-+ /* This can only work for unnamed args. */
-+ machine_mode comp_mode = VOIDmode;
-+ int nregs;
-+ bool is_ha;
-+ aarch64_vfp_is_call_or_return_candidate (mode, type, &comp_mode, &nregs,
-+ &is_ha, /*silent*/true);
-+ if (TREE_CODE (type) == COMPLEX_TYPE
-+ || (TREE_CODE (type) == RECORD_TYPE
-+ && !is_ha && !SCALAR_FLOAT_MODE_P (comp_mode))
-+ || TREE_CODE (type) == UNION_TYPE)
-+ return MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
-+ return MIN (alignment, STACK_BOUNDARY);
-+#else
-+ alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
-+ return alignment;
-+#endif
-+}
-+
-+/* For Darwin, we want to use the arg boundary computed when laying out the
-+ function arg, to cope with items packed on the stack and the different
-+ rules applied to unnamed parms. */
-+
-+static unsigned int
-+aarch64_function_arg_boundary_ca (machine_mode mode ATTRIBUTE_UNUSED,
-+ const_tree type ATTRIBUTE_UNUSED,
-+ cumulative_args_t ca ATTRIBUTE_UNUSED)
-+{
-+ unsigned int abi_break;
-+ unsigned int abi_break_packed;
-+ unsigned int alignment = aarch64_function_arg_alignment (mode, type,
-+ &abi_break,
-+ &abi_break_packed);
-+ /* We rely on aarch64_layout_arg and aarch64_gimplify_va_arg_expr
-+ to emit warnings about ABI incompatibility. */
-+#if TARGET_MACHO
-+ CUMULATIVE_ARGS *pcum = get_cumulative_args (ca);
-+gcc_checking_assert (pcum->aapcs_arg_processed);
-+
-+ bool named_p = pcum->darwinpcs_n_args_processed < pcum->darwinpcs_n_named;
-+gcc_checking_assert (named_p == pcum->named_p);
-+ machine_mode comp_mode = VOIDmode;
-+ int nregs;
-+ bool is_ha;
-+ aarch64_vfp_is_call_or_return_candidate (mode, type, &comp_mode, &nregs,
-+ &is_ha, /*silent*/true);
-+ bool no_pack = (TREE_CODE (type) == COMPLEX_TYPE
-+ || (TREE_CODE (type) == RECORD_TYPE
-+ && !is_ha && !SCALAR_FLOAT_MODE_P (comp_mode))
-+ || TREE_CODE (type) == UNION_TYPE);
-+
-+ bool in_regs = (pcum->aapcs_reg != NULL_RTX);
-+
-+ if ((named_p && !no_pack) || in_regs)
-+ ; /* Leave the alignment as natural. */
-+ else
-+ alignment = MAX (alignment, PARM_BOUNDARY);
-+gcc_checking_assert (alignment == pcum->darwinpcs_arg_boundary);
-+ return MIN (alignment, STACK_BOUNDARY);
-+
-+#else
- alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
- return alignment;
-+#endif
-+}
-+
-+/* Implement TARGET_FUNCTION_ARG_ROUND_BOUNDARY_CA for darwinpcs which allows
-+ non-standard passing of byte-aligned items [D.2]. This is done by pulling
-+ the values out of the cumulative args struct. */
-+
-+static unsigned int
-+aarch64_function_arg_round_boundary_ca (machine_mode mode ATTRIBUTE_UNUSED,
-+ const_tree type ATTRIBUTE_UNUSED,
-+ cumulative_args_t ca)
-+{
-+ CUMULATIVE_ARGS *pcum = get_cumulative_args (ca);
-+gcc_checking_assert (pcum->aapcs_arg_processed);
-+ bool named_p = pcum->darwinpcs_n_args_processed < pcum->darwinpcs_n_named;
-+gcc_checking_assert (named_p == pcum->named_p);
-+ bool last_named_p = pcum->darwinpcs_n_args_processed + 1 == pcum->darwinpcs_n_named;
-+gcc_checking_assert (last_named_p == pcum->last_named_p);
-+
-+ unsigned boundary = BITS_PER_UNIT;
-+ if (last_named_p && pcum->darwinpcs_sub_word_pos > 0)
-+ {
-+ /* Round the last named arg to the start of the next stack slot. */
-+ if (pcum->darwinpcs_sub_word_pos <= 4)
-+ boundary = PARM_BOUNDARY;
-+ else if (pcum->darwinpcs_sub_word_pos <= 6)
-+ boundary = 4 * BITS_PER_UNIT;
-+ else if (pcum->darwinpcs_sub_word_pos <= 7)
-+ boundary = 2 * BITS_PER_UNIT;
-+ }
-+ else if (named_p)
-+ /* Named args are naturally aligned, but with no rounding. */
-+ ;
-+ else
-+ /* un-named args are rounded to fill slots. */
-+ boundary = PARM_BOUNDARY;
-+gcc_checking_assert (boundary == pcum->darwinpcs_arg_padding);
-+ return boundary;
- }
-
- /* Implement TARGET_GET_RAW_RESULT_MODE and TARGET_GET_RAW_ARG_MODE. */
-@@ -11091,6 +11367,7 @@ aarch64_classify_address (struct aarch64_address_info *info,
- /* load literal: pc-relative constant pool entry. Only supported
- for SI mode or larger. */
- info->type = ADDRESS_SYMBOLIC;
-+ info->offset = NULL_RTX;
-
- if (!load_store_pair_p
- && GET_MODE_SIZE (mode).is_constant (&const_size)
-@@ -11098,6 +11375,7 @@ aarch64_classify_address (struct aarch64_address_info *info,
- {
- poly_int64 offset;
- rtx sym = strip_offset_and_salt (x, &offset);
-+
- return ((LABEL_REF_P (sym)
- || (SYMBOL_REF_P (sym)
- && CONSTANT_POOL_ADDRESS_P (sym)
-@@ -11115,10 +11393,13 @@ aarch64_classify_address (struct aarch64_address_info *info,
- poly_int64 offset;
- HOST_WIDE_INT const_offset;
- rtx sym = strip_offset_and_salt (info->offset, &offset);
-+
- if (SYMBOL_REF_P (sym)
- && offset.is_constant (&const_offset)
- && (aarch64_classify_symbol (sym, const_offset)
-- == SYMBOL_SMALL_ABSOLUTE))
-+ == SYMBOL_SMALL_ABSOLUTE
-+ || aarch64_classify_symbol (sym, const_offset)
-+ == SYMBOL_MO_SMALL_PCR))
- {
- /* The symbol and offset must be aligned to the access size. */
- unsigned int align;
-@@ -11168,6 +11449,55 @@ aarch64_address_valid_for_prefetch_p (rtx x, bool strict_p)
- if (!res)
- return false;
-
-+ /* For ELF targets using GAS, we emit prfm unconditionally; GAS will alter
-+ the instruction to pick the prfum form where possible (i.e. when the
-+ offset is in the range -256..255) and fall back to prfm otherwise.
-+ We can reject cases where the offset exceeds the range usable by both
-+ insns [-256..32760], or for offsets > 255 when the value is not divisible
-+ by 8.
-+ For Mach-O (Darwin) where the assembler uses the LLVM back end, that does
-+ not yet do the substitution, so we must reject all prfum cases. */
-+ if (addr.offset)
-+ {
-+ HOST_WIDE_INT offs = INTVAL (addr.offset);
-+ if (offs < -256) /* Out of range for both prfum and prfm. */
-+ return false;
-+ if (offs > 32760) /* Out of range for prfm. */
-+ return false;
-+ if (offs & 0x07) /* We cannot use prfm. */
-+ {
-+ if (offs > 255) /* Out of range for prfum. */
-+ return false;
-+ if (TARGET_MACHO)
-+ return false;
-+ }
-+ if (TARGET_MACHO && offs < 0)
-+ return false;
-+ }
-+
-+ /* ... except writeback forms. */
-+ return addr.type != ADDRESS_REG_WB;
-+}
-+
-+/* Return true if the address X is valid for a PRFUM instruction.
-+ STRICT_P is true if we should do strict checking with
-+ aarch64_classify_address. */
-+
-+bool
-+aarch64_address_valid_for_unscaled_prefetch_p (rtx x, bool strict_p)
-+{
-+ struct aarch64_address_info addr;
-+
-+ /* PRFUM accepts the same addresses as DImode, but constrained to a range
-+ -256..255. */
-+ bool res = aarch64_classify_address (&addr, x, DImode, strict_p);
-+ if (!res)
-+ return false;
-+
-+ if (addr.offset && ((INTVAL (addr.offset) > 255)
-+ || (INTVAL (addr.offset) < -256)))
-+ return false;
-+
- /* ... except writeback forms. */
- return addr.type != ADDRESS_REG_WB;
- }
-@@ -11881,6 +12211,144 @@ sizetochar (int size)
- }
- }
-
-+static void
-+output_macho_postfix_expr (FILE *file, rtx x, const char *postfix)
-+{
-+ char buf[256];
-+
-+ restart:
-+ switch (GET_CODE (x))
-+ {
-+ case PC:
-+ putc ('.', file);
-+ break;
-+
-+ case SYMBOL_REF:
-+ if (SYMBOL_REF_DECL (x))
-+ assemble_external (SYMBOL_REF_DECL (x));
-+ assemble_name (file, XSTR (x, 0));
-+ fprintf (file, "@%s", postfix);
-+ break;
-+
-+ case LABEL_REF:
-+ x = label_ref_label (x);
-+ /* Fall through. */
-+ case CODE_LABEL:
-+ ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x));
-+ assemble_name (file, buf);
-+ fprintf (file, "@%s", postfix);
-+ break;
-+
-+ case CONST_INT:
-+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
-+ break;
-+
-+ case CONST:
-+ /* This used to output parentheses around the expression,
-+ but that does not work on the 386 (either ATT or BSD assembler). */
-+ output_macho_postfix_expr (file, XEXP (x, 0), postfix);
-+ break;
-+
-+ case CONST_WIDE_INT:
-+ /* We do not know the mode here so we have to use a round about
-+ way to build a wide-int to get it printed properly. */
-+ {
-+ wide_int w = wide_int::from_array (&CONST_WIDE_INT_ELT (x, 0),
-+ CONST_WIDE_INT_NUNITS (x),
-+ CONST_WIDE_INT_NUNITS (x)
-+ * HOST_BITS_PER_WIDE_INT,
-+ false);
-+ print_decs (w, file);
-+ }
-+ break;
-+
-+ case CONST_DOUBLE:
-+ if (CONST_DOUBLE_AS_INT_P (x))
-+ {
-+ /* We can use %d if the number is one word and positive. */
-+ if (CONST_DOUBLE_HIGH (x))
-+ fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX,
-+ (unsigned HOST_WIDE_INT) CONST_DOUBLE_HIGH (x),
-+ (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (x));
-+ else if (CONST_DOUBLE_LOW (x) < 0)
-+ fprintf (file, HOST_WIDE_INT_PRINT_HEX,
-+ (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (x));
-+ else
-+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, CONST_DOUBLE_LOW (x));
-+ }
-+ else
-+ /* We can't handle floating point constants;
-+ PRINT_OPERAND must handle them. */
-+ output_operand_lossage ("floating constant misused");
-+ break;
-+
-+ case CONST_FIXED:
-+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, CONST_FIXED_VALUE_LOW (x));
-+ break;
-+
-+ case PLUS:
-+ /* Some assemblers need integer constants to appear last (eg masm). */
-+ if (CONST_INT_P (XEXP (x, 0)))
-+ {
-+ output_macho_postfix_expr (file, XEXP (x, 1), postfix);
-+ if (INTVAL (XEXP (x, 0)) >= 0)
-+ fprintf (file, "+");
-+ output_addr_const (file, XEXP (x, 0));
-+ }
-+ else
-+ {
-+ output_macho_postfix_expr (file, XEXP (x, 0), postfix);
-+ if (!CONST_INT_P (XEXP (x, 1))
-+ || INTVAL (XEXP (x, 1)) >= 0)
-+ fprintf (file, "+");
-+ output_addr_const (file, XEXP (x, 1));
-+ }
-+ break;
-+
-+ case MINUS:
-+ /* Avoid outputting things like x-x or x+5-x,
-+ since some assemblers can't handle that. */
-+ x = simplify_subtraction (x);
-+ if (GET_CODE (x) != MINUS)
-+ goto restart;
-+
-+ output_macho_postfix_expr (file, XEXP (x, 0), postfix);
-+ fprintf (file, "-");
-+ if ((CONST_INT_P (XEXP (x, 1)) && INTVAL (XEXP (x, 1)) >= 0)
-+ || GET_CODE (XEXP (x, 1)) == PC
-+ || GET_CODE (XEXP (x, 1)) == SYMBOL_REF)
-+ output_addr_const (file, XEXP (x, 1));
-+ else
-+ {
-+ fputs (targetm.asm_out.open_paren, file);
-+ output_addr_const (file, XEXP (x, 1));
-+ fputs (targetm.asm_out.close_paren, file);
-+ }
-+ break;
-+
-+ case ZERO_EXTEND:
-+ case SIGN_EXTEND:
-+ case SUBREG:
-+ case TRUNCATE:
-+ output_addr_const (file, XEXP (x, 0));
-+ break;
-+
-+ case UNSPEC:
-+ if (XINT (x, 1) == UNSPEC_SALT_ADDR)
-+ {
-+ output_macho_postfix_expr (file, XVECEXP (x, 0, 0), postfix);
-+ break;
-+ }
-+ /* FALLTHROUGH */
-+ default:
-+ if (targetm.asm_out.output_addr_const_extra (file, x))
-+ break;
-+
-+ output_operand_lossage ("invalid expression as operand");
-+ }
-+
-+}
-+
- /* Print operand X to file F in a target specific manner according to CODE.
- The acceptable formatting commands given by CODE are:
- 'c': An integer or symbol address without a preceding #
-@@ -11949,6 +12417,12 @@ aarch64_print_operand (FILE *f, rtx x, int code)
- }
- break;
-
-+ case 'J':
-+ output_macho_postfix_expr (f, x, "PAGEOFF");
-+ break;
-+ case 'O':
-+ output_macho_postfix_expr (f, x, "GOTPAGEOFF");
-+ break;
- case 'e':
- {
- x = unwrap_const_vec_duplicate (x);
-@@ -12272,7 +12746,7 @@ aarch64_print_operand (FILE *f, rtx x, int code)
- case 'A':
- if (GET_CODE (x) == HIGH)
- x = XEXP (x, 0);
--
-+#if !TARGET_MACHO
- switch (aarch64_classify_symbolic_expression (x))
- {
- case SYMBOL_SMALL_GOT_4G:
-@@ -12303,9 +12777,26 @@ aarch64_print_operand (FILE *f, rtx x, int code)
- break;
- }
- output_addr_const (asm_out_file, x);
-+#endif
-+#if TARGET_MACHO
-+ switch (aarch64_classify_symbolic_expression (x))
-+ {
-+ case SYMBOL_MO_SMALL_PCR:
-+ output_macho_postfix_expr (asm_out_file, x, "PAGE");
-+ break;
-+ case SYMBOL_MO_SMALL_GOT:
-+ output_macho_postfix_expr (asm_out_file, x, "GOTPAGE");
-+ break;
-+ default:
-+ /* large code model unimplemented. */
-+ gcc_unreachable ();
-+ break;
-+ }
-+#endif
- break;
-
- case 'L':
-+#if !TARGET_MACHO
- switch (aarch64_classify_symbolic_expression (x))
- {
- case SYMBOL_SMALL_GOT_4G:
-@@ -12343,10 +12834,12 @@ aarch64_print_operand (FILE *f, rtx x, int code)
- default:
- break;
- }
-+#endif
- output_addr_const (asm_out_file, x);
- break;
-
- case 'G':
-+#if !TARGET_MACHO
- switch (aarch64_classify_symbolic_expression (x))
- {
- case SYMBOL_TLSLE24:
-@@ -12355,6 +12848,7 @@ aarch64_print_operand (FILE *f, rtx x, int code)
- default:
- break;
- }
-+#endif
- output_addr_const (asm_out_file, x);
- break;
-
-@@ -12504,8 +12998,13 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x,
- break;
-
- case ADDRESS_LO_SUM:
-+#if TARGET_MACHO
-+ asm_fprintf (f, "[%s, #", reg_names [REGNO (addr.base)]);
-+ output_macho_postfix_expr (f, addr.offset, "PAGEOFF");
-+#else
- asm_fprintf (f, "[%s, #:lo12:", reg_names [REGNO (addr.base)]);
- output_addr_const (f, addr.offset);
-+#endif
- asm_fprintf (f, "]");
- return true;
-
-@@ -12786,6 +13285,26 @@ aarch64_secondary_memory_needed (machine_mode mode, reg_class_t class1,
- return false;
- }
-
-+#if TARGET_MACHO
-+/* Implement TARGET_FRAME_POINTER_REQUIRED. */
-+
-+static bool
-+aarch64_darwin_frame_pointer_required ()
-+{
-+ if (crtl->calls_eh_return)
-+ return true;
-+
-+ /* Not used in leaf functions (unless forced). */
-+ if (flag_omit_leaf_frame_pointer && leaf_function_p ())
-+ return false;
-+
-+ /* NOTE: We are allowing the user to force omission of the frame
-+ pointer, (despite that it is not ABI-compliant). */
-+
-+ return flag_omit_frame_pointer != 1;
-+}
-+#endif
-+
- static bool
- aarch64_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to)
- {
-@@ -13003,6 +13522,8 @@ aarch64_asm_output_labelref (FILE* f, const char *name)
- asm_fprintf (f, "%U%s", name);
- }
-
-+#if !TARGET_MACHO
-+
- static void
- aarch64_elf_asm_constructor (rtx symbol, int priority)
- {
-@@ -13042,6 +13563,7 @@ aarch64_elf_asm_destructor (rtx symbol, int priority)
- assemble_aligned_integer (POINTER_BYTES, symbol);
- }
- }
-+#endif
-
- const char*
- aarch64_output_casesi (rtx *operands)
-@@ -13145,7 +13667,11 @@ aarch64_select_rtx_section (machine_mode mode,
- if (aarch64_can_use_per_function_literal_pools_p ())
- return function_section (current_function_decl);
-
-+#if TARGET_MACHO
-+ return machopic_select_rtx_section (mode, x, align);
-+#else
- return default_elf_select_rtx_section (mode, x, align);
-+#endif
- }
-
- /* Implement ASM_OUTPUT_POOL_EPILOGUE. */
-@@ -15369,15 +15895,17 @@ aarch64_init_builtins ()
- {
- aarch64_general_init_builtins ();
- aarch64_sve::init_builtins ();
--#ifdef SUBTARGET_INIT_BUILTINS
-- SUBTARGET_INIT_BUILTINS;
--#endif
-+ aarch64_init_subtarget_builtins ();
- }
-
- /* Implement TARGET_FOLD_BUILTIN. */
- static tree
- aarch64_fold_builtin (tree fndecl, int nargs, tree *args, bool)
- {
-+#ifdef SUBTARGET_FOLD_BUILTIN
-+ if (tree res = SUBTARGET_FOLD_BUILTIN (fndecl, nargs, args, false))
-+ return res;
-+#endif
- unsigned int code = DECL_MD_FUNCTION_CODE (fndecl);
- unsigned int subcode = code >> AARCH64_BUILTIN_SHIFT;
- tree type = TREE_TYPE (TREE_TYPE (fndecl));
-@@ -18561,10 +19089,14 @@ initialize_aarch64_code_model (struct gcc_options *opts)
- }
- break;
- case AARCH64_CMODEL_LARGE:
-- if (opts->x_flag_pic)
-+ if (TARGET_MACHO)
-+ /* We need to implement fPIC here (arm64_32 also accepts the large
-+ model). */
-+ sorry ("code model %qs not supported yet", "large");
-+ else if (opts->x_flag_pic)
- sorry ("code model %qs with %<-f%s%>", "large",
- opts->x_flag_pic > 1 ? "PIC" : "pic");
-- if (opts->x_aarch64_abi == AARCH64_ABI_ILP32)
-+ else if (opts->x_aarch64_abi == AARCH64_ABI_ILP32)
- sorry ("code model %qs not supported in ilp32 mode", "large");
- break;
- case AARCH64_CMODEL_TINY_PIC:
-@@ -19450,7 +19982,9 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset)
- case AARCH64_CMODEL_SMALL_SPIC:
- case AARCH64_CMODEL_SMALL_PIC:
- case AARCH64_CMODEL_SMALL:
-- return SYMBOL_SMALL_ABSOLUTE;
-+ return TARGET_MACHO
-+ ? SYMBOL_MO_SMALL_PCR
-+ : SYMBOL_SMALL_ABSOLUTE;
-
- default:
- gcc_unreachable ();
-@@ -19486,10 +20020,22 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset)
-
- return SYMBOL_TINY_ABSOLUTE;
-
--
- case AARCH64_CMODEL_SMALL_SPIC:
- case AARCH64_CMODEL_SMALL_PIC:
- case AARCH64_CMODEL_SMALL:
-+#if TARGET_MACHO
-+ if (TARGET_MACHO)
-+ {
-+ /* Constant pool addresses are always TU-local and PC-
-+ relative. We indirect common, external and weak
-+ symbols (but weak only if not hidden). */
-+ if (!CONSTANT_POOL_ADDRESS_P (x)
-+ && (MACHO_SYMBOL_MUST_INDIRECT_P (x)
-+ || !aarch64_symbol_binds_local_p (x)))
-+ return SYMBOL_MO_SMALL_GOT;
-+ }
-+ else
-+#endif
- if ((flag_pic || SYMBOL_REF_WEAK (x))
- && !aarch64_symbol_binds_local_p (x))
- return aarch64_cmodel == AARCH64_CMODEL_SMALL_SPIC
-@@ -19501,7 +20047,8 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset)
- || offset_within_block_p (x, offset)))
- return SYMBOL_FORCE_TO_MEM;
-
-- return SYMBOL_SMALL_ABSOLUTE;
-+ return TARGET_MACHO ? SYMBOL_MO_SMALL_PCR
-+ : SYMBOL_SMALL_ABSOLUTE;
-
- case AARCH64_CMODEL_LARGE:
- /* This is alright even in PIC code as the constant
-@@ -19631,7 +20178,10 @@ static GTY(()) tree va_list_type;
- void *__vr_top;
- int __gr_offs;
- int __vr_offs;
-- }; */
-+ };
-+
-+ darwinpcs uses 'char *' for the va_list (in common with other platform
-+ ports). */
-
- static tree
- aarch64_build_builtin_va_list (void)
-@@ -19639,6 +20189,13 @@ aarch64_build_builtin_va_list (void)
- tree va_list_name;
- tree f_stack, f_grtop, f_vrtop, f_groff, f_vroff;
-
-+ /* darwinpcs uses a simple char * for this. */
-+ if (TARGET_MACHO)
-+ {
-+ va_list_type = build_pointer_type (char_type_node);
-+ return va_list_type;
-+ }
-+
- /* Create the type. */
- va_list_type = lang_hooks.types.make_type (RECORD_TYPE);
- /* Give it the required name. */
-@@ -19710,6 +20267,13 @@ aarch64_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
- int vr_save_area_size = cfun->va_list_fpr_size;
- int vr_offset;
-
-+ /* darwinpcs uses the default, char * va_list impl. */
-+ if (TARGET_MACHO)
-+ {
-+ std_expand_builtin_va_start (valist, nextarg);
-+ return;
-+ }
-+
- cum = &crtl->args.info;
- if (cfun->va_list_gpr_size)
- gr_save_area_size = MIN ((NUM_ARG_REGS - cum->aapcs_ncrn) * UNITS_PER_WORD,
-@@ -19800,6 +20364,9 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
- HOST_WIDE_INT size, rsize, adjust, align;
- tree t, u, cond1, cond2;
-
-+ if (TARGET_MACHO)
-+ return std_gimplify_va_arg_expr (valist, type, pre_p, post_p);
-+
- indirect_p = pass_va_arg_by_reference (type);
- if (indirect_p)
- type = build_pointer_type (type);
-@@ -19990,8 +20557,18 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
- field_ptr_t = double_ptr_type_node;
- break;
- case E_TFmode:
-- field_t = long_double_type_node;
-- field_ptr_t = long_double_ptr_type_node;
-+ if (TARGET_MACHO)
-+ {
-+ /* Darwin has __float128, and long double is the same as
-+ double. */
-+ field_t = float128_type_node;
-+ field_ptr_t = aarch64_float128_ptr_type_node;
-+ }
-+ else
-+ {
-+ field_t = long_double_type_node;
-+ field_ptr_t = long_double_ptr_type_node;
-+ }
- break;
- case E_SDmode:
- field_t = dfloat32_type_node;
-@@ -20074,6 +20651,9 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v,
- int gr_saved = cfun->va_list_gpr_size;
- int vr_saved = cfun->va_list_fpr_size;
-
-+ if (TARGET_MACHO)
-+ return default_setup_incoming_varargs (cum_v, arg, pretend_size, no_rtl);
-+
- /* The caller has advanced CUM up to, but not beyond, the last named
- argument. Advance a local copy of CUM past the last "real" named
- argument, to find out how many registers are left over. */
-@@ -20906,6 +21486,12 @@ aarch64_autovectorize_vector_modes (vector_modes *modes, bool)
- static const char *
- aarch64_mangle_type (const_tree type)
- {
-+ /* The darwinpcs ABI documents say that "__va_list" has to be
-+ mangled as char *. */
-+ if (TARGET_MACHO
-+ && lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
-+ return "Pc";
-+
- /* The AArch64 ABI documents say that "__va_list" has to be
- mangled as if it is in the "std" namespace. */
- if (lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
-@@ -20922,6 +21508,12 @@ aarch64_mangle_type (const_tree type)
- return "Dh";
- }
-
-+ /* __float128 is mangled as "g" on darwin. _Float128 is not mangled here,
-+ but handled in common code (as "DF128_"). */
-+ if (TARGET_MACHO && TYPE_MODE (type) == TFmode
-+ && TYPE_MAIN_VARIANT (type) == float128t_type_node)
-+ return "g";
-+
- /* Mangle AArch64-specific internal types. TYPE_NAME is non-NULL_TREE for
- builtin types. */
- if (TYPE_NAME (type) != NULL)
-@@ -21615,7 +22207,8 @@ aarch64_mov_operand_p (rtx x, machine_mode mode)
-
- /* GOT accesses are valid moves. */
- if (SYMBOL_REF_P (x)
-- && aarch64_classify_symbolic_expression (x) == SYMBOL_SMALL_GOT_4G)
-+ && (aarch64_classify_symbolic_expression (x) == SYMBOL_SMALL_GOT_4G
-+ || aarch64_classify_symbolic_expression (x) == SYMBOL_MO_SMALL_GOT))
- return true;
-
- if (SYMBOL_REF_P (x) && mode == DImode && CONSTANT_ADDRESS_P (x))
-@@ -22759,12 +23352,8 @@ aarch64_asm_output_variant_pcs (FILE *stream, const tree decl, const char* name)
- static std::string aarch64_last_printed_arch_string;
- static std::string aarch64_last_printed_tune_string;
-
--/* Implement ASM_DECLARE_FUNCTION_NAME. Output the ISA features used
-- by the function fndecl. */
--
--void
--aarch64_declare_function_name (FILE *stream, const char* name,
-- tree fndecl)
-+static void
-+aarch64_function_options_preamble (tree fndecl)
- {
- tree target_parts = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
-
-@@ -22803,15 +23392,60 @@ aarch64_declare_function_name (FILE *stream, const char* name,
- this_tune->name);
- aarch64_last_printed_tune_string = this_tune->name;
- }
-+}
-+
-+/* Implement ASM_DECLARE_FUNCTION_NAME. Output the ISA features used
-+ by the function fndecl. */
-
-+#if TARGET_MACHO
-+void
-+aarch64_darwin_declare_function_name (FILE *stream, const char* name,
-+ tree fndecl)
-+{
-+ gcc_checking_assert (TREE_CODE (fndecl) == FUNCTION_DECL);
-+ gcc_checking_assert (!DECL_COMMON (fndecl));
-+
-+ /* Update .arch and .tune as needed. */
-+ aarch64_function_options_preamble (fndecl);
-+
-+ /* Darwin does not emit pcs variant info. */
-+
-+ rtx decl_rtx = XEXP (DECL_RTL (fndecl), 0);
-+ if (GET_CODE (decl_rtx) != SYMBOL_REF)
-+ name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
-+
-+ if (! DECL_WEAK (fndecl)
-+ && ((TREE_STATIC (fndecl) && !TREE_PUBLIC (fndecl))
-+ || DECL_INITIAL (fndecl)))
-+ machopic_define_symbol (DECL_RTL (fndecl));
-+ if ((TREE_STATIC (fndecl) && !TREE_PUBLIC (fndecl))
-+ || DECL_INITIAL (fndecl))
-+ (* targetm.encode_section_info) (fndecl, DECL_RTL (fndecl), false);
-+ ASM_OUTPUT_FUNCTION_LABEL (stream, name, fndecl);
-+
-+ cfun->machine->label_is_assembled = true;
-+}
-+
-+#else
-+
-+void
-+aarch64_declare_function_name (FILE *stream, const char* name,
-+ tree fndecl)
-+{
-+ /* Update .arch and .tune as needed. */
-+ aarch64_function_options_preamble (fndecl);
-+ /* Emit any necessary pcs information. */
- aarch64_asm_output_variant_pcs (stream, fndecl, name);
-
- /* Don't forget the type directive for ELF. */
-+#ifdef ASM_OUTPUT_TYPE_DIRECTIVE
- ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "function");
-- ASM_OUTPUT_LABEL (stream, name);
-+#endif
-+ ASM_OUTPUT_FUNCTION_LABEL (stream, name, fndecl);
-
- cfun->machine->label_is_assembled = true;
- }
-+#endif
-
- /* Implement PRINT_PATCHABLE_FUNCTION_ENTRY. */
-
-@@ -22868,12 +23502,17 @@ aarch64_output_patchable_area (unsigned int patch_area_size, bool record_p)
- /* Implement ASM_OUTPUT_DEF_FROM_DECLS. Output .variant_pcs for aliases. */
-
- void
--aarch64_asm_output_alias (FILE *stream, const tree decl, const tree target)
-+aarch64_asm_output_alias (FILE *stream, const tree decl,
-+ const tree target ATTRIBUTE_UNUSED)
- {
- const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
-+#ifdef ASM_OUTPUT_DEF
- const char *value = IDENTIFIER_POINTER (target);
-+#endif
- aarch64_asm_output_variant_pcs (stream, decl, name);
-+#ifdef ASM_OUTPUT_DEF
- ASM_OUTPUT_DEF (stream, name, value);
-+#endif
- }
-
- /* Implement ASM_OUTPUT_EXTERNAL. Output .variant_pcs for undefined
-@@ -22919,6 +23558,9 @@ aarch64_start_file (void)
- aarch64_last_printed_arch_string.c_str ());
-
- default_file_start ();
-+#if TARGET_MACHO
-+ darwin_file_start ();
-+#endif
- }
-
- /* Emit load exclusive. */
-@@ -23396,6 +24038,10 @@ aarch64_float_const_representable_p (rtx x)
- || REAL_VALUE_MINUS_ZERO (r))
- return false;
-
-+ /* For BFmode, only handle 0.0. */
-+ if (GET_MODE (x) == BFmode)
-+ return real_iszero (&r, false);
-+
- /* Extract exponent. */
- r = real_value_abs (&r);
- exponent = REAL_EXP (&r);
-@@ -23499,6 +24145,16 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width,
- }
-
- gcc_assert (CONST_INT_P (info.u.mov.value));
-+ unsigned HOST_WIDE_INT value = UINTVAL (info.u.mov.value);
-+
-+ /* We have signed chars which can result in a sign-extended 8bit value
-+ which is then emitted as an unsigned hex value, and the LLVM back end
-+ assembler rejects that as being too big. */
-+ if (TARGET_MACHO && (known_eq (GET_MODE_BITSIZE (info.elt_mode), 8)))
-+ {
-+ unsigned HOST_WIDE_INT mask = (1U << GET_MODE_BITSIZE (info.elt_mode))-1;
-+ value &= mask;
-+ }
-
- if (which == AARCH64_CHECK_MOV)
- {
-@@ -23507,16 +24163,16 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width,
- ? "msl" : "lsl");
- if (lane_count == 1)
- snprintf (templ, sizeof (templ), "%s\t%%d0, " HOST_WIDE_INT_PRINT_HEX,
-- mnemonic, UINTVAL (info.u.mov.value));
-+ mnemonic, value);
- else if (info.u.mov.shift)
- snprintf (templ, sizeof (templ), "%s\t%%0.%d%c, "
- HOST_WIDE_INT_PRINT_HEX ", %s %d", mnemonic, lane_count,
-- element_char, UINTVAL (info.u.mov.value), shift_op,
-+ element_char, value, shift_op,
- info.u.mov.shift);
- else
- snprintf (templ, sizeof (templ), "%s\t%%0.%d%c, "
- HOST_WIDE_INT_PRINT_HEX, mnemonic, lane_count,
-- element_char, UINTVAL (info.u.mov.value));
-+ element_char, value);
- }
- else
- {
-@@ -23525,12 +24181,12 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width,
- if (info.u.mov.shift)
- snprintf (templ, sizeof (templ), "%s\t%%0.%d%c, #"
- HOST_WIDE_INT_PRINT_DEC ", %s #%d", mnemonic, lane_count,
-- element_char, UINTVAL (info.u.mov.value), "lsl",
-+ element_char, value, "lsl",
- info.u.mov.shift);
- else
- snprintf (templ, sizeof (templ), "%s\t%%0.%d%c, #"
- HOST_WIDE_INT_PRINT_DEC, mnemonic, lane_count,
-- element_char, UINTVAL (info.u.mov.value));
-+ element_char, value);
- }
- return templ;
- }
-@@ -26728,7 +27384,8 @@ aarch64_libgcc_floating_mode_supported_p (scalar_float_mode mode)
- }
-
- /* Implement TARGET_SCALAR_MODE_SUPPORTED_P - return TRUE
-- if MODE is [BH]Fmode, and punt to the generic implementation otherwise. */
-+ if MODE is [BH]Fmode, or TFmode on Mach-O, and punt to the generic
-+ implementation otherwise. */
-
- static bool
- aarch64_scalar_mode_supported_p (scalar_mode mode)
-@@ -26736,7 +27393,7 @@ aarch64_scalar_mode_supported_p (scalar_mode mode)
- if (DECIMAL_FLOAT_MODE_P (mode))
- return default_decimal_float_supported_p ();
-
-- return ((mode == HFmode || mode == BFmode)
-+ return ((mode == HFmode || mode == BFmode || (mode == TFmode && TARGET_MACHO))
- ? true
- : default_scalar_mode_supported_p (mode));
- }
-@@ -27476,19 +28133,37 @@ aarch64_sls_emit_shared_blr_thunks (FILE *out_file)
- continue;
-
- const char *name = indirect_symbol_names[regnum];
-- switch_to_section (get_named_section (decl, NULL, 0));
-+ /* If the target uses a unique section for this switch to it. */
-+ if (DECL_SECTION_NAME (decl))
-+ switch_to_section (get_named_section (decl, NULL, 0));
-+ else
-+ switch_to_section (text_section);
- ASM_OUTPUT_ALIGN (out_file, 2);
-- targetm.asm_out.globalize_label (out_file, name);
-+ if (!TARGET_MACHO)
-+ targetm.asm_out.globalize_label (out_file, name);
-+#ifdef ASM_OUTPUT_TYPE_DIRECTIVE
-+ ASM_OUTPUT_TYPE_DIRECTIVE (out_file, name, "function");
-+#endif
-+ if (TARGET_MACHO)
-+ {
-+#ifdef ASM_WEAKEN_DECL
-+ if (DECL_WEAK (decl))
-+ ASM_WEAKEN_DECL (out_file, decl, name, 0);
-+ else
-+#endif
-+ targetm.asm_out.globalize_decl_name (out_file, decl);
-+ }
- /* Only emits if the compiler is configured for an assembler that can
- handle visibility directives. */
- targetm.asm_out.assemble_visibility (decl, VISIBILITY_HIDDEN);
-- ASM_OUTPUT_TYPE_DIRECTIVE (out_file, name, "function");
- ASM_OUTPUT_LABEL (out_file, name);
- aarch64_sls_emit_function_stub (out_file, regnum);
- /* Use the most conservative target to ensure it can always be used by any
- function in the translation unit. */
- asm_fprintf (out_file, "\tdsb\tsy\n\tisb\n");
-+#ifdef ASM_DECLARE_FUNCTION_SIZE
- ASM_DECLARE_FUNCTION_SIZE (out_file, name, decl);
-+#endif
- }
- }
-
-@@ -27519,6 +28194,60 @@ aarch64_indirect_call_asm (rtx addr)
- return "";
- }
-
-+#if TARGET_MACHO
-+/* This handles the promotion of function return values.
-+ It also handles function args under two specific curcumstances:
-+ - called from combine with a register argument
-+ - caller for a libcall with type == NULL.
-+ The remaining cases for argument promotion are handled with access to
-+ cumulative args data, below. */
-+machine_mode
-+aarch64_darwin_promote_fn_mode (const_tree type, machine_mode mode,
-+ int *punsignedp,
-+ const_tree funtype ATTRIBUTE_UNUSED,
-+ int for_return ATTRIBUTE_UNUSED)
-+{
-+ /* With the amended use of promote using cargs, the only cases that arrive
-+ here with for_return == 0 are from combine (where the value is definitely
-+ in a register) and for libcalls, where type == NULL. We want to promote
-+ function return values in the callee, so this becomes pretty much
-+ unconditional now. */
-+ if (type != NULL_TREE)
-+ return promote_mode (type, mode, punsignedp);
-+ return mode;
-+}
-+
-+/* Ensure that we only promote the mode of named parms when they are passed in
-+ a register. Named values passed on the stack retain their original mode and
-+ alignment. */
-+machine_mode
-+aarch64_darwin_promote_function_mode_ca (cumulative_args_t ca,
-+ function_arg_info arg,
-+ const_tree funtype ATTRIBUTE_UNUSED,
-+ int *punsignedp,
-+ int for_return ATTRIBUTE_UNUSED)
-+{
-+ tree type = arg.type;
-+ machine_mode mode = arg.mode;
-+ machine_mode new_mode = promote_mode (type, mode, punsignedp);
-+ if (new_mode == mode || arg.named == false
-+ || GET_MODE_CLASS (new_mode) != MODE_INT
-+ || known_gt (GET_MODE_SIZE (new_mode), 4))
-+ return new_mode;
-+
-+ CUMULATIVE_ARGS *pcum = get_cumulative_args (ca);
-+ /* Make sure that changes in assumption do not get missed. */
-+ gcc_checking_assert (for_return == 0 && new_mode == SImode
-+ && !pcum->aapcs_arg_processed);
-+ /* We have a named integer value that fits in a reg; if there's one available
-+ then promote the value. */
-+ if (pcum->aapcs_ncrn < 8)
-+ return new_mode;
-+ return mode;
-+}
-+
-+#endif
-+
- /* Target-specific selftests. */
-
- #if CHECKING_P
-@@ -27681,6 +28410,15 @@ aarch64_run_selftests (void)
- #undef TARGET_ASM_ALIGNED_SI_OP
- #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t"
-
-+#if TARGET_MACHO
-+#undef TARGET_ASM_UNALIGNED_HI_OP
-+#define TARGET_ASM_UNALIGNED_HI_OP "\t.short\t"
-+#undef TARGET_ASM_UNALIGNED_SI_OP
-+#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t"
-+#undef TARGET_ASM_UNALIGNED_DI_OP
-+#define TARGET_ASM_UNALIGNED_DI_OP "\t.quad\t"
-+#endif
-+
- #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
- #define TARGET_ASM_CAN_OUTPUT_MI_THUNK \
- hook_bool_const_tree_hwi_hwi_const_tree_true
-@@ -27767,6 +28505,12 @@ aarch64_run_selftests (void)
- #undef TARGET_FUNCTION_ARG_BOUNDARY
- #define TARGET_FUNCTION_ARG_BOUNDARY aarch64_function_arg_boundary
-
-+#undef TARGET_FUNCTION_ARG_BOUNDARY_CA
-+#define TARGET_FUNCTION_ARG_BOUNDARY_CA aarch64_function_arg_boundary_ca
-+
-+#undef TARGET_FUNCTION_ARG_ROUND_BOUNDARY_CA
-+#define TARGET_FUNCTION_ARG_ROUND_BOUNDARY_CA aarch64_function_arg_round_boundary_ca
-+
- #undef TARGET_FUNCTION_ARG_PADDING
- #define TARGET_FUNCTION_ARG_PADDING aarch64_function_arg_padding
-
-@@ -28091,7 +28835,7 @@ aarch64_libgcc_floating_mode_supported_p
-
- /* The architecture reserves bits 0 and 1 so use bit 2 for descriptors. */
- #undef TARGET_CUSTOM_FUNCTION_DESCRIPTORS
--#define TARGET_CUSTOM_FUNCTION_DESCRIPTORS 4
-+#define TARGET_CUSTOM_FUNCTION_DESCRIPTORS AARCH64_CUSTOM_FUNCTION_TEST
-
- #undef TARGET_HARD_REGNO_NREGS
- #define TARGET_HARD_REGNO_NREGS aarch64_hard_regno_nregs
-@@ -28181,6 +28925,11 @@ aarch64_libgcc_floating_mode_supported_p
- #undef TARGET_CONST_ANCHOR
- #define TARGET_CONST_ANCHOR 0x1000000
-
-+#if TARGET_MACHO
-+#undef TARGET_FRAME_POINTER_REQUIRED
-+#define TARGET_FRAME_POINTER_REQUIRED aarch64_darwin_frame_pointer_required
-+#endif
-+
- struct gcc_target targetm = TARGET_INITIALIZER;
-
- #include "gt-aarch64.h"
-diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
-index cfeaf46..81d5658 100644
---- a/gcc/config/aarch64/aarch64.h
-+++ b/gcc/config/aarch64/aarch64.h
-@@ -65,6 +65,10 @@
- #define TARGET_SIMD (AARCH64_ISA_SIMD)
- #define TARGET_FLOAT (AARCH64_ISA_FP)
-
-+/* If this is non-zero then generated code of the object format, ABI and
-+ assembler syntax used by Darwin (Mach-O) platforms. */
-+#define TARGET_MACHO 0
-+
- #define UNITS_PER_WORD 8
-
- #define UNITS_PER_VREG 16
-@@ -142,6 +146,12 @@
- /* Heap alignment (same as BIGGEST_ALIGNMENT and STACK_BOUNDARY). */
- #define MALLOC_ABI_ALIGNMENT 128
-
-+/* We will and with this value to test if a custom function descriptor needs
-+ a static chain. The function boundary must the adjusted so that the bit
-+ this represents is no longer part of the address. 0 Disables the custom
-+ function descriptors. */
-+#define AARCH64_CUSTOM_FUNCTION_TEST 4
-+
- /* Defined by the ABI */
- #define WCHAR_TYPE "unsigned int"
- #define WCHAR_TYPE_SIZE 32
-@@ -944,6 +954,24 @@ typedef struct
- aapcs_reg == NULL_RTX. */
- int aapcs_stack_size; /* The total size (in words, per 8 byte) of the
- stack arg area so far. */
-+
-+ /* In the darwinpcs, items smaller than one word are packed onto the stack
-+ naturally aligned. Unnamed parameters passed in a variadic call are,
-+ however, aligned the same way as the AAPCS64. This means that we need to
-+ pad the last named arg to the next parm boundary (and hence notice when
-+ we are processing that arg). */
-+ int darwinpcs_stack_bytes; /* If the argument is passed on the stack, this
-+ the byte-size. */
-+ int darwinpcs_sub_word_offset;/* This is the offset of this arg within a word
-+ when placing smaller items for darwinpcs. */
-+ int darwinpcs_sub_word_pos; /* The next byte available within the word for
-+ darwinpcs. */
-+ unsigned darwinpcs_arg_boundary; /* The computed argument boundary. */
-+ unsigned darwinpcs_arg_padding; /* The computed argument padding. */
-+ unsigned darwinpcs_n_named; /* Number of named arguments. */
-+ unsigned darwinpcs_n_args_processed; /* Processed so far. */
-+ bool named_p; /* Is this arg named? */
-+ bool last_named_p; /* Is this the last named arg? */
- bool silent_p; /* True if we should act silently, rather than
- raise an error for invalid calls. */
- } CUMULATIVE_ARGS;
-@@ -1242,8 +1270,13 @@ extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
- #define ASM_CPU_SPEC \
- MCPU_TO_MARCH_SPEC
-
-+#ifndef SUBTARGET_EXTRA_SPECS
-+#define SUBTARGET_EXTRA_SPECS
-+#endif
-+
- #define EXTRA_SPECS \
-- { "asm_cpu_spec", ASM_CPU_SPEC }
-+ { "asm_cpu_spec", ASM_CPU_SPEC }, \
-+ SUBTARGET_EXTRA_SPECS
-
- #define ASM_OUTPUT_POOL_EPILOGUE aarch64_asm_output_pool_epilogue
-
-@@ -1256,6 +1289,10 @@ extern GTY(()) tree aarch64_fp16_ptr_type_node;
- bfloat16_type_node. Defined in aarch64-builtins.cc. */
- extern GTY(()) tree aarch64_bf16_ptr_type_node;
-
-+/* A pointer to the user-visible __float128 (on Mach-O). Defined in
-+ aarch64-builtins.c. */
-+extern GTY(()) tree aarch64_float128_ptr_type_node;
-+
- /* The generic unwind code in libgcc does not initialize the frame pointer.
- So in order to unwind a function using a frame pointer, the very first
- function that is unwound must save the frame pointer. That way the frame
-diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
-index 922cc98..5c7c815 100644
---- a/gcc/config/aarch64/aarch64.md
-+++ b/gcc/config/aarch64/aarch64.md
-@@ -304,6 +304,7 @@
- UNSPEC_LD1RO
- UNSPEC_SALT_ADDR
- UNSPECV_PATCHABLE_AREA
-+ UNSPEC_MACHOPIC_OFFSET ; Common to Mach-O ports.
- ])
-
- (define_c_enum "unspecv" [
-@@ -850,6 +851,37 @@
- [(set_attr "type" "load_4")]
- )
-
-+(define_insn "prefetch_unscaled"
-+ [(prefetch (match_operand:DI 0 "aarch64_unscaled_prefetch_operand" "Du")
-+ (match_operand:QI 1 "const_int_operand" "")
-+ (match_operand:QI 2 "const_int_operand" ""))]
-+ ""
-+ {
-+ const char * pftype[2][4] =
-+ {
-+ {"prfum\\tPLDL1STRM, %0",
-+ "prfum\\tPLDL3KEEP, %0",
-+ "prfum\\tPLDL2KEEP, %0",
-+ "prfum\\tPLDL1KEEP, %0"},
-+ {"prfum\\tPSTL1STRM, %0",
-+ "prfum\\tPSTL3KEEP, %0",
-+ "prfum\\tPSTL2KEEP, %0",
-+ "prfum\\tPSTL1KEEP, %0"},
-+ };
-+
-+ int locality = INTVAL (operands[2]);
-+
-+ gcc_assert (IN_RANGE (locality, 0, 3));
-+
-+ /* PRFUM accepts the same addresses as a 64-bit LDR so wrap
-+ the address into a DImode MEM so that aarch64_print_operand knows
-+ how to print it. */
-+ operands[0] = gen_rtx_MEM (DImode, operands[0]);
-+ return pftype[INTVAL(operands[1])][locality];
-+ }
-+ [(set_attr "type" "load_4")]
-+)
-+
- (define_insn "trap"
- [(trap_if (const_int 1) (const_int 8))]
- ""
-@@ -1322,7 +1354,7 @@
- ldr\\t%s0, %1
- str\\t%w1, %0
- str\\t%s1, %0
-- adrp\\t%x0, %A1\;ldr\\t%w0, [%x0, %L1]
-+ * return TARGET_MACHO ? \"adrp\\t%x0, %A1\;ldr\\t%w0, [%x0, %O1]\" : \"adrp\\t%x0, %A1\;ldr\\t%w0, [%x0, %L1]\";
- adr\\t%x0, %c1
- adrp\\t%x0, %A1
- fmov\\t%s0, %w1
-@@ -1360,7 +1392,7 @@
- ldr\\t%d0, %1
- str\\t%x1, %0
- str\\t%d1, %0
-- * return TARGET_ILP32 ? \"adrp\\t%0, %A1\;ldr\\t%w0, [%0, %L1]\" : \"adrp\\t%0, %A1\;ldr\\t%0, [%0, %L1]\";
-+ * return TARGET_ILP32 ? (TARGET_MACHO ? \"adrp\\t%0, %A1\;ldr\\t%w0, [%0, %O1]\" : \"adrp\\t%0, %A1\;ldr\\t%w0, [%0, %L1]\") : (TARGET_MACHO ? \"adrp\\t%0, %A1\;ldr\\t%0, [%0, %O1]\" : \"adrp\\t%0, %A1\;ldr\\t%0, [%0, %L1]\");
- adr\\t%x0, %c1
- adrp\\t%x0, %A1
- fmov\\t%d0, %x1
-@@ -1799,16 +1831,16 @@
- (set_attr "arch" "*,fp")]
- )
-
--(define_insn "load_pair_dw_tftf"
-- [(set (match_operand:TF 0 "register_operand" "=w")
-- (match_operand:TF 1 "aarch64_mem_pair_operand" "Ump"))
-- (set (match_operand:TF 2 "register_operand" "=w")
-- (match_operand:TF 3 "memory_operand" "m"))]
-+(define_insn "load_pair_dw_"
-+ [(set (match_operand:TX 0 "register_operand" "=w")
-+ (match_operand:TX 1 "aarch64_mem_pair_operand" "Ump"))
-+ (set (match_operand:TX2 2 "register_operand" "=w")
-+ (match_operand:TX2 3 "memory_operand" "m"))]
- "TARGET_SIMD
- && rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
- XEXP (operands[1], 0),
-- GET_MODE_SIZE (TFmode)))"
-+ GET_MODE_SIZE (mode)))"
- "ldp\\t%q0, %q2, %z1"
- [(set_attr "type" "neon_ldp_q")
- (set_attr "fp" "yes")]
-@@ -1849,11 +1881,11 @@
- (set_attr "arch" "*,fp")]
- )
-
--(define_insn "store_pair_dw_tftf"
-- [(set (match_operand:TF 0 "aarch64_mem_pair_operand" "=Ump")
-- (match_operand:TF 1 "register_operand" "w"))
-- (set (match_operand:TF 2 "memory_operand" "=m")
-- (match_operand:TF 3 "register_operand" "w"))]
-+(define_insn "store_pair_dw_"
-+ [(set (match_operand:TX 0 "aarch64_mem_pair_operand" "=Ump")
-+ (match_operand:TX 1 "register_operand" "w"))
-+ (set (match_operand:TX2 2 "memory_operand" "=m")
-+ (match_operand:TX2 3 "register_operand" "w"))]
- "TARGET_SIMD &&
- rtx_equal_p (XEXP (operands[2], 0),
- plus_constant (Pmode,
-@@ -7045,7 +7077,10 @@
- (lo_sum:P (match_operand:P 1 "register_operand" "r")
- (match_operand 2 "aarch64_valid_symref" "S")))]
- ""
-- "add\\t%0, %1, :lo12:%c2"
-+ { return TARGET_MACHO
-+ ? "add\\t%0, %1, %J2;"
-+ : "add\\t%0, %1, :lo12:%c2";
-+ }
- [(set_attr "type" "alu_imm")]
- )
-
-diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
-index 1d7967d..cc97d72 100644
---- a/gcc/config/aarch64/aarch64.opt
-+++ b/gcc/config/aarch64/aarch64.opt
-@@ -158,6 +158,13 @@ Enum(aarch64_abi) String(ilp32) Value(AARCH64_ABI_ILP32)
- EnumValue
- Enum(aarch64_abi) String(lp64) Value(AARCH64_ABI_LP64)
-
-+EnumValue
-+Enum(aarch64_abi) String(darwinpcs) Value(AARCH64_ABI_LP64)
-+
-+m64
-+Target RejectNegative Alias(mabi=, darwinpcs)
-+On Darwin for compatibility with other platform variants.
-+
- mpc-relative-literal-loads
- Target Save Var(pcrelative_literal_loads) Init(2) Save
- PC relative literal loads.
-diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md
-index 5b20abc..9c6a631 100644
---- a/gcc/config/aarch64/constraints.md
-+++ b/gcc/config/aarch64/constraints.md
-@@ -168,7 +168,9 @@
- A constraint that matches a small GOT access."
- (and (match_code "const,symbol_ref")
- (match_test "aarch64_classify_symbolic_expression (op)
-- == SYMBOL_SMALL_GOT_4G")))
-+ == SYMBOL_SMALL_GOT_4G
-+ || aarch64_classify_symbolic_expression (op)
-+ == SYMBOL_MO_SMALL_GOT")))
-
- (define_constraint "Uss"
- "@internal
-@@ -505,6 +507,11 @@
- An address valid for a prefetch instruction."
- (match_test "aarch64_address_valid_for_prefetch_p (op, true)"))
-
-+(define_address_constraint "Du"
-+ "@internal
-+ An address valid for a prefetch instruction with an unscaled offset."
-+ (match_test "aarch64_address_valid_for_unscaled_prefetch_p (op, true)"))
-+
- (define_constraint "vgb"
- "@internal
- A constraint that matches an immediate offset valid for SVE LD1B
-diff --git b/gcc/config/aarch64/darwin.h b/gcc/config/aarch64/darwin.h
-new file mode 100644
-index 0000000..08febf1
---- /dev/null
-+++ b/gcc/config/aarch64/darwin.h
-@@ -0,0 +1,289 @@
-+/* Target definitions for Arm64/Aarch64 running on macOS/iOS.
-+
-+Copyright The GNU Toolchain Authors.
-+Contributed by Iain Sandoe.
-+
-+This file is part of GCC.
-+
-+GCC is free software; you can redistribute it and/or modify
-+it under the terms of the GNU General Public License as published by
-+the Free Software Foundation; either version 3, or (at your option)
-+any later version.
-+
-+GCC is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+GNU General Public License for more details.
-+
-+You should have received a copy of the GNU General Public License
-+along with GCC; see the file COPYING3. If not see
-+. */
-+
-+/* Enable Mach-O bits in generic Aarch64 code. */
-+#undef TARGET_MACHO
-+#define TARGET_MACHO 1
-+
-+#undef DARWIN_ARM64
-+#define DARWIN_ARM64 1
-+
-+/* This is used in generic code in darwin.cc (at present, we have no support
-+ for the arm64_32 target). */
-+#undef TARGET_64BIT
-+#define TARGET_64BIT 1
-+
-+#undef PTRDIFF_TYPE
-+#define PTRDIFF_TYPE "long int"
-+
-+#undef TARGET_PROMOTE_FUNCTION_MODE
-+#define TARGET_PROMOTE_FUNCTION_MODE aarch64_darwin_promote_fn_mode
-+
-+#undef TARGET_PROMOTE_FUNCTION_MODE_CA
-+#define TARGET_PROMOTE_FUNCTION_MODE_CA aarch64_darwin_promote_function_mode_ca
-+
-+/* NOTE that arm64_32 is a valid thing and corresponds to darwinpcs
-+ and TARGET_ILP32, but we are not implementing that for now. */
-+#define TARGET_OS_CPP_BUILTINS() \
-+ do { \
-+ builtin_define ("__LITTLE_ENDIAN__"); \
-+ builtin_define ("__arm64"); \
-+ builtin_define ("__arm64__"); \
-+ darwin_cpp_builtins (pfile); \
-+ } while (0)
-+
-+/* In Darwin's Arm64 ABI, chars are signed. */
-+
-+#undef DEFAULT_SIGNED_CHAR
-+#define DEFAULT_SIGNED_CHAR 1
-+
-+#undef LONG_DOUBLE_TYPE_SIZE
-+#define LONG_DOUBLE_TYPE_SIZE 64
-+
-+/* Disable custom function descriptors on Darwin (we use heap-based
-+ trampolines). */
-+#undef AARCH64_CUSTOM_FUNCTION_TEST
-+#define AARCH64_CUSTOM_FUNCTION_TEST 0
-+
-+/* Non-PIE executables are forbidden by the Arm64-darwin security model;
-+ remove the option from link-lines since they just produce a warning from
-+ ld64 and are then ignored anyway. */
-+#undef DARWIN_NOPIE_SPEC
-+#define DARWIN_NOPIE_SPEC \
-+" %
-+# include
-+#endif
-+
-+
-+#if TARGET_MACHO
-+
-+/* Default architecture to use if -mcpu=native did not detect a known CPU. */
-+#define DEFAULT_ARCH "apple-m1"
-+
-+/* macOS does not have /proc/cpuinfo and needs a different approach,
-+ based on sysctl. It is much simpler. */
-+
-+const char *
-+host_detect_local_cpu (ATTRIBUTE_UNUSED int argc, ATTRIBUTE_UNUSED const char **argv)
-+{
-+ bool arch = false;
-+ bool tune = false;
-+ bool cpu = false;
-+ const char *res = NULL;
-+ uint32_t family;
-+ size_t len = sizeof(family);
-+
-+ gcc_assert (argc);
-+ if (!argv[0])
-+ return NULL;
-+
-+ /* Are we processing -march, mtune or mcpu? */
-+ arch = strcmp (argv[0], "arch") == 0;
-+ if (!arch)
-+ tune = strcmp (argv[0], "tune") == 0;
-+ if (!arch && !tune)
-+ cpu = strcmp (argv[0], "cpu") == 0;
-+ if (!arch && !tune && !cpu)
-+ return NULL;
-+
-+ sysctlbyname("hw.cpufamily", &family, &len, NULL, 0);
-+
-+ switch (family)
-+ {
-+ case 0x07d34b9f: // Vortex, Tempest
-+ res = "apple-a12";
-+ break;
-+ case 0x573b5eec:
-+ case 0x1b588bb3: // Firestorm, Icestorm
-+ res = "apple-m1";
-+ break;
-+ case 0xda33d83d: // Blizzard, Avalanche
-+ res = "apple-m2";
-+ break;
-+ case 0xfa33415e: // Ibiza (M3)
-+ case 0x5f4dea93: // Lobos (M3 Pro)
-+ case 0x72015832: // Palma (M3 Max)
-+ res = "apple-m3";
-+ break;
-+ default:
-+ res = DEFAULT_ARCH;
-+ }
-+
-+ if (res)
-+ return concat ("-m", argv[0], "=", res, NULL);
-+ else
-+ return NULL;
-+}
-+
-+#else
-+
- struct aarch64_arch_extension
- {
- const char *ext;
-@@ -468,3 +536,4 @@ not_found:
- }
- }
-
-+#endif
-diff --git a/gcc/config/aarch64/falkor-tag-collision-avoidance.cc b/gcc/config/aarch64/falkor-tag-collision-avoidance.cc
-index 39e3f5c..9b3357f 100644
---- a/gcc/config/aarch64/falkor-tag-collision-avoidance.cc
-+++ b/gcc/config/aarch64/falkor-tag-collision-avoidance.cc
-@@ -740,7 +740,7 @@ dump_insn_list (const rtx &t, const insn_info_list_t &insn_info,
- void *unused ATTRIBUTE_UNUSED)
- {
- gcc_assert (dump_file);
-- fprintf (dump_file, "Tag 0x%lx ::\n", INTVAL (t));
-+ fprintf (dump_file, "Tag 0x" HOST_WIDE_INT_PRINT_HEX_PURE " ::\n", INTVAL (t));
-
- for (unsigned i = 0; i < insn_info.length (); i++)
- dump_insn_slim (dump_file, insn_info[i]->insn);
-diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
-index 86a196d..0708a92 100644
---- a/gcc/config/aarch64/iterators.md
-+++ b/gcc/config/aarch64/iterators.md
-@@ -316,6 +316,9 @@
- ;; TX plus V16QImode.
- (define_mode_iterator TX_V16QI [TI TF TD V16QI])
-
-+;; Duplicate of TX above
-+(define_mode_iterator TX2 [TI TF TD])
-+
- (define_mode_iterator VTX [TI TF TD V16QI V8HI V4SI V2DI V8HF V4SF V2DF V8BF])
-
- ;; Advanced SIMD opaque structure modes.
-diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
-index 3f5f4df..4c3498d 100644
---- a/gcc/config/aarch64/predicates.md
-+++ b/gcc/config/aarch64/predicates.md
-@@ -277,9 +277,24 @@
- (define_predicate "aarch64_prefetch_operand"
- (match_test "aarch64_address_valid_for_prefetch_p (op, false)"))
-
-+(define_predicate "aarch64_unscaled_prefetch_operand"
-+ (match_test "aarch64_address_valid_for_unscaled_prefetch_p (op, false)"))
-+
- (define_predicate "aarch64_valid_symref"
- (match_code "const, symbol_ref, label_ref")
- {
-+ if (TARGET_MACHO)
-+ {
-+ rtx x = op;
-+ rtx offset;
-+ split_const (x, &x, &offset);
-+ if (GET_CODE (x) == CONST)
-+ x = XEXP (x, 0);
-+ if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_SALT_ADDR)
-+ x = XVECEXP (x, 0, 0);
-+ if (SYMBOL_REF_P (x) && INTVAL (offset) < 0)
-+ return false;
-+ }
- return (aarch64_classify_symbolic_expression (op)
- != SYMBOL_FORCE_TO_MEM);
- })
-diff --git b/gcc/config/aarch64/t-aarch64-darwin b/gcc/config/aarch64/t-aarch64-darwin
-new file mode 100644
-index 0000000..e2b8ad9
---- /dev/null
-+++ b/gcc/config/aarch64/t-aarch64-darwin
-@@ -0,0 +1,25 @@
-+# Machine description for AArch64 architecture.
-+# Copyright (C) 2020 Free Software Foundation, Inc.
-+#
-+# This file is part of GCC.
-+#
-+# GCC is free software; you can redistribute it and/or modify it
-+# under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3, or (at your option)
-+# any later version.
-+#
-+# GCC is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with GCC; see the file COPYING3. If not see
-+# .
-+
-+LIB1ASMSRC = aarch64/lib1funcs.asm
-+LIB1ASMFUNCS = _aarch64_sync_cache_range
-+
-+# TODO - figure out what multilib provisions we should make for
-+# a) arm64e
-+# b) arm64_32
-diff --git a/gcc/config/darwin-c.cc b/gcc/config/darwin-c.cc
-index 579b9fa..10d5fb1 100644
---- a/gcc/config/darwin-c.cc
-+++ b/gcc/config/darwin-c.cc
-@@ -555,7 +555,7 @@ find_subframework_header (cpp_reader *pfile, const char *header, cpp_dir **dirp)
- return 0;
- }
-
--/* Given an OS X version VERSION_STR, return it as a statically-allocated array
-+/* Given an macOS version VERSION_STR, return it as a statically-allocated array
- of three integers. If VERSION_STR is invalid, return NULL.
-
- VERSION_STR must consist of one, two, or three tokens, each separated by
-@@ -612,7 +612,7 @@ parse_version (const char *version_str)
- return version_array;
- }
-
--/* Given VERSION -- a three-component OS X version represented as an array of
-+/* Given VERSION -- a three-component macOS version represented as an array of
- non-negative integers -- return a statically-allocated string suitable for
- the legacy __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro. If VERSION
- is invalid and cannot be coerced into a valid form, return NULL.
-@@ -645,7 +645,7 @@ version_as_legacy_macro (const unsigned long *version)
- return result;
- }
-
--/* Given VERSION -- a three-component OS X version represented as an array of
-+/* Given VERSION -- a three-component macOS version represented as an array of
- non-negative integers -- return a statically-allocated string suitable for
- the modern __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro. If VERSION
- is invalid, return NULL.
-@@ -675,7 +675,7 @@ version_as_modern_macro (const unsigned long *version)
-
- /* Return the value of darwin_macosx_version_min, suitably formatted for the
- __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro. Values representing
-- OS X 10.9 and earlier are encoded using the legacy four-character format,
-+ macOS 10.9 and earlier are encoded using the legacy four-character format,
- while 10.10 and later use a modern six-character format. (For example,
- "10.9" produces "1090", and "10.10.1" produces "101001".) If
- darwin_macosx_version_min is invalid and cannot be coerced into a valid
-diff --git a/gcc/config/darwin-driver.cc b/gcc/config/darwin-driver.cc
-index 9c1dcc3..b2f39af 100644
---- a/gcc/config/darwin-driver.cc
-+++ b/gcc/config/darwin-driver.cc
-@@ -268,10 +268,13 @@ darwin_driver_init (unsigned int *decoded_options_count,
- bool seenX86_64 = false;
- bool seenPPC = false;
- bool seenPPC64 = false;
-+#if !DARWIN_ARM64
-+ bool seenArm64 = false;
- bool seenM32 = false;
- bool seenM64 = false;
- bool appendM32 = false;
- bool appendM64 = false;
-+#endif
- const char *vers_string = NULL;
- bool seen_version_min = false;
- bool seen_sysroot_p = false;
-@@ -296,6 +299,12 @@ darwin_driver_init (unsigned int *decoded_options_count,
- seenPPC = true;
- else if (!strcmp ((*decoded_options)[i].arg, "ppc64"))
- seenPPC64 = true;
-+ else if (!strcmp ((*decoded_options)[i].arg, "arm64"))
-+#if !DARWIN_ARM64
-+ seenArm64 = true;
-+#else
-+ ; /* We accept the option, but don't need to act on it. */
-+#endif
- else
- error ("this compiler does not support %qs",
- (*decoded_options)[i].arg);
-@@ -309,7 +318,7 @@ darwin_driver_init (unsigned int *decoded_options_count,
- --i;
- --*decoded_options_count;
- break;
--
-+#if !DARWIN_ARM64
- case OPT_m32:
- seenM32 = true;
- break;
-@@ -317,6 +326,7 @@ darwin_driver_init (unsigned int *decoded_options_count,
- case OPT_m64:
- seenM64 = true;
- break;
-+#endif
-
- case OPT_mmacosx_version_min_:
- seen_version_min = true;
-@@ -366,6 +376,9 @@ darwin_driver_init (unsigned int *decoded_options_count,
- if (seenPPC || seenPPC64)
- warning (0, "this compiler does not support PowerPC"
- " (%<-arch%> option ignored)");
-+ else if (seenArm64)
-+ warning (0, "this compiler does not support Arm64"
-+ " (%<-arch%> option ignored)");
- if (seenX86)
- {
- if (seenX86_64 || seenM64)
-@@ -389,6 +402,9 @@ darwin_driver_init (unsigned int *decoded_options_count,
- if (seenX86 || seenX86_64)
- warning (0, "this compiler does not support x86"
- " (%<-arch%> option ignored)");
-+ else if (seenArm64)
-+ warning (0, "this compiler does not support Arm64"
-+ " (%<-arch%> option ignored)");
- if (seenPPC)
- {
- if (seenPPC64 || seenM64)
-@@ -408,12 +424,20 @@ darwin_driver_init (unsigned int *decoded_options_count,
- if (! seenM64) /* Add -m64 if the User didn't. */
- appendM64 = true;
- }
-+#elif DARWIN_ARM64
-+ if (seenPPC || seenPPC64)
-+ warning (0, "this compiler does not support PowerPC"
-+ " (%<-arch%> option ignored)");
-+ if (seenX86 || seenX86_64)
-+ warning (0, "this compiler does not support x86"
-+ " (%<-arch%> option ignored)");
- #endif
-
- /* If there is nothing else on the command line, do not add sysroot etc. */
- if (*decoded_options_count <= 1)
- return;
-
-+#if !DARWIN_ARM64
- if (appendM32 || appendM64)
- {
- ++*decoded_options_count;
-@@ -423,6 +447,7 @@ darwin_driver_init (unsigned int *decoded_options_count,
- generate_option (appendM32 ? OPT_m32 : OPT_m64, NULL, 1, CL_DRIVER,
- &(*decoded_options)[*decoded_options_count - 1]);
- }
-+#endif
-
- if (!seen_sysroot_p)
- {
-@@ -440,7 +465,7 @@ darwin_driver_init (unsigned int *decoded_options_count,
- }
- }
-
-- /* We will need to know the OS X version we're trying to build for here
-+ /* We will need to know the macOS version we're trying to build for here
- so that we can figure out the mechanism and source for the sysroot to
- be used. */
- if (!seen_version_min)
-diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h
-index 9df358e..babc888 100644
---- a/gcc/config/darwin-protos.h
-+++ b/gcc/config/darwin-protos.h
-@@ -86,9 +86,12 @@ extern void darwin_asm_lto_end (void);
- extern void darwin_mark_decl_preserved (const char *);
-
- extern tree darwin_handle_kext_attribute (tree *, tree, tree, int, bool *);
--extern tree darwin_handle_weak_import_attribute (tree *node, tree name,
-- tree args, int flags,
-- bool * no_add_attrs);
-+extern tree darwin_handle_weak_import_attribute (tree *, tree, tree, int,
-+ bool *);
-+extern tree darwin_handle_availability_attribute (tree *, tree, tree,
-+ int, bool *);
-+extern bool darwin_attribute_takes_identifier_p (const_tree);
-+
- extern void machopic_output_stub (FILE *, const char *, const char *);
- extern void darwin_globalize_label (FILE *, const char *);
- extern void darwin_assemble_visibility (tree, int);
-@@ -124,6 +127,7 @@ extern void darwin_enter_string_into_cfstring_table (tree);
- extern void darwin_asm_output_anchor (rtx symbol);
- extern bool darwin_use_anchors_for_symbol_p (const_rtx symbol);
- extern bool darwin_kextabi_p (void);
-+extern bool darwin_unreachable_traps_p (void);
- extern void darwin_override_options (void);
- extern void darwin_patch_builtins (void);
- extern void darwin_rename_builtins (void);
-diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc
-index 1471dbb..e95520f 100644
---- a/gcc/config/darwin.cc
-+++ b/gcc/config/darwin.cc
-@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
- #include "cfghooks.h"
- #include "df.h"
- #include "memmodel.h"
-+#include "c-family/c-common.h" /* enum rid. */
- #include "tm_p.h"
- #include "stringpool.h"
- #include "attribs.h"
-@@ -49,6 +50,7 @@ along with GCC; see the file COPYING3. If not see
- #include "optabs.h"
- #include "flags.h"
- #include "opts.h"
-+#include "c-family/c-objc.h" /* for objc_method_decl(). */
-
- /* Fix and Continue.
-
-@@ -102,6 +104,7 @@ int darwin_running_cxx;
-
- /* Some code-gen now depends on OS major version numbers (at least). */
- int generating_for_darwin_version ;
-+unsigned long current_os_version = 0;
-
- /* For older linkers we need to emit special sections (marked 'coalesced') for
- for weak or single-definition items. */
-@@ -131,7 +134,7 @@ struct {
- section * darwin_sections[NUM_DARWIN_SECTIONS];
-
- /* While we transition to using in-tests instead of ifdef'd code. */
--#if !HAVE_lo_sum
-+#if !HAVE_lo_sum || DARWIN_ARM64
- #define gen_macho_high(m,a,b) (a)
- #define gen_macho_low(m,a,b,c) (a)
- #endif
-@@ -1065,6 +1068,7 @@ machopic_legitimize_pic_address (rtx orig, machine_mode mode, rtx reg)
- return pic_ref;
- }
-
-+#if !DARWIN_ARM64
- /* Callbacks to output the stub or non-lazy pointers.
- Each works on the item in *SLOT,if it has been used.
- DATA is the FILE* for assembly output.
-@@ -1220,6 +1224,7 @@ machopic_finish (FILE *out_file)
- machopic_indirections->traverse_noresize
- (out_file);
- }
-+#endif
-
- int
- machopic_operand_p (rtx op)
-@@ -2155,6 +2160,122 @@ darwin_handle_kext_attribute (tree *node, tree name,
- return NULL_TREE;
- }
-
-+enum version_components { MAJOR, MINOR, TINY };
-+
-+/* Parse a version number in x.y.z form and validate it as a macOS
-+ version. Ideally, we'd put this in a common place usable by the
-+ Darwin backend. */
-+
-+static bool
-+parse_version (unsigned version_array[3], const char *version_str)
-+{
-+ size_t version_len;
-+ char *end, last = '\0', delimiter = '.', alt_delim = '_';
-+
-+ if (!version_str)
-+ return false;
-+
-+ /* Handle the odd situation in which we get STRING_CST which contain the
-+ starting and ending quotes. */
-+ if (version_str[0] == '"')
-+ {
-+ version_str++;
-+ version_len = strrchr (&version_str[1], '"') - version_str;
-+ last = '"';
-+ }
-+ else
-+ version_len = strlen (version_str);
-+
-+ if (version_len < 1)
-+ return false;
-+
-+ /* Version string must consist of digits and periods only. */
-+ if (strspn (version_str, "0123456789._") != version_len)
-+ return false;
-+
-+ if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
-+ return false;
-+
-+ version_array[MAJOR] = strtoul (version_str, &end, 10);
-+ if (*end == '_')
-+ {
-+ delimiter = '_';
-+ alt_delim = '.';
-+ }
-+ version_str = end + ((*end == delimiter) ? 1 : 0);
-+ if (version_array[MAJOR] == 100000)
-+ return true;
-+ if (version_array[MAJOR] > 99)
-+ return false;
-+
-+ /* Version string must not contain adjacent delimiters. */
-+ if (*version_str == delimiter || *version_str == alt_delim)
-+ return false;
-+
-+ version_array[MINOR] = strtoul (version_str, &end, 10);
-+ if (*end == alt_delim)
-+ return false;
-+ version_str = end + ((*end == delimiter) ? 1 : 0);
-+ if (version_array[MINOR] > 99)
-+ return false;
-+
-+ version_array[TINY] = strtoul (version_str, &end, 10);
-+ if (version_array[TINY] > 99)
-+ return false;
-+
-+ /* Version string must contain no more than three tokens. */
-+ if (*end != last)
-+ return false;
-+
-+ return true;
-+}
-+
-+/* Turn a version expressed as maj.min.tiny into an unsigned long
-+ integer representing the value used in macOS availability macros. */
-+
-+static unsigned long
-+version_from_version_array (unsigned vers[3])
-+{
-+ unsigned long res = 0;
-+ /* There seems to be a special "unknown" value. */
-+ if (vers[0] == 100000)
-+ return 999999;
-+
-+ /* Here, we follow the 'modern' / 'legacy' numbering scheme for versions. */
-+ if (vers[0] > 10 || vers[1] >= 10)
-+ res = vers[0] * 10000 + vers[1] * 100 + vers[2];
-+ else
-+ {
-+ res = vers[0] * 100;
-+ if (vers[1] > 9)
-+ res += 90;
-+ else
-+ res += vers[1] * 10;
-+ if (vers[2] > 9)
-+ res += 9;
-+ else
-+ res += vers[1];
-+ }
-+ return res;
-+}
-+
-+/* Extract a macOS version from an availability attribute argument. */
-+
-+static unsigned long
-+os_version_from_avail_value (tree value)
-+{
-+ unsigned long res = 0;
-+ unsigned vers[3] = {0,0,0};
-+ if (TREE_CODE (value) == STRING_CST)
-+ {
-+ if (parse_version (&vers[0], TREE_STRING_POINTER (value)))
-+ res = version_from_version_array (&vers[0]);
-+ }
-+ else
-+ gcc_unreachable ();
-+ return res;
-+}
-+
- /* Handle a "weak_import" attribute; arguments as in
- struct attribute_spec.handler. */
-
-@@ -2176,6 +2297,231 @@ darwin_handle_weak_import_attribute (tree *node, tree name,
- return NULL_TREE;
- }
-
-+#define NUM_AV_OSES 13
-+const char *availability_os[NUM_AV_OSES]
-+ = { "macos", "macosx", "ios", "tvos", "watchos", "driverkit", "swift",
-+ "maccatalyst", "macCatalyst", "xros", "visionos", "android", "zos" };
-+
-+#define NUM_AV_CLAUSES 6
-+const char *availability_clause[NUM_AV_CLAUSES]
-+ = { "unavailable", "introduced", "deprecated", "obsoleted", "message",
-+ "replacement" };
-+
-+/* Validate and act upon the arguments to an 'availability' attribute. */
-+
-+tree
-+darwin_handle_availability_attribute (tree *node, tree name, tree args,
-+ int flags, bool * no_add_attrs)
-+{
-+ tree decl = *node;
-+ *no_add_attrs = true;
-+
-+ if (!decl || (!TYPE_P (decl) && !DECL_P (decl)))
-+ {
-+ warning (OPT_Wattributes, "%qE attribute ignored", name);
-+ return NULL_TREE;
-+ }
-+ else if (decl == error_mark_node)
-+ return NULL_TREE;
-+
-+ location_t loc = DECL_SOURCE_LOCATION (decl);
-+ if (args == NULL_TREE)
-+ {
-+ error_at (loc, "%qE attribute requires at least one argument",
-+ name);
-+ return NULL_TREE;
-+ }
-+ else if (args == error_mark_node)
-+ return NULL_TREE;
-+
-+ /* The first argument must name a supported OS - although we could choose
-+ to ignore any OS we don't recognise. */
-+ gcc_checking_assert (TREE_CODE (args) == TREE_LIST);
-+ tree platform = TREE_VALUE (args);
-+ if (platform == error_mark_node)
-+ return NULL_TREE;
-+
-+ gcc_checking_assert (TREE_CODE (platform) == IDENTIFIER_NODE);
-+ bool platform_ok = false;
-+ unsigned plat_num = 0;
-+ for (; plat_num < (unsigned) NUM_AV_OSES; plat_num++)
-+ if (strcmp (availability_os[plat_num], IDENTIFIER_POINTER (platform)) == 0)
-+ {
-+ platform_ok = true;
-+ break;
-+ }
-+ if (!platform_ok)
-+ {
-+ error_at (input_location,
-+ "platform %qE is not recognised for the % "
-+ "attribute", platform);
-+ return NULL_TREE;
-+ }
-+ else if (plat_num > 1) /* We only compile for macos so far. */
-+ return NULL_TREE;
-+
-+ /* We might be dealing with an object or type. */
-+ tree target_decl = NULL_TREE;
-+ tree type = NULL_TREE;
-+ bool warn = false;
-+ if (DECL_P (*node))
-+ {
-+ type = TREE_TYPE (decl);
-+
-+ if (TREE_CODE (decl) == TYPE_DECL
-+ || TREE_CODE (decl) == PARM_DECL
-+ || VAR_OR_FUNCTION_DECL_P (decl)
-+ || TREE_CODE (decl) == FIELD_DECL
-+ || TREE_CODE (decl) == CONST_DECL
-+ /*|| objc_method_decl (TREE_CODE (decl))*/)
-+ target_decl = decl;
-+ else
-+ warn = true;
-+ }
-+ else if (TYPE_P (*node))
-+ type = target_decl = *node;
-+ else
-+ warn = true;
-+
-+ tree what = NULL_TREE;
-+ if (warn)
-+ {
-+ if (type && TYPE_NAME (type))
-+ {
-+ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
-+ what = TYPE_NAME (*node);
-+ else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
-+ && DECL_NAME (TYPE_NAME (type)))
-+ what = DECL_NAME (TYPE_NAME (type));
-+ }
-+ if (what)
-+ warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
-+ else
-+ warning (OPT_Wattributes, "%qE attribute ignored", name);
-+ return NULL_TREE;
-+ }
-+
-+ /* Now we have to parse the availability clauses. */
-+ tree msg = NULL_TREE;
-+ tree replacement = NULL_TREE;
-+ bool unavailable = false;
-+ unsigned introduced = 1000;
-+ unsigned deprecated = current_os_version + 1;
-+ unsigned obsoleted = current_os_version + 1;
-+ for (tree arg = TREE_CHAIN (args); arg; arg = TREE_CHAIN (arg))
-+ {
-+ tree clause_name = TREE_VALUE (arg);
-+ tree clause_value = TREE_PURPOSE (arg);
-+ if (clause_name == error_mark_node
-+ || clause_value == error_mark_node)
-+ continue;
-+ unsigned clause_num = 0;
-+ for (; clause_num < (unsigned) NUM_AV_CLAUSES; clause_num++)
-+ if (strcmp (availability_clause[clause_num],
-+ IDENTIFIER_POINTER (clause_name)) == 0)
-+ break;
-+ switch (clause_num)
-+ {
-+ default:
-+ error_at (input_location,
-+ "clause %qE is not recognised for the % "
-+ "attribute", clause_name);
-+ break;
-+ case 0:
-+ unavailable = true;
-+ break;
-+ case 1:
-+ case 2:
-+ case 3:
-+ if (!clause_value)
-+ error_at (input_location, "%<%E=%> requires a value", clause_name);
-+ else
-+ {
-+ unsigned version = os_version_from_avail_value (clause_value);
-+ if (version == 0)
-+ error_at (input_location, "the value %qE provided to %qE is "
-+ "not a valid OS version", clause_value, clause_name);
-+ else if (clause_num == 1)
-+ introduced = version;
-+ else if (clause_num == 2)
-+ deprecated = version;
-+ else if (clause_num == 3)
-+ obsoleted = version;
-+ }
-+ break;
-+ case 4:
-+ case 5:
-+ if (!clause_value || TREE_CODE (clause_value) != STRING_CST)
-+ error_at (input_location, "%<%E=%> requires a string", clause_name);
-+ else if (clause_num == 4)
-+ msg = clause_value;
-+ else
-+ replacement = clause_value;
-+ break;
-+ }
-+ }
-+ /* Now figure out what to do. */
-+ tree maybe_text = NULL_TREE;
-+ if (replacement)
-+ maybe_text = tree_cons (NULL_TREE, replacement, NULL_TREE);
-+ else if (msg)
-+ maybe_text = tree_cons (NULL_TREE, msg, NULL_TREE);
-+
-+ if (unavailable || current_os_version >= obsoleted)
-+ {
-+ TREE_UNAVAILABLE (*node) = true;
-+ /* We do not handle the availability attribute at diagnostics-time, so
-+ if we want the informational messages, then attach them to additional
-+ attributes for the deprecation or unavailability. TODO; maybe we can
-+ fabricate the composite here. */
-+ if (maybe_text)
-+ {
-+ *no_add_attrs = false;
-+ tree new_attr = tree_cons (get_identifier ("unavailable"),
-+ maybe_text, NULL_TREE);
-+ /* This is the actual consequence of the evaluation. */
-+ if (TYPE_P (target_decl) && !(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
-+ {
-+ *node = build_variant_type_copy (*node);
-+ TYPE_ATTRIBUTES (*node) = chainon (TYPE_ATTRIBUTES (*node),
-+ new_attr);
-+ }
-+ else
-+ DECL_ATTRIBUTES (*node) = chainon (DECL_ATTRIBUTES (*node),
-+ new_attr);
-+ }
-+ }
-+ else if (current_os_version > deprecated)
-+ {
-+ TREE_DEPRECATED (*node) = true;
-+ if (maybe_text)
-+ {
-+ *no_add_attrs = false;
-+ tree new_attr = tree_cons (get_identifier ("deprecated"),
-+ maybe_text, NULL_TREE);
-+ /* This is the actual consequence of the evaluation. */
-+ if (TYPE_P (target_decl) && !(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
-+ {
-+ *node = build_variant_type_copy (*node);
-+ TYPE_ATTRIBUTES (*node) = chainon (TYPE_ATTRIBUTES (*node),
-+ new_attr);
-+ }
-+ else
-+ DECL_ATTRIBUTES (*node) = chainon (DECL_ATTRIBUTES (*node),
-+ new_attr);
-+ }
-+ }
-+ else if (current_os_version < introduced)
-+ *no_add_attrs = false;
-+ return NULL_TREE;
-+}
-+
-+bool
-+darwin_attribute_takes_identifier_p (const_tree attr_id)
-+{
-+ return is_attribute_p ("availability", attr_id);
-+}
-+
- /* Emit a label for an FDE, making it global and/or weak if appropriate.
- The third parameter is nonzero if this is for exception handling.
- The fourth parameter is nonzero if this is just a placeholder for an
-@@ -2267,6 +2613,8 @@ darwin_emit_except_table_label (FILE *file)
- rtx
- darwin_make_eh_symbol_indirect (rtx orig, bool ARG_UNUSED (pubvis))
- {
-+ if (DARWIN_ARM64)
-+ return orig;
- if (DARWIN_PPC == 0 && TARGET_64BIT)
- return orig;
-
-@@ -3115,7 +3463,12 @@ darwin_file_end (void)
- fprintf (asm_out_file, "\t.long\t0\n\t.long\t%u\n", flags);
- }
-
-+#if !DARWIN_ARM64
- machopic_finish (asm_out_file);
-+#else
-+ gcc_checking_assert (!machopic_indirections);
-+#endif
-+
- if (flag_apple_kext)
- {
- /* These sections are only used for kernel code. */
-@@ -3291,6 +3644,13 @@ darwin_kextabi_p (void) {
- return flag_apple_kext;
- }
-
-+/* True, iff we want to map __builtin_unreachable to a trap. */
-+
-+bool
-+darwin_unreachable_traps_p (void) {
-+ return darwin_unreachable_traps;
-+}
-+
- void
- darwin_override_options (void)
- {
-@@ -3311,7 +3671,14 @@ darwin_override_options (void)
- generating_for_darwin_version = 8;
-
- /* Earlier versions are not specifically accounted, until required. */
-+ unsigned vers[3] = {0,0,0};
-+ if (!parse_version (vers, darwin_macosx_version_min))
-+ error_at (UNKNOWN_LOCATION, "how did we get a bad OS version? (%s)",
-+ darwin_macosx_version_min);
-+ current_os_version = version_from_version_array (vers);
- }
-+ else
-+ current_os_version = 1058;
-
- /* Some codegen needs to account for the capabilities of the target
- linker. */
-diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
-index 5c6c38d..fcf9eff 100644
---- a/gcc/config/darwin.h
-+++ b/gcc/config/darwin.h
-@@ -1,4 +1,4 @@
--/* Target definitions for Darwin (Mac OS X) systems.
-+/* Target definitions for Darwin (macOS) systems.
- Copyright (C) 1989-2023 Free Software Foundation, Inc.
- Contributed by Apple Computer Inc.
-
-@@ -27,7 +27,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- #define CONFIG_DARWIN_H
-
- /* The definitions in this file are common to all processor types
-- running Darwin, which is the kernel for Mac OS X. Darwin is
-+ running Darwin, which is the kernel for macOS. Darwin is
- basically a BSD user layer laid over a Mach kernel, then evolved
- for many years (at NeXT) in parallel with other Unix systems. So
- while the runtime is a somewhat idiosyncratic Mach-based thing,
-@@ -42,6 +42,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-
- #define DARWIN_X86 0
- #define DARWIN_PPC 0
-+#define DARWIN_ARM64 0
-
- #define OBJECT_FORMAT_MACHO 1
-
-@@ -133,10 +134,9 @@ extern GTY(()) int darwin_ms_struct;
- cases where these driver opts are used multiple times, or to control
- operations on more than one command (e.g. dynamiclib). These are handled
- specially and we then add %= 10.7 mmacosx-version-min= -no_pie) }"
-
- #define DARWIN_CC1_SPEC \
-- "% 10.11 mmacosx-version-min= -lgcc_s.1.1)"
-+# define DARWIN_SHARED_WEAK_ADDS \
-+"%{%:version-compare(>= 10.11 mmacosx-version-min= -lemutls_w): \
-+ " DARWIN_HEAP_T_LIB "}"
-+#endif
-+
-+
-+/* We might elect to add a path even when this compiler does not use embedded
-+ run paths, so that we can use libraries from an alternate compiler that is
-+ using embedded runpaths. */
-+#if DARWIN_DO_EXTRA_RPATH
-+# define DARWIN_EXTRA_RPATH \
-+"%{!r:%{!nostdlib:%{!nodefaultrpaths:\
-+ %:version-compare(>= 10.5 mmacosx-version-min= -rpath) \
-+ %:version-compare(>= 10.5 mmacosx-version-min= " DARWIN_ADD_RPATH ") \
-+ }}}"
-+#else
-+# define DARWIN_EXTRA_RPATH ""
-+#endif
-
- #define SUBSUBTARGET_OVERRIDE_OPTIONS \
- do { \
-@@ -336,7 +372,8 @@ extern GTY(()) int darwin_ms_struct;
- */
-
- #define DARWIN_NOCOMPACT_UNWIND \
--" %:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind) "
-+"%{!fuse-ld=lld: \
-+ %:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind)}"
-
- /* In Darwin linker specs we can put -lcrt0.o and ld will search the library
- path for crt0.o or -lcrtx.a and it will search for libcrtx.a. As for
-@@ -356,10 +393,12 @@ extern GTY(()) int darwin_ms_struct;
- #define LINK_COMMAND_SPEC_A \
- "%{!c:%{!E:%{!S:%{!M:%{!MM:%{!fsyntax-only:%{!fdump=*: \
- %(linker)" \
-+ DARWIN_LD_DEMANGLE \
- LINK_PLUGIN_SPEC \
- "%{flto*:% 10.6 mmacosx-version-min= -lgcc_eh); \
- shared-libgcc|fexceptions|fobjc-exceptions|fgnu-runtime: \
-- %:version-compare(!> 10.11 mmacosx-version-min= -lgcc_s.1.1) \
-+ " DARWIN_SHARED_LIBGCC " \
- %:version-compare(!> 10.3.9 mmacosx-version-min= -lgcc_eh) \
- %:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \
- %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \
-@@ -520,18 +561,19 @@ extern GTY(()) int darwin_ms_struct;
-
- #define DARWIN_WEAK_CRTS \
- "%{static-libgcc|static: \
-- %:version-compare(>= 10.6 mmacosx-version-min= -lemutls_w) ; \
-- shared-libgcc|fexceptions|fobjc-exceptions|fgnu-runtime: \
-- %:version-compare(>= 10.11 mmacosx-version-min= -lemutls_w) ; \
-- : -lemutls_w \
-+ %{%:version-compare(>= 10.6 mmacosx-version-min= -lemutls_w): \
-+ " DARWIN_HEAP_T_LIB "} ; \
-+ shared-libgcc|fexceptions|fobjc-exceptions|fgnu-runtime: " \
-+ DARWIN_SHARED_WEAK_ADDS " ; \
-+ : -lemutls_w " DARWIN_HEAP_T_LIB " \
- }"
-
- /* We specify crt0.o as -lcrt0.o so that ld will search the library path. */
-
- #undef STARTFILE_SPEC
- #define STARTFILE_SPEC \
--"%{dynamiclib: %(darwin_dylib1) %{fgnu-tm: -lcrttms.o}} \
-- %{!dynamiclib:%{bundle:%(darwin_bundle1)} \
-+"%{dynamiclib|shared: %(darwin_dylib1) %{fgnu-tm: -lcrttms.o}} \
-+ %{!dynamiclib:%{!shared:%{bundle:%(darwin_bundle1)} \
- %{!bundle:%{pg:%{static:-lgcrt0.o} \
- %{!static:%{object:-lgcrt0.o} \
- %{!object:%{preload:-lgcrt0.o} \
-@@ -542,8 +584,8 @@ extern GTY(()) int darwin_ms_struct;
- %{!static:%{object:-lcrt0.o} \
- %{!object:%{preload:-lcrt0.o} \
- %{!preload: %(darwin_crt1) \
-- %(darwin_crt2)}}}}}} \
-- %(darwin_crt3) % 10.5 mmacosx-version-min= -lcrt1.o) \
-@@ -580,6 +623,16 @@ extern GTY(()) int darwin_ms_struct;
- "%{!static:%:version-compare(< 10.6 mmacosx-version-min= -lbundle1.o) \
- %{fgnu-tm: -lcrttms.o}}"
-
-+#if DARWIN_AT_RPATH
-+/* A default rpath, that picks up dependent libraries installed in the same
-+ director as one being loaded. */
-+#define DARWIN_RPATH_SPEC \
-+ "%:version-compare(>= 10.5 mmacosx-version-min= -rpath) \
-+ %{%:version-compare(>= 10.5 mmacosx-version-min= @loader_path): %P }"
-+#else
-+#define DARWIN_RPATH_SPEC ""
-+#endif
-+
- #ifdef HAVE_AS_MMACOSX_VERSION_MIN_OPTION
- /* Emit macosx version (but only major). */
- #define ASM_MMACOSX_VERSION_MIN_SPEC \
-@@ -927,7 +980,12 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
- { "apple_kext_compatibility", 0, 0, false, true, false, false, \
- darwin_handle_kext_attribute, NULL }, \
- { "weak_import", 0, 0, true, false, false, false, \
-- darwin_handle_weak_import_attribute, NULL }
-+ darwin_handle_weak_import_attribute, NULL }, \
-+ { "availability", 0, -1, true, false, false, false, \
-+ darwin_handle_availability_attribute, NULL }
-+
-+#undef TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P
-+#define TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P darwin_attribute_takes_identifier_p
-
- /* Make local constant labels linker-visible, so that if one follows a
- weak_global constant, ld64 will be able to separate the atoms. */
-@@ -1175,6 +1233,10 @@ void add_framework_path (char *);
- #define TARGET_N_FORMAT_TYPES 1
- #define TARGET_FORMAT_TYPES darwin_additional_format_types
-
-+/* We want __builtin_unreachable to be expanded as a trap instruction. */
-+#undef TARGET_UNREACHABLE_SHOULD_TRAP
-+#define TARGET_UNREACHABLE_SHOULD_TRAP darwin_unreachable_traps_p
-+
- #ifndef USED_FOR_TARGET
- extern void darwin_driver_init (unsigned int *,struct cl_decoded_option **);
- #define GCC_DRIVER_HOST_INITIALIZATION \
-diff --git a/gcc/config/darwin.opt b/gcc/config/darwin.opt
-index d655aae..97b1a74 100644
---- a/gcc/config/darwin.opt
-+++ b/gcc/config/darwin.opt
-@@ -91,6 +91,10 @@ mtarget-linker
- Target RejectNegative Joined Separate Var(darwin_target_linker) Init(LD64_VERSION)
- -mtarget-linker Specify that ld64 is the toolchain linker for the current invocation.
-
-+munreachable-traps
-+Target Var(darwin_unreachable_traps) Init(1)
-+When set (the default) this makes __builtin_unreachable render as a trap.
-+
- ; Driver options.
-
- all_load
-@@ -241,6 +245,10 @@ nodefaultexport
- Driver RejectNegative
- Do not add a default symbol exports to modules or dynamic libraries.
-
-+nodefaultrpaths
-+Driver RejectNegative
-+Do not add default run paths (for the compiler library directories) to executables, modules or dynamic libraries.
-+
- nofixprebinding
- Driver RejectNegative
- (Obsolete after 10.3.9) Set MH_NOPREFIXBINDING, in an executable.
-diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h
-index 588bd66..657ea47 100644
---- a/gcc/config/i386/darwin.h
-+++ b/gcc/config/i386/darwin.h
-@@ -121,6 +121,9 @@ along with GCC; see the file COPYING3. If not see
- #define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC
- #endif
-
-+#undef DARWIN_HEAP_T_LIB
-+#define DARWIN_HEAP_T_LIB " -lheapt_w "
-+
- #undef SUBTARGET_EXTRA_SPECS
- #define SUBTARGET_EXTRA_SPECS \
- DARWIN_EXTRA_SPECS \
-@@ -308,3 +311,9 @@ along with GCC; see the file COPYING3. If not see
- #define CLEAR_INSN_CACHE(beg, end) \
- extern void sys_icache_invalidate(void *start, size_t len); \
- sys_icache_invalidate ((beg), (size_t)((end)-(beg)))
-+
-+/* Disable custom function descriptors for Darwin when we have off-stack
-+ trampolines. */
-+#undef X86_CUSTOM_FUNCTION_TEST
-+#define X86_CUSTOM_FUNCTION_TEST \
-+ (flag_trampolines && flag_trampoline_impl == TRAMPOLINE_IMPL_HEAP) ? 0 : 1
-diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
-index 4991841..be6d408 100644
---- a/gcc/config/i386/i386.cc
-+++ b/gcc/config/i386/i386.cc
-@@ -25245,7 +25245,7 @@ ix86_libgcc_floating_mode_supported_p
- #define TARGET_HARD_REGNO_SCRATCH_OK ix86_hard_regno_scratch_ok
-
- #undef TARGET_CUSTOM_FUNCTION_DESCRIPTORS
--#define TARGET_CUSTOM_FUNCTION_DESCRIPTORS 1
-+#define TARGET_CUSTOM_FUNCTION_DESCRIPTORS X86_CUSTOM_FUNCTION_TEST
-
- #undef TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID
- #define TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID ix86_addr_space_zero_address_valid
-diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
-index 539083f..77644b0 100644
---- a/gcc/config/i386/i386.h
-+++ b/gcc/config/i386/i386.h
-@@ -754,6 +754,12 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
- /* Minimum allocation boundary for the code of a function. */
- #define FUNCTION_BOUNDARY 8
-
-+/* We will and with this value to test if a custom function descriptor needs
-+ a static chain. The function boundary must the adjusted so that the bit
-+ this represents is no longer part of the address. 0 Disables the custom
-+ function descriptors. */
-+#define X86_CUSTOM_FUNCTION_TEST 1
-+
- /* C++ stores the virtual bit in the lowest bit of function pointers. */
- #define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn
-
-diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
-index 4d5d6f6..3a2e480 100644
---- a/gcc/config/rs6000/darwin.h
-+++ b/gcc/config/rs6000/darwin.h
-@@ -98,7 +98,7 @@
- Include libmx when targeting Darwin 7.0 and above, but before libSystem,
- since the functions are actually in libSystem but for 7.x compatibility
- we want them to be looked for in libmx first.
-- Include libSystemStubs when compiling against 10.3 - 10.5 SDKs (we assume
-+ Include libSystemStubs when compiling against 10.3 - 10.6 SDKs (we assume
- this is the case when targetting these) - but not for 64-bit long double.
- Don't do either for m64, the library is either a dummy or non-existent.
- */
-@@ -107,12 +107,15 @@
- #define LIB_SPEC \
- "%{!static: \
- %{!m64:%{!mlong-double-64: \
-- %{pg:%:version-compare(>< 10.3 10.5 mmacosx-version-min= -lSystemStubs_profile)} \
-- %{!pg:%:version-compare(>< 10.3 10.5 mmacosx-version-min= -lSystemStubs)} \
-+ %{pg:%:version-compare(>< 10.3 10.7 mmacosx-version-min= -lSystemStubs_profile)} \
-+ %{!pg:%:version-compare(>< 10.3 10.7 mmacosx-version-min= -lSystemStubs)} \
- %:version-compare(>< 10.3 10.4 mmacosx-version-min= -lmx)}} \
- -lSystem \
- }"
-
-+#undef DARWIN_HEAP_T_LIB
-+#define DARWIN_HEAP_T_LIB " "
-+
- /* We want -fPIC by default, unless we're using -static to compile for
- the kernel or some such. The "-faltivec" option should have been
- called "-maltivec" all along. */
-diff --git a/gcc/config.gcc b/gcc/config.gcc
-index c3b73d0..1b80761 100644
---- a/gcc/config.gcc
-+++ b/gcc/config.gcc
-@@ -1125,6 +1125,26 @@ case ${target} in
- ;;
- esac
-
-+# Figure out if we need to enable heap trampolines
-+# and variadic functions handling.
-+case ${target} in
-+aarch64*-*-darwin2*)
-+ # This applies to arm64 Darwin variadic funtions.
-+ tm_defines="$tm_defines STACK_USE_CUMULATIVE_ARGS_INIT=1"
-+ # Executable stack is forbidden.
-+ tm_defines="$tm_defines HEAP_TRAMPOLINES_INIT=1"
-+ ;;
-+*-*-darwin2*)
-+ tm_defines="$tm_defines STACK_USE_CUMULATIVE_ARGS_INIT=0"
-+ # Currently, we do this for macOS 11 and above.
-+ tm_defines="$tm_defines HEAP_TRAMPOLINES_INIT=1"
-+ ;;
-+*)
-+ tm_defines="$tm_defines STACK_USE_CUMULATIVE_ARGS_INIT=0"
-+ tm_defines="$tm_defines HEAP_TRAMPOLINES_INIT=0"
-+ ;;
-+esac
-+
- case ${target} in
- aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
- tm_file="${tm_file} elfos.h newlib-stdint.h"
-@@ -1164,6 +1184,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
- done
- TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
- ;;
-+aarch64-*-darwin* )
-+ tm_file="${tm_file} aarch64/aarch64-errata.h"
-+ tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-darwin"
-+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
-+ tm_defines="${tm_defines} DISABLE_AARCH64_AS_CRC_BUGFIX=1"
-+ # Choose a default CPU version that will work for all current releases.
-+ with_cpu=${with_cpu:-apple-m1}
-+ ;;
- aarch64*-*-freebsd*)
- tm_file="${tm_file} elfos.h ${fbsd_tm_file}"
- tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-freebsd.h"
-@@ -4125,8 +4153,8 @@ case "${target}" in
- fi
- for which in cpu arch tune; do
- eval "val=\$with_$which"
-- base_val=`echo $val | sed -e 's/\+.*//'`
-- ext_val=`echo $val | sed -e 's/[a-z0-9.-]\+//'`
-+ base_val=`echo $val | sed -E -e 's/\+.*//'`
-+ ext_val=`echo $val | sed -E -e 's/[a-z0-9.-]+//'`
-
- if [ $which = arch ]; then
- def=aarch64-arches.def
-@@ -4158,9 +4186,9 @@ case "${target}" in
-
- while [ x"$ext_val" != x ]
- do
-- ext_val=`echo $ext_val | sed -e 's/\+//'`
-- ext=`echo $ext_val | sed -e 's/\+.*//'`
-- base_ext=`echo $ext | sed -e 's/^no//'`
-+ ext_val=`echo $ext_val | sed -E -e 's/\+//'`
-+ ext=`echo $ext_val | sed -E -e 's/\+.*//'`
-+ base_ext=`echo $ext | sed -E -e 's/^no//'`
- opt_line=`echo -e "$options_parsed" | \
- grep "^\"$base_ext\""`
-
-@@ -4171,7 +4199,7 @@ case "${target}" in
- echo "Unknown extension used in --with-$which=$val" 1>&2
- exit 1
- fi
-- ext_val=`echo $ext_val | sed -e 's/[a-z0-9]\+//'`
-+ ext_val=`echo $ext_val | sed -E -e 's/[a-z0-9]+//'`
- done
-
- true
-diff --git a/gcc/config.in b/gcc/config.in
-index 5281a12..b70b0be 100644
---- a/gcc/config.in
-+++ b/gcc/config.in
-@@ -49,6 +49,19 @@
- #endif
-
-
-+/* Specify a runpath directory, additional to those provided by the compiler
-+ */
-+#ifndef USED_FOR_TARGET
-+#undef DARWIN_ADD_RPATH
-+#endif
-+
-+
-+/* Should add an extra runpath directory */
-+#ifndef USED_FOR_TARGET
-+#undef DARWIN_DO_EXTRA_RPATH
-+#endif
-+
-+
- /* Define to enable the use of a default assembler. */
- #ifndef USED_FOR_TARGET
- #undef DEFAULT_ASSEMBLER
-@@ -634,8 +647,7 @@
- #endif
-
-
--/* Define if your Mac OS X assembler supports -mllvm -x86-pad-for-align=false.
-- */
-+/* Define if your macOS assembler supports -mllvm -x86-pad-for-align=false. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_AS_MLLVM_X86_PAD_FOR_ALIGN
- #endif
-@@ -2201,6 +2213,12 @@
- #endif
-
-
-+/* Define to 1 if ld64 supports '-demangle'. */
-+#ifndef USED_FOR_TARGET
-+#undef LD64_HAS_DEMANGLE
-+#endif
-+
-+
- /* Define to 1 if ld64 supports '-export_dynamic'. */
- #ifndef USED_FOR_TARGET
- #undef LD64_HAS_EXPORT_DYNAMIC
-diff --git a/gcc/configure b/gcc/configure
-index ade0af2..4af01a0 100755
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -632,10 +632,10 @@ ac_includes_default="\
- ac_subst_vars='LTLIBOBJS
- LIBOBJS
- CET_HOST_FLAGS
--NO_PIE_FLAG
--NO_PIE_CFLAGS
--enable_default_pie
-+LD_PICFLAG
- PICFLAG
-+enable_default_pie
-+enable_host_pie
- enable_host_shared
- enable_plugin
- pluginlibs
-@@ -735,11 +735,15 @@ ORIGINAL_NM_FOR_TARGET
- gcc_cv_nm
- ORIGINAL_LD_GOLD_FOR_TARGET
- ORIGINAL_LD_BFD_FOR_TARGET
-+ORIGINAL_CLASSIC_LD_FOR_TARGET
-+ORIGINAL_LLD_FOR_TARGET
- ORIGINAL_LD_FOR_TARGET
- ORIGINAL_PLUGIN_LD_FOR_TARGET
- gcc_cv_ld
- ORIGINAL_AS_FOR_TARGET
- gcc_cv_as
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_fast_install
- objdir
- OTOOL64
-@@ -1004,6 +1008,8 @@ enable_static
- with_pic
- enable_fast_install
- enable_libtool_lock
-+enable_darwin_at_rpath
-+with_darwin_extra_rpath
- enable_ld
- enable_gold
- with_plugin_ld
-@@ -1029,6 +1035,7 @@ enable_link_serialization
- enable_version_specific_runtime_libs
- enable_plugin
- enable_host_shared
-+enable_host_pie
- enable_libquadmath_support
- with_linker_hash_style
- with_diagnostics_color
-@@ -1742,6 +1749,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-ld[=ARG] build ld [ARG={default,yes,no}]
- --enable-gold[=ARG] build gold [ARG={default,yes,no}]
- --enable-gnu-indirect-function
-@@ -1796,6 +1806,7 @@ Optional Features:
- in a compiler-specific directory
- --enable-plugin enable plugin support
- --enable-host-shared build host code as shared libraries
-+ --enable-host-pie build host code as PIE
- --disable-libquadmath-support
- disable libquadmath support for Fortran
- --enable-default-pie enable Position Independent Executable as default
-@@ -1860,6 +1871,9 @@ Optional Packages:
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-darwin-extra-rpath=[ARG]
-+ Specify a runpath directory, additional to those
-+ provided by the compiler
- --with-plugin-ld=[ARG] specify the plugin linker
- --with-glibc-version=M.N
- assume GCC used with glibc version M.N or later
-@@ -3759,20 +3773,19 @@ gcc_gxx_libcxx_include_dir=
-
- # Check whether --with-gxx-libcxx-include-dir was given.
- if test "${with_gxx_libcxx_include_dir+set}" = set; then :
-- withval=$with_gxx_libcxx_include_dir; case "${withval}" in
--yes) as_fn_error $? "bad value ${withval} given for libc++ include directory" "$LINENO" 5 ;;
--*) gcc_gxx_libcxx_include_dir=$with_gxx_libcxx_include_dir ;;
--esac
-+ withval=$with_gxx_libcxx_include_dir; gcc_gxx_libcxx_include_dir=$with_gxx_libcxx_include_dir
- fi
-
-
- # --with-gxx-libcxx-include-dir controls the enabling of the -stdlib option.
- # if --with-gxx-libcxx-include-dir is 'no' we disable the stdlib option.
-+# if --with-gxx-libcxx-include-dir is 'yes' we enable the stdlib option and use
-+# the default path within the installation.
- # if --with-gxx-libcxx-include-dir is unset we enable the stdlib option
--# based on the platform (to be available on platform versions where it is the
-+# based on the platform (to be available on platform versions where it is the
- # default for the system tools). We also use a default path within the compiler
--# install tree.
--# Otherwise, we use the path provided and enable the stdlib option.
-+# install tree.
-+# Otherwise, we use the path provided and enable the stdlib option.
- # If both --with-sysroot and --with-gxx-libcxx-include-dir are passed, we
- # check to see if the latter starts with the former and, upon success, compute
- # gcc_gxx_libcxx_include_dir as relative to the sysroot.
-@@ -3780,16 +3793,20 @@ gcc_gxx_libcxx_include_dir_add_sysroot=0
- gcc_enable_stdlib_opt=0
- if test x${gcc_gxx_libcxx_include_dir} != x; then
- if test x${gcc_gxx_libcxx_include_dir} = xno; then
-- # set defaults for the dir, but the option is disabled anyway.
-+ # set defaults for the dir, but the option is disabled anyway.
- gcc_gxx_libcxx_include_dir=
-+ elif test x${gcc_gxx_libcxx_include_dir} = xyes; then
-+ # set defaults for the dir, and enable.
-+ gcc_gxx_libcxx_include_dir=
-+ gcc_enable_stdlib_opt=1
- else
- gcc_enable_stdlib_opt=1
- fi
- else
- case $target in
- *-darwin1[1-9]* | *-darwin2*)
-- # Default this on for Darwin versions which default to libcxx,
-- # and embed the path in the compiler install so that we get a
-+ # Default this on for Darwin versions which default to libcxx,
-+ # and embed the path in the compiler install so that we get a
- # self-contained toolchain.
- gcc_enable_stdlib_opt=1
- ;;
-@@ -16341,7 +16358,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -18046,6 +18063,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -18063,9 +18123,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -19871,7 +19935,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 19874 "configure"
-+#line 19938 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -19977,7 +20041,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 19980 "configure"
-+#line 20044 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -20853,6 +20917,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -20870,12 +20977,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -23246,6 +23361,35 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+DARWIN_DO_EXTRA_RPATH=0
-+
-+# Check whether --with-darwin-extra-rpath was given.
-+if test "${with_darwin_extra_rpath+set}" = set; then :
-+ withval=$with_darwin_extra_rpath; if test x"$withval" != x; then
-+ DARWIN_ADD_RPATH="$withval"
-+ DARWIN_DO_EXTRA_RPATH=1
-+ fi
-+fi
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DARWIN_DO_EXTRA_RPATH $DARWIN_DO_EXTRA_RPATH
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DARWIN_ADD_RPATH "$DARWIN_ADD_RPATH"
-+_ACEOF
-+
-+
- # Identify the assembler which will work hand-in-glove with the newly
- # built GCC, so that we can examine its features. This is the assembler
- # which will be driven by the driver program.
-@@ -23522,6 +23666,14 @@ fi
- $as_echo "$gold_non_default" >&6; }
-
- ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
-+if test x"$ld64_flag" = x"yes"; then
-+ORIGINAL_LLD_FOR_TARGET=${gcc_cv_ld}64.lld
-+else
-+ORIGINAL_LLD_FOR_TARGET=$gcc_cv_lld
-+fi
-+ORIGINAL_CLASSIC_LD_FOR_TARGET=$gcc_cv_ld-classic
-+
-+
-
- case "$ORIGINAL_LD_FOR_TARGET" in
- ./collect-ld | ./collect-ld$build_exeext) ;;
-@@ -30638,6 +30790,7 @@ if test x"$ld64_flag" = x"yes"; then
- # Set defaults for possibly untestable items.
- gcc_cv_ld64_export_dynamic=0
- gcc_cv_ld64_platform_version=0
-+ gcc_cv_ld64_demangle=0
-
- if test "$build" = "$host"; then
- darwin_try_test=1
-@@ -30661,6 +30814,9 @@ $as_echo_n "checking ld64 specified version... " >&6; }
- gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_major" >&5
- $as_echo "$gcc_cv_ld64_major" >&6; }
-+ if test "$gcc_cv_ld64_major" -ge 97; then
-+ gcc_cv_ld64_demangle=1
-+ fi
- if test "$gcc_cv_ld64_major" -ge 236; then
- gcc_cv_ld64_export_dynamic=1
- fi
-@@ -30678,6 +30834,15 @@ $as_echo_n "checking linker version... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5
- $as_echo "$gcc_cv_ld64_version" >&6; }
-
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for -demangle support" >&5
-+$as_echo_n "checking linker for -demangle support... " >&6; }
-+ gcc_cv_ld64_demangle=1
-+ if $gcc_cv_ld -demangle < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
-+ gcc_cv_ld64_demangle=0
-+ fi
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_demangle" >&5
-+$as_echo "$gcc_cv_ld64_demangle" >&6; }
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for -export_dynamic support" >&5
- $as_echo_n "checking linker for -export_dynamic support... " >&6; }
- gcc_cv_ld64_export_dynamic=1
-@@ -30706,6 +30871,12 @@ _ACEOF
- fi
-
-
-+cat >>confdefs.h <<_ACEOF
-+#define LD64_HAS_DEMANGLE $gcc_cv_ld64_demangle
-+_ACEOF
-+
-+
-+
- cat >>confdefs.h <<_ACEOF
- #define LD64_HAS_EXPORT_DYNAMIC $gcc_cv_ld64_export_dynamic
- _ACEOF
-@@ -32251,13 +32422,17 @@ fi
- # Enable --enable-host-shared
- # Check whether --enable-host-shared was given.
- if test "${enable_host_shared+set}" = set; then :
-- enableval=$enable_host_shared; PICFLAG=-fPIC
--else
-- PICFLAG=
-+ enableval=$enable_host_shared;
- fi
-
-
-
-+# Enable --enable-host-pie
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie;
-+fi
-+
-
-
- # Check whether --enable-libquadmath-support was given.
-@@ -32411,10 +32586,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5
- $as_echo "$gcc_cv_c_no_fpie" >&6; }
--if test "$gcc_cv_c_no_fpie" = "yes"; then
-- NO_PIE_CFLAGS="-fno-PIE"
--fi
--
-
- # Check if -no-pie works.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
-@@ -32439,11 +32610,28 @@ rm -f core conftest.err conftest.$ac_objext \
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5
- $as_echo "$gcc_cv_no_pie" >&6; }
--if test "$gcc_cv_no_pie" = "yes"; then
-- NO_PIE_FLAG="-no-pie"
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+elif test x$gcc_cv_c_no_fpie = xyes; then
-+ PICFLAG=-fno-PIE
-+else
-+ PICFLAG=
-+fi
-+
-+if test x$enable_host_pie = xyes; then
-+ LD_PICFLAG=-pie
-+elif test x$gcc_cv_no_pie = xyes; then
-+ LD_PICFLAG=-no-pie
-+else
-+ LD_PICFLAG=
- fi
-
-
-+
-+
- # Enable Intel CET on Intel CET enabled host if jit is enabled.
- # Check whether --enable-cet was given.
- if test "${enable_cet+set}" = set; then :
-@@ -32926,6 +33114,10 @@ LTLIBOBJS=$ac_ltlibobjs
-
-
-
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
-
- : "${CONFIG_STATUS=./config.status}"
- ac_write_fail=0
-diff --git a/gcc/configure.ac b/gcc/configure.ac
-index bf8ff4d..8c2ff47 100644
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -235,18 +235,17 @@ gcc_gxx_libcxx_include_dir=
- AC_ARG_WITH(gxx-libcxx-include-dir,
- [AS_HELP_STRING([--with-gxx-libcxx-include-dir=DIR],
- [specifies directory to find libc++ header files])],
--[case "${withval}" in
--yes) AC_MSG_ERROR(bad value ${withval} given for libc++ include directory) ;;
--*) gcc_gxx_libcxx_include_dir=$with_gxx_libcxx_include_dir ;;
--esac])
-+[gcc_gxx_libcxx_include_dir=$with_gxx_libcxx_include_dir])
-
- # --with-gxx-libcxx-include-dir controls the enabling of the -stdlib option.
- # if --with-gxx-libcxx-include-dir is 'no' we disable the stdlib option.
-+# if --with-gxx-libcxx-include-dir is 'yes' we enable the stdlib option and use
-+# the default path within the installation.
- # if --with-gxx-libcxx-include-dir is unset we enable the stdlib option
--# based on the platform (to be available on platform versions where it is the
-+# based on the platform (to be available on platform versions where it is the
- # default for the system tools). We also use a default path within the compiler
--# install tree.
--# Otherwise, we use the path provided and enable the stdlib option.
-+# install tree.
-+# Otherwise, we use the path provided and enable the stdlib option.
- # If both --with-sysroot and --with-gxx-libcxx-include-dir are passed, we
- # check to see if the latter starts with the former and, upon success, compute
- # gcc_gxx_libcxx_include_dir as relative to the sysroot.
-@@ -254,16 +253,20 @@ gcc_gxx_libcxx_include_dir_add_sysroot=0
- gcc_enable_stdlib_opt=0
- if test x${gcc_gxx_libcxx_include_dir} != x; then
- if test x${gcc_gxx_libcxx_include_dir} = xno; then
-- # set defaults for the dir, but the option is disabled anyway.
-+ # set defaults for the dir, but the option is disabled anyway.
-+ gcc_gxx_libcxx_include_dir=
-+ elif test x${gcc_gxx_libcxx_include_dir} = xyes; then
-+ # set defaults for the dir, and enable.
- gcc_gxx_libcxx_include_dir=
-+ gcc_enable_stdlib_opt=1
- else
- gcc_enable_stdlib_opt=1
- fi
- else
- case $target in
- *-darwin1[[1-9]]* | *-darwin2*)
-- # Default this on for Darwin versions which default to libcxx,
-- # and embed the path in the compiler install so that we get a
-+ # Default this on for Darwin versions which default to libcxx,
-+ # and embed the path in the compiler install so that we get a
- # self-contained toolchain.
- gcc_enable_stdlib_opt=1
- ;;
-@@ -2625,6 +2628,21 @@ AC_PROG_LIBTOOL
- AC_SUBST(objdir)
- AC_SUBST(enable_fast_install)
-
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+DARWIN_DO_EXTRA_RPATH=0
-+AC_ARG_WITH(darwin-extra-rpath,
-+[AS_HELP_STRING(
-+ [[--with-darwin-extra-rpath=[ARG]]],
-+ [Specify a runpath directory, additional to those provided by the compiler])],
-+[if test x"$withval" != x; then
-+ DARWIN_ADD_RPATH="$withval"
-+ DARWIN_DO_EXTRA_RPATH=1
-+ fi])
-+AC_DEFINE_UNQUOTED(DARWIN_DO_EXTRA_RPATH, $DARWIN_DO_EXTRA_RPATH,
-+ [Should add an extra runpath directory])
-+AC_DEFINE_UNQUOTED(DARWIN_ADD_RPATH, "$DARWIN_ADD_RPATH",
-+ [Specify a runpath directory, additional to those provided by the compiler])
-+
- # Identify the assembler which will work hand-in-glove with the newly
- # built GCC, so that we can examine its features. This is the assembler
- # which will be driven by the driver program.
-@@ -2797,7 +2815,15 @@ fi
- AC_MSG_RESULT($gold_non_default)
-
- ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
-+if test x"$ld64_flag" = x"yes"; then
-+ORIGINAL_LLD_FOR_TARGET=${gcc_cv_ld}64.lld
-+else
-+ORIGINAL_LLD_FOR_TARGET=$gcc_cv_lld
-+fi
-+ORIGINAL_CLASSIC_LD_FOR_TARGET=$gcc_cv_ld-classic
- AC_SUBST(ORIGINAL_LD_FOR_TARGET)
-+AC_SUBST(ORIGINAL_LLD_FOR_TARGET)
-+AC_SUBST(ORIGINAL_CLASSIC_LD_FOR_TARGET)
- case "$ORIGINAL_LD_FOR_TARGET" in
- ./collect-ld | ./collect-ld$build_exeext) ;;
- *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
-@@ -4793,7 +4819,7 @@ foo: nop
- gcc_cv_as_mllvm_x86_pad_for_align,
- [-mllvm -x86-pad-for-align=false], [.text],,
- [AC_DEFINE(HAVE_AS_MLLVM_X86_PAD_FOR_ALIGN, 1,
-- [Define if your Mac OS X assembler supports -mllvm -x86-pad-for-align=false.])])
-+ [Define if your macOS assembler supports -mllvm -x86-pad-for-align=false.])])
- ;;
- esac
-
-@@ -6273,6 +6299,7 @@ if test x"$ld64_flag" = x"yes"; then
- # Set defaults for possibly untestable items.
- gcc_cv_ld64_export_dynamic=0
- gcc_cv_ld64_platform_version=0
-+ gcc_cv_ld64_demangle=0
-
- if test "$build" = "$host"; then
- darwin_try_test=1
-@@ -6294,6 +6321,9 @@ if test x"$ld64_flag" = x"yes"; then
- AC_MSG_CHECKING(ld64 specified version)
- gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'`
- AC_MSG_RESULT($gcc_cv_ld64_major)
-+ if test "$gcc_cv_ld64_major" -ge 97; then
-+ gcc_cv_ld64_demangle=1
-+ fi
- if test "$gcc_cv_ld64_major" -ge 236; then
- gcc_cv_ld64_export_dynamic=1
- fi
-@@ -6309,6 +6339,13 @@ if test x"$ld64_flag" = x"yes"; then
- fi
- AC_MSG_RESULT($gcc_cv_ld64_version)
-
-+ AC_MSG_CHECKING(linker for -demangle support)
-+ gcc_cv_ld64_demangle=1
-+ if $gcc_cv_ld -demangle < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
-+ gcc_cv_ld64_demangle=0
-+ fi
-+ AC_MSG_RESULT($gcc_cv_ld64_demangle)
-+
- AC_MSG_CHECKING(linker for -export_dynamic support)
- gcc_cv_ld64_export_dynamic=1
- if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
-@@ -6329,6 +6366,9 @@ if test x"$ld64_flag" = x"yes"; then
- [Define to ld64 version.])
- fi
-
-+ AC_DEFINE_UNQUOTED(LD64_HAS_DEMANGLE, $gcc_cv_ld64_demangle,
-+ [Define to 1 if ld64 supports '-demangle'.])
-+
- AC_DEFINE_UNQUOTED(LD64_HAS_EXPORT_DYNAMIC, $gcc_cv_ld64_export_dynamic,
- [Define to 1 if ld64 supports '-export_dynamic'.])
-
-@@ -7479,11 +7519,14 @@ fi
- # Enable --enable-host-shared
- AC_ARG_ENABLE(host-shared,
- [AS_HELP_STRING([--enable-host-shared],
-- [build host code as shared libraries])],
--[PICFLAG=-fPIC], [PICFLAG=])
-+ [build host code as shared libraries])])
- AC_SUBST(enable_host_shared)
--AC_SUBST(PICFLAG)
-
-+# Enable --enable-host-pie
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])])
-+AC_SUBST(enable_host_pie)
-
- AC_ARG_ENABLE(libquadmath-support,
- [AS_HELP_STRING([--disable-libquadmath-support],
-@@ -7605,10 +7648,6 @@ AC_CACHE_CHECK([for -fno-PIE option],
- [gcc_cv_c_no_fpie=yes],
- [gcc_cv_c_no_fpie=no])
- CXXFLAGS="$saved_CXXFLAGS"])
--if test "$gcc_cv_c_no_fpie" = "yes"; then
-- NO_PIE_CFLAGS="-fno-PIE"
--fi
--AC_SUBST([NO_PIE_CFLAGS])
-
- # Check if -no-pie works.
- AC_CACHE_CHECK([for -no-pie option],
-@@ -7619,10 +7658,27 @@ AC_CACHE_CHECK([for -no-pie option],
- [gcc_cv_no_pie=yes],
- [gcc_cv_no_pie=no])
- LDFLAGS="$saved_LDFLAGS"])
--if test "$gcc_cv_no_pie" = "yes"; then
-- NO_PIE_FLAG="-no-pie"
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+elif test x$gcc_cv_c_no_fpie = xyes; then
-+ PICFLAG=-fno-PIE
-+else
-+ PICFLAG=
- fi
--AC_SUBST([NO_PIE_FLAG])
-+
-+if test x$enable_host_pie = xyes; then
-+ LD_PICFLAG=-pie
-+elif test x$gcc_cv_no_pie = xyes; then
-+ LD_PICFLAG=-no-pie
-+else
-+ LD_PICFLAG=
-+fi
-+
-+AC_SUBST([PICFLAG])
-+AC_SUBST([LD_PICFLAG])
-
- # Enable Intel CET on Intel CET enabled host if jit is enabled.
- GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
-diff --git a/gcc/coretypes.h b/gcc/coretypes.h
-index ca8837c..7e022a4 100644
---- a/gcc/coretypes.h
-+++ b/gcc/coretypes.h
-@@ -199,6 +199,12 @@ enum tls_model {
- TLS_MODEL_LOCAL_EXEC
- };
-
-+/* Types of trampoline implementation. */
-+enum trampoline_impl {
-+ TRAMPOLINE_IMPL_STACK,
-+ TRAMPOLINE_IMPL_HEAP
-+};
-+
- /* Types of ABI for an offload compiler. */
- enum offload_abi {
- OFFLOAD_ABI_UNSET,
-diff --git a/gcc/cp/cp-lang.cc b/gcc/cp/cp-lang.cc
-index 2f54146..84200a9 100644
---- a/gcc/cp/cp-lang.cc
-+++ b/gcc/cp/cp-lang.cc
-@@ -121,6 +121,15 @@ objcp_tsubst_copy_and_build (tree /*t*/,
- return NULL_TREE;
- }
-
-+/* Implement c-family hook to add language-specific features
-+ for __has_{feature,extension}. */
-+
-+void
-+c_family_register_lang_features ()
-+{
-+ cp_register_features ();
-+}
-+
- static const char *
- cxx_dwarf_name (tree t, int verbosity)
- {
-diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc
-index 93b027b..10b9b35 100644
---- a/gcc/cp/cp-objcp-common.cc
-+++ b/gcc/cp/cp-objcp-common.cc
-@@ -23,10 +23,153 @@ along with GCC; see the file COPYING3. If not see
- #include "coretypes.h"
- #include "cp-tree.h"
- #include "cp-objcp-common.h"
-+#include "c-family/c-common.h"
- #include "dwarf2.h"
- #include "stringpool.h"
- #include "contracts.h"
-
-+/* Class to determine whether a given C++ language feature is available.
-+ Used to implement __has_{feature,extension}. */
-+
-+struct cp_feature_selector
-+{
-+ enum
-+ {
-+ DIALECT,
-+ FLAG
-+ } kind;
-+
-+ enum class result
-+ {
-+ NONE,
-+ EXT,
-+ FEAT
-+ };
-+
-+ union
-+ {
-+ const int *enable_flag;
-+ struct {
-+ enum cxx_dialect feat;
-+ enum cxx_dialect ext;
-+ } dialect;
-+ };
-+
-+ constexpr cp_feature_selector (const int *flag)
-+ : kind (FLAG), enable_flag (flag) {}
-+ constexpr cp_feature_selector (enum cxx_dialect feat,
-+ enum cxx_dialect ext)
-+ : kind (DIALECT), dialect{feat, ext} {}
-+ constexpr cp_feature_selector (enum cxx_dialect feat)
-+ : cp_feature_selector (feat, feat) {}
-+
-+ inline result has_feature () const;
-+};
-+
-+/* Check whether this language feature is available as a feature,
-+ extension, or not at all. */
-+
-+cp_feature_selector::result
-+cp_feature_selector::has_feature () const
-+{
-+ switch (kind)
-+ {
-+ case DIALECT:
-+ if (cxx_dialect >= dialect.feat)
-+ return result::FEAT;
-+ else if (cxx_dialect >= dialect.ext)
-+ return result::EXT;
-+ else
-+ return result::NONE;
-+ case FLAG:
-+ return *enable_flag ? result::FEAT : result::NONE;
-+ }
-+
-+ gcc_unreachable ();
-+}
-+
-+/* Information about a C++ language feature which can be queried
-+ through __has_{feature,extension}. IDENT is the name of the feature,
-+ and SELECTOR encodes how to compute whether the feature is available. */
-+
-+struct cp_feature_info
-+{
-+ const char *ident;
-+ cp_feature_selector selector;
-+};
-+
-+/* Table of features for __has_{feature,extension}. */
-+
-+static constexpr cp_feature_info cp_feature_table[] =
-+{
-+ { "cxx_exceptions", &flag_exceptions },
-+ { "cxx_rtti", &flag_rtti },
-+ { "cxx_access_control_sfinae", { cxx11, cxx98 } },
-+ { "cxx_alias_templates", cxx11 },
-+ { "cxx_alignas", cxx11 },
-+ { "cxx_alignof", cxx11 },
-+ { "cxx_attributes", cxx11 },
-+ { "cxx_constexpr", cxx11 },
-+ { "cxx_decltype", cxx11 },
-+ { "cxx_decltype_incomplete_return_types", cxx11 },
-+ { "cxx_default_function_template_args", cxx11 },
-+ { "cxx_defaulted_functions", cxx11 },
-+ { "cxx_delegating_constructors", cxx11 },
-+ { "cxx_deleted_functions", cxx11 },
-+ { "cxx_explicit_conversions", cxx11 },
-+ { "cxx_generalized_initializers", cxx11 },
-+ { "cxx_implicit_moves", cxx11 },
-+ { "cxx_inheriting_constructors", cxx11 },
-+ { "cxx_inline_namespaces", { cxx11, cxx98 } },
-+ { "cxx_lambdas", cxx11 },
-+ { "cxx_local_type_template_args", cxx11 },
-+ { "cxx_noexcept", cxx11 },
-+ { "cxx_nonstatic_member_init", cxx11 },
-+ { "cxx_nullptr", cxx11 },
-+ { "cxx_override_control", cxx11 },
-+ { "cxx_reference_qualified_functions", cxx11 },
-+ { "cxx_range_for", cxx11 },
-+ { "cxx_raw_string_literals", cxx11 },
-+ { "cxx_rvalue_references", cxx11 },
-+ { "cxx_static_assert", cxx11 },
-+ { "cxx_thread_local", cxx11 },
-+ { "cxx_auto_type", cxx11 },
-+ { "cxx_strong_enums", cxx11 },
-+ { "cxx_trailing_return", cxx11 },
-+ { "cxx_unicode_literals", cxx11 },
-+ { "cxx_unrestricted_unions", cxx11 },
-+ { "cxx_user_literals", cxx11 },
-+ { "cxx_variadic_templates", { cxx11, cxx98 } },
-+ { "cxx_binary_literals", { cxx14, cxx98 } },
-+ { "cxx_contextual_conversions", { cxx14, cxx98 } },
-+ { "cxx_decltype_auto", cxx14 },
-+ { "cxx_aggregate_nsdmi", cxx14 },
-+ { "cxx_init_captures", { cxx14, cxx11 } },
-+ { "cxx_generic_lambdas", cxx14 },
-+ { "cxx_relaxed_constexpr", cxx14 },
-+ { "cxx_return_type_deduction", cxx14 },
-+ { "cxx_variable_templates", cxx14 },
-+ { "modules", &flag_modules },
-+};
-+
-+/* Register C++ language features for __has_{feature,extension}. */
-+
-+void
-+cp_register_features ()
-+{
-+ using result = cp_feature_selector::result;
-+
-+ for (unsigned i = 0; i < ARRAY_SIZE (cp_feature_table); i++)
-+ {
-+ const cp_feature_info *info = cp_feature_table + i;
-+ const auto res = info->selector.has_feature ();
-+ if (res == result::NONE)
-+ continue;
-+
-+ c_common_register_feature (info->ident, res == result::FEAT);
-+ }
-+}
-+
- /* Special routine to get the alias set for C++. */
-
- alias_set_type
-diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h
-index 80893aa..9d4d873 100644
---- a/gcc/cp/cp-objcp-common.h
-+++ b/gcc/cp/cp-objcp-common.h
-@@ -34,6 +34,7 @@ extern tree cp_classtype_as_base (const_tree);
- extern tree cp_get_global_decls ();
- extern tree cp_pushdecl (tree);
- extern void cp_register_dumps (gcc::dump_manager *);
-+extern void cp_register_features ();
- extern bool cp_handle_option (size_t, const char *, HOST_WIDE_INT, int,
- location_t, const struct cl_option_handlers *);
- extern tree cxx_make_type_hook (tree_code);
-diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc
-index 36e1f2c..213e52c 100644
---- a/gcc/cp/decl2.cc
-+++ b/gcc/cp/decl2.cc
-@@ -3712,9 +3712,8 @@ get_tls_init_fn (tree var)
- if (!flag_extern_tls_init && DECL_EXTERNAL (var))
- return NULL_TREE;
-
-- /* If the variable is internal, or if we can't generate aliases,
-- call the local init function directly. */
-- if (!TREE_PUBLIC (var) || !TARGET_SUPPORTS_ALIASES)
-+ /* If the variable is internal call the local init function directly. */
-+ if (!TREE_PUBLIC (var))
- return get_local_tls_init_fn (DECL_SOURCE_LOCATION (var));
-
- tree sname = mangle_tls_init_fn (var);
-@@ -3877,6 +3876,25 @@ generate_tls_wrapper (tree fn)
- expand_or_defer_fn (finish_function (/*inline_p=*/false));
- }
-
-+/* A dummy init function to act as a weak placeholder for a (possibly non-
-+ existent) dynamic init. */
-+static void
-+generate_tls_dummy_init (tree fn)
-+{
-+ tree var = DECL_BEFRIENDING_CLASSES (fn);
-+ tree init_fn = get_tls_init_fn (var);
-+ /* If have no init fn, or it is non-weak, then we do not need to make a
-+ dummy. */
-+ if (!init_fn || !lookup_attribute ("weak", DECL_ATTRIBUTES (init_fn)))
-+ return;
-+ start_preparsed_function (init_fn, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED);
-+ tree body = begin_function_body ();
-+ declare_weak (init_fn);
-+ finish_return_stmt (NULL_TREE);
-+ finish_function_body (body);
-+ expand_or_defer_fn (finish_function (/*inline_p=*/false));
-+}
-+
- /* Start a global constructor or destructor function. */
-
- static tree
-@@ -4666,22 +4684,24 @@ handle_tls_init (void)
- finish_expr_stmt (cp_build_modify_expr (loc, guard, NOP_EXPR,
- boolean_true_node,
- tf_warning_or_error));
-+ auto_vec direct_calls;
- for (; vars; vars = TREE_CHAIN (vars))
- {
- tree var = TREE_VALUE (vars);
- tree init = TREE_PURPOSE (vars);
- one_static_initialization_or_destruction (/*initp=*/true, var, init);
-
-- /* Output init aliases even with -fno-extern-tls-init. */
-- if (TARGET_SUPPORTS_ALIASES && TREE_PUBLIC (var))
-+ /* Output inits even with -fno-extern-tls-init.
-+ We save the list here and output either an alias or a stub function
-+ below. */
-+ if (TREE_PUBLIC (var))
- {
-- tree single_init_fn = get_tls_init_fn (var);
-+ tree single_init_fn = get_tls_init_fn (var);
- if (single_init_fn == NULL_TREE)
- continue;
-- cgraph_node *alias
-- = cgraph_node::get_create (fn)->create_same_body_alias
-- (single_init_fn, fn);
-- gcc_assert (alias != NULL);
-+ if (single_init_fn == fn)
-+ continue;
-+ direct_calls.safe_push (single_init_fn);
- }
- }
-
-@@ -4689,6 +4709,30 @@ handle_tls_init (void)
- finish_if_stmt (if_stmt);
- finish_function_body (body);
- expand_or_defer_fn (finish_function (/*inline_p=*/false));
-+
-+ /* For each TLS var that we have an init function, we either emit an alias
-+ between that and the tls_init, or a stub function that just calls the
-+ tls_init. */
-+ while (!direct_calls.is_empty())
-+ {
-+ tree single_init_fn = direct_calls.pop ();
-+ if (TARGET_SUPPORTS_ALIASES)
-+ {
-+ cgraph_node *alias
-+ = cgraph_node::get_create (fn)->create_same_body_alias
-+ (single_init_fn, fn);
-+ gcc_assert (alias != NULL);
-+ }
-+ else
-+ {
-+ start_preparsed_function (single_init_fn, NULL_TREE, SF_PRE_PARSED);
-+ tree body = begin_function_body ();
-+ tree r = build_call_expr (fn, 0);
-+ finish_expr_stmt (r);
-+ finish_function_body (body);
-+ expand_or_defer_fn (finish_function (/*inline_p=*/false));
-+ }
-+ }
- }
-
- /* We're at the end of compilation, so generate any mangling aliases that
-@@ -5107,7 +5151,14 @@ c_parse_final_cleanups (void)
- }
-
- if (!DECL_INITIAL (decl) && decl_tls_wrapper_p (decl))
-- generate_tls_wrapper (decl);
-+ {
-+ generate_tls_wrapper (decl);
-+ /* The wrapper might have a weak reference to an init, we provide
-+ a dummy function to satisfy that here. The linker/dynamic
-+ loader will override this with the actual init, if one is
-+ required. */
-+ generate_tls_dummy_init (decl);
-+ }
-
- if (!DECL_SAVED_TREE (decl))
- continue;
-diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
-index 4e67da6..1f1b762 100644
---- a/gcc/cp/parser.cc
-+++ b/gcc/cp/parser.cc
-@@ -694,6 +694,91 @@ cp_lexer_handle_early_pragma (cp_lexer *lexer)
- static cp_parser *cp_parser_new (cp_lexer *);
- static GTY (()) cp_parser *the_parser;
-
-+/* Context-sensitive parse-checking for clang-style attributes. */
-+
-+enum clang_attr_state {
-+ CA_NONE = 0,
-+ CA_ATTR,
-+ CA_BR1, CA_BR2,
-+ CA_LIST,
-+ CA_LIST_ARGS,
-+ CA_IS_CA,
-+ CA_CA_ARGS,
-+ CA_LIST_CONT
-+};
-+
-+/* State machine tracking context of attribute lexing. */
-+
-+static enum clang_attr_state
-+cp_lexer_attribute_state (cp_token& token, enum clang_attr_state attr_state)
-+{
-+ /* Implement a context-sensitive parser for clang attributes.
-+ We detect __attribute__((clang_style_attribute (ARGS))) and lex the
-+ args ARGS with the following differences from GNU attributes:
-+ (a) number-like values are lexed as strings [this allows lexing XX.YY.ZZ
-+ version numbers].
-+ (b) we concatenate strings, since clang attributes allow this too. */
-+ switch (attr_state)
-+ {
-+ case CA_NONE:
-+ if (token.type == CPP_KEYWORD
-+ && token.keyword == RID_ATTRIBUTE)
-+ attr_state = CA_ATTR;
-+ break;
-+ case CA_ATTR:
-+ if (token.type == CPP_OPEN_PAREN)
-+ attr_state = CA_BR1;
-+ else
-+ attr_state = CA_NONE;
-+ break;
-+ case CA_BR1:
-+ if (token.type == CPP_OPEN_PAREN)
-+ attr_state = CA_BR2;
-+ else
-+ attr_state = CA_NONE;
-+ break;
-+ case CA_BR2:
-+ if (token.type == CPP_NAME)
-+ {
-+ tree identifier = (token.type == CPP_KEYWORD)
-+ /* For keywords, use the canonical spelling, not the
-+ parsed identifier. */
-+ ? ridpointers[(int) token.keyword]
-+ : token.u.value;
-+ identifier = canonicalize_attr_name (identifier);
-+ if (attribute_clang_form_p (identifier))
-+ attr_state = CA_IS_CA;
-+ else
-+ attr_state = CA_LIST;
-+ }
-+ else
-+ attr_state = CA_NONE;
-+ break;
-+ case CA_IS_CA:
-+ case CA_LIST:
-+ if (token.type == CPP_COMMA)
-+ attr_state = CA_BR2; /* Back to the list outer. */
-+ else if (token.type == CPP_OPEN_PAREN)
-+ attr_state = attr_state == CA_IS_CA ? CA_CA_ARGS
-+ : CA_LIST_ARGS;
-+ else
-+ attr_state = CA_NONE;
-+ break;
-+ case CA_CA_ARGS: /* We will special-case args in this state. */
-+ case CA_LIST_ARGS:
-+ if (token.type == CPP_CLOSE_PAREN)
-+ attr_state = CA_LIST_CONT;
-+ break;
-+ case CA_LIST_CONT:
-+ if (token.type == CPP_COMMA)
-+ attr_state = CA_BR2; /* Back to the list outer. */
-+ else
-+ attr_state = CA_NONE;
-+ break;
-+ }
-+ return attr_state;
-+}
-+
- /* Create a new main C++ lexer, the lexer that gets tokens from the
- preprocessor, and also create the main parser. */
-
-@@ -710,6 +795,8 @@ cp_lexer_new_main (void)
- c_common_no_more_pch ();
-
- cp_lexer *lexer = cp_lexer_alloc ();
-+ enum clang_attr_state attr_state = CA_NONE;
-+
- /* Put the first token in the buffer. */
- cp_token *tok = lexer->buffer->quick_push (token);
-
-@@ -733,8 +820,14 @@ cp_lexer_new_main (void)
- if (tok->type == CPP_PRAGMA_EOL)
- cp_lexer_handle_early_pragma (lexer);
-
-+ attr_state = cp_lexer_attribute_state (*tok, attr_state);
- tok = vec_safe_push (lexer->buffer, cp_token ());
-- cp_lexer_get_preprocessor_token (C_LEX_STRING_NO_JOIN, tok);
-+ unsigned int flags = C_LEX_STRING_NO_JOIN;
-+ /* If we are processing clang-style attribute args, lex numbers as
-+ potential version strings; NN .. NN.MM .. NN.MM.OO */
-+ if (attr_state == CA_CA_ARGS)
-+ flags |= C_LEX_NUMBER_AS_STRING;
-+ cp_lexer_get_preprocessor_token (flags, tok);
- }
-
- lexer->next_token = lexer->buffer->address ();
-@@ -936,7 +1029,7 @@ cp_lexer_get_preprocessor_token (unsigned flags, cp_token *token)
- {
- static int is_extern_c = 0;
-
-- /* Get a new token from the preprocessor. */
-+ /* Get a new token from the preprocessor. */
- token->type
- = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
- flags);
-@@ -20992,11 +21085,13 @@ cp_parser_enum_specifier (cp_parser* parser)
-
- /* Check for the `:' that denotes a specified underlying type in C++0x.
- Note that a ':' could also indicate a bitfield width, however. */
-+ location_t colon_loc = UNKNOWN_LOCATION;
- if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
- {
- cp_decl_specifier_seq type_specifiers;
-
- /* Consume the `:'. */
-+ colon_loc = cp_lexer_peek_token (parser->lexer)->location;
- cp_lexer_consume_token (parser->lexer);
-
- auto tdf
-@@ -21045,10 +21140,13 @@ cp_parser_enum_specifier (cp_parser* parser)
- && cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
- {
- if (has_underlying_type)
-- cp_parser_commit_to_tentative_parse (parser);
-- cp_parser_error (parser, "expected %<;%> or %<{%>");
-- if (has_underlying_type)
-- return error_mark_node;
-+ pedwarn (colon_loc,
-+ OPT_Welaborated_enum_base,
-+ "declaration of enumeration with "
-+ "fixed underlying type and no enumerator list is "
-+ "only permitted as a standalone declaration");
-+ else
-+ cp_parser_error (parser, "expected %<;%> or %<{%>");
- }
- }
-
-@@ -29051,6 +29149,91 @@ cp_parser_gnu_attributes_opt (cp_parser* parser)
- return attributes;
- }
-
-+/* Parse the arguments list for a clang attribute. */
-+static tree
-+cp_parser_clang_attribute (cp_parser *parser, tree/*attr_id*/)
-+{
-+ /* Each entry can be :
-+ identifier
-+ identifier=N.MM.Z
-+ identifier="string"
-+ followed by ',' or ) for the last entry*/
-+
-+ matching_parens parens;
-+ if (!parens.require_open (parser))
-+ return NULL;
-+
-+ bool save_translate_strings_p = parser->translate_strings_p;
-+ parser->translate_strings_p = false;
-+ tree attr_args = NULL_TREE;
-+ cp_token *token;
-+ do
-+ {
-+ tree name = NULL_TREE;
-+ tree value = NULL_TREE;
-+
-+ token = cp_lexer_peek_token (parser->lexer);
-+ if (token->type == CPP_NAME)
-+ name = token->u.value;
-+ else if (token->type == CPP_KEYWORD)
-+ name = ridpointers[(int) token->keyword];
-+ else if (token->flags & NAMED_OP)
-+ name = get_identifier (cpp_type2name (token->type, token->flags));
-+ else
-+ {
-+ /* FIXME: context-sensitive for that attrib. */
-+ error_at (token->location, "expected an attribute keyword");
-+ cp_parser_skip_to_closing_parenthesis (parser,
-+ /*recovering=*/true,
-+ /*or_comma=*/false,
-+ /*consume_paren=*/false);
-+ attr_args = error_mark_node;
-+ break;
-+ }
-+ cp_lexer_consume_token (parser->lexer);
-+
-+ if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
-+ {
-+ cp_lexer_consume_token (parser->lexer); /* eat the '=' */
-+ if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
-+ && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
-+ {
-+ token = cp_lexer_peek_token (parser->lexer);
-+ if (token->type == CPP_STRING)
-+ value = cp_parser_string_literal (parser, /*translate=*/false,
-+ /*wide_ok=*/false);
-+ else
-+ {
-+ value = token->u.value;
-+ cp_lexer_consume_token (parser->lexer);
-+ }
-+ }
-+ /* else value is missing. */
-+ }
-+ else if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
-+ && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
-+ {
-+ error_at (token->location, "expected %<,%>, %<=%> or %<)%>");
-+ cp_parser_skip_to_closing_parenthesis (parser,
-+ /*recovering=*/true,
-+ /*or_comma=*/false,
-+ /*consume_paren=*/false);
-+ attr_args = error_mark_node;
-+ break;
-+ }
-+ if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
-+ cp_lexer_consume_token (parser->lexer);
-+ tree t = tree_cons (value, name, NULL_TREE);
-+ attr_args = chainon (attr_args, t);
-+ } while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN));
-+
-+ parser->translate_strings_p = save_translate_strings_p;
-+ if (!parens.require_close (parser))
-+ return error_mark_node;
-+
-+ return attr_args;
-+}
-+
- /* Parse a GNU attribute-list.
-
- attribute-list:
-@@ -29110,9 +29293,12 @@ cp_parser_gnu_attribute_list (cp_parser* parser, bool exactly_one /* = false */)
-
- /* Peek at the next token. */
- token = cp_lexer_peek_token (parser->lexer);
-- /* If it's an `(', then parse the attribute arguments. */
-- if (token->type == CPP_OPEN_PAREN)
-+ if (token->type == CPP_OPEN_PAREN
-+ && attribute_clang_form_p (identifier))
-+ arguments = cp_parser_clang_attribute (parser, identifier);
-+ else if (token->type == CPP_OPEN_PAREN)
- {
-+ /* If it's an `(', then parse the attribute arguments. */
- vec *vec;
- int attr_flag = (attribute_takes_identifier_p (identifier)
- ? id_attr : normal_attr);
-@@ -29129,12 +29315,12 @@ cp_parser_gnu_attribute_list (cp_parser* parser, bool exactly_one /* = false */)
- arguments = build_tree_list_vec (vec);
- release_tree_vector (vec);
- }
-- /* Save the arguments away. */
-- TREE_VALUE (attribute) = arguments;
- }
-
- if (arguments != error_mark_node)
- {
-+ /* Save the arguments away. */
-+ TREE_VALUE (attribute) = arguments;
- /* Add this attribute to the list. */
- TREE_CHAIN (attribute) = attribute_list;
- attribute_list = attribute;
-diff --git b/gcc/cumulative-args.h b/gcc/cumulative-args.h
-new file mode 100644
-index 0000000..b60928e
---- /dev/null
-+++ b/gcc/cumulative-args.h
-@@ -0,0 +1,20 @@
-+#ifndef GCC_CUMULATIVE_ARGS_H
-+#define GCC_CUMULATIVE_ARGS_H
-+
-+#if CHECKING_P
-+
-+struct cumulative_args_t { void *magic; void *p; };
-+
-+#else /* !CHECKING_P */
-+
-+/* When using a GCC build compiler, we could use
-+ __attribute__((transparent_union)) to get cumulative_args_t function
-+ arguments passed like scalars where the ABI would mandate a less
-+ efficient way of argument passing otherwise. However, that would come
-+ at the cost of less type-safe !CHECKING_P compilation. */
-+
-+union cumulative_args_t { void *p; };
-+
-+#endif /* !CHECKING_P */
-+
-+#endif /* GCC_CUMULATIVE_ARGS_H */
-diff --git a/gcc/d/Make-lang.in b/gcc/d/Make-lang.in
-index 1679fb8..4fbf209 100644
---- a/gcc/d/Make-lang.in
-+++ b/gcc/d/Make-lang.in
-@@ -64,7 +64,7 @@ ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -fversion=IN_GCC $(CHECKING_DFLAGS) \
- $(PICFLAG) $(ALIASING_FLAGS) $(NOEXCEPTION_DFLAGS) $(COVERAGE_FLAGS) \
- $(WARN_DFLAGS)
-
--DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@
-+DCOMPILE.base = $(GDC) -c $(ALL_DFLAGS) -o $@
- DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
- DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
- DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++
-diff --git a/gcc/doc/contrib.texi b/gcc/doc/contrib.texi
-index 758805d..f8f002c 100644
---- a/gcc/doc/contrib.texi
-+++ b/gcc/doc/contrib.texi
-@@ -1515,7 +1515,7 @@ Gael Thomas for @code{VMClassLoader} boot packages support suggestions.
-
- @item
- Andreas Tobler for Darwin and Solaris testing and fixing, @code{Qt4}
--support for Darwin/OS X, @code{Graphics2D} support, @code{gtk+}
-+support for Darwin / macOS, @code{Graphics2D} support, @code{gtk+}
- updates.
-
- @item
-diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
-index b0a2ce3..f57278d 100644
---- a/gcc/doc/cpp.texi
-+++ b/gcc/doc/cpp.texi
-@@ -3198,6 +3198,8 @@ directive}: @samp{#if}, @samp{#ifdef} or @samp{#ifndef}.
- * @code{__has_cpp_attribute}::
- * @code{__has_c_attribute}::
- * @code{__has_builtin}::
-+* @code{__has_feature}::
-+* @code{__has_extension}::
- * @code{__has_include}::
- @end menu
-
-@@ -3560,6 +3562,45 @@ the operator is as follows:
- #endif
- @end smallexample
-
-+@node @code{__has_feature}
-+@subsection @code{__has_feature}
-+@cindex @code{__has_feature}
-+
-+The special operator @code{__has_feature (@var{operand})} may be used in
-+constant integer contexts and in preprocessor @samp{#if} and @samp{#elif}
-+expressions to test whether the identifier given in @var{operand} is recognized
-+as a feature supported by GCC given the current options and, in the case of
-+standard language features, whether the feature is available in the chosen
-+version of the language standard.
-+
-+Note that @code{__has_feature} and @code{__has_extension} are not recommended
-+for use in new code, and are only provided for compatibility with Clang. For
-+details of which identifiers are accepted by these function-like macros, see
-+@w{@uref{https://clang.llvm.org/docs/LanguageExtensions.html#has-feature-and-has-extension,
-+the Clang documentation}}.
-+
-+@node @code{__has_extension}
-+@subsection @code{__has_extension}
-+@cindex @code{__has_extension}
-+
-+The special operator @code{__has_extension (@var{operand})} may be used in
-+constant integer contexts and in preprocessor @samp{#if} and @samp{#elif}
-+expressions to test whether the identifier given in @var{operand} is recognized
-+as an extension supported by GCC given the current options. In any given
-+context, the features accepted by @code{__has_extension} are a strict superset
-+of those accepted by @code{__has_feature}. Unlike @code{__has_feature},
-+@code{__has_extension} tests whether a given feature is available regardless of
-+strict language standards conformance.
-+
-+If the @option{-pedantic-errors} flag is given, @code{__has_extension} is
-+equivalent to @code{__has_feature}.
-+
-+Note that @code{__has_feature} and @code{__has_extension} are not recommended
-+for use in new code, and are only provided for compatibility with Clang. For
-+details of which identifiers are accepted by these function-like macros, see
-+@w{@uref{https://clang.llvm.org/docs/LanguageExtensions.html#has-feature-and-has-extension,
-+the Clang documentation}}.
-+
- @node @code{__has_include}
- @subsection @code{__has_include}
- @cindex @code{__has_include}
-diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
-index d6fcd61..a163750 100644
---- a/gcc/doc/extend.texi
-+++ b/gcc/doc/extend.texi
-@@ -23797,7 +23797,7 @@ attribute, do change the value of preprocessor macros like
-
- The following pragmas are available for all architectures running the
- Darwin operating system. These are useful for compatibility with other
--Mac OS compilers.
-+macOS compilers.
-
- @table @code
- @cindex pragma, mark
-@@ -24976,7 +24976,7 @@ compiled separately.
- @end table
-
- G++ implements the Borland model on targets where the linker supports it,
--including ELF targets (such as GNU/Linux), Mac OS X and Microsoft Windows.
-+including ELF targets (such as GNU/Linux), macOS and Microsoft Windows.
- Otherwise G++ implements neither automatic model.
-
- You have the following options for dealing with template instantiations:
-diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
-index b30d369..de05d1c 100644
---- a/gcc/doc/install.texi
-+++ b/gcc/doc/install.texi
-@@ -1075,14 +1075,26 @@ code.
-
- @item --enable-host-shared
- Specify that the @emph{host} code should be built into position-independent
--machine code (with -fPIC), allowing it to be used within shared libraries,
--but yielding a slightly slower compiler.
-+machine code (with @option{-fPIC}), allowing it to be used within shared
-+libraries, but yielding a slightly slower compiler.
-
- This option is required when building the libgccjit.so library.
-
- Contrast with @option{--enable-shared}, which affects @emph{target}
- libraries.
-
-+@item --enable-host-pie
-+Specify that the @emph{host} executables should be built into
-+position-independent executables (with @option{-fPIE} and @option{-pie}),
-+yielding a slightly slower compiler (but faster than
-+@option{--enable-host-shared}). Position-independent executables are loaded
-+at random addresses each time they are executed, therefore provide additional
-+protection against Return Oriented Programming (ROP) attacks.
-+
-+@option{--enable-host-pie}) may be used with @option{--enable-host-shared}),
-+in which case @option{-fPIC} is used when compiling, and @option{-pie} when
-+linking.
-+
- @item @anchor{with-gnu-as}--with-gnu-as
- Specify that the compiler should assume that the
- assembler it finds is the GNU assembler. However, this does not modify
-@@ -1790,6 +1802,12 @@ particularly useful if you intend to use several versions of GCC in
- parallel. The default is @samp{yes} for @samp{libada}, and @samp{no} for
- the remaining libraries.
-
-+@item --with-darwin-extra-rpath
-+This is provided to allow distributions to add a single additional
-+runpath on Darwin / macOS systems. This allows for cases where the
-+installed GCC library directories are then symlinked to a common
-+directory outside of the GCC installation.
-+
- @item @anchor{WithAixSoname}--with-aix-soname=@samp{aix}, @samp{svr4} or @samp{both}
- Traditional AIX shared library versioning (versioned @code{Shared Object}
- files as members of unversioned @code{Archive Library} files named
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index 792ce28..cedffc5 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -254,7 +254,8 @@ in the following sections.
- -Wdelete-non-virtual-dtor -Wno-deprecated-array-compare
- -Wdeprecated-copy -Wdeprecated-copy-dtor
- -Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion
---Weffc++ -Wno-exceptions -Wextra-semi -Wno-inaccessible-base
-+-Weffc++ -Wno-elaborated-enum-base
-+-Wno-exceptions -Wextra-semi -Wno-inaccessible-base
- -Wno-inherited-variadic-ctor -Wno-init-list-lifetime
- -Winvalid-constexpr -Winvalid-imported-macros
- -Wno-invalid-offsetof -Wno-literal-suffix
-@@ -706,8 +707,9 @@ Objective-C and Objective-C++ Dialects}.
- -freg-struct-return -fshort-enums -fshort-wchar
- -fverbose-asm -fpack-struct[=@var{n}]
- -fleading-underscore -ftls-model=@var{model}
---fstack-reuse=@var{reuse_level}
---ftrampolines -ftrapv -fwrapv
-+-fstack-reuse=@var{reuse_level} -fstack-use-cumulative-args
-+-ftrampolines -ftrampoline-impl=@r{[}stack@r{|}heap@r{]}
-+-ftrapv -fwrapv
- -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]}
- -fstrict-volatile-bitfields -fsync-libcalls}
-
-@@ -914,7 +916,7 @@ Objective-C and Objective-C++ Dialects}.
- -iframework
- -image_base -init -install_name -keep_private_externs
- -multi_module -multiply_defined -multiply_defined_unused
---noall_load -no_dead_strip_inits_and_terms
-+-noall_load -no_dead_strip_inits_and_terms -nodefaultrpaths
- -nofixprebinding -nomultidefs -noprebind -noseglinkedit
- -pagezero_size -prebind -prebind_all_twolevel_modules
- -private_bundle -read_only_relocs -sectalign
-@@ -927,7 +929,7 @@ Objective-C and Objective-C++ Dialects}.
- -twolevel_namespace -umbrella -undefined
- -unexported_symbols_list -weak_reference_mismatches
- -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version}
---mkernel -mone-byte-bool}
-+-mkernel -mone-byte-bool -munreachable-traps}
-
- @emph{DEC Alpha Options}
- @gccoptlist{-mno-fp-regs -msoft-float
-@@ -3839,6 +3841,15 @@ bool b = e <= 3.7;
- @option{-std=c++20}. In pre-C++20 dialects, this warning can be enabled
- by @option{-Wenum-conversion}.
-
-+@opindex Welaborated-enum-base
-+@opindex Wno-elaborated-enum-base
-+@item -Wno-elaborated-enum-base
-+For C++11 and above, warn if an (invalid) additional enum-base is used
-+in an elaborated-type-specifier. That is, if an enum with given
-+underlying type and no enumerator list is used in a declaration other
-+than just a standalone declaration of the enum. Enabled by default. This
-+warning is upgraded to an error with -pedantic-errors.
-+
- @opindex Winit-list-lifetime
- @opindex Wno-init-list-lifetime
- @item -Wno-init-list-lifetime @r{(C++ and Objective-C++ only)}
-@@ -4802,7 +4813,7 @@ Use @var{class-name} as the name of the class to instantiate for each
- literal string specified with the syntax @code{@@"@dots{}"}. The default
- class name is @code{NXConstantString} if the GNU runtime is being used, and
- @code{NSConstantString} if the NeXT runtime is being used (see below). On
--Darwin (macOS, MacOS X) platforms, the @option{-fconstant-cfstrings} option, if
-+Darwin / macOS platforms, the @option{-fconstant-cfstrings} option, if
- also present, overrides the @option{-fconstant-string-class} setting and cause
- @code{@@"@dots{}"} literals to be laid out as constant CoreFoundation strings.
- Note that @option{-fconstant-cfstrings} is an alias for the target-specific
-@@ -4816,7 +4827,7 @@ runtime. This is the default for most types of systems.
- @opindex fnext-runtime
- @item -fnext-runtime
- Generate output compatible with the NeXT runtime. This is the default
--for NeXT-based systems, including Darwin and Mac OS X@. The macro
-+for NeXT-based systems, including Darwin / macOS. The macro
- @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
- used.
-
-@@ -6031,8 +6042,45 @@ Give an error whenever the @dfn{base standard} (see @option{-Wpedantic})
- requires a diagnostic, in some cases where there is undefined behavior
- at compile-time and in some other cases that do not prevent compilation
- of programs that are valid according to the standard. This is not
--equivalent to @option{-Werror=pedantic}, since there are errors enabled
--by this option and not enabled by the latter and vice versa.
-+equivalent to @option{-Werror=pedantic}: the latter option is unlikely to be
-+useful, as it only makes errors of the diagnostics that are controlled by
-+@option{-Wpedantic}, whereas this option also affects required diagnostics that
-+are always enabled or controlled by options other than @option{-Wpedantic}.
-+
-+If you want the required diagnostics that are warnings by default to
-+be errors instead, but don't also want to enable the @option{-Wpedantic}
-+diagnostics, you can specify @option{-pedantic-errors -Wno-pedantic}
-+(or @option{-pedantic-errors -Wno-error=pedantic} to enable them but
-+only as warnings).
-+
-+Some required diagnostics are errors by default, but can be reduced to
-+warnings using @option{-fpermissive} or their specific warning option,
-+e.g. @option{-Wno-error=narrowing}.
-+
-+Some diagnostics for non-ISO practices are controlled by specific
-+warning options other than @option{-Wpedantic}, but are also made
-+errors by @option{-pedantic-errors}. For instance:
-+
-+@gccoptlist{
-+-Wattributes @r{(for standard attributes)}
-+-Wchanges-meaning @r{(C++)}
-+-Wcomma-subscript @r{(C++23 or later)}
-+-Wdeclaration-after-statement @r{(C90 or earlier)}
-+-Welaborated-enum-base @r{(C++11 or later)}
-+-Wimplicit-int @r{(C99 or later)}
-+-Wimplicit-function-declaration @r{(C99 or later)}
-+-Wincompatible-pointer-types
-+-Wint-conversion
-+-Wlong-long @r{(C90 or earlier)}
-+-Wmain
-+-Wnarrowing @r{(C++11 or later)}
-+-Wpointer-arith
-+-Wpointer-sign
-+-Wincompatible-pointer-types
-+-Wregister @r{(C++17 or later)}
-+-Wvla @r{(C90 or earlier)}
-+-Wwrite-strings @r{(C++11 or later)}
-+}
-
- @opindex Wall
- @opindex Wno-all
-@@ -11285,7 +11333,7 @@ possible.
- Produce debugging information in DWARF format (if that is supported).
- The value of @var{version} may be either 2, 3, 4 or 5; the default
- version for most targets is 5 (with the exception of VxWorks, TPF and
--Darwin/Mac OS X, which default to version 2, and AIX, which defaults
-+Darwin / macOS, which default to version 2, and AIX, which defaults
- to version 4).
-
- Note that with DWARF Version 2, some ports require and always
-@@ -18167,6 +18215,17 @@ the behavior of older compilers in which temporaries' stack space is
- not reused, the aggressive stack reuse can lead to runtime errors. This
- option is used to control the temporary stack reuse optimization.
-
-+@opindex fstack_use_cumulative_args
-+@item -fstack-use-cumulative-args
-+This option instructs the compiler to use the
-+@code{cumulative_args_t}-based stack layout target hooks,
-+@code{TARGET_FUNCTION_ARG_BOUNDARY_CA} and
-+@code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY_CA}. If a given target does
-+not define these hooks, the default behaviour is to fallback to using
-+the standard non-@code{_CA} variants instead. Certain targets (such as
-+AArch64 Darwin) require using the more advanced @code{_CA}-based
-+hooks: For these targets this option should be enabled by default.
-+
- @opindex ftrapv
- @item -ftrapv
- This option generates traps for signed overflow on addition, subtraction,
-@@ -18652,6 +18711,20 @@ For languages other than Ada, the @code{-ftrampolines} and
- trampolines are always generated on platforms that need them
- for nested functions.
-
-+@opindex ftrampoline-impl
-+@item -ftrampoline-impl=@r{[}stack@r{|}heap@r{]}
-+By default, trampolines are generated on stack. However, certain platforms
-+(such as the Apple M1) do not permit an executable stack. Compiling with
-+@option{-ftrampoline-impl=heap} generate calls to
-+@code{__gcc_nested_func_ptr_created} and
-+@code{__gcc_nested_func_ptr_deleted} in order to allocate and
-+deallocate trampoline space on the executable heap. These functions are
-+implemented in libgcc, and will only be provided on specific targets:
-+x86_64 Darwin, x86_64 and aarch64 Linux. @emph{PLEASE NOTE}: Heap
-+trampolines are @emph{not} guaranteed to be correctly deallocated if you
-+@code{setjmp}, instantiate nested functions, and then @code{longjmp} back
-+to a state prior to having allocated those nested functions.
-+
- @opindex fvisibility
- @item -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]}
- Set the default ELF image symbol visibility to the specified option---all
-@@ -24024,6 +24097,11 @@ without that switch. Using this switch may require recompiling all
- other modules in a program, including system libraries. Use this
- switch to conform to a non-default data model.
-
-+@opindex munreachable-traps
-+@item -munreachable-traps
-+Causes @code{__builtin_unreachable} to be rendered as a trap. This is the
-+default for all Darwin architectures.
-+
- @opindex mfix-and-continue
- @opindex ffix-and-continue
- @opindex findirect-data
-@@ -24070,6 +24148,14 @@ an executable when linking, using the Darwin @file{libtool} command.
- This causes GCC's output file to have the @samp{ALL} subtype, instead of
- one controlled by the @option{-mcpu} or @option{-march} option.
-
-+@opindex nodefaultrpaths
-+@item -nodefaultrpaths
-+Do not add default run paths for the compiler library directories to
-+executables, modules or dynamic libraries. On macOS 10.5 and later,
-+the embedded runpath is added by default unless the user adds
-+@option{-nodefaultrpaths} to the link line. Run paths are needed
-+(and therefore enforced) to build on macOS version 10.11 or later.
-+
- @item -allowable_client @var{client_name}
- @itemx -client_name
- @itemx -compatibility_version
-@@ -29823,7 +29909,7 @@ the same as @option{-mbig}.
-
- @opindex mdynamic-no-pic
- @item -mdynamic-no-pic
--On Darwin and Mac OS X systems, compile code so that it is not
-+On Darwin / macOS systems, compile code so that it is not
- relocatable, but that its external references are relocatable. The
- resulting code is suitable for applications, but not shared
- libraries.
-diff --git a/gcc/doc/plugins.texi b/gcc/doc/plugins.texi
-index 26df8b4..f9a2318 100644
---- a/gcc/doc/plugins.texi
-+++ b/gcc/doc/plugins.texi
-@@ -44,7 +44,7 @@ Plugins are loaded with
-
- Where @var{name} is the plugin name and @var{ext} is the platform-specific
- dynamic library extension. It should be @code{dll} on Windows/MinGW,
--@code{dylib} on Darwin/Mac OS X, and @code{so} on all other platforms.
-+@code{dylib} on Darwin/macOS, and @code{so} on all other platforms.
- The plugin arguments are parsed by GCC and passed to respective
- plugins as key-value pairs. Multiple plugins can be invoked by
- specifying multiple @option{-fplugin} arguments.
-diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
-index a660e33..1080f85 100644
---- a/gcc/doc/tm.texi
-+++ b/gcc/doc/tm.texi
-@@ -1042,6 +1042,10 @@ also define the hook to @code{default_promote_function_mode_always_promote}
- if you would like to apply the same rules given by @code{PROMOTE_MODE}.
- @end deftypefn
-
-+@deftypefn {Target Hook} machine_mode TARGET_PROMOTE_FUNCTION_MODE_CA (cumulative_args_t, @var{function_arg_info}, @var{const_tree}, int *@var{}, @var{int})
-+Like @code{promote_function_mode}, but takes a cumulative_args pointer and a current arg to supply the input.
-+@end deftypefn
-+
- @defmac PARM_BOUNDARY
- Normal alignment required for function parameters on the stack, in
- bits. All stack parameters receive at least this much alignment
-@@ -4354,6 +4358,16 @@ with the specified mode and type. The default hook returns
- @code{PARM_BOUNDARY} for all arguments.
- @end deftypefn
-
-+@deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_BOUNDARY_CA (machine_mode @var{mode}, const_tree @var{type}, cumulative_args_t @var{ca})
-+This is the @code{cumulative_args_t}-based version of
-+@code{TARGET_FUNCTION_ARG_BOUNDARY}. Define this hook if you need more
-+fine-grained control over argument alignment, e.g. depending on whether
-+it is a named argument or not, or any other criteria that you choose to
-+place in the @var{ca} structure.
-+
-+The default hook will call @code{TARGET_FUNCTION_ARG_BOUNDARY}.
-+@end deftypefn
-+
- @deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_ROUND_BOUNDARY (machine_mode @var{mode}, const_tree @var{type})
- Normally, the size of an argument is rounded up to @code{PARM_BOUNDARY},
- which is the default value for this hook. You can define this hook to
-@@ -4361,6 +4375,16 @@ return a different value if an argument size must be rounded to a larger
- value.
- @end deftypefn
-
-+@deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_ROUND_BOUNDARY_CA (machine_mode @var{mode}, const_tree @var{type}, cumulative_args_t @var{ca})
-+This is the @code{cumulative_args_t}-based version of
-+@code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}. Define this hook if you need more
-+fine-grained control over argument size rounding, e.g. depending on whether
-+it is a named argument or not, or any other criteria that you choose to
-+place in the @var{ca} structure.
-+
-+The default hook will call @code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}.
-+@end deftypefn
-+
- @defmac FUNCTION_ARG_REGNO_P (@var{regno})
- A C expression that is nonzero if @var{regno} is the number of a hard
- register in which function arguments are sometimes passed. This does
-@@ -5764,7 +5788,7 @@ This hook determines whether a function from a class of functions
- Set this macro to 1 to use the "NeXT" Objective-C message sending conventions
- by default. This calling convention involves passing the object, the selector
- and the method arguments all at once to the method-lookup library function.
--This is the usual setting when targeting Darwin/Mac OS X systems, which have
-+This is the usual setting when targeting Darwin / macOS systems, which have
- the NeXT runtime installed.
-
- If the macro is set to 0, the "GNU" Objective-C message sending convention
-@@ -12365,6 +12389,11 @@ This target hook can be used to generate a target-specific code
- If selftests are enabled, run any selftests for this target.
- @end deftypefn
-
-+@deftypefn {Target Hook} bool TARGET_UNREACHABLE_SHOULD_TRAP (void)
-+This hook should return @code{true} if the target wants @code{__builtin_unreachable} to expand to a trap or @code{abort ()}.
-+ The default value is false.
-+@end deftypefn
-+
- @deftypefn {Target Hook} bool TARGET_MEMTAG_CAN_TAG_ADDRESSES ()
- True if the backend architecture naturally supports ignoring some region
- of pointers. This feature means that @option{-fsanitize=hwaddress} can
-diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
-index f7ab5d4..7f82c02 100644
---- a/gcc/doc/tm.texi.in
-+++ b/gcc/doc/tm.texi.in
-@@ -938,6 +938,8 @@ applied.
-
- @hook TARGET_PROMOTE_FUNCTION_MODE
-
-+@hook TARGET_PROMOTE_FUNCTION_MODE_CA
-+
- @defmac PARM_BOUNDARY
- Normal alignment required for function parameters on the stack, in
- bits. All stack parameters receive at least this much alignment
-@@ -3341,8 +3343,12 @@ required.
-
- @hook TARGET_FUNCTION_ARG_BOUNDARY
-
-+@hook TARGET_FUNCTION_ARG_BOUNDARY_CA
-+
- @hook TARGET_FUNCTION_ARG_ROUND_BOUNDARY
-
-+@hook TARGET_FUNCTION_ARG_ROUND_BOUNDARY_CA
-+
- @defmac FUNCTION_ARG_REGNO_P (@var{regno})
- A C expression that is nonzero if @var{regno} is the number of a hard
- register in which function arguments are sometimes passed. This does
-@@ -4008,7 +4014,7 @@ macro, a reasonable default is used.
- Set this macro to 1 to use the "NeXT" Objective-C message sending conventions
- by default. This calling convention involves passing the object, the selector
- and the method arguments all at once to the method-lookup library function.
--This is the usual setting when targeting Darwin/Mac OS X systems, which have
-+This is the usual setting when targeting Darwin / macOS systems, which have
- the NeXT runtime installed.
-
- If the macro is set to 0, the "GNU" Objective-C message sending convention
-@@ -7965,6 +7971,8 @@ maintainer is familiar with.
-
- @hook TARGET_RUN_TARGET_SELFTESTS
-
-+@hook TARGET_UNREACHABLE_SHOULD_TRAP
-+
- @hook TARGET_MEMTAG_CAN_TAG_ADDRESSES
-
- @hook TARGET_MEMTAG_TAG_SIZE
-diff --git a/gcc/exec-tool.in b/gcc/exec-tool.in
-index bddf46a..a9120f3 100644
---- a/gcc/exec-tool.in
-+++ b/gcc/exec-tool.in
-@@ -23,6 +23,8 @@ ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@"
- ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@"
- ORIGINAL_LD_BFD_FOR_TARGET="@ORIGINAL_LD_BFD_FOR_TARGET@"
- ORIGINAL_LD_GOLD_FOR_TARGET="@ORIGINAL_LD_GOLD_FOR_TARGET@"
-+ORIGINAL_LLD_FOR_TARGET="@ORIGINAL_LLD_FOR_TARGET@"
-+ORIGINAL_CLASSIC_LD_FOR_TARGET="@ORIGINAL_CLASSIC_LD_FOR_TARGET@"
- ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@"
- ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@"
- ORIGINAL_DSYMUTIL_FOR_TARGET="@ORIGINAL_DSYMUTIL_FOR_TARGET@"
-@@ -39,24 +41,41 @@ case "$invoked" in
- dir=gas
- ;;
- collect-ld)
-- # Check -fuse-ld=bfd and -fuse-ld=gold
-- case " $* " in
-- *\ -fuse-ld=bfd\ *)
-- original=$ORIGINAL_LD_BFD_FOR_TARGET
-- ;;
-- *\ -fuse-ld=gold\ *)
-- original=$ORIGINAL_LD_GOLD_FOR_TARGET
-- ;;
-- *)
-- # when using a linker plugin, gcc will always pass '-plugin' as the
-- # first or second option to the linker.
-- if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then
-- original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
-- else
-- original=$ORIGINAL_LD_FOR_TARGET
-- fi
-- ;;
-- esac
-+ # when using a linker plugin, gcc will always pass '-plugin' as the
-+ # first or second option to the linker.
-+ if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then
-+ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
-+ else
-+ original=$ORIGINAL_LD_FOR_TARGET
-+ fi
-+ # Check -fuse-ld=bfd, -fuse-ld=gold and -fuse-ld=classic
-+ # Remove -fuse-ld=classic from the command line
-+ for arg do
-+ # temporarily, remove the arg.
-+ shift
-+ case $arg in
-+ -fuse-ld=bfd)
-+ original=$ORIGINAL_LD_BFD_FOR_TARGET
-+ ;;
-+ -fuse-ld=gold)
-+ original=$ORIGINAL_LD_GOLD_FOR_TARGET
-+ ;;
-+ -fuse-ld=lld)
-+ original=$ORIGINAL_LLD_FOR_TARGET
-+ # We want to remove this from the command line; by the slightly
-+ # obtuse mechanism of not putting it back.
-+ continue
-+ ;;
-+ -fuse-ld=classic)
-+ original=$ORIGINAL_CLASSIC_LD_FOR_TARGET
-+ # As for lld.
-+ continue
-+ ;;
-+ *) ;;
-+ esac
-+ # if we want to keep the arg, put it back.
-+ set -- "$@" "$arg"
-+ done
- prog=ld-new$exeext
- if test "$original" = ../gold/ld-new$exeext; then
- dir=gold
-diff --git a/gcc/explow.cc b/gcc/explow.cc
-index 6424c08..7c2973a 100644
---- a/gcc/explow.cc
-+++ b/gcc/explow.cc
-@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see
- #include "langhooks.h"
- #include "except.h"
- #include "dojump.h"
-+#include "calls.h"
- #include "explow.h"
- #include "expr.h"
- #include "stringpool.h"
-@@ -817,6 +818,16 @@ promote_function_mode (const_tree type, machine_mode mode, int *punsignedp,
- return mode;
- }
- }
-+
-+machine_mode
-+promote_function_mode (cumulative_args_t args_so_far, function_arg_info arg,
-+ const_tree funtype, int *punsignedp , int for_return)
-+{
-+ return targetm.calls.promote_function_mode_ca (args_so_far, arg, funtype,
-+ punsignedp, for_return);
-+// return promote_function_mode (arg.type, arg.mode, punsignedp, funtype, for_return);
-+}
-+
- /* Return the mode to use to store a scalar of TYPE and MODE.
- PUNSIGNEDP points to the signedness of the type and may be adjusted
- to show what signedness to use on extension operations. */
-diff --git a/gcc/explow.h b/gcc/explow.h
-index 2db4f5c..c7d2286 100644
---- a/gcc/explow.h
-+++ b/gcc/explow.h
-@@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. If not see
- #ifndef GCC_EXPLOW_H
- #define GCC_EXPLOW_H
-
-+#include "calls.h" /* for cummulative args stuff. */
-+
- /* Return a memory reference like MEMREF, but which is known to have a
- valid address. */
- extern rtx validize_mem (rtx);
-@@ -47,8 +49,13 @@ extern rtx force_not_mem (rtx);
-
- /* Return mode and signedness to use when an argument or result in the
- given mode is promoted. */
--extern machine_mode promote_function_mode (const_tree, machine_mode, int *,
-- const_tree, int);
-+machine_mode promote_function_mode (const_tree, machine_mode, int *,
-+ const_tree, int);
-+
-+/* Return mode and signedness to use when an argument or result in the
-+ given mode is promoted. */
-+machine_mode promote_function_mode (cumulative_args_t, function_arg_info,
-+ const_tree, int *, int);
-
- /* Return mode and signedness to use when an object in the given mode
- is promoted. */
-diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
-index 87baf5a..908f2b7 100644
---- a/gcc/fortran/gfortran.texi
-+++ b/gcc/fortran/gfortran.texi
-@@ -978,7 +978,7 @@ low level file descriptor corresponding to an open Fortran unit. Then,
- using e.g. the @code{ISO_C_BINDING} feature, one can call the
- underlying system call to flush dirty data to stable storage, such as
- @code{fsync} on POSIX, @code{_commit} on MingW, or @code{fcntl(fd,
--F_FULLSYNC, 0)} on Mac OS X. The following example shows how to call
-+F_FULLSYNC, 0)} on macOS. The following example shows how to call
- fsync:
-
- @smallexample
-diff --git a/gcc/function.cc b/gcc/function.cc
-index 8d6c447..4308e24 100644
---- a/gcc/function.cc
-+++ b/gcc/function.cc
-@@ -58,8 +58,8 @@ along with GCC; see the file COPYING3. If not see
- #include "varasm.h"
- #include "except.h"
- #include "dojump.h"
--#include "explow.h"
- #include "calls.h"
-+#include "explow.h"
- #include "expr.h"
- #include "optabs-tree.h"
- #include "output.h"
-@@ -2448,7 +2448,10 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
- else if (DECL_CHAIN (parm))
- data->arg.named = 1; /* Not the last non-variadic parm. */
- else if (targetm.calls.strict_argument_naming (all->args_so_far))
-- data->arg.named = 1; /* Only variadic ones are unnamed. */
-+ {
-+ data->arg.named = 1; /* Only variadic ones are unnamed. */
-+ data->arg.last_named = 1;
-+ }
- else
- data->arg.named = 0; /* Treat as variadic. */
-
-@@ -2490,9 +2493,12 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
-
- /* Find mode as it is passed by the ABI. */
- unsignedp = TYPE_UNSIGNED (data->arg.type);
-- data->arg.mode
-- = promote_function_mode (data->arg.type, data->arg.mode, &unsignedp,
-- TREE_TYPE (current_function_decl), 0);
-+// data->arg.mode
-+// = promote_function_mode (data->arg.type, data->arg.mode, &unsignedp,
-+// TREE_TYPE (current_function_decl), 0);
-+ data->arg.mode = promote_function_mode (all->args_so_far, data->arg,
-+ TREE_TYPE (current_function_decl),
-+ &unsignedp, 0);
- }
-
- /* A subroutine of assign_parms. Invoke setup_incoming_varargs. */
-@@ -2505,6 +2511,7 @@ assign_parms_setup_varargs (struct assign_parm_data_all *all,
-
- function_arg_info last_named_arg = data->arg;
- last_named_arg.named = true;
-+ last_named_arg.last_named = true;
- targetm.calls.setup_incoming_varargs (all->args_so_far, last_named_arg,
- &varargs_pretend_bytes, no_rtl);
-
-@@ -2613,7 +2620,9 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
-
- locate_and_pad_parm (data->arg.mode, data->arg.type, in_regs,
- all->reg_parm_stack_space,
-- entry_parm ? data->partial : 0, current_function_decl,
-+ entry_parm ? data->partial : 0,
-+ all->args_so_far,
-+ current_function_decl,
- &all->stack_args_size, &data->locate);
-
- /* Update parm_stack_boundary if this parameter is passed in the
-@@ -3945,7 +3954,8 @@ gimplify_parameters (gimple_seq *cleanup)
- if (data.arg.pass_by_reference)
- {
- tree type = TREE_TYPE (data.arg.type);
-- function_arg_info orig_arg (type, data.arg.named);
-+ function_arg_info orig_arg (type, data.arg.named,
-+ data.arg.last_named);
- if (reference_callee_copied (&all.args_so_far_v, orig_arg))
- {
- tree local, t;
-@@ -4048,6 +4058,7 @@ gimplify_parameters (gimple_seq *cleanup)
- void
- locate_and_pad_parm (machine_mode passed_mode, tree type, int in_regs,
- int reg_parm_stack_space, int partial,
-+ cumulative_args_t ca,
- tree fndecl ATTRIBUTE_UNUSED,
- struct args_size *initial_offset_ptr,
- struct locate_and_pad_arg_data *locate)
-@@ -4085,9 +4096,23 @@ locate_and_pad_parm (machine_mode passed_mode, tree type, int in_regs,
- ? arg_size_in_bytes (type)
- : size_int (GET_MODE_SIZE (passed_mode)));
- where_pad = targetm.calls.function_arg_padding (passed_mode, type);
-- boundary = targetm.calls.function_arg_boundary (passed_mode, type);
-- round_boundary = targetm.calls.function_arg_round_boundary (passed_mode,
-- type);
-+
-+ if (flag_stack_use_cumulative_args)
-+ {
-+ boundary = targetm.calls.function_arg_boundary_ca (passed_mode,
-+ type,
-+ ca);
-+ round_boundary = targetm.calls.function_arg_round_boundary_ca
-+ (passed_mode, type, ca);
-+ }
-+ else
-+ {
-+ boundary = targetm.calls.function_arg_boundary (passed_mode,
-+ type);
-+ round_boundary = targetm.calls.function_arg_round_boundary
-+ (passed_mode, type);
-+ }
-+
- locate->where_pad = where_pad;
-
- /* Alignment can't exceed MAX_SUPPORTED_STACK_ALIGNMENT. */
-diff --git a/gcc/function.h b/gcc/function.h
-index d4ce8a7..09ab17e 100644
---- a/gcc/function.h
-+++ b/gcc/function.h
-@@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see
- #ifndef GCC_FUNCTION_H
- #define GCC_FUNCTION_H
-
-+#include "cumulative-args.h"
-
- /* Stack of pending (incomplete) sequences saved by `start_sequence'.
- Each element describes one pending sequence.
-@@ -665,6 +666,7 @@ extern int aggregate_value_p (const_tree, const_tree);
- extern bool use_register_for_decl (const_tree);
- extern gimple_seq gimplify_parameters (gimple_seq *);
- extern void locate_and_pad_parm (machine_mode, tree, int, int, int,
-+ cumulative_args_t,
- tree, struct args_size *,
- struct locate_and_pad_arg_data *);
- extern void generate_setjmp_warnings (void);
-diff --git a/gcc/gcc.cc b/gcc/gcc.cc
-index 16bb07f..d034974 100644
---- a/gcc/gcc.cc
-+++ b/gcc/gcc.cc
-@@ -575,6 +575,7 @@ or with constant text in a single argument.
- %l process LINK_SPEC as a spec.
- %L process LIB_SPEC as a spec.
- %M Output multilib_os_dir.
-+ %P Output a RUNPATH_OPTION for each directory in startfile_prefixes.
- %G process LIBGCC_SPEC as a spec.
- %R Output the concatenation of target_system_root and
- target_sysroot_suffix.
-@@ -1178,6 +1179,10 @@ proper position among the other output files. */
- # define SYSROOT_HEADERS_SUFFIX_SPEC ""
- #endif
-
-+#ifndef RUNPATH_OPTION
-+# define RUNPATH_OPTION "-rpath"
-+#endif
-+
- static const char *asm_debug = ASM_DEBUG_SPEC;
- static const char *asm_debug_option = ASM_DEBUG_OPTION_SPEC;
- static const char *cpp_spec = CPP_SPEC;
-@@ -5859,6 +5864,7 @@ struct spec_path_info {
- size_t append_len;
- bool omit_relative;
- bool separate_options;
-+ bool realpaths;
- };
-
- static void *
-@@ -5868,6 +5874,16 @@ spec_path (char *path, void *data)
- size_t len = 0;
- char save = 0;
-
-+ /* The path must exist; we want to resolve it to the realpath so that this
-+ can be embedded as a runpath. */
-+ if (info->realpaths)
-+ path = lrealpath (path);
-+
-+ /* However, if we failed to resolve it - perhaps because there was a bogus
-+ -B option on the command line, then punt on this entry. */
-+ if (!path)
-+ return NULL;
-+
- if (info->omit_relative && !IS_ABSOLUTE_PATH (path))
- return NULL;
-
-@@ -6099,6 +6115,22 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
- info.omit_relative = false;
- #endif
- info.separate_options = false;
-+ info.realpaths = false;
-+
-+ for_each_path (&startfile_prefixes, true, 0, spec_path, &info);
-+ }
-+ break;
-+
-+ case 'P':
-+ {
-+ struct spec_path_info info;
-+
-+ info.option = RUNPATH_OPTION;
-+ info.append_len = 0;
-+ info.omit_relative = false;
-+ info.separate_options = true;
-+ /* We want to embed the actual paths that have the libraries. */
-+ info.realpaths = true;
-
- for_each_path (&startfile_prefixes, true, 0, spec_path, &info);
- }
-@@ -6425,6 +6457,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
- info.append_len = strlen (info.append);
- info.omit_relative = false;
- info.separate_options = true;
-+ info.realpaths = false;
-
- for_each_path (&include_prefixes, false, info.append_len,
- spec_path, &info);
-diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
-index 12ceef3..af07107 100644
---- a/gcc/ginclude/stddef.h
-+++ b/gcc/ginclude/stddef.h
-@@ -428,9 +428,8 @@ typedef struct {
- /* _Float128 is defined as a basic type, so max_align_t must be
- sufficiently aligned for it. This code must work in C++, so we
- use __float128 here; that is only available on some
-- architectures, but only on i386 is extra alignment needed for
-- __float128. */
--#ifdef __i386__
-+ architectures. */
-+#if defined(__i386__) || (__APPLE__ && __aarch64__)
- __float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
- #endif
- } max_align_t;
-diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in
-index 5507920..5bdba6c 100644
---- a/gcc/jit/Make-lang.in
-+++ b/gcc/jit/Make-lang.in
-@@ -69,7 +69,7 @@ LIBGCCJIT_COMPAT = 0
- LIBGCCJIT_BASENAME = libgccjit
-
- LIBGCCJIT_SONAME = \
-- ${libdir}/$(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib
-+ $(DARWIN_RPATH)/$(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib
- LIBGCCJIT_FILENAME = $(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib
- LIBGCCJIT_LINKER_NAME = $(LIBGCCJIT_BASENAME).dylib
-
-diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc
-index e06f161..2a04573 100644
---- a/gcc/jit/jit-playback.cc
-+++ b/gcc/jit/jit-playback.cc
-@@ -3024,7 +3024,7 @@ invoke_driver (const char *ctxt_progname,
- ADD_ARG ("-fno-use-linker-plugin");
-
- #if defined (DARWIN_X86) || defined (DARWIN_PPC)
-- /* OS X's linker defaults to treating undefined symbols as errors.
-+ /* macOS's linker defaults to treating undefined symbols as errors.
- If the context has any imported functions or globals they will be
- undefined until the .so is dynamically-linked into the process.
- Ensure that the driver passes in "-undefined dynamic_lookup" to the
-diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h
-index 057d3e5..04545e4 100644
---- a/gcc/jit/libgccjit.h
-+++ b/gcc/jit/libgccjit.h
-@@ -21,6 +21,9 @@ along with GCC; see the file COPYING3. If not see
- #define LIBGCCJIT_H
-
- #include
-+#ifdef __APPLE__
-+# include /* For ssize_t. */
-+#endif
-
- #ifdef __cplusplus
- extern "C" {
-diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in
-index 0ae3e18..320f930 100644
---- a/gcc/m2/Make-lang.in
-+++ b/gcc/m2/Make-lang.in
-@@ -501,6 +501,11 @@ GM2_MIN_FLAGS=$(GM2_G) $(GM2_OS) \
- -Wpedantic-cast -Wpedantic-param-names -fno-exceptions \
- -ffunction-sections -fdata-sections $(GM2_CPP)
-
-+# ALL_LINKERFLAGS may include -pie (when GCC is configured with
-+# --enable-host-pie), so use -fPIE if needed. (It would not be
-+# a good idea to override CFLAGS.)
-+GM2_PICFLAGS = $(PICFLAG)
-+
- O2=-O2 -g
- SO_O2=-O2 -g -fPIC
- SO=-O0 -g -fPIC
-@@ -1396,7 +1401,7 @@ m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-l
-
- m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h
- -test -d $(@D) || $(mkinstalldirs) $(@D)
-- $(CXX) $(CXXFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
-+ $(CXX) $(CXXFLAGS) $(GM2_PICFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
-
- m2/mc-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit
- -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
-diff --git a/gcc/objc/objc-act.cc b/gcc/objc/objc-act.cc
-index fe2d2b5..8558059 100644
---- a/gcc/objc/objc-act.cc
-+++ b/gcc/objc/objc-act.cc
-@@ -3317,7 +3317,7 @@ objc_build_string_object (tree string)
- length = TREE_STRING_LENGTH (string) - 1;
-
- /* The target may have different ideas on how to construct an ObjC string
-- literal. On Darwin (Mac OS X), for example, we may wish to obtain a
-+ literal. On Darwin / macOS, for example, we may wish to obtain a
- constant CFString reference instead.
- At present, this is only supported for the NeXT runtime. */
- if (flag_next_runtime
-@@ -10362,5 +10362,51 @@ objc_common_tree_size (enum tree_code code)
- }
- }
-
-+/* Information for Objective-C-specific features known to __has_feature. */
-+
-+struct objc_feature_info
-+{
-+ typedef bool (*predicate_t) ();
-+
-+ const char *ident;
-+ predicate_t predicate;
-+
-+ constexpr objc_feature_info (const char *name)
-+ : ident (name), predicate (nullptr) {}
-+ constexpr objc_feature_info (const char *name, predicate_t p)
-+ : ident (name), predicate (p) {}
-+
-+ bool has_feature () const
-+ {
-+ return predicate ? predicate () : true;
-+ }
-+};
-+
-+static bool objc_nonfragile_abi_p ()
-+{
-+ return flag_next_runtime && flag_objc_abi >= 2;
-+}
-+
-+static constexpr objc_feature_info objc_features[] =
-+{
-+ { "objc_default_synthesize_properties" },
-+ { "objc_instancetype" },
-+ { "objc_nonfragile_abi", objc_nonfragile_abi_p }
-+};
-+
-+/* Register Objective-C-specific features for __has_feature. */
-+
-+void
-+objc_common_register_features ()
-+{
-+ for (unsigned i = 0; i < ARRAY_SIZE (objc_features); i++)
-+ {
-+ const objc_feature_info *info = objc_features + i;
-+ if (!info->has_feature ())
-+ continue;
-+
-+ c_common_register_feature (info->ident, true);
-+ }
-+}
-
- #include "gt-objc-objc-act.h"
-diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h
-index e21ab52..bcf0249 100644
---- a/gcc/objc/objc-act.h
-+++ b/gcc/objc/objc-act.h
-@@ -29,6 +29,9 @@ int objc_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
- void objc_common_init_ts (void);
- const char *objc_get_sarif_source_language (const char *);
-
-+/* Register features common to Objective-C and Objective-C++. */
-+void objc_common_register_features ();
-+
- /* NB: The remaining public functions are prototyped in c-common.h, for the
- benefit of stub-objc.cc and objc-act.cc. */
-
-diff --git a/gcc/objc/objc-lang.cc b/gcc/objc/objc-lang.cc
-index 89b3be4..7568248 100644
---- a/gcc/objc/objc-lang.cc
-+++ b/gcc/objc/objc-lang.cc
-@@ -58,6 +58,16 @@ objc_get_sarif_source_language (const char *)
- return "objectivec";
- }
-
-+/* Implement c-family hook to add language-specific features
-+ for __has_{feature,extension}. */
-+
-+void
-+c_family_register_lang_features ()
-+{
-+ objc_common_register_features ();
-+ c_register_features ();
-+}
-+
- /* Lang hook routines common to C and ObjC appear in c-objc-common.cc;
- there should be very few (if any) routines below. */
-
-diff --git a/gcc/objcp/objcp-lang.cc b/gcc/objcp/objcp-lang.cc
-index 9887209..ede59a6 100644
---- a/gcc/objcp/objcp-lang.cc
-+++ b/gcc/objcp/objcp-lang.cc
-@@ -80,6 +80,16 @@ objcp_tsubst_copy_and_build (tree t, tree args, tsubst_flags_t complain,
- #undef RECURSE
- }
-
-+/* Implement c-family hook to add language-specific features
-+ for __has_{feature,extension}. */
-+
-+void
-+c_family_register_lang_features ()
-+{
-+ objc_common_register_features ();
-+ cp_register_features ();
-+}
-+
- static void
- objcxx_init_ts (void)
- {
-diff --git a/gcc/opts.cc b/gcc/opts.cc
-index e0ba89f..71371e2 100644
---- a/gcc/opts.cc
-+++ b/gcc/opts.cc
-@@ -3215,6 +3215,7 @@ common_handle_option (struct gcc_options *opts,
- break;
-
- case OPT_fuse_ld_bfd:
-+ case OPT_fuse_ld_classic:
- case OPT_fuse_ld_gold:
- case OPT_fuse_ld_lld:
- case OPT_fuse_ld_mold:
-diff --git a/gcc/plugin.cc b/gcc/plugin.cc
-index 142f3fa..c3e40b2 100644
---- a/gcc/plugin.cc
-+++ b/gcc/plugin.cc
-@@ -190,10 +190,10 @@ add_new_plugin (const char* plugin_name)
- #if defined(__MINGW32__)
- static const char plugin_ext[] = ".dll";
- #elif defined(__APPLE__)
-- /* Mac OS has two types of libraries: dynamic libraries (.dylib) and
-+ /* macOS has two types of libraries: dynamic libraries (.dylib) and
- plugins (.bundle). Both can be used with dlopen()/dlsym() but the
- former cannot be linked at build time (i.e., with the -lfoo linker
-- option). A GCC plugin is therefore probably a Mac OS plugin but their
-+ option). A GCC plugin is therefore probably a macOS plugin but their
- use seems to be quite rare and the .bundle extension is more of a
- recommendation rather than the rule. This raises the questions of how
- well they are supported by tools (e.g., libtool). So to avoid
-diff --git a/gcc/target.def b/gcc/target.def
-index 171bbd1..75b51d2 100644
---- a/gcc/target.def
-+++ b/gcc/target.def
-@@ -4574,6 +4574,13 @@ if you would like to apply the same rules given by @code{PROMOTE_MODE}.",
- const_tree funtype, int for_return),
- default_promote_function_mode)
-
-+DEFHOOK
-+(promote_function_mode_ca,
-+ "Like @code{promote_function_mode}, but takes a cumulative_args pointer \
-+ and a current arg to supply the input.",
-+ machine_mode, (cumulative_args_t, function_arg_info, const_tree, int *, int),
-+ default_promote_function_mode_ca)
-+
- DEFHOOK
- (promote_prototypes,
- "This target hook returns @code{true} if an argument declared in a\n\
-@@ -4992,6 +4999,18 @@ with the specified mode and type. The default hook returns\n\
- unsigned int, (machine_mode mode, const_tree type),
- default_function_arg_boundary)
-
-+DEFHOOK
-+(function_arg_boundary_ca,
-+ "This is the @code{cumulative_args_t}-based version of\n\
-+@code{TARGET_FUNCTION_ARG_BOUNDARY}. Define this hook if you need more\n\
-+fine-grained control over argument alignment, e.g. depending on whether\n\
-+it is a named argument or not, or any other criteria that you choose to\n\
-+place in the @var{ca} structure.\n\
-+\n\
-+The default hook will call @code{TARGET_FUNCTION_ARG_BOUNDARY}.",
-+ unsigned int, (machine_mode mode, const_tree type, cumulative_args_t ca),
-+ default_function_arg_boundary_ca)
-+
- DEFHOOK
- (function_arg_round_boundary,
- "Normally, the size of an argument is rounded up to @code{PARM_BOUNDARY},\n\
-@@ -5001,6 +5020,18 @@ value.",
- unsigned int, (machine_mode mode, const_tree type),
- default_function_arg_round_boundary)
-
-+DEFHOOK
-+(function_arg_round_boundary_ca,
-+ "This is the @code{cumulative_args_t}-based version of\n\
-+@code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}. Define this hook if you need more\n\
-+fine-grained control over argument size rounding, e.g. depending on whether\n\
-+it is a named argument or not, or any other criteria that you choose to\n\
-+place in the @var{ca} structure.\n\
-+\n\
-+The default hook will call @code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}.",
-+ unsigned int, (machine_mode mode, const_tree type, cumulative_args_t ca),
-+ default_function_arg_round_boundary_ca)
-+
- /* Return the diagnostic message string if function without a prototype
- is not allowed for this 'val' argument; NULL otherwise. */
- DEFHOOK
-@@ -7138,6 +7169,16 @@ DEFHOOKPOD
- @option{-fsanitize=shadow-call-stack}. The default value is false.",
- bool, false)
-
-+/* This value represents whether __builtin_unreachable should be expanded
-+ as a trap instruction (or an abort() if the trap is not available). */
-+DEFHOOK
-+(unreachable_should_trap,
-+ "This hook should return @code{true} if the target wants \
-+ @code{__builtin_unreachable} to expand to a trap or @code{abort ()}.\n\
-+ The default value is false.",
-+ bool, (void),
-+ hook_bool_void_false)
-+
- /* Close the 'struct gcc_target' definition. */
- HOOK_VECTOR_END (C90_EMPTY_HACK)
-
-diff --git a/gcc/target.h b/gcc/target.h
-index cd448e4..064523f 100644
---- a/gcc/target.h
-+++ b/gcc/target.h
-@@ -51,22 +51,8 @@
- #include "insn-codes.h"
- #include "tm.h"
- #include "hard-reg-set.h"
--
--#if CHECKING_P
--
--struct cumulative_args_t { void *magic; void *p; };
--
--#else /* !CHECKING_P */
--
--/* When using a GCC build compiler, we could use
-- __attribute__((transparent_union)) to get cumulative_args_t function
-- arguments passed like scalars where the ABI would mandate a less
-- efficient way of argument passing otherwise. However, that would come
-- at the cost of less type-safe !CHECKING_P compilation. */
--
--union cumulative_args_t { void *p; };
--
--#endif /* !CHECKING_P */
-+#include "tree-core.h"
-+#include "cumulative-args.h"
-
- /* Types of memory operation understood by the "by_pieces" infrastructure.
- Used by the TARGET_USE_BY_PIECES_INFRASTRUCTURE_P target hook and
-diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc
-index 51bf3fb..13a7c20 100644
---- a/gcc/targhooks.cc
-+++ b/gcc/targhooks.cc
-@@ -159,6 +159,15 @@ default_promote_function_mode_always_promote (const_tree type,
- return promote_mode (type, mode, punsignedp);
- }
-
-+machine_mode
-+default_promote_function_mode_ca (cumulative_args_t, function_arg_info arg,
-+ const_tree funtype, int *punsignedp,
-+ int for_return)
-+{
-+ return promote_function_mode (arg.type, arg.mode, punsignedp,
-+ funtype, for_return);
-+}
-+
- machine_mode
- default_cc_modes_compatible (machine_mode m1, machine_mode m2)
- {
-@@ -856,6 +865,14 @@ default_function_arg_boundary (machine_mode mode ATTRIBUTE_UNUSED,
- return PARM_BOUNDARY;
- }
-
-+unsigned int
-+default_function_arg_boundary_ca (machine_mode mode ATTRIBUTE_UNUSED,
-+ const_tree type ATTRIBUTE_UNUSED,
-+ cumulative_args_t ca ATTRIBUTE_UNUSED)
-+{
-+ return default_function_arg_boundary (mode, type);
-+}
-+
- unsigned int
- default_function_arg_round_boundary (machine_mode mode ATTRIBUTE_UNUSED,
- const_tree type ATTRIBUTE_UNUSED)
-@@ -863,6 +880,14 @@ default_function_arg_round_boundary (machine_mode mode ATTRIBUTE_UNUSED,
- return PARM_BOUNDARY;
- }
-
-+unsigned int
-+default_function_arg_round_boundary_ca (machine_mode mode ATTRIBUTE_UNUSED,
-+ const_tree type ATTRIBUTE_UNUSED,
-+ cumulative_args_t ca ATTRIBUTE_UNUSED)
-+{
-+ return default_function_arg_round_boundary (mode, type);
-+}
-+
- void
- hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED)
- {
-diff --git a/gcc/targhooks.h b/gcc/targhooks.h
-index cf3d310..cd4e830 100644
---- a/gcc/targhooks.h
-+++ b/gcc/targhooks.h
-@@ -34,6 +34,9 @@ extern machine_mode default_promote_function_mode (const_tree, machine_mode,
- extern machine_mode default_promote_function_mode_always_promote
- (const_tree, machine_mode, int *, const_tree, int);
-
-+extern machine_mode default_promote_function_mode_ca
-+ (cumulative_args_t, function_arg_info, const_tree, int *, int);
-+
- extern machine_mode default_cc_modes_compatible (machine_mode,
- machine_mode);
-
-@@ -158,6 +161,12 @@ extern unsigned int default_function_arg_boundary (machine_mode,
- const_tree);
- extern unsigned int default_function_arg_round_boundary (machine_mode,
- const_tree);
-+extern unsigned int default_function_arg_boundary_ca (machine_mode,
-+ const_tree,
-+ cumulative_args_t ca);
-+extern unsigned int default_function_arg_round_boundary_ca (machine_mode,
-+ const_tree,
-+ cumulative_args_t ca);
- extern bool hook_bool_const_rtx_commutative_p (const_rtx, int);
- extern rtx default_function_value (const_tree, const_tree, bool);
- extern HARD_REG_SET default_zero_call_used_regs (HARD_REG_SET);
-diff --git a/gcc/tree-nested.cc b/gcc/tree-nested.cc
-index 0f44b3d..8355425 100644
---- a/gcc/tree-nested.cc
-+++ b/gcc/tree-nested.cc
-@@ -611,6 +611,14 @@ get_trampoline_type (struct nesting_info *info)
- if (trampoline_type)
- return trampoline_type;
-
-+ /* When trampolines are created off-stack then the only thing we need in the
-+ local frame is a single pointer. */
-+ if (flag_trampoline_impl == TRAMPOLINE_IMPL_HEAP)
-+ {
-+ trampoline_type = build_pointer_type (void_type_node);
-+ return trampoline_type;
-+ }
-+
- align = TRAMPOLINE_ALIGNMENT;
- size = TRAMPOLINE_SIZE;
-
-@@ -2793,17 +2801,27 @@ convert_tramp_reference_op (tree *tp, int *walk_subtrees, void *data)
-
- /* Compute the address of the field holding the trampoline. */
- x = get_frame_field (info, target_context, x, &wi->gsi);
-- x = build_addr (x);
-- x = gsi_gimplify_val (info, x, &wi->gsi);
-
-- /* Do machine-specific ugliness. Normally this will involve
-- computing extra alignment, but it can really be anything. */
-- if (descr)
-- builtin = builtin_decl_implicit (BUILT_IN_ADJUST_DESCRIPTOR);
-+ /* APB: We don't need to do the adjustment calls when using off-stack
-+ trampolines, any such adjustment will be done when the off-stack
-+ trampoline is created. */
-+ if (!descr && flag_trampoline_impl == TRAMPOLINE_IMPL_HEAP)
-+ x = gsi_gimplify_val (info, x, &wi->gsi);
- else
-- builtin = builtin_decl_implicit (BUILT_IN_ADJUST_TRAMPOLINE);
-- call = gimple_build_call (builtin, 1, x);
-- x = init_tmp_var_with_call (info, &wi->gsi, call);
-+ {
-+ x = build_addr (x);
-+
-+ x = gsi_gimplify_val (info, x, &wi->gsi);
-+
-+ /* Do machine-specific ugliness. Normally this will involve
-+ computing extra alignment, but it can really be anything. */
-+ if (descr)
-+ builtin = builtin_decl_implicit (BUILT_IN_ADJUST_DESCRIPTOR);
-+ else
-+ builtin = builtin_decl_implicit (BUILT_IN_ADJUST_TRAMPOLINE);
-+ call = gimple_build_call (builtin, 1, x);
-+ x = init_tmp_var_with_call (info, &wi->gsi, call);
-+ }
-
- /* Cast back to the proper function type. */
- x = build1 (NOP_EXPR, TREE_TYPE (t), x);
-@@ -3382,6 +3400,7 @@ build_init_call_stmt (struct nesting_info *info, tree decl, tree field,
- static void
- finalize_nesting_tree_1 (struct nesting_info *root)
- {
-+ gimple_seq cleanup_list = NULL;
- gimple_seq stmt_list = NULL;
- gimple *stmt;
- tree context = root->context;
-@@ -3513,9 +3532,48 @@ finalize_nesting_tree_1 (struct nesting_info *root)
- if (!field)
- continue;
-
-- x = builtin_decl_implicit (BUILT_IN_INIT_TRAMPOLINE);
-- stmt = build_init_call_stmt (root, i->context, field, x);
-- gimple_seq_add_stmt (&stmt_list, stmt);
-+ if (flag_trampoline_impl == TRAMPOLINE_IMPL_HEAP)
-+ {
-+ /* We pass a whole bunch of arguments to the builtin function that
-+ creates the off-stack trampoline, these are
-+ 1. The nested function chain value (that must be passed to the
-+ nested function so it can find the function arguments).
-+ 2. A pointer to the nested function implementation,
-+ 3. The address in the local stack frame where we should write
-+ the address of the trampoline.
-+
-+ When this code was originally written I just kind of threw
-+ everything at the builtin, figuring I'd work out what was
-+ actually needed later, I think, the stack pointer could
-+ certainly be dropped, arguments #2 and #4 are based off the
-+ stack pointer anyway, so #1 doesn't seem to add much value. */
-+ tree arg1, arg2, arg3;
-+
-+ gcc_assert (DECL_STATIC_CHAIN (i->context));
-+ arg1 = build_addr (root->frame_decl);
-+ arg2 = build_addr (i->context);
-+
-+ x = build3 (COMPONENT_REF, TREE_TYPE (field),
-+ root->frame_decl, field, NULL_TREE);
-+ arg3 = build_addr (x);
-+
-+ x = builtin_decl_explicit (BUILT_IN_GCC_NESTED_PTR_CREATED);
-+ stmt = gimple_build_call (x, 3, arg1, arg2, arg3);
-+ gimple_seq_add_stmt (&stmt_list, stmt);
-+
-+ /* This call to delete the nested function trampoline is added to
-+ the cleanup list, and called when we exit the current scope. */
-+ x = builtin_decl_explicit (BUILT_IN_GCC_NESTED_PTR_DELETED);
-+ stmt = gimple_build_call (x, 0);
-+ gimple_seq_add_stmt (&cleanup_list, stmt);
-+ }
-+ else
-+ {
-+ /* Original code to initialise the on stack trampoline. */
-+ x = builtin_decl_implicit (BUILT_IN_INIT_TRAMPOLINE);
-+ stmt = build_init_call_stmt (root, i->context, field, x);
-+ gimple_seq_add_stmt (&stmt_list, stmt);
-+ }
- }
- }
-
-@@ -3540,11 +3598,40 @@ finalize_nesting_tree_1 (struct nesting_info *root)
- /* If we created initialization statements, insert them. */
- if (stmt_list)
- {
-- gbind *bind;
-- annotate_all_with_location (stmt_list, DECL_SOURCE_LOCATION (context));
-- bind = gimple_seq_first_stmt_as_a_bind (gimple_body (context));
-- gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
-- gimple_bind_set_body (bind, stmt_list);
-+ if (flag_trampoline_impl == TRAMPOLINE_IMPL_HEAP)
-+ {
-+ /* Handle off-stack trampolines. */
-+ gbind *bind;
-+ annotate_all_with_location (stmt_list, DECL_SOURCE_LOCATION (context));
-+ annotate_all_with_location (cleanup_list, DECL_SOURCE_LOCATION (context));
-+ bind = gimple_seq_first_stmt_as_a_bind (gimple_body (context));
-+ gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
-+
-+ gimple_seq xxx_list = NULL;
-+
-+ if (cleanup_list != NULL)
-+ {
-+ /* Maybe we shouldn't be creating this try/finally if -fno-exceptions is
-+ in use. If this is the case, then maybe we should, instead, be
-+ inserting the cleanup code onto every path out of this function? Not
-+ yet figured out how we would do this. */
-+ gtry *t = gimple_build_try (stmt_list, cleanup_list, GIMPLE_TRY_FINALLY);
-+ gimple_seq_add_stmt (&xxx_list, t);
-+ }
-+ else
-+ xxx_list = stmt_list;
-+
-+ gimple_bind_set_body (bind, xxx_list);
-+ }
-+ else
-+ {
-+ /* The traditional, on stack trampolines. */
-+ gbind *bind;
-+ annotate_all_with_location (stmt_list, DECL_SOURCE_LOCATION (context));
-+ bind = gimple_seq_first_stmt_as_a_bind (gimple_body (context));
-+ gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
-+ gimple_bind_set_body (bind, stmt_list);
-+ }
- }
-
- /* If a chain_decl was created, then it needs to be registered with
-diff --git a/gcc/tree.cc b/gcc/tree.cc
-index 12dea81..8837041 100644
---- a/gcc/tree.cc
-+++ b/gcc/tree.cc
-@@ -9853,6 +9853,28 @@ build_common_builtin_nodes (void)
- "__builtin_nonlocal_goto",
- ECF_NORETURN | ECF_NOTHROW);
-
-+ tree ptr_ptr_type_node = build_pointer_type (ptr_type_node);
-+
-+ if (!builtin_decl_explicit_p (BUILT_IN_GCC_NESTED_PTR_CREATED))
-+ {
-+ ftype = build_function_type_list (void_type_node,
-+ ptr_type_node, // void *chain
-+ ptr_type_node, // void *func
-+ ptr_ptr_type_node, // void **dst
-+ NULL_TREE);
-+ local_define_builtin ("__builtin___gcc_nested_func_ptr_created", ftype,
-+ BUILT_IN_GCC_NESTED_PTR_CREATED,
-+ "__gcc_nested_func_ptr_created", ECF_NOTHROW);
-+ }
-+
-+ if (!builtin_decl_explicit_p (BUILT_IN_GCC_NESTED_PTR_DELETED))
-+ {
-+ ftype = build_function_type_list (void_type_node, NULL_TREE);
-+ local_define_builtin ("__builtin___gcc_nested_func_ptr_deleted", ftype,
-+ BUILT_IN_GCC_NESTED_PTR_DELETED,
-+ "__gcc_nested_func_ptr_deleted", ECF_NOTHROW);
-+ }
-+
- ftype = build_function_type_list (void_type_node,
- ptr_type_node, ptr_type_node, NULL_TREE);
- local_define_builtin ("__builtin_setjmp_setup", ftype,
-diff --git a/intl/Makefile.in b/intl/Makefile.in
-index 409d693..5beebdc 100644
---- a/intl/Makefile.in
-+++ b/intl/Makefile.in
-@@ -54,7 +54,7 @@ CTAGS = @CTAGS@
- ETAGS = @ETAGS@
- MKID = @MKID@
-
--COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(DEFS-$@) $(INCLUDES)
-+COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) @PICFLAG@ $(DEFS) $(DEFS-$@) $(INCLUDES)
-
- HEADERS = \
- gmo.h \
-diff --git a/intl/configure b/intl/configure
-index 03f4048..79bb583 100755
---- a/intl/configure
-+++ b/intl/configure
-@@ -623,6 +623,8 @@ ac_header_list=
- ac_subst_vars='LTLIBOBJS
- LIBOBJS
- PICFLAG
-+enable_host_pie
-+enable_host_shared
- BISON3_NO
- BISON3_YES
- INCINTL
-@@ -731,6 +733,7 @@ with_libintl_prefix
- with_libintl_type
- enable_maintainer_mode
- enable_host_shared
-+enable_host_pie
- '
- ac_precious_vars='build_alias
- host_alias
-@@ -1356,6 +1359,7 @@ Optional Features:
- --disable-rpath do not hardcode runtime library paths
- --enable-maintainer-mode enable rules only needed by maintainers
- --enable-host-shared build host code as shared libraries
-+ --enable-host-pie build host code as PIE
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -6852,15 +6856,31 @@ fi
-
-
-
-+# Enable --enable-host-shared.
- # Check whether --enable-host-shared was given.
- if test "${enable_host_shared+set}" = set; then :
-- enableval=$enable_host_shared; PICFLAG=-fPIC
-+ enableval=$enable_host_shared;
-+fi
-+
-+
-+
-+# Enable --enable-host-pie.
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie;
-+fi
-+
-+
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
- else
- PICFLAG=
- fi
-
-
--
- ac_config_files="$ac_config_files Makefile config.intl"
-
- cat >confcache <<\_ACEOF
-diff --git a/intl/configure.ac b/intl/configure.ac
-index 16a740a..81aa831 100644
---- a/intl/configure.ac
-+++ b/intl/configure.ac
-@@ -83,10 +83,25 @@ fi
- AC_SUBST(BISON3_YES)
- AC_SUBST(BISON3_NO)
-
-+# Enable --enable-host-shared.
- AC_ARG_ENABLE(host-shared,
- [AS_HELP_STRING([--enable-host-shared],
-- [build host code as shared libraries])],
--[PICFLAG=-fPIC], [PICFLAG=])
-+ [build host code as shared libraries])])
-+AC_SUBST(enable_host_shared)
-+
-+# Enable --enable-host-pie.
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])])
-+AC_SUBST(enable_host_pie)
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
- AC_SUBST(PICFLAG)
-
- AC_CONFIG_FILES(Makefile config.intl)
-diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am
-index c6c8d81..3bb32f3 100644
---- a/libatomic/Makefile.am
-+++ b/libatomic/Makefile.am
-@@ -65,8 +65,13 @@ libatomic_version_script =
- libatomic_version_dep =
- endif
- libatomic_version_info = -version-info $(libtool_VERSION)
-+if ENABLE_DARWIN_AT_RPATH
-+libatomic_darwin_rpath = -Wc,-nodefaultrpaths
-+libatomic_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
-
--libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) $(lt_host_flags)
-+libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \
-+ $(lt_host_flags) $(libatomic_darwin_rpath)
- libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \
- fenv.c fence.c flag.c
-
-diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in
-index a0fa3df..ef7ef45 100644
---- a/libatomic/Makefile.in
-+++ b/libatomic/Makefile.in
-@@ -417,7 +417,12 @@ noinst_LTLIBRARIES = libatomic_convenience.la
- @LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libatomic_version_dep = $(top_srcdir)/libatomic.map
- @LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libatomic_version_dep = libatomic.map-sun
- libatomic_version_info = -version-info $(libtool_VERSION)
--libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) $(lt_host_flags)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libatomic_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
-+libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \
-+ $(lt_host_flags) $(libatomic_darwin_rpath)
-+
- libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c \
- init.c fenv.c fence.c flag.c $(am__append_2)
- SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas
-diff --git a/libatomic/configure b/libatomic/configure
-index e47d2d7..7c1d46b 100755
---- a/libatomic/configure
-+++ b/libatomic/configure
-@@ -658,6 +658,8 @@ OPT_LDFLAGS
- SECTION_LDFLAGS
- enable_aarch64_lse
- libtool_VERSION
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- MAINT
- MAINTAINER_MODE_FALSE
- MAINTAINER_MODE_TRUE
-@@ -803,6 +805,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_maintainer_mode
- enable_symvers
- enable_werror
-@@ -1452,6 +1455,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
-@@ -7608,7 +7614,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9581,6 +9587,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9598,9 +9647,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -11406,7 +11459,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11409 "configure"
-+#line 11462 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11512,7 +11565,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11515 "configure"
-+#line 11568 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11797,6 +11850,15 @@ fi
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+
- # For libtool versioning info, format is CURRENT:REVISION:AGE
- libtool_VERSION=3:0:2
-
-@@ -15924,6 +15986,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
-
- if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_FALSE}"; then
- as_fn_error $? "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never defined.
-diff --git a/libatomic/configure.ac b/libatomic/configure.ac
-index 3130468..20981f1 100644
---- a/libatomic/configure.ac
-+++ b/libatomic/configure.ac
-@@ -156,6 +156,8 @@ AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
- AM_MAINTAINER_MODE
-
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+
- # For libtool versioning info, format is CURRENT:REVISION:AGE
- libtool_VERSION=3:0:2
- AC_SUBST(libtool_VERSION)
-diff --git a/libbacktrace/configure b/libbacktrace/configure
-index 6af2c04..4a25e38 100755
---- a/libbacktrace/configure
-+++ b/libbacktrace/configure
-@@ -681,6 +681,8 @@ PIC_FLAG
- WARN_FLAGS
- EXTRA_FLAGS
- BACKTRACE_FILE
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- OTOOL64
- OTOOL
- LIPO
-@@ -805,6 +807,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_largefile
- enable_cet
- enable_werror
-@@ -1453,6 +1456,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --disable-largefile omit support for large files
- --enable-cet enable Intel CET in target libraries [default=auto]
- --disable-werror disable building with -Werror
-@@ -8010,7 +8016,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9716,6 +9722,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9733,9 +9782,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -11541,7 +11594,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11544 "configure"
-+#line 11597 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11647,7 +11700,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11650 "configure"
-+#line 11703 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11886,6 +11939,15 @@ CC="$lt_save_CC"
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+
- # Check whether --enable-largefile was given.
- if test "${enable_largefile+set}" = set; then :
- enableval=$enable_largefile;
-@@ -14435,6 +14497,10 @@ if test -z "${HAVE_DWZ_TRUE}" && test -z "${HAVE_DWZ_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_DWZ\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${HAVE_ELF_TRUE}" && test -z "${HAVE_ELF_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_ELF\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac
-index 39e6bf4..98b96fc 100644
---- a/libbacktrace/configure.ac
-+++ b/libbacktrace/configure.ac
-@@ -84,6 +84,8 @@ AM_CONDITIONAL(HAVE_DWZ, test "$DWZ" != "")
- LT_INIT
- AM_PROG_LIBTOOL
-
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+
- AC_SYS_LARGEFILE
-
- backtrace_supported=yes
-diff --git a/libcc1/configure b/libcc1/configure
-index bae3b87..cd9acc3 100755
---- a/libcc1/configure
-+++ b/libcc1/configure
-@@ -787,6 +787,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_cet
- with_gcc_major_version_only
- enable_werror_always
-@@ -1439,6 +1440,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-cet enable Intel CET in host libraries [default=auto]
- --enable-werror-always enable -Werror despite compiler version
- --enable-plugin enable plugin support
-@@ -7271,7 +7275,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -8976,6 +8980,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -8993,9 +9040,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -10801,7 +10852,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10804 "configure"
-+#line 10855 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10907,7 +10958,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10910 "configure"
-+#line 10961 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12189,6 +12240,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -12206,12 +12300,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-diff --git a/libcody/Makefile.in b/libcody/Makefile.in
-index bb87468..cb01b00 100644
---- a/libcody/Makefile.in
-+++ b/libcody/Makefile.in
-@@ -31,7 +31,7 @@ endif
- CXXOPTS += $(filter-out -DHAVE_CONFIG_H,@DEFS@) -include config.h
-
- # Linker options
--LDFLAGS := @LDFLAGS@
-+LDFLAGS := @LDFLAGS@ @LD_PICFLAG@
- LIBS := @LIBS@
-
- # Per-source & per-directory compile flags (warning: recursive)
-diff --git a/libcody/configure b/libcody/configure
-index da52a5c..0e536c0 100755
---- a/libcody/configure
-+++ b/libcody/configure
-@@ -591,7 +591,10 @@ configure_args
- AR
- RANLIB
- EXCEPTIONS
-+LD_PICFLAG
- PICFLAG
-+enable_host_pie
-+enable_host_shared
- OBJEXT
- EXEEXT
- ac_ct_CXX
-@@ -653,6 +656,7 @@ enable_maintainer_mode
- with_compiler
- enable_checking
- enable_host_shared
-+enable_host_pie
- enable_exceptions
- '
- ac_precious_vars='build_alias
-@@ -1286,6 +1290,7 @@ Optional Features:
- yes,no,all,none,release. Flags are: misc,valgrind or
- other strings
- --enable-host-shared build host code as shared libraries
-+ --enable-host-pie build host code as PIE
- --enable-exceptions enable exceptions & rtti
-
- Optional Packages:
-@@ -2635,11 +2640,34 @@ fi
- # Enable --enable-host-shared.
- # Check whether --enable-host-shared was given.
- if test "${enable_host_shared+set}" = set; then :
-- enableval=$enable_host_shared; PICFLAG=-fPIC
-+ enableval=$enable_host_shared;
-+fi
-+
-+
-+
-+# Enable --enable-host-pie.
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie;
-+fi
-+
-+
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
- else
- PICFLAG=
- fi
-
-+if test x$enable_host_pie = xyes; then
-+ LD_PICFLAG=-pie
-+else
-+ LD_PICFLAG=
-+fi
-+
-+
-
-
- # Check whether --enable-exceptions was given.
-diff --git a/libcody/configure.ac b/libcody/configure.ac
-index 960191e..14e8dd4 100644
---- a/libcody/configure.ac
-+++ b/libcody/configure.ac
-@@ -63,9 +63,31 @@ fi
- # Enable --enable-host-shared.
- AC_ARG_ENABLE(host-shared,
- [AS_HELP_STRING([--enable-host-shared],
-- [build host code as shared libraries])],
--[PICFLAG=-fPIC], [PICFLAG=])
-+ [build host code as shared libraries])])
-+AC_SUBST(enable_host_shared)
-+
-+# Enable --enable-host-pie.
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])])
-+AC_SUBST(enable_host_pie)
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
-+
-+if test x$enable_host_pie = xyes; then
-+ LD_PICFLAG=-pie
-+else
-+ LD_PICFLAG=
-+fi
-+
- AC_SUBST(PICFLAG)
-+AC_SUBST(LD_PICFLAG)
-
- NMS_ENABLE_EXCEPTIONS
-
-diff --git a/libcpp/configure b/libcpp/configure
-index e9937cd..1389dda 100755
---- a/libcpp/configure
-+++ b/libcpp/configure
-@@ -625,6 +625,8 @@ ac_includes_default="\
- ac_subst_vars='LTLIBOBJS
- CET_HOST_FLAGS
- PICFLAG
-+enable_host_pie
-+enable_host_shared
- MAINT
- USED_CATALOGS
- PACKAGE
-@@ -738,6 +740,7 @@ enable_maintainer_mode
- enable_checking
- enable_canonical_system_headers
- enable_host_shared
-+enable_host_pie
- enable_cet
- enable_valgrind_annotations
- '
-@@ -1379,6 +1382,7 @@ Optional Features:
- --enable-canonical-system-headers
- enable or disable system headers canonicalization
- --enable-host-shared build host code as shared libraries
-+ --enable-host-pie build host code as PIE
- --enable-cet enable Intel CET in host libraries [default=auto]
- --enable-valgrind-annotations
- enable valgrind runtime interaction
-@@ -7605,7 +7609,23 @@ esac
- # Enable --enable-host-shared.
- # Check whether --enable-host-shared was given.
- if test "${enable_host_shared+set}" = set; then :
-- enableval=$enable_host_shared; PICFLAG=-fPIC
-+ enableval=$enable_host_shared;
-+fi
-+
-+
-+
-+# Enable --enable-host-pie.
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie;
-+fi
-+
-+
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
- else
- PICFLAG=
- fi
-diff --git a/libcpp/configure.ac b/libcpp/configure.ac
-index 89ac99b..b29b4d6 100644
---- a/libcpp/configure.ac
-+++ b/libcpp/configure.ac
-@@ -211,8 +211,23 @@ esac
- # Enable --enable-host-shared.
- AC_ARG_ENABLE(host-shared,
- [AS_HELP_STRING([--enable-host-shared],
-- [build host code as shared libraries])],
--[PICFLAG=-fPIC], [PICFLAG=])
-+ [build host code as shared libraries])])
-+AC_SUBST(enable_host_shared)
-+
-+# Enable --enable-host-pie.
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])])
-+AC_SUBST(enable_host_pie)
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
-+
- AC_SUBST(PICFLAG)
-
- # Enable Intel CET on Intel CET enabled host if jit is enabled.
-diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
-index b8e50ae..26474a4 100644
---- a/libcpp/include/cpplib.h
-+++ b/libcpp/include/cpplib.h
-@@ -756,6 +756,9 @@ struct cpp_callbacks
- /* Callback to determine whether a built-in function is recognized. */
- int (*has_builtin) (cpp_reader *);
-
-+ /* Callback to determine whether a feature is available. */
-+ int (*has_feature) (cpp_reader *, bool);
-+
- /* Callback that can change a user lazy into normal macro. */
- void (*user_lazy_macro) (cpp_reader *, cpp_macro *, unsigned);
-
-@@ -960,7 +963,9 @@ enum cpp_builtin_type
- BT_HAS_STD_ATTRIBUTE, /* `__has_c_attribute(x)' */
- BT_HAS_BUILTIN, /* `__has_builtin(x)' */
- BT_HAS_INCLUDE, /* `__has_include(x)' */
-- BT_HAS_INCLUDE_NEXT /* `__has_include_next(x)' */
-+ BT_HAS_INCLUDE_NEXT, /* `__has_include_next(x)' */
-+ BT_HAS_FEATURE, /* `__has_feature(x)' */
-+ BT_HAS_EXTENSION /* `__has_extension(x)' */
- };
-
- #define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE))
-diff --git a/libcpp/init.cc b/libcpp/init.cc
-index c508f06..465dafe 100644
---- a/libcpp/init.cc
-+++ b/libcpp/init.cc
-@@ -433,6 +433,8 @@ static const struct builtin_macro builtin_array[] =
- B("__has_builtin", BT_HAS_BUILTIN, true),
- B("__has_include", BT_HAS_INCLUDE, true),
- B("__has_include_next",BT_HAS_INCLUDE_NEXT, true),
-+ B("__has_feature", BT_HAS_FEATURE, true),
-+ B("__has_extension", BT_HAS_EXTENSION, true),
- /* Keep builtins not used for -traditional-cpp at the end, and
- update init_builtins() if any more are added. */
- B("_Pragma", BT_PRAGMA, true),
-diff --git a/libcpp/macro.cc b/libcpp/macro.cc
-index d4238d4..d2e8f9b 100644
---- a/libcpp/macro.cc
-+++ b/libcpp/macro.cc
-@@ -677,6 +677,12 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node,
- number = builtin_has_include (pfile, node,
- node->value.builtin == BT_HAS_INCLUDE_NEXT);
- break;
-+
-+ case BT_HAS_FEATURE:
-+ case BT_HAS_EXTENSION:
-+ number = pfile->cb.has_feature (pfile,
-+ node->value.builtin == BT_HAS_FEATURE);
-+ break;
- }
-
- if (result == NULL)
-diff --git a/libdecnumber/configure b/libdecnumber/configure
-index fb6db05..84bc4ff 100755
---- a/libdecnumber/configure
-+++ b/libdecnumber/configure
-@@ -626,6 +626,8 @@ ac_subst_vars='LTLIBOBJS
- LIBOBJS
- CET_HOST_FLAGS
- PICFLAG
-+enable_host_pie
-+enable_host_shared
- ADDITIONAL_OBJS
- enable_decimal_float
- target_os
-@@ -706,6 +708,7 @@ enable_werror_always
- enable_maintainer_mode
- enable_decimal_float
- enable_host_shared
-+enable_host_pie
- enable_cet
- '
- ac_precious_vars='build_alias
-@@ -1338,6 +1341,7 @@ Optional Features:
- or 'dpd' choses which decimal floating point format
- to use
- --enable-host-shared build host code as shared libraries
-+ --enable-host-pie build host code as PIE
- --enable-cet enable Intel CET in host libraries [default=auto]
-
- Some influential environment variables:
-@@ -5186,7 +5190,23 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
- # Enable --enable-host-shared.
- # Check whether --enable-host-shared was given.
- if test "${enable_host_shared+set}" = set; then :
-- enableval=$enable_host_shared; PICFLAG=-fPIC
-+ enableval=$enable_host_shared;
-+fi
-+
-+
-+
-+# Enable --enable-host-pie.
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie;
-+fi
-+
-+
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
- else
- PICFLAG=
- fi
-diff --git a/libdecnumber/configure.ac b/libdecnumber/configure.ac
-index aafd06f..30a51ca 100644
---- a/libdecnumber/configure.ac
-+++ b/libdecnumber/configure.ac
-@@ -100,8 +100,23 @@ AC_C_BIGENDIAN
- # Enable --enable-host-shared.
- AC_ARG_ENABLE(host-shared,
- [AS_HELP_STRING([--enable-host-shared],
-- [build host code as shared libraries])],
--[PICFLAG=-fPIC], [PICFLAG=])
-+ [build host code as shared libraries])])
-+AC_SUBST(enable_host_shared)
-+
-+# Enable --enable-host-pie.
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])])
-+AC_SUBST(enable_host_pie)
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
-+
- AC_SUBST(PICFLAG)
-
- # Enable Intel CET on Intel CET enabled host if jit is enabled.
-diff --git a/libffi/Makefile.am b/libffi/Makefile.am
-index c6d6f84..d2ae0c0 100644
---- a/libffi/Makefile.am
-+++ b/libffi/Makefile.am
-@@ -214,7 +214,12 @@ libffi.map: $(top_srcdir)/libffi.map.in
- $(COMPILE) -D$(TARGET) -DGENERATE_LIBFFI_MAP \
- -E -x assembler-with-cpp -o $@ $(top_srcdir)/libffi.map.in
-
--libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
-+if ENABLE_DARWIN_AT_RPATH
-+libffi_darwin_rpath = -Wl,-rpath,@loader_path
-+endif
-+libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) \
-+ $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) \
-+ $(libffi_darwin_rpath)
- libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
-
- AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
-diff --git a/libffi/Makefile.in b/libffi/Makefile.in
-index 5524a6a..34e77a4 100644
---- a/libffi/Makefile.in
-+++ b/libffi/Makefile.in
-@@ -597,7 +597,11 @@ AM_CFLAGS = -Wall -g -fexceptions $(CET_FLAGS) $(am__append_2)
- @LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map
- @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun
- libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
--libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libffi_darwin_rpath = -Wl,-rpath,@loader_path
-+libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) \
-+ $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) \
-+ $(libffi_darwin_rpath)
-+
- libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
- AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
- AM_CCASFLAGS = $(AM_CPPFLAGS) $(CET_FLAGS)
-diff --git a/libffi/configure b/libffi/configure
-index 2bb9f8d..0fae8b5 100755
---- a/libffi/configure
-+++ b/libffi/configure
-@@ -667,6 +667,8 @@ MAINT
- MAINTAINER_MODE_FALSE
- MAINTAINER_MODE_TRUE
- READELF
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- CXXCPP
- CPP
- OTOOL64
-@@ -810,6 +812,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_maintainer_mode
- enable_pax_emutramp
- enable_debug
-@@ -1465,6 +1468,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
-@@ -7797,7 +7803,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9771,6 +9777,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9788,9 +9837,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -11596,7 +11649,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11599 "configure"
-+#line 11652 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11702,7 +11755,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11705 "configure"
-+#line 11758 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12578,6 +12631,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -12595,12 +12691,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -14970,6 +15074,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
- # Only expand once:
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}readelf", so it can be a program name with args.
-@@ -17115,6 +17227,10 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libffi/configure.ac b/libffi/configure.ac
-index 014d89d..716f20a 100644
---- a/libffi/configure.ac
-+++ b/libffi/configure.ac
-@@ -55,6 +55,7 @@ AC_SUBST(CET_FLAGS)
- AM_PROG_AS
- AM_PROG_CC_C_O
- AC_PROG_LIBTOOL
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- AC_CHECK_TOOL(READELF, readelf)
-
-diff --git a/libffi/doc/version.texi b/libffi/doc/version.texi
-index f2b741e..6261b21 100644
---- a/libffi/doc/version.texi
-+++ b/libffi/doc/version.texi
-@@ -1,4 +1,4 @@
--@set UPDATED 27 June 2021
--@set UPDATED-MONTH June 2021
-+@set UPDATED 31 August 2022
-+@set UPDATED-MONTH August 2022
- @set EDITION 3.4.2
- @set VERSION 3.4.2
-diff --git b/libgcc/config/aarch64/heap-trampoline.c b/libgcc/config/aarch64/heap-trampoline.c
-new file mode 100644
-index 0000000..b2c69aa
---- /dev/null
-+++ b/libgcc/config/aarch64/heap-trampoline.c
-@@ -0,0 +1,185 @@
-+/* Copyright The GNU Toolchain Authors. */
-+
-+/* libc is required to allocate trampolines. */
-+#ifndef inhibit_libc
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#if __APPLE__
-+/* For pthread_jit_write_protect_np */
-+#include
-+#endif
-+
-+/* HEAP_T_ATTR is provided to allow targets to build the exported functions
-+ as weak definitions. */
-+#ifndef HEAP_T_ATTR
-+# define HEAP_T_ATTR
-+#endif
-+
-+void *allocate_trampoline_page (void);
-+int get_trampolines_per_page (void);
-+struct tramp_ctrl_data *allocate_tramp_ctrl (struct tramp_ctrl_data *parent);
-+void *allocate_trampoline_page (void);
-+
-+void __gcc_nested_func_ptr_created (void *chain, void *func, void **dst);
-+void __gcc_nested_func_ptr_deleted (void);
-+
-+#if defined(__linux__)
-+static const unsigned char aarch64_trampoline_insns[6][4] = {
-+ {0x5f, 0x24, 0x03, 0xd5}, /* hint 34 */
-+ {0xb1, 0x00, 0x00, 0x58}, /* ldr x17, .+20 */
-+ {0xd2, 0x00, 0x00, 0x58}, /* ldr x18, .+24 */
-+ {0x20, 0x02, 0x1f, 0xd6}, /* br x17 */
-+ {0x9f, 0x3f, 0x03, 0xd5}, /* dsb sy */
-+ {0xdf, 0x3f, 0x03, 0xd5} /* isb */
-+};
-+
-+#elif __APPLE__
-+static const unsigned char aarch64_trampoline_insns[6][4] = {
-+ {0x5f, 0x24, 0x03, 0xd5}, /* hint 34 */
-+ {0xb1, 0x00, 0x00, 0x58}, /* ldr x17, .+20 */
-+ {0xd0, 0x00, 0x00, 0x58}, /* ldr x16, .+24 */
-+ {0x20, 0x02, 0x1f, 0xd6}, /* br x17 */
-+ {0x9f, 0x3f, 0x03, 0xd5}, /* dsb sy */
-+ {0xdf, 0x3f, 0x03, 0xd5} /* isb */
-+};
-+
-+#else
-+#error "Unsupported AArch64 platform for heap trampolines"
-+#endif
-+
-+struct aarch64_trampoline {
-+ unsigned char insns[6][4];
-+ void *func_ptr;
-+ void *chain_ptr;
-+};
-+
-+struct tramp_ctrl_data
-+{
-+ struct tramp_ctrl_data *prev;
-+
-+ int free_trampolines;
-+
-+ /* This will be pointing to an executable mmap'ed page. */
-+ struct aarch64_trampoline *trampolines;
-+};
-+
-+int
-+get_trampolines_per_page (void)
-+{
-+ return getpagesize() / sizeof(struct aarch64_trampoline);
-+}
-+
-+static _Thread_local struct tramp_ctrl_data *tramp_ctrl_curr = NULL;
-+
-+void *
-+allocate_trampoline_page (void)
-+{
-+ void *page;
-+
-+#if defined(__linux__)
-+ page = mmap (0, getpagesize (), PROT_WRITE | PROT_EXEC,
-+ MAP_ANON | MAP_PRIVATE, 0, 0);
-+#elif __APPLE__
-+ page = mmap (0, getpagesize (), PROT_WRITE | PROT_EXEC,
-+ MAP_ANON | MAP_PRIVATE | MAP_JIT, 0, 0);
-+#else
-+ page = MAP_FAILED;
-+#endif
-+
-+ return page;
-+}
-+
-+struct tramp_ctrl_data *
-+allocate_tramp_ctrl (struct tramp_ctrl_data *parent)
-+{
-+ struct tramp_ctrl_data *p = malloc (sizeof (struct tramp_ctrl_data));
-+ if (p == NULL)
-+ return NULL;
-+
-+ p->trampolines = allocate_trampoline_page ();
-+
-+ if (p->trampolines == MAP_FAILED)
-+ return NULL;
-+
-+ p->prev = parent;
-+ p->free_trampolines = get_trampolines_per_page();
-+
-+ return p;
-+}
-+
-+HEAP_T_ATTR
-+void
-+__gcc_nested_func_ptr_created (void *chain, void *func, void **dst)
-+{
-+ if (tramp_ctrl_curr == NULL)
-+ {
-+ tramp_ctrl_curr = allocate_tramp_ctrl (NULL);
-+ if (tramp_ctrl_curr == NULL)
-+ abort ();
-+ }
-+
-+ if (tramp_ctrl_curr->free_trampolines == 0)
-+ {
-+ void *tramp_ctrl = allocate_tramp_ctrl (tramp_ctrl_curr);
-+ if (!tramp_ctrl)
-+ abort ();
-+
-+ tramp_ctrl_curr = tramp_ctrl;
-+ }
-+
-+ struct aarch64_trampoline *trampoline
-+ = &tramp_ctrl_curr->trampolines[get_trampolines_per_page ()
-+ - tramp_ctrl_curr->free_trampolines];
-+
-+#if __APPLE__
-+ /* Disable write protection for the MAP_JIT regions in this thread (see
-+ https://developer.apple.com/documentation/apple-silicon/porting-just-in-time-compilers-to-apple-silicon) */
-+ pthread_jit_write_protect_np (0);
-+#endif
-+
-+ memcpy (trampoline->insns, aarch64_trampoline_insns,
-+ sizeof(aarch64_trampoline_insns));
-+ trampoline->func_ptr = func;
-+ trampoline->chain_ptr = chain;
-+
-+#if __APPLE__
-+ /* Re-enable write protection. */
-+ pthread_jit_write_protect_np (1);
-+#endif
-+
-+ tramp_ctrl_curr->free_trampolines -= 1;
-+
-+ __builtin___clear_cache ((void *)trampoline->insns,
-+ ((void *)trampoline->insns + sizeof(trampoline->insns)));
-+
-+ *dst = &trampoline->insns;
-+}
-+
-+HEAP_T_ATTR
-+void
-+__gcc_nested_func_ptr_deleted (void)
-+{
-+ if (tramp_ctrl_curr == NULL)
-+ abort ();
-+
-+ tramp_ctrl_curr->free_trampolines += 1;
-+
-+ if (tramp_ctrl_curr->free_trampolines == get_trampolines_per_page ())
-+ {
-+ if (tramp_ctrl_curr->prev == NULL)
-+ return;
-+
-+ munmap (tramp_ctrl_curr->trampolines, getpagesize());
-+ struct tramp_ctrl_data *prev = tramp_ctrl_curr->prev;
-+ free (tramp_ctrl_curr);
-+ tramp_ctrl_curr = prev;
-+ }
-+}
-+
-+#endif /* !inhibit_libc */
-diff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S
-index dde3a28..87ee33b 100644
---- a/libgcc/config/aarch64/lse.S
-+++ b/libgcc/config/aarch64/lse.S
-@@ -58,7 +58,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- #endif
-
- /* Declare the symbol gating the LSE implementations. */
-+#if __ELF__
- .hidden __aarch64_have_lse_atomics
-+#else
-+ .private_extern __aarch64_have_lse_atomics
-+#endif
-
- /* Turn size and memory model defines into mnemonic fragments. */
- #if SIZE == 1
-@@ -164,6 +168,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- #define BTI_C hint 34
-
- /* Start and end a function. */
-+#if __ELF__
- .macro STARTFN name
- .text
- .balign 16
-@@ -187,6 +192,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- cbz w(tmp0), \label
- .endm
-
-+#else
-+.macro STARTFN name
-+ .text
-+ .balign 16
-+ .private_extern _\name
-+_\name:
-+ .cfi_startproc
-+ BTI_C
-+.endm
-+
-+.macro ENDFN name
-+ .cfi_endproc
-+.endm
-+
-+/* Branch to LABEL if LSE is disabled. */
-+.macro JUMP_IF_NOT_LSE label
-+ adrp x(tmp0), ___aarch64_have_lse_atomics@PAGE
-+ ldrb w(tmp0), [x(tmp0), ___aarch64_have_lse_atomics@PAGEOFF]
-+ cbz w(tmp0), \label
-+.endm
-+
-+#endif
-+
- #ifdef L_cas
-
- STARTFN NAME(cas)
-diff --git a/libgcc/config/aarch64/sfp-machine.h b/libgcc/config/aarch64/sfp-machine.h
-index 97c38a3..b35e2c5 100644
---- a/libgcc/config/aarch64/sfp-machine.h
-+++ b/libgcc/config/aarch64/sfp-machine.h
-@@ -124,6 +124,27 @@ void __sfp_handle_exceptions (int);
-
-
- /* Define ALIASNAME as a strong alias for NAME. */
-+#if defined __APPLE__
-+/* Mach-O doesn't support aliasing, so we build a secondary function for
-+ the alias - we need to do a bit of a dance to find out what the type of
-+ the arguments is and then apply that to the secondary function.
-+ If these functions ever return anything but CMPtype we need to revisit
-+ this... */
-+typedef float alias_HFtype __attribute__ ((mode (HF)));
-+typedef float alias_SFtype __attribute__ ((mode (SF)));
-+typedef float alias_DFtype __attribute__ ((mode (DF)));
-+typedef float alias_TFtype __attribute__ ((mode (TF)));
-+#define ALIAS_SELECTOR \
-+ CMPtype (*) (alias_HFtype, alias_HFtype): (alias_HFtype) 0, \
-+ CMPtype (*) (alias_SFtype, alias_SFtype): (alias_SFtype) 0, \
-+ CMPtype (*) (alias_DFtype, alias_DFtype): (alias_DFtype) 0, \
-+ CMPtype (*) (alias_TFtype, alias_TFtype): (alias_TFtype) 0
-+#define strong_alias(name, aliasname) \
-+ CMPtype aliasname (__typeof (_Generic (name, ALIAS_SELECTOR)) a, \
-+ __typeof (_Generic (name, ALIAS_SELECTOR)) b) \
-+ { return name (a, b); }
-+#else
- # define strong_alias(name, aliasname) _strong_alias(name, aliasname)
- # define _strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
-+#endif
-diff --git b/libgcc/config/aarch64/t-darwin b/libgcc/config/aarch64/t-darwin
-new file mode 100644
-index 0000000..f6ecda7
---- /dev/null
-+++ b/libgcc/config/aarch64/t-darwin
-@@ -0,0 +1,7 @@
-+# Ensure we have a suitable minimum OS version.
-+
-+HOST_LIBGCC2_CFLAGS += -mmacosx-version-min=11.0
-+
-+LIB2_SIDITI_CONV_FUNCS = yes
-+
-+BUILD_LIBGCCS1 =
-diff --git b/libgcc/config/aarch64/t-heap-trampoline b/libgcc/config/aarch64/t-heap-trampoline
-new file mode 100644
-index 0000000..6468fb8
---- /dev/null
-+++ b/libgcc/config/aarch64/t-heap-trampoline
-@@ -0,0 +1,20 @@
-+# Copyright The GNU Toolchain Authors.
-+
-+# This file is part of GCC.
-+#
-+# GCC is free software; you can redistribute it and/or modify it
-+# under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3, or (at your option)
-+# any later version.
-+#
-+# GCC is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with GCC; see the file COPYING3. If not see
-+# .
-+
-+LIB2ADDEH += $(srcdir)/config/aarch64/heap-trampoline.c
-+LIB2ADDEHSHARED += $(srcdir)/config/aarch64/heap-trampoline.c
-diff --git b/libgcc/config/i386/heap-trampoline.c b/libgcc/config/i386/heap-trampoline.c
-new file mode 100644
-index 0000000..2e8df1c
---- /dev/null
-+++ b/libgcc/config/i386/heap-trampoline.c
-@@ -0,0 +1,255 @@
-+/* Copyright The GNU Toolchain Authors. */
-+
-+/* libc is required to allocate trampolines. */
-+#ifndef inhibit_libc
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#if __APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101400
-+/* For pthread_jit_write_protect_np */
-+#include
-+#endif
-+
-+/* HEAP_T_ATTR is provided to allow targets to build the exported functions
-+ as weak definitions. */
-+#ifndef HEAP_T_ATTR
-+# define HEAP_T_ATTR
-+#endif
-+
-+void *allocate_trampoline_page (void);
-+int get_trampolines_per_page (void);
-+struct tramp_ctrl_data *allocate_tramp_ctrl (struct tramp_ctrl_data *parent);
-+void *allocate_trampoline_page (void);
-+
-+void __gcc_nested_func_ptr_created (void *chain, void *func, void **dst);
-+void __gcc_nested_func_ptr_deleted (void);
-+
-+#if __x86_64__
-+
-+#ifdef __LP64__
-+static const uint8_t trampoline_insns[] = {
-+#if defined __CET__ && (__CET__ & 1) != 0
-+ /* endbr64. */
-+ 0xf3, 0x0f, 0x1e, 0xfa,
-+#endif
-+
-+ /* movabsq $,%r11 */
-+ 0x49, 0xbb,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+
-+ /* movabsq $,%r10 */
-+ 0x49, 0xba,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+
-+ /* rex.WB jmpq *%r11 */
-+ 0x41, 0xff, 0xe3,
-+
-+ /* Pad to the multiple of 4 bytes. */
-+ 0x90
-+};
-+#else
-+static const uint8_t trampoline_insns[] = {
-+#if defined __CET__ && (__CET__ & 1) != 0
-+ /* endbr64. */
-+ 0xf3, 0x0f, 0x1e, 0xfa,
-+#endif
-+
-+ /* movl $,%r11d */
-+ 0x41, 0xbb,
-+ 0x00, 0x00, 0x00, 0x00,
-+
-+ /* movl $,%r10d */
-+ 0x41, 0xba,
-+ 0x00, 0x00, 0x00, 0x00,
-+
-+ /* rex.WB jmpq *%r11 */
-+ 0x41, 0xff, 0xe3,
-+
-+ /* Pad to the multiple of 4 bytes. */
-+ 0x90
-+};
-+#endif
-+
-+union ix86_trampoline {
-+ uint8_t insns[sizeof(trampoline_insns)];
-+
-+ struct __attribute__((packed)) fields {
-+#if defined __CET__ && (__CET__ & 1) != 0
-+ uint8_t endbr64[4];
-+#endif
-+ uint8_t insn_0[2];
-+ void *func_ptr;
-+ uint8_t insn_1[2];
-+ void *chain_ptr;
-+ uint8_t insn_2[3];
-+ uint8_t pad;
-+ } fields;
-+};
-+
-+#elif __i386__
-+
-+static const uint8_t trampoline_insns[] = {
-+ /* movl $,%ecx */
-+ 0xb9,
-+ 0x00, 0x00, 0x00, 0x00,
-+
-+ /* jmpl -. */
-+ 0xe9,
-+ 0x00, 0x00, 0x00, 0x00,
-+};
-+
-+union ix86_trampoline {
-+ uint8_t insns[sizeof(trampoline_insns)];
-+
-+ struct __attribute__((packed)) fields {
-+ uint8_t insn_0[1];
-+ void *chain_ptr;
-+ uint8_t insn_1[1];
-+ uintptr_t func_offset;
-+ } fields;
-+};
-+
-+#else
-+#error unsupported architecture/ABI
-+#endif
-+
-+struct tramp_ctrl_data
-+{
-+ struct tramp_ctrl_data *prev;
-+
-+ int free_trampolines;
-+
-+ /* This will be pointing to an executable mmap'ed page. */
-+ union ix86_trampoline *trampolines;
-+};
-+
-+int
-+get_trampolines_per_page (void)
-+{
-+ return getpagesize() / sizeof(union ix86_trampoline);
-+}
-+
-+static _Thread_local struct tramp_ctrl_data *tramp_ctrl_curr = NULL;
-+
-+void *
-+allocate_trampoline_page (void)
-+{
-+ void *page;
-+
-+#if defined(__gnu_linux__)
-+ page = mmap (0, getpagesize (), PROT_WRITE | PROT_EXEC,
-+ MAP_ANON | MAP_PRIVATE, 0, 0);
-+#elif __APPLE__
-+# if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101400
-+ page = mmap (0, getpagesize (), PROT_WRITE | PROT_EXEC,
-+ MAP_ANON | MAP_PRIVATE | MAP_JIT, 0, 0);
-+# else
-+ page = mmap (0, getpagesize (), PROT_WRITE | PROT_EXEC,
-+ MAP_ANON | MAP_PRIVATE, 0, 0);
-+# endif
-+#else
-+ page = MAP_FAILED;
-+#endif
-+
-+ return page;
-+}
-+
-+struct tramp_ctrl_data *
-+allocate_tramp_ctrl (struct tramp_ctrl_data *parent)
-+{
-+ struct tramp_ctrl_data *p = malloc (sizeof (struct tramp_ctrl_data));
-+ if (p == NULL)
-+ return NULL;
-+
-+ p->trampolines = allocate_trampoline_page ();
-+
-+ if (p->trampolines == MAP_FAILED)
-+ return NULL;
-+
-+ p->prev = parent;
-+ p->free_trampolines = get_trampolines_per_page();
-+
-+ return p;
-+}
-+
-+HEAP_T_ATTR
-+void
-+__gcc_nested_func_ptr_created (void *chain, void *func, void **dst)
-+{
-+ if (tramp_ctrl_curr == NULL)
-+ {
-+ tramp_ctrl_curr = allocate_tramp_ctrl (NULL);
-+ if (tramp_ctrl_curr == NULL)
-+ abort ();
-+ }
-+
-+ if (tramp_ctrl_curr->free_trampolines == 0)
-+ {
-+ void *tramp_ctrl = allocate_tramp_ctrl (tramp_ctrl_curr);
-+ if (!tramp_ctrl)
-+ abort ();
-+
-+ tramp_ctrl_curr = tramp_ctrl;
-+ }
-+
-+ union ix86_trampoline *trampoline
-+ = &tramp_ctrl_curr->trampolines[get_trampolines_per_page ()
-+ - tramp_ctrl_curr->free_trampolines];
-+
-+#if __APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101400
-+ /* Disable write protection for the MAP_JIT regions in this thread (see
-+ https://developer.apple.com/documentation/apple-silicon/porting-just-in-time-compilers-to-apple-silicon) */
-+ pthread_jit_write_protect_np (0);
-+#endif
-+
-+ memcpy (trampoline->insns, trampoline_insns,
-+ sizeof(trampoline_insns));
-+ trampoline->fields.chain_ptr = chain;
-+#if __x86_64__
-+ trampoline->fields.func_ptr = func;
-+#elif __i386__
-+ uintptr_t off_add = (uintptr_t) &trampoline->fields.func_offset;
-+ off_add += 4;
-+ trampoline->fields.func_offset = (uintptr_t)func - off_add;
-+#endif
-+
-+#if __APPLE__ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101400
-+ /* Re-enable write protection. */
-+ pthread_jit_write_protect_np (1);
-+#endif
-+
-+ tramp_ctrl_curr->free_trampolines -= 1;
-+
-+ __builtin___clear_cache ((void *)trampoline->insns,
-+ ((void *)trampoline->insns + sizeof(trampoline->insns)));
-+
-+ *dst = &trampoline->insns;
-+}
-+
-+HEAP_T_ATTR
-+void
-+__gcc_nested_func_ptr_deleted (void)
-+{
-+ if (tramp_ctrl_curr == NULL)
-+ abort ();
-+
-+ tramp_ctrl_curr->free_trampolines += 1;
-+
-+ if (tramp_ctrl_curr->free_trampolines == get_trampolines_per_page ())
-+ {
-+ if (tramp_ctrl_curr->prev == NULL)
-+ return;
-+
-+ munmap (tramp_ctrl_curr->trampolines, getpagesize());
-+ struct tramp_ctrl_data *prev = tramp_ctrl_curr->prev;
-+ free (tramp_ctrl_curr);
-+ tramp_ctrl_curr = prev;
-+ }
-+}
-+
-+#endif /* !inhibit_libc */
-diff --git a/libgcc/config/i386/t-darwin b/libgcc/config/i386/t-darwin
-index 4c18da1..84efe35 100644
---- a/libgcc/config/i386/t-darwin
-+++ b/libgcc/config/i386/t-darwin
-@@ -5,5 +5,3 @@ LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi _floatditf _floatunditf
- # Extra symbols for this port.
- SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-darwin.ver
-
--# Build a legacy libgcc_s.1
--BUILD_LIBGCCS1 = YES
-diff --git b/libgcc/config/i386/t-heap-trampoline b/libgcc/config/i386/t-heap-trampoline
-new file mode 100644
-index 0000000..5cd11f5
---- /dev/null
-+++ b/libgcc/config/i386/t-heap-trampoline
-@@ -0,0 +1,20 @@
-+# Copyright The GNU Toolchain Authors.
-+
-+# This file is part of GCC.
-+#
-+# GCC is free software; you can redistribute it and/or modify it
-+# under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3, or (at your option)
-+# any later version.
-+#
-+# GCC is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with GCC; see the file COPYING3. If not see
-+# .
-+
-+LIB2ADDEH += $(srcdir)/config/i386/heap-trampoline.c
-+LIB2ADDEHSHARED += $(srcdir)/config/i386/heap-trampoline.c
-diff --git a/libgcc/config/rs6000/t-darwin b/libgcc/config/rs6000/t-darwin
-index 183d0df..8b513bd 100644
---- a/libgcc/config/rs6000/t-darwin
-+++ b/libgcc/config/rs6000/t-darwin
-@@ -56,6 +56,3 @@ unwind-dw2_s.o: HOST_LIBGCC2_CFLAGS += -maltivec
- unwind-dw2.o: HOST_LIBGCC2_CFLAGS += -maltivec
-
- LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
--
--# Build a legacy libgcc_s.1
--BUILD_LIBGCCS1 = YES
-diff --git b/libgcc/config/rs6000/t-darwin-libgccs1 b/libgcc/config/rs6000/t-darwin-libgccs1
-new file mode 100644
-index 0000000..7dc252e
---- /dev/null
-+++ b/libgcc/config/rs6000/t-darwin-libgccs1
-@@ -0,0 +1,3 @@
-+
-+# Build a legacy libgcc_s.1
-+BUILD_LIBGCCS1 = YES
-\ No newline at end of file
-diff --git a/libgcc/config/t-darwin b/libgcc/config/t-darwin
-index a3bb70c..0f65b54 100644
---- a/libgcc/config/t-darwin
-+++ b/libgcc/config/t-darwin
-@@ -51,5 +51,18 @@ LIB2ADDEH = $(srcdir)/unwind-dw2.c \
- # Do not build a shared unwind lib by default.
- LIBEHSOBJS=
-
-+# Make heap trampoline helpers weak definitions so that we can merge them from
-+# multiple DSOs.
-+heap-trampoline.o: HOST_LIBGCC2_CFLAGS += \
-+ -DHEAP_T_ATTR='__attribute__((__weak__,__visibility__("default")))'
-+heap-trampoline_s.o: HOST_LIBGCC2_CFLAGS += \
-+ -DHEAP_T_ATTR='__attribute__((__weak__,__visibility__("default")))'
-+
-+# Make a heap trampoline support CRT so that it can be linked optionally, use
-+# the shared version so that we can link with DSOs.
-+libheapt_w.a: heap-trampoline_s.o
-+ $(AR_CREATE_FOR_TARGET) $@ $<
-+ $(RANLIB_FOR_TARGET) $@
-+
- # Symbols for all the sub-ports.
- SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/libgcc-libsystem.ver
-diff --git b/libgcc/config/t-darwin-min-11 b/libgcc/config/t-darwin-min-11
-new file mode 100644
-index 0000000..4009d41
---- /dev/null
-+++ b/libgcc/config/t-darwin-min-11
-@@ -0,0 +1,3 @@
-+# Support building with -mmacosx-version-min back to macOS 11.
-+DARWIN_MIN_LIB_VERSION = -mmacosx-version-min=11
-+DARWIN_MIN_CRT_VERSION = -mmacosx-version-min=11
-diff --git b/libgcc/config/t-darwin-rpath b/libgcc/config/t-darwin-rpath
-new file mode 100644
-index 0000000..e73d7f3
---- /dev/null
-+++ b/libgcc/config/t-darwin-rpath
-@@ -0,0 +1,2 @@
-+# Use @rpath and add a search path to exes and dylibs that depend on this.
-+SHLIB_RPATH = @rpath
-diff --git a/libgcc/config/t-slibgcc-darwin b/libgcc/config/t-slibgcc-darwin
-index cb0cbbd..da48868 100644
---- a/libgcc/config/t-slibgcc-darwin
-+++ b/libgcc/config/t-slibgcc-darwin
-@@ -1,4 +1,4 @@
--# Build a shared libgcc library with the darwin linker.
-+# Build a shared libgcc library able to use embedded runpaths.
-
- SHLIB_SOVERSION = 1.1
- SHLIB_SO_MINVERSION = 1
-@@ -6,7 +6,6 @@ SHLIB_VERSTRING = -compatibility_version $(SHLIB_SO_MINVERSION) \
- -current_version $(SHLIB_SOVERSION)
- SHLIB_EXT = .dylib
- SHLIB_LC = -lSystem
--SHLIB_INSTALL_DIR = $(slibdir)
-
- SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
- SHLIB_MKMAP_OPTS = -v leading_underscore=1
-@@ -23,11 +22,16 @@ SHLIB_SONAME = @shlib_base_name@$(SHLIB_EXT)
- # subdir. The code under MULTIBUILDTOP combines these into a single FAT
- # library, that is what we eventually install.
-
-+# When enable_darwin_at_rpath is true, use @rpath instead of $(slibdir) for
-+# this and dylibs that depend on this. So this def must come first and be
-+# overridden in a make fragment that depends on the rpath setting.
-+SHLIB_RPATH = $(slibdir)
-+
- SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib -nodefaultlibs \
-- -install_name $(SHLIB_INSTALL_DIR)/$(SHLIB_INSTALL_NAME) \
-+ -install_name $(SHLIB_RPATH)/$(SHLIB_INSTALL_NAME) \
- -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME) \
- -Wl,-exported_symbols_list,$(SHLIB_MAP) \
-- $(SHLIB_VERSTRING) \
-+ $(SHLIB_VERSTRING) -nodefaultrpaths \
- @multilib_flags@ @shlib_objs@ $(SHLIB_LC)
-
- # we do our own thing
-@@ -63,9 +67,9 @@ EHS_INSTNAME = libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)
- libgcc_ehs$(SHLIB_EXT): $(LIBEHSOBJS) $(extra-parts)
- mkdir -p $(MULTIDIR)
- $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib -nodefaultlibs \
-- -install_name $(SHLIB_INSTALL_DIR)/$(EHS_INSTNAME) \
-+ -install_name $(SHLIB_RPATH)/$(EHS_INSTNAME) \
- -o $(MULTIDIR)/libgcc_ehs$(SHLIB_EXT) $(SHLIB_VERSTRING) \
-- $(LIBEHSOBJS) $(SHLIB_LC)
-+ -nodefaultrpaths $(LIBEHSOBJS) $(SHLIB_LC)
-
- all: libgcc_ehs$(SHLIB_EXT)
-
-@@ -122,12 +126,12 @@ libgcc_s.1.dylib: all-multi libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
- cp ../$${mlib}/libgcc/$${mlib}/libgcc_ehs$(SHLIB_EXT) \
- ./libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
- arch=`$(LIPO) -info libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} | sed -e 's/.*:\ //'` ; \
-- $(CC) -arch $${arch} -nodefaultlibs -dynamiclib \
-+ $(CC) -arch $${arch} -nodefaultlibs -dynamiclib -nodefaultrpaths \
- -o libgcc_s.1$(SHLIB_EXT)_T_$${mlib} \
- -Wl,-reexport_library,libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
- -Wl,-reexport_library,libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
-- -install_name $(SHLIB_INSTALL_DIR)/libgcc_s.1.dylib \
-- -compatibility_version 1 -current_version 1 ; \
-+ -install_name $(SHLIB_RPATH)/libgcc_s.1.dylib \
-+ -compatibility_version 1 -current_version 1.1 ; \
- done
- $(LIPO) -output libgcc_s.1$(SHLIB_EXT) -create libgcc_s.1$(SHLIB_EXT)_T*
- rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
-@@ -141,13 +145,13 @@ libgcc_s.1.dylib: all-multi libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)
- cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
- ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
- arch=`$(LIPO) -info libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} | sed -e 's/.*:\ //'` ; \
-- $(CC) -arch $${arch} -nodefaultlibs -dynamiclib \
-+ $(CC) -arch $${arch} -nodefaultlibs -dynamiclib -nodefaultrpaths \
- -o libgcc_s.1$(SHLIB_EXT)_T_$${mlib} \
- -Wl,-reexport_library,libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
- -lSystem \
- -Wl,-reexported_symbols_list,$(srcdir)/config/darwin-unwind.ver \
-- -install_name $(SHLIB_INSTALL_DIR)/libgcc_s.1.dylib \
-- -compatibility_version 1 -current_version 1 ; \
-+ -install_name $(SHLIB_RPATH)/libgcc_s.1.dylib \
-+ -compatibility_version 1 -current_version 1.1 ; \
- done
- $(LIPO) -output libgcc_s.1$(SHLIB_EXT) -create libgcc_s.1$(SHLIB_EXT)_T*
- rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
-diff --git a/libgcc/config.host b/libgcc/config.host
-index c94d69d..e96b913 100644
---- a/libgcc/config.host
-+++ b/libgcc/config.host
-@@ -82,7 +82,7 @@ m32c*-*-*)
- cpu_type=m32c
- tmake_file=t-fdpbit
- ;;
--aarch64*-*-*)
-+aarch64*-*-* | arm64*-*-*)
- cpu_type=aarch64
- ;;
- alpha*-*-*)
-@@ -233,16 +233,21 @@ case ${host} in
- ;;
- esac
- tmake_file="$tmake_file t-slibgcc-darwin"
-- # newer toolsets produce warnings when building for unsupported versions.
- case ${host} in
-- *-*-darwin1[89]* | *-*-darwin2* )
-- tmake_file="t-darwin-min-8 $tmake_file"
-+ x86_64-*-darwin2[0-3]*)
-+ tmake_file="t-darwin-min-11 t-darwin-libgccs1 $tmake_file"
-+ ;;
-+ *-*-darwin2*)
-+ tmake_file="t-darwin-min-11 t-darwin-libgccs1 $tmake_file"
-+ ;;
-+ *-*-darwin1[89]*)
-+ tmake_file="t-darwin-min-8 t-darwin-libgccs1 $tmake_file"
- ;;
- *-*-darwin9* | *-*-darwin1[0-7]*)
-- tmake_file="t-darwin-min-5 $tmake_file"
-+ tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file"
- ;;
- *-*-darwin[4-8]*)
-- tmake_file="t-darwin-min-1 $tmake_file"
-+ tmake_file="t-darwin-min-1 t-darwin-libgccs1 $tmake_file"
- ;;
- *)
- # Fall back to configuring for the oldest system known to work with
-@@ -251,7 +256,29 @@ case ${host} in
- echo "Warning: libgcc configured to support macOS 10.5" 1>&2
- ;;
- esac
-- extra_parts="crt3.o libd10-uwfef.a crttms.o crttme.o libemutls_w.a"
-+ # We are not using libtool to build the libs here, so we need to replicate
-+ # a little of the logic around setting Darwin rpaths. Setting an explicit
-+ # yes or no is honoured, otherwise we choose a suitable default.
-+ # Sadly, this has to be kept in line with the rules in libtool.m4.
-+ # This make fragment will override the setting in t-slibgcc-darwin so it
-+ # must appear after it.
-+ if test "x$enable_darwin_at_rpath" = "x"; then
-+ echo "enable_darwin_at_rpath is unset" 1>&2
-+ case ${host} in
-+ *-darwin[45678]*) ;;
-+ *-darwin9* | *-darwin1[01234]*) ;; # We might default these on later.
-+ *-darwin*)
-+ echo "but is needed after macOS 10.11 (setting it on)" 1>&2
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ esac
-+ else
-+ echo "enable_darwin_at_rpath is '$enable_darwin_at_rpath'" 1>&2
-+ fi
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ tmake_file="$tmake_file t-darwin-rpath "
-+ fi
-+ extra_parts="crt3.o crttms.o crttme.o libemutls_w.a "
- ;;
- *-*-dragonfly*)
- tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip"
-@@ -395,6 +422,15 @@ aarch64*-*-elf | aarch64*-*-rtems*)
- tmake_file="${tmake_file} t-dfprules"
- md_unwind_header=aarch64/aarch64-unwind.h
- ;;
-+aarch64*-*-darwin*)
-+ extra_parts="$extra_parts crtfastmath.o libheapt_w.a"
-+ tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
-+ tmake_file="${tmake_file} ${cpu_type}/t-lse "
-+ tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp "
-+ tmake_file="${tmake_file} t-crtfm t-dfprules"
-+ tmake_file="${tmake_file} ${cpu_type}/t-heap-trampoline"
-+ md_unwind_header=aarch64/aarch64-unwind.h
-+ ;;
- aarch64*-*-freebsd*)
- extra_parts="$extra_parts crtfastmath.o"
- tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
-@@ -423,6 +459,7 @@ aarch64*-*-linux*)
- tmake_file="${tmake_file} ${cpu_type}/t-lse t-slibgcc-libgcc"
- tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
- tmake_file="${tmake_file} t-dfprules"
-+ tmake_file="${tmake_file} ${cpu_type}/t-heap-trampoline"
- ;;
- aarch64*-*-vxworks7*)
- extra_parts="$extra_parts crtfastmath.o"
-@@ -691,12 +728,18 @@ hppa*-*-netbsd*)
- i[34567]86-*-darwin*)
- tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
- tm_file="$tm_file i386/darwin-lib.h"
-- extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
-+ extra_parts="$extra_parts libd10-uwfef.a "
-+ extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o"
-+ extra_parts="$extra_parts crtfastmath.o libheapt_w.a"
-+ tmake_file="${tmake_file} i386/t-heap-trampoline"
- ;;
- x86_64-*-darwin*)
- tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
- tm_file="$tm_file i386/darwin-lib.h"
-- extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
-+ extra_parts="$extra_parts libd10-uwfef.a "
-+ extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o"
-+ extra_parts="$extra_parts crtfastmath.o libheapt_w.a"
-+ tmake_file="${tmake_file} i386/t-heap-trampoline"
- ;;
- i[34567]86-*-elfiamcu)
- tmake_file="$tmake_file i386/t-crtstuff t-softfp-sfdftf i386/32/t-softfp i386/32/t-iamcu i386/t-softfp t-softfp t-dfprules"
-@@ -746,6 +789,7 @@ i[34567]86-*-linux*)
- tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules"
- tm_file="${tm_file} i386/elf-lib.h"
- md_unwind_header=i386/linux-unwind.h
-+ tmake_file="${tmake_file} i386/t-heap-trampoline"
- ;;
- i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-kopensolaris*-gnu)
- extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
-@@ -763,6 +807,7 @@ x86_64-*-linux*)
- tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules"
- tm_file="${tm_file} i386/elf-lib.h"
- md_unwind_header=i386/linux-unwind.h
-+ tmake_file="${tmake_file} i386/t-heap-trampoline"
- ;;
- x86_64-*-kfreebsd*-gnu)
- extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
-@@ -1171,12 +1216,14 @@ powerpc-*-darwin*)
- # We build the darwin10 EH shim for Rosetta (running on x86 machines).
- tm_file="$tm_file i386/darwin-lib.h"
- tmake_file="$tmake_file rs6000/t-ppc64-fp rs6000/t-ibm-ldouble"
-+ extra_parts="$extra_parts libd10-uwfef.a "
- extra_parts="$extra_parts crt2.o crt3_2.o libef_ppc.a dw_ppc.o"
- ;;
- powerpc64-*-darwin*)
- # We build the darwin10 EH shim for Rosetta (running on x86 machines).
- tm_file="$tm_file i386/darwin-lib.h"
- tmake_file="$tmake_file rs6000/t-darwin64 rs6000/t-ibm-ldouble"
-+ extra_parts="$extra_parts libd10-uwfef.a "
- extra_parts="$extra_parts crt2.o crt3_2.o libef_ppc.a dw_ppc.o"
- ;;
- powerpc*-*-freebsd*)
-diff --git a/libgcc/libgcc-std.ver.in b/libgcc/libgcc-std.ver.in
-index c4f87a5..ad854bf 100644
---- a/libgcc/libgcc-std.ver.in
-+++ b/libgcc/libgcc-std.ver.in
-@@ -1944,3 +1944,9 @@ GCC_7.0.0 {
- __PFX__divmoddi4
- __PFX__divmodti4
- }
-+
-+%inherit GCC_14.0.0 GCC_7.0.0
-+GCC_14.0.0 {
-+ __gcc_nested_func_ptr_created
-+ __gcc_nested_func_ptr_deleted
-+}
-diff --git a/libgcc/libgcc2.h b/libgcc/libgcc2.h
-index 3ec9bbd..a7a5dff 100644
---- a/libgcc/libgcc2.h
-+++ b/libgcc/libgcc2.h
-@@ -29,6 +29,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- #pragma GCC visibility push(default)
- #endif
-
-+extern void __gcc_nested_func_ptr_created (void *, void *, void **);
-+extern void __gcc_nested_func_ptr_deleted (void);
-+
- extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t);
- extern void __clear_cache (void *, void *);
- extern void __eprintf (const char *, const char *, unsigned int, const char *)
-diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
-index 454ad12..3d21373 100644
---- a/libgfortran/Makefile.am
-+++ b/libgfortran/Makefile.am
-@@ -37,6 +37,11 @@ else
- version_arg =
- version_dep =
- endif
-+extra_darwin_ldflags_libgfortran = @extra_ldflags_libgfortran@
-+if ENABLE_DARWIN_AT_RPATH
-+extra_darwin_ldflags_libgfortran += -Wc,-nodefaultrpaths
-+extra_darwin_ldflags_libgfortran += -Wl,-rpath,@loader_path
-+endif
-
- gfor_c_HEADERS = ISO_Fortran_binding.h
- gfor_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include
-@@ -50,7 +55,7 @@ libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
- libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
- $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
- $(HWCAP_LDFLAGS) \
-- $(LIBM) $(extra_ldflags_libgfortran) \
-+ $(LIBM) $(extra_darwin_ldflags_libgfortran) \
- $(version_arg) -Wc,-shared-libgcc
- libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
-
-diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
-index 23df076..ed0d05f 100644
---- a/libgfortran/Makefile.in
-+++ b/libgfortran/Makefile.in
-@@ -91,8 +91,10 @@ POST_UNINSTALL = :
- build_triplet = @build@
- host_triplet = @host@
- target_triplet = @target@
--@LIBGFOR_MINIMAL_TRUE@am__append_1 = -DLIBGFOR_MINIMAL
--@LIBGFOR_MINIMAL_FALSE@am__append_2 = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
-+@LIBGFOR_MINIMAL_TRUE@am__append_2 = -DLIBGFOR_MINIMAL
-+@LIBGFOR_MINIMAL_FALSE@am__append_3 = \
- @LIBGFOR_MINIMAL_FALSE@io/close.c \
- @LIBGFOR_MINIMAL_FALSE@io/file_pos.c \
- @LIBGFOR_MINIMAL_FALSE@io/format.c \
-@@ -110,7 +112,7 @@ target_triplet = @target@
- @LIBGFOR_MINIMAL_FALSE@io/fbuf.c \
- @LIBGFOR_MINIMAL_FALSE@io/async.c
-
--@LIBGFOR_MINIMAL_FALSE@am__append_3 = \
-+@LIBGFOR_MINIMAL_FALSE@am__append_4 = \
- @LIBGFOR_MINIMAL_FALSE@intrinsics/access.c \
- @LIBGFOR_MINIMAL_FALSE@intrinsics/c99_functions.c \
- @LIBGFOR_MINIMAL_FALSE@intrinsics/chdir.c \
-@@ -143,9 +145,9 @@ target_triplet = @target@
- @LIBGFOR_MINIMAL_FALSE@intrinsics/umask.c \
- @LIBGFOR_MINIMAL_FALSE@intrinsics/unlink.c
-
--@IEEE_SUPPORT_TRUE@am__append_4 = ieee/ieee_helper.c
--@LIBGFOR_MINIMAL_TRUE@am__append_5 = runtime/minimal.c
--@LIBGFOR_MINIMAL_FALSE@am__append_6 = \
-+@IEEE_SUPPORT_TRUE@am__append_5 = ieee/ieee_helper.c
-+@LIBGFOR_MINIMAL_TRUE@am__append_6 = runtime/minimal.c
-+@LIBGFOR_MINIMAL_FALSE@am__append_7 = \
- @LIBGFOR_MINIMAL_FALSE@runtime/backtrace.c \
- @LIBGFOR_MINIMAL_FALSE@runtime/convert_char.c \
- @LIBGFOR_MINIMAL_FALSE@runtime/environ.c \
-@@ -157,7 +159,7 @@ target_triplet = @target@
-
-
- # dummy sources for libtool
--@onestep_TRUE@am__append_7 = libgfortran_c.c libgfortran_f.f90
-+@onestep_TRUE@am__append_8 = libgfortran_c.c libgfortran_f.f90
- subdir = .
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
- am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
-@@ -589,7 +591,7 @@ AMTAR = @AMTAR@
-
- # Some targets require additional compiler options for IEEE compatibility.
- AM_CFLAGS = @AM_CFLAGS@ -fcx-fortran-rules $(SECTION_FLAGS) \
-- $(IEEE_FLAGS) $(am__append_1)
-+ $(IEEE_FLAGS) $(am__append_2)
- AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
- AM_FCFLAGS = @AM_FCFLAGS@ $(IEEE_FLAGS)
- AR = @AR@
-@@ -749,6 +751,8 @@ gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER)
- @LIBGFOR_USE_SYMVER_FALSE@version_dep =
- @LIBGFOR_USE_SYMVER_GNU_TRUE@@LIBGFOR_USE_SYMVER_TRUE@version_dep = gfortran.ver
- @LIBGFOR_USE_SYMVER_SUN_TRUE@@LIBGFOR_USE_SYMVER_TRUE@version_dep = gfortran.ver-sun gfortran.ver
-+extra_darwin_ldflags_libgfortran = @extra_ldflags_libgfortran@ \
-+ $(am__append_1)
- gfor_c_HEADERS = ISO_Fortran_binding.h
- gfor_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include
- LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \
-@@ -760,7 +764,7 @@ libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
- libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
- $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
- $(HWCAP_LDFLAGS) \
-- $(LIBM) $(extra_ldflags_libgfortran) \
-+ $(LIBM) $(extra_darwin_ldflags_libgfortran) \
- $(version_arg) -Wc,-shared-libgcc
-
- libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
-@@ -781,7 +785,7 @@ AM_CPPFLAGS = -iquote$(srcdir)/io -I$(srcdir)/$(MULTISRCTOP)../gcc \
- -I$(MULTIBUILDTOP)../libbacktrace \
- -I../libbacktrace
-
--gfor_io_src = io/size_from_kind.c $(am__append_2)
-+gfor_io_src = io/size_from_kind.c $(am__append_3)
- gfor_io_headers = \
- io/io.h \
- io/fbuf.h \
-@@ -803,7 +807,7 @@ gfor_helper_src = intrinsics/associated.c intrinsics/abort.c \
- intrinsics/selected_int_kind.f90 \
- intrinsics/selected_real_kind.f90 intrinsics/trigd.c \
- intrinsics/unpack_generic.c runtime/in_pack_generic.c \
-- runtime/in_unpack_generic.c $(am__append_3) $(am__append_4)
-+ runtime/in_unpack_generic.c $(am__append_4) $(am__append_5)
- @IEEE_SUPPORT_TRUE@gfor_ieee_helper_src = ieee/ieee_helper.c
- @IEEE_SUPPORT_FALSE@gfor_ieee_src =
- @IEEE_SUPPORT_TRUE@gfor_ieee_src = \
-@@ -812,8 +816,8 @@ gfor_helper_src = intrinsics/associated.c intrinsics/abort.c \
- @IEEE_SUPPORT_TRUE@ieee/ieee_features.F90
-
- gfor_src = runtime/bounds.c runtime/compile_options.c runtime/memory.c \
-- runtime/string.c runtime/select.c $(am__append_5) \
-- $(am__append_6)
-+ runtime/string.c runtime/select.c $(am__append_6) \
-+ $(am__append_7)
- i_all_c = \
- $(srcdir)/generated/all_l1.c \
- $(srcdir)/generated/all_l2.c \
-@@ -1653,7 +1657,7 @@ intrinsics/random_init.f90
-
- BUILT_SOURCES = $(gfor_built_src) $(gfor_built_specific_src) \
- $(gfor_built_specific2_src) $(gfor_misc_specifics) \
-- $(am__append_7)
-+ $(am__append_8)
- prereq_SRC = $(gfor_src) $(gfor_built_src) $(gfor_io_src) \
- $(gfor_helper_src) $(gfor_ieee_src) $(gfor_io_headers) $(gfor_specific_src)
-
-diff --git a/libgfortran/configure b/libgfortran/configure
-index d7c3a5e..feb75f6 100755
---- a/libgfortran/configure
-+++ b/libgfortran/configure
-@@ -654,6 +654,8 @@ extra_ldflags_libgfortran
- ac_ct_FC
- FCFLAGS
- FC
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- lt_host_flags
-@@ -823,6 +825,7 @@ enable_static
- with_pic
- enable_fast_install
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_largefile
- enable_libquadmath_support
- with_gcc_major_version_only
-@@ -1478,6 +1481,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --disable-largefile omit support for large files
- --disable-libquadmath-support
- disable libquadmath support for Fortran
-@@ -9235,7 +9241,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -10945,6 +10951,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10962,9 +11011,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12791,7 +12844,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12794 "configure"
-+#line 12847 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12897,7 +12950,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12900 "configure"
-+#line 12953 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13299,6 +13352,14 @@ esac
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
- #AC_MSG_NOTICE([====== Finished libtool configuration]) ; sleep 10
-
- # We need gfortran to compile parts of the library
-@@ -14942,6 +15003,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_FC=no
- hardcode_direct_FC=no
- hardcode_automatic_FC=yes
-@@ -14959,9 +15063,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -16234,9 +16342,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- # extra LD Flags which are required for targets
-+extra_ldflags_libgfortran=
- case "${host}" in
-- *-darwin*)
-- # Darwin needs -single_module when linking libgfortran
-+ *-*-darwin[4567]*)
-+ # Earlier Darwin needs -single_module when linking libgfortran
- extra_ldflags_libgfortran=-Wl,-single_module
- ;;
- esac
-@@ -31597,6 +31706,10 @@ if test -z "${HAVE_HWCAP_TRUE}" && test -z "${HAVE_HWCAP_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_HWCAP\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${IEEE_SUPPORT_TRUE}" && test -z "${IEEE_SUPPORT_FALSE}"; then
- as_fn_error $? "conditional \"IEEE_SUPPORT\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
-index 07b9a48..4ee63cf 100644
---- a/libgfortran/configure.ac
-+++ b/libgfortran/configure.ac
-@@ -282,6 +282,7 @@ LT_LIB_M
- ACX_LT_HOST_FLAGS
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
- #AC_MSG_NOTICE([====== Finished libtool configuration]) ; sleep 10
-
- # We need gfortran to compile parts of the library
-@@ -290,9 +291,10 @@ FC="$GFORTRAN"
- AC_PROG_FC(gfortran)
-
- # extra LD Flags which are required for targets
-+extra_ldflags_libgfortran=
- case "${host}" in
-- *-darwin*)
-- # Darwin needs -single_module when linking libgfortran
-+ *-*-darwin[[4567]]*)
-+ # Earlier Darwin needs -single_module when linking libgfortran
- extra_ldflags_libgfortran=-Wl,-single_module
- ;;
- esac
-diff --git a/libgm2/Makefile.am b/libgm2/Makefile.am
-index 95df3ed..aa35e74 100644
---- a/libgm2/Makefile.am
-+++ b/libgm2/Makefile.am
-@@ -46,6 +46,12 @@ SUBDIRS = libm2min libm2log libm2cor libm2iso libm2pim
- GM2_BUILDDIR := $(shell pwd)
- gm2_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include
-
-+if ENABLE_DARWIN_AT_RPATH
-+DARWIN_AT_RPATH=yes
-+else
-+DARWIN_AT_RPATH=yes
-+endif
-+
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
- # friends when we are called from the top level Makefile.
-@@ -91,7 +97,8 @@ AM_MAKEFLAGS = \
- "WERROR=$(WERROR)" \
- "TARGET_LIB_PATH=$(TARGET_LIB_PATH)" \
- "TARGET_LIB_PATH_libgm2=$(TARGET_LIB_PATH_libgm2)" \
-- "LIBTOOL=$(GM2_BUILDDIR)/libtool"
-+ "LIBTOOL=$(GM2_BUILDDIR)/libtool" \
-+ "DARWIN_AT_RPATH=$(DARWIN_AT_RPATH)"
-
- # Subdir rules rely on $(FLAGS_TO_PASS)
- FLAGS_TO_PASS = $(AM_MAKEFLAGS)
-diff --git a/libgm2/Makefile.in b/libgm2/Makefile.in
-index 2b9592b..f97f6d0 100644
---- a/libgm2/Makefile.in
-+++ b/libgm2/Makefile.in
-@@ -90,15 +90,15 @@ host_triplet = @host@
- target_triplet = @target@
- subdir = .
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
-- $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-- $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-- $(top_srcdir)/../config/acx.m4 \
-+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/multi.m4 \
- $(top_srcdir)/../config/no-executables.m4 \
-- $(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
-+ $(top_srcdir)/../config/override.m4 \
-+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
-+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
-+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac
- am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
- DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
-@@ -344,6 +344,8 @@ GM2_SRC = $(GCC_DIR)/m2
- SUBDIRS = libm2min libm2log libm2cor libm2iso libm2pim
- GM2_BUILDDIR := $(shell pwd)
- gm2_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include
-+@ENABLE_DARWIN_AT_RPATH_FALSE@DARWIN_AT_RPATH = yes
-+@ENABLE_DARWIN_AT_RPATH_TRUE@DARWIN_AT_RPATH = yes
-
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
-@@ -390,7 +392,8 @@ AM_MAKEFLAGS = \
- "WERROR=$(WERROR)" \
- "TARGET_LIB_PATH=$(TARGET_LIB_PATH)" \
- "TARGET_LIB_PATH_libgm2=$(TARGET_LIB_PATH_libgm2)" \
-- "LIBTOOL=$(GM2_BUILDDIR)/libtool"
-+ "LIBTOOL=$(GM2_BUILDDIR)/libtool" \
-+ "DARWIN_AT_RPATH=$(DARWIN_AT_RPATH)"
-
-
- # Subdir rules rely on $(FLAGS_TO_PASS)
-diff --git a/libgm2/aclocal.m4 b/libgm2/aclocal.m4
-index c352303..832065f 100644
---- a/libgm2/aclocal.m4
-+++ b/libgm2/aclocal.m4
-@@ -1187,14 +1187,14 @@ AC_SUBST([am__tar])
- AC_SUBST([am__untar])
- ]) # _AM_PROG_TAR
-
--m4_include([../libtool.m4])
--m4_include([../ltoptions.m4])
--m4_include([../ltsugar.m4])
--m4_include([../ltversion.m4])
--m4_include([../lt~obsolete.m4])
- m4_include([../config/acx.m4])
- m4_include([../config/depstand.m4])
- m4_include([../config/lead-dot.m4])
- m4_include([../config/multi.m4])
- m4_include([../config/no-executables.m4])
- m4_include([../config/override.m4])
-+m4_include([../libtool.m4])
-+m4_include([../ltoptions.m4])
-+m4_include([../ltsugar.m4])
-+m4_include([../ltversion.m4])
-+m4_include([../lt~obsolete.m4])
-diff --git a/libgm2/configure b/libgm2/configure
-index bf35b40..64f4f80 100755
---- a/libgm2/configure
-+++ b/libgm2/configure
-@@ -649,6 +649,8 @@ GM2_FOR_TARGET
- CC_FOR_BUILD
- enable_static
- enable_shared
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- CXXCPP
- OTOOL64
- OTOOL
-@@ -806,6 +808,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- with_gcc_major_version_only
- '
- ac_precious_vars='build_alias
-@@ -1456,6 +1459,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -6611,10 +6617,6 @@ fi
-
-
-
--enable_dlopen=yes
--
--
--
- case `pwd` in
- *\ * | *\ *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-@@ -9185,7 +9187,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9233,6 +9235,8 @@ done
-
-
-
-+ enable_dlopen=no
-+
-
- enable_win32_dll=no
-
-@@ -10896,6 +10900,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10913,9 +10960,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12742,7 +12793,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12745 "configure"
-+#line 12796 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12848,7 +12899,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12851 "configure"
-+#line 12902 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13730,6 +13781,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -13747,12 +13841,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -16126,6 +16228,21 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-+enable_dlopen=yes
-+
-+
-+
-+
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+
-+
-
-
- if test "${multilib}" = "yes"; then
-@@ -20314,6 +20431,10 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${BUILD_PIMLIB_TRUE}" && test -z "${BUILD_PIMLIB_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_PIMLIB\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libgm2/configure.ac b/libgm2/configure.ac
-index 9386bbf..305d2dc 100644
---- a/libgm2/configure.ac
-+++ b/libgm2/configure.ac
-@@ -213,8 +213,12 @@ AC_PATH_PROG(PERL, perl, perl-not-found-in-path-error)
- AC_PROG_MAKE_SET
- AC_PROG_INSTALL
-
--AC_LIBTOOL_DLOPEN
- AM_PROG_LIBTOOL
-+LT_INIT
-+AC_LIBTOOL_DLOPEN
-+
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-
-diff --git a/libgm2/libm2cor/Makefile.am b/libgm2/libm2cor/Makefile.am
-index ae96b4b..a08e6a9 100644
---- a/libgm2/libm2cor/Makefile.am
-+++ b/libgm2/libm2cor/Makefile.am
-@@ -123,6 +123,10 @@ libm2cor_la_link_flags = -Wl,-undefined,dynamic_lookup
- else
- libm2cor_la_link_flags =
- endif
-+if ENABLE_DARWIN_AT_RPATH
-+libm2cor_la_link_flags += -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
-+
- libm2cor_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2cor_la_link_flags)
- BUILT_SOURCES = SYSTEM.def
- CLEANFILES = SYSTEM.def
-diff --git a/libgm2/libm2cor/Makefile.in b/libgm2/libm2cor/Makefile.in
-index 8daf0ea..9e14c90 100644
---- a/libgm2/libm2cor/Makefile.in
-+++ b/libgm2/libm2cor/Makefile.in
-@@ -105,17 +105,18 @@ POST_UNINSTALL = :
- build_triplet = @build@
- host_triplet = @host@
- target_triplet = @target@
-+@BUILD_CORLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
- subdir = libm2cor
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
-- $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-- $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-- $(top_srcdir)/../config/acx.m4 \
-+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/multi.m4 \
- $(top_srcdir)/../config/no-executables.m4 \
-- $(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
-+ $(top_srcdir)/../config/override.m4 \
-+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
-+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
-+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac
- am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
- DIST_COMMON = $(srcdir)/Makefile.am
-@@ -469,8 +470,10 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
- @BUILD_CORLIB_TRUE@ -fm2-pathname=m2iso -I$(GM2_SRC)/gm2-libs-iso \
- @BUILD_CORLIB_TRUE@ -fm2-g -g -Wcase-enum -Wreturn-type -fcase -fm2-prefix=m2cor
-
--@BUILD_CORLIB_TRUE@@TARGET_DARWIN_FALSE@libm2cor_la_link_flags =
--@BUILD_CORLIB_TRUE@@TARGET_DARWIN_TRUE@libm2cor_la_link_flags = -Wl,-undefined,dynamic_lookup
-+@BUILD_CORLIB_TRUE@@TARGET_DARWIN_FALSE@libm2cor_la_link_flags = \
-+@BUILD_CORLIB_TRUE@@TARGET_DARWIN_FALSE@ $(am__append_1)
-+@BUILD_CORLIB_TRUE@@TARGET_DARWIN_TRUE@libm2cor_la_link_flags = -Wl,-undefined,dynamic_lookup \
-+@BUILD_CORLIB_TRUE@@TARGET_DARWIN_TRUE@ $(am__append_1)
- @BUILD_CORLIB_TRUE@libm2cor_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2cor_la_link_flags)
- @BUILD_CORLIB_TRUE@BUILT_SOURCES = SYSTEM.def
- @BUILD_CORLIB_TRUE@CLEANFILES = SYSTEM.def
-diff --git a/libgm2/libm2iso/Makefile.am b/libgm2/libm2iso/Makefile.am
-index 90d344f..e88c4b6 100644
---- a/libgm2/libm2iso/Makefile.am
-+++ b/libgm2/libm2iso/Makefile.am
-@@ -197,6 +197,10 @@ libm2iso_la_link_flags = -Wl,-undefined,dynamic_lookup
- else
- libm2iso_la_link_flags =
- endif
-+if ENABLE_DARWIN_AT_RPATH
-+libm2iso_la_link_flags += -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
-+
- libm2iso_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2iso_la_link_flags)
- CLEANFILES = SYSTEM.def
- BUILT_SOURCES = SYSTEM.def
-diff --git a/libgm2/libm2iso/Makefile.in b/libgm2/libm2iso/Makefile.in
-index 8d6443d..7be5ad1 100644
---- a/libgm2/libm2iso/Makefile.in
-+++ b/libgm2/libm2iso/Makefile.in
-@@ -105,17 +105,18 @@ POST_UNINSTALL = :
- build_triplet = @build@
- host_triplet = @host@
- target_triplet = @target@
-+@BUILD_ISOLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
- subdir = libm2iso
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
-- $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-- $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-- $(top_srcdir)/../config/acx.m4 \
-+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/multi.m4 \
- $(top_srcdir)/../config/no-executables.m4 \
-- $(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
-+ $(top_srcdir)/../config/override.m4 \
-+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
-+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
-+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac
- am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
- DIST_COMMON = $(srcdir)/Makefile.am
-@@ -570,8 +571,10 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
- @BUILD_ISOLIB_TRUE@ -fm2-pathname=m2pim -I$(GM2_SRC)/gm2-libs \
- @BUILD_ISOLIB_TRUE@ -fiso -fextended-opaque -fm2-g -g -Wcase-enum -Wreturn-type -fcase -fm2-prefix=m2iso
-
--@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_FALSE@libm2iso_la_link_flags =
--@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_TRUE@libm2iso_la_link_flags = -Wl,-undefined,dynamic_lookup
-+@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_FALSE@libm2iso_la_link_flags = \
-+@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_FALSE@ $(am__append_1)
-+@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_TRUE@libm2iso_la_link_flags = -Wl,-undefined,dynamic_lookup \
-+@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_TRUE@ $(am__append_1)
- @BUILD_ISOLIB_TRUE@libm2iso_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2iso_la_link_flags)
- @BUILD_ISOLIB_TRUE@CLEANFILES = SYSTEM.def
- @BUILD_ISOLIB_TRUE@BUILT_SOURCES = SYSTEM.def
-diff --git a/libgm2/libm2log/Makefile.am b/libgm2/libm2log/Makefile.am
-index 27f3840..25f5f9b 100644
---- a/libgm2/libm2log/Makefile.am
-+++ b/libgm2/libm2log/Makefile.am
-@@ -142,6 +142,9 @@ libm2log_la_link_flags = -Wl,-undefined,dynamic_lookup
- else
- libm2log_la_link_flags =
- endif
-+if ENABLE_DARWIN_AT_RPATH
-+libm2log_la_link_flags += -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
- libm2log_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2log_la_link_flags)
- BUILT_SOURCES = ../libm2pim/SYSTEM.def
-
-diff --git a/libgm2/libm2log/Makefile.in b/libgm2/libm2log/Makefile.in
-index 2188f9e..f82ddb6 100644
---- a/libgm2/libm2log/Makefile.in
-+++ b/libgm2/libm2log/Makefile.in
-@@ -105,17 +105,18 @@ POST_UNINSTALL = :
- build_triplet = @build@
- host_triplet = @host@
- target_triplet = @target@
-+@BUILD_LOGLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
- subdir = libm2log
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
-- $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-- $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-- $(top_srcdir)/../config/acx.m4 \
-+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/multi.m4 \
- $(top_srcdir)/../config/no-executables.m4 \
-- $(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
-+ $(top_srcdir)/../config/override.m4 \
-+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
-+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
-+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac
- am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
- DIST_COMMON = $(srcdir)/Makefile.am
-@@ -478,8 +479,10 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
- @BUILD_LOGLIB_TRUE@ -fm2-pathname=m2iso -I$(GM2_SRC)/gm2-libs-iso \
- @BUILD_LOGLIB_TRUE@ -Wcase-enum -Wreturn-type -fcase -fm2-prefix=m2log
-
--@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_FALSE@libm2log_la_link_flags =
--@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_TRUE@libm2log_la_link_flags = -Wl,-undefined,dynamic_lookup
-+@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_FALSE@libm2log_la_link_flags = \
-+@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_FALSE@ $(am__append_1)
-+@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_TRUE@libm2log_la_link_flags = -Wl,-undefined,dynamic_lookup \
-+@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_TRUE@ $(am__append_1)
- @BUILD_LOGLIB_TRUE@libm2log_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2log_la_link_flags)
- @BUILD_LOGLIB_TRUE@BUILT_SOURCES = ../libm2pim/SYSTEM.def
- @BUILD_LOGLIB_TRUE@M2LIBDIR = /m2/m2log/
-diff --git a/libgm2/libm2min/Makefile.am b/libgm2/libm2min/Makefile.am
-index 1ff1600..2141176 100644
---- a/libgm2/libm2min/Makefile.am
-+++ b/libgm2/libm2min/Makefile.am
-@@ -113,6 +113,9 @@ libm2min_la_link_flags = -Wl,-undefined,dynamic_lookup
- else
- libm2min_la_link_flags =
- endif
-+if ENABLE_DARWIN_AT_RPATH
-+libm2min_la_link_flags += -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
- libm2min_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2min_la_link_flags)
- BUILT_SOURCES = SYSTEM.def
- CLEANFILES = SYSTEM.def
-diff --git a/libgm2/libm2min/Makefile.in b/libgm2/libm2min/Makefile.in
-index 42cba0e..ed3312d 100644
---- a/libgm2/libm2min/Makefile.in
-+++ b/libgm2/libm2min/Makefile.in
-@@ -105,17 +105,18 @@ POST_UNINSTALL = :
- build_triplet = @build@
- host_triplet = @host@
- target_triplet = @target@
-+@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
- subdir = libm2min
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
-- $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-- $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-- $(top_srcdir)/../config/acx.m4 \
-+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/multi.m4 \
- $(top_srcdir)/../config/no-executables.m4 \
-- $(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
-+ $(top_srcdir)/../config/override.m4 \
-+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
-+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
-+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac
- am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
- DIST_COMMON = $(srcdir)/Makefile.am
-@@ -442,8 +443,10 @@ libm2min_la_M2FLAGS = \
- -fm2-pathname=m2pim -I$(GM2_SRC)/gm2-libs -fno-exceptions \
- -fno-m2-plugin -fno-scaffold-dynamic -fno-scaffold-main -fm2-prefix=m2min
-
--@TARGET_DARWIN_FALSE@libm2min_la_link_flags =
--@TARGET_DARWIN_TRUE@libm2min_la_link_flags = -Wl,-undefined,dynamic_lookup
-+@TARGET_DARWIN_FALSE@libm2min_la_link_flags = $(am__append_1)
-+@TARGET_DARWIN_TRUE@libm2min_la_link_flags = \
-+@TARGET_DARWIN_TRUE@ -Wl,-undefined,dynamic_lookup \
-+@TARGET_DARWIN_TRUE@ $(am__append_1)
- libm2min_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2min_la_link_flags)
- BUILT_SOURCES = SYSTEM.def
- CLEANFILES = SYSTEM.def
-diff --git a/libgm2/libm2pim/Makefile.am b/libgm2/libm2pim/Makefile.am
-index ac172b9..61d6c81 100644
---- a/libgm2/libm2pim/Makefile.am
-+++ b/libgm2/libm2pim/Makefile.am
-@@ -175,6 +175,9 @@ libm2pim_la_link_flags = -Wl,-undefined,dynamic_lookup
- else
- libm2pim_la_link_flags =
- endif
-+if ENABLE_DARWIN_AT_RPATH
-+libm2pim_la_link_flags += -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
- libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2pim_la_link_flags)
- BUILT_SOURCES = SYSTEM.def
- CLEANFILES = SYSTEM.def
-diff --git a/libgm2/libm2pim/Makefile.in b/libgm2/libm2pim/Makefile.in
-index 4c2d574..0f3a6fe 100644
---- a/libgm2/libm2pim/Makefile.in
-+++ b/libgm2/libm2pim/Makefile.in
-@@ -105,17 +105,18 @@ POST_UNINSTALL = :
- build_triplet = @build@
- host_triplet = @host@
- target_triplet = @target@
-+@BUILD_PIMLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
- subdir = libm2pim
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
-- $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-- $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-- $(top_srcdir)/../config/acx.m4 \
-+am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/depstand.m4 \
- $(top_srcdir)/../config/lead-dot.m4 \
- $(top_srcdir)/../config/multi.m4 \
- $(top_srcdir)/../config/no-executables.m4 \
-- $(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
-+ $(top_srcdir)/../config/override.m4 \
-+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
-+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
-+ $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac
- am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
- DIST_COMMON = $(srcdir)/Makefile.am
-@@ -539,8 +540,10 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
- @BUILD_PIMLIB_TRUE@ -fm2-pathname=m2iso -I$(GM2_SRC)/gm2-libs-iso \
- @BUILD_PIMLIB_TRUE@ -fm2-g -g -Wcase-enum -Wreturn-type -fcase -fm2-prefix=m2pim
-
--@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_FALSE@libm2pim_la_link_flags =
--@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_TRUE@libm2pim_la_link_flags = -Wl,-undefined,dynamic_lookup
-+@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_FALSE@libm2pim_la_link_flags = \
-+@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_FALSE@ $(am__append_1)
-+@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_TRUE@libm2pim_la_link_flags = -Wl,-undefined,dynamic_lookup \
-+@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_TRUE@ $(am__append_1)
- @BUILD_PIMLIB_TRUE@libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2pim_la_link_flags)
- @BUILD_PIMLIB_TRUE@BUILT_SOURCES = SYSTEM.def
- @BUILD_PIMLIB_TRUE@CLEANFILES = SYSTEM.def
-diff --git a/libgo/configure b/libgo/configure
-index a607dbf..72d46c3 100755
---- a/libgo/configure
-+++ b/libgo/configure
-@@ -708,6 +708,8 @@ glibgo_toolexecdir
- WERROR
- WARN_FLAGS
- CC_FOR_BUILD
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- CPP
-@@ -11544,7 +11546,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11547 "configure"
-+#line 11549 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11650,7 +11652,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11653 "configure"
-+#line 11655 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13779,6 +13781,14 @@ CC="$lt_save_CC"
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
- CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
-
-@@ -16386,6 +16396,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${USE_LIBFFI_TRUE}" && test -z "${USE_LIBFFI_FALSE}"; then
- as_fn_error $? "conditional \"USE_LIBFFI\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libgo/configure.ac b/libgo/configure.ac
-index a59aa09..6f1ac32 100644
---- a/libgo/configure.ac
-+++ b/libgo/configure.ac
-@@ -53,6 +53,7 @@ AC_LIBTOOL_DLOPEN
- AM_PROG_LIBTOOL
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
- AC_SUBST(CC_FOR_BUILD)
-diff --git a/libgomp/Makefile.am b/libgomp/Makefile.am
-index 428f7a9..ceb8c91 100644
---- a/libgomp/Makefile.am
-+++ b/libgomp/Makefile.am
-@@ -53,9 +53,14 @@ else
- libgomp_version_script =
- libgomp_version_dep =
- endif
-+
- libgomp_version_info = -version-info $(libtool_VERSION)
-+if ENABLE_DARWIN_AT_RPATH
-+libgomp_darwin_rpath = -Wc,-nodefaultrpaths
-+libgomp_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
- libgomp_la_LDFLAGS = $(libgomp_version_info) $(libgomp_version_script) \
-- $(lt_host_flags)
-+ $(lt_host_flags) $(libgomp_darwin_rpath)
- libgomp_la_LIBADD =
- libgomp_la_DEPENDENCIES = $(libgomp_version_dep)
- libgomp_la_LINK = $(LINK) $(libgomp_la_LDFLAGS)
-diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in
-index f1afb5e..ef97186 100644
---- a/libgomp/Makefile.in
-+++ b/libgomp/Makefile.in
-@@ -535,8 +535,11 @@ nodist_toolexeclib_HEADERS = libgomp.spec
- @LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.ver
- @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.ver-sun
- libgomp_version_info = -version-info $(libtool_VERSION)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libgomp_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
- libgomp_la_LDFLAGS = $(libgomp_version_info) $(libgomp_version_script) \
-- $(lt_host_flags)
-+ $(lt_host_flags) $(libgomp_darwin_rpath)
-
- libgomp_la_LIBADD = $(DL_LIBS)
- libgomp_la_DEPENDENCIES = $(libgomp_version_dep)
-diff --git a/libgomp/configure b/libgomp/configure
-index 389500d..1c219c2 100755
---- a/libgomp/configure
-+++ b/libgomp/configure
-@@ -682,6 +682,8 @@ FC
- MAINT
- MAINTAINER_MODE_FALSE
- MAINTAINER_MODE_TRUE
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- lt_host_flags
-@@ -822,6 +824,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_maintainer_mode
- enable_linux_futex
- enable_tls
-@@ -1477,6 +1480,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
-@@ -7621,7 +7627,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9594,6 +9600,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9611,9 +9660,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -11419,7 +11472,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11422 "configure"
-+#line 11475 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11525,7 +11578,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11528 "configure"
-+#line 11581 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11786,6 +11839,14 @@ esac
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-@@ -13461,6 +13522,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_FC=no
- hardcode_direct_FC=no
- hardcode_automatic_FC=yes
-@@ -13478,9 +13582,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -17129,6 +17237,10 @@ if test -z "${BUILD_INFO_TRUE}" && test -z "${BUILD_INFO_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_INFO\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libgomp/configure.ac b/libgomp/configure.ac
-index dd88f20..5deba11 100644
---- a/libgomp/configure.ac
-+++ b/libgomp/configure.ac
-@@ -149,6 +149,7 @@ AM_PROG_LIBTOOL
- ACX_LT_HOST_FLAGS
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- AM_MAINTAINER_MODE
-
-diff --git a/libiberty/configure b/libiberty/configure
-index 860f981..b8a19c4 100755
---- a/libiberty/configure
-+++ b/libiberty/configure
-@@ -5258,8 +5258,8 @@ case "${enable_shared}" in
- *) shared=yes ;;
- esac
-
--# ...unless --enable-host-shared was passed from top-level config:
--if [ "${enable_host_shared}" = "yes" ]; then
-+# ...unless --enable-host-{shared,pie} was passed from top-level config:
-+if [ "${enable_host_shared}" = "yes" ] || [ "${enable_host_pie}" = "yes" ]; then
- shared=yes
- fi
-
-diff --git a/libiberty/configure.ac b/libiberty/configure.ac
-index 28d996f..6747a7b 100644
---- a/libiberty/configure.ac
-+++ b/libiberty/configure.ac
-@@ -233,8 +233,8 @@ case "${enable_shared}" in
- *) shared=yes ;;
- esac
-
--# ...unless --enable-host-shared was passed from top-level config:
--if [[ "${enable_host_shared}" = "yes" ]]; then
-+# ...unless --enable-host-{shared,pie} was passed from top-level config:
-+if [[ "${enable_host_shared}" = "yes" ]] || [[ "${enable_host_pie}" = "yes" ]]; then
- shared=yes
- fi
-
-diff --git a/libitm/Makefile.am b/libitm/Makefile.am
-index 3f31ad3..a25317b 100644
---- a/libitm/Makefile.am
-+++ b/libitm/Makefile.am
-@@ -54,7 +54,12 @@ libitm_version_info = -version-info $(libtool_VERSION)
- # want or need libstdc++.
- libitm_la_DEPENDENCIES = $(libitm_version_dep)
- libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
--libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
-+if ENABLE_DARWIN_AT_RPATH
-+libitm_darwin_rpath = -Wc,-nodefaultrpaths
-+libitm_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
-+libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script) \
-+ $(libitm_darwin_rpath)
-
- libitm_la_SOURCES = \
- aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc barrier.cc beginend.cc \
-diff --git a/libitm/Makefile.in b/libitm/Makefile.in
-index 7f53ea9..ed28db4 100644
---- a/libitm/Makefile.in
-+++ b/libitm/Makefile.in
-@@ -481,7 +481,12 @@ libitm_version_info = -version-info $(libtool_VERSION)
- # want or need libstdc++.
- libitm_la_DEPENDENCIES = $(libitm_version_dep)
- libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
--libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libitm_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
-+libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script) \
-+ $(libitm_darwin_rpath)
-+
- libitm_la_SOURCES = aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc \
- barrier.cc beginend.cc clone.cc eh_cpp.cc local.cc query.cc \
- retry.cc rwlock.cc useraction.cc util.cc sjlj.S tls.cc \
-diff --git a/libitm/config/aarch64/sjlj.S b/libitm/config/aarch64/sjlj.S
-index 0342516..2c27f46 100644
---- a/libitm/config/aarch64/sjlj.S
-+++ b/libitm/config/aarch64/sjlj.S
-@@ -57,10 +57,19 @@
-
- .text
- .align 2
-+#if __ELF__
- .global _ITM_beginTransaction
- .type _ITM_beginTransaction, %function
-
- _ITM_beginTransaction:
-+
-+#elif __MACH__
-+ .global __ITM_beginTransaction
-+
-+__ITM_beginTransaction:
-+
-+#endif
-+
- cfi_startproc
- CFI_PAC_KEY
- PAC_AND_BTI
-@@ -84,8 +93,13 @@ _ITM_beginTransaction:
-
- /* Invoke GTM_begin_transaction with the struct we just built. */
- mov x1, sp
-+#if __ELF__
- bl GTM_begin_transaction
--
-+#elif __MACH__
-+ bl _GTM_begin_transaction
-+#else
-+#error "unexpected object format"
-+#endif
- /* Return; we don't need to restore any of the call-saved regs. */
- ldp x29, x30, [sp], 11*16
- cfi_adjust_cfa_offset(-11*16)
-@@ -95,14 +109,23 @@ _ITM_beginTransaction:
- CFI_PAC_TOGGLE
- ret
- cfi_endproc
-+#if __ELF__
- .size _ITM_beginTransaction, . - _ITM_beginTransaction
-+#endif
-
- .align 2
-+#if __ELF__
- .global GTM_longjmp
- .hidden GTM_longjmp
- .type GTM_longjmp, %function
-
- GTM_longjmp:
-+
-+#elif __MACH__
-+ .private_extern _GTM_longjmp
-+
-+_GTM_longjmp:
-+#endif
- /* The first parameter becomes the return value (x0).
- The third parameter is ignored for now. */
- cfi_startproc
-@@ -126,7 +149,9 @@ GTM_longjmp:
- CFI_PAC_TOGGLE
- br x30
- cfi_endproc
-+#if __ELF__
- .size GTM_longjmp, . - GTM_longjmp
-+#endif
-
- /* GNU_PROPERTY_AARCH64_* macros from elf.h for use in asm code. */
- #define FEATURE_1_AND 0xc0000000
-diff --git a/libitm/configure b/libitm/configure
-index 6230c04..b941ecf 100755
---- a/libitm/configure
-+++ b/libitm/configure
-@@ -660,6 +660,8 @@ libtool_VERSION
- MAINT
- MAINTAINER_MODE_FALSE
- MAINTAINER_MODE_TRUE
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- CXXCPP
-@@ -810,6 +812,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_maintainer_mode
- enable_linux_futex
- enable_tls
-@@ -1462,6 +1465,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
-@@ -8283,7 +8289,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -10257,6 +10263,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10274,9 +10323,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12082,7 +12135,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12085 "configure"
-+#line 12138 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12188,7 +12241,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12191 "configure"
-+#line 12244 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13064,6 +13117,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -13081,12 +13177,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -15458,6 +15562,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-@@ -18216,6 +18328,10 @@ if test -z "${BUILD_INFO_TRUE}" && test -z "${BUILD_INFO_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_INFO\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libitm/configure.ac b/libitm/configure.ac
-index 050d6b2..d0d108e 100644
---- a/libitm/configure.ac
-+++ b/libitm/configure.ac
-@@ -157,6 +157,7 @@ AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
- AM_PROG_LIBTOOL
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- AM_MAINTAINER_MODE
-
-diff --git a/libitm/configure.tgt b/libitm/configure.tgt
-index 0362e61..2818a58 100644
---- a/libitm/configure.tgt
-+++ b/libitm/configure.tgt
-@@ -50,7 +50,7 @@ fi
- # Map the target cpu to an ARCH sub-directory. At the same time,
- # work out any special compilation flags as necessary.
- case "${target_cpu}" in
-- aarch64*) ARCH=aarch64 ;;
-+ aarch64* | arm64*) ARCH=aarch64 ;;
- alpha*) ARCH=alpha ;;
- rs6000 | powerpc*)
- XCFLAGS="${XCFLAGS} -mhtm"
-diff --git a/libobjc/configure b/libobjc/configure
-index 6da20b8..ce18c24 100755
---- a/libobjc/configure
-+++ b/libobjc/configure
-@@ -636,6 +636,9 @@ OBJC_BOEHM_GC_LIBS
- OBJC_BOEHM_GC_INCLUDES
- OBJC_BOEHM_GC
- OBJC_GCFLAGS
-+extra_ldflags_libobjc
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- SET_MAKE
- CPP
- OTOOL64
-@@ -667,7 +670,6 @@ RANLIB
- AR
- AS
- XCFLAGS
--extra_ldflags_libobjc
- lt_host_flags
- OBJEXT
- EXEEXT
-@@ -755,6 +757,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_tls
- enable_objc_gc
- with_target_bdw_gc
-@@ -1392,6 +1395,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-tls Use thread-local storage [default=yes]
- --enable-objc-gc enable use of Boehm's garbage collector with the GNU
- Objective-C runtime
-@@ -3431,17 +3437,6 @@ esac
-
-
-
--case "${host}" in
-- *-darwin*)
-- # Darwin needs -single_module when linking libobjc
-- extra_ldflags_libobjc='$(lt_host_flags) -Wl,-single_module'
-- ;;
-- *-cygwin*|*-mingw*)
-- # Tell libtool to build DLLs on Windows
-- extra_ldflags_libobjc='$(lt_host_flags)'
-- ;;
--esac
--
-
- # Add CET specific flags if CET is enabled
-
-@@ -6973,7 +6968,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -8950,6 +8945,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -8967,9 +9005,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -10796,7 +10838,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10799 "configure"
-+#line 10841 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10902,7 +10944,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10905 "configure"
-+#line 10947 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11174,6 +11216,38 @@ $as_echo "no" >&6; }
- fi
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+
-+# Must come after libtool is initialized.
-+case "${host}" in
-+ *-darwin[4567]*)
-+ # Earlier Darwin versions need -single_module when linking libobjc; they
-+ # do not support @rpath.
-+ extra_ldflags_libobjc='$(lt_host_flags) -Wl,-single_module'
-+ ;;
-+ *-darwin*)
-+ # Otherwise, single_module is the default and multi-module is ignored and
-+ # obsolete.
-+ extra_ldflags_libobjc='$(lt_host_flags)'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ extra_ldflags_libobjc="${extra_ldflags_libobjc} -Wc,-nodefaultrpaths"
-+ extra_ldflags_libobjc="${extra_ldflags_libobjc} -Wl,-rpath,@loader_path"
-+ fi
-+ ;;
-+ *-cygwin*|*-mingw*)
-+ # Tell libtool to build DLLs on Windows
-+ extra_ldflags_libobjc='$(lt_host_flags)'
-+ ;;
-+esac
-+
-+
- # -------
- # Headers
- # -------
-@@ -11915,6 +11989,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
-
- : "${CONFIG_STATUS=./config.status}"
- ac_write_fail=0
-diff --git a/libobjc/configure.ac b/libobjc/configure.ac
-index 9bd7d59..cb21ebb 100644
---- a/libobjc/configure.ac
-+++ b/libobjc/configure.ac
-@@ -148,17 +148,6 @@ m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
-
- # extra LD Flags which are required for targets
- ACX_LT_HOST_FLAGS
--case "${host}" in
-- *-darwin*)
-- # Darwin needs -single_module when linking libobjc
-- extra_ldflags_libobjc='$(lt_host_flags) -Wl,-single_module'
-- ;;
-- *-cygwin*|*-mingw*)
-- # Tell libtool to build DLLs on Windows
-- extra_ldflags_libobjc='$(lt_host_flags)'
-- ;;
--esac
--AC_SUBST(extra_ldflags_libobjc)
-
- # Add CET specific flags if CET is enabled
- GCC_CET_FLAGS(CET_FLAGS)
-@@ -183,6 +172,31 @@ AM_PROG_CC_C_O
-
- AC_PROG_MAKE_SET
-
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+
-+# Must come after libtool is initialized.
-+case "${host}" in
-+ *-darwin[[4567]]*)
-+ # Earlier Darwin versions need -single_module when linking libobjc; they
-+ # do not support @rpath.
-+ extra_ldflags_libobjc='$(lt_host_flags) -Wl,-single_module'
-+ ;;
-+ *-darwin*)
-+ # Otherwise, single_module is the default and multi-module is ignored and
-+ # obsolete.
-+ extra_ldflags_libobjc='$(lt_host_flags)'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ extra_ldflags_libobjc="${extra_ldflags_libobjc} -Wc,-nodefaultrpaths"
-+ extra_ldflags_libobjc="${extra_ldflags_libobjc} -Wl,-rpath,@loader_path"
-+ fi
-+ ;;
-+ *-cygwin*|*-mingw*)
-+ # Tell libtool to build DLLs on Windows
-+ extra_ldflags_libobjc='$(lt_host_flags)'
-+ ;;
-+esac
-+AC_SUBST(extra_ldflags_libobjc)
-+
- # -------
- # Headers
- # -------
-diff --git a/libphobos/configure b/libphobos/configure
-index 925c53c..2e8c06d 100755
---- a/libphobos/configure
-+++ b/libphobos/configure
-@@ -707,6 +707,8 @@ get_gcc_base_ver
- phobos_compiler_shared_flag
- phobos_compiler_pic_flag
- phobos_lt_pic_flag
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- OTOOL64
-@@ -838,6 +840,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- with_gcc_major_version_only
- enable_werror
- with_libatomic
-@@ -1490,6 +1493,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-werror turns on -Werror [default=no]
- --enable-version-specific-runtime-libs
- Specify that runtime libraries should be installed
-@@ -8244,7 +8250,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9949,6 +9955,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9966,9 +10015,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -11774,7 +11827,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11777 "configure"
-+#line 11830 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11880,7 +11933,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11883 "configure"
-+#line 11936 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13405,6 +13458,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_D=no
- hardcode_direct_D=no
- hardcode_automatic_D=yes
-@@ -13422,9 +13518,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_D="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_D="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_D="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_D="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_D="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_D="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -14026,6 +14126,14 @@ CFLAGS=$lt_save_CFLAGS
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
- # libtool variables for Phobos shared and position-independent compiles.
- #
-@@ -15750,6 +15858,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${DRUNTIME_CPU_AARCH64_TRUE}" && test -z "${DRUNTIME_CPU_AARCH64_FALSE}"; then
- as_fn_error $? "conditional \"DRUNTIME_CPU_AARCH64\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libphobos/configure.ac b/libphobos/configure.ac
-index 464f410..ba8b5ec 100644
---- a/libphobos/configure.ac
-+++ b/libphobos/configure.ac
-@@ -93,6 +93,7 @@ AM_PROG_LIBTOOL
- WITH_LOCAL_DRUNTIME([LT_LANG([D])], [])
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- # libtool variables for Phobos shared and position-independent compiles.
- #
-diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am
-index 8225ba4..1869488 100644
---- a/libphobos/libdruntime/Makefile.am
-+++ b/libphobos/libdruntime/Makefile.am
-@@ -128,8 +128,11 @@ ALL_DRUNTIME_SOURCES = $(DRUNTIME_DSOURCES) $(DRUNTIME_CSOURCES) \
- toolexeclib_LTLIBRARIES = libgdruntime.la
- libgdruntime_la_SOURCES = $(ALL_DRUNTIME_SOURCES)
- libgdruntime_la_LIBTOOLFLAGS =
-+if ENABLE_DARWIN_AT_RPATH
-+libgdruntime_darwin_rpath = -Wl,-rpath,@loader_path
-+endif
- libgdruntime_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../src,-Bgcc \
-- -version-info $(libtool_VERSION)
-+ -version-info $(libtool_VERSION) $(libgdruntime_darwin_rpath)
- libgdruntime_la_LIBADD = $(LIBATOMIC) $(LIBBACKTRACE)
- libgdruntime_la_DEPENDENCIES = $(DRTSTUFF)
- # Also override library link commands: This is not strictly
-diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in
-index 797d643..cd13090 100644
---- a/libphobos/libdruntime/Makefile.in
-+++ b/libphobos/libdruntime/Makefile.in
-@@ -810,8 +810,9 @@ ALL_DRUNTIME_SOURCES = $(DRUNTIME_DSOURCES) $(DRUNTIME_CSOURCES) \
- toolexeclib_LTLIBRARIES = libgdruntime.la
- libgdruntime_la_SOURCES = $(ALL_DRUNTIME_SOURCES)
- libgdruntime_la_LIBTOOLFLAGS =
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libgdruntime_darwin_rpath = -Wl,-rpath,@loader_path
- libgdruntime_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../src,-Bgcc \
-- -version-info $(libtool_VERSION)
-+ -version-info $(libtool_VERSION) $(libgdruntime_darwin_rpath)
-
- libgdruntime_la_LIBADD = $(LIBATOMIC) $(LIBBACKTRACE)
- libgdruntime_la_DEPENDENCIES = $(DRTSTUFF)
-diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am
-index 6474fca..f6521ed 100644
---- a/libphobos/src/Makefile.am
-+++ b/libphobos/src/Makefile.am
-@@ -44,8 +44,11 @@ toolexeclib_DATA = libgphobos.spec
- toolexeclib_LTLIBRARIES = libgphobos.la
- libgphobos_la_SOURCES = $(ALL_PHOBOS_SOURCES)
- libgphobos_la_LIBTOOLFLAGS =
-+if ENABLE_DARWIN_AT_RPATH
-+libgphobos_darwin_rpath = -Wl,-rpath,@loader_path
-+endif
- libgphobos_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../libdruntime/gcc \
-- -version-info $(libtool_VERSION)
-+ -version-info $(libtool_VERSION) $(libgphobos_darwin_rpath)
- if ENABLE_LIBDRUNTIME_ONLY
- libgphobos_la_LIBADD = ../libdruntime/libgdruntime_convenience.la
- else
-diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in
-index a622958..cc3358b 100644
---- a/libphobos/src/Makefile.in
-+++ b/libphobos/src/Makefile.in
-@@ -529,8 +529,9 @@ toolexeclib_DATA = libgphobos.spec
- toolexeclib_LTLIBRARIES = libgphobos.la
- libgphobos_la_SOURCES = $(ALL_PHOBOS_SOURCES)
- libgphobos_la_LIBTOOLFLAGS =
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libgphobos_darwin_rpath = -Wl,-rpath,@loader_path
- libgphobos_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../libdruntime/gcc \
-- -version-info $(libtool_VERSION)
-+ -version-info $(libtool_VERSION) $(libgphobos_darwin_rpath)
-
- @ENABLE_LIBDRUNTIME_ONLY_FALSE@libgphobos_la_LIBADD = \
- @ENABLE_LIBDRUNTIME_ONLY_FALSE@ ../libdruntime/libgdruntime_convenience.la $(LIBZ)
-diff --git a/libquadmath/Makefile.am b/libquadmath/Makefile.am
-index 35dffb4..f199adf 100644
---- a/libquadmath/Makefile.am
-+++ b/libquadmath/Makefile.am
-@@ -36,8 +36,13 @@ endif
-
- toolexeclib_LTLIBRARIES = libquadmath.la
- libquadmath_la_LIBADD =
-+
-+if ENABLE_DARWIN_AT_RPATH
-+libquadmath_darwin_rpath = -Wc,-nodefaultrpaths
-+libquadmath_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
- libquadmath_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-- $(version_arg) $(lt_host_flags) -lm
-+ $(version_arg) $(lt_host_flags) $(LIBM) $(libquadmath_darwin_rpath)
- libquadmath_la_DEPENDENCIES = $(version_dep) $(libquadmath_la_LIBADD)
-
- nodist_libsubinclude_HEADERS = quadmath.h quadmath_weak.h
-diff --git a/libquadmath/Makefile.in b/libquadmath/Makefile.in
-index 8c01121..7002575 100644
---- a/libquadmath/Makefile.in
-+++ b/libquadmath/Makefile.in
-@@ -355,6 +355,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
- INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
- LD = @LD@
- LDFLAGS = @LDFLAGS@
-+LIBM = @LIBM@
- LIBOBJS = @LIBOBJS@
- LIBS = @LIBS@
- LIBTOOL = @LIBTOOL@
-@@ -463,8 +464,10 @@ AUTOMAKE_OPTIONS = foreign info-in-builddir
- @BUILD_LIBQUADMATH_TRUE@@LIBQUAD_USE_SYMVER_SUN_TRUE@@LIBQUAD_USE_SYMVER_TRUE@version_dep = quadmath.map-sun
- @BUILD_LIBQUADMATH_TRUE@toolexeclib_LTLIBRARIES = libquadmath.la
- @BUILD_LIBQUADMATH_TRUE@libquadmath_la_LIBADD =
-+@BUILD_LIBQUADMATH_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@libquadmath_darwin_rpath = -Wc,-nodefaultrpaths \
-+@BUILD_LIBQUADMATH_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
- @BUILD_LIBQUADMATH_TRUE@libquadmath_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
--@BUILD_LIBQUADMATH_TRUE@ $(version_arg) $(lt_host_flags) -lm
-+@BUILD_LIBQUADMATH_TRUE@ $(version_arg) $(lt_host_flags) $(LIBM) $(libquadmath_darwin_rpath)
-
- @BUILD_LIBQUADMATH_TRUE@libquadmath_la_DEPENDENCIES = $(version_dep) $(libquadmath_la_LIBADD)
- @BUILD_LIBQUADMATH_TRUE@nodist_libsubinclude_HEADERS = quadmath.h quadmath_weak.h
-diff --git a/libquadmath/configure b/libquadmath/configure
-index 958fb87..c51d4f3 100755
---- a/libquadmath/configure
-+++ b/libquadmath/configure
-@@ -644,11 +644,14 @@ LIBQUAD_USE_SYMVER_GNU_FALSE
- LIBQUAD_USE_SYMVER_GNU_TRUE
- LIBQUAD_USE_SYMVER_FALSE
- LIBQUAD_USE_SYMVER_TRUE
-+LIBM
- toolexeclibdir
- toolexecdir
- MAINT
- MAINTAINER_MODE_FALSE
- MAINTAINER_MODE_TRUE
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- lt_host_flags
-@@ -785,6 +788,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_maintainer_mode
- with_toolexeclibdir
- enable_symvers
-@@ -1435,6 +1439,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
-@@ -7272,7 +7279,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -8984,6 +8991,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9001,9 +9051,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -10830,7 +10884,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10833 "configure"
-+#line 10887 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10936,7 +10990,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10939 "configure"
-+#line 10993 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11197,6 +11251,14 @@ esac
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-@@ -12161,6 +12223,20 @@ esac
-
-
-
-+# AC_CHECK_LIBM variant which avoids AC_CHECK_LIB (that doesn't work
-+# on bare metal). In the past we've used -lm in Makefile.am unconditionally,
-+# let's use it there unless target knows it doesn't need that.
-+LIBM=
-+case $host in
-+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
-+ # These system don't have libm, or don't need it
-+ ;;
-+*)
-+ LIBM=-lm
-+ ;;
-+esac
-+
-+
- for ac_header in fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h
- do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-@@ -13421,6 +13497,10 @@ if test -z "${BUILD_INFO_TRUE}" && test -z "${BUILD_INFO_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_INFO\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libquadmath/configure.ac b/libquadmath/configure.ac
-index eec4084..349be26 100644
---- a/libquadmath/configure.ac
-+++ b/libquadmath/configure.ac
-@@ -59,6 +59,7 @@ AM_PROG_LIBTOOL
- ACX_LT_HOST_FLAGS
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- AM_MAINTAINER_MODE
-
-@@ -121,6 +122,20 @@ esac
- AC_SUBST(toolexecdir)
- AC_SUBST(toolexeclibdir)
-
-+# AC_CHECK_LIBM variant which avoids AC_CHECK_LIB (that doesn't work
-+# on bare metal). In the past we've used -lm in Makefile.am unconditionally,
-+# let's use it there unless target knows it doesn't need that.
-+LIBM=
-+case $host in
-+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
-+ # These system don't have libm, or don't need it
-+ ;;
-+*)
-+ LIBM=-lm
-+ ;;
-+esac
-+AC_SUBST([LIBM])
-+
- AC_CHECK_HEADERS(fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h)
- LIBQUAD_CHECK_MATH_H_SIGNGAM
-
-diff --git a/libsanitizer/asan/Makefile.am b/libsanitizer/asan/Makefile.am
-index 4f802f7..223d3e0 100644
---- a/libsanitizer/asan/Makefile.am
-+++ b/libsanitizer/asan/Makefile.am
-@@ -60,7 +60,12 @@ libasan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
- endif
- libasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
-
--libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan)
-+if ENABLE_DARWIN_AT_RPATH
-+libasan_darwin_rpath = -Wc,-nodefaultrpaths
-+libasan_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
-+libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libasan) $(libasan_darwin_rpath)
-
- libasan_preinit.o: asan_preinit.o
- cp $< $@
-diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in
-index 7833a9a..e88e5e0 100644
---- a/libsanitizer/asan/Makefile.in
-+++ b/libsanitizer/asan/Makefile.in
-@@ -465,7 +465,12 @@ libasan_la_LIBADD = \
- $(top_builddir)/sanitizer_common/libsanitizer_common.la \
- $(top_builddir)/lsan/libsanitizer_lsan.la $(am__append_2) \
- $(am__append_3) $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libasan_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
-+libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libasan) $(libasan_darwin_rpath)
-+
-
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
-diff --git a/libsanitizer/configure b/libsanitizer/configure
-index e7984f9..dac8308 100755
---- a/libsanitizer/configure
-+++ b/libsanitizer/configure
-@@ -666,6 +666,8 @@ LSAN_SUPPORTED_FALSE
- LSAN_SUPPORTED_TRUE
- TSAN_SUPPORTED_FALSE
- TSAN_SUPPORTED_TRUE
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- CXXCPP
-@@ -817,6 +819,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_werror
- with_gcc_major_version_only
- enable_cet
-@@ -1471,6 +1474,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --disable-werror disable building with -Werror
- --enable-cet enable Intel CET in target libraries [default=auto]
-
-@@ -8853,7 +8859,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -10558,6 +10564,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10575,9 +10624,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12383,7 +12436,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12386 "configure"
-+#line 12439 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12489,7 +12542,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12492 "configure"
-+#line 12545 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13365,6 +13418,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -13382,12 +13478,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -15807,6 +15911,15 @@ esac
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+
- # The cast to long int works around a bug in the HP C Compiler
- # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
- # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-@@ -17205,6 +17318,10 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${TSAN_SUPPORTED_TRUE}" && test -z "${TSAN_SUPPORTED_FALSE}"; then
- as_fn_error $? "conditional \"TSAN_SUPPORTED\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac
-index 04cd891..5906c8d 100644
---- a/libsanitizer/configure.ac
-+++ b/libsanitizer/configure.ac
-@@ -85,6 +85,8 @@ esac
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+
- AC_CHECK_SIZEOF([void *])
-
- if test "${multilib}" = "yes"; then
-diff --git a/libsanitizer/hwasan/Makefile.am b/libsanitizer/hwasan/Makefile.am
-index 5a89189..11b1a9c 100644
---- a/libsanitizer/hwasan/Makefile.am
-+++ b/libsanitizer/hwasan/Makefile.am
-@@ -47,7 +47,11 @@ libhwasan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
- endif
- libhwasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
-
--libhwasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libhwasan)
-+if ENABLE_DARWIN_AT_RPATH
-+libhwasan_darwin_rpath = -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
-+libhwasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libhwasan) $(libhwasan_darwin_rpath)
-
- libhwasan_preinit.o: hwasan_preinit.o
- cp $< $@
-diff --git a/libsanitizer/hwasan/Makefile.in b/libsanitizer/hwasan/Makefile.in
-index 4240aa9..f9ec8f9 100644
---- a/libsanitizer/hwasan/Makefile.in
-+++ b/libsanitizer/hwasan/Makefile.in
-@@ -445,7 +445,10 @@ libhwasan_la_SOURCES = $(hwasan_files)
- libhwasan_la_LIBADD = \
- $(top_builddir)/sanitizer_common/libsanitizer_common.la \
- $(am__append_1) $(am__append_2) $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--libhwasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libhwasan)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libhwasan_darwin_rpath = -nodefaultrpaths -Wl,-rpath,@loader_path/
-+libhwasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libhwasan) $(libhwasan_darwin_rpath)
-+
-
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
-diff --git a/libsanitizer/lsan/Makefile.am b/libsanitizer/lsan/Makefile.am
-index 6ff28ff..7701b0e 100644
---- a/libsanitizer/lsan/Makefile.am
-+++ b/libsanitizer/lsan/Makefile.am
-@@ -41,8 +41,12 @@ if LIBBACKTRACE_SUPPORTED
- liblsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
- endif
- liblsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_liblsan)
--
-+if ENABLE_DARWIN_AT_RPATH
-+liblsan_darwin_rpath = -Wc,-nodefaultrpaths
-+liblsan_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
-+liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_liblsan) $(liblsan_darwin_rpath)
- liblsan_preinit.o: lsan_preinit.o
- cp $< $@
-
-diff --git a/libsanitizer/lsan/Makefile.in b/libsanitizer/lsan/Makefile.in
-index d8fd4ee..078edf0 100644
---- a/libsanitizer/lsan/Makefile.in
-+++ b/libsanitizer/lsan/Makefile.in
-@@ -413,7 +413,12 @@ liblsan_la_LIBADD = \
- $(top_builddir)/sanitizer_common/libsanitizer_common.la \
- $(top_builddir)/interception/libinterception.la \
- $(am__append_1) $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_liblsan)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@liblsan_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
-+liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_liblsan) $(liblsan_darwin_rpath)
-+
-
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
-@@ -788,7 +793,6 @@ uninstall-am: uninstall-nodist_toolexeclibHEADERS \
-
- .PRECIOUS: Makefile
-
--
- liblsan_preinit.o: lsan_preinit.o
- cp $< $@
-
-diff --git a/libsanitizer/tsan/Makefile.am b/libsanitizer/tsan/Makefile.am
-index da80743..01290b0 100644
---- a/libsanitizer/tsan/Makefile.am
-+++ b/libsanitizer/tsan/Makefile.am
-@@ -57,7 +57,11 @@ libtsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
- libtsan_la_DEPENDENCIES +=$(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
- endif
- libtsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libtsan)
-+if ENABLE_DARWIN_AT_RPATH
-+libtsan_darwin_rpath = -nodefaultrpaths -Wl,-rpath,@loader_path/
-+endif
-+libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libtsan) $(libtsan_darwin_rpath)
-
- libtsan_preinit.o: tsan_preinit.o
- cp $< $@
-diff --git a/libsanitizer/tsan/Makefile.in b/libsanitizer/tsan/Makefile.in
-index 3649883..9501158 100644
---- a/libsanitizer/tsan/Makefile.in
-+++ b/libsanitizer/tsan/Makefile.in
-@@ -464,7 +464,10 @@ libtsan_la_DEPENDENCIES = \
- $(top_builddir)/sanitizer_common/libsanitizer_common.la \
- $(top_builddir)/interception/libinterception.la \
- $(TSAN_TARGET_DEPENDENT_OBJECTS) $(am__append_2)
--libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libtsan)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libtsan_darwin_rpath = -nodefaultrpaths -Wl,-rpath,@loader_path/
-+libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libtsan) $(libtsan_darwin_rpath)
-+
-
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
-diff --git a/libsanitizer/ubsan/Makefile.am b/libsanitizer/ubsan/Makefile.am
-index d480f26..7769b34 100644
---- a/libsanitizer/ubsan/Makefile.am
-+++ b/libsanitizer/ubsan/Makefile.am
-@@ -36,7 +36,12 @@ if LIBBACKTRACE_SUPPORTED
- libubsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
- endif
- libubsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libubsan)
-+if ENABLE_DARWIN_AT_RPATH
-+libubsan_darwin_rpath = -Wc,-nodefaultrpaths
-+libubsan_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
-+libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libubsan) $(libubsan_darwin_rpath)
-
- # Use special rules for files that require RTTI support.
- ubsan_handlers_cxx.% ubsan_type_hash.% ubsan_type_hash_itanium.% : AM_CXXFLAGS += -frtti
-diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in
-index 92a8e38..7e51480 100644
---- a/libsanitizer/ubsan/Makefile.in
-+++ b/libsanitizer/ubsan/Makefile.in
-@@ -400,7 +400,12 @@ libubsan_la_SOURCES = $(ubsan_files)
- libubsan_la_LIBADD = \
- $(top_builddir)/sanitizer_common/libsanitizer_common.la \
- $(am__append_1) $(am__append_2) $(LIBSTDCXX_RAW_CXX_LDFLAGS)
--libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libubsan)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libubsan_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
-+libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-+ $(link_libubsan) $(libubsan_darwin_rpath)
-+
-
- # Work around what appears to be a GNU make bug handling MAKEFLAGS
- # values defined in terms of make variables, as is the case for CC and
-diff --git a/libssp/Makefile.am b/libssp/Makefile.am
-index 1636e43..f7ed2aa 100644
---- a/libssp/Makefile.am
-+++ b/libssp/Makefile.am
-@@ -49,8 +49,12 @@ libssp_la_SOURCES = \
- vsnprintf-chk.c vsprintf-chk.c
- libssp_la_LIBADD =
- libssp_la_DEPENDENCIES = $(version_dep) $(libssp_la_LIBADD)
-+if ENABLE_DARWIN_AT_RPATH
-+libssp_darwin_rpath = -Wc,-nodefaultrpaths
-+libssp_darwin_rpath += -Wl,-rpath,@loader_path
-+endif
- libssp_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-- $(version_arg) $(lt_host_flags)
-+ $(version_arg) $(lt_host_flags) $(libssp_darwin_rpath)
-
- libssp_nonshared_la_SOURCES = \
- ssp-local.c
-diff --git a/libssp/Makefile.in b/libssp/Makefile.in
-index bc8a0dc..1cf8636 100644
---- a/libssp/Makefile.in
-+++ b/libssp/Makefile.in
-@@ -376,8 +376,11 @@ libssp_la_SOURCES = \
-
- libssp_la_LIBADD =
- libssp_la_DEPENDENCIES = $(version_dep) $(libssp_la_LIBADD)
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libssp_darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
- libssp_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-- $(version_arg) $(lt_host_flags)
-+ $(version_arg) $(lt_host_flags) $(libssp_darwin_rpath)
-
- libssp_nonshared_la_SOURCES = \
- ssp-local.c
-diff --git a/libssp/configure b/libssp/configure
-index 492915d..72102be 100755
---- a/libssp/configure
-+++ b/libssp/configure
-@@ -636,6 +636,8 @@ LIBOBJS
- get_gcc_base_ver
- toolexeclibdir
- toolexecdir
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- lt_host_flags
-@@ -781,6 +783,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- with_toolexeclibdir
- with_gcc_major_version_only
- '
-@@ -1426,6 +1429,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -7458,7 +7464,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -9170,6 +9176,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -9187,9 +9236,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -11016,7 +11069,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11019 "configure"
-+#line 11072 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11122,7 +11175,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11125 "configure"
-+#line 11178 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11400,6 +11453,15 @@ fi
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-+
- # Calculate toolexeclibdir
- # Also toolexecdir, though it's only used in toolexeclibdir
- case ${version_specific_libs} in
-@@ -11609,6 +11671,10 @@ if test -z "${LIBSSP_USE_SYMVER_SUN_TRUE}" && test -z "${LIBSSP_USE_SYMVER_SUN_F
- as_fn_error $? "conditional \"LIBSSP_USE_SYMVER_SUN\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
-
- : "${CONFIG_STATUS=./config.status}"
- ac_write_fail=0
-diff --git a/libssp/configure.ac b/libssp/configure.ac
-index f30f81c..90778e2 100644
---- a/libssp/configure.ac
-+++ b/libssp/configure.ac
-@@ -165,6 +165,8 @@ AC_SUBST(enable_static)
-
- GCC_WITH_TOOLEXECLIBDIR
-
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-+
- # Calculate toolexeclibdir
- # Also toolexecdir, though it's only used in toolexeclibdir
- case ${version_specific_libs} in
-diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
-index d35baaf..4cac54b 100755
---- a/libstdc++-v3/configure
-+++ b/libstdc++-v3/configure
-@@ -791,6 +791,8 @@ glibcxx_compiler_pic_flag
- glibcxx_lt_pic_flag
- OS_IS_DARWIN_FALSE
- OS_IS_DARWIN_TRUE
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- lt_host_flags
-@@ -926,6 +928,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_hosted_libstdcxx
- enable_libstdcxx_hosted
- enable_libstdcxx_verbose
-@@ -1617,6 +1620,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --disable-hosted-libstdcxx
- only build freestanding C++ runtime support
- --disable-libstdcxx-hosted
-@@ -8503,7 +8509,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -10343,6 +10349,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10360,9 +10409,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12189,7 +12242,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12192 "configure"
-+#line 12245 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12295,7 +12348,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12298 "configure"
-+#line 12351 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13177,6 +13230,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -13194,12 +13290,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -15596,6 +15700,14 @@ esac
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
- os_is_darwin=no
- case ${host_os} in
-@@ -16033,7 +16145,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
- # Fake what AC_TRY_COMPILE does.
-
- cat > conftest.$ac_ext << EOF
--#line 16036 "configure"
-+#line 16148 "configure"
- int main()
- {
- typedef bool atomic_type;
-@@ -16068,7 +16180,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
- rm -f conftest*
-
- cat > conftest.$ac_ext << EOF
--#line 16071 "configure"
-+#line 16183 "configure"
- int main()
- {
- typedef short atomic_type;
-@@ -16103,7 +16215,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
- rm -f conftest*
-
- cat > conftest.$ac_ext << EOF
--#line 16106 "configure"
-+#line 16218 "configure"
- int main()
- {
- // NB: _Atomic_word not necessarily int.
-@@ -16139,7 +16251,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
- rm -f conftest*
-
- cat > conftest.$ac_ext << EOF
--#line 16142 "configure"
-+#line 16254 "configure"
- int main()
- {
- typedef long long atomic_type;
-@@ -16295,7 +16407,7 @@ $as_echo "mutex" >&6; }
- # unnecessary for this test.
-
- cat > conftest.$ac_ext << EOF
--#line 16298 "configure"
-+#line 16410 "configure"
- int main()
- {
- _Decimal32 d1;
-@@ -16337,7 +16449,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- # unnecessary for this test.
-
- cat > conftest.$ac_ext << EOF
--#line 16340 "configure"
-+#line 16452 "configure"
- template
- struct same
- { typedef T2 type; };
-@@ -73309,6 +73421,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${OS_IS_DARWIN_TRUE}" && test -z "${OS_IS_DARWIN_FALSE}"; then
- as_fn_error $? "conditional \"OS_IS_DARWIN\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
-index 0c3c7a2..6dde72c 100644
---- a/libstdc++-v3/configure.ac
-+++ b/libstdc++-v3/configure.ac
-@@ -108,6 +108,7 @@ AM_PROG_LIBTOOL
- ACX_LT_HOST_FLAGS
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- os_is_darwin=no
- case ${host_os} in
-diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
-index 5b9af41..925137c 100644
---- a/libstdc++-v3/src/Makefile.am
-+++ b/libstdc++-v3/src/Makefile.am
-@@ -152,8 +152,13 @@ libstdc___la_DEPENDENCIES = \
- $(top_builddir)/src/c++17/libc++17convenience.la \
- $(top_builddir)/src/c++20/libc++20convenience.la
-
-+if ENABLE_DARWIN_AT_RPATH
-+libstdc___darwin_rpath = -Wc,-nodefaultrpaths
-+libstdc___darwin_rpath += -Wl,-rpath,@loader_path
-+endif
-+
- libstdc___la_LDFLAGS = \
-- -version-info $(libtool_VERSION) ${version_arg} -lm
-+ -version-info $(libtool_VERSION) ${version_arg} -lm $(libstdc___darwin_rpath)
-
- libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS) $(lt_host_flags)
-
-diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
-index f42d957..0ce75f3 100644
---- a/libstdc++-v3/src/Makefile.in
-+++ b/libstdc++-v3/src/Makefile.in
-@@ -560,8 +560,11 @@ libstdc___la_DEPENDENCIES = \
- $(top_builddir)/src/c++17/libc++17convenience.la \
- $(top_builddir)/src/c++20/libc++20convenience.la
-
-+@ENABLE_DARWIN_AT_RPATH_TRUE@libstdc___darwin_rpath = \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \
-+@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path
- libstdc___la_LDFLAGS = \
-- -version-info $(libtool_VERSION) ${version_arg} -lm
-+ -version-info $(libtool_VERSION) ${version_arg} -lm $(libstdc___darwin_rpath)
-
- libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS) $(lt_host_flags)
- @GLIBCXX_LDBL_ALT128_COMPAT_FALSE@@GLIBCXX_LDBL_COMPAT_TRUE@LTCXXCOMPILE64 = $(LTCXXCOMPILE)
-diff --git a/libtool.m4 b/libtool.m4
-index b92e284..5361f26 100644
---- a/libtool.m4
-+++ b/libtool.m4
-@@ -1005,7 +1005,7 @@ _LT_EOF
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[[89]]*|UNSET,*-darwin[[12]][[0123456789]]*)
-+ UNSET,*-darwin[[89]]*|UNSET,*-darwin[[12]][[0-9]]*)
- ;;
- 10.[[012]][[,.]]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -1039,6 +1039,45 @@ _LT_EOF
- m4_defun([_LT_DARWIN_LINKER_FEATURES],
- [
- m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ AC_ARG_ENABLE([darwin-at-rpath],
-+ AS_HELP_STRING([--enable-darwin-at-rpath],
-+ [install libraries with @rpath/library-name, requires rpaths to be added to executables]),
-+ [if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[[4-8]]*|UNSET,rhapsody*|10.[[0-4]][[,.]]*)
-+ AC_MSG_WARN([Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)])
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi],
-+ [case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[[4-8]]*|UNSET,rhapsody*|10.[[0-4]][[,.]]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[[5-9]]*|UNSET,darwin2*|10.1[[1-9]][[,.]]*|1[[1-9]].*[[,.]]* )
-+ AC_MSG_NOTICE([@rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)])
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+ ])
-+
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_automatic, $1)=yes
-@@ -1056,13 +1095,21 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- m4_if([$1], [CXX],
- [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
- ],[])
-@@ -6466,7 +6513,6 @@ fi # test "$_lt_caught_CXX_error" != yes
- AC_LANG_POP
- ])# _LT_LANG_CXX_CONFIG
-
--
- # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
- # ---------------------------------
- # Figure out "hidden" library dependencies from verbose
-diff --git a/libvtv/configure b/libvtv/configure
-index e7e490d..da4fe61 100755
---- a/libvtv/configure
-+++ b/libvtv/configure
-@@ -640,6 +640,8 @@ VTV_CYGMIN_FALSE
- VTV_CYGMIN_TRUE
- XCFLAGS
- libtool_VERSION
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- enable_static
- enable_shared
- lt_host_flags
-@@ -797,6 +799,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- enable_cet
- with_gcc_major_version_only
- '
-@@ -1446,6 +1449,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-cet enable Intel CET in target libraries [default=auto]
-
- Optional Packages:
-@@ -8748,7 +8754,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -10453,6 +10459,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10470,9 +10519,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12278,7 +12331,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12281 "configure"
-+#line 12334 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12384,7 +12437,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12387 "configure"
-+#line 12440 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -13260,6 +13313,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
-@@ -13277,12 +13373,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-
-@@ -15676,6 +15780,14 @@ esac
-
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
- # For libtool versioning info, format is CURRENT:REVISION:AGE
- libtool_VERSION=1:0:0
-@@ -16021,6 +16133,10 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${VTV_CYGMIN_TRUE}" && test -z "${VTV_CYGMIN_FALSE}"; then
- as_fn_error $? "conditional \"VTV_CYGMIN\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/libvtv/configure.ac b/libvtv/configure.ac
-index f3b937e..50aaadb 100644
---- a/libvtv/configure.ac
-+++ b/libvtv/configure.ac
-@@ -153,6 +153,7 @@ AM_PROG_LIBTOOL
- ACX_LT_HOST_FLAGS
- AC_SUBST(enable_shared)
- AC_SUBST(enable_static)
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- # For libtool versioning info, format is CURRENT:REVISION:AGE
- libtool_VERSION=1:0:0
-diff --git a/lto-plugin/configure b/lto-plugin/configure
-index d522bd2..c3b1b5f 100755
---- a/lto-plugin/configure
-+++ b/lto-plugin/configure
-@@ -634,6 +634,8 @@ LTLIBOBJS
- LIBOBJS
- target_noncanonical
- lt_host_flags
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- OTOOL64
- OTOOL
- LIPO
-@@ -786,6 +788,7 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- '
- ac_precious_vars='build_alias
- host_alias
-@@ -1431,6 +1434,9 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -8603,7 +8609,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -10309,6 +10315,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -10326,9 +10375,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -12134,7 +12187,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12137 "configure"
-+#line 12190 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12240,7 +12293,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12243 "configure"
-+#line 12296 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12477,6 +12530,14 @@ CC="$lt_save_CC"
- # Only expand once:
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
-
-
-@@ -12723,6 +12784,10 @@ if test -z "${LTO_PLUGIN_USE_SYMVER_SUN_TRUE}" && test -z "${LTO_PLUGIN_USE_SYMV
- as_fn_error $? "conditional \"LTO_PLUGIN_USE_SYMVER_SUN\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
-
- : "${CONFIG_STATUS=./config.status}"
- ac_write_fail=0
-diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
-index 0a72027..5812bbb 100644
---- a/lto-plugin/configure.ac
-+++ b/lto-plugin/configure.ac
-@@ -110,6 +110,7 @@ fi
- AC_SUBST(ac_lto_plugin_extra_ldflags)
-
- AM_PROG_LIBTOOL
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
- ACX_LT_HOST_FLAGS
- AC_SUBST(target_noncanonical)
- AC_TYPE_INT64_T
-diff --git a/zlib/Makefile.in b/zlib/Makefile.in
-index 3f5102d..80fe3b6 100644
---- a/zlib/Makefile.in
-+++ b/zlib/Makefile.in
-@@ -353,6 +353,8 @@ datadir = @datadir@
- datarootdir = @datarootdir@
- docdir = @docdir@
- dvidir = @dvidir@
-+enable_host_pie = @enable_host_pie@
-+enable_host_shared = @enable_host_shared@
- exec_prefix = @exec_prefix@
- host = @host@
- host_alias = @host_alias@
-diff --git a/zlib/configure b/zlib/configure
-index e35ac6e..a7673a8 100755
---- a/zlib/configure
-+++ b/zlib/configure
-@@ -635,10 +635,14 @@ am__EXEEXT_TRUE
- LTLIBOBJS
- LIBOBJS
- PICFLAG
-+enable_host_pie
-+enable_host_shared
- TARGET_LIBRARY_FALSE
- TARGET_LIBRARY_TRUE
- toolexeclibdir
- toolexecdir
-+ENABLE_DARWIN_AT_RPATH_FALSE
-+ENABLE_DARWIN_AT_RPATH_TRUE
- CPP
- OTOOL64
- OTOOL
-@@ -776,8 +780,10 @@ with_pic
- enable_fast_install
- with_gnu_ld
- enable_libtool_lock
-+enable_darwin_at_rpath
- with_toolexeclibdir
- enable_host_shared
-+enable_host_pie
- '
- ac_precious_vars='build_alias
- host_alias
-@@ -1419,7 +1425,11 @@ Optional Features:
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-+ --enable-darwin-at-rpath
-+ install libraries with @rpath/library-name, requires
-+ rpaths to be added to executables
- --enable-host-shared build host code as shared libraries
-+ --enable-host-pie build host code as PIE
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -6934,7 +6944,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
- # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
- # deployment target is forced to an earlier version.
- case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
-- UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
-+ UNSET,*-darwin[89]*|UNSET,*-darwin[12][0-9]*)
- ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-@@ -8913,6 +8923,49 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- darwin* | rhapsody*)
-
-
-+
-+ # Publish an arg to allow the user to select that Darwin host (and target)
-+ # libraries should be given install-names like @rpath/libfoo.dylib. This
-+ # requires that the user of the library then adds an 'rpath' to the DSO that
-+ # needs access.
-+ # NOTE: there are defaults below, for systems that support rpaths. The person
-+ # configuring can override the defaults for any system version that supports
-+ # them - they are, however, forced off for system versions without support.
-+ # Check whether --enable-darwin-at-rpath was given.
-+if test "${enable_darwin_at_rpath+set}" = set; then :
-+ enableval=$enable_darwin_at_rpath; if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ # This is not supported before macOS 10.5 / Darwin9.
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&5
-+$as_echo "$as_me: WARNING: Darwin @rpath library names are incompatible with OSX versions earlier than 10.5 (rpaths disabled)" >&2;}
-+ enable_darwin_at_rpath=no
-+ ;;
-+ esac
-+ fi
-+else
-+ case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host_os in
-+ # As above, before 10.5 / Darwin9 this does not work.
-+ UNSET,darwin[4-8]*|UNSET,rhapsody*|10.[0-4][,.]*)
-+ enable_darwin_at_rpath=no
-+ ;;
-+
-+ # We cannot build and test reliably on macOS 10.11+ (Darwin15+) without use
-+ # of rpaths, since runpaths set via DYLD_LIBRARY_PATH are elided by key
-+ # system executables (e.g. /bin/sh). Force rpaths on for these systems.
-+ UNSET,darwin1[5-9]*|UNSET,darwin2*|10.1[1-9][,.]*|1[1-9].*[,.]* )
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&5
-+$as_echo "$as_me: @rpath library names are needed on macOS versions later than 10.11 (rpaths have been enabled)" >&6;}
-+ enable_darwin_at_rpath=yes
-+ ;;
-+ # NOTE: we are not (yet) doing anything for 10.5 .. 10.10, since they can
-+ # work with either DYLD_LIBRARY_PATH or embedded rpaths.
-+
-+ esac
-+
-+fi
-+
-+
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
-@@ -8930,9 +8983,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
- esac
- if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=func_echo_all
-- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-+ _lt_install_name='\$rpath/\$soname'
-+ if test "x$enable_darwin_at_rpath" = "xyes"; then
-+ _lt_install_name='@rpath/\$soname'
-+ fi
-+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name ${_lt_install_name} \$verstring ${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
-@@ -10759,7 +10816,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10762 "configure"
-+#line 10819 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10865,7 +10922,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10868 "configure"
-+#line 10925 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -11102,6 +11159,14 @@ CC="$lt_save_CC"
- # Only expand once:
-
-
-+ if test x$enable_darwin_at_rpath = xyes; then
-+ ENABLE_DARWIN_AT_RPATH_TRUE=
-+ ENABLE_DARWIN_AT_RPATH_FALSE='#'
-+else
-+ ENABLE_DARWIN_AT_RPATH_TRUE='#'
-+ ENABLE_DARWIN_AT_RPATH_FALSE=
-+fi
-+
-
- # Find CPP now so that any conditional tests below won't do it and
- # thereby make the resulting definitions conditional.
-@@ -11548,15 +11613,31 @@ else
- multilib_arg=
- fi
-
-+# Enable --enable-host-shared.
- # Check whether --enable-host-shared was given.
- if test "${enable_host_shared+set}" = set; then :
-- enableval=$enable_host_shared; PICFLAG=-fPIC
-+ enableval=$enable_host_shared;
-+fi
-+
-+
-+
-+# Enable --enable-host-pie.
-+# Check whether --enable-host-pie was given.
-+if test "${enable_host_pie+set}" = set; then :
-+ enableval=$enable_host_pie;
-+fi
-+
-+
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
- else
- PICFLAG=
- fi
-
-
--
- ac_config_files="$ac_config_files Makefile"
-
- cat >confcache <<\_ACEOF
-@@ -11732,6 +11813,10 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
- fi
-+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then
-+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
-+Usually this means the macro was only invoked conditionally." "$LINENO" 5
-+fi
- if test -z "${TARGET_LIBRARY_TRUE}" && test -z "${TARGET_LIBRARY_FALSE}"; then
- as_fn_error $? "conditional \"TARGET_LIBRARY\" was never defined.
- Usually this means the macro was only invoked conditionally." "$LINENO" 5
-diff --git a/zlib/configure.ac b/zlib/configure.ac
-index be1cfe2..9501cdf 100644
---- a/zlib/configure.ac
-+++ b/zlib/configure.ac
-@@ -64,6 +64,7 @@ GCC_CET_FLAGS(CET_FLAGS)
- AC_SUBST(CET_FLAGS)
-
- AC_PROG_LIBTOOL
-+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
-
- # Find CPP now so that any conditional tests below won't do it and
- # thereby make the resulting definitions conditional.
-@@ -122,11 +123,26 @@ else
- multilib_arg=
- fi
-
-+# Enable --enable-host-shared.
- AC_ARG_ENABLE(host-shared,
- [AS_HELP_STRING([--enable-host-shared],
-- [build host code as shared libraries])],
--[PICFLAG=-fPIC], [PICFLAG=])
--AC_SUBST(PICFLAG)
-+ [build host code as shared libraries])])
-+AC_SUBST(enable_host_shared)
-+
-+# Enable --enable-host-pie.
-+AC_ARG_ENABLE(host-pie,
-+[AS_HELP_STRING([--enable-host-pie],
-+ [build host code as PIE])])
-+AC_SUBST(enable_host_pie)
-+
-+if test x$enable_host_shared = xyes; then
-+ PICFLAG=-fPIC
-+elif test x$enable_host_pie = xyes; then
-+ PICFLAG=-fPIE
-+else
-+ PICFLAG=
-+fi
-
-+AC_SUBST(PICFLAG)
- AC_CONFIG_FILES([Makefile])
- AC_OUTPUT
diff --git a/build/pkgs/gcc/patches/gcc-multiarch.patch b/build/pkgs/gcc/patches/gcc-multiarch.patch
deleted file mode 100644
index 869bb212859..00000000000
--- a/build/pkgs/gcc/patches/gcc-multiarch.patch
+++ /dev/null
@@ -1,235 +0,0 @@
-# DP: - Remaining multiarch patches, not yet submitted upstream.
-# DP: - Add MULTIARCH_DIRNAME definitions for multilib configurations,
-# DP: which are used for the non-multilib builds.
-
-2013-06-12 Matthias Klose
-
- * config/i386/t-linux64: Set MULTIARCH_DIRNAME.
- * config/i386/t-kfreebsd: Set MULTIARCH_DIRNAME.
- * config.gcc (i[34567]86-*-linux* | x86_64-*-linux*): Prepend
- i386/t-linux to $tmake_file;
- set default ABI to N64 for mips64el.
- * config/mips/t-linux64: Set MULTIARCH_DIRNAME.
- * config/rs6000/t-linux64: Set MULTIARCH_DIRNAME.
- * config/s390/t-linux64: Set MULTIARCH_DIRNAME.
- * config/sparc/t-linux64: Set MULTIARCH_DIRNAME.
- * src/gcc/config/mips/mips.h: (/usr)/lib as default path.
-
-Index: b/gcc/config/sh/t-linux
-===================================================================
---- a/gcc/config/sh/t-linux
-+++ b/gcc/config/sh/t-linux
-@@ -1,3 +1,11 @@
- MULTILIB_DIRNAMES=
- MULTILIB_MATCHES=
-+
-+ifneq (,$(findstring sh4,$(target)))
-+MULTILIB_OSDIRNAMES = .:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu
-+MULTIARCH_DIRNAME = $(call if_multiarch,sh4-linux-gnu)
-+else
-+MULTILIB_OSDIRNAMES = .:sh3-linux-gnu sh3_nofpu-linux-gnu:sh3-linux-gnu
-+MULTIARCH_DIRNAME = $(call if_multiarch,sh3-linux-gnu)
-+endif
- MULTILIB_EXCEPTIONS=m1 mb/m1 m2a
-Index: b/gcc/config/sparc/t-linux64
-===================================================================
---- a/gcc/config/sparc/t-linux64
-+++ b/gcc/config/sparc/t-linux64
-@@ -27,3 +27,5 @@ MULTILIB_OPTIONS = m64/m32
- MULTILIB_DIRNAMES = 64 32
- MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu)
- MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu)
-+
-+MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu)
-Index: b/gcc/config/s390/t-linux64
-===================================================================
---- a/gcc/config/s390/t-linux64
-+++ b/gcc/config/s390/t-linux64
-@@ -9,3 +9,5 @@ MULTILIB_OPTIONS = m64/m31
- MULTILIB_DIRNAMES = 64 32
- MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
- MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
-+
-+MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu)
-Index: b/gcc/config/rs6000/t-linux64
-===================================================================
---- a/gcc/config/rs6000/t-linux64
-+++ b/gcc/config/rs6000/t-linux64
-@@ -31,6 +31,8 @@ MULTILIB_EXTRA_OPTS :=
- MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
- MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
-
-+MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu)
-+
- rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.cc
- $(COMPILE) $<
- $(POSTCOMPILE)
-Index: b/gcc/config/i386/t-linux64
-===================================================================
---- a/gcc/config/i386/t-linux64
-+++ b/gcc/config/i386/t-linux64
-@@ -36,3 +36,13 @@ MULTILIB_DIRNAMES = $(patsubst m%, %,
- MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
- MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
- MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
-+
-+ifneq (,$(findstring x86_64,$(target)))
-+ ifneq (,$(findstring biarchx32.h,$(tm_include_list)))
-+ MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnux32)
-+ else
-+ MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnu)
-+ endif
-+else
-+ MULTIARCH_DIRNAME = $(call if_multiarch,i386-linux-gnu)
-+endif
-Index: b/gcc/config/i386/t-kfreebsd
-===================================================================
---- a/gcc/config/i386/t-kfreebsd
-+++ b/gcc/config/i386/t-kfreebsd
-@@ -1,5 +1,9 @@
--MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu)
-+ifeq (,$(MULTIARCH_DIRNAME))
-+ MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu)
-+endif
-
- # MULTILIB_OSDIRNAMES are set in t-linux64.
- KFREEBSD_OS = $(filter kfreebsd%, $(word 3, $(subst -, ,$(target))))
- MULTILIB_OSDIRNAMES := $(filter-out mx32=%,$(subst linux,$(KFREEBSD_OS),$(MULTILIB_OSDIRNAMES)))
-+
-+MULTIARCH_DIRNAME := $(subst linux,$(KFREEBSD_OS),$(MULTIARCH_DIRNAME))
-Index: b/gcc/config/mips/t-linux64
-===================================================================
---- a/gcc/config/mips/t-linux64
-+++ b/gcc/config/mips/t-linux64
-@@ -18,24 +18,28 @@
-
- MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
- MULTILIB_DIRNAMES = n32 32 64
-+MIPS_R6 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),r6)
-+MIPS_32 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),32)
-+MIPS_ISA = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),isa)
- MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
- MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
-+
- ifeq (yes,$(enable_multiarch))
- ifneq (,$(findstring gnuabi64,$(target)))
- MULTILIB_OSDIRNAMES = \
-- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-- ../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-- ../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+ ../lib32$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-+ ../libo32$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-+ ../lib$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
- else ifneq (,$(findstring gnuabin32,$(target)))
- MULTILIB_OSDIRNAMES = \
-- ../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-- ../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+ ../lib$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-+ ../libo32$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-+ ../lib64$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
- else
- MULTILIB_OSDIRNAMES = \
-- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+ ../lib32$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-+ ../lib$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-+ ../lib64$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
- endif
- else
- MULTILIB_OSDIRNAMES = \
-@@ -43,3 +47,13 @@ else
- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
- endif
-+
-+ifneq (,$(findstring abin32,$(target)))
-+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT))
-+else
-+ifneq (,$(findstring abi64,$(target)))
-+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+else
-+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
-+endif
-+endif
-Index: b/gcc/config.gcc
-===================================================================
---- a/gcc/config.gcc
-+++ b/gcc/config.gcc
-@@ -2519,7 +2519,8 @@ mips*-*-linux*) # Linux MIPS, either
- extra_options="${extra_options} linux-android.opt"
- case ${target} in
- mipsisa32r6*)
-- default_mips_arch=mips32r6
-+ with_arch_32="mips32r6"
-+ with_arch_64="mips64r6"
- ;;
- mipsisa32r2*)
- default_mips_arch=mips32r2
-@@ -2541,7 +2542,8 @@ mips*-*-linux*) # Linux MIPS, either
- ;;
- mipsisa64r6*-*-linux-gnuabi64)
- default_mips_abi=64
-- default_mips_arch=mips64r6
-+ with_arch_32="mips32r6"
-+ with_arch_64="mips64r6"
- enable_mips_multilibs="yes"
- ;;
- mipsisa64r6*-*-linux*)
-@@ -5656,7 +5658,7 @@ case ${target} in
- ;;
- i[34567]86-*-linux* | x86_64-*-linux*)
- extra_objs="${extra_objs} gnu-property.o"
-- tmake_file="$tmake_file i386/t-linux i386/t-gnu-property"
-+ tmake_file="i386/t-linux $tmake_file i386/t-gnu-property"
- ;;
- i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
- tmake_file="$tmake_file i386/t-kfreebsd"
-Index: b/gcc/config/riscv/t-linux
-===================================================================
---- a/gcc/config/riscv/t-linux
-+++ b/gcc/config/riscv/t-linux
-@@ -1,3 +1,5 @@
- # Only XLEN and ABI affect Linux multilib dir names, e.g. /lib32/ilp32d/
- MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES)))
- MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES))
-+
-+MULTIARCH_DIRNAME := $(call if_multiarch,$(firstword $(subst -, ,$(target)))-linux-gnu)
-Index: b/gcc/Makefile.in
-===================================================================
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -553,7 +553,7 @@ BUILD_SYSTEM_HEADER_DIR = `echo @BUILD_S
- STMP_FIXINC = @STMP_FIXINC@
-
- # Test to see whether exists in the system header files.
--LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
-+LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h -o -f $(BUILD_SYSTEM_HEADER_DIR)/$(MULTIARCH_DIRNAME)/limits.h ]
-
- # Directory for prefix to system directories, for
- # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
-Index: b/gcc/config/aarch64/t-aarch64-linux
-===================================================================
---- a/gcc/config/aarch64/t-aarch64-linux
-+++ b/gcc/config/aarch64/t-aarch64-linux
-@@ -22,7 +22,7 @@ LIB1ASMSRC = aarch64/lib1funcs.asm
- LIB1ASMFUNCS = _aarch64_sync_cache_range
-
- AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
--MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
-+MULTILIB_OSDIRNAMES = mabi.lp64=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
- MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
-
- MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
-Index: b/gcc/config/arc/t-multilib-linux
-===================================================================
---- a/gcc/config/arc/t-multilib-linux
-+++ b/gcc/config/arc/t-multilib-linux
-@@ -23,3 +23,6 @@ MULTILIB_DIRNAMES = hs archs hs38 hs38_l
- # Aliases:
- MULTILIB_MATCHES += mcpu?arc700=mA7
- MULTILIB_MATCHES += mcpu?arc700=mARC700
-+
-+MULTILIB_OSDIRNAMES =
-+MULTIARCH_DIRNAME = $(call if_multiarch,arc-linux-gnu)
diff --git a/build/pkgs/gcc/patches/gcc-multilib-multiarch.patch b/build/pkgs/gcc/patches/gcc-multilib-multiarch.patch
deleted file mode 100644
index af5580055e8..00000000000
--- a/build/pkgs/gcc/patches/gcc-multilib-multiarch.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-# DP: Don't auto-detect multilib osdirnames.
-
-Index: b/gcc/config/sparc/t-linux64
-===================================================================
---- a/gcc/config/sparc/t-linux64
-+++ b/gcc/config/sparc/t-linux64
-@@ -25,7 +25,12 @@
-
- MULTILIB_OPTIONS = m64/m32
- MULTILIB_DIRNAMES = 64 32
-+ifneq (,$(findstring sparc64,$(target)))
-+MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:sparc64-linux-gnu)
-+MULTILIB_OSDIRNAMES += ../lib32$(call if_multiarch,:sparc-linux-gnu)
-+else
- MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu)
--MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu)
-+MULTILIB_OSDIRNAMES += ../lib$(call if_multiarch,:sparc-linux-gnu)
-+endif
-
- MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu)
-Index: b/gcc/config/s390/t-linux64
-===================================================================
---- a/gcc/config/s390/t-linux64
-+++ b/gcc/config/s390/t-linux64
-@@ -7,7 +7,12 @@
-
- MULTILIB_OPTIONS = m64/m31
- MULTILIB_DIRNAMES = 64 32
-+ifneq (,$(findstring s390x,$(target)))
-+MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:s390x-linux-gnu)
-+MULTILIB_OSDIRNAMES += ../lib32$(call if_multiarch,:s390-linux-gnu)
-+else
- MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
--MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
-+MULTILIB_OSDIRNAMES += ../lib$(call if_multiarch,:s390-linux-gnu)
-+endif
-
- MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu)
-Index: b/gcc/config/rs6000/t-linux64
-===================================================================
---- a/gcc/config/rs6000/t-linux64
-+++ b/gcc/config/rs6000/t-linux64
-@@ -28,8 +28,13 @@
- MULTILIB_OPTIONS := m64/m32
- MULTILIB_DIRNAMES := 64 32
- MULTILIB_EXTRA_OPTS :=
-+ifneq (,$(findstring powerpc64,$(target)))
-+MULTILIB_OSDIRNAMES := m64=../lib$(call if_multiarch,:powerpc64-linux-gnu)
-+MULTILIB_OSDIRNAMES += m32=../lib32$(call if_multiarch,:powerpc-linux-gnu)
-+else
- MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
--MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
-+MULTILIB_OSDIRNAMES += m32=../lib$(call if_multiarch,:powerpc-linux-gnu)
-+endif
-
- MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu)
-
-Index: b/gcc/config/i386/t-linux64
-===================================================================
---- a/gcc/config/i386/t-linux64
-+++ b/gcc/config/i386/t-linux64
-@@ -33,9 +33,19 @@
- comma=,
- MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
- MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
-+ifneq (,$(findstring gnux32,$(target)))
- MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
--MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
-+MULTILIB_OSDIRNAMES+= m32=../lib32$(call if_multiarch,:i386-linux-gnu)
-+MULTILIB_OSDIRNAMES+= mx32=../lib$(call if_multiarch,:x86_64-linux-gnux32)
-+else ifneq (,$(findstring x86_64,$(target)))
-+MULTILIB_OSDIRNAMES = m64=../lib$(call if_multiarch,:x86_64-linux-gnu)
-+MULTILIB_OSDIRNAMES+= m32=../lib32$(call if_multiarch,:i386-linux-gnu)
- MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
-+else
-+MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
-+MULTILIB_OSDIRNAMES+= m32=../lib$(call if_multiarch,:i386-linux-gnu)
-+MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
-+endif
-
- ifneq (,$(findstring x86_64,$(target)))
- ifneq (,$(findstring biarchx32.h,$(tm_include_list)))
-Index: b/gcc/config/rs6000/t-linux
-===================================================================
---- a/gcc/config/rs6000/t-linux
-+++ b/gcc/config/rs6000/t-linux
-@@ -2,7 +2,7 @@
- # or soft-float.
- ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float)))
- ifneq (,$(findstring powerpc64,$(target)))
--MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
-+MULTILIB_OSDIRNAMES := .=../lib$(call if_multiarch,:powerpc64-linux-gnu)
- else
- MULTIARCH_DIRNAME := $(call if_multiarch,powerpc-linux-gnu)
- endif
-Index: b/gcc/config/loongarch/t-linux
-===================================================================
---- a/gcc/config/loongarch/t-linux
-+++ b/gcc/config/loongarch/t-linux
-@@ -32,22 +32,19 @@ ifneq ($(call if_multiarch,yes),yes)
- else
- # Only define MULTIARCH_DIRNAME when multiarch is enabled,
- # or it would always introduce ${target} into the search path.
-- MULTIARCH_DIRNAME = $(LA_MULTIARCH_TRIPLET)
-+ MULTIARCH_DIRNAME = $(call if_multiarch,loongarch64-linux-gnu)
- endif
-
- # Don't define MULTILIB_OSDIRNAMES if multilib is disabled.
- ifeq ($(filter LA_DISABLE_MULTILIB,$(tm_defines)),)
-
- MULTILIB_OSDIRNAMES = \
-- mabi.lp64d=../lib64$\
-- $(call if_multiarch,:loongarch64-linux-gnu)
-+ mabi.lp64d=../lib$(call if_multiarch,:loongarch64-linux-gnu)
-
- MULTILIB_OSDIRNAMES += \
-- mabi.lp64f=../lib64/f32$\
-- $(call if_multiarch,:loongarch64-linux-gnuf32)
-+ mabi.lp64f=../lib/f32$(call if_multiarch,:loongarch64-linux-gnuf32)
-
- MULTILIB_OSDIRNAMES += \
-- mabi.lp64s=../lib64/sf$\
-- $(call if_multiarch,:loongarch64-linux-gnusf)
-+ mabi.lp64s=../lib/sf$(call if_multiarch,:loongarch64-linux-gnusf)
-
- endif
diff --git a/build/pkgs/gengetopt/distros/cygwin.txt b/build/pkgs/gengetopt/distros/cygwin.txt
deleted file mode 100644
index 2865264cd70..00000000000
--- a/build/pkgs/gengetopt/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-gengetopt
diff --git a/build/pkgs/gfortran/distros/cygwin.txt b/build/pkgs/gfortran/distros/cygwin.txt
deleted file mode 100644
index 8f962328b1e..00000000000
--- a/build/pkgs/gfortran/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-gcc-fortran
diff --git a/build/pkgs/git/distros/cygwin.txt b/build/pkgs/git/distros/cygwin.txt
deleted file mode 100644
index 5664e303b5d..00000000000
--- a/build/pkgs/git/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-git
diff --git a/build/pkgs/glpk/distros/cygwin.txt b/build/pkgs/glpk/distros/cygwin.txt
deleted file mode 100644
index 0fbb959079e..00000000000
--- a/build/pkgs/glpk/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-glpk
-libglpk-devel
diff --git a/build/pkgs/gmp/distros/cygwin.txt b/build/pkgs/gmp/distros/cygwin.txt
deleted file mode 100644
index bde3aa97bd3..00000000000
--- a/build/pkgs/gmp/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libgmp-devel
diff --git a/build/pkgs/gmpy2/checksums.ini b/build/pkgs/gmpy2/checksums.ini
index 34824279321..17b85732d44 100644
--- a/build/pkgs/gmpy2/checksums.ini
+++ b/build/pkgs/gmpy2/checksums.ini
@@ -1,4 +1,4 @@
tarball=gmpy2-VERSION.tar.gz
sha1=700ef438964acd286d52e973a833cd57ae9a7ad7
sha256=3b8acc939a40411a8ad5541ed178ff866dd1759e667ee26fe34c9291b6b350c3
-upstream_url=https://pypi.io/packages/source/g/gmpy2/gmpy2-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/g/gmpy2/gmpy2-VERSION.tar.gz
diff --git a/build/pkgs/gnumake_tokenpool/checksums.ini b/build/pkgs/gnumake_tokenpool/checksums.ini
index 889f64341f2..92f70df3c3f 100644
--- a/build/pkgs/gnumake_tokenpool/checksums.ini
+++ b/build/pkgs/gnumake_tokenpool/checksums.ini
@@ -1,4 +1,4 @@
tarball=gnumake_tokenpool-VERSION-py3-none-any.whl
sha1=882c694dc3c0a935275a8d2acd9e766399719754
sha256=0c49578df1a76b6ff7724b99053d96f1583bd3e52fe9547587cfb6ffdb0d1fcd
-upstream_url=https://pypi.io/packages/py3/g/gnumake_tokenpool/gnumake_tokenpool-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/g/gnumake_tokenpool/gnumake_tokenpool-VERSION-py3-none-any.whl
diff --git a/build/pkgs/graphs/checksums.ini b/build/pkgs/graphs/checksums.ini
index 002c07affac..a5c9941eb96 100644
--- a/build/pkgs/graphs/checksums.ini
+++ b/build/pkgs/graphs/checksums.ini
@@ -1,4 +1,4 @@
tarball=graphs-VERSION.tar.bz2
sha1=c3b9fcbc92482efd6b7f6f3a33df5a78e1256aa1
sha256=07237c0d9853611505c389fd7bb92500c8743f5631babb4d0f45dfd8332f3741
-upstream_url=http://users.ox.ac.uk/~coml0531/sage/graphs-VERSION.tar.bz2
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/graphs-VERSION.tar.bz2
diff --git a/build/pkgs/graphviz/distros/cygwin.txt b/build/pkgs/graphviz/distros/cygwin.txt
deleted file mode 100644
index 4d95609306f..00000000000
--- a/build/pkgs/graphviz/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-graphviz
diff --git a/build/pkgs/gsl/distros/cygwin.txt b/build/pkgs/gsl/distros/cygwin.txt
deleted file mode 100644
index 3f55673dfe6..00000000000
--- a/build/pkgs/gsl/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libgsl-devel
diff --git a/build/pkgs/h11/checksums.ini b/build/pkgs/h11/checksums.ini
index 8e1952d648a..9cf02f6021d 100644
--- a/build/pkgs/h11/checksums.ini
+++ b/build/pkgs/h11/checksums.ini
@@ -1,4 +1,4 @@
tarball=h11-VERSION-py3-none-any.whl
sha1=c502d56dc3288212142a398704a5109749331dd8
sha256=e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761
-upstream_url=https://pypi.io/packages/py3/h/h11/h11-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/h/h11/h11-VERSION-py3-none-any.whl
diff --git a/build/pkgs/hatchling/checksums.ini b/build/pkgs/hatchling/checksums.ini
index 1d456db2d53..4c75e2006b2 100644
--- a/build/pkgs/hatchling/checksums.ini
+++ b/build/pkgs/hatchling/checksums.ini
@@ -1,4 +1,4 @@
tarball=hatchling-VERSION-py3-none-any.whl
sha1=cae79d374a238c7674687fb4fff0b15cf1af9be4
sha256=b47948e45d4d973034584dd4cb39c14b6a70227cf287ab7ec0ad7983408a882c
-upstream_url=https://pypi.io/packages/py3/h/hatchling/hatchling-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/h/hatchling/hatchling-VERSION-py3-none-any.whl
diff --git a/build/pkgs/httpcore/checksums.ini b/build/pkgs/httpcore/checksums.ini
index 21cb43c4bf6..e489278fdac 100644
--- a/build/pkgs/httpcore/checksums.ini
+++ b/build/pkgs/httpcore/checksums.ini
@@ -1,4 +1,4 @@
tarball=httpcore-VERSION-py3-none-any.whl
sha1=52c8337dcf474d63f5b053e0f65cf79714ae69fe
sha256=421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5
-upstream_url=https://pypi.io/packages/py3/h/httpcore/httpcore-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/h/httpcore/httpcore-VERSION-py3-none-any.whl
diff --git a/build/pkgs/httpx/checksums.ini b/build/pkgs/httpx/checksums.ini
index adc2d9ae791..e1f0fe5fd9a 100644
--- a/build/pkgs/httpx/checksums.ini
+++ b/build/pkgs/httpx/checksums.ini
@@ -1,4 +1,4 @@
tarball=httpx-VERSION-py3-none-any.whl
sha1=01f2a657e43842cb7c8dda30d38860fa741acb7e
sha256=71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5
-upstream_url=https://pypi.io/packages/py3/h/httpx/httpx-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/h/httpx/httpx-VERSION-py3-none-any.whl
diff --git a/build/pkgs/iconv/distros/cygwin.txt b/build/pkgs/iconv/distros/cygwin.txt
deleted file mode 100644
index df78e31976a..00000000000
--- a/build/pkgs/iconv/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libiconv-devel
diff --git a/build/pkgs/idna/checksums.ini b/build/pkgs/idna/checksums.ini
index b3a22afe657..ad7a4b77355 100644
--- a/build/pkgs/idna/checksums.ini
+++ b/build/pkgs/idna/checksums.ini
@@ -1,4 +1,4 @@
tarball=idna-VERSION-py3-none-any.whl
sha1=ccb2491074ec1b6ffda6e6c11c1c668f885ed20a
sha256=82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
-upstream_url=https://pypi.io/packages/py3/i/idna/idna-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/i/idna/idna-VERSION-py3-none-any.whl
diff --git a/build/pkgs/imagemagick/distros/cygwin.txt b/build/pkgs/imagemagick/distros/cygwin.txt
deleted file mode 100644
index 7a33d03ff73..00000000000
--- a/build/pkgs/imagemagick/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-ImageMagick
diff --git a/build/pkgs/imagesize/checksums.ini b/build/pkgs/imagesize/checksums.ini
index 75413be5c69..8eb70146ee6 100644
--- a/build/pkgs/imagesize/checksums.ini
+++ b/build/pkgs/imagesize/checksums.ini
@@ -1,4 +1,4 @@
tarball=imagesize-VERSION-py2.py3-none-any.whl
sha1=6054e528ed40a9979df9952437a20c3e5773d972
sha256=0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b
-upstream_url=https://pypi.io/packages/py2.py3/i/imagesize/imagesize-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/i/imagesize/imagesize-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/importlib_metadata/checksums.ini b/build/pkgs/importlib_metadata/checksums.ini
index d21661c6dbc..28ed6e985bc 100644
--- a/build/pkgs/importlib_metadata/checksums.ini
+++ b/build/pkgs/importlib_metadata/checksums.ini
@@ -1,4 +1,4 @@
tarball=importlib_metadata-VERSION-py3-none-any.whl
sha1=82c9e2e6cfbb2d5a14558085efa65e75a95bd12f
sha256=4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e
-upstream_url=https://pypi.io/packages/py3/i/importlib_metadata/importlib_metadata-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/i/importlib_metadata/importlib_metadata-VERSION-py3-none-any.whl
diff --git a/build/pkgs/importlib_resources/checksums.ini b/build/pkgs/importlib_resources/checksums.ini
index c4025635c2f..da8792a31ec 100644
--- a/build/pkgs/importlib_resources/checksums.ini
+++ b/build/pkgs/importlib_resources/checksums.ini
@@ -1,4 +1,4 @@
tarball=importlib_resources-VERSION-py3-none-any.whl
sha1=5caa4e8a9ee93123a5c3badb6edbc009b5d8494a
sha256=e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6
-upstream_url=https://pypi.io/packages/py3/i/importlib_resources/importlib_resources-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/i/importlib_resources/importlib_resources-VERSION-py3-none-any.whl
diff --git a/build/pkgs/info/distros/cygwin.txt b/build/pkgs/info/distros/cygwin.txt
deleted file mode 100644
index 55021245387..00000000000
--- a/build/pkgs/info/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-info
diff --git a/build/pkgs/iniconfig/checksums.ini b/build/pkgs/iniconfig/checksums.ini
index 4067da0dcc5..d85d4d0accb 100644
--- a/build/pkgs/iniconfig/checksums.ini
+++ b/build/pkgs/iniconfig/checksums.ini
@@ -1,4 +1,4 @@
tarball=iniconfig-VERSION-py3-none-any.whl
sha1=ec7addd8337eee38e86554d2f0f114f8a1c74b20
sha256=b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
-upstream_url=https://pypi.io/packages/py3/i/iniconfig/iniconfig-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/i/iniconfig/iniconfig-VERSION-py3-none-any.whl
diff --git a/build/pkgs/ipykernel/checksums.ini b/build/pkgs/ipykernel/checksums.ini
index ccb54046f0a..31a3bf15856 100644
--- a/build/pkgs/ipykernel/checksums.ini
+++ b/build/pkgs/ipykernel/checksums.ini
@@ -1,4 +1,4 @@
tarball=ipykernel-VERSION.tar.gz
sha1=3465b4aa523705e930f295b5c549924e376a02e2
sha256=7d5d594b6690654b4d299edba5e872dc17bb7396a8d0609c97cb7b8a1c605de6
-upstream_url=https://pypi.io/packages/source/i/ipykernel/ipykernel-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/i/ipykernel/ipykernel-VERSION.tar.gz
diff --git a/build/pkgs/ipympl/checksums.ini b/build/pkgs/ipympl/checksums.ini
index ec23f194f50..45891ffb95d 100644
--- a/build/pkgs/ipympl/checksums.ini
+++ b/build/pkgs/ipympl/checksums.ini
@@ -1,4 +1,4 @@
tarball=ipympl-VERSION-py2.py3-none-any.whl
sha1=9848409026669d9edd83074730d7e2456ae8a187
sha256=d113cd55891bafe9b27ef99b6dd111a87beb6bb2ae550c404292272103be8013
-upstream_url=https://pypi.io/packages/py2.py3/i/ipympl/ipympl-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/i/ipympl/ipympl-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/ipython/checksums.ini b/build/pkgs/ipython/checksums.ini
index 0f7cc9c7d51..b22fa04d1e1 100644
--- a/build/pkgs/ipython/checksums.ini
+++ b/build/pkgs/ipython/checksums.ini
@@ -1,4 +1,4 @@
tarball=ipython-VERSION.tar.gz
sha1=4b5ab06a1b5e1a3285ac91d7dac9a22d18898a31
sha256=ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27
-upstream_url=https://pypi.io/packages/source/i/ipython/ipython-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/i/ipython/ipython-VERSION.tar.gz
diff --git a/build/pkgs/ipywidgets/checksums.ini b/build/pkgs/ipywidgets/checksums.ini
index ad3dca0b6d8..33f8b3193dc 100644
--- a/build/pkgs/ipywidgets/checksums.ini
+++ b/build/pkgs/ipywidgets/checksums.ini
@@ -1,4 +1,4 @@
tarball=ipywidgets-VERSION.tar.gz
sha1=95f7ec13e8ce75e2da40c1789b4af291946a6d99
sha256=40211efb556adec6fa450ccc2a77d59ca44a060f4f9f136833df59c9f538e6e8
-upstream_url=https://pypi.io/packages/source/i/ipywidgets/ipywidgets-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/i/ipywidgets/ipywidgets-VERSION.tar.gz
diff --git a/build/pkgs/isl/distros/cygwin.txt b/build/pkgs/isl/distros/cygwin.txt
deleted file mode 100644
index a922268ab95..00000000000
--- a/build/pkgs/isl/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libisl-devel
diff --git a/build/pkgs/isoduration/checksums.ini b/build/pkgs/isoduration/checksums.ini
index d3e080d1982..5b4c48333b5 100644
--- a/build/pkgs/isoduration/checksums.ini
+++ b/build/pkgs/isoduration/checksums.ini
@@ -1,4 +1,4 @@
tarball=isoduration-VERSION-py3-none-any.whl
sha1=a113878d368fee6881efcfd12421b12f8e6ae11c
sha256=b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042
-upstream_url=https://pypi.io/packages/py3/i/isoduration/isoduration-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/i/isoduration/isoduration-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jedi/checksums.ini b/build/pkgs/jedi/checksums.ini
index bbfe9535f75..f7e115e80ec 100644
--- a/build/pkgs/jedi/checksums.ini
+++ b/build/pkgs/jedi/checksums.ini
@@ -1,4 +1,4 @@
tarball=jedi-VERSION.tar.gz
sha1=07d1e04c24cecf1b7f38f8905ce81c006f76cc20
sha256=cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd
-upstream_url=https://pypi.io/packages/source/j/jedi/jedi-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/j/jedi/jedi-VERSION.tar.gz
diff --git a/build/pkgs/jinja2/checksums.ini b/build/pkgs/jinja2/checksums.ini
index 8f1cd2ceb6a..b68ec8b0fe0 100644
--- a/build/pkgs/jinja2/checksums.ini
+++ b/build/pkgs/jinja2/checksums.ini
@@ -1,4 +1,4 @@
tarball=jinja2-VERSION-py3-none-any.whl
sha1=57760ed83d9ad15fcdf63ad1ffa14941333ef655
sha256=bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d
-upstream_url=https://pypi.io/packages/py3/j/jinja2/jinja2-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jinja2/jinja2-VERSION-py3-none-any.whl
diff --git a/build/pkgs/json5/checksums.ini b/build/pkgs/json5/checksums.ini
index d95e497ddc7..af94454a5b0 100644
--- a/build/pkgs/json5/checksums.ini
+++ b/build/pkgs/json5/checksums.ini
@@ -1,4 +1,4 @@
tarball=json5-VERSION-py2.py3-none-any.whl
sha1=54bf91b9c2812e82ccd212cefca5bc5607a538b4
sha256=740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f
-upstream_url=https://pypi.io/packages/py2.py3/j/json5/json5-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/j/json5/json5-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/jsonpointer/checksums.ini b/build/pkgs/jsonpointer/checksums.ini
index df24503fc54..a0718fcd7d0 100644
--- a/build/pkgs/jsonpointer/checksums.ini
+++ b/build/pkgs/jsonpointer/checksums.ini
@@ -1,4 +1,4 @@
tarball=jsonpointer-VERSION-py2.py3-none-any.whl
sha1=de1b07c2d014f5b8e672cf0fb1225b2232d0b414
sha256=15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a
-upstream_url=https://pypi.io/packages/py2.py3/j/jsonpointer/jsonpointer-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/j/jsonpointer/jsonpointer-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/jsonschema/checksums.ini b/build/pkgs/jsonschema/checksums.ini
index e709e36e5d3..61c920e4de7 100644
--- a/build/pkgs/jsonschema/checksums.ini
+++ b/build/pkgs/jsonschema/checksums.ini
@@ -1,4 +1,4 @@
tarball=jsonschema-VERSION-py3-none-any.whl
sha1=189537b18c91e60be991a3dba704577d19f8e48d
sha256=a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6
-upstream_url=https://pypi.io/packages/py3/j/jsonschema/jsonschema-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jsonschema/jsonschema-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jsonschema_specifications/checksums.ini b/build/pkgs/jsonschema_specifications/checksums.ini
index df5d6944abd..05fe820f3de 100644
--- a/build/pkgs/jsonschema_specifications/checksums.ini
+++ b/build/pkgs/jsonschema_specifications/checksums.ini
@@ -1,4 +1,4 @@
tarball=jsonschema_specifications-VERSION-py3-none-any.whl
sha1=4132bed31478bc96960099e58ae4c083c514c551
sha256=764a2b9325c225208121948b15f2b2d16fddbe223fdfc096b45c70c1f7f7b8c1
-upstream_url=https://pypi.io/packages/py3/j/jsonschema_specifications/jsonschema_specifications-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jsonschema_specifications/jsonschema_specifications-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyter_client/checksums.ini b/build/pkgs/jupyter_client/checksums.ini
index af7a000f71d..39c8aff188b 100644
--- a/build/pkgs/jupyter_client/checksums.ini
+++ b/build/pkgs/jupyter_client/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_client-VERSION-py3-none-any.whl
sha1=341f822626b55b53f03a21a44d78dc203472406b
sha256=5eb9f55eb0650e81de6b7e34308d8b92d04fe4ec41cd8193a913979e33d8e1a5
-upstream_url=https://pypi.io/packages/py3/j/jupyter_client/jupyter_client-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyter_client/jupyter_client-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyter_core/checksums.ini b/build/pkgs/jupyter_core/checksums.ini
index 672c7f93bcc..919c1e88af7 100644
--- a/build/pkgs/jupyter_core/checksums.ini
+++ b/build/pkgs/jupyter_core/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_core-VERSION.tar.gz
sha1=0fe33e3247e595cdb83e2220f02c566ea9397e6a
sha256=0c28db6cbe2c37b5b398e1a1a5b22f84fd64cd10afc1f6c05b02fb09481ba45f
-upstream_url=https://pypi.io/packages/source/j/jupyter_core/jupyter_core-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/j/jupyter_core/jupyter_core-VERSION.tar.gz
diff --git a/build/pkgs/jupyter_events/checksums.ini b/build/pkgs/jupyter_events/checksums.ini
index d7fc20e35ba..aaf19ecdbf5 100644
--- a/build/pkgs/jupyter_events/checksums.ini
+++ b/build/pkgs/jupyter_events/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_events-VERSION-py3-none-any.whl
sha1=1b3fd8c003ea9e51b0f2d38daa89fded161767f7
sha256=57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17
-upstream_url=https://pypi.io/packages/py3/j/jupyter_events/jupyter_events-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyter_events/jupyter_events-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyter_jsmol/checksums.ini b/build/pkgs/jupyter_jsmol/checksums.ini
index 533f2b689d3..11e1c873b56 100644
--- a/build/pkgs/jupyter_jsmol/checksums.ini
+++ b/build/pkgs/jupyter_jsmol/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_jsmol-VERSION-py2.py3-none-any.whl
sha1=b00f1ca76aaa906c7c0a43e36baf608183f3d552
sha256=dca3a232f98aa92739de8b7905765d22f325a2ba5d7a3a2f5b2374e88cc80471
-upstream_url=https://pypi.io/packages/py2.py3/j/jupyter_jsmol/jupyter_jsmol-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/j/jupyter_jsmol/jupyter_jsmol-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/jupyter_lsp/checksums.ini b/build/pkgs/jupyter_lsp/checksums.ini
index b925e4da051..7f9c60b089c 100644
--- a/build/pkgs/jupyter_lsp/checksums.ini
+++ b/build/pkgs/jupyter_lsp/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_lsp-VERSION-py3-none-any.whl
sha1=0f7a63d99c5cf624315583099f00eafc4b996b59
sha256=9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f
-upstream_url=https://pypi.io/packages/py3/j/jupyter_lsp/jupyter_lsp-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyter_lsp/jupyter_lsp-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyter_server/checksums.ini b/build/pkgs/jupyter_server/checksums.ini
index 9519eaa2ae6..2f9a79e28d7 100644
--- a/build/pkgs/jupyter_server/checksums.ini
+++ b/build/pkgs/jupyter_server/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_server-VERSION-py3-none-any.whl
sha1=a54aa7f6f1657a55cae9ecc4a6654b6e3ca5fb73
sha256=8e4b90380b59d7a1e31086c4692231f2a2ea4cb269f5516e60aba72ce8317fc9
-upstream_url=https://pypi.io/packages/py3/j/jupyter_server/jupyter_server-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyter_server/jupyter_server-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyter_server_terminals/checksums.ini b/build/pkgs/jupyter_server_terminals/checksums.ini
index be5ba3efe9b..bb48dce3bae 100644
--- a/build/pkgs/jupyter_server_terminals/checksums.ini
+++ b/build/pkgs/jupyter_server_terminals/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_server_terminals-VERSION-py3-none-any.whl
sha1=fd1201e9f0064b2a5a05ed7346dfe52546f13b0b
sha256=75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36
-upstream_url=https://pypi.io/packages/py3/j/jupyter_server_terminals/jupyter_server_terminals-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyter_server_terminals/jupyter_server_terminals-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyter_sphinx/checksums.ini b/build/pkgs/jupyter_sphinx/checksums.ini
index fc843987136..a11301f5fe3 100644
--- a/build/pkgs/jupyter_sphinx/checksums.ini
+++ b/build/pkgs/jupyter_sphinx/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyter_sphinx-VERSION.tar.gz
sha1=85e6e1665488fac3131da2e3ab9648037c0d1da9
sha256=2e23699a3a1cf5db31b10981da5aa32606ee730f6b73a844d1e76d800756af56
-upstream_url=https://pypi.io/packages/source/j/jupyter_sphinx/jupyter_sphinx-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/j/jupyter_sphinx/jupyter_sphinx-VERSION.tar.gz
diff --git a/build/pkgs/jupyterlab/checksums.ini b/build/pkgs/jupyterlab/checksums.ini
index eea8e9d4191..0d3e3a75bf0 100644
--- a/build/pkgs/jupyterlab/checksums.ini
+++ b/build/pkgs/jupyterlab/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyterlab-VERSION-py3-none-any.whl
sha1=4efdd879660e719fd49be6ec169272f32a16593e
sha256=67dbec7057c6ad46f08a3667a80bdb890df9453822c93b5ddfd5e8313a718ef9
-upstream_url=https://pypi.io/packages/py3/j/jupyterlab/jupyterlab-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyterlab/jupyterlab-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyterlab_mathjax2/checksums.ini b/build/pkgs/jupyterlab_mathjax2/checksums.ini
index 3ff851f18bb..942770adea0 100644
--- a/build/pkgs/jupyterlab_mathjax2/checksums.ini
+++ b/build/pkgs/jupyterlab_mathjax2/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyterlab_mathjax2-VERSION-py3-none-any.whl
sha1=4e2bb182594a6c4f5d4edfb4f6e33597f09de402
sha256=c65c401ee5638e7cbf1223ba95aceed8b26a2a3e48fd1d585a10dd95b9327a8f
-upstream_url=https://pypi.io/packages/py3/j/jupyterlab_mathjax2/jupyterlab_mathjax2-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyterlab_mathjax2/jupyterlab_mathjax2-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyterlab_pygments/checksums.ini b/build/pkgs/jupyterlab_pygments/checksums.ini
index 7cbeda65aab..78b7c052f08 100644
--- a/build/pkgs/jupyterlab_pygments/checksums.ini
+++ b/build/pkgs/jupyterlab_pygments/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyterlab_pygments-VERSION-py2.py3-none-any.whl
sha1=601f547767fa867494ff0764891807904b8ebbd2
sha256=2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f
-upstream_url=https://pypi.io/packages/py2.py3/j/jupyterlab_pygments/jupyterlab_pygments-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/j/jupyterlab_pygments/jupyterlab_pygments-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/jupyterlab_server/checksums.ini b/build/pkgs/jupyterlab_server/checksums.ini
index 84eeb7a8b8d..18765921193 100644
--- a/build/pkgs/jupyterlab_server/checksums.ini
+++ b/build/pkgs/jupyterlab_server/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyterlab_server-VERSION-py3-none-any.whl
sha1=1fff8c8bc4c81b006cb83d4524dc8a6f3364e57c
sha256=5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876
-upstream_url=https://pypi.io/packages/py3/j/jupyterlab_server/jupyterlab_server-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyterlab_server/jupyterlab_server-VERSION-py3-none-any.whl
diff --git a/build/pkgs/jupyterlab_widgets/checksums.ini b/build/pkgs/jupyterlab_widgets/checksums.ini
index f7a3c9bbeb8..175c8761871 100644
--- a/build/pkgs/jupyterlab_widgets/checksums.ini
+++ b/build/pkgs/jupyterlab_widgets/checksums.ini
@@ -1,4 +1,4 @@
tarball=jupyterlab_widgets-VERSION-py3-none-any.whl
sha1=b10775bb3966af627bb44fbda4efb553b24a5b93
sha256=3cf5bdf5b897bf3bccf1c11873aa4afd776d7430200f765e0686bd352487b58d
-upstream_url=https://pypi.io/packages/py3/j/jupyterlab_widgets/jupyterlab_widgets-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/j/jupyterlab_widgets/jupyterlab_widgets-VERSION-py3-none-any.whl
diff --git a/build/pkgs/libatomic_ops/distros/cygwin.txt b/build/pkgs/libatomic_ops/distros/cygwin.txt
deleted file mode 100644
index 56dbd90c363..00000000000
--- a/build/pkgs/libatomic_ops/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libatomic_ops-devel
diff --git a/build/pkgs/libffi/distros/cygwin.txt b/build/pkgs/libffi/distros/cygwin.txt
deleted file mode 100644
index 31d794ff28d..00000000000
--- a/build/pkgs/libffi/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libffi-devel
diff --git a/build/pkgs/libgd/distros/cygwin.txt b/build/pkgs/libgd/distros/cygwin.txt
deleted file mode 100644
index 3094bd88c2e..00000000000
--- a/build/pkgs/libgd/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libgd-devel
diff --git a/build/pkgs/libgraphviz/distros/cygwin.txt b/build/pkgs/libgraphviz/distros/cygwin.txt
deleted file mode 100644
index 4d95609306f..00000000000
--- a/build/pkgs/libgraphviz/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-graphviz
diff --git a/build/pkgs/liblzma/distros/cygwin.txt b/build/pkgs/liblzma/distros/cygwin.txt
deleted file mode 100644
index c5fa156f8a0..00000000000
--- a/build/pkgs/liblzma/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-xz
-liblzma-devel
diff --git a/build/pkgs/libsemigroups/checksums.ini b/build/pkgs/libsemigroups/checksums.ini
index e258d4f2058..f34a1ed428d 100644
--- a/build/pkgs/libsemigroups/checksums.ini
+++ b/build/pkgs/libsemigroups/checksums.ini
@@ -1,4 +1,4 @@
tarball=libsemigroups-VERSION.tar.gz
-sha1=86375824b47ce4b0e23570122e873f67136d0c0a
-sha256=6214fd9e87af3834ff5eb6377cde1cbef76c74b233e1b0c4d15af1d2311692b4
+sha1=9c8e73b18a4964135b63e03b2f36b874742edd62
+sha256=d4d88a11651c7d7d497f847fea97e3ff60a39b25b851c1d0d7ccf41e052612be
upstream_url=https://github.com/libsemigroups/libsemigroups/releases/download/vVERSION/libsemigroups-VERSION.tar.gz
diff --git a/build/pkgs/libsemigroups/package-version.txt b/build/pkgs/libsemigroups/package-version.txt
index f90b1afc082..2c9b4ef42ec 100644
--- a/build/pkgs/libsemigroups/package-version.txt
+++ b/build/pkgs/libsemigroups/package-version.txt
@@ -1 +1 @@
-2.3.2
+2.7.3
diff --git a/build/pkgs/libxml2/distros/cygwin.txt b/build/pkgs/libxml2/distros/cygwin.txt
deleted file mode 100644
index 313ee711738..00000000000
--- a/build/pkgs/libxml2/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libxml2-devel
diff --git a/build/pkgs/llvm/distros/cygwin.txt b/build/pkgs/llvm/distros/cygwin.txt
deleted file mode 100644
index e671fa21003..00000000000
--- a/build/pkgs/llvm/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-clang
diff --git a/build/pkgs/lrcalc_python/checksums.ini b/build/pkgs/lrcalc_python/checksums.ini
index 99e136d82bb..e86d6c9f9bb 100644
--- a/build/pkgs/lrcalc_python/checksums.ini
+++ b/build/pkgs/lrcalc_python/checksums.ini
@@ -1,4 +1,4 @@
tarball=lrcalc-VERSION.tar.gz
sha1=3e9366d9e8b8beccec70b07d174b8f6683c01574
sha256=e3a0509aeda487b412b391a52e817ca36b5c063a8305e09fd54d53259dd6aaa9
-upstream_url=https://pypi.io/packages/source/l/lrcalc/lrcalc-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/l/lrcalc/lrcalc-VERSION.tar.gz
diff --git a/build/pkgs/markupsafe/checksums.ini b/build/pkgs/markupsafe/checksums.ini
index 8b2cb02af26..e5cf079ef2d 100644
--- a/build/pkgs/markupsafe/checksums.ini
+++ b/build/pkgs/markupsafe/checksums.ini
@@ -1,4 +1,4 @@
tarball=MarkupSafe-VERSION.tar.gz
sha1=08593f9490b9be070aa2337e7311a392d33944dd
sha256=d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b
-upstream_url=https://pypi.io/packages/source/m/markupsafe/MarkupSafe-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/m/markupsafe/MarkupSafe-VERSION.tar.gz
diff --git a/build/pkgs/matplotlib/checksums.ini b/build/pkgs/matplotlib/checksums.ini
index 317be590bcf..bf2fc1fad14 100644
--- a/build/pkgs/matplotlib/checksums.ini
+++ b/build/pkgs/matplotlib/checksums.ini
@@ -1,4 +1,4 @@
tarball=matplotlib-VERSION.tar.gz
sha1=b3391b48ab0bf91778064ce5b2226ff2a2658d7c
sha256=df8505e1c19d5c2c26aff3497a7cbd3ccfc2e97043d1e4db3e76afa399164b69
-upstream_url=https://pypi.io/packages/source/m/matplotlib/matplotlib-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/m/matplotlib/matplotlib-VERSION.tar.gz
diff --git a/build/pkgs/matplotlib_inline/checksums.ini b/build/pkgs/matplotlib_inline/checksums.ini
index 294cf1a777a..455e0e93785 100644
--- a/build/pkgs/matplotlib_inline/checksums.ini
+++ b/build/pkgs/matplotlib_inline/checksums.ini
@@ -1,4 +1,4 @@
tarball=matplotlib-inline-VERSION.tar.gz
sha1=a09347e3f2eaa6f9453c773132bf4bd9d38e2163
sha256=f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304
-upstream_url=https://pypi.io/packages/source/m/matplotlib_inline/matplotlib-inline-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/m/matplotlib_inline/matplotlib-inline-VERSION.tar.gz
diff --git a/build/pkgs/matroid_database/checksums.ini b/build/pkgs/matroid_database/checksums.ini
index c5415da0919..5a87bc3e746 100644
--- a/build/pkgs/matroid_database/checksums.ini
+++ b/build/pkgs/matroid_database/checksums.ini
@@ -1,4 +1,4 @@
tarball=matroid_database-VERSION-py3-none-any.whl
sha1=f6539d37c9a03e14a8b100555525d3b54feb602b
sha256=85d0304575784ceb4797014fb5a761443d2a0bbf01aafc38ef293d2c64a1b5ce
-upstream_url=https://pypi.io/packages/py3/m/matroid_database/matroid_database-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/m/matroid_database/matroid_database-VERSION-py3-none-any.whl
diff --git a/build/pkgs/matroid_database/math b/build/pkgs/matroid_database/math
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/build/pkgs/maxima/distros/cygwin.txt b/build/pkgs/maxima/distros/cygwin.txt
deleted file mode 100644
index f5fe3fdc6cb..00000000000
--- a/build/pkgs/maxima/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-maxima
diff --git a/build/pkgs/memory_allocator/checksums.ini b/build/pkgs/memory_allocator/checksums.ini
index 9aaa169c6dd..fb1ba9b6c90 100644
--- a/build/pkgs/memory_allocator/checksums.ini
+++ b/build/pkgs/memory_allocator/checksums.ini
@@ -1,4 +1,4 @@
tarball=memory_allocator-VERSION.tar.gz
sha1=21661580dd3f41aac0f2090033d8804e6ff495d9
sha256=d609216b03031967e2b45a804b12ff9029578f4ec019fde42cf6aed6ca09efe4
-upstream_url=https://pypi.io/packages/source/m/memory_allocator/memory_allocator-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/m/memory_allocator/memory_allocator-VERSION.tar.gz
diff --git a/build/pkgs/meson/checksums.ini b/build/pkgs/meson/checksums.ini
index 00cf028db1e..23230d96040 100644
--- a/build/pkgs/meson/checksums.ini
+++ b/build/pkgs/meson/checksums.ini
@@ -1,4 +1,4 @@
tarball=meson-VERSION-py3-none-any.whl
sha1=baf5b9bc9ca97f18c7dc87cfaf0e1dc4d617a4cf
sha256=d5223ecca9564d735d36daaba2571abc6c032c8c3a7ffa0674e803ef0c7e0219
-upstream_url=https://pypi.io/packages/py3/m/meson/meson-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/m/meson/meson-VERSION-py3-none-any.whl
diff --git a/build/pkgs/meson_python/checksums.ini b/build/pkgs/meson_python/checksums.ini
index 7aa199d18fb..d754ae46233 100644
--- a/build/pkgs/meson_python/checksums.ini
+++ b/build/pkgs/meson_python/checksums.ini
@@ -1,4 +1,4 @@
tarball=meson_python-VERSION.tar.gz
sha1=71bf382c2f2e76aada2f511a84bd59a99a6b1238
sha256=fddb73eecd49e89c1c41c87937cd89c2d0b65a1c63ba28238681d4bd9484d26f
-upstream_url=https://pypi.io/packages/source/m/meson_python/meson_python-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/m/meson_python/meson_python-VERSION.tar.gz
diff --git a/build/pkgs/mistune/checksums.ini b/build/pkgs/mistune/checksums.ini
index 93397f7ab48..8c77e16a54e 100644
--- a/build/pkgs/mistune/checksums.ini
+++ b/build/pkgs/mistune/checksums.ini
@@ -1,4 +1,4 @@
tarball=mistune-VERSION.tar.gz
sha1=c15d02c98d04a3e615c3c1932d1b9a3b1759067a
sha256=9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808
-upstream_url=https://pypi.io/packages/source/m/mistune/mistune-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/m/mistune/mistune-VERSION.tar.gz
diff --git a/build/pkgs/mpc/distros/cygwin.txt b/build/pkgs/mpc/distros/cygwin.txt
deleted file mode 100644
index 279a55fdb8b..00000000000
--- a/build/pkgs/mpc/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libmpc-devel
diff --git a/build/pkgs/mpfr/distros/cygwin.txt b/build/pkgs/mpfr/distros/cygwin.txt
deleted file mode 100644
index e02bb1bdbb1..00000000000
--- a/build/pkgs/mpfr/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libmpfr-devel
diff --git a/build/pkgs/nbclient/checksums.ini b/build/pkgs/nbclient/checksums.ini
index 6290bb30c93..79d4e17cc53 100644
--- a/build/pkgs/nbclient/checksums.ini
+++ b/build/pkgs/nbclient/checksums.ini
@@ -1,4 +1,4 @@
tarball=nbclient-VERSION-py3-none-any.whl
sha1=fcb4ad9b3ea1bea4d305076c0a7640a483bd11f3
sha256=25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548
-upstream_url=https://pypi.io/packages/py3/n/nbclient/nbclient-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/n/nbclient/nbclient-VERSION-py3-none-any.whl
diff --git a/build/pkgs/nbconvert/checksums.ini b/build/pkgs/nbconvert/checksums.ini
index 56a861567e4..dc985a9eabc 100644
--- a/build/pkgs/nbconvert/checksums.ini
+++ b/build/pkgs/nbconvert/checksums.ini
@@ -1,4 +1,4 @@
tarball=nbconvert-VERSION-py3-none-any.whl
sha1=5317fa68bbd7f66fc3fcc5b0e6b0d6e2df967ba0
sha256=39fe4b8bdd1b0104fdd86fc8a43a9077ba64c720bda4c6132690d917a0a154ee
-upstream_url=https://pypi.io/packages/py3/n/nbconvert/nbconvert-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/n/nbconvert/nbconvert-VERSION-py3-none-any.whl
diff --git a/build/pkgs/nbformat/checksums.ini b/build/pkgs/nbformat/checksums.ini
index e7a225cadfe..253277f0059 100644
--- a/build/pkgs/nbformat/checksums.ini
+++ b/build/pkgs/nbformat/checksums.ini
@@ -1,4 +1,4 @@
tarball=nbformat-VERSION-py3-none-any.whl
sha1=e38af74817e9d81101583363d9ffe349f0038eb9
sha256=1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9
-upstream_url=https://pypi.io/packages/py3/n/nbformat/nbformat-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/n/nbformat/nbformat-VERSION-py3-none-any.whl
diff --git a/build/pkgs/ncurses/distros/cygwin.txt b/build/pkgs/ncurses/distros/cygwin.txt
deleted file mode 100644
index d29f30ce45b..00000000000
--- a/build/pkgs/ncurses/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libncurses-devel
diff --git a/build/pkgs/nest_asyncio/checksums.ini b/build/pkgs/nest_asyncio/checksums.ini
index 48626a85ae1..8c842535040 100644
--- a/build/pkgs/nest_asyncio/checksums.ini
+++ b/build/pkgs/nest_asyncio/checksums.ini
@@ -1,4 +1,4 @@
tarball=nest_asyncio-VERSION-py3-none-any.whl
sha1=675b145491553e6a725884081244860a635552cd
sha256=87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c
-upstream_url=https://pypi.io/packages/py3/n/nest_asyncio/nest_asyncio-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/n/nest_asyncio/nest_asyncio-VERSION-py3-none-any.whl
diff --git a/build/pkgs/networkx/checksums.ini b/build/pkgs/networkx/checksums.ini
index 7e02c083c6d..e550b84168b 100644
--- a/build/pkgs/networkx/checksums.ini
+++ b/build/pkgs/networkx/checksums.ini
@@ -1,4 +1,4 @@
tarball=networkx-VERSION.tar.gz
sha1=b12cf95ed8bc3fe568e3c8e023473a3767c43f8d
sha256=9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6
-upstream_url=https://pypi.io/packages/source/n/networkx/networkx-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/n/networkx/networkx-VERSION.tar.gz
diff --git a/build/pkgs/ninja_build/distros/cygwin.txt b/build/pkgs/ninja_build/distros/cygwin.txt
deleted file mode 100644
index 63730036fd3..00000000000
--- a/build/pkgs/ninja_build/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-ninja
diff --git a/build/pkgs/notebook/checksums.ini b/build/pkgs/notebook/checksums.ini
index 2c1fd65675e..597fdff1881 100644
--- a/build/pkgs/notebook/checksums.ini
+++ b/build/pkgs/notebook/checksums.ini
@@ -1,4 +1,4 @@
tarball=notebook-VERSION-py3-none-any.whl
sha1=90ec65091058ac541a55cc2417de83c1bcb24985
sha256=197d8e0595acabf4005851c8716e952a81b405f7aefb648067a761fbde267ce7
-upstream_url=https://pypi.io/packages/py3/n/notebook/notebook-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/n/notebook/notebook-VERSION-py3-none-any.whl
diff --git a/build/pkgs/notebook_shim/checksums.ini b/build/pkgs/notebook_shim/checksums.ini
index 001afb43e00..d01ed7810ee 100644
--- a/build/pkgs/notebook_shim/checksums.ini
+++ b/build/pkgs/notebook_shim/checksums.ini
@@ -1,4 +1,4 @@
tarball=notebook_shim-VERSION-py3-none-any.whl
sha1=9bb3dce360ce69aec99f873d8e80c1e9fdf92fde
sha256=a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7
-upstream_url=https://pypi.io/packages/py3/n/notebook_shim/notebook_shim-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/n/notebook_shim/notebook_shim-VERSION-py3-none-any.whl
diff --git a/build/pkgs/ntl/distros/cygwin.txt b/build/pkgs/ntl/distros/cygwin.txt
deleted file mode 100644
index fe822a6c887..00000000000
--- a/build/pkgs/ntl/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libntl-devel
diff --git a/build/pkgs/numpy/checksums.ini b/build/pkgs/numpy/checksums.ini
index fde72f78b6d..6814f0f5c10 100644
--- a/build/pkgs/numpy/checksums.ini
+++ b/build/pkgs/numpy/checksums.ini
@@ -1,4 +1,4 @@
tarball=numpy-VERSION.tar.gz
sha1=915414f1efabd7c183583154cf1a709bd2745828
sha256=697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4
-upstream_url=https://pypi.io/packages/source/n/numpy/numpy-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/n/numpy/numpy-VERSION.tar.gz
diff --git a/build/pkgs/openblas/distros/cygwin.txt b/build/pkgs/openblas/distros/cygwin.txt
deleted file mode 100644
index 055fa2733d1..00000000000
--- a/build/pkgs/openblas/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-liblapack-devel
-libopenblas
diff --git a/build/pkgs/openssl/distros/cygwin.txt b/build/pkgs/openssl/distros/cygwin.txt
deleted file mode 100644
index 77c51ef8194..00000000000
--- a/build/pkgs/openssl/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libssl-devel
diff --git a/build/pkgs/osqp_python/checksums.ini b/build/pkgs/osqp_python/checksums.ini
index d8e1ae4b81b..9fd80df4d5a 100644
--- a/build/pkgs/osqp_python/checksums.ini
+++ b/build/pkgs/osqp_python/checksums.ini
@@ -1,4 +1,4 @@
tarball=osqp-VERSION.tar.gz
sha1=3358e48aa6d81496665a8b0ee157465ce6cd329a
sha256=03e460e683ec2ce0f839353ddfa3c4c8ffa509ab8cf6a2b2afbb586fa453e180
-upstream_url=https://pypi.io/packages/source/o/osqp/osqp-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/o/osqp/osqp-VERSION.tar.gz
diff --git a/build/pkgs/overrides/checksums.ini b/build/pkgs/overrides/checksums.ini
index 2812a196d90..fde4eba9a05 100644
--- a/build/pkgs/overrides/checksums.ini
+++ b/build/pkgs/overrides/checksums.ini
@@ -1,4 +1,4 @@
tarball=overrides-VERSION-py3-none-any.whl
sha1=740e9e607a9e4f78dea7a1b82bcb27f285bc5f48
sha256=3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d
-upstream_url=https://pypi.io/packages/py3/o/overrides/overrides-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/o/overrides/overrides-VERSION-py3-none-any.whl
diff --git a/build/pkgs/packaging/checksums.ini b/build/pkgs/packaging/checksums.ini
index 560bd2a20a4..eae534e3487 100644
--- a/build/pkgs/packaging/checksums.ini
+++ b/build/pkgs/packaging/checksums.ini
@@ -1,4 +1,4 @@
tarball=packaging-VERSION-py3-none-any.whl
sha1=a050029d1e0c1b95b3ddcd566be4ad352cd42666
sha256=5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124
-upstream_url=https://pypi.io/packages/py3/p/packaging/packaging-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/packaging/packaging-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pandocfilters/checksums.ini b/build/pkgs/pandocfilters/checksums.ini
index d85750a17f7..5e6e659ef46 100644
--- a/build/pkgs/pandocfilters/checksums.ini
+++ b/build/pkgs/pandocfilters/checksums.ini
@@ -1,4 +1,4 @@
tarball=pandocfilters-VERSION.tar.gz
sha1=bdee4f81063c02168b421640f3e18917011153df
sha256=0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38
-upstream_url=https://pypi.io/packages/source/p/pandocfilters/pandocfilters-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pandocfilters/pandocfilters-VERSION.tar.gz
diff --git a/build/pkgs/pari/checksums.ini b/build/pkgs/pari/checksums.ini
index 12c05141bf1..d56c437a2ee 100644
--- a/build/pkgs/pari/checksums.ini
+++ b/build/pkgs/pari/checksums.ini
@@ -1,4 +1,4 @@
tarball=pari-VERSION.tar.gz
-sha1=ae962671b5bf86849d2021113dfb5b2f59331a10
-sha256=c3545bfee0c6dfb40b77fb4bbabaf999d82e60069b9f6d28bcb6cf004c8c5c0f
-upstream_url=https://pari.math.u-bordeaux.fr/pub/pari/unix/pari-VERSION.tar.gz
+sha1=377593dfe72df13578ea0a517fcb0f81cc9758d4
+sha256=0efdda7515d9d954f63324c34b34c560e60f73a81c3924a71260a2cc91d5f981
+upstream_url=https://pari.math.u-bordeaux.fr/pub/pari/OLD/${VERSION_MAJOR}.${VERSION_MINOR}/pari-VERSION.tar.gz
diff --git a/build/pkgs/pari/package-version.txt b/build/pkgs/pari/package-version.txt
index 86fbeafcc20..7a561821071 100644
--- a/build/pkgs/pari/package-version.txt
+++ b/build/pkgs/pari/package-version.txt
@@ -1 +1 @@
-2.15.4
+2.15.5
diff --git a/build/pkgs/pari_jupyter/checksums.ini b/build/pkgs/pari_jupyter/checksums.ini
index bdd7d5278be..c1fe2ec687f 100644
--- a/build/pkgs/pari_jupyter/checksums.ini
+++ b/build/pkgs/pari_jupyter/checksums.ini
@@ -1,4 +1,4 @@
tarball=pari-jupyter-VERSION.tar.gz
sha1=b410ee0352cd58f5f140246540b71b5ff83ddf73
sha256=7cd9291d05b92b8303c6ae8cf25622e5ecbab1ac2bcf13911f900ea987471b9d
-upstream_url=https://pypi.io/packages/source/p/pari_jupyter/pari-jupyter-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pari_jupyter/pari-jupyter-VERSION.tar.gz
diff --git a/build/pkgs/parso/checksums.ini b/build/pkgs/parso/checksums.ini
index d15402d82de..a45225c3a6d 100644
--- a/build/pkgs/parso/checksums.ini
+++ b/build/pkgs/parso/checksums.ini
@@ -1,4 +1,4 @@
tarball=parso-VERSION-py2.py3-none-any.whl
sha1=091d37e09a601d854e18f4d42aeb478392bb7e63
sha256=a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18
-upstream_url=https://pypi.io/packages/py2.py3/p/parso/parso-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/p/parso/parso-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/patch/distros/cygwin.txt b/build/pkgs/patch/distros/cygwin.txt
deleted file mode 100644
index 9eb7b90ed50..00000000000
--- a/build/pkgs/patch/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-patch
diff --git a/build/pkgs/pathspec/checksums.ini b/build/pkgs/pathspec/checksums.ini
index 62d6d08775e..a3af9942abc 100644
--- a/build/pkgs/pathspec/checksums.ini
+++ b/build/pkgs/pathspec/checksums.ini
@@ -1,4 +1,4 @@
tarball=pathspec-VERSION-py3-none-any.whl
sha1=e31b7b2b1a59ab192eb2e92ac283211a11039769
sha256=a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08
-upstream_url=https://pypi.io/packages/py3/p/pathspec/pathspec-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pathspec/pathspec-VERSION-py3-none-any.whl
diff --git a/build/pkgs/perl_term_readline_gnu/distros/cygwin.txt b/build/pkgs/perl_term_readline_gnu/distros/cygwin.txt
deleted file mode 100644
index 3b6a90263dd..00000000000
--- a/build/pkgs/perl_term_readline_gnu/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-perl-Term-ReadLine-Gnu
diff --git a/build/pkgs/pexpect/checksums.ini b/build/pkgs/pexpect/checksums.ini
index 413053e79a1..dadcb1e66e1 100644
--- a/build/pkgs/pexpect/checksums.ini
+++ b/build/pkgs/pexpect/checksums.ini
@@ -1,4 +1,4 @@
tarball=pexpect-VERSION.tar.gz
sha1=5bff9230c419eecbf701059f104e74a3f3a1b208
sha256=ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f
-upstream_url=https://pypi.io/packages/source/p/pexpect/pexpect-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pexpect/pexpect-VERSION.tar.gz
diff --git a/build/pkgs/pillow/checksums.ini b/build/pkgs/pillow/checksums.ini
index 7e64940e75b..5467334d4b7 100644
--- a/build/pkgs/pillow/checksums.ini
+++ b/build/pkgs/pillow/checksums.ini
@@ -1,4 +1,4 @@
tarball=Pillow-VERSION.tar.gz
sha1=be2dc6aeee145894f3ccbc2358a37f7849e710aa
sha256=e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38
-upstream_url=https://pypi.io/packages/source/p/pillow/Pillow-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pillow/Pillow-VERSION.tar.gz
diff --git a/build/pkgs/pip/checksums.ini b/build/pkgs/pip/checksums.ini
index 0afec1866ed..43918d193ee 100644
--- a/build/pkgs/pip/checksums.ini
+++ b/build/pkgs/pip/checksums.ini
@@ -1,4 +1,4 @@
tarball=pip-VERSION-py3-none-any.whl
sha1=044a04440eef697c8ec9e03544117345c57aa683
sha256=2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2
-upstream_url=https://pypi.io/packages/py3/p/pip/pip-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pip/pip-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pkgconfig/checksums.ini b/build/pkgs/pkgconfig/checksums.ini
index 4ecbe8c0096..dbf6ebdd342 100644
--- a/build/pkgs/pkgconfig/checksums.ini
+++ b/build/pkgs/pkgconfig/checksums.ini
@@ -1,4 +1,4 @@
tarball=pkgconfig-VERSION-py3-none-any.whl
sha1=bca14b2806a8e8afb0bd04f8e3675550b286dda8
sha256=d20023bbeb42ee6d428a0fac6e0904631f545985a10cdd71a20aa58bc47a4209
-upstream_url=https://pypi.io/packages/py3/p/pkgconfig/pkgconfig-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pkgconfig/pkgconfig-VERSION-py3-none-any.whl
diff --git a/build/pkgs/planarity/checksums.ini b/build/pkgs/planarity/checksums.ini
index 06b8d7622c6..3caec0cca3f 100644
--- a/build/pkgs/planarity/checksums.ini
+++ b/build/pkgs/planarity/checksums.ini
@@ -1,4 +1,4 @@
tarball=planarity-VERSION.tar.gz
sha1=8407bccf33c07bf0dae22d79b5e6ac7d89c62ea3
sha256=63e979d37e7160e4e72a286a8dd7ba74e4795f63742f417c8ba1cea2b2a51280
-upstream_url=http://users.ox.ac.uk/~coml0531/sage/planarity-VERSION.tar.gz
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/planarity-VERSION.tar.gz
diff --git a/build/pkgs/platformdirs/checksums.ini b/build/pkgs/platformdirs/checksums.ini
index 201a01de014..8263d7baf15 100644
--- a/build/pkgs/platformdirs/checksums.ini
+++ b/build/pkgs/platformdirs/checksums.ini
@@ -1,4 +1,4 @@
tarball=platformdirs-VERSION-py3-none-any.whl
sha1=81890edbdf2f709f83001cb5bcfd71c3978225ce
sha256=2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee
-upstream_url=https://pypi.io/packages/py3/p/platformdirs/platformdirs-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/platformdirs/platformdirs-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pluggy/checksums.ini b/build/pkgs/pluggy/checksums.ini
index 3b6e7041f14..27359819ce2 100644
--- a/build/pkgs/pluggy/checksums.ini
+++ b/build/pkgs/pluggy/checksums.ini
@@ -1,4 +1,4 @@
tarball=pluggy-VERSION-py3-none-any.whl
sha1=ccb7a74c114522f26e2c3b1884468343f54098d3
sha256=44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669
-upstream_url=https://pypi.io/packages/py3/p/pluggy/pluggy-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pluggy/pluggy-VERSION-py3-none-any.whl
diff --git a/build/pkgs/ply/checksums.ini b/build/pkgs/ply/checksums.ini
index f1003c4c4a0..ffce85083d4 100644
--- a/build/pkgs/ply/checksums.ini
+++ b/build/pkgs/ply/checksums.ini
@@ -1,4 +1,4 @@
tarball=ply-VERSION.tar.gz
sha1=10a555a32095991fbc7f7ed10c677a14e21fad1d
sha256=00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3
-upstream_url=https://pypi.io/packages/source/p/ply/ply-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/ply/ply-VERSION.tar.gz
diff --git a/build/pkgs/pplpy/checksums.ini b/build/pkgs/pplpy/checksums.ini
index 76268f169e2..b864f9fcd26 100644
--- a/build/pkgs/pplpy/checksums.ini
+++ b/build/pkgs/pplpy/checksums.ini
@@ -1,4 +1,4 @@
tarball=pplpy-VERSION.tar.gz
sha1=dc9e8a7a867ee1c066bdbecf22b6a59dc2052711
sha256=db7a3b571d6ef053f75137975e947c3a1c1e45a30bab90eaf215b4e5cc15797e
-upstream_url=https://pypi.io/packages/source/p/pplpy/pplpy-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pplpy/pplpy-VERSION.tar.gz
diff --git a/build/pkgs/primecountpy/checksums.ini b/build/pkgs/primecountpy/checksums.ini
index 57cae477764..dd8445635a3 100644
--- a/build/pkgs/primecountpy/checksums.ini
+++ b/build/pkgs/primecountpy/checksums.ini
@@ -1,4 +1,4 @@
tarball=primecountpy-VERSION.tar.gz
sha1=3526784adad04d67a15f05fb1367d12ec50a59dc
sha256=78fe7cc32115f0669a45d7c90faaf39f7ce3939e39e2e7e5f14c17fe4bff0676
-upstream_url=https://pypi.io/packages/source/p/primecountpy/primecountpy-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/primecountpy/primecountpy-VERSION.tar.gz
diff --git a/build/pkgs/prometheus_client/checksums.ini b/build/pkgs/prometheus_client/checksums.ini
index 9f4fa1845da..7e0ea2a4f0c 100644
--- a/build/pkgs/prometheus_client/checksums.ini
+++ b/build/pkgs/prometheus_client/checksums.ini
@@ -1,4 +1,4 @@
tarball=prometheus_client-VERSION.tar.gz
sha1=dabd66e652ea8275b4980e337cefcea68cc0b560
sha256=5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a
-upstream_url=https://pypi.io/packages/source/p/prometheus-client/prometheus_client-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/prometheus-client/prometheus_client-VERSION.tar.gz
diff --git a/build/pkgs/prompt_toolkit/checksums.ini b/build/pkgs/prompt_toolkit/checksums.ini
index 3f4bd25570c..e63fb8d4a10 100644
--- a/build/pkgs/prompt_toolkit/checksums.ini
+++ b/build/pkgs/prompt_toolkit/checksums.ini
@@ -1,4 +1,4 @@
tarball=prompt_toolkit-VERSION.tar.gz
sha1=b5ada8cb45c11f9184c990bd33a98d3d690e6edc
sha256=3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d
-upstream_url=https://pypi.io/packages/source/p/prompt_toolkit/prompt_toolkit-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/prompt_toolkit/prompt_toolkit-VERSION.tar.gz
diff --git a/build/pkgs/psutil/checksums.ini b/build/pkgs/psutil/checksums.ini
index 417c2210384..53c177f96f5 100644
--- a/build/pkgs/psutil/checksums.ini
+++ b/build/pkgs/psutil/checksums.ini
@@ -1,4 +1,4 @@
tarball=psutil-VERSION.tar.gz
sha1=24c493ef33d4df44e76a1801e480b4185bd911c5
sha256=e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a
-upstream_url=https://pypi.io/packages/source/p/psutil/psutil-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/psutil/psutil-VERSION.tar.gz
diff --git a/build/pkgs/ptyprocess/checksums.ini b/build/pkgs/ptyprocess/checksums.ini
index 36a12e0f438..3382e090c02 100644
--- a/build/pkgs/ptyprocess/checksums.ini
+++ b/build/pkgs/ptyprocess/checksums.ini
@@ -1,4 +1,4 @@
tarball=ptyprocess-VERSION.tar.gz
sha1=2d8830d1025c8e33149c7723c2f283122f9488c1
sha256=5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220
-upstream_url=https://pypi.io/packages/source/p/ptyprocess/ptyprocess-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/ptyprocess/ptyprocess-VERSION.tar.gz
diff --git a/build/pkgs/pure_eval/checksums.ini b/build/pkgs/pure_eval/checksums.ini
index 1cdf6f8d2a4..b753dbf3804 100644
--- a/build/pkgs/pure_eval/checksums.ini
+++ b/build/pkgs/pure_eval/checksums.ini
@@ -1,4 +1,4 @@
tarball=pure_eval-VERSION-py3-none-any.whl
sha1=dbd5eaa9eb5a4910cff5ccd42b570f866f581da4
sha256=01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350
-upstream_url=https://pypi.io/packages/py3/p/pure_eval/pure_eval-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pure_eval/pure_eval-VERSION-py3-none-any.whl
diff --git a/build/pkgs/py/checksums.ini b/build/pkgs/py/checksums.ini
index a10022af08f..48e330dae0a 100644
--- a/build/pkgs/py/checksums.ini
+++ b/build/pkgs/py/checksums.ini
@@ -1,4 +1,4 @@
tarball=py-VERSION-py2.py3-none-any.whl
sha1=44002baec8d2184d218bd2fa6049967cd9b4dbb5
sha256=607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
-upstream_url=https://pypi.io/packages/py2.py3/p/py/py-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/p/py/py-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/pybind11/checksums.ini b/build/pkgs/pybind11/checksums.ini
index c3112e54327..66a54f106b5 100644
--- a/build/pkgs/pybind11/checksums.ini
+++ b/build/pkgs/pybind11/checksums.ini
@@ -1,4 +1,4 @@
tarball=pybind11-VERSION.tar.gz
sha1=3c75333a9056f0be18eb612803cd46a2bb0c87fc
sha256=00cd59116a6e8155aecd9174f37ba299d1d397ed4a6b86ac1dfe01b3e40f2cc4
-upstream_url=https://pypi.io/packages/source/p/pybind11/pybind11-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pybind11/pybind11-VERSION.tar.gz
diff --git a/build/pkgs/pycparser/checksums.ini b/build/pkgs/pycparser/checksums.ini
index 4d250e61a00..c5928f41542 100644
--- a/build/pkgs/pycparser/checksums.ini
+++ b/build/pkgs/pycparser/checksums.ini
@@ -1,4 +1,4 @@
tarball=pycparser-VERSION-py3-none-any.whl
sha1=34702512290f3bfd4850bcc95dfaf1ae972a8929
sha256=c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
-upstream_url=https://pypi.io/packages/py3/p/pycparser/pycparser-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pycparser/pycparser-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pygments/checksums.ini b/build/pkgs/pygments/checksums.ini
index 5a54fdd0b9a..9a712f15b35 100644
--- a/build/pkgs/pygments/checksums.ini
+++ b/build/pkgs/pygments/checksums.ini
@@ -1,4 +1,4 @@
tarball=pygments-VERSION-py3-none-any.whl
sha1=edb9fdfbc4cf53d356a02beee8822dd8e9529f35
sha256=b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a
-upstream_url=https://pypi.io/packages/py3/p/pygments/pygments-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pygments/pygments-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pynormaliz/checksums.ini b/build/pkgs/pynormaliz/checksums.ini
index caac1894126..70f40fc73c8 100644
--- a/build/pkgs/pynormaliz/checksums.ini
+++ b/build/pkgs/pynormaliz/checksums.ini
@@ -1,4 +1,4 @@
tarball=pynormaliz-VERSION.tar.gz
sha1=4ce4fef4db61a0408bc84747294922fc49afc090
sha256=95d29fff9380ea2948166fd2b4c730985e0881043fa41f3e44ff9f402b97f0b4
-upstream_url=https://pypi.io/packages/source/p/pynormaliz/pynormaliz-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pynormaliz/pynormaliz-VERSION.tar.gz
diff --git a/build/pkgs/pyparsing/checksums.ini b/build/pkgs/pyparsing/checksums.ini
index 931d057f6b8..997792b6c82 100644
--- a/build/pkgs/pyparsing/checksums.ini
+++ b/build/pkgs/pyparsing/checksums.ini
@@ -1,4 +1,4 @@
tarball=pyparsing-VERSION-py3-none-any.whl
sha1=bf1ab91fb997ccee2793e1e7f22a56a25f5e3a93
sha256=f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742
-upstream_url=https://pypi.io/packages/py3/p/pyparsing/pyparsing-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pyparsing/pyparsing-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pyproject_api/checksums.ini b/build/pkgs/pyproject_api/checksums.ini
index dc2899fad91..fb4bd700824 100644
--- a/build/pkgs/pyproject_api/checksums.ini
+++ b/build/pkgs/pyproject_api/checksums.ini
@@ -1,4 +1,4 @@
tarball=pyproject_api-VERSION-py3-none-any.whl
sha1=3723eb52bd6844f30f30f6f5b3723ce0f57a3cbf
sha256=2dc1654062c2b27733d8fd4cdda672b22fe8741ef1dde8e3a998a9547b071eeb
-upstream_url=https://pypi.io/packages/py3/p/pyproject_api/pyproject_api-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pyproject_api/pyproject_api-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pyproject_hooks/checksums.ini b/build/pkgs/pyproject_hooks/checksums.ini
index fbb1f71394e..590aec528d6 100644
--- a/build/pkgs/pyproject_hooks/checksums.ini
+++ b/build/pkgs/pyproject_hooks/checksums.ini
@@ -1,4 +1,4 @@
tarball=pyproject_hooks-VERSION-py3-none-any.whl
sha1=f8c16752e1deea6a3e9a261c6725c1af408d04e7
sha256=7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2
-upstream_url=https://pypi.io/packages/py3/p/pyproject_hooks/pyproject_hooks-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pyproject_hooks/pyproject_hooks-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pyproject_metadata/checksums.ini b/build/pkgs/pyproject_metadata/checksums.ini
index 91d3eb258c8..6dc2957b57f 100644
--- a/build/pkgs/pyproject_metadata/checksums.ini
+++ b/build/pkgs/pyproject_metadata/checksums.ini
@@ -1,4 +1,4 @@
tarball=pyproject_metadata-VERSION-py3-none-any.whl
sha1=59998bbcd31cc63f3e95f3ad8120ff71326595a0
sha256=ad858d448e1d3a1fb408ac5bac9ea7743e7a8bbb472f2693aaa334d2db42f526
-upstream_url=https://pypi.io/packages/py3/p/pyproject_metadata/pyproject_metadata-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pyproject_metadata/pyproject_metadata-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pyrsistent/checksums.ini b/build/pkgs/pyrsistent/checksums.ini
index b7a30f5a171..24a4d3c62ff 100644
--- a/build/pkgs/pyrsistent/checksums.ini
+++ b/build/pkgs/pyrsistent/checksums.ini
@@ -1,4 +1,4 @@
tarball=pyrsistent-VERSION.tar.gz
sha1=79980873658f7634ae25758b9710088b62e0612a
sha256=1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440
-upstream_url=https://pypi.io/packages/source/p/pyrsistent/pyrsistent-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pyrsistent/pyrsistent-VERSION.tar.gz
diff --git a/build/pkgs/pyscipopt/checksums.ini b/build/pkgs/pyscipopt/checksums.ini
index a88c5cf04d8..b41ec57e3f7 100644
--- a/build/pkgs/pyscipopt/checksums.ini
+++ b/build/pkgs/pyscipopt/checksums.ini
@@ -1,4 +1,4 @@
tarball=PySCIPOpt-VERSION.tar.gz
sha1=713e32cc0ff112500c4f43487614094ece4a8bbf
sha256=f9c36c941e1373406b00c030f2511578c3fb02a95a2cf5559772deb846a0af47
-upstream_url=https://pypi.io/packages/source/p/pyscipopt/PySCIPOpt-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pyscipopt/PySCIPOpt-VERSION.tar.gz
diff --git a/build/pkgs/pysingular/checksums.ini b/build/pkgs/pysingular/checksums.ini
index 9f26a37fc9b..0a5e4f3f176 100644
--- a/build/pkgs/pysingular/checksums.ini
+++ b/build/pkgs/pysingular/checksums.ini
@@ -1,4 +1,4 @@
tarball=PySingular-VERSION.tar.gz
sha1=c8d4bbe4552490aac37afe6d87a2cd3a7b445a7e
sha256=ca03d1d7538fc61f4350acff42708c6c443e0232712a2dc42ce72140831ef60c
-upstream_url=https://pypi.io/packages/source/p/pysingular/PySingular-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pysingular/PySingular-VERSION.tar.gz
diff --git a/build/pkgs/pytest/checksums.ini b/build/pkgs/pytest/checksums.ini
index 3b273f6dc6a..78106ab01b5 100644
--- a/build/pkgs/pytest/checksums.ini
+++ b/build/pkgs/pytest/checksums.ini
@@ -1,4 +1,4 @@
tarball=pytest-VERSION-py3-none-any.whl
sha1=985b136db51e6729983433c6632564dc557f5fb6
sha256=4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5
-upstream_url=https://pypi.io/packages/py3/p/pytest/pytest-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pytest/pytest-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pytest_mock/checksums.ini b/build/pkgs/pytest_mock/checksums.ini
index 181cfb34ea0..46f252da1c6 100644
--- a/build/pkgs/pytest_mock/checksums.ini
+++ b/build/pkgs/pytest_mock/checksums.ini
@@ -1,4 +1,4 @@
tarball=pytest_mock-VERSION-py3-none-any.whl
sha1=7fcd316f0d08a7c961bec3ca0d756429ccb6b840
sha256=0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f
-upstream_url=https://pypi.io/packages/py3/p/pytest_mock/pytest_mock-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pytest_mock/pytest_mock-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pytest_xdist/checksums.ini b/build/pkgs/pytest_xdist/checksums.ini
index 97486be4a3a..80547c2d005 100644
--- a/build/pkgs/pytest_xdist/checksums.ini
+++ b/build/pkgs/pytest_xdist/checksums.ini
@@ -1,4 +1,4 @@
tarball=pytest_xdist-VERSION-py3-none-any.whl
sha1=de5b68f355cb51478ba9d5104da67a6359dee9e0
sha256=9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7
-upstream_url=https://pypi.io/packages/py3/p/pytest_xdist/pytest_xdist-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/pytest_xdist/pytest_xdist-VERSION-py3-none-any.whl
diff --git a/build/pkgs/python3/distros/cygwin.txt b/build/pkgs/python3/distros/cygwin.txt
deleted file mode 100644
index 8e0df5adb0d..00000000000
--- a/build/pkgs/python3/distros/cygwin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# as of #27824, we use python3 for venv as well
-python39-devel
-# #34088 - make ensurepip work
-python-pip-wheel
-python-setuptools-wheel
diff --git a/build/pkgs/python3/spkg-configure.m4 b/build/pkgs/python3/spkg-configure.m4
index a51e2394e51..c6938ea7080 100644
--- a/build/pkgs/python3/spkg-configure.m4
+++ b/build/pkgs/python3/spkg-configure.m4
@@ -70,12 +70,6 @@ SAGE_SPKG_CONFIGURE([python3], [
sage_spkg_install_python3=yes
])
])
- AS_CASE([$host],
- [*-*-cygwin*], [AS_VAR_IF([sage_spkg_install_python3], [yes], [
- AS_VAR_APPEND([SAGE_SPKG_ERRORS], ["
- On Cygwin, python3 must be installed as a system package. This is an error."])
- ])
- ])
],, [
dnl PRE
], [
diff --git a/build/pkgs/python_build/checksums.ini b/build/pkgs/python_build/checksums.ini
index c2bafe9d49d..31a63bf6f56 100644
--- a/build/pkgs/python_build/checksums.ini
+++ b/build/pkgs/python_build/checksums.ini
@@ -1,4 +1,4 @@
tarball=build-VERSION-py3-none-any.whl
sha1=950bf228726af5041adbe2bb04a7ca74e27bce60
sha256=75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4
-upstream_url=https://pypi.io/packages/py3/b/build/build-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/b/build/build-VERSION-py3-none-any.whl
diff --git a/build/pkgs/python_flint/checksums.ini b/build/pkgs/python_flint/checksums.ini
index 19d40c1c7b1..2ed12a73b03 100644
--- a/build/pkgs/python_flint/checksums.ini
+++ b/build/pkgs/python_flint/checksums.ini
@@ -1,4 +1,4 @@
tarball=python-flint-VERSION.tar.gz
sha1=c7d5b3b8db47c903eea9e752bd7732e34d6c5945
sha256=f829e00774534891b38de41bc511cf6c7d6d216544a6a84b92d9e1f159de0878
-upstream_url=https://pypi.io/packages/source/p/python_flint/python-flint-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/python_flint/python-flint-VERSION.tar.gz
diff --git a/build/pkgs/python_igraph/checksums.ini b/build/pkgs/python_igraph/checksums.ini
index d7247b21a30..f7e3d8bff22 100644
--- a/build/pkgs/python_igraph/checksums.ini
+++ b/build/pkgs/python_igraph/checksums.ini
@@ -1,4 +1,4 @@
tarball=python-igraph-VERSION.tar.gz
sha1=da963213ab22c60938d4e77ffab811875ee43a8a
sha256=2d71d645a4c3344c5910543fabbae10d3163f46a3e824ba7753c14b9036b8233
-upstream_url=https://pypi.io/packages/source/i/igraph/igraph-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/i/igraph/igraph-VERSION.tar.gz
diff --git a/build/pkgs/python_json_logger/checksums.ini b/build/pkgs/python_json_logger/checksums.ini
index 2856b66a14f..7b737ad2ad7 100644
--- a/build/pkgs/python_json_logger/checksums.ini
+++ b/build/pkgs/python_json_logger/checksums.ini
@@ -1,4 +1,4 @@
tarball=python_json_logger-VERSION-py3-none-any.whl
sha1=c1176f521d95b5452b6169943b2b9b259e024b39
sha256=f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd
-upstream_url=https://pypi.io/packages/py3/p/python_json_logger/python_json_logger-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/p/python_json_logger/python_json_logger-VERSION-py3-none-any.whl
diff --git a/build/pkgs/pythran/checksums.ini b/build/pkgs/pythran/checksums.ini
index 03d21286397..b9626c89359 100644
--- a/build/pkgs/pythran/checksums.ini
+++ b/build/pkgs/pythran/checksums.ini
@@ -1,4 +1,4 @@
tarball=pythran-VERSION.tar.gz
sha1=dc8a6035c0c46d36630085003160a3aba4444add
sha256=f9bc61bcb96df2cd4b578abc5a62dfb3fbb0b0ef02c264513dfb615c5f87871c
-upstream_url=https://pypi.io/packages/source/p/pythran/pythran-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pythran/pythran-VERSION.tar.gz
diff --git a/build/pkgs/pytz/checksums.ini b/build/pkgs/pytz/checksums.ini
index 8ff6396f13e..223d3179179 100644
--- a/build/pkgs/pytz/checksums.ini
+++ b/build/pkgs/pytz/checksums.ini
@@ -1,4 +1,4 @@
tarball=pytz-VERSION.tar.gz
sha1=be3f14bc0d6b89b8c579d8ae4e0fcb4478ff92e6
sha256=7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b
-upstream_url=https://pypi.io/packages/source/p/pytz/pytz-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pytz/pytz-VERSION.tar.gz
diff --git a/build/pkgs/pytz_deprecation_shim/checksums.ini b/build/pkgs/pytz_deprecation_shim/checksums.ini
index 199685f084c..fd07bf986b3 100644
--- a/build/pkgs/pytz_deprecation_shim/checksums.ini
+++ b/build/pkgs/pytz_deprecation_shim/checksums.ini
@@ -1,4 +1,4 @@
tarball=pytz_deprecation_shim-VERSION.tar.gz
sha1=d7900c309c26d48f6499fbda955eb80bd0b437dd
sha256=af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d
-upstream_url=https://pypi.io/packages/source/p/pytz_deprecation_shim/pytz_deprecation_shim-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pytz_deprecation_shim/pytz_deprecation_shim-VERSION.tar.gz
diff --git a/build/pkgs/pyyaml/checksums.ini b/build/pkgs/pyyaml/checksums.ini
index 1e9b9f74722..0823c82b2f8 100644
--- a/build/pkgs/pyyaml/checksums.ini
+++ b/build/pkgs/pyyaml/checksums.ini
@@ -1,4 +1,4 @@
tarball=PyYAML-VERSION.tar.gz
sha1=a80d802ad8f693bed34c8fb5ee168a1872663c9a
sha256=bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43
-upstream_url=https://pypi.io/packages/source/p/pyyaml/PyYAML-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pyyaml/PyYAML-VERSION.tar.gz
diff --git a/build/pkgs/pyzmq/checksums.ini b/build/pkgs/pyzmq/checksums.ini
index b4b99817bdc..e04ccdd1c15 100644
--- a/build/pkgs/pyzmq/checksums.ini
+++ b/build/pkgs/pyzmq/checksums.ini
@@ -1,4 +1,4 @@
tarball=pyzmq-VERSION.tar.gz
sha1=f750e59a3d5fcca64d0a1a6723c1bc72173e976f
sha256=259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23
-upstream_url=https://pypi.io/packages/source/p/pyzmq/pyzmq-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/p/pyzmq/pyzmq-VERSION.tar.gz
diff --git a/build/pkgs/qdldl_python/checksums.ini b/build/pkgs/qdldl_python/checksums.ini
index a444f898ae6..0b59f50a58b 100644
--- a/build/pkgs/qdldl_python/checksums.ini
+++ b/build/pkgs/qdldl_python/checksums.ini
@@ -1,4 +1,4 @@
tarball=qdldl-VERSION.tar.gz
sha1=af76c57ca1787f5e44e42f6c9f916b84ae599f1f
sha256=69c092f6e1fc23fb779a80a62e6fcdfe2eba05c925860248c4d6754f4736938f
-upstream_url=https://pypi.io/packages/source/q/qdldl/qdldl-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/q/qdldl/qdldl-VERSION.tar.gz
diff --git a/build/pkgs/qhull/distros/cygwin.txt b/build/pkgs/qhull/distros/cygwin.txt
deleted file mode 100644
index 95d316779cf..00000000000
--- a/build/pkgs/qhull/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-qhull
diff --git a/build/pkgs/r/distros/cygwin.txt b/build/pkgs/r/distros/cygwin.txt
deleted file mode 100644
index f532411f70a..00000000000
--- a/build/pkgs/r/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-R
-libtirpc-devel # needed for building extensions
diff --git a/build/pkgs/readline/distros/cygwin.txt b/build/pkgs/readline/distros/cygwin.txt
deleted file mode 100644
index 1698f0e86b8..00000000000
--- a/build/pkgs/readline/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libreadline-devel
diff --git a/build/pkgs/referencing/checksums.ini b/build/pkgs/referencing/checksums.ini
index 293629ca16d..ace04d9b28c 100644
--- a/build/pkgs/referencing/checksums.ini
+++ b/build/pkgs/referencing/checksums.ini
@@ -1,4 +1,4 @@
tarball=referencing-VERSION-py3-none-any.whl
sha1=9d710ba3a604d24ffded218a3813b5fd1fe2e495
sha256=160f24a7d2411dc82b1efd96dfb083ee9e5cc9bc8e492d323e0dd853989d37b3
-upstream_url=https://pypi.io/packages/py3/r/referencing/referencing-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/r/referencing/referencing-VERSION-py3-none-any.whl
diff --git a/build/pkgs/requests/checksums.ini b/build/pkgs/requests/checksums.ini
index d7a9d3b8c66..025f971aa2b 100644
--- a/build/pkgs/requests/checksums.ini
+++ b/build/pkgs/requests/checksums.ini
@@ -1,4 +1,4 @@
tarball=requests-VERSION-py3-none-any.whl
sha1=e82ece8f17ba4237cc5a4fd641349e45e1d3ddfd
sha256=fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c
-upstream_url=https://pypi.io/packages/py3/r/requests/requests-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/r/requests/requests-VERSION-py3-none-any.whl
diff --git a/build/pkgs/rfc3339_validator/checksums.ini b/build/pkgs/rfc3339_validator/checksums.ini
index a0766fbec23..babf4ab8107 100644
--- a/build/pkgs/rfc3339_validator/checksums.ini
+++ b/build/pkgs/rfc3339_validator/checksums.ini
@@ -1,4 +1,4 @@
tarball=rfc3339_validator-VERSION-py2.py3-none-any.whl
sha1=daa86cb641dfd6ebfef4ece6dea1be8fd63dec00
sha256=24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa
-upstream_url=https://pypi.io/packages/py2.py3/r/rfc3339_validator/rfc3339_validator-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/r/rfc3339_validator/rfc3339_validator-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/rfc3986_validator/checksums.ini b/build/pkgs/rfc3986_validator/checksums.ini
index 5d08b72ca0e..e1da79014c9 100644
--- a/build/pkgs/rfc3986_validator/checksums.ini
+++ b/build/pkgs/rfc3986_validator/checksums.ini
@@ -1,4 +1,4 @@
tarball=rfc3986_validator-VERSION-py2.py3-none-any.whl
sha1=c0fabd5c0568cc516f9258f3e5846a04a059dc31
sha256=2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9
-upstream_url=https://pypi.io/packages/py2.py3/r/rfc3986_validator/rfc3986_validator-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/r/rfc3986_validator/rfc3986_validator-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/rpy2/checksums.ini b/build/pkgs/rpy2/checksums.ini
index 62224bc62f8..9236ef7b950 100644
--- a/build/pkgs/rpy2/checksums.ini
+++ b/build/pkgs/rpy2/checksums.ini
@@ -1,4 +1,4 @@
tarball=rpy2-VERSION.tar.gz
sha1=7d236c0c6982333b20b6a126f0c17a5481fea64b
sha256=5d31a5ea43f5a59f6dec30faca87edb01fc9b8affa0beae96a99be923bd7dab3
-upstream_url=https://pypi.io/packages/source/r/rpy2/rpy2-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/r/rpy2/rpy2-VERSION.tar.gz
diff --git a/build/pkgs/rst2ipynb/checksums.ini b/build/pkgs/rst2ipynb/checksums.ini
index 2248cc0a54a..9c968023eee 100644
--- a/build/pkgs/rst2ipynb/checksums.ini
+++ b/build/pkgs/rst2ipynb/checksums.ini
@@ -1,4 +1,4 @@
tarball=rst2ipynb-VERSION.tar.gz
sha1=98926df9a8336c8974f446a2a858458495b5aec4
sha256=30d70b0e96f1c37baad9c8dbe904fc2567354eec02c52b94e7c7287b6268eaa3
-upstream_url=https://pypi.io/packages/source/r/rst2ipynb/rst2ipynb-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/r/rst2ipynb/rst2ipynb-VERSION.tar.gz
diff --git a/build/pkgs/rubiks/checksums.ini b/build/pkgs/rubiks/checksums.ini
index f53803060f1..fb245dbae8e 100644
--- a/build/pkgs/rubiks/checksums.ini
+++ b/build/pkgs/rubiks/checksums.ini
@@ -1,4 +1,4 @@
tarball=rubiks-VERSION-unix.tar.bz2
sha1=c12069ed1eb0fc19f80a474b1c4bad2d845f5e40
sha256=aae4c88c0f1cf84718c1a6e31e027a2886e9eaea65051385339fd98be8693e07
-upstream_url=https://users.ox.ac.uk/~coml0531/tmp/rubiks-VERSION-unix.tar.bz2
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/rubiks-VERSION-unix.tar.bz2
diff --git a/build/pkgs/sage_conf/version_requirements.txt b/build/pkgs/sage_conf/version_requirements.txt
index 570eca0f747..75a00f0f83b 100644
--- a/build/pkgs/sage_conf/version_requirements.txt
+++ b/build/pkgs/sage_conf/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sage-conf ~= 10.5b8
+sage-conf ~= 10.5rc0
diff --git a/build/pkgs/sage_docbuild/version_requirements.txt b/build/pkgs/sage_docbuild/version_requirements.txt
index 253a03aa504..6e02f12a485 100644
--- a/build/pkgs/sage_docbuild/version_requirements.txt
+++ b/build/pkgs/sage_docbuild/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sage-docbuild ~= 10.5b8
+sage-docbuild ~= 10.5rc0
diff --git a/build/pkgs/sage_numerical_backends_coin/checksums.ini b/build/pkgs/sage_numerical_backends_coin/checksums.ini
index 427dcedeb0a..84784d5d282 100644
--- a/build/pkgs/sage_numerical_backends_coin/checksums.ini
+++ b/build/pkgs/sage_numerical_backends_coin/checksums.ini
@@ -1,4 +1,4 @@
tarball=sage_numerical_backends_coin-VERSION.tar.gz
sha1=2033e1ba209315366a6dbfe249d5de5f7a1bc1b0
sha256=6e34d48632d070e97dc37b724098c0f050026b166b328af78929b1ea079fa9e7
-upstream_url=https://pypi.io/packages/source/s/sage_numerical_backends_coin/sage_numerical_backends_coin-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/sage_numerical_backends_coin/sage_numerical_backends_coin-VERSION.tar.gz
diff --git a/build/pkgs/sage_numerical_backends_cplex/checksums.ini b/build/pkgs/sage_numerical_backends_cplex/checksums.ini
index 24a6756620a..8f4439b6691 100644
--- a/build/pkgs/sage_numerical_backends_cplex/checksums.ini
+++ b/build/pkgs/sage_numerical_backends_cplex/checksums.ini
@@ -1,4 +1,4 @@
tarball=sage_numerical_backends_cplex-VERSION.tar.gz
sha1=b7085bfdeecb55a43c799493672a228687c30eaf
sha256=367480d7a291e0ac4e3df529fbc2a17f78f3770ce7dc2cf78d765f72b7bd938e
-upstream_url=https://pypi.io/packages/source/s/sage_numerical_backends_cplex/sage_numerical_backends_cplex-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/sage_numerical_backends_cplex/sage_numerical_backends_cplex-VERSION.tar.gz
diff --git a/build/pkgs/sage_numerical_backends_gurobi/checksums.ini b/build/pkgs/sage_numerical_backends_gurobi/checksums.ini
index 02b722b9bd2..d9dd145cb9c 100644
--- a/build/pkgs/sage_numerical_backends_gurobi/checksums.ini
+++ b/build/pkgs/sage_numerical_backends_gurobi/checksums.ini
@@ -1,4 +1,4 @@
tarball=sage_numerical_backends_gurobi-VERSION.tar.gz
sha1=6891c154bd035932759152dba6a8bd77e8811f22
sha256=3c3b51d6577f651d10cb7f6fc37ca4bb27c6fe2716d6515d1d23eeed1f34e32a
-upstream_url=https://pypi.io/packages/source/s/sage_numerical_backends_gurobi/sage_numerical_backends_gurobi-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/sage_numerical_backends_gurobi/sage_numerical_backends_gurobi-VERSION.tar.gz
diff --git a/build/pkgs/sage_setup/version_requirements.txt b/build/pkgs/sage_setup/version_requirements.txt
index cdca5c8c377..af4273ca5a6 100644
--- a/build/pkgs/sage_setup/version_requirements.txt
+++ b/build/pkgs/sage_setup/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sage-setup ~= 10.5b8
+sage-setup ~= 10.5rc0
diff --git a/build/pkgs/sage_sws2rst/version_requirements.txt b/build/pkgs/sage_sws2rst/version_requirements.txt
index dd89096c7e5..f6461b249ee 100644
--- a/build/pkgs/sage_sws2rst/version_requirements.txt
+++ b/build/pkgs/sage_sws2rst/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sage-sws2rst ~= 10.5b8
+sage-sws2rst ~= 10.5rc0
diff --git a/build/pkgs/sagelib/version_requirements.txt b/build/pkgs/sagelib/version_requirements.txt
index 82fcd9b2e70..a5764ac2ff3 100644
--- a/build/pkgs/sagelib/version_requirements.txt
+++ b/build/pkgs/sagelib/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-standard ~= 10.5b8
+sagemath-standard ~= 10.5rc0
diff --git a/build/pkgs/sagemath_bliss/version_requirements.txt b/build/pkgs/sagemath_bliss/version_requirements.txt
index d7a5d2904e6..54e31199a21 100644
--- a/build/pkgs/sagemath_bliss/version_requirements.txt
+++ b/build/pkgs/sagemath_bliss/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-bliss ~= 10.5b8
+sagemath-bliss ~= 10.5rc0
diff --git a/build/pkgs/sagemath_categories/version_requirements.txt b/build/pkgs/sagemath_categories/version_requirements.txt
index efc07d283b2..24190dcde29 100644
--- a/build/pkgs/sagemath_categories/version_requirements.txt
+++ b/build/pkgs/sagemath_categories/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-categories ~= 10.5b8
+sagemath-categories ~= 10.5rc0
diff --git a/build/pkgs/sagemath_coxeter3/version_requirements.txt b/build/pkgs/sagemath_coxeter3/version_requirements.txt
index cfc2259b00b..d583b886874 100644
--- a/build/pkgs/sagemath_coxeter3/version_requirements.txt
+++ b/build/pkgs/sagemath_coxeter3/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-coxeter3 ~= 10.5b8
+sagemath-coxeter3 ~= 10.5rc0
diff --git a/build/pkgs/sagemath_environment/version_requirements.txt b/build/pkgs/sagemath_environment/version_requirements.txt
index fc2b0a5c400..4c460e8258e 100644
--- a/build/pkgs/sagemath_environment/version_requirements.txt
+++ b/build/pkgs/sagemath_environment/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-environment ~= 10.5b8
+sagemath-environment ~= 10.5rc0
diff --git a/build/pkgs/sagemath_mcqd/version_requirements.txt b/build/pkgs/sagemath_mcqd/version_requirements.txt
index a37506596f3..394ab1ab42c 100644
--- a/build/pkgs/sagemath_mcqd/version_requirements.txt
+++ b/build/pkgs/sagemath_mcqd/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-mcqd ~= 10.5b8
+sagemath-mcqd ~= 10.5rc0
diff --git a/build/pkgs/sagemath_meataxe/version_requirements.txt b/build/pkgs/sagemath_meataxe/version_requirements.txt
index 87631b79435..e3b1b8d80dd 100644
--- a/build/pkgs/sagemath_meataxe/version_requirements.txt
+++ b/build/pkgs/sagemath_meataxe/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-meataxe ~= 10.5b8
+sagemath-meataxe ~= 10.5rc0
diff --git a/build/pkgs/sagemath_objects/version_requirements.txt b/build/pkgs/sagemath_objects/version_requirements.txt
index 637d04fa986..84f9308c624 100644
--- a/build/pkgs/sagemath_objects/version_requirements.txt
+++ b/build/pkgs/sagemath_objects/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-objects ~= 10.5b8
+sagemath-objects ~= 10.5rc0
diff --git a/build/pkgs/sagemath_repl/version_requirements.txt b/build/pkgs/sagemath_repl/version_requirements.txt
index e721b5a1d1f..124091c62c1 100644
--- a/build/pkgs/sagemath_repl/version_requirements.txt
+++ b/build/pkgs/sagemath_repl/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-repl ~= 10.5b8
+sagemath-repl ~= 10.5rc0
diff --git a/build/pkgs/sagemath_sirocco/version_requirements.txt b/build/pkgs/sagemath_sirocco/version_requirements.txt
index 3412b468da9..57ed9f87891 100644
--- a/build/pkgs/sagemath_sirocco/version_requirements.txt
+++ b/build/pkgs/sagemath_sirocco/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-sirocco ~= 10.5b8
+sagemath-sirocco ~= 10.5rc0
diff --git a/build/pkgs/sagemath_tdlib/version_requirements.txt b/build/pkgs/sagemath_tdlib/version_requirements.txt
index b78e9037e85..ea110e02460 100644
--- a/build/pkgs/sagemath_tdlib/version_requirements.txt
+++ b/build/pkgs/sagemath_tdlib/version_requirements.txt
@@ -1,2 +1,2 @@
# This file is updated on every release by the sage-update-version script
-sagemath-tdlib ~= 10.5b8
+sagemath-tdlib ~= 10.5rc0
diff --git a/build/pkgs/sagetex/checksums.ini b/build/pkgs/sagetex/checksums.ini
index 7cfac7e72f3..99442f969cc 100644
--- a/build/pkgs/sagetex/checksums.ini
+++ b/build/pkgs/sagetex/checksums.ini
@@ -1,4 +1,4 @@
tarball=sagetex-VERSION.tar.gz
sha1=821c8a6ab11ee651d0dcc599c5582fefb6706775
sha256=03162ec62cb86da13a747f982241af3e4f4cdd4d29fcba8fbb6c6982a9e906d9
-upstream_url=https://pypi.io/packages/source/s/sagetex/sagetex-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/sagetex/sagetex-VERSION.tar.gz
diff --git a/build/pkgs/sbcl/distros/cygwin.txt b/build/pkgs/sbcl/distros/cygwin.txt
deleted file mode 100644
index 0e94cb07231..00000000000
--- a/build/pkgs/sbcl/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-sbcl
diff --git a/build/pkgs/scipy/checksums.ini b/build/pkgs/scipy/checksums.ini
index 8871f77250b..d834a3ad1b3 100644
--- a/build/pkgs/scipy/checksums.ini
+++ b/build/pkgs/scipy/checksums.ini
@@ -1,4 +1,4 @@
tarball=scipy-VERSION.tar.gz
sha1=0fd6e14972d8dd9b4a656686a40aed00ad0f1396
sha256=4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3
-upstream_url=https://pypi.io/packages/source/s/scipy/scipy-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/scipy/scipy-VERSION.tar.gz
diff --git a/build/pkgs/scs/checksums.ini b/build/pkgs/scs/checksums.ini
index ceaf994ac5f..d78d19fbac9 100644
--- a/build/pkgs/scs/checksums.ini
+++ b/build/pkgs/scs/checksums.ini
@@ -1,4 +1,4 @@
tarball=scs-VERSION.tar.gz
sha1=92e4ff21b450c9659f610064eb79e804de9167b4
sha256=e3bd779e7e977e3ae5a2f2035aa4c2a309e29082d59a722d5d6592edc4bdb4b3
-upstream_url=https://pypi.io/packages/source/s/scs/scs-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/scs/scs-VERSION.tar.gz
diff --git a/build/pkgs/send2trash/checksums.ini b/build/pkgs/send2trash/checksums.ini
index 8617b6b9b6b..bf0c8b27d6b 100644
--- a/build/pkgs/send2trash/checksums.ini
+++ b/build/pkgs/send2trash/checksums.ini
@@ -1,4 +1,4 @@
tarball=Send2Trash-VERSION-py3-none-any.whl
sha1=e24d3494febe78a4a1c8ecbfde78ed52e78cf299
sha256=0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9
-upstream_url=https://pypi.io/packages/py3/s/send2trash/Send2Trash-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/send2trash/Send2Trash-VERSION-py3-none-any.whl
diff --git a/build/pkgs/setuptools/checksums.ini b/build/pkgs/setuptools/checksums.ini
index 97d83ec2dd7..13bcfce0429 100644
--- a/build/pkgs/setuptools/checksums.ini
+++ b/build/pkgs/setuptools/checksums.ini
@@ -1,4 +1,4 @@
tarball=setuptools-VERSION-py3-none-any.whl
sha1=3756539d45341ca5cec9e2dfe11539faa066f5cd
sha256=b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e
-upstream_url=https://pypi.io/packages/py3/s/setuptools/setuptools-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/setuptools/setuptools-VERSION-py3-none-any.whl
diff --git a/build/pkgs/setuptools_scm/checksums.ini b/build/pkgs/setuptools_scm/checksums.ini
index abae8c0a4f4..553d3df6614 100644
--- a/build/pkgs/setuptools_scm/checksums.ini
+++ b/build/pkgs/setuptools_scm/checksums.ini
@@ -1,4 +1,4 @@
tarball=setuptools_scm-VERSION-py3-none-any.whl
sha1=be606b6acb67714b96e9e1e9a9944feaca504e44
sha256=897a3226a6fd4a6eb2f068745e49733261a21f70b1bb28fce0339feb978d9af3
-upstream_url=https://pypi.io/packages/py3/s/setuptools_scm/setuptools_scm-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/setuptools_scm/setuptools_scm-VERSION-py3-none-any.whl
diff --git a/build/pkgs/singular/distros/cygwin.txt b/build/pkgs/singular/distros/cygwin.txt
deleted file mode 100644
index 774625930f9..00000000000
--- a/build/pkgs/singular/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-singular-devel
-singular
diff --git a/build/pkgs/six/checksums.ini b/build/pkgs/six/checksums.ini
index 24f678da7eb..4944f7d54fe 100644
--- a/build/pkgs/six/checksums.ini
+++ b/build/pkgs/six/checksums.ini
@@ -1,4 +1,4 @@
tarball=six-VERSION-py2.py3-none-any.whl
sha1=79e6f2e4f9e24898f1896df379871b9c9922f147
sha256=8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
-upstream_url=https://pypi.io/packages/py2.py3/s/six/six-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/s/six/six-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/sniffio/checksums.ini b/build/pkgs/sniffio/checksums.ini
index c3a342052ec..554eef47d86 100644
--- a/build/pkgs/sniffio/checksums.ini
+++ b/build/pkgs/sniffio/checksums.ini
@@ -1,4 +1,4 @@
tarball=sniffio-VERSION-py3-none-any.whl
sha1=bd8d1ec2b285eed542c53ca22232e6e9e468c389
sha256=2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2
-upstream_url=https://pypi.io/packages/py3/s/sniffio/sniffio-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sniffio/sniffio-VERSION-py3-none-any.whl
diff --git a/build/pkgs/snowballstemmer/checksums.ini b/build/pkgs/snowballstemmer/checksums.ini
index cab5be15660..a013fcb27e2 100644
--- a/build/pkgs/snowballstemmer/checksums.ini
+++ b/build/pkgs/snowballstemmer/checksums.ini
@@ -1,4 +1,4 @@
tarball=snowballstemmer-VERSION.tar.gz
sha1=aaf1b0e3b58d25e2e297ea3dbef59d8534ef8d92
sha256=09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1
-upstream_url=https://pypi.io/packages/source/s/snowballstemmer/snowballstemmer-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/snowballstemmer/snowballstemmer-VERSION.tar.gz
diff --git a/build/pkgs/soupsieve/checksums.ini b/build/pkgs/soupsieve/checksums.ini
index 3e9ef0ba9fc..8d78dcb4d86 100644
--- a/build/pkgs/soupsieve/checksums.ini
+++ b/build/pkgs/soupsieve/checksums.ini
@@ -1,4 +1,4 @@
tarball=soupsieve-VERSION-py3-none-any.whl
sha1=a155a6208211aa90bbc3bcfc9cab194a05000e59
sha256=eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7
-upstream_url=https://pypi.io/packages/py3/s/soupsieve/soupsieve-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/soupsieve/soupsieve-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinx/checksums.ini b/build/pkgs/sphinx/checksums.ini
index 463dfef26f9..1721e0e8521 100644
--- a/build/pkgs/sphinx/checksums.ini
+++ b/build/pkgs/sphinx/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinx-VERSION-py3-none-any.whl
sha1=f9af5608fbb188f12e38d3c09cdefeef40255365
sha256=c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239
-upstream_url=https://pypi.io/packages/py3/s/sphinx/sphinx-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinx/sphinx-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinx_basic_ng/checksums.ini b/build/pkgs/sphinx_basic_ng/checksums.ini
index 4933de2fa24..6ad0e9c0b5a 100644
--- a/build/pkgs/sphinx_basic_ng/checksums.ini
+++ b/build/pkgs/sphinx_basic_ng/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinx_basic_ng-VERSION-py3-none-any.whl
sha1=abcd9bda6ae61bb20c52bf46c17fb1bbdfdab4ea
sha256=eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b
-upstream_url=https://pypi.io/packages/py3/s/sphinx_basic_ng/sphinx_basic_ng-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinx_basic_ng/sphinx_basic_ng-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinx_copybutton/checksums.ini b/build/pkgs/sphinx_copybutton/checksums.ini
index 1c83ae582e0..17531981252 100644
--- a/build/pkgs/sphinx_copybutton/checksums.ini
+++ b/build/pkgs/sphinx_copybutton/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinx_copybutton-VERSION-py3-none-any.whl
sha1=a15e038b665225b13f7bd3eae6a2a64c8bd4b582
sha256=fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e
-upstream_url=https://pypi.io/packages/py3/s/sphinx_copybutton/sphinx_copybutton-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinx_copybutton/sphinx_copybutton-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinx_inline_tabs/checksums.ini b/build/pkgs/sphinx_inline_tabs/checksums.ini
index 93c03352650..423f9c2772a 100644
--- a/build/pkgs/sphinx_inline_tabs/checksums.ini
+++ b/build/pkgs/sphinx_inline_tabs/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinx_inline_tabs-VERSION-py3-none-any.whl
sha1=1404e320d0533280355e7e1e71cffd9937015027
sha256=06809ac613f7c48ddd6e2fa588413e3fe92cff2397b56e2ccf0b0218f9ef6a78
-upstream_url=https://pypi.io/packages/py3/s/sphinx_inline_tabs/sphinx_inline_tabs-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinx_inline_tabs/sphinx_inline_tabs-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_applehelp/checksums.ini b/build/pkgs/sphinxcontrib_applehelp/checksums.ini
index 25ebbacf69a..55b9e980fb3 100644
--- a/build/pkgs/sphinxcontrib_applehelp/checksums.ini
+++ b/build/pkgs/sphinxcontrib_applehelp/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_applehelp-VERSION-py3-none-any.whl
sha1=e426527562da2c5c520b27c58210cd1d44a1185b
sha256=cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4
-upstream_url=https://pypi.io/packages/py3/s/sphinxcontrib_applehelp/sphinxcontrib_applehelp-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinxcontrib_applehelp/sphinxcontrib_applehelp-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_devhelp/checksums.ini b/build/pkgs/sphinxcontrib_devhelp/checksums.ini
index 03e4c534a7a..2352006b2c9 100644
--- a/build/pkgs/sphinxcontrib_devhelp/checksums.ini
+++ b/build/pkgs/sphinxcontrib_devhelp/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_devhelp-VERSION-py3-none-any.whl
sha1=c1c774393d267d97eaf07f0e5c740f82af24d628
sha256=6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f
-upstream_url=https://pypi.io/packages/py3/s/sphinxcontrib_devhelp/sphinxcontrib_devhelp-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinxcontrib_devhelp/sphinxcontrib_devhelp-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_htmlhelp/checksums.ini b/build/pkgs/sphinxcontrib_htmlhelp/checksums.ini
index 02f3fefa8df..2a7d6ba97bb 100644
--- a/build/pkgs/sphinxcontrib_htmlhelp/checksums.ini
+++ b/build/pkgs/sphinxcontrib_htmlhelp/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_htmlhelp-VERSION-py3-none-any.whl
sha1=6b60c617a0fe98a663ca146edc03867581da5e07
sha256=393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04
-upstream_url=https://pypi.io/packages/py3/s/sphinxcontrib_htmlhelp/sphinxcontrib_htmlhelp-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinxcontrib_htmlhelp/sphinxcontrib_htmlhelp-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_jsmath/checksums.ini b/build/pkgs/sphinxcontrib_jsmath/checksums.ini
index 5ad932e6f6c..1f2ec07e8ab 100644
--- a/build/pkgs/sphinxcontrib_jsmath/checksums.ini
+++ b/build/pkgs/sphinxcontrib_jsmath/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_jsmath-VERSION-py2.py3-none-any.whl
sha1=beff4fc35d13a5f2883bc129f28ac031046195c5
sha256=2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178
-upstream_url=https://pypi.io/packages/py2.py3/s/sphinxcontrib_jsmath/sphinxcontrib_jsmath-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/s/sphinxcontrib_jsmath/sphinxcontrib_jsmath-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_qthelp/checksums.ini b/build/pkgs/sphinxcontrib_qthelp/checksums.ini
index bb35693af5e..d2c313eb1fb 100644
--- a/build/pkgs/sphinxcontrib_qthelp/checksums.ini
+++ b/build/pkgs/sphinxcontrib_qthelp/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_qthelp-VERSION-py3-none-any.whl
sha1=8f593bd6ca46487ed25ee0fca50f0d88b18e5f9e
sha256=e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182
-upstream_url=https://pypi.io/packages/py3/s/sphinxcontrib_qthelp/sphinxcontrib_qthelp-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinxcontrib_qthelp/sphinxcontrib_qthelp-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_serializinghtml/checksums.ini b/build/pkgs/sphinxcontrib_serializinghtml/checksums.ini
index 292f6b2b195..81e105df791 100644
--- a/build/pkgs/sphinxcontrib_serializinghtml/checksums.ini
+++ b/build/pkgs/sphinxcontrib_serializinghtml/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_serializinghtml-VERSION-py3-none-any.whl
sha1=a5198a72d1668e97fdda39a559586bcf57cb7278
sha256=326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7
-upstream_url=https://pypi.io/packages/py3/s/sphinxcontrib_serializinghtml/sphinxcontrib_serializinghtml-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinxcontrib_serializinghtml/sphinxcontrib_serializinghtml-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sphinxcontrib_websupport/checksums.ini b/build/pkgs/sphinxcontrib_websupport/checksums.ini
index 9964fd80b13..c51d7ed6b52 100644
--- a/build/pkgs/sphinxcontrib_websupport/checksums.ini
+++ b/build/pkgs/sphinxcontrib_websupport/checksums.ini
@@ -1,4 +1,4 @@
tarball=sphinxcontrib_websupport-VERSION-py3-none-any.whl
sha1=649d1447a4773b665588060efda66344cb9b99a5
sha256=2dc179d7f821ebd54f31f93c894ca52435ebc5364e4e4dfb0da834ac119d51fd
-upstream_url=https://pypi.io/packages/py3/s/sphinxcontrib_websupport/sphinxcontrib_websupport-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sphinxcontrib_websupport/sphinxcontrib_websupport-VERSION-py3-none-any.whl
diff --git a/build/pkgs/sqlite/distros/cygwin.txt b/build/pkgs/sqlite/distros/cygwin.txt
deleted file mode 100644
index ef624919561..00000000000
--- a/build/pkgs/sqlite/distros/cygwin.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-libsqlite3-devel
-sqlite3
diff --git a/build/pkgs/sqlite/spkg-configure.m4 b/build/pkgs/sqlite/spkg-configure.m4
index 901e27f19e3..5fe929ea03b 100644
--- a/build/pkgs/sqlite/spkg-configure.m4
+++ b/build/pkgs/sqlite/spkg-configure.m4
@@ -33,15 +33,8 @@ SAGE_SPKG_CONFIGURE([sqlite], [
m4_popdef([SAGE_SQLITE3_MIN_VERSION_MICRO])
m4_popdef([SAGE_SQLITE3_MIN_VERSION])
], [dnl REQUIRED-CHECK
- AS_CASE([$host],
- [*-*-cygwin*], [
- dnl sqlite SetDllDirectory in sage_ostools.pyx
- sage_require_sqlite=yes
- ], [
- AC_REQUIRE([SAGE_SPKG_CONFIGURE_PYTHON3])
- AS_IF([test x$sage_spkg_install_python3 = xno], [
- sage_require_sqlite=no
- ])
- ])
-]
-)
+ AC_REQUIRE([SAGE_SPKG_CONFIGURE_PYTHON3])
+ AS_IF([test x$sage_spkg_install_python3 = xno], [
+ sage_require_sqlite=no
+ ])
+])
diff --git a/build/pkgs/stack_data/checksums.ini b/build/pkgs/stack_data/checksums.ini
index 4f749a287f0..ddcda4ebb4a 100644
--- a/build/pkgs/stack_data/checksums.ini
+++ b/build/pkgs/stack_data/checksums.ini
@@ -1,4 +1,4 @@
tarball=stack_data-VERSION-py3-none-any.whl
sha1=96814b10bdc464e8ef00f4a07c60dd17a3dc9668
sha256=d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695
-upstream_url=https://pypi.io/packages/py3/s/stack_data/stack_data-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/stack_data/stack_data-VERSION-py3-none-any.whl
diff --git a/build/pkgs/suitesparse/distros/cygwin.txt b/build/pkgs/suitesparse/distros/cygwin.txt
deleted file mode 100644
index fe7b2c3f23c..00000000000
--- a/build/pkgs/suitesparse/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libsuitesparseconfig-devel
diff --git a/build/pkgs/symengine_py/checksums.ini b/build/pkgs/symengine_py/checksums.ini
index b8984f6553c..243b69d4a3e 100644
--- a/build/pkgs/symengine_py/checksums.ini
+++ b/build/pkgs/symengine_py/checksums.ini
@@ -1,4 +1,4 @@
tarball=symengine.py-VERSION.tar.gz
sha1=4a8da0d0a057c8709c5b28543dbb3d26a060f013
sha256=0dd30d29b804ebb7251bddec29c38c3b1fc15ea6953a2c57ee758d5f6fcba458
-upstream_url=https://pypi.io/packages/source/s/symengine/symengine-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/s/symengine/symengine-VERSION.tar.gz
diff --git a/build/pkgs/symmetrica/checksums.ini b/build/pkgs/symmetrica/checksums.ini
index 07664bc3183..74b01f40d36 100644
--- a/build/pkgs/symmetrica/checksums.ini
+++ b/build/pkgs/symmetrica/checksums.ini
@@ -1,4 +1,4 @@
tarball=symmetrica-VERSION.tar.xz
sha1=0044cc087ff04267c246e730c6570d89f6e593af
sha256=05ae107ec41f38cada19c26b6d7884970cbafae6e3b55ec3964896230358b456
-upstream_url=http://users.ox.ac.uk/~coml0531/sage/symmetrica-VERSION.tar.xz
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/symmetrica-VERSION.tar.xz
diff --git a/build/pkgs/sympy/checksums.ini b/build/pkgs/sympy/checksums.ini
index 17e31ea9f3d..a03797698b1 100644
--- a/build/pkgs/sympy/checksums.ini
+++ b/build/pkgs/sympy/checksums.ini
@@ -1,4 +1,4 @@
tarball=sympy-VERSION-py3-none-any.whl
sha1=e34c28a2aa2b677efe2f1b7cefe275e20d2e652c
sha256=c51d75517712f1aed280d4ce58506a4a88d635d6b5dd48b39102a7ae1f3fcfe9
-upstream_url=https://pypi.io/packages/py3/s/sympy/sympy-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/s/sympy/sympy-VERSION-py3-none-any.whl
diff --git a/build/pkgs/tachyon/checksums.ini b/build/pkgs/tachyon/checksums.ini
index ad06308b255..99985331ee0 100644
--- a/build/pkgs/tachyon/checksums.ini
+++ b/build/pkgs/tachyon/checksums.ini
@@ -1,4 +1,4 @@
tarball=tachyon-VERSION.tar.gz
sha1=28ac9dc28ba90b47ab7e03c81bb2170ddbb1c248
sha256=09203c102311149f5df5cc367409f96c725742666d19c24db5ba994d5a81a6f5
-upstream_url=https://users.ox.ac.uk/~coml0531/tmp/tachyon-VERSION.tar.gz
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/tachyon-VERSION.tar.gz
diff --git a/build/pkgs/terminado/checksums.ini b/build/pkgs/terminado/checksums.ini
index ce9c0407bad..e54d9b51727 100644
--- a/build/pkgs/terminado/checksums.ini
+++ b/build/pkgs/terminado/checksums.ini
@@ -1,4 +1,4 @@
tarball=terminado-VERSION.tar.gz
sha1=608fcc44b845e1fb783e361d59e79fba83126e14
sha256=6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333
-upstream_url=https://pypi.io/packages/source/t/terminado/terminado-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/t/terminado/terminado-VERSION.tar.gz
diff --git a/build/pkgs/texlive/distros/cygwin.txt b/build/pkgs/texlive/distros/cygwin.txt
deleted file mode 100644
index ba0ee3a029f..00000000000
--- a/build/pkgs/texlive/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-texlive
diff --git a/build/pkgs/texlive_luatex/distros/cygwin.txt b/build/pkgs/texlive_luatex/distros/cygwin.txt
deleted file mode 100644
index ba0ee3a029f..00000000000
--- a/build/pkgs/texlive_luatex/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-texlive
diff --git a/build/pkgs/texttable/checksums.ini b/build/pkgs/texttable/checksums.ini
index 3446dba447f..c83680e54a9 100644
--- a/build/pkgs/texttable/checksums.ini
+++ b/build/pkgs/texttable/checksums.ini
@@ -1,4 +1,4 @@
tarball=texttable-VERSION.tar.gz
sha1=0fa175fa6e0fefea31434746641bedc8cbb60248
sha256=2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638
-upstream_url=https://pypi.io/packages/source/t/texttable/texttable-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/t/texttable/texttable-VERSION.tar.gz
diff --git a/build/pkgs/tinycss2/checksums.ini b/build/pkgs/tinycss2/checksums.ini
index a6abd957086..b649e4f8b3e 100644
--- a/build/pkgs/tinycss2/checksums.ini
+++ b/build/pkgs/tinycss2/checksums.ini
@@ -1,4 +1,4 @@
tarball=tinycss2-VERSION.tar.gz
sha1=3871ffec30bde346d1a17f80a423dce488bad4f7
sha256=8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627
-upstream_url=https://pypi.io/packages/source/t/tinycss2/tinycss2-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/t/tinycss2/tinycss2-VERSION.tar.gz
diff --git a/build/pkgs/tomli/checksums.ini b/build/pkgs/tomli/checksums.ini
index 00d70337b2b..0837611ad26 100644
--- a/build/pkgs/tomli/checksums.ini
+++ b/build/pkgs/tomli/checksums.ini
@@ -1,4 +1,4 @@
tarball=tomli-VERSION-py3-none-any.whl
sha1=5bfc83c14bc54e6193a0d50a50c16a88eda0c4fa
sha256=939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc
-upstream_url=https://pypi.io/packages/py3/t/tomli/tomli-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/t/tomli/tomli-VERSION-py3-none-any.whl
diff --git a/build/pkgs/topcom/checksums.ini b/build/pkgs/topcom/checksums.ini
index 1a00b4da1ec..6d3c1ef9331 100644
--- a/build/pkgs/topcom/checksums.ini
+++ b/build/pkgs/topcom/checksums.ini
@@ -1,4 +1,4 @@
tarball=TOPCOM-1_1_2.tgz
sha1=65db8c00309f3bf8467ee5ba9da109c196db3461
sha256=4fb10754ee5b76056441fea98f2c8dee5db6f2984d8c14283b49239ad4378ab6
-upstream_url=https://users.ox.ac.uk/~coml0531/tmp/TOPCOM-1_1_2.tgz
+upstream_url=https://github.com/sagemath/sage-package/releases/download/tars/TOPCOM-1_1_2.tgz
diff --git a/build/pkgs/tornado/checksums.ini b/build/pkgs/tornado/checksums.ini
index 9cc0e020c01..c11b8fec974 100644
--- a/build/pkgs/tornado/checksums.ini
+++ b/build/pkgs/tornado/checksums.ini
@@ -1,4 +1,4 @@
tarball=tornado-VERSION.tar.gz
sha1=5b4036313660a74034186ac63b10d244ca9444b8
sha256=72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee
-upstream_url=https://pypi.io/packages/source/t/tornado/tornado-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/t/tornado/tornado-VERSION.tar.gz
diff --git a/build/pkgs/tox/checksums.ini b/build/pkgs/tox/checksums.ini
index fa5a87fb673..713b1eb18fe 100644
--- a/build/pkgs/tox/checksums.ini
+++ b/build/pkgs/tox/checksums.ini
@@ -1,4 +1,4 @@
tarball=tox-VERSION-py3-none-any.whl
sha1=d3312285c4988d3307d3b000a8a18cfcb16aea29
sha256=da761b4a57ee2b92b5ce39f48ff723fc42d185bf2af508effb683214efa662ea
-upstream_url=https://pypi.io/packages/py3/t/tox/tox-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/t/tox/tox-VERSION-py3-none-any.whl
diff --git a/build/pkgs/traitlets/checksums.ini b/build/pkgs/traitlets/checksums.ini
index ad86191465c..a56a3cea9e1 100644
--- a/build/pkgs/traitlets/checksums.ini
+++ b/build/pkgs/traitlets/checksums.ini
@@ -1,4 +1,4 @@
tarball=traitlets-VERSION-py3-none-any.whl
sha1=a6c667ce2b3adf2ab3562f144067f02326383c25
sha256=b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f
-upstream_url=https://pypi.io/packages/py3/t/traitlets/traitlets-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/t/traitlets/traitlets-VERSION-py3-none-any.whl
diff --git a/build/pkgs/trove_classifiers/checksums.ini b/build/pkgs/trove_classifiers/checksums.ini
index 42e0ec6eefe..ab2559ee8c7 100644
--- a/build/pkgs/trove_classifiers/checksums.ini
+++ b/build/pkgs/trove_classifiers/checksums.ini
@@ -1,4 +1,4 @@
tarball=trove_classifiers-VERSION-py3-none-any.whl
sha1=8219f839a8223a9dd0912cde22d579cfa75a516e
sha256=ccc57a33717644df4daca018e7ec3ef57a835c48e96a1e71fc07eb7edac67af6
-upstream_url=https://pypi.io/packages/py3/t/trove_classifiers/trove_classifiers-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/t/trove_classifiers/trove_classifiers-VERSION-py3-none-any.whl
diff --git a/build/pkgs/types_python_dateutil/checksums.ini b/build/pkgs/types_python_dateutil/checksums.ini
index 08fb0805291..71ea4d06e2c 100644
--- a/build/pkgs/types_python_dateutil/checksums.ini
+++ b/build/pkgs/types_python_dateutil/checksums.ini
@@ -1,4 +1,4 @@
tarball=types_python_dateutil-VERSION-py3-none-any.whl
sha1=fc0a6cbd54667dd8dadb95c448014efe66c9ae0a
sha256=6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b
-upstream_url=https://pypi.io/packages/py3/t/types_python_dateutil/types_python_dateutil-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/t/types_python_dateutil/types_python_dateutil-VERSION-py3-none-any.whl
diff --git a/build/pkgs/typing_extensions/checksums.ini b/build/pkgs/typing_extensions/checksums.ini
index 5d4ca8ca5f2..52a4f6256ea 100644
--- a/build/pkgs/typing_extensions/checksums.ini
+++ b/build/pkgs/typing_extensions/checksums.ini
@@ -1,4 +1,4 @@
tarball=typing_extensions-VERSION-py3-none-any.whl
sha1=0fb5b2732cc421561b1348cac1334eb6a4e0bb7f
sha256=04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d
-upstream_url=https://pypi.io/packages/py3/t/typing_extensions/typing_extensions-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/t/typing_extensions/typing_extensions-VERSION-py3-none-any.whl
diff --git a/build/pkgs/tzdata/checksums.ini b/build/pkgs/tzdata/checksums.ini
index 449a195f648..334ff50b979 100644
--- a/build/pkgs/tzdata/checksums.ini
+++ b/build/pkgs/tzdata/checksums.ini
@@ -1,4 +1,4 @@
tarball=tzdata-VERSION-py2.py3-none-any.whl
sha1=4686c7c91a01d5af9075903937c343afa05c141b
sha256=7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda
-upstream_url=https://pypi.io/packages/py2.py3/t/tzdata/tzdata-VERSION-py2.py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py2.py3/t/tzdata/tzdata-VERSION-py2.py3-none-any.whl
diff --git a/build/pkgs/tzlocal/checksums.ini b/build/pkgs/tzlocal/checksums.ini
index 5c246c69ced..7618e395db1 100644
--- a/build/pkgs/tzlocal/checksums.ini
+++ b/build/pkgs/tzlocal/checksums.ini
@@ -1,4 +1,4 @@
tarball=tzlocal-VERSION.tar.gz
sha1=1d61e52edddf882c9af4f5f3f1be0db3788dd7b5
sha256=46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803
-upstream_url=https://pypi.io/packages/source/t/tzlocal/tzlocal-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/t/tzlocal/tzlocal-VERSION.tar.gz
diff --git a/build/pkgs/uri_template/checksums.ini b/build/pkgs/uri_template/checksums.ini
index 601b51db908..1ffd9d33334 100644
--- a/build/pkgs/uri_template/checksums.ini
+++ b/build/pkgs/uri_template/checksums.ini
@@ -1,4 +1,4 @@
tarball=uri_template-VERSION-py3-none-any.whl
sha1=bbc8808bdb7e687f0c099c8120cd901dc90bce69
sha256=a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
-upstream_url=https://pypi.io/packages/py3/u/uri_template/uri_template-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/u/uri_template/uri_template-VERSION-py3-none-any.whl
diff --git a/build/pkgs/urllib3/checksums.ini b/build/pkgs/urllib3/checksums.ini
index 1fbf6f0991c..3689a94a382 100644
--- a/build/pkgs/urllib3/checksums.ini
+++ b/build/pkgs/urllib3/checksums.ini
@@ -1,4 +1,4 @@
tarball=urllib3-VERSION-py3-none-any.whl
sha1=1e197082cd0d0f98bc97f2fbfd7d2a597e3ff3e4
sha256=55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3
-upstream_url=https://pypi.io/packages/py3/u/urllib3/urllib3-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/u/urllib3/urllib3-VERSION-py3-none-any.whl
diff --git a/build/pkgs/virtualenv/checksums.ini b/build/pkgs/virtualenv/checksums.ini
index c83cfa5112d..ebe17fab050 100644
--- a/build/pkgs/virtualenv/checksums.ini
+++ b/build/pkgs/virtualenv/checksums.ini
@@ -1,4 +1,4 @@
tarball=virtualenv-VERSION-py3-none-any.whl
sha1=f18ea5b827ba66a1724769371c6912601ec4d647
sha256=a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b
-upstream_url=https://pypi.io/packages/py3/v/virtualenv/virtualenv-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/v/virtualenv/virtualenv-VERSION-py3-none-any.whl
diff --git a/build/pkgs/wcwidth/checksums.ini b/build/pkgs/wcwidth/checksums.ini
index 18801e12105..169913604d5 100644
--- a/build/pkgs/wcwidth/checksums.ini
+++ b/build/pkgs/wcwidth/checksums.ini
@@ -1,4 +1,4 @@
tarball=wcwidth-VERSION.tar.gz
sha1=49bdbcac346f31be8201c663082331b693264382
sha256=f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02
-upstream_url=https://pypi.io/packages/source/w/wcwidth/wcwidth-VERSION.tar.gz
+upstream_url=https://files.pythonhosted.org/packages/source/w/wcwidth/wcwidth-VERSION.tar.gz
diff --git a/build/pkgs/webcolors/checksums.ini b/build/pkgs/webcolors/checksums.ini
index 2db93e1e869..2b483c8d29b 100644
--- a/build/pkgs/webcolors/checksums.ini
+++ b/build/pkgs/webcolors/checksums.ini
@@ -1,4 +1,4 @@
tarball=webcolors-VERSION-py3-none-any.whl
sha1=e13a9143964b824fc4972b60eddd8115f6839a26
sha256=29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf
-upstream_url=https://pypi.io/packages/py3/w/webcolors/webcolors-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/w/webcolors/webcolors-VERSION-py3-none-any.whl
diff --git a/build/pkgs/websocket_client/checksums.ini b/build/pkgs/websocket_client/checksums.ini
index 6cc10d23812..0ccb613fdd6 100644
--- a/build/pkgs/websocket_client/checksums.ini
+++ b/build/pkgs/websocket_client/checksums.ini
@@ -1,4 +1,4 @@
tarball=websocket_client-VERSION-py3-none-any.whl
sha1=eb78bd39f1ae4d531cc965bd21d121ba3d156f84
sha256=084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24
-upstream_url=https://pypi.io/packages/py3/w/websocket_client/websocket_client-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/w/websocket_client/websocket_client-VERSION-py3-none-any.whl
diff --git a/build/pkgs/wheel/checksums.ini b/build/pkgs/wheel/checksums.ini
index 3157a2efcec..67624baa8b2 100644
--- a/build/pkgs/wheel/checksums.ini
+++ b/build/pkgs/wheel/checksums.ini
@@ -1,4 +1,4 @@
tarball=wheel-VERSION-py3-none-any.whl
sha1=65ec55742da04152c8b06d6586fb36d779d7883e
sha256=2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f
-upstream_url=https://pypi.io/packages/py3/w/wheel/wheel-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/w/wheel/wheel-VERSION-py3-none-any.whl
diff --git a/build/pkgs/widgetsnbextension/checksums.ini b/build/pkgs/widgetsnbextension/checksums.ini
index 099c0acb09e..3fc58cecc14 100644
--- a/build/pkgs/widgetsnbextension/checksums.ini
+++ b/build/pkgs/widgetsnbextension/checksums.ini
@@ -1,4 +1,4 @@
tarball=widgetsnbextension-VERSION-py3-none-any.whl
sha1=067535b5d1738a4de0abb5f1219581a4a66d243c
sha256=91452ca8445beb805792f206e560c1769284267a30ceb1cec9f5bcc887d15175
-upstream_url=https://pypi.io/packages/py3/w/widgetsnbextension/widgetsnbextension-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/w/widgetsnbextension/widgetsnbextension-VERSION-py3-none-any.whl
diff --git a/build/pkgs/xz/distros/cygwin.txt b/build/pkgs/xz/distros/cygwin.txt
deleted file mode 100644
index d66e95ca507..00000000000
--- a/build/pkgs/xz/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-xz
diff --git a/build/pkgs/zeromq/distros/cygwin.txt b/build/pkgs/zeromq/distros/cygwin.txt
deleted file mode 100644
index 57737d06afb..00000000000
--- a/build/pkgs/zeromq/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-libzmq-devel
diff --git a/build/pkgs/zipp/checksums.ini b/build/pkgs/zipp/checksums.ini
index 1af443d7f19..5fc5129cab4 100644
--- a/build/pkgs/zipp/checksums.ini
+++ b/build/pkgs/zipp/checksums.ini
@@ -1,4 +1,4 @@
tarball=zipp-VERSION-py3-none-any.whl
sha1=22cf149f293964ac7538ad41af8caa9aacf8fe1a
sha256=96dc6ad62f1441bcaccef23b274ec471518daf4fbbc580341204936a5a3dddec
-upstream_url=https://pypi.io/packages/py3/z/zipp/zipp-VERSION-py3-none-any.whl
+upstream_url=https://files.pythonhosted.org/packages/py3/z/zipp/zipp-VERSION-py3-none-any.whl
diff --git a/build/pkgs/zlib/distros/cygwin.txt b/build/pkgs/zlib/distros/cygwin.txt
deleted file mode 100644
index f47c16b504b..00000000000
--- a/build/pkgs/zlib/distros/cygwin.txt
+++ /dev/null
@@ -1 +0,0 @@
-zlib-devel
diff --git a/build/sage_bootstrap/app.py b/build/sage_bootstrap/app.py
index 2b8b44959b1..c5dac654cc5 100644
--- a/build/sage_bootstrap/app.py
+++ b/build/sage_bootstrap/app.py
@@ -430,9 +430,9 @@ def create(self, package_name, version=None, tarball=None, pkg_type=None, upstre
tarball = pypi_version.tarball.replace(pypi_version.version, 'VERSION')
if not version:
version = pypi_version.version
- # Use a URL from pypi.io instead of the specific URL received from the PyPI query
+ # Use a URL from files.pythonhosted.org instead of the specific URL received from the PyPI query
# because it follows a simple pattern.
- upstream_url = 'https://pypi.io/packages/source/{0:1.1}/{0}/{1}'.format(package_name, tarball)
+ upstream_url = 'https://files.pythonhosted.org/packages/source/{0:1.1}/{0}/{1}'.format(package_name, tarball)
elif source == 'wheel':
if not tarball:
tarball = pypi_version.tarball.replace(pypi_version.version, 'VERSION')
@@ -459,7 +459,7 @@ def create(self, package_name, version=None, tarball=None, pkg_type=None, upstre
self.create(dep, pkg_type=pkg_type)
dep = Package(dep).name
dependencies.append(dep)
- upstream_url = 'https://pypi.io/packages/{2}/{0:1.1}/{0}/{1}'.format(package_name, tarball, pypi_version.python_version)
+ upstream_url = 'https://files.pythonhosted.org/packages/{2}/{0:1.1}/{0}/{1}'.format(package_name, tarball, pypi_version.python_version)
if not description:
description = pypi_version.summary
if not license:
diff --git a/condarc.yml b/condarc.yml
index 9538902cacd..dd5a6e34a16 100644
--- a/condarc.yml
+++ b/condarc.yml
@@ -3,4 +3,3 @@
channel_priority: strict
channels:
- conda-forge
- - defaults
diff --git a/configure.ac b/configure.ac
index 5c12ff36ac9..1bf79ed7333 100644
--- a/configure.ac
+++ b/configure.ac
@@ -222,7 +222,7 @@ dnl Exit autoconf with exit code 16 in this case. This will be
dnl caught by the bootstrap script.
m4_exit(16)])
-PKG_PROG_PKG_CONFIG([0.29])
+PKG_PROG_PKG_CONFIG([0.29], [PKG_CONFIG=false])
AC_CHECK_PROG(found_ranlib, ranlib, yes, no)
if test x$found_ranlib != xyes
diff --git a/environment-3.10-linux-aarch64.yml b/environment-3.10-linux-aarch64.yml
index bddb9bbef02..1ec845735bf 100644
--- a/environment-3.10-linux-aarch64.yml
+++ b/environment-3.10-linux-aarch64.yml
@@ -1,45 +1,92 @@
+name: sage
# Generated by conda-lock.
# platform: linux-aarch64
-# input_hash: ed05f748f5bf9a763c86991a78f0e77da34cbbe3d1568b666f3476c19d899843
+# input_hash: 50ecbf09a118347f6c002960a184cf81c369d83e8e8555c2db3282013254eca1
channels:
- conda-forge
dependencies:
- _openmp_mutex=4.5=2_kmp_llvm
+ - _r-mutex=1.0.1=anacondar_1
- _sysroot_linux-aarch64_curr_repodata_hack=4=h57d6b7b_14
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - alsa-lib=1.2.11=h31becfc_1
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py310hb299538_4
- arpack=3.9.1=nompi_hd363cd0_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321h2148fe1_1
- automake=1.16.5=pl5321h8af1aa0_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=hf897c2e_0
- bdw-gc=8.0.6=hd62202e_0
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
- binutils=2.40=hf1166c9_7
- binutils_impl_linux-aarch64=2.40=hf54a868_7
- binutils_linux-aarch64=2.40=h1f91aba_9
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_linuxaarch64_openblas
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_linuxaarch64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=ha990451_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=h31becfc_1
+ - brotli-bin=1.1.0=h31becfc_1
+ - brotli-python=1.1.0=py310hbb3657e_1
+ - bwidget=1.9.14=h8af1aa0_1
- bzip2=1.0.8=h31becfc_5
- c-ares=1.28.1=h31becfc_0
- c-compiler=1.7.0=h31becfc_1
- ca-certificates=2024.6.2=hcefe29a_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=h5c54ea9_2
- cddlib=1!0.94m=h719063d_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py310hce94938_0
- chardet=5.2.0=py310hbbe02a8_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- cliquer=1.22=h31becfc_1
- cmake=3.29.6=h7042e5d_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py310h4c7bcd0_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compilers=1.7.0=h8af1aa0_1
+ - contourpy=1.2.1=py310h586407a_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=h7daf2e0_0
+ - cvxopt=1.3.2=py310he29a27f_2
- cxx-compiler=1.7.0=h2a328a1_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py310h4cbba44_0
+ - cysignals=1.11.2=py310h485802a_3
+ - cython=3.0.10=py310hbb3657e_0
+ - debugpy=1.8.1=py310hbb3657e_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=hb12102e_1203
- ecl=23.9.9=h6475f26_0
- eclib=20231212=he26bab5_0
- ecm=7.0.5=ha2d0fc4_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h2f0025b_0
- fflas-ffpack=2.5.0=h503e619_0
+ - fftw=3.3.10=nompi_h020dacd_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -47,11 +94,17 @@ dependencies:
- fontconfig=2.14.2=ha9a116f_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py310hb52b2da_0
- fortran-compiler=1.7.0=h7048d53_1
- fplll=5.4.5=hb3a790e_0
+ - fpylll=0.6.1=py310hfdbf2a6_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=hf0a5ef3_2
+ - fribidi=1.0.10=hb9de7d4_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=h597289e_3
- gap-defaults=4.12.2=h8af1aa0_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gcc=12.3.0=hdb0cc85_13
- gcc_impl_linux-aarch64=12.3.0=h3d98823_13
- gcc_linux-aarch64=12.3.0=ha52a6ea_9
@@ -66,29 +119,76 @@ dependencies:
- givaro=4.2.0=h364d21b_0
- glpk=5.0=h66325d0_0
- gmp=6.3.0=h0a1ffab_2
+ - gmpy2=2.1.5=py310h05bcf56_1
+ - graphite2=1.3.13=h2f0025b_1003
- gsl=2.7=h294027d_0
- gxx=12.3.0=hdb0cc85_13
- gxx_impl_linux-aarch64=12.3.0=hba91e99_13
- gxx_linux-aarch64=12.3.0=h9d1f256_9
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h9812418_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=h787c7f5_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=h197073e_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h15043fe_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh3099207_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=h8af1aa0_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py310h4c7bcd0_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py310h4c7bcd0_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- kernel-headers_linux-aarch64=4.18.0=h5b4a56d_14
- keyutils=1.6.1=h4e544f5_0
+ - kiwisolver=1.4.5=py310he290b8a_1
- krb5=1.21.2=hc419048_0
- lcalc=2.0.5=he588f68_2
+ - lcms2=2.16=h922389a_0
- ld_impl_linux-aarch64=2.40=h9fc2d93_7
- lerc=4.0.0=h4de3ea5_0
- libatomic_ops=7.6.14=h4e544f5_0
- - libblas=3.9.0=22_linuxaarch64_openblas
+ - libblas=3.9.0=20_linuxaarch64_openblas
- libboost=1.85.0=hb41fec8_2
- libboost-devel=1.85.0=h37bb5a9_2
- libboost-headers=1.85.0=h8af1aa0_2
- libbraiding=1.2=hd600fc2_0
- libbrial=1.2.12=h9429f74_3
- - libcblas=3.9.0=22_linuxaarch64_openblas
+ - libbrotlicommon=1.1.0=h31becfc_1
+ - libbrotlidec=1.1.0=h31becfc_1
+ - libbrotlienc=1.1.0=h31becfc_1
+ - libcblas=3.9.0=20_linuxaarch64_openblas
+ - libcups=2.3.3=h405e4a8_4
- libcurl=8.8.0=h4e8248e_0
- libdeflate=1.20=h31becfc_0
- libedit=3.1.20191231=he28a2e2_2
@@ -101,16 +201,17 @@ dependencies:
- libgd=2.3.3=hcd22fd5_9
- libgfortran-ng=13.2.0=he9431aa_13
- libgfortran5=13.2.0=h2af0866_13
+ - libglib=2.80.2=haee52c6_1
- libgomp=13.2.0=he277a41_13
- libhomfly=1.02r6=h31becfc_1
- libhwloc=2.10.0=default_h3030c0e_1001
- libiconv=1.17=h31becfc_2
- libjpeg-turbo=3.0.0=h31becfc_1
- - liblapack=3.9.0=22_linuxaarch64_openblas
- - liblapacke=3.9.0=22_linuxaarch64_openblas
+ - liblapack=3.9.0=20_linuxaarch64_openblas
+ - liblapacke=3.9.0=20_linuxaarch64_openblas
- libnghttp2=1.58.0=hb0e430d_1
- libnsl=2.0.1=h31becfc_0
- - libopenblas=0.3.27=pthreads_h5a5ec62_0
+ - libopenblas=0.3.25=pthreads_h5a5ec62_0
- libpng=1.6.43=h194ca79_0
- libsanitizer=12.3.0=h57e2e72_13
- libsodium=1.0.18=hb9de7d4_1
@@ -124,6 +225,7 @@ dependencies:
- libuv=1.48.0=h31becfc_0
- libwebp=1.4.0=h8b4e01b_0
- libwebp-base=1.4.0=h31becfc_0
+ - libxcb=1.16=h7935292_0
- libxcrypt=4.4.36=h31becfc_1
- libxml2=2.12.7=h49dc7a2_1
- libzlib=1.3.1=h68df207_1
@@ -134,61 +236,200 @@ dependencies:
- m4ri=20140914=hedfd65a_1006
- m4rie=20150908=hf0a5ef3_1002
- make=4.3=h309ac5b_1
+ - markupsafe=2.1.5=py310h7c1f4a2_0
- mathjax=3.2.2=h8af1aa0_0
+ - matplotlib=3.8.4=py310hbbe02a8_2
+ - matplotlib-base=3.8.4=py310h84f21c1_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h6475f26_2
+ - memory-allocator=0.1.3=py310hb299538_0
- metis=5.1.0=h2f0025b_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=hf4c8f4c_0
- mpfi=1.5.4=h846f343_1001
- mpfr=4.2.1=ha2d0fc4_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h31becfc_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h0425590_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h70be974_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=h0d7519b_1
- - openblas=0.3.27=pthreads_h339cbfa_0
+ - numpy=1.26.4=py310hcbab775_0
+ - openblas=0.3.25=pthreads_h339cbfa_0
+ - openjdk=22.0.1=h3d4cd67_0
+ - openjpeg=2.5.2=h0d9d63b_0
- openssl=3.3.1=h68df207_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=hb9de7d4_0
+ - pandoc=3.2.1=h8af1aa0_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h399c48b_0
- pari=2.15.5=h169c2a7_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=hf897c2e_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h070dd5b_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h31becfc_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py310h611336f_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=h2f0025b_0
- pkg-config=0.29.2=hb9de7d4_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h31becfc_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h984aac9_1006
- - primecount=7.13=hfe4b40e_0
- - primesieve=12.1=h2f0025b_0
+ - pplpy=0.8.9=py310h6665419_1
+ - primecount=7.9=hd600fc2_0
+ - primecountpy=0.1.0=py310h586407a_4
+ - primesieve=11.1=h2f0025b_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py310hb52b2da_0
+ - pthread-stubs=0.4=hb9de7d4_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py310h586407a_0
+ - pybind11-global=2.12.0=py310h586407a_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py310h7c1f4a2_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.10.14=hbbe8eec_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py310hbb3657e_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.10=4_cp310
+ - pythran=0.15.0=py310h5e48e15_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py310h4c7bcd0_4
+ - pyyaml=6.0.1=py310hb299538_1
+ - pyzmq=26.0.3=py310he875deb_0
- qd=2.3.22=h05efe27_1004
- qhull=2020.2=hd62202e_2
+ - r-base=4.3.3=h7f20121_3
+ - r-lattice=0.22_6=r43h25e906a_0
- readline=8.2=h8fc344f_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=h31becfc_0
+ - rpds-py=0.18.1=py310h59d1b7a_0
+ - rpy2=3.5.11=py310r43h8b6b5fc_3
- rw=0.9=h31becfc_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.3=py310hcbab775_1
+ - sed=4.8=ha0d5d3d_0
+ - send2trash=1.8.3=pyh0d859eb_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=hbe76a8a_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=hdc7ab3c_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=h3944111_1
- symmetrica=3.0.1=hd600fc2_0
- sympow=2.023.6=h157afb5_3
+ - sympy=1.12.1=pypyh2585a3b_103
- sysroot_linux-aarch64=2.17=h5b4a56d_14
- tachyon=0.99b6=ha0bfc61_1002
- tar=1.34=h048efde_0
- tbb=2021.12.0=h70be974_1
+ - terminado=0.18.1=pyh0d859eb_0
- texinfo=7.0=pl5321h17f021e_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h194ca79_0
+ - tktable=2.10=h52f7bd3_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py310h03727f4_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py310h4c7bcd0_0
+ - unicodedata2=15.1.0=py310hb299538_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-fixesproto=5.0=h3557bc0_1002
+ - xorg-inputproto=2.3.2=h3557bc0_1002
+ - xorg-kbproto=1.0.7=h3557bc0_1002
+ - xorg-libice=1.1.1=h7935292_0
+ - xorg-libsm=1.2.4=h5a01bc2_0
+ - xorg-libx11=1.8.9=h08be655_1
+ - xorg-libxau=1.0.11=h31becfc_0
+ - xorg-libxdmcp=1.1.3=h3557bc0_0
+ - xorg-libxext=1.3.4=h2a766a3_2
+ - xorg-libxfixes=5.0.3=h3557bc0_1004
+ - xorg-libxi=1.7.10=h3557bc0_0
+ - xorg-libxrender=0.9.11=h7935292_0
+ - xorg-libxt=1.3.0=h7935292_1
+ - xorg-libxtst=1.2.3=hf897c2e_1002
+ - xorg-recordproto=1.14.2=hf897c2e_1002
+ - xorg-renderproto=0.11.1=h3557bc0_1002
+ - xorg-xextproto=7.3.0=h2a766a3_1003
+ - xorg-xproto=7.0.31=h3557bc0_1007
- xz=5.2.6=h9cdd2b7_0
+ - yaml=0.2.5=hf897c2e_2
- zeromq=4.3.5=h28faeed_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h68df207_1
diff --git a/environment-3.10-linux.yml b/environment-3.10-linux.yml
index badbe1b8209..b764f92d2d7 100644
--- a/environment-3.10-linux.yml
+++ b/environment-3.10-linux.yml
@@ -1,45 +1,94 @@
+name: sage
# Generated by conda-lock.
# platform: linux-64
-# input_hash: 7e2837b2f3969db9c4c0a0a3300952924326a440d181dde256ca0291c70eb8dc
+# input_hash: 5dc443f6ceb3674d099e0ec613ba37acf67d72b0b26699816fc7afb3c9523b1f
channels:
- conda-forge
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - alsa-lib=1.2.12=h4ab18f5_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py310h2372a71_4
- arpack=3.9.1=nompi_h77f6705_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attr=2.5.1=h166bdaf_1
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321h2b4cb7a_1
- automake=1.16.5=pl5321ha770c72_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h7f98852_0
- bdw-gc=8.0.6=h4bd325d_0
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
- binutils=2.40=h4852527_7
- binutils_impl_linux-64=2.40=ha1999f0_7
- binutils_linux-64=2.40=hb3c18ed_9
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_linux64_openblas
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_linux64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=h44aadfe_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=hd590300_1
+ - brotli-bin=1.1.0=hd590300_1
+ - brotli-python=1.1.0=py310hc6cd4ac_1
+ - bwidget=1.9.14=ha770c72_1
- bzip2=1.0.8=hd590300_5
- c-ares=1.28.1=hd590300_0
- c-compiler=1.7.0=hd590300_1
- ca-certificates=2024.6.2=hbcca054_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=hbb29018_2
- cddlib=1!0.94m=h9202a9a_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py310h2fee648_0
- chardet=5.2.0=py310hff52083_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- cliquer=1.22=hd590300_1
- cmake=3.29.6=hcafd917_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py310hff52083_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compilers=1.7.0=ha770c72_1
+ - contourpy=1.2.1=py310hd41b1e2_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=he654da7_0
+ - cvxopt=1.3.2=py310h7b0674a_2
- cxx-compiler=1.7.0=h00ab1b0_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py310h14ed79e_0
+ - cysignals=1.11.2=py310h945e7c7_3
+ - cython=3.0.10=py310hc6cd4ac_0
+ - dbus=1.13.6=h5008d03_3
+ - debugpy=1.8.1=py310hc6cd4ac_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=hd9d9efa_1203
- ecl=23.9.9=hed6455c_0
- eclib=20231212=h96f522a_0
- ecm=7.0.5=h9458935_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h59595ed_0
- fflas-ffpack=2.5.0=h4f9960b_0
+ - fftw=3.3.10=nompi_hf1063bd_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -47,15 +96,23 @@ dependencies:
- fontconfig=2.14.2=h14ed4e7_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py310hc51659f_0
- fortran-compiler=1.7.0=heb67821_1
- fplll=5.4.5=h384768b_0
+ - fpylll=0.6.1=py310h7e26f94_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=h267a509_2
+ - fribidi=1.0.10=h36c2ea0_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=he9a28a4_3
- gap-defaults=4.12.2=ha770c72_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gcc=12.3.0=h915e2ae_13
- gcc_impl_linux-64=12.3.0=h58ffeeb_13
- gcc_linux-64=12.3.0=h9528a6a_9
- gengetopt=2.23=h9c3ff4c_0
+ - gettext=0.22.5=h59595ed_2
+ - gettext-tools=0.22.5=h59595ed_2
- gf2x=1.3.0=ha476b99_2
- gfan=0.6.2=hb86e20a_1003
- gfortran=12.3.0=h915e2ae_13
@@ -64,131 +121,363 @@ dependencies:
- giac=1.9.0.21=h673759e_1
- giflib=5.2.2=hd590300_0
- givaro=4.2.0=hb789bce_0
+ - glib=2.80.2=h8a4344b_1
+ - glib-tools=2.80.2=h73ef956_1
- glpk=5.0=h445213a_0
- gmp=6.3.0=hac33072_2
+ - gmpy2=2.1.5=py310hc7909c9_1
+ - graphite2=1.3.13=h59595ed_1003
- gsl=2.7=he838d99_0
+ - gst-plugins-base=1.24.5=hbaaba92_0
+ - gstreamer=1.24.5=haf2f30d_0
- gxx=12.3.0=h915e2ae_13
- gxx_impl_linux-64=12.3.0=h2a574ab_13
- gxx_linux-64=12.3.0=ha28b414_9
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=hfac3d4d_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=h59595ed_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=hef0740d_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h623f65a_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh3099207_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=ha770c72_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py310hff52083_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py310hff52083_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- kernel-headers_linux-64=2.6.32=he073ed8_17
- keyutils=1.6.1=h166bdaf_0
+ - kiwisolver=1.4.5=py310hd41b1e2_1
- krb5=1.21.2=h659d440_0
+ - lame=3.100=h166bdaf_1003
- lcalc=2.0.5=h5aac1b6_2
+ - lcms2=2.16=hb7c19ff_0
- ld_impl_linux-64=2.40=hf3520f5_7
- lerc=4.0.0=h27087fc_0
+ - libasprintf=0.22.5=h661eb56_2
+ - libasprintf-devel=0.22.5=h661eb56_2
- libatomic_ops=7.6.14=h166bdaf_0
- - libblas=3.9.0=22_linux64_openblas
+ - libblas=3.9.0=20_linux64_openblas
- libboost=1.85.0=hba137d9_2
- libboost-devel=1.85.0=h00ab1b0_2
- libboost-headers=1.85.0=ha770c72_2
- libbraiding=1.2=hcb278e6_0
- libbrial=1.2.12=h76af697_3
- - libcblas=3.9.0=22_linux64_openblas
+ - libbrotlicommon=1.1.0=hd590300_1
+ - libbrotlidec=1.1.0=hd590300_1
+ - libbrotlienc=1.1.0=hd590300_1
+ - libcap=2.69=h0f662aa_0
+ - libcblas=3.9.0=20_linux64_openblas
+ - libclang-cpp15=15.0.7=default_h127d8a8_5
+ - libclang13=18.1.8=default_h6ae225f_0
+ - libcups=2.3.3=h4637d8d_4
- libcurl=8.8.0=hca28451_0
- libdeflate=1.20=hd590300_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=hd590300_2
+ - libevent=2.1.12=hf998b51_1
- libexpat=2.6.2=h59595ed_0
- libffi=3.4.2=h7f98852_5
+ - libflac=1.4.3=h59595ed_0
- libflint=3.0.1=h5f2e117_ntl_100
- libgcc-devel_linux-64=12.3.0=h6b66f73_113
- libgcc-ng=13.2.0=h77fa898_13
+ - libgcrypt=1.10.3=hd590300_0
- libgd=2.3.3=h119a65a_9
+ - libgettextpo=0.22.5=h59595ed_2
+ - libgettextpo-devel=0.22.5=h59595ed_2
- libgfortran-ng=13.2.0=h69a702a_13
- libgfortran5=13.2.0=h3d2ce59_13
+ - libglib=2.80.2=h8a4344b_1
- libgomp=13.2.0=h77fa898_13
+ - libgpg-error=1.49=h4f305b6_0
- libhomfly=1.02r6=hd590300_1
- libhwloc=2.10.0=default_h5622ce7_1001
- libiconv=1.17=hd590300_2
- libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=22_linux64_openblas
- - liblapacke=3.9.0=22_linux64_openblas
+ - liblapack=3.9.0=20_linux64_openblas
+ - liblapacke=3.9.0=20_linux64_openblas
+ - libllvm15=15.0.7=hb3ce162_4
+ - libllvm18=18.1.8=hc9dba70_0
- libnghttp2=1.58.0=h47da74e_1
- libnsl=2.0.1=hd590300_0
- - libopenblas=0.3.27=pthreads_h413a1c8_0
+ - libogg=1.3.5=h4ab18f5_0
+ - libopenblas=0.3.25=pthreads_h413a1c8_0
+ - libopus=1.3.1=h7f98852_1
- libpng=1.6.43=h2797004_0
+ - libpq=16.3=ha72fbe1_0
- libsanitizer=12.3.0=hb8811af_13
+ - libsndfile=1.2.2=hc60ed4a_1
- libsodium=1.0.18=h36c2ea0_1
- libsqlite=3.46.0=hde9e2c9_0
- libssh2=1.11.0=h0841786_0
- libstdcxx-devel_linux-64=12.3.0=h6b66f73_113
- libstdcxx-ng=13.2.0=hc0a3c3a_13
+ - libsystemd0=255=h3516f8a_1
- libtiff=4.6.0=h1dd3fc0_3
- libtool=2.4.7=h27087fc_0
- libuuid=2.38.1=h0b41bf4_0
- libuv=1.48.0=hd590300_0
+ - libvorbis=1.3.7=h9c3ff4c_0
- libwebp=1.4.0=h2c329e2_0
- libwebp-base=1.4.0=hd590300_0
+ - libxcb=1.16=hd590300_0
- libxcrypt=4.4.36=hd590300_1
+ - libxkbcommon=1.7.0=h2c5496b_1
- libxml2=2.12.7=hc051c1a_1
- libzlib=1.3.1=h4ab18f5_1
- linbox=1.7.0=ha329b40_0
- llvm-openmp=18.1.8=hf5423f3_0
- lrcalc=2.1=h59595ed_6
+ - lz4-c=1.9.4=hcb278e6_0
- m4=1.4.18=h516909a_1001
- m4ri=20140914=hae5d5c5_1006
- m4rie=20150908=h267a509_1002
- make=4.3=hd18ef5c_1
+ - markupsafe=2.1.5=py310h2372a71_0
- mathjax=3.2.2=ha770c72_0
+ - matplotlib=3.8.4=py310hff52083_2
+ - matplotlib-base=3.8.4=py310hef631a5_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=hed6455c_2
+ - memory-allocator=0.1.3=py310h2372a71_0
- metis=5.1.0=h59595ed_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=hfe3b2da_0
- mpfi=1.5.4=h9f54685_1001
- mpfr=4.2.1=h9458935_1
+ - mpg123=1.32.6=h59595ed_0
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - mysql-common=8.3.0=hf1915f5_4
+ - mysql-libs=8.3.0=hca2cd23_4
- nauty=2.8.8=hd590300_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h59595ed_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h297d8ca_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
+ - nspr=4.35=h27087fc_0
+ - nss=3.101=h593d115_0
- ntl=11.4.3=hef3c4d3_1
- - openblas=0.3.27=pthreads_h7a3da1a_0
+ - numpy=1.26.4=py310hb13e2d6_0
+ - openblas=0.3.25=pthreads_h7a3da1a_0
+ - openjdk=21.0.2=haa376d0_0
+ - openjpeg=2.5.2=h488ebb8_0
- openssl=3.3.1=h4ab18f5_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=h36c2ea0_0
+ - pandoc=3.2.1=ha770c72_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h84a9a3c_0
- pari=2.15.5=h4d4ae9b_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=h7f98852_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h0f59acf_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_hd590300_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py310hebfe307_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.2=h59595ed_0
- pkg-config=0.29.2=h36c2ea0_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=hd590300_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h6ec01c2_1006
- - primecount=7.13=hb0181e5_0
- - primesieve=12.1=h59595ed_0
+ - pplpy=0.8.9=py310h18554fa_1
+ - primecount=7.9=hcb278e6_0
+ - primecountpy=0.1.0=py310hd41b1e2_4
+ - primesieve=11.1=h59595ed_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py310hc51659f_0
+ - pthread-stubs=0.4=h36c2ea0_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pulseaudio-client=17.0=hb77b528_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py310hd41b1e2_0
+ - pybind11-global=2.12.0=py310hd41b1e2_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyqt=5.15.9=py310h04931ad_5
+ - pyqt5-sip=12.12.2=py310hc6cd4ac_5
+ - pyrsistent=0.20.0=py310h2372a71_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.10.14=hd12c33a_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py310hc6cd4ac_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.10=4_cp310
+ - pythran=0.15.0=py310hcb52e73_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py310hff52083_4
+ - pyyaml=6.0.1=py310h2372a71_1
+ - pyzmq=26.0.3=py310h6883aea_0
- qd=2.3.22=h2cc385e_1004
- qhull=2020.2=h4bd325d_2
+ - qt-main=5.15.8=ha2b5568_22
+ - r-base=4.3.3=he2d9a6e_3
+ - r-lattice=0.22_6=r43h57805ef_0
- readline=8.2=h8228510_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=hd590300_0
+ - rpds-py=0.18.1=py310he421c4c_0
+ - rpy2=3.5.11=py310r43h1f7b6fc_3
- rw=0.9=hd590300_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py310hb13e2d6_0
+ - sed=4.8=he412f7d_0
+ - send2trash=1.8.3=pyh0d859eb_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=h33f5c3f_1
+ - sip=6.7.12=py310hc6cd4ac_0
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h6d4b2fc_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hf4753ba_1
- symmetrica=3.0.1=hcb278e6_0
- sympow=2.023.6=hc6ab17c_3
+ - sympy=1.12.1=pypyh2585a3b_103
- sysroot_linux-64=2.12=he073ed8_17
- tachyon=0.99b6=hba7d16a_1002
- tar=1.34=hb2e2bae_1
- tbb=2021.12.0=h297d8ca_1
+ - terminado=0.18.1=pyh0d859eb_0
- texinfo=7.0=pl5321h0f457ee_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=noxft_h4845f30_101
+ - tktable=2.10=h8bc8fbc_6
+ - toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py310hc51659f_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py310hff52083_0
+ - unicodedata2=15.1.0=py310h2372a71_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xcb-util=0.4.1=hb711507_2
+ - xcb-util-image=0.4.0=hb711507_2
+ - xcb-util-keysyms=0.4.1=hb711507_0
+ - xcb-util-renderutil=0.3.10=hb711507_0
+ - xcb-util-wm=0.4.2=hb711507_0
+ - xkeyboard-config=2.42=h4ab18f5_0
+ - xorg-fixesproto=5.0=h7f98852_1002
+ - xorg-inputproto=2.3.2=h7f98852_1002
+ - xorg-kbproto=1.0.7=h7f98852_1002
+ - xorg-libice=1.1.1=hd590300_0
+ - xorg-libsm=1.2.4=h7391055_0
+ - xorg-libx11=1.8.9=hb711507_1
+ - xorg-libxau=1.0.11=hd590300_0
+ - xorg-libxdmcp=1.1.3=h7f98852_0
+ - xorg-libxext=1.3.4=h0b41bf4_2
+ - xorg-libxfixes=5.0.3=h7f98852_1004
+ - xorg-libxi=1.7.10=h7f98852_0
+ - xorg-libxrender=0.9.11=hd590300_0
+ - xorg-libxt=1.3.0=hd590300_1
+ - xorg-libxtst=1.2.3=h7f98852_1002
+ - xorg-recordproto=1.14.2=h7f98852_1002
+ - xorg-renderproto=0.11.1=h7f98852_1002
+ - xorg-xextproto=7.3.0=h0b41bf4_1003
+ - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
+ - xorg-xproto=7.0.31=h7f98852_1007
- xz=5.2.6=h166bdaf_0
+ - yaml=0.2.5=h7f98852_2
- zeromq=4.3.5=h75354e8_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h4ab18f5_1
diff --git a/environment-3.10-macos-x86_64.yml b/environment-3.10-macos-x86_64.yml
index 8e71e6930d6..ebac3ba4872 100644
--- a/environment-3.10-macos-x86_64.yml
+++ b/environment-3.10-macos-x86_64.yml
@@ -1,29 +1,54 @@
+name: sage
# Generated by conda-lock.
# platform: osx-64
-# input_hash: 3fe6c9a3bde225a21413e3fbc72cea580ff915d2921ab0980a2f5220ab0e2884
+# input_hash: 831a1103cbcd8c06cbae982446953e3de30517fdd302ac5aa70454b8d19f63d9
channels:
- conda-forge
dependencies:
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py310h6729b98_4
- arpack=3.9.1=nompi_hf81eadf_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321hed12c24_1
- automake=1.16.5=pl5321h694c41f_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h0d85af4_0
- bdw-gc=8.0.6=h940c156_0
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_osx64_openblas
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_osx64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=h07eb623_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=h0dc2134_1
+ - brotli-bin=1.1.0=h0dc2134_1
+ - brotli-python=1.1.0=py310h9e9d8ca_1
+ - bwidget=1.9.14=h694c41f_1
- bzip2=1.0.8=h10d778d_5
- c-ares=1.28.1=h10d778d_0
- c-compiler=1.7.0=h282daa2_1
- ca-certificates=2024.6.2=h8857fd0_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=h9f650ed_2
- cctools=986=h40f6528_0
- cctools_osx-64=986=ha1c5b94_0
- cddlib=1!0.94m=h0f52abe_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py310hdca579f_0
- chardet=5.2.0=py310h2ec42d9_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- clang=16.0.6=default_ha3b9224_8
- clang-16=16.0.6=default_h4c8afb6_8
- clang_impl_osx-64=16.0.6=h8787910_16
@@ -34,18 +59,39 @@ dependencies:
- cliquer=1.22=h10d778d_1
- cmake=3.29.6=h749d262_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py310h2ec42d9_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compiler-rt=16.0.6=ha38d28d_2
- compiler-rt_osx-64=16.0.6=ha38d28d_2
- compilers=1.7.0=h694c41f_1
+ - contourpy=1.2.1=py310hb3b189b_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=hea67d85_0
+ - cvxopt=1.3.2=py310h1fac3e1_2
- cxx-compiler=1.7.0=h7728843_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py310hc7df965_0
+ - cysignals=1.11.2=py310h8c82e65_3
+ - cython=3.0.10=py310h5daac23_0
+ - debugpy=1.8.1=py310h5daac23_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=h6e329d1_1203
- ecl=23.9.9=h2b27fa8_0
- eclib=20231212=h02435c3_0
- ecm=7.0.5=h4f6b447_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h73e2aa4_0
- fflas-ffpack=2.5.0=h5898d61_0
+ - fftw=3.3.10=nompi_h292e606_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -53,11 +99,17 @@ dependencies:
- fontconfig=2.14.2=h5bb23bf_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py310h936d840_0
- fortran-compiler=1.7.0=h6c2ab21_1
- fplll=5.4.5=hb7981ad_0
+ - fpylll=0.6.1=py310h65a3d7e_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=h60636b9_2
+ - fribidi=1.0.10=hbcb3906_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=hc16eb5f_3
- gap-defaults=4.12.2=h694c41f_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gengetopt=2.23=he49afe7_0
- gettext=0.22.5=h5ff76d1_2
- gettext-tools=0.22.5=h5ff76d1_2
@@ -71,28 +123,74 @@ dependencies:
- givaro=4.2.0=h1b3d6f7_0
- glpk=5.0=h3cb5acd_0
- gmp=6.3.0=hf036a51_2
+ - gmpy2=2.1.5=py310h0310db1_1
+ - graphite2=1.3.13=h73e2aa4_1003
- gsl=2.7=h93259b0_0
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h053f038_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=hf5e326d_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=hde4452d_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h61918c1_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh57ce528_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
- isl=0.26=imath32_h2e86a7b_101
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.9=h694c41f_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py310h2ec42d9_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py310h2ec42d9_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
+ - kiwisolver=1.4.5=py310h88cfcbd_1
- krb5=1.21.2=hb884880_0
- lcalc=2.0.5=h547a6ed_2
+ - lcms2=2.16=ha2f27b4_0
- ld64=711=ha02d983_0
- ld64_osx-64=711=ha20a434_0
- lerc=4.0.0=hb486fe8_0
- libasprintf=0.22.5=h5ff76d1_2
- libasprintf-devel=0.22.5=h5ff76d1_2
- libatomic_ops=7.6.14=hb7f2c08_0
- - libblas=3.9.0=22_osx64_openblas
+ - libblas=3.9.0=20_osx64_openblas
- libboost=1.85.0=h739af76_2
- libboost-devel=1.85.0=h2b186f8_2
- libboost-headers=1.85.0=h694c41f_2
- libbraiding=1.2=hf0c8a7f_0
- libbrial=1.2.12=h81e9653_3
- - libcblas=3.9.0=22_osx64_openblas
+ - libbrotlicommon=1.1.0=h0dc2134_1
+ - libbrotlidec=1.1.0=h0dc2134_1
+ - libbrotlienc=1.1.0=h0dc2134_1
+ - libcblas=3.9.0=20_osx64_openblas
- libclang-cpp16=16.0.6=default_h4c8afb6_8
- libcurl=8.8.0=hf9fcc65_0
- libcxx=17.0.6=h88467a6_0
@@ -108,17 +206,18 @@ dependencies:
- libgfortran=5.0.0=13_2_0_h97931a8_3
- libgfortran-devel_osx-64=12.3.0=h0b6f5ec_3
- libgfortran5=13.2.0=h2873a65_3
+ - libglib=2.80.2=h736d271_1
- libhomfly=1.02r6=h10d778d_1
- libhwloc=2.10.0=default_h456cccd_1001
- libiconv=1.17=hd75f5a5_2
- libintl=0.22.5=h5ff76d1_2
- libintl-devel=0.22.5=h5ff76d1_2
- libjpeg-turbo=3.0.0=h0dc2134_1
- - liblapack=3.9.0=22_osx64_openblas
- - liblapacke=3.9.0=22_osx64_openblas
+ - liblapack=3.9.0=20_osx64_openblas
+ - liblapacke=3.9.0=20_osx64_openblas
- libllvm16=16.0.6=hbedff68_3
- libnghttp2=1.58.0=h64cf6d3_1
- - libopenblas=0.3.27=openmp_hfef2a42_0
+ - libopenblas=0.3.25=openmp_hfef2a42_0
- libpng=1.6.43=h92b6c6a_0
- libsodium=1.0.18=hbcb3906_1
- libsqlite=3.46.0=h1b8f9f3_0
@@ -128,6 +227,7 @@ dependencies:
- libuv=1.48.0=h67532ce_0
- libwebp=1.4.0=hc207709_0
- libwebp-base=1.4.0=h10d778d_0
+ - libxcb=1.16=h0dc2134_0
- libxml2=2.12.7=h3e169fe_1
- libzlib=1.3.1=h87427d6_1
- linbox=1.7.0=h7061c92_0
@@ -138,62 +238,186 @@ dependencies:
- m4ri=20140914=hd82a5f3_1006
- m4rie=20150908=hc616cfc_1002
- make=4.3=h22f3db7_1
+ - markupsafe=2.1.5=py310hb372a2b_0
- mathjax=3.2.2=h694c41f_0
+ - matplotlib=3.8.4=py310h2ec42d9_2
+ - matplotlib-base=3.8.4=py310h7ea1ff3_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2b27fa8_2
+ - memory-allocator=0.1.3=py310h6729b98_0
- metis=5.1.0=he965462_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=h81bd1dd_0
- mpfi=1.5.4=h52b28e3_1001
- mpfr=4.2.1=h4f6b447_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h10d778d_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h5846eda_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h3c5361c_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=h0ab3c2f_1
- - openblas=0.3.27=openmp_h6794695_0
+ - numpy=1.26.4=py310h4bfa8fc_0
+ - openblas=0.3.25=openmp_h6794695_0
+ - openjdk=22.0.1=h2d185b6_0
+ - openjpeg=2.5.2=h7310d3a_0
- openssl=3.3.1=h87427d6_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=hbcb3906_0
+ - pandoc=3.2.1=h694c41f_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h880b76c_0
- pari=2.15.5=h7ba67ff_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=hbcf498f_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h7634a1b_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h10d778d_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py310h2fdc51f_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=h73e2aa4_0
- pkg-config=0.29.2=ha3d46e9_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h10d778d_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=ha60d53e_1006
- - primecount=7.13=hf455435_0
- - primesieve=12.1=h73e2aa4_0
+ - pplpy=0.8.9=py310hbe8aec3_1
+ - primecount=7.6=ha894c9a_0
+ - primecountpy=0.1.0=py310h88cfcbd_4
+ - primesieve=11.0=hf0c8a7f_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py310h936d840_0
+ - pthread-stubs=0.4=hc929b4f_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py310hb3b189b_0
+ - pybind11-global=2.12.0=py310hb3b189b_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyobjc-core=10.3.1=py310h445dc1f_0
+ - pyobjc-framework-cocoa=10.3.1=py310h445dc1f_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py310hb372a2b_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.10.14=h00d2728_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py310h5daac23_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.10=4_cp310
+ - pythran=0.15.0=py310h076e4b7_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py310h2ec42d9_4
+ - pyyaml=6.0.1=py310h6729b98_1
+ - pyzmq=26.0.3=py310he0bbd50_0
- qd=2.3.22=h2beb688_1004
- qhull=2020.2=h940c156_2
+ - r-base=4.3.3=h4648a1f_3
+ - r-lattice=0.22_6=r43hb2c329c_0
- readline=8.2=h9e318b2_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=h0dc2134_0
+ - rpds-py=0.18.1=py310h12a1ced_0
+ - rpy2=3.5.11=py310r43hf0b6da5_3
- rw=0.9=h10d778d_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py310h3f1db6d_0
+ - send2trash=1.8.3=pyh31c8845_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
- sigtool=0.1.3=h88f4db0_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=h0d51a9f_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h28673e1_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hd2b2131_1
- symmetrica=3.0.1=hf0c8a7f_0
- sympow=2.023.6=h115ba6a_3
+ - sympy=1.12.1=pypyh2585a3b_103
- tachyon=0.99b6=h3a1d103_1002
- tapi=1100.0.11=h9ce4665_0
- tar=1.34=hcb2f6ea_1
- tbb=2021.12.0=h3c5361c_1
+ - terminado=0.18.1=pyh31c8845_0
- texinfo=7.0=pl5321hc47821c_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h1abcd95_1
+ - tktable=2.10=hba9d6f1_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py310h936d840_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py310h2ec42d9_0
+ - unicodedata2=15.1.0=py310h6729b98_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-libxau=1.0.11=h0dc2134_0
+ - xorg-libxdmcp=1.1.3=h35c211d_0
- xz=5.2.6=h775f41a_0
+ - yaml=0.2.5=h0d85af4_2
- zeromq=4.3.5=hde137ed_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h87427d6_1
diff --git a/environment-3.10-macos.yml b/environment-3.10-macos.yml
index 2e0fda6d7d9..0c5d09880a1 100644
--- a/environment-3.10-macos.yml
+++ b/environment-3.10-macos.yml
@@ -1,29 +1,54 @@
+name: sage
# Generated by conda-lock.
# platform: osx-arm64
-# input_hash: a06693a6e2cbe8750043277b860bd29ad235bdc75a55b7ab3b2aa27a56ca3cd4
+# input_hash: fce4b9b5cdb20ebb2d93612fa27b4d6584379772c37a8cccd6c2390e2ce5f3b1
channels:
- conda-forge
dependencies:
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py310h2aa6e3c_4
- arpack=3.9.1=nompi_h593882a_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321hcd07c0c_1
- automake=1.16.5=pl5321hce30654_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h3422bc3_0
- bdw-gc=8.0.6=hc021e02_0
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_osxarm64_openblas
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_osxarm64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=hca5e981_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=hb547adb_1
+ - brotli-bin=1.1.0=hb547adb_1
+ - brotli-python=1.1.0=py310h1253130_1
+ - bwidget=1.9.14=hce30654_1
- bzip2=1.0.8=h93a5062_5
- c-ares=1.28.1=h93a5062_0
- c-compiler=1.7.0=h6aa9301_1
- ca-certificates=2024.6.2=hf0a4a13_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=hc6c324b_2
- cctools=986=h4faf515_0
- cctools_osx-arm64=986=h62378fb_0
- cddlib=1!0.94m=h6d7a090_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py310hdcd7c05_0
- chardet=5.2.0=py310hbe9552e_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- clang=16.0.6=default_h095aff0_8
- clang-16=16.0.6=default_hb63da90_8
- clang_impl_osx-arm64=16.0.6=hc421ffc_16
@@ -34,18 +59,39 @@ dependencies:
- cliquer=1.22=h93a5062_1
- cmake=3.29.6=had79d8f_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py310hbe9552e_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compiler-rt=16.0.6=h3808999_2
- compiler-rt_osx-arm64=16.0.6=h3808999_2
- compilers=1.7.0=hce30654_1
+ - contourpy=1.2.1=py310h21239e6_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=h653d890_0
+ - cvxopt=1.3.2=py310h7e4e7d1_2
- cxx-compiler=1.7.0=h2ffa867_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py310h5e3d6bc_0
+ - cysignals=1.11.2=py310hfd3b3fe_3
+ - cython=3.0.10=py310h692a8b6_0
+ - debugpy=1.8.1=py310h692a8b6_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=h9397a75_1203
- ecl=23.9.9=h1d9728a_0
- eclib=20231212=h7f07de4_0
- ecm=7.0.5=h41d338b_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=hebf3989_0
- fflas-ffpack=2.5.0=h4bc3318_0
+ - fftw=3.3.10=nompi_h6637ab6_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -53,11 +99,17 @@ dependencies:
- fontconfig=2.14.2=h82840c6_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py310ha6dd24b_0
- fortran-compiler=1.7.0=hafb19e3_1
- fplll=5.4.5=hb7d509d_0
+ - fpylll=0.6.1=py310hd9be144_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=hadb7bae_2
+ - fribidi=1.0.10=h27ca646_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=he8f4e70_3
- gap-defaults=4.12.2=hce30654_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gengetopt=2.23=hbdafb3b_0
- gettext=0.22.5=h8fbad5d_2
- gettext-tools=0.22.5=h8fbad5d_2
@@ -71,28 +123,74 @@ dependencies:
- givaro=4.2.0=h018886a_0
- glpk=5.0=h6d7a090_0
- gmp=6.3.0=h7bae524_2
+ - gmpy2=2.1.5=py310h3bc658a_1
+ - graphite2=1.3.13=hebf3989_1003
- gsl=2.7=h6e638da_0
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h1836168_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=hc8870d7_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=h762ac30_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=hd73f12c_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh57ce528_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
- isl=0.26=imath32_h347afa1_101
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=hce30654_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py310hbe9552e_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py310hbe9552e_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
+ - kiwisolver=1.4.5=py310h38f39d4_1
- krb5=1.21.2=h92f50d5_0
- lcalc=2.0.5=h4a402bc_2
+ - lcms2=2.16=ha0e7c42_0
- ld64=711=h634c8be_0
- ld64_osx-arm64=711=ha4bd21c_0
- lerc=4.0.0=h9a09cb3_0
- libasprintf=0.22.5=h8fbad5d_2
- libasprintf-devel=0.22.5=h8fbad5d_2
- libatomic_ops=7.6.14=h1a8c8d9_0
- - libblas=3.9.0=22_osxarm64_openblas
+ - libblas=3.9.0=20_osxarm64_openblas
- libboost=1.85.0=h17eb2be_2
- libboost-devel=1.85.0=hf450f58_2
- libboost-headers=1.85.0=hce30654_2
- libbraiding=1.2=hb7217d7_0
- libbrial=1.2.12=h56a29cd_3
- - libcblas=3.9.0=22_osxarm64_openblas
+ - libbrotlicommon=1.1.0=hb547adb_1
+ - libbrotlidec=1.1.0=hb547adb_1
+ - libbrotlienc=1.1.0=hb547adb_1
+ - libcblas=3.9.0=20_osxarm64_openblas
- libclang-cpp16=16.0.6=default_hb63da90_8
- libcurl=8.8.0=h7b6f9a7_0
- libcxx=17.0.6=h5f092b4_0
@@ -115,11 +213,11 @@ dependencies:
- libintl=0.22.5=h8fbad5d_2
- libintl-devel=0.22.5=h8fbad5d_2
- libjpeg-turbo=3.0.0=hb547adb_1
- - liblapack=3.9.0=22_osxarm64_openblas
- - liblapacke=3.9.0=22_osxarm64_openblas
+ - liblapack=3.9.0=20_osxarm64_openblas
+ - liblapacke=3.9.0=20_osxarm64_openblas
- libllvm16=16.0.6=haab561b_3
- libnghttp2=1.58.0=ha4dd798_1
- - libopenblas=0.3.27=openmp_h6c19121_0
+ - libopenblas=0.3.25=openmp_h6c19121_0
- libpng=1.6.43=h091b4b1_0
- libsodium=1.0.18=h27ca646_1
- libsqlite=3.46.0=hfb93653_0
@@ -129,6 +227,7 @@ dependencies:
- libuv=1.48.0=h93a5062_0
- libwebp=1.4.0=h54798ee_0
- libwebp-base=1.4.0=h93a5062_0
+ - libxcb=1.16=hf2054a2_0
- libxml2=2.12.7=ha661575_1
- libzlib=1.3.1=hfb2fe0b_1
- linbox=1.7.0=h3afee3a_0
@@ -139,63 +238,186 @@ dependencies:
- m4ri=20140914=hc97c1ff_1006
- m4rie=20150908=h22b9e9d_1002
- make=4.3=he57ea6c_1
+ - markupsafe=2.1.5=py310hd125d64_0
- mathjax=3.2.2=hce30654_0
+ - matplotlib=3.8.4=py310hb6292c7_2
+ - matplotlib-base=3.8.4=py310hedb7998_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2bbcd85_2
+ - memory-allocator=0.1.3=py310h2aa6e3c_0
- metis=5.1.0=h13dd4ca_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=h91ba8db_0
- mpfi=1.5.4=hbde5f5b_1001
- mpfr=4.2.1=h41d338b_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h93a5062_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=hb89a1cb_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h420ef59_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=hbb3f309_1
- - openblas=0.3.27=openmp_h55c453e_0
+ - numpy=1.26.4=py310hd45542a_0
+ - openblas=0.3.25=openmp_h55c453e_0
+ - openjdk=22.0.1=hbeb2e11_0
+ - openjpeg=2.5.2=h9f1df11_0
- openssl=3.3.1=hfb2fe0b_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=h27ca646_0
+ - pandoc=3.2.1=hce30654_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h5cb9fbc_0
- pari=2.15.5=h4f2304c_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=h27ca646_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
- pcre2=10.44=h297a79d_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h4614cfb_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py310h01af8b1_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=hebf3989_0
- pkg-config=0.29.2=hab62308_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h93a5062_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h8b147cf_1006
- - primecount=7.13=ha9cb33e_0
- - primesieve=12.1=hebf3989_0
+ - pplpy=0.8.9=py310hc3af9bb_1
+ - primecount=7.6=hb6e4faa_0
+ - primecountpy=0.1.0=py310h38f39d4_4
+ - primesieve=11.0=hb7217d7_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py310ha6dd24b_0
+ - pthread-stubs=0.4=h27ca646_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py310h21239e6_0
+ - pybind11-global=2.12.0=py310h21239e6_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyobjc-core=10.3.1=py310h4b7648a_0
+ - pyobjc-framework-cocoa=10.3.1=py310h4b7648a_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py310hd125d64_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.10.14=h2469fbe_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py310h692a8b6_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.10=4_cp310
+ - pythran=0.15.0=py310h1359cc7_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py310hbe9552e_4
+ - pyyaml=6.0.1=py310h2aa6e3c_1
+ - pyzmq=26.0.3=py310h16e08c9_0
- qd=2.3.22=hbec66e7_1004
- qhull=2020.2=hc021e02_2
+ - r-base=4.3.3=h8112bfe_3
+ - r-lattice=0.22_6=r43hd2d937b_0
- readline=8.2=h92ec313_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=hb547adb_0
+ - rpds-py=0.18.1=py310h947b723_0
+ - rpy2=3.5.11=py310r43h280b8fa_3
- rw=0.9=h93a5062_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py310h2b794db_0
+ - send2trash=1.8.3=pyh31c8845_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
- sigtool=0.1.3=h44b9a77_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=hb460b52_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h5838104_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hf6fcff2_1
- symmetrica=3.0.1=hb7217d7_0
- sympow=2.023.6=hb0babe8_3
+ - sympy=1.12.1=pypyh2585a3b_103
- tachyon=0.99b6=hb8a568e_1002
- tapi=1100.0.11=he4954df_0
- tar=1.34=h7cb298e_1
- tbb=2021.12.0=h420ef59_1
+ - terminado=0.18.1=pyh31c8845_0
- texinfo=7.0=pl5321h9ea1dce_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h5083fa2_1
+ - tktable=2.10=h1e387b8_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py310ha6dd24b_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py310hbe9552e_0
+ - unicodedata2=15.1.0=py310h2aa6e3c_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-libxau=1.0.11=hb547adb_0
+ - xorg-libxdmcp=1.1.3=h27ca646_0
- xz=5.2.6=h57fd34a_0
+ - yaml=0.2.5=h3422bc3_2
- zeromq=4.3.5=hcc0f68c_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=hfb2fe0b_1
diff --git a/environment-3.11-linux-aarch64.yml b/environment-3.11-linux-aarch64.yml
index 3970a5aea4a..e6a24cbe706 100644
--- a/environment-3.11-linux-aarch64.yml
+++ b/environment-3.11-linux-aarch64.yml
@@ -1,45 +1,92 @@
+name: sage
# Generated by conda-lock.
# platform: linux-aarch64
-# input_hash: fd6848a5bc52d32f3c524926e0147fd146e2d4a45005cf8c499acb7f7e864140
+# input_hash: 53cce21c9c8a4b11b84e96405de20cc945c84809a7997b8508761fc9ca727ee0
channels:
- conda-forge
dependencies:
- _openmp_mutex=4.5=2_kmp_llvm
+ - _r-mutex=1.0.1=anacondar_1
- _sysroot_linux-aarch64_curr_repodata_hack=4=h57d6b7b_14
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - alsa-lib=1.2.11=h31becfc_1
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py311hcd402e7_4
- arpack=3.9.1=nompi_hd363cd0_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321h2148fe1_1
- automake=1.16.5=pl5321h8af1aa0_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=hf897c2e_0
- bdw-gc=8.0.6=hd62202e_0
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
- binutils=2.40=hf1166c9_7
- binutils_impl_linux-aarch64=2.40=hf54a868_7
- binutils_linux-aarch64=2.40=h1f91aba_9
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_linuxaarch64_openblas
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_linuxaarch64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=ha990451_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=h31becfc_1
+ - brotli-bin=1.1.0=h31becfc_1
+ - brotli-python=1.1.0=py311h8715677_1
+ - bwidget=1.9.14=h8af1aa0_1
- bzip2=1.0.8=h31becfc_5
- c-ares=1.28.1=h31becfc_0
- c-compiler=1.7.0=h31becfc_1
- ca-certificates=2024.6.2=hcefe29a_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=h5c54ea9_2
- cddlib=1!0.94m=h719063d_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py311h7963103_0
- chardet=5.2.0=py311hfecb2dc_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- cliquer=1.22=h31becfc_1
- cmake=3.29.6=h7042e5d_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py311hec3470c_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compilers=1.7.0=h8af1aa0_1
+ - contourpy=1.2.1=py311h098ece5_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=h7daf2e0_0
+ - cvxopt=1.3.2=py311ha095bbf_2
- cxx-compiler=1.7.0=h2a328a1_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py311h5ab95f0_0
+ - cysignals=1.11.2=py311h644d908_3
+ - cython=3.0.10=py311h8715677_0
+ - debugpy=1.8.1=py311h8715677_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=hb12102e_1203
- ecl=23.9.9=h6475f26_0
- eclib=20231212=he26bab5_0
- ecm=7.0.5=ha2d0fc4_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h2f0025b_0
- fflas-ffpack=2.5.0=h503e619_0
+ - fftw=3.3.10=nompi_h020dacd_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -47,11 +94,17 @@ dependencies:
- fontconfig=2.14.2=ha9a116f_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py311hf4892ed_0
- fortran-compiler=1.7.0=h7048d53_1
- fplll=5.4.5=hb3a790e_0
+ - fpylll=0.6.1=py311h5d3d69a_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=hf0a5ef3_2
+ - fribidi=1.0.10=hb9de7d4_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=h597289e_3
- gap-defaults=4.12.2=h8af1aa0_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gcc=12.3.0=hdb0cc85_13
- gcc_impl_linux-aarch64=12.3.0=h3d98823_13
- gcc_linux-aarch64=12.3.0=ha52a6ea_9
@@ -66,29 +119,76 @@ dependencies:
- givaro=4.2.0=h364d21b_0
- glpk=5.0=h66325d0_0
- gmp=6.3.0=h0a1ffab_2
+ - gmpy2=2.1.5=py311h3c136a7_1
+ - graphite2=1.3.13=h2f0025b_1003
- gsl=2.7=h294027d_0
- gxx=12.3.0=hdb0cc85_13
- gxx_impl_linux-aarch64=12.3.0=hba91e99_13
- gxx_linux-aarch64=12.3.0=h9d1f256_9
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h9812418_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=h787c7f5_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=h197073e_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h15043fe_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh3099207_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=h8af1aa0_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py311hec3470c_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py311hec3470c_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- kernel-headers_linux-aarch64=4.18.0=h5b4a56d_14
- keyutils=1.6.1=h4e544f5_0
+ - kiwisolver=1.4.5=py311h0d5d7b0_1
- krb5=1.21.2=hc419048_0
- lcalc=2.0.5=he588f68_2
+ - lcms2=2.16=h922389a_0
- ld_impl_linux-aarch64=2.40=h9fc2d93_7
- lerc=4.0.0=h4de3ea5_0
- libatomic_ops=7.6.14=h4e544f5_0
- - libblas=3.9.0=22_linuxaarch64_openblas
+ - libblas=3.9.0=20_linuxaarch64_openblas
- libboost=1.85.0=hb41fec8_2
- libboost-devel=1.85.0=h37bb5a9_2
- libboost-headers=1.85.0=h8af1aa0_2
- libbraiding=1.2=hd600fc2_0
- libbrial=1.2.12=h9429f74_3
- - libcblas=3.9.0=22_linuxaarch64_openblas
+ - libbrotlicommon=1.1.0=h31becfc_1
+ - libbrotlidec=1.1.0=h31becfc_1
+ - libbrotlienc=1.1.0=h31becfc_1
+ - libcblas=3.9.0=20_linuxaarch64_openblas
+ - libcups=2.3.3=h405e4a8_4
- libcurl=8.8.0=h4e8248e_0
- libdeflate=1.20=h31becfc_0
- libedit=3.1.20191231=he28a2e2_2
@@ -101,16 +201,17 @@ dependencies:
- libgd=2.3.3=hcd22fd5_9
- libgfortran-ng=13.2.0=he9431aa_13
- libgfortran5=13.2.0=h2af0866_13
+ - libglib=2.80.2=haee52c6_1
- libgomp=13.2.0=he277a41_13
- libhomfly=1.02r6=h31becfc_1
- libhwloc=2.10.0=default_h3030c0e_1001
- libiconv=1.17=h31becfc_2
- libjpeg-turbo=3.0.0=h31becfc_1
- - liblapack=3.9.0=22_linuxaarch64_openblas
- - liblapacke=3.9.0=22_linuxaarch64_openblas
+ - liblapack=3.9.0=20_linuxaarch64_openblas
+ - liblapacke=3.9.0=20_linuxaarch64_openblas
- libnghttp2=1.58.0=hb0e430d_1
- libnsl=2.0.1=h31becfc_0
- - libopenblas=0.3.27=pthreads_h5a5ec62_0
+ - libopenblas=0.3.25=pthreads_h5a5ec62_0
- libpng=1.6.43=h194ca79_0
- libsanitizer=12.3.0=h57e2e72_13
- libsodium=1.0.18=hb9de7d4_1
@@ -124,6 +225,7 @@ dependencies:
- libuv=1.48.0=h31becfc_0
- libwebp=1.4.0=h8b4e01b_0
- libwebp-base=1.4.0=h31becfc_0
+ - libxcb=1.16=h7935292_0
- libxcrypt=4.4.36=h31becfc_1
- libxml2=2.12.7=h49dc7a2_1
- libzlib=1.3.1=h68df207_1
@@ -134,61 +236,199 @@ dependencies:
- m4ri=20140914=hedfd65a_1006
- m4rie=20150908=hf0a5ef3_1002
- make=4.3=h309ac5b_1
+ - markupsafe=2.1.5=py311hc8f2f60_0
- mathjax=3.2.2=h8af1aa0_0
+ - matplotlib=3.8.4=py311hfecb2dc_2
+ - matplotlib-base=3.8.4=py311h55059f0_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h6475f26_2
+ - memory-allocator=0.1.3=py311hcd402e7_0
- metis=5.1.0=h2f0025b_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=hf4c8f4c_0
- mpfi=1.5.4=h846f343_1001
- mpfr=4.2.1=ha2d0fc4_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h31becfc_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h0425590_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h70be974_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=h0d7519b_1
- - openblas=0.3.27=pthreads_h339cbfa_0
+ - numpy=1.26.4=py311h69ead2a_0
+ - openblas=0.3.25=pthreads_h339cbfa_0
+ - openjdk=22.0.1=h3d4cd67_0
+ - openjpeg=2.5.2=h0d9d63b_0
- openssl=3.3.1=h68df207_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=hb9de7d4_0
+ - pandoc=3.2.1=h8af1aa0_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h399c48b_0
- pari=2.15.5=h169c2a7_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=hf897c2e_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h070dd5b_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h31becfc_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py311h54289d1_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=h2f0025b_0
- pkg-config=0.29.2=hb9de7d4_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h31becfc_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h984aac9_1006
- - primecount=7.13=hfe4b40e_0
- - primesieve=12.1=h2f0025b_0
+ - pplpy=0.8.9=py311ha3770eb_1
+ - primecount=7.9=hd600fc2_0
+ - primecountpy=0.1.0=py311h098ece5_4
+ - primesieve=11.1=h2f0025b_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py311hf4892ed_0
+ - pthread-stubs=0.4=hb9de7d4_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py311h098ece5_0
+ - pybind11-global=2.12.0=py311h098ece5_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py311hc8f2f60_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.11.9=hddfb980_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py311h8715677_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.11=4_cp311
+ - pythran=0.15.0=py311hec5c23b_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py311hec3470c_4
+ - pyyaml=6.0.1=py311hcd402e7_1
+ - pyzmq=26.0.3=py311hb8d4657_0
- qd=2.3.22=h05efe27_1004
- qhull=2020.2=hd62202e_2
+ - r-base=4.3.3=h7f20121_3
+ - r-lattice=0.22_6=r43h25e906a_0
- readline=8.2=h8fc344f_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=h31becfc_0
+ - rpds-py=0.18.1=py311h949f54a_0
+ - rpy2=3.5.11=py311r43hf13da56_3
- rw=0.9=h31becfc_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.3=py311h69ead2a_1
+ - sed=4.8=ha0d5d3d_0
+ - send2trash=1.8.3=pyh0d859eb_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=hbe76a8a_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=hdc7ab3c_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=h3944111_1
- symmetrica=3.0.1=hd600fc2_0
- sympow=2.023.6=h157afb5_3
+ - sympy=1.12.1=pypyh2585a3b_103
- sysroot_linux-aarch64=2.17=h5b4a56d_14
- tachyon=0.99b6=ha0bfc61_1002
- tar=1.34=h048efde_0
- tbb=2021.12.0=h70be974_1
+ - terminado=0.18.1=pyh0d859eb_0
- texinfo=7.0=pl5321h17f021e_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h194ca79_0
+ - tktable=2.10=h52f7bd3_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py311h323e239_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py311hec3470c_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-fixesproto=5.0=h3557bc0_1002
+ - xorg-inputproto=2.3.2=h3557bc0_1002
+ - xorg-kbproto=1.0.7=h3557bc0_1002
+ - xorg-libice=1.1.1=h7935292_0
+ - xorg-libsm=1.2.4=h5a01bc2_0
+ - xorg-libx11=1.8.9=h08be655_1
+ - xorg-libxau=1.0.11=h31becfc_0
+ - xorg-libxdmcp=1.1.3=h3557bc0_0
+ - xorg-libxext=1.3.4=h2a766a3_2
+ - xorg-libxfixes=5.0.3=h3557bc0_1004
+ - xorg-libxi=1.7.10=h3557bc0_0
+ - xorg-libxrender=0.9.11=h7935292_0
+ - xorg-libxt=1.3.0=h7935292_1
+ - xorg-libxtst=1.2.3=hf897c2e_1002
+ - xorg-recordproto=1.14.2=hf897c2e_1002
+ - xorg-renderproto=0.11.1=h3557bc0_1002
+ - xorg-xextproto=7.3.0=h2a766a3_1003
+ - xorg-xproto=7.0.31=h3557bc0_1007
- xz=5.2.6=h9cdd2b7_0
+ - yaml=0.2.5=hf897c2e_2
- zeromq=4.3.5=h28faeed_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h68df207_1
diff --git a/environment-3.11-linux.yml b/environment-3.11-linux.yml
index 9f2a41a5a28..e169439f85d 100644
--- a/environment-3.11-linux.yml
+++ b/environment-3.11-linux.yml
@@ -1,45 +1,94 @@
+name: sage
# Generated by conda-lock.
# platform: linux-64
-# input_hash: 03f617f14f4f3c44d76a4218e41fa67dc9ba330ebfcd054a10dd4fabf1d57704
+# input_hash: 042b3b9a5ce5e44ed6334284078d156e424e41f02852c8c6a155cb9b4e620e60
channels:
- conda-forge
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - alsa-lib=1.2.12=h4ab18f5_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py311h459d7ec_4
- arpack=3.9.1=nompi_h77f6705_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attr=2.5.1=h166bdaf_1
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321h2b4cb7a_1
- automake=1.16.5=pl5321ha770c72_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h7f98852_0
- bdw-gc=8.0.6=h4bd325d_0
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
- binutils=2.40=h4852527_7
- binutils_impl_linux-64=2.40=ha1999f0_7
- binutils_linux-64=2.40=hb3c18ed_9
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_linux64_openblas
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_linux64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=h44aadfe_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=hd590300_1
+ - brotli-bin=1.1.0=hd590300_1
+ - brotli-python=1.1.0=py311hb755f60_1
+ - bwidget=1.9.14=ha770c72_1
- bzip2=1.0.8=hd590300_5
- c-ares=1.28.1=hd590300_0
- c-compiler=1.7.0=hd590300_1
- ca-certificates=2024.6.2=hbcca054_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=hbb29018_2
- cddlib=1!0.94m=h9202a9a_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py311hb3a22ac_0
- chardet=5.2.0=py311h38be061_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- cliquer=1.22=hd590300_1
- cmake=3.29.6=hcafd917_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py311h38be061_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compilers=1.7.0=ha770c72_1
+ - contourpy=1.2.1=py311h9547e67_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=he654da7_0
+ - cvxopt=1.3.2=py311hec6cc1f_2
- cxx-compiler=1.7.0=h00ab1b0_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py311hd2352ae_0
+ - cysignals=1.11.2=py311h82528dc_3
+ - cython=3.0.10=py311hb755f60_0
+ - dbus=1.13.6=h5008d03_3
+ - debugpy=1.8.1=py311hb755f60_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=hd9d9efa_1203
- ecl=23.9.9=hed6455c_0
- eclib=20231212=h96f522a_0
- ecm=7.0.5=h9458935_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h59595ed_0
- fflas-ffpack=2.5.0=h4f9960b_0
+ - fftw=3.3.10=nompi_hf1063bd_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -47,15 +96,23 @@ dependencies:
- fontconfig=2.14.2=h14ed4e7_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py311h331c9d8_0
- fortran-compiler=1.7.0=heb67821_1
- fplll=5.4.5=h384768b_0
+ - fpylll=0.6.1=py311hcfae7cf_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=h267a509_2
+ - fribidi=1.0.10=h36c2ea0_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=he9a28a4_3
- gap-defaults=4.12.2=ha770c72_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gcc=12.3.0=h915e2ae_13
- gcc_impl_linux-64=12.3.0=h58ffeeb_13
- gcc_linux-64=12.3.0=h9528a6a_9
- gengetopt=2.23=h9c3ff4c_0
+ - gettext=0.22.5=h59595ed_2
+ - gettext-tools=0.22.5=h59595ed_2
- gf2x=1.3.0=ha476b99_2
- gfan=0.6.2=hb86e20a_1003
- gfortran=12.3.0=h915e2ae_13
@@ -64,131 +121,362 @@ dependencies:
- giac=1.9.0.21=h673759e_1
- giflib=5.2.2=hd590300_0
- givaro=4.2.0=hb789bce_0
+ - glib=2.80.2=h8a4344b_1
+ - glib-tools=2.80.2=h73ef956_1
- glpk=5.0=h445213a_0
- gmp=6.3.0=hac33072_2
+ - gmpy2=2.1.5=py311hc4f1f91_1
+ - graphite2=1.3.13=h59595ed_1003
- gsl=2.7=he838d99_0
+ - gst-plugins-base=1.24.5=hbaaba92_0
+ - gstreamer=1.24.5=haf2f30d_0
- gxx=12.3.0=h915e2ae_13
- gxx_impl_linux-64=12.3.0=h2a574ab_13
- gxx_linux-64=12.3.0=ha28b414_9
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=hfac3d4d_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=h59595ed_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=hef0740d_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h623f65a_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh3099207_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=ha770c72_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py311h38be061_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py311h38be061_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- kernel-headers_linux-64=2.6.32=he073ed8_17
- keyutils=1.6.1=h166bdaf_0
+ - kiwisolver=1.4.5=py311h9547e67_1
- krb5=1.21.2=h659d440_0
+ - lame=3.100=h166bdaf_1003
- lcalc=2.0.5=h5aac1b6_2
+ - lcms2=2.16=hb7c19ff_0
- ld_impl_linux-64=2.40=hf3520f5_7
- lerc=4.0.0=h27087fc_0
+ - libasprintf=0.22.5=h661eb56_2
+ - libasprintf-devel=0.22.5=h661eb56_2
- libatomic_ops=7.6.14=h166bdaf_0
- - libblas=3.9.0=22_linux64_openblas
+ - libblas=3.9.0=20_linux64_openblas
- libboost=1.85.0=hba137d9_2
- libboost-devel=1.85.0=h00ab1b0_2
- libboost-headers=1.85.0=ha770c72_2
- libbraiding=1.2=hcb278e6_0
- libbrial=1.2.12=h76af697_3
- - libcblas=3.9.0=22_linux64_openblas
+ - libbrotlicommon=1.1.0=hd590300_1
+ - libbrotlidec=1.1.0=hd590300_1
+ - libbrotlienc=1.1.0=hd590300_1
+ - libcap=2.69=h0f662aa_0
+ - libcblas=3.9.0=20_linux64_openblas
+ - libclang-cpp15=15.0.7=default_h127d8a8_5
+ - libclang13=18.1.8=default_h6ae225f_0
+ - libcups=2.3.3=h4637d8d_4
- libcurl=8.8.0=hca28451_0
- libdeflate=1.20=hd590300_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=hd590300_2
+ - libevent=2.1.12=hf998b51_1
- libexpat=2.6.2=h59595ed_0
- libffi=3.4.2=h7f98852_5
+ - libflac=1.4.3=h59595ed_0
- libflint=3.0.1=h5f2e117_ntl_100
- libgcc-devel_linux-64=12.3.0=h6b66f73_113
- libgcc-ng=13.2.0=h77fa898_13
+ - libgcrypt=1.10.3=hd590300_0
- libgd=2.3.3=h119a65a_9
+ - libgettextpo=0.22.5=h59595ed_2
+ - libgettextpo-devel=0.22.5=h59595ed_2
- libgfortran-ng=13.2.0=h69a702a_13
- libgfortran5=13.2.0=h3d2ce59_13
+ - libglib=2.80.2=h8a4344b_1
- libgomp=13.2.0=h77fa898_13
+ - libgpg-error=1.49=h4f305b6_0
- libhomfly=1.02r6=hd590300_1
- libhwloc=2.10.0=default_h5622ce7_1001
- libiconv=1.17=hd590300_2
- libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=22_linux64_openblas
- - liblapacke=3.9.0=22_linux64_openblas
+ - liblapack=3.9.0=20_linux64_openblas
+ - liblapacke=3.9.0=20_linux64_openblas
+ - libllvm15=15.0.7=hb3ce162_4
+ - libllvm18=18.1.8=hc9dba70_0
- libnghttp2=1.58.0=h47da74e_1
- libnsl=2.0.1=hd590300_0
- - libopenblas=0.3.27=pthreads_h413a1c8_0
+ - libogg=1.3.5=h4ab18f5_0
+ - libopenblas=0.3.25=pthreads_h413a1c8_0
+ - libopus=1.3.1=h7f98852_1
- libpng=1.6.43=h2797004_0
+ - libpq=16.3=ha72fbe1_0
- libsanitizer=12.3.0=hb8811af_13
+ - libsndfile=1.2.2=hc60ed4a_1
- libsodium=1.0.18=h36c2ea0_1
- libsqlite=3.46.0=hde9e2c9_0
- libssh2=1.11.0=h0841786_0
- libstdcxx-devel_linux-64=12.3.0=h6b66f73_113
- libstdcxx-ng=13.2.0=hc0a3c3a_13
+ - libsystemd0=255=h3516f8a_1
- libtiff=4.6.0=h1dd3fc0_3
- libtool=2.4.7=h27087fc_0
- libuuid=2.38.1=h0b41bf4_0
- libuv=1.48.0=hd590300_0
+ - libvorbis=1.3.7=h9c3ff4c_0
- libwebp=1.4.0=h2c329e2_0
- libwebp-base=1.4.0=hd590300_0
+ - libxcb=1.16=hd590300_0
- libxcrypt=4.4.36=hd590300_1
+ - libxkbcommon=1.7.0=h2c5496b_1
- libxml2=2.12.7=hc051c1a_1
- libzlib=1.3.1=h4ab18f5_1
- linbox=1.7.0=ha329b40_0
- llvm-openmp=18.1.8=hf5423f3_0
- lrcalc=2.1=h59595ed_6
+ - lz4-c=1.9.4=hcb278e6_0
- m4=1.4.18=h516909a_1001
- m4ri=20140914=hae5d5c5_1006
- m4rie=20150908=h267a509_1002
- make=4.3=hd18ef5c_1
+ - markupsafe=2.1.5=py311h459d7ec_0
- mathjax=3.2.2=ha770c72_0
+ - matplotlib=3.8.4=py311h38be061_2
+ - matplotlib-base=3.8.4=py311ha4ca890_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=hed6455c_2
+ - memory-allocator=0.1.3=py311h459d7ec_0
- metis=5.1.0=h59595ed_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=hfe3b2da_0
- mpfi=1.5.4=h9f54685_1001
- mpfr=4.2.1=h9458935_1
+ - mpg123=1.32.6=h59595ed_0
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - mysql-common=8.3.0=hf1915f5_4
+ - mysql-libs=8.3.0=hca2cd23_4
- nauty=2.8.8=hd590300_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h59595ed_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h297d8ca_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
+ - nspr=4.35=h27087fc_0
+ - nss=3.101=h593d115_0
- ntl=11.4.3=hef3c4d3_1
- - openblas=0.3.27=pthreads_h7a3da1a_0
+ - numpy=1.26.4=py311h64a7726_0
+ - openblas=0.3.25=pthreads_h7a3da1a_0
+ - openjdk=21.0.2=haa376d0_0
+ - openjpeg=2.5.2=h488ebb8_0
- openssl=3.3.1=h4ab18f5_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=h36c2ea0_0
+ - pandoc=3.2.1=ha770c72_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h84a9a3c_0
- pari=2.15.5=h4d4ae9b_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=h7f98852_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h0f59acf_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_hd590300_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py311h82a398c_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.2=h59595ed_0
- pkg-config=0.29.2=h36c2ea0_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=hd590300_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h6ec01c2_1006
- - primecount=7.13=hb0181e5_0
- - primesieve=12.1=h59595ed_0
+ - pplpy=0.8.9=py311ha9f9f00_1
+ - primecount=7.9=hcb278e6_0
+ - primecountpy=0.1.0=py311h9547e67_4
+ - primesieve=11.1=h59595ed_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py311h331c9d8_0
+ - pthread-stubs=0.4=h36c2ea0_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pulseaudio-client=17.0=hb77b528_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py311h9547e67_0
+ - pybind11-global=2.12.0=py311h9547e67_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyqt=5.15.9=py311hf0fb5b6_5
+ - pyqt5-sip=12.12.2=py311hb755f60_5
+ - pyrsistent=0.20.0=py311h459d7ec_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.11.9=hb806964_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py311hb755f60_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.11=4_cp311
+ - pythran=0.15.0=py311h92ebd52_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py311h38be061_4
+ - pyyaml=6.0.1=py311h459d7ec_1
+ - pyzmq=26.0.3=py311h08a0b41_0
- qd=2.3.22=h2cc385e_1004
- qhull=2020.2=h4bd325d_2
+ - qt-main=5.15.8=ha2b5568_22
+ - r-base=4.3.3=he2d9a6e_3
+ - r-lattice=0.22_6=r43h57805ef_0
- readline=8.2=h8228510_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=hd590300_0
+ - rpds-py=0.18.1=py311h5ecf98a_0
+ - rpy2=3.5.11=py311r43h1f0f07a_3
- rw=0.9=hd590300_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py311h64a7726_0
+ - sed=4.8=he412f7d_0
+ - send2trash=1.8.3=pyh0d859eb_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=h33f5c3f_1
+ - sip=6.7.12=py311hb755f60_0
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h6d4b2fc_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hf4753ba_1
- symmetrica=3.0.1=hcb278e6_0
- sympow=2.023.6=hc6ab17c_3
+ - sympy=1.12.1=pypyh2585a3b_103
- sysroot_linux-64=2.12=he073ed8_17
- tachyon=0.99b6=hba7d16a_1002
- tar=1.34=hb2e2bae_1
- tbb=2021.12.0=h297d8ca_1
+ - terminado=0.18.1=pyh0d859eb_0
- texinfo=7.0=pl5321h0f457ee_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=noxft_h4845f30_101
+ - tktable=2.10=h8bc8fbc_6
+ - toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py311h331c9d8_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py311h38be061_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xcb-util=0.4.1=hb711507_2
+ - xcb-util-image=0.4.0=hb711507_2
+ - xcb-util-keysyms=0.4.1=hb711507_0
+ - xcb-util-renderutil=0.3.10=hb711507_0
+ - xcb-util-wm=0.4.2=hb711507_0
+ - xkeyboard-config=2.42=h4ab18f5_0
+ - xorg-fixesproto=5.0=h7f98852_1002
+ - xorg-inputproto=2.3.2=h7f98852_1002
+ - xorg-kbproto=1.0.7=h7f98852_1002
+ - xorg-libice=1.1.1=hd590300_0
+ - xorg-libsm=1.2.4=h7391055_0
+ - xorg-libx11=1.8.9=hb711507_1
+ - xorg-libxau=1.0.11=hd590300_0
+ - xorg-libxdmcp=1.1.3=h7f98852_0
+ - xorg-libxext=1.3.4=h0b41bf4_2
+ - xorg-libxfixes=5.0.3=h7f98852_1004
+ - xorg-libxi=1.7.10=h7f98852_0
+ - xorg-libxrender=0.9.11=hd590300_0
+ - xorg-libxt=1.3.0=hd590300_1
+ - xorg-libxtst=1.2.3=h7f98852_1002
+ - xorg-recordproto=1.14.2=h7f98852_1002
+ - xorg-renderproto=0.11.1=h7f98852_1002
+ - xorg-xextproto=7.3.0=h0b41bf4_1003
+ - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
+ - xorg-xproto=7.0.31=h7f98852_1007
- xz=5.2.6=h166bdaf_0
+ - yaml=0.2.5=h7f98852_2
- zeromq=4.3.5=h75354e8_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h4ab18f5_1
diff --git a/environment-3.11-macos-x86_64.yml b/environment-3.11-macos-x86_64.yml
index 1935cbab259..ddfef2df9d4 100644
--- a/environment-3.11-macos-x86_64.yml
+++ b/environment-3.11-macos-x86_64.yml
@@ -1,29 +1,54 @@
+name: sage
# Generated by conda-lock.
# platform: osx-64
-# input_hash: 856274ce5e586028c8c54254d45d9abbf246ca6f94ff02b5e68590cd0a2256f3
+# input_hash: 2d3e06919a9241aca6e25ca728e3013423030e7220d74f404ad621f0ad0ff5bd
channels:
- conda-forge
dependencies:
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py311h2725bcf_4
- arpack=3.9.1=nompi_hf81eadf_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321hed12c24_1
- automake=1.16.5=pl5321h694c41f_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h0d85af4_0
- bdw-gc=8.0.6=h940c156_0
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_osx64_openblas
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_osx64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=h07eb623_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=h0dc2134_1
+ - brotli-bin=1.1.0=h0dc2134_1
+ - brotli-python=1.1.0=py311hdf8f085_1
+ - bwidget=1.9.14=h694c41f_1
- bzip2=1.0.8=h10d778d_5
- c-ares=1.28.1=h10d778d_0
- c-compiler=1.7.0=h282daa2_1
- ca-certificates=2024.6.2=h8857fd0_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=h9f650ed_2
- cctools=986=h40f6528_0
- cctools_osx-64=986=ha1c5b94_0
- cddlib=1!0.94m=h0f52abe_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py311hc0b63fd_0
- chardet=5.2.0=py311h6eed73b_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- clang=16.0.6=default_ha3b9224_8
- clang-16=16.0.6=default_h4c8afb6_8
- clang_impl_osx-64=16.0.6=h8787910_16
@@ -34,18 +59,39 @@ dependencies:
- cliquer=1.22=h10d778d_1
- cmake=3.29.6=h749d262_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py311h6eed73b_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compiler-rt=16.0.6=ha38d28d_2
- compiler-rt_osx-64=16.0.6=ha38d28d_2
- compilers=1.7.0=h694c41f_1
+ - contourpy=1.2.1=py311h1d816ee_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=hea67d85_0
+ - cvxopt=1.3.2=py311he94735a_2
- cxx-compiler=1.7.0=h7728843_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py311h4fde0ae_0
+ - cysignals=1.11.2=py311h8a58447_3
+ - cython=3.0.10=py311hdd0406b_0
+ - debugpy=1.8.1=py311hdd0406b_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=h6e329d1_1203
- ecl=23.9.9=h2b27fa8_0
- eclib=20231212=h02435c3_0
- ecm=7.0.5=h4f6b447_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h73e2aa4_0
- fflas-ffpack=2.5.0=h5898d61_0
+ - fftw=3.3.10=nompi_h292e606_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -53,11 +99,17 @@ dependencies:
- fontconfig=2.14.2=h5bb23bf_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py311h72ae277_0
- fortran-compiler=1.7.0=h6c2ab21_1
- fplll=5.4.5=hb7981ad_0
+ - fpylll=0.6.1=py311h85fbf69_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=h60636b9_2
+ - fribidi=1.0.10=hbcb3906_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=hc16eb5f_3
- gap-defaults=4.12.2=h694c41f_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gengetopt=2.23=he49afe7_0
- gettext=0.22.5=h5ff76d1_2
- gettext-tools=0.22.5=h5ff76d1_2
@@ -71,28 +123,74 @@ dependencies:
- givaro=4.2.0=h1b3d6f7_0
- glpk=5.0=h3cb5acd_0
- gmp=6.3.0=hf036a51_2
+ - gmpy2=2.1.5=py311hab17429_1
+ - graphite2=1.3.13=h73e2aa4_1003
- gsl=2.7=h93259b0_0
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h053f038_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=hf5e326d_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=hde4452d_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h61918c1_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh57ce528_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
- isl=0.26=imath32_h2e86a7b_101
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.9=h694c41f_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py311h6eed73b_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py311h6eed73b_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
+ - kiwisolver=1.4.5=py311h5fe6e05_1
- krb5=1.21.2=hb884880_0
- lcalc=2.0.5=h547a6ed_2
+ - lcms2=2.16=ha2f27b4_0
- ld64=711=ha02d983_0
- ld64_osx-64=711=ha20a434_0
- lerc=4.0.0=hb486fe8_0
- libasprintf=0.22.5=h5ff76d1_2
- libasprintf-devel=0.22.5=h5ff76d1_2
- libatomic_ops=7.6.14=hb7f2c08_0
- - libblas=3.9.0=22_osx64_openblas
+ - libblas=3.9.0=20_osx64_openblas
- libboost=1.85.0=h739af76_2
- libboost-devel=1.85.0=h2b186f8_2
- libboost-headers=1.85.0=h694c41f_2
- libbraiding=1.2=hf0c8a7f_0
- libbrial=1.2.12=h81e9653_3
- - libcblas=3.9.0=22_osx64_openblas
+ - libbrotlicommon=1.1.0=h0dc2134_1
+ - libbrotlidec=1.1.0=h0dc2134_1
+ - libbrotlienc=1.1.0=h0dc2134_1
+ - libcblas=3.9.0=20_osx64_openblas
- libclang-cpp16=16.0.6=default_h4c8afb6_8
- libcurl=8.8.0=hf9fcc65_0
- libcxx=17.0.6=h88467a6_0
@@ -108,17 +206,18 @@ dependencies:
- libgfortran=5.0.0=13_2_0_h97931a8_3
- libgfortran-devel_osx-64=12.3.0=h0b6f5ec_3
- libgfortran5=13.2.0=h2873a65_3
+ - libglib=2.80.2=h736d271_1
- libhomfly=1.02r6=h10d778d_1
- libhwloc=2.10.0=default_h456cccd_1001
- libiconv=1.17=hd75f5a5_2
- libintl=0.22.5=h5ff76d1_2
- libintl-devel=0.22.5=h5ff76d1_2
- libjpeg-turbo=3.0.0=h0dc2134_1
- - liblapack=3.9.0=22_osx64_openblas
- - liblapacke=3.9.0=22_osx64_openblas
+ - liblapack=3.9.0=20_osx64_openblas
+ - liblapacke=3.9.0=20_osx64_openblas
- libllvm16=16.0.6=hbedff68_3
- libnghttp2=1.58.0=h64cf6d3_1
- - libopenblas=0.3.27=openmp_hfef2a42_0
+ - libopenblas=0.3.25=openmp_hfef2a42_0
- libpng=1.6.43=h92b6c6a_0
- libsodium=1.0.18=hbcb3906_1
- libsqlite=3.46.0=h1b8f9f3_0
@@ -128,6 +227,7 @@ dependencies:
- libuv=1.48.0=h67532ce_0
- libwebp=1.4.0=hc207709_0
- libwebp-base=1.4.0=h10d778d_0
+ - libxcb=1.16=h0dc2134_0
- libxml2=2.12.7=h3e169fe_1
- libzlib=1.3.1=h87427d6_1
- linbox=1.7.0=h7061c92_0
@@ -138,62 +238,185 @@ dependencies:
- m4ri=20140914=hd82a5f3_1006
- m4rie=20150908=hc616cfc_1002
- make=4.3=h22f3db7_1
+ - markupsafe=2.1.5=py311he705e18_0
- mathjax=3.2.2=h694c41f_0
+ - matplotlib=3.8.4=py311h6eed73b_2
+ - matplotlib-base=3.8.4=py311hff79762_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2b27fa8_2
+ - memory-allocator=0.1.3=py311h2725bcf_0
- metis=5.1.0=he965462_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=h81bd1dd_0
- mpfi=1.5.4=h52b28e3_1001
- mpfr=4.2.1=h4f6b447_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h10d778d_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h5846eda_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h3c5361c_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=h0ab3c2f_1
- - openblas=0.3.27=openmp_h6794695_0
+ - numpy=1.26.4=py311hc43a94b_0
+ - openblas=0.3.25=openmp_h6794695_0
+ - openjdk=22.0.1=h2d185b6_0
+ - openjpeg=2.5.2=h7310d3a_0
- openssl=3.3.1=h87427d6_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=hbcb3906_0
+ - pandoc=3.2.1=h694c41f_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h880b76c_0
- pari=2.15.5=h7ba67ff_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=hbcf498f_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h7634a1b_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h10d778d_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py311h2755ac0_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=h73e2aa4_0
- pkg-config=0.29.2=ha3d46e9_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h10d778d_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=ha60d53e_1006
- - primecount=7.13=hf455435_0
- - primesieve=12.1=h73e2aa4_0
+ - pplpy=0.8.9=py311h922ec50_1
+ - primecount=7.6=ha894c9a_0
+ - primecountpy=0.1.0=py311h5fe6e05_4
+ - primesieve=11.0=hf0c8a7f_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py311h72ae277_0
+ - pthread-stubs=0.4=hc929b4f_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py311h1d816ee_0
+ - pybind11-global=2.12.0=py311h1d816ee_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyobjc-core=10.3.1=py311h9d23797_0
+ - pyobjc-framework-cocoa=10.3.1=py311h9d23797_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py311he705e18_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.11.9=h657bba9_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py311hdd0406b_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.11=4_cp311
+ - pythran=0.15.0=py311ha853786_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py311h6eed73b_4
+ - pyyaml=6.0.1=py311h2725bcf_1
+ - pyzmq=26.0.3=py311h89e2aaa_0
- qd=2.3.22=h2beb688_1004
- qhull=2020.2=h940c156_2
+ - r-base=4.3.3=h4648a1f_3
+ - r-lattice=0.22_6=r43hb2c329c_0
- readline=8.2=h9e318b2_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=h0dc2134_0
+ - rpds-py=0.18.1=py311h295b1db_0
+ - rpy2=3.5.11=py311r43h4a70a88_3
- rw=0.9=h10d778d_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py311he0bea55_0
+ - send2trash=1.8.3=pyh31c8845_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
- sigtool=0.1.3=h88f4db0_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=h0d51a9f_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h28673e1_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hd2b2131_1
- symmetrica=3.0.1=hf0c8a7f_0
- sympow=2.023.6=h115ba6a_3
+ - sympy=1.12.1=pypyh2585a3b_103
- tachyon=0.99b6=h3a1d103_1002
- tapi=1100.0.11=h9ce4665_0
- tar=1.34=hcb2f6ea_1
- tbb=2021.12.0=h3c5361c_1
+ - terminado=0.18.1=pyh31c8845_0
- texinfo=7.0=pl5321hc47821c_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h1abcd95_1
+ - tktable=2.10=hba9d6f1_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py311h72ae277_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py311h6eed73b_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-libxau=1.0.11=h0dc2134_0
+ - xorg-libxdmcp=1.1.3=h35c211d_0
- xz=5.2.6=h775f41a_0
+ - yaml=0.2.5=h0d85af4_2
- zeromq=4.3.5=hde137ed_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h87427d6_1
diff --git a/environment-3.11-macos.yml b/environment-3.11-macos.yml
index 81ffaf75561..8ae6a449026 100644
--- a/environment-3.11-macos.yml
+++ b/environment-3.11-macos.yml
@@ -1,29 +1,54 @@
+name: sage
# Generated by conda-lock.
# platform: osx-arm64
-# input_hash: 89cd404032a652917b0945cf0be063b4b555387589d82447a4ee1f01f3f5ce58
+# input_hash: fd2f5edaba32b4c1f22d499071de74bde7eb804a27ac64e89ee82df0d733a829
channels:
- conda-forge
dependencies:
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py311heffc1b2_4
- arpack=3.9.1=nompi_h593882a_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321hcd07c0c_1
- automake=1.16.5=pl5321hce30654_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h3422bc3_0
- bdw-gc=8.0.6=hc021e02_0
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_osxarm64_openblas
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_osxarm64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=hca5e981_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=hb547adb_1
+ - brotli-bin=1.1.0=hb547adb_1
+ - brotli-python=1.1.0=py311ha891d26_1
+ - bwidget=1.9.14=hce30654_1
- bzip2=1.0.8=h93a5062_5
- c-ares=1.28.1=h93a5062_0
- c-compiler=1.7.0=h6aa9301_1
- ca-certificates=2024.6.2=hf0a4a13_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=hc6c324b_2
- cctools=986=h4faf515_0
- cctools_osx-arm64=986=h62378fb_0
- cddlib=1!0.94m=h6d7a090_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py311h4a08483_0
- chardet=5.2.0=py311h267d04e_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- clang=16.0.6=default_h095aff0_8
- clang-16=16.0.6=default_hb63da90_8
- clang_impl_osx-arm64=16.0.6=hc421ffc_16
@@ -34,18 +59,39 @@ dependencies:
- cliquer=1.22=h93a5062_1
- cmake=3.29.6=had79d8f_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py311h267d04e_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compiler-rt=16.0.6=h3808999_2
- compiler-rt_osx-arm64=16.0.6=h3808999_2
- compilers=1.7.0=hce30654_1
+ - contourpy=1.2.1=py311hcc98501_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=h653d890_0
+ - cvxopt=1.3.2=py311h77cf4c7_2
- cxx-compiler=1.7.0=h2ffa867_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py311h2c49a9d_0
+ - cysignals=1.11.2=py311he42fc87_3
+ - cython=3.0.10=py311h92babd0_0
+ - debugpy=1.8.1=py311h92babd0_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=h9397a75_1203
- ecl=23.9.9=h1d9728a_0
- eclib=20231212=h7f07de4_0
- ecm=7.0.5=h41d338b_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=hebf3989_0
- fflas-ffpack=2.5.0=h4bc3318_0
+ - fftw=3.3.10=nompi_h6637ab6_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -53,11 +99,17 @@ dependencies:
- fontconfig=2.14.2=h82840c6_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py311hd3f4193_0
- fortran-compiler=1.7.0=hafb19e3_1
- fplll=5.4.5=hb7d509d_0
+ - fpylll=0.6.1=py311h341b96b_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=hadb7bae_2
+ - fribidi=1.0.10=h27ca646_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=he8f4e70_3
- gap-defaults=4.12.2=hce30654_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gengetopt=2.23=hbdafb3b_0
- gettext=0.22.5=h8fbad5d_2
- gettext-tools=0.22.5=h8fbad5d_2
@@ -71,28 +123,74 @@ dependencies:
- givaro=4.2.0=h018886a_0
- glpk=5.0=h6d7a090_0
- gmp=6.3.0=h7bae524_2
+ - gmpy2=2.1.5=py311h1e33d93_1
+ - graphite2=1.3.13=hebf3989_1003
- gsl=2.7=h6e638da_0
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h1836168_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=hc8870d7_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=h762ac30_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=hd73f12c_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh57ce528_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.25.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
- isl=0.26=imath32_h347afa1_101
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=hce30654_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py311h267d04e_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py311h267d04e_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
+ - kiwisolver=1.4.5=py311he4fd1f5_1
- krb5=1.21.2=h92f50d5_0
- lcalc=2.0.5=h4a402bc_2
+ - lcms2=2.16=ha0e7c42_0
- ld64=711=h634c8be_0
- ld64_osx-arm64=711=ha4bd21c_0
- lerc=4.0.0=h9a09cb3_0
- libasprintf=0.22.5=h8fbad5d_2
- libasprintf-devel=0.22.5=h8fbad5d_2
- libatomic_ops=7.6.14=h1a8c8d9_0
- - libblas=3.9.0=22_osxarm64_openblas
+ - libblas=3.9.0=20_osxarm64_openblas
- libboost=1.85.0=h17eb2be_2
- libboost-devel=1.85.0=hf450f58_2
- libboost-headers=1.85.0=hce30654_2
- libbraiding=1.2=hb7217d7_0
- libbrial=1.2.12=h56a29cd_3
- - libcblas=3.9.0=22_osxarm64_openblas
+ - libbrotlicommon=1.1.0=hb547adb_1
+ - libbrotlidec=1.1.0=hb547adb_1
+ - libbrotlienc=1.1.0=hb547adb_1
+ - libcblas=3.9.0=20_osxarm64_openblas
- libclang-cpp16=16.0.6=default_hb63da90_8
- libcurl=8.8.0=h7b6f9a7_0
- libcxx=17.0.6=h5f092b4_0
@@ -115,11 +213,11 @@ dependencies:
- libintl=0.22.5=h8fbad5d_2
- libintl-devel=0.22.5=h8fbad5d_2
- libjpeg-turbo=3.0.0=hb547adb_1
- - liblapack=3.9.0=22_osxarm64_openblas
- - liblapacke=3.9.0=22_osxarm64_openblas
+ - liblapack=3.9.0=20_osxarm64_openblas
+ - liblapacke=3.9.0=20_osxarm64_openblas
- libllvm16=16.0.6=haab561b_3
- libnghttp2=1.58.0=ha4dd798_1
- - libopenblas=0.3.27=openmp_h6c19121_0
+ - libopenblas=0.3.25=openmp_h6c19121_0
- libpng=1.6.43=h091b4b1_0
- libsodium=1.0.18=h27ca646_1
- libsqlite=3.46.0=hfb93653_0
@@ -129,6 +227,7 @@ dependencies:
- libuv=1.48.0=h93a5062_0
- libwebp=1.4.0=h54798ee_0
- libwebp-base=1.4.0=h93a5062_0
+ - libxcb=1.16=hf2054a2_0
- libxml2=2.12.7=ha661575_1
- libzlib=1.3.1=hfb2fe0b_1
- linbox=1.7.0=h3afee3a_0
@@ -139,63 +238,185 @@ dependencies:
- m4ri=20140914=hc97c1ff_1006
- m4rie=20150908=h22b9e9d_1002
- make=4.3=he57ea6c_1
+ - markupsafe=2.1.5=py311h05b510d_0
- mathjax=3.2.2=hce30654_0
+ - matplotlib=3.8.4=py311ha1ab1f8_2
+ - matplotlib-base=3.8.4=py311h000fb6e_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2bbcd85_2
+ - memory-allocator=0.1.3=py311heffc1b2_0
- metis=5.1.0=h13dd4ca_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=h91ba8db_0
- mpfi=1.5.4=hbde5f5b_1001
- mpfr=4.2.1=h41d338b_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h93a5062_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=hb89a1cb_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h420ef59_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=hbb3f309_1
- - openblas=0.3.27=openmp_h55c453e_0
+ - numpy=1.26.4=py311h7125741_0
+ - openblas=0.3.25=openmp_h55c453e_0
+ - openjdk=22.0.1=hbeb2e11_0
+ - openjpeg=2.5.2=h9f1df11_0
- openssl=3.3.1=hfb2fe0b_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=h27ca646_0
+ - pandoc=3.2.1=hce30654_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h5cb9fbc_0
- pari=2.15.5=h4f2304c_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=h27ca646_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
- pcre2=10.44=h297a79d_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h4614cfb_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py311hd7951ec_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=hebf3989_0
- pkg-config=0.29.2=hab62308_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h93a5062_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h8b147cf_1006
- - primecount=7.13=ha9cb33e_0
- - primesieve=12.1=hebf3989_0
+ - pplpy=0.8.9=py311h3d77d83_1
+ - primecount=7.6=hb6e4faa_0
+ - primecountpy=0.1.0=py311he4fd1f5_4
+ - primesieve=11.0=hb7217d7_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py311hd3f4193_0
+ - pthread-stubs=0.4=h27ca646_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py311hcc98501_0
+ - pybind11-global=2.12.0=py311hcc98501_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyobjc-core=10.3.1=py311h5f135c3_0
+ - pyobjc-framework-cocoa=10.3.1=py311h5f135c3_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py311h05b510d_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.11.9=h932a869_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py311h92babd0_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.11=4_cp311
+ - pythran=0.15.0=py311hceb3b21_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py311h267d04e_4
+ - pyyaml=6.0.1=py311heffc1b2_1
+ - pyzmq=26.0.3=py311h9bed540_0
- qd=2.3.22=hbec66e7_1004
- qhull=2020.2=hc021e02_2
+ - r-base=4.3.3=h8112bfe_3
+ - r-lattice=0.22_6=r43hd2d937b_0
- readline=8.2=h92ec313_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=hb547adb_0
+ - rpds-py=0.18.1=py311h98c6a39_0
+ - rpy2=3.5.11=py311r43hb49d859_3
- rw=0.9=h93a5062_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py311h2b215a9_0
+ - send2trash=1.8.3=pyh31c8845_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
- sigtool=0.1.3=h44b9a77_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=hb460b52_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h5838104_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hf6fcff2_1
- symmetrica=3.0.1=hb7217d7_0
- sympow=2.023.6=hb0babe8_3
+ - sympy=1.12.1=pypyh2585a3b_103
- tachyon=0.99b6=hb8a568e_1002
- tapi=1100.0.11=he4954df_0
- tar=1.34=h7cb298e_1
- tbb=2021.12.0=h420ef59_1
+ - terminado=0.18.1=pyh31c8845_0
- texinfo=7.0=pl5321h9ea1dce_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h5083fa2_1
+ - tktable=2.10=h1e387b8_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py311hd3f4193_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py311h267d04e_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-libxau=1.0.11=hb547adb_0
+ - xorg-libxdmcp=1.1.3=h27ca646_0
- xz=5.2.6=h57fd34a_0
+ - yaml=0.2.5=h3422bc3_2
- zeromq=4.3.5=hcc0f68c_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=hfb2fe0b_1
diff --git a/environment-3.9-linux-aarch64.yml b/environment-3.9-linux-aarch64.yml
index e5ab529364a..97c6b302ce6 100644
--- a/environment-3.9-linux-aarch64.yml
+++ b/environment-3.9-linux-aarch64.yml
@@ -1,45 +1,92 @@
+name: sage
# Generated by conda-lock.
# platform: linux-aarch64
-# input_hash: aac498141a64c4d1a68eece8322bfc4de4ab998d89d4c4c60d240ccd07ab5dd7
+# input_hash: ff1dc47da14265a884b6d8aae2cde457456f547babfa735ad39ad330bb83aa6a
channels:
- conda-forge
dependencies:
- _openmp_mutex=4.5=2_kmp_llvm
+ - _r-mutex=1.0.1=anacondar_1
- _sysroot_linux-aarch64_curr_repodata_hack=4=h57d6b7b_14
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - alsa-lib=1.2.11=h31becfc_1
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py39h898b7ef_4
- arpack=3.9.1=nompi_hd363cd0_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321h2148fe1_1
- automake=1.16.5=pl5321h8af1aa0_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=hf897c2e_0
- bdw-gc=8.0.6=hd62202e_0
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
- binutils=2.40=hf1166c9_7
- binutils_impl_linux-aarch64=2.40=hf54a868_7
- binutils_linux-aarch64=2.40=h1f91aba_9
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_linuxaarch64_openblas
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_linuxaarch64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=ha990451_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=h31becfc_1
+ - brotli-bin=1.1.0=h31becfc_1
+ - brotli-python=1.1.0=py39h387a81e_1
+ - bwidget=1.9.14=h8af1aa0_1
- bzip2=1.0.8=h31becfc_5
- c-ares=1.28.1=h31becfc_0
- c-compiler=1.7.0=h31becfc_1
- ca-certificates=2024.6.2=hcefe29a_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=h5c54ea9_2
- cddlib=1!0.94m=h719063d_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py39hdf53b9e_0
- chardet=5.2.0=py39ha65689a_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- cliquer=1.22=h31becfc_1
- cmake=3.29.6=h7042e5d_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py39h4420490_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compilers=1.7.0=h8af1aa0_1
+ - contourpy=1.2.1=py39hd16970a_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=h7daf2e0_0
+ - cvxopt=1.3.2=py39h093dae0_2
- cxx-compiler=1.7.0=h2a328a1_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py39h532d932_0
+ - cysignals=1.11.2=py39hfa81392_3
+ - cython=3.0.10=py39h387a81e_0
+ - debugpy=1.8.1=py39h387a81e_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=hb12102e_1203
- ecl=23.9.9=h6475f26_0
- eclib=20231212=he26bab5_0
- ecm=7.0.5=ha2d0fc4_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h2f0025b_0
- fflas-ffpack=2.5.0=h503e619_0
+ - fftw=3.3.10=nompi_h020dacd_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -47,11 +94,17 @@ dependencies:
- fontconfig=2.14.2=ha9a116f_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py39he257ee7_0
- fortran-compiler=1.7.0=h7048d53_1
- fplll=5.4.5=hb3a790e_0
+ - fpylll=0.6.1=py39h97065f7_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=hf0a5ef3_2
+ - fribidi=1.0.10=hb9de7d4_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=h597289e_3
- gap-defaults=4.12.2=h8af1aa0_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gcc=12.3.0=hdb0cc85_13
- gcc_impl_linux-aarch64=12.3.0=h3d98823_13
- gcc_linux-aarch64=12.3.0=ha52a6ea_9
@@ -66,29 +119,76 @@ dependencies:
- givaro=4.2.0=h364d21b_0
- glpk=5.0=h66325d0_0
- gmp=6.3.0=h0a1ffab_2
+ - gmpy2=2.1.5=py39hcc1b389_1
+ - graphite2=1.3.13=h2f0025b_1003
- gsl=2.7=h294027d_0
- gxx=12.3.0=hdb0cc85_13
- gxx_impl_linux-aarch64=12.3.0=hba91e99_13
- gxx_linux-aarch64=12.3.0=h9d1f256_9
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h9812418_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=h787c7f5_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=h197073e_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h15043fe_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh3099207_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.18.1=pyh707e725_3
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=h8af1aa0_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py39h4420490_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py39h4420490_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- kernel-headers_linux-aarch64=4.18.0=h5b4a56d_14
- keyutils=1.6.1=h4e544f5_0
+ - kiwisolver=1.4.5=py39had2cf8c_1
- krb5=1.21.2=hc419048_0
- lcalc=2.0.5=he588f68_2
+ - lcms2=2.16=h922389a_0
- ld_impl_linux-aarch64=2.40=h9fc2d93_7
- lerc=4.0.0=h4de3ea5_0
- libatomic_ops=7.6.14=h4e544f5_0
- - libblas=3.9.0=22_linuxaarch64_openblas
+ - libblas=3.9.0=20_linuxaarch64_openblas
- libboost=1.85.0=hb41fec8_2
- libboost-devel=1.85.0=h37bb5a9_2
- libboost-headers=1.85.0=h8af1aa0_2
- libbraiding=1.2=hd600fc2_0
- libbrial=1.2.12=h9429f74_3
- - libcblas=3.9.0=22_linuxaarch64_openblas
+ - libbrotlicommon=1.1.0=h31becfc_1
+ - libbrotlidec=1.1.0=h31becfc_1
+ - libbrotlienc=1.1.0=h31becfc_1
+ - libcblas=3.9.0=20_linuxaarch64_openblas
+ - libcups=2.3.3=h405e4a8_4
- libcurl=8.8.0=h4e8248e_0
- libdeflate=1.20=h31becfc_0
- libedit=3.1.20191231=he28a2e2_2
@@ -101,16 +201,17 @@ dependencies:
- libgd=2.3.3=hcd22fd5_9
- libgfortran-ng=13.2.0=he9431aa_13
- libgfortran5=13.2.0=h2af0866_13
+ - libglib=2.80.2=haee52c6_1
- libgomp=13.2.0=he277a41_13
- libhomfly=1.02r6=h31becfc_1
- libhwloc=2.10.0=default_h3030c0e_1001
- libiconv=1.17=h31becfc_2
- libjpeg-turbo=3.0.0=h31becfc_1
- - liblapack=3.9.0=22_linuxaarch64_openblas
- - liblapacke=3.9.0=22_linuxaarch64_openblas
+ - liblapack=3.9.0=20_linuxaarch64_openblas
+ - liblapacke=3.9.0=20_linuxaarch64_openblas
- libnghttp2=1.58.0=hb0e430d_1
- libnsl=2.0.1=h31becfc_0
- - libopenblas=0.3.27=pthreads_h5a5ec62_0
+ - libopenblas=0.3.25=pthreads_h5a5ec62_0
- libpng=1.6.43=h194ca79_0
- libsanitizer=12.3.0=h57e2e72_13
- libsodium=1.0.18=hb9de7d4_1
@@ -124,6 +225,7 @@ dependencies:
- libuv=1.48.0=h31becfc_0
- libwebp=1.4.0=h8b4e01b_0
- libwebp-base=1.4.0=h31becfc_0
+ - libxcb=1.16=h7935292_0
- libxcrypt=4.4.36=h31becfc_1
- libxml2=2.12.7=h49dc7a2_1
- libzlib=1.3.1=h68df207_1
@@ -134,61 +236,200 @@ dependencies:
- m4ri=20140914=hedfd65a_1006
- m4rie=20150908=hf0a5ef3_1002
- make=4.3=h309ac5b_1
+ - markupsafe=2.1.5=py39h7cc1d5f_0
- mathjax=3.2.2=h8af1aa0_0
+ - matplotlib=3.8.4=py39ha65689a_2
+ - matplotlib-base=3.8.4=py39hf44f4b6_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h6475f26_2
+ - memory-allocator=0.1.3=py39h898b7ef_0
- metis=5.1.0=h2f0025b_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=hf4c8f4c_0
- mpfi=1.5.4=h846f343_1001
- mpfr=4.2.1=ha2d0fc4_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h31becfc_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h0425590_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h70be974_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=h0d7519b_1
- - openblas=0.3.27=pthreads_h339cbfa_0
+ - numpy=1.26.4=py39h91c28bb_0
+ - openblas=0.3.25=pthreads_h339cbfa_0
+ - openjdk=22.0.1=h3d4cd67_0
+ - openjpeg=2.5.2=h0d9d63b_0
- openssl=3.3.1=h68df207_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=hb9de7d4_0
+ - pandoc=3.2.1=h8af1aa0_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h399c48b_0
- pari=2.15.5=h169c2a7_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=hf897c2e_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h070dd5b_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h31becfc_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py39h4a8821f_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=h2f0025b_0
- pkg-config=0.29.2=hb9de7d4_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h31becfc_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h984aac9_1006
- - primecount=7.13=hfe4b40e_0
- - primesieve=12.1=h2f0025b_0
+ - pplpy=0.8.9=py39hf652505_1
+ - primecount=7.6=hd600fc2_0
+ - primecountpy=0.1.0=py39hd16970a_3
+ - primesieve=11.0=hd600fc2_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py39he257ee7_0
+ - pthread-stubs=0.4=hb9de7d4_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py39hd16970a_0
+ - pybind11-global=2.12.0=py39hd16970a_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py39h7cc1d5f_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.9.19=h4ac3b42_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py39h387a81e_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.9=4_cp39
+ - pythran=0.15.0=py39hc2250db_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py39h4420490_4
+ - pyyaml=6.0.1=py39h898b7ef_1
+ - pyzmq=26.0.3=py39h866fef3_0
- qd=2.3.22=h05efe27_1004
- qhull=2020.2=hd62202e_2
+ - r-base=4.3.3=h7f20121_3
+ - r-lattice=0.22_6=r43h25e906a_0
- readline=8.2=h8fc344f_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=h31becfc_0
+ - rpds-py=0.18.1=py39hb8f4057_0
+ - rpy2=3.5.11=py39r43h1ae4408_3
- rw=0.9=h31becfc_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.3=py39h91c28bb_1
+ - sed=4.8=ha0d5d3d_0
+ - send2trash=1.8.3=pyh0d859eb_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=hbe76a8a_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=hdc7ab3c_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=h3944111_1
- symmetrica=3.0.1=hd600fc2_0
- sympow=2.023.6=h157afb5_3
+ - sympy=1.12.1=pypyh2585a3b_103
- sysroot_linux-aarch64=2.17=h5b4a56d_14
- tachyon=0.99b6=ha0bfc61_1002
- tar=1.34=h048efde_0
- tbb=2021.12.0=h70be974_1
+ - terminado=0.18.1=pyh0d859eb_0
- texinfo=7.0=pl5321h17f021e_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h194ca79_0
+ - tktable=2.10=h52f7bd3_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py39ha3e8b56_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py39h4420490_0
+ - unicodedata2=15.1.0=py39h898b7ef_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-fixesproto=5.0=h3557bc0_1002
+ - xorg-inputproto=2.3.2=h3557bc0_1002
+ - xorg-kbproto=1.0.7=h3557bc0_1002
+ - xorg-libice=1.1.1=h7935292_0
+ - xorg-libsm=1.2.4=h5a01bc2_0
+ - xorg-libx11=1.8.9=h08be655_1
+ - xorg-libxau=1.0.11=h31becfc_0
+ - xorg-libxdmcp=1.1.3=h3557bc0_0
+ - xorg-libxext=1.3.4=h2a766a3_2
+ - xorg-libxfixes=5.0.3=h3557bc0_1004
+ - xorg-libxi=1.7.10=h3557bc0_0
+ - xorg-libxrender=0.9.11=h7935292_0
+ - xorg-libxt=1.3.0=h7935292_1
+ - xorg-libxtst=1.2.3=hf897c2e_1002
+ - xorg-recordproto=1.14.2=hf897c2e_1002
+ - xorg-renderproto=0.11.1=h3557bc0_1002
+ - xorg-xextproto=7.3.0=h2a766a3_1003
+ - xorg-xproto=7.0.31=h3557bc0_1007
- xz=5.2.6=h9cdd2b7_0
+ - yaml=0.2.5=hf897c2e_2
- zeromq=4.3.5=h28faeed_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h68df207_1
diff --git a/environment-3.9-linux.yml b/environment-3.9-linux.yml
index 558fa62d818..7099a1eb01d 100644
--- a/environment-3.9-linux.yml
+++ b/environment-3.9-linux.yml
@@ -1,45 +1,94 @@
+name: sage
# Generated by conda-lock.
# platform: linux-64
-# input_hash: ba320b73ca09397135b112a282763d517960252747ae2c5b4159d1334911ebe7
+# input_hash: e864996ba609c3a06f1c78376812e9f6180653730f5c2e60df67268b3e2fb7d6
channels:
- conda-forge
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - alsa-lib=1.2.12=h4ab18f5_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py39hd1e30aa_4
- arpack=3.9.1=nompi_h77f6705_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attr=2.5.1=h166bdaf_1
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321h2b4cb7a_1
- automake=1.16.5=pl5321ha770c72_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h7f98852_0
- bdw-gc=8.0.6=h4bd325d_0
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
- binutils=2.40=h4852527_7
- binutils_impl_linux-64=2.40=ha1999f0_7
- binutils_linux-64=2.40=hb3c18ed_9
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_linux64_openblas
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_linux64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=h44aadfe_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=hd590300_1
+ - brotli-bin=1.1.0=hd590300_1
+ - brotli-python=1.1.0=py39h3d6467e_1
+ - bwidget=1.9.14=ha770c72_1
- bzip2=1.0.8=hd590300_5
- c-ares=1.28.1=hd590300_0
- c-compiler=1.7.0=hd590300_1
- ca-certificates=2024.6.2=hbcca054_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=hbb29018_2
- cddlib=1!0.94m=h9202a9a_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py39h7a31438_0
- chardet=5.2.0=py39hf3d152e_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- cliquer=1.22=hd590300_1
- cmake=3.29.6=hcafd917_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py39hf3d152e_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compilers=1.7.0=ha770c72_1
+ - contourpy=1.2.1=py39h7633fee_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=he654da7_0
+ - cvxopt=1.3.2=py39h640215f_2
- cxx-compiler=1.7.0=h00ab1b0_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py39h1698a45_0
+ - cysignals=1.11.2=py39h1ce0973_3
+ - cython=3.0.10=py39h3d6467e_0
+ - dbus=1.13.6=h5008d03_3
+ - debugpy=1.8.1=py39h3d6467e_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=hd9d9efa_1203
- ecl=23.9.9=hed6455c_0
- eclib=20231212=h96f522a_0
- ecm=7.0.5=h9458935_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h59595ed_0
- fflas-ffpack=2.5.0=h4f9960b_0
+ - fftw=3.3.10=nompi_hf1063bd_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -47,15 +96,23 @@ dependencies:
- fontconfig=2.14.2=h14ed4e7_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py39hd3abc70_0
- fortran-compiler=1.7.0=heb67821_1
- fplll=5.4.5=h384768b_0
+ - fpylll=0.6.1=py39h2525e16_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=h267a509_2
+ - fribidi=1.0.10=h36c2ea0_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=he9a28a4_3
- gap-defaults=4.12.2=ha770c72_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gcc=12.3.0=h915e2ae_13
- gcc_impl_linux-64=12.3.0=h58ffeeb_13
- gcc_linux-64=12.3.0=h9528a6a_9
- gengetopt=2.23=h9c3ff4c_0
+ - gettext=0.22.5=h59595ed_2
+ - gettext-tools=0.22.5=h59595ed_2
- gf2x=1.3.0=ha476b99_2
- gfan=0.6.2=hb86e20a_1003
- gfortran=12.3.0=h915e2ae_13
@@ -64,131 +121,363 @@ dependencies:
- giac=1.9.0.21=h673759e_1
- giflib=5.2.2=hd590300_0
- givaro=4.2.0=hb789bce_0
+ - glib=2.80.2=h8a4344b_1
+ - glib-tools=2.80.2=h73ef956_1
- glpk=5.0=h445213a_0
- gmp=6.3.0=hac33072_2
+ - gmpy2=2.1.5=py39h048c657_1
+ - graphite2=1.3.13=h59595ed_1003
- gsl=2.7=he838d99_0
+ - gst-plugins-base=1.24.5=hbaaba92_0
+ - gstreamer=1.24.5=haf2f30d_0
- gxx=12.3.0=h915e2ae_13
- gxx_impl_linux-64=12.3.0=h2a574ab_13
- gxx_linux-64=12.3.0=ha28b414_9
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=hfac3d4d_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=h59595ed_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=hef0740d_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h623f65a_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh3099207_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.18.1=pyh707e725_3
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=ha770c72_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py39hf3d152e_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py39hf3d152e_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- kernel-headers_linux-64=2.6.32=he073ed8_17
- keyutils=1.6.1=h166bdaf_0
+ - kiwisolver=1.4.5=py39h7633fee_1
- krb5=1.21.2=h659d440_0
+ - lame=3.100=h166bdaf_1003
- lcalc=2.0.5=h5aac1b6_2
+ - lcms2=2.16=hb7c19ff_0
- ld_impl_linux-64=2.40=hf3520f5_7
- lerc=4.0.0=h27087fc_0
+ - libasprintf=0.22.5=h661eb56_2
+ - libasprintf-devel=0.22.5=h661eb56_2
- libatomic_ops=7.6.14=h166bdaf_0
- - libblas=3.9.0=22_linux64_openblas
+ - libblas=3.9.0=20_linux64_openblas
- libboost=1.85.0=hba137d9_2
- libboost-devel=1.85.0=h00ab1b0_2
- libboost-headers=1.85.0=ha770c72_2
- libbraiding=1.2=hcb278e6_0
- libbrial=1.2.12=h76af697_3
- - libcblas=3.9.0=22_linux64_openblas
+ - libbrotlicommon=1.1.0=hd590300_1
+ - libbrotlidec=1.1.0=hd590300_1
+ - libbrotlienc=1.1.0=hd590300_1
+ - libcap=2.69=h0f662aa_0
+ - libcblas=3.9.0=20_linux64_openblas
+ - libclang-cpp15=15.0.7=default_h127d8a8_5
+ - libclang13=18.1.8=default_h6ae225f_0
+ - libcups=2.3.3=h4637d8d_4
- libcurl=8.8.0=hca28451_0
- libdeflate=1.20=hd590300_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=hd590300_2
+ - libevent=2.1.12=hf998b51_1
- libexpat=2.6.2=h59595ed_0
- libffi=3.4.2=h7f98852_5
+ - libflac=1.4.3=h59595ed_0
- libflint=3.0.1=h5f2e117_ntl_100
- libgcc-devel_linux-64=12.3.0=h6b66f73_113
- libgcc-ng=13.2.0=h77fa898_13
+ - libgcrypt=1.10.3=hd590300_0
- libgd=2.3.3=h119a65a_9
+ - libgettextpo=0.22.5=h59595ed_2
+ - libgettextpo-devel=0.22.5=h59595ed_2
- libgfortran-ng=13.2.0=h69a702a_13
- libgfortran5=13.2.0=h3d2ce59_13
+ - libglib=2.80.2=h8a4344b_1
- libgomp=13.2.0=h77fa898_13
+ - libgpg-error=1.49=h4f305b6_0
- libhomfly=1.02r6=hd590300_1
- libhwloc=2.10.0=default_h5622ce7_1001
- libiconv=1.17=hd590300_2
- libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=22_linux64_openblas
- - liblapacke=3.9.0=22_linux64_openblas
+ - liblapack=3.9.0=20_linux64_openblas
+ - liblapacke=3.9.0=20_linux64_openblas
+ - libllvm15=15.0.7=hb3ce162_4
+ - libllvm18=18.1.8=hc9dba70_0
- libnghttp2=1.58.0=h47da74e_1
- libnsl=2.0.1=hd590300_0
- - libopenblas=0.3.27=pthreads_h413a1c8_0
+ - libogg=1.3.5=h4ab18f5_0
+ - libopenblas=0.3.25=pthreads_h413a1c8_0
+ - libopus=1.3.1=h7f98852_1
- libpng=1.6.43=h2797004_0
+ - libpq=16.3=ha72fbe1_0
- libsanitizer=12.3.0=hb8811af_13
+ - libsndfile=1.2.2=hc60ed4a_1
- libsodium=1.0.18=h36c2ea0_1
- libsqlite=3.46.0=hde9e2c9_0
- libssh2=1.11.0=h0841786_0
- libstdcxx-devel_linux-64=12.3.0=h6b66f73_113
- libstdcxx-ng=13.2.0=hc0a3c3a_13
+ - libsystemd0=255=h3516f8a_1
- libtiff=4.6.0=h1dd3fc0_3
- libtool=2.4.7=h27087fc_0
- libuuid=2.38.1=h0b41bf4_0
- libuv=1.48.0=hd590300_0
+ - libvorbis=1.3.7=h9c3ff4c_0
- libwebp=1.4.0=h2c329e2_0
- libwebp-base=1.4.0=hd590300_0
+ - libxcb=1.16=hd590300_0
- libxcrypt=4.4.36=hd590300_1
+ - libxkbcommon=1.7.0=h2c5496b_1
- libxml2=2.12.7=hc051c1a_1
- libzlib=1.3.1=h4ab18f5_1
- linbox=1.7.0=ha329b40_0
- llvm-openmp=18.1.8=hf5423f3_0
- lrcalc=2.1=h59595ed_6
+ - lz4-c=1.9.4=hcb278e6_0
- m4=1.4.18=h516909a_1001
- m4ri=20140914=hae5d5c5_1006
- m4rie=20150908=h267a509_1002
- make=4.3=hd18ef5c_1
+ - markupsafe=2.1.5=py39hd1e30aa_0
- mathjax=3.2.2=ha770c72_0
+ - matplotlib=3.8.4=py39hf3d152e_2
+ - matplotlib-base=3.8.4=py39h10d1fc8_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=hed6455c_2
+ - memory-allocator=0.1.3=py39hd1e30aa_0
- metis=5.1.0=h59595ed_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=hfe3b2da_0
- mpfi=1.5.4=h9f54685_1001
- mpfr=4.2.1=h9458935_1
+ - mpg123=1.32.6=h59595ed_0
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - mysql-common=8.3.0=hf1915f5_4
+ - mysql-libs=8.3.0=hca2cd23_4
- nauty=2.8.8=hd590300_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h59595ed_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h297d8ca_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
+ - nspr=4.35=h27087fc_0
+ - nss=3.101=h593d115_0
- ntl=11.4.3=hef3c4d3_1
- - openblas=0.3.27=pthreads_h7a3da1a_0
+ - numpy=1.26.4=py39h474f0d3_0
+ - openblas=0.3.25=pthreads_h7a3da1a_0
+ - openjdk=21.0.2=haa376d0_0
+ - openjpeg=2.5.2=h488ebb8_0
- openssl=3.3.1=h4ab18f5_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=h36c2ea0_0
+ - pandoc=3.2.1=ha770c72_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h84a9a3c_0
- pari=2.15.5=h4d4ae9b_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=h7f98852_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h0f59acf_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_hd590300_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py39h16a7006_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.2=h59595ed_0
- pkg-config=0.29.2=h36c2ea0_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=hd590300_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h6ec01c2_1006
- - primecount=7.13=hb0181e5_0
- - primesieve=12.1=h59595ed_0
+ - pplpy=0.8.9=py39h9e9cb73_1
+ - primecount=7.9=hcb278e6_0
+ - primecountpy=0.1.0=py39h7633fee_4
+ - primesieve=11.1=h59595ed_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py39hd3abc70_0
+ - pthread-stubs=0.4=h36c2ea0_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pulseaudio-client=17.0=hb77b528_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py39h7633fee_0
+ - pybind11-global=2.12.0=py39h7633fee_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyqt=5.15.9=py39h52134e7_5
+ - pyqt5-sip=12.12.2=py39h3d6467e_5
+ - pyrsistent=0.20.0=py39hd1e30aa_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.9.19=h0755675_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py39h3d6467e_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.9=4_cp39
+ - pythran=0.15.0=py39hda80f44_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py39hf3d152e_4
+ - pyyaml=6.0.1=py39hd1e30aa_1
+ - pyzmq=26.0.3=py39ha1047a2_0
- qd=2.3.22=h2cc385e_1004
- qhull=2020.2=h4bd325d_2
+ - qt-main=5.15.8=ha2b5568_22
+ - r-base=4.3.3=he2d9a6e_3
+ - r-lattice=0.22_6=r43h57805ef_0
- readline=8.2=h8228510_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=hd590300_0
+ - rpds-py=0.18.1=py39ha68c5e3_0
+ - rpy2=3.5.11=py39r43h44dd56e_3
- rw=0.9=hd590300_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py39h474f0d3_0
+ - sed=4.8=he412f7d_0
+ - send2trash=1.8.3=pyh0d859eb_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=h33f5c3f_1
+ - sip=6.7.12=py39h3d6467e_0
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h6d4b2fc_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hf4753ba_1
- symmetrica=3.0.1=hcb278e6_0
- sympow=2.023.6=hc6ab17c_3
+ - sympy=1.12.1=pypyh2585a3b_103
- sysroot_linux-64=2.12=he073ed8_17
- tachyon=0.99b6=hba7d16a_1002
- tar=1.34=hb2e2bae_1
- tbb=2021.12.0=h297d8ca_1
+ - terminado=0.18.1=pyh0d859eb_0
- texinfo=7.0=pl5321h0f457ee_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=noxft_h4845f30_101
+ - tktable=2.10=h8bc8fbc_6
+ - toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py39hd3abc70_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py39hf3d152e_0
+ - unicodedata2=15.1.0=py39hd1e30aa_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xcb-util=0.4.1=hb711507_2
+ - xcb-util-image=0.4.0=hb711507_2
+ - xcb-util-keysyms=0.4.1=hb711507_0
+ - xcb-util-renderutil=0.3.10=hb711507_0
+ - xcb-util-wm=0.4.2=hb711507_0
+ - xkeyboard-config=2.42=h4ab18f5_0
+ - xorg-fixesproto=5.0=h7f98852_1002
+ - xorg-inputproto=2.3.2=h7f98852_1002
+ - xorg-kbproto=1.0.7=h7f98852_1002
+ - xorg-libice=1.1.1=hd590300_0
+ - xorg-libsm=1.2.4=h7391055_0
+ - xorg-libx11=1.8.9=hb711507_1
+ - xorg-libxau=1.0.11=hd590300_0
+ - xorg-libxdmcp=1.1.3=h7f98852_0
+ - xorg-libxext=1.3.4=h0b41bf4_2
+ - xorg-libxfixes=5.0.3=h7f98852_1004
+ - xorg-libxi=1.7.10=h7f98852_0
+ - xorg-libxrender=0.9.11=hd590300_0
+ - xorg-libxt=1.3.0=hd590300_1
+ - xorg-libxtst=1.2.3=h7f98852_1002
+ - xorg-recordproto=1.14.2=h7f98852_1002
+ - xorg-renderproto=0.11.1=h7f98852_1002
+ - xorg-xextproto=7.3.0=h0b41bf4_1003
+ - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
+ - xorg-xproto=7.0.31=h7f98852_1007
- xz=5.2.6=h166bdaf_0
+ - yaml=0.2.5=h7f98852_2
- zeromq=4.3.5=h75354e8_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h4ab18f5_1
diff --git a/environment-3.9-macos-x86_64.yml b/environment-3.9-macos-x86_64.yml
index 6ac33e6d2ec..de8df57d291 100644
--- a/environment-3.9-macos-x86_64.yml
+++ b/environment-3.9-macos-x86_64.yml
@@ -1,29 +1,54 @@
+name: sage
# Generated by conda-lock.
# platform: osx-64
-# input_hash: 843f123465043acc18e0fe8c58c6afabd2e47ebad5f9ae6aea321eea0dd88571
+# input_hash: 7b973134e4e44170c953a71c99253450b079227c08993b2a49ae3ddd14d93fdb
channels:
- conda-forge
dependencies:
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py39hdc70f33_4
- arpack=3.9.1=nompi_hf81eadf_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321hed12c24_1
- automake=1.16.5=pl5321h694c41f_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h0d85af4_0
- bdw-gc=8.0.6=h940c156_0
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_osx64_openblas
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_osx64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=h07eb623_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=h0dc2134_1
+ - brotli-bin=1.1.0=h0dc2134_1
+ - brotli-python=1.1.0=py39h840bb9f_1
+ - bwidget=1.9.14=h694c41f_1
- bzip2=1.0.8=h10d778d_5
- c-ares=1.28.1=h10d778d_0
- c-compiler=1.7.0=h282daa2_1
- ca-certificates=2024.6.2=h8857fd0_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=h9f650ed_2
- cctools=986=h40f6528_0
- cctools_osx-64=986=ha1c5b94_0
- cddlib=1!0.94m=h0f52abe_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py39h18ef598_0
- chardet=5.2.0=py39h6e9494a_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- clang=16.0.6=default_ha3b9224_8
- clang-16=16.0.6=default_h4c8afb6_8
- clang_impl_osx-64=16.0.6=h8787910_16
@@ -34,18 +59,39 @@ dependencies:
- cliquer=1.22=h10d778d_1
- cmake=3.29.6=h749d262_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py39h6e9494a_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compiler-rt=16.0.6=ha38d28d_2
- compiler-rt_osx-64=16.0.6=ha38d28d_2
- compilers=1.7.0=h694c41f_1
+ - contourpy=1.2.1=py39h0ca7971_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=hea67d85_0
+ - cvxopt=1.3.2=py39hd66cc7a_2
- cxx-compiler=1.7.0=h7728843_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py39hc0d7317_0
+ - cysignals=1.11.2=py39hf6ae30e_3
+ - cython=3.0.10=py39hd253f6c_0
+ - debugpy=1.8.1=py39hd253f6c_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=h6e329d1_1203
- ecl=23.9.9=h2b27fa8_0
- eclib=20231212=h02435c3_0
- ecm=7.0.5=h4f6b447_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h73e2aa4_0
- fflas-ffpack=2.5.0=h5898d61_0
+ - fftw=3.3.10=nompi_h292e606_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -53,11 +99,17 @@ dependencies:
- fontconfig=2.14.2=h5bb23bf_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py39hded5825_0
- fortran-compiler=1.7.0=h6c2ab21_1
- fplll=5.4.5=hb7981ad_0
+ - fpylll=0.6.1=py39h3b3ffec_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=h60636b9_2
+ - fribidi=1.0.10=hbcb3906_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=hc16eb5f_3
- gap-defaults=4.12.2=h694c41f_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gengetopt=2.23=he49afe7_0
- gettext=0.22.5=h5ff76d1_2
- gettext-tools=0.22.5=h5ff76d1_2
@@ -71,28 +123,74 @@ dependencies:
- givaro=4.2.0=h1b3d6f7_0
- glpk=5.0=h3cb5acd_0
- gmp=6.3.0=hf036a51_2
+ - gmpy2=2.1.5=py39h87b48b1_1
+ - graphite2=1.3.13=h73e2aa4_1003
- gsl=2.7=h93259b0_0
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h053f038_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=hf5e326d_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=hde4452d_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=h61918c1_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh57ce528_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.18.1=pyh707e725_3
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
- isl=0.26=imath32_h2e86a7b_101
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.9=h694c41f_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py39h6e9494a_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.1=py39h6e9494a_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
+ - kiwisolver=1.4.5=py39h8ee36c8_1
- krb5=1.21.2=hb884880_0
- lcalc=2.0.5=h547a6ed_2
+ - lcms2=2.16=ha2f27b4_0
- ld64=711=ha02d983_0
- ld64_osx-64=711=ha20a434_0
- lerc=4.0.0=hb486fe8_0
- libasprintf=0.22.5=h5ff76d1_2
- libasprintf-devel=0.22.5=h5ff76d1_2
- libatomic_ops=7.6.14=hb7f2c08_0
- - libblas=3.9.0=22_osx64_openblas
+ - libblas=3.9.0=20_osx64_openblas
- libboost=1.85.0=h739af76_2
- libboost-devel=1.85.0=h2b186f8_2
- libboost-headers=1.85.0=h694c41f_2
- libbraiding=1.2=hf0c8a7f_0
- libbrial=1.2.12=h81e9653_3
- - libcblas=3.9.0=22_osx64_openblas
+ - libbrotlicommon=1.1.0=h0dc2134_1
+ - libbrotlidec=1.1.0=h0dc2134_1
+ - libbrotlienc=1.1.0=h0dc2134_1
+ - libcblas=3.9.0=20_osx64_openblas
- libclang-cpp16=16.0.6=default_h4c8afb6_8
- libcurl=8.8.0=hf9fcc65_0
- libcxx=17.0.6=h88467a6_0
@@ -108,17 +206,18 @@ dependencies:
- libgfortran=5.0.0=13_2_0_h97931a8_3
- libgfortran-devel_osx-64=12.3.0=h0b6f5ec_3
- libgfortran5=13.2.0=h2873a65_3
+ - libglib=2.80.2=h736d271_1
- libhomfly=1.02r6=h10d778d_1
- libhwloc=2.10.0=default_h456cccd_1001
- libiconv=1.17=hd75f5a5_2
- libintl=0.22.5=h5ff76d1_2
- libintl-devel=0.22.5=h5ff76d1_2
- libjpeg-turbo=3.0.0=h0dc2134_1
- - liblapack=3.9.0=22_osx64_openblas
- - liblapacke=3.9.0=22_osx64_openblas
+ - liblapack=3.9.0=20_osx64_openblas
+ - liblapacke=3.9.0=20_osx64_openblas
- libllvm16=16.0.6=hbedff68_3
- libnghttp2=1.58.0=h64cf6d3_1
- - libopenblas=0.3.27=openmp_hfef2a42_0
+ - libopenblas=0.3.25=openmp_hfef2a42_0
- libpng=1.6.43=h92b6c6a_0
- libsodium=1.0.18=hbcb3906_1
- libsqlite=3.46.0=h1b8f9f3_0
@@ -128,6 +227,7 @@ dependencies:
- libuv=1.48.0=h67532ce_0
- libwebp=1.4.0=hc207709_0
- libwebp-base=1.4.0=h10d778d_0
+ - libxcb=1.16=h0dc2134_0
- libxml2=2.12.7=h3e169fe_1
- libzlib=1.3.1=h87427d6_1
- linbox=1.7.0=h7061c92_0
@@ -138,62 +238,186 @@ dependencies:
- m4ri=20140914=hd82a5f3_1006
- m4rie=20150908=hc616cfc_1002
- make=4.3=h22f3db7_1
+ - markupsafe=2.1.5=py39ha09f3b3_0
- mathjax=3.2.2=h694c41f_0
+ - matplotlib=3.8.4=py39h6e9494a_2
+ - matplotlib-base=3.8.4=py39hfca4cae_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2b27fa8_2
+ - memory-allocator=0.1.3=py39hdc70f33_0
- metis=5.1.0=he965462_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=h81bd1dd_0
- mpfi=1.5.4=h52b28e3_1001
- mpfr=4.2.1=h4f6b447_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h10d778d_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=h5846eda_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h3c5361c_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=h0ab3c2f_1
- - openblas=0.3.27=openmp_h6794695_0
+ - numpy=1.26.4=py39h28c39a1_0
+ - openblas=0.3.25=openmp_h6794695_0
+ - openjdk=22.0.1=h2d185b6_0
+ - openjpeg=2.5.2=h7310d3a_0
- openssl=3.3.1=h87427d6_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=hbcb3906_0
+ - pandoc=3.2.1=h694c41f_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h880b76c_0
- pari=2.15.5=h7ba67ff_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=hbcf498f_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
+ - pcre2=10.44=h7634a1b_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h10d778d_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py39hc3a33ae_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=h73e2aa4_0
- pkg-config=0.29.2=ha3d46e9_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h10d778d_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=ha60d53e_1006
- - primecount=7.13=hf455435_0
- - primesieve=12.1=h73e2aa4_0
+ - pplpy=0.8.9=py39hc385998_1
+ - primecount=7.6=ha894c9a_0
+ - primecountpy=0.1.0=py39h8ee36c8_4
+ - primesieve=11.0=hf0c8a7f_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py39hded5825_0
+ - pthread-stubs=0.4=hc929b4f_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py39h0ca7971_0
+ - pybind11-global=2.12.0=py39h0ca7971_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyobjc-core=10.3.1=py39hf8f43b1_0
+ - pyobjc-framework-cocoa=10.3.1=py39hf8f43b1_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py39ha09f3b3_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.9.19=h7a9c478_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py39hd253f6c_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.9=4_cp39
+ - pythran=0.15.0=py39h5d0c61a_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py39h6e9494a_4
+ - pyyaml=6.0.1=py39hdc70f33_1
+ - pyzmq=26.0.3=py39h304b177_0
- qd=2.3.22=h2beb688_1004
- qhull=2020.2=h940c156_2
+ - r-base=4.3.3=h4648a1f_3
+ - r-lattice=0.22_6=r43hb2c329c_0
- readline=8.2=h9e318b2_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=h0dc2134_0
+ - rpds-py=0.18.1=py39hf59063a_0
+ - rpy2=3.5.11=py39r43hd01001f_3
- rw=0.9=h10d778d_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py39ha321857_0
+ - send2trash=1.8.3=pyh31c8845_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
- sigtool=0.1.3=h88f4db0_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=h0d51a9f_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h28673e1_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hd2b2131_1
- symmetrica=3.0.1=hf0c8a7f_0
- sympow=2.023.6=h115ba6a_3
+ - sympy=1.12.1=pypyh2585a3b_103
- tachyon=0.99b6=h3a1d103_1002
- tapi=1100.0.11=h9ce4665_0
- tar=1.34=hcb2f6ea_1
- tbb=2021.12.0=h3c5361c_1
+ - terminado=0.18.1=pyh31c8845_0
- texinfo=7.0=pl5321hc47821c_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h1abcd95_1
+ - tktable=2.10=hba9d6f1_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py39hded5825_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py39h6e9494a_0
+ - unicodedata2=15.1.0=py39hdc70f33_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-libxau=1.0.11=h0dc2134_0
+ - xorg-libxdmcp=1.1.3=h35c211d_0
- xz=5.2.6=h775f41a_0
+ - yaml=0.2.5=h0d85af4_2
- zeromq=4.3.5=hde137ed_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=h87427d6_1
diff --git a/environment-3.9-macos.yml b/environment-3.9-macos.yml
index 7dd6e7237ae..612b41003c9 100644
--- a/environment-3.9-macos.yml
+++ b/environment-3.9-macos.yml
@@ -1,29 +1,54 @@
+name: sage
# Generated by conda-lock.
# platform: osx-arm64
-# input_hash: 13a4be4ea56a2c01fc235e07908fdf2aea729d6842a807f314ad093449113ac6
+# input_hash: c72df9df3a2c7c120e9ff1ca936ae3527692a0de782793536087f2041f57d700
channels:
- conda-forge
dependencies:
+ - _r-mutex=1.0.1=anacondar_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - anyio=4.4.0=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
+ - appnope=0.1.4=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_0
+ - argon2-cffi-bindings=21.2.0=py39h0f82c59_4
- arpack=3.9.1=nompi_h593882a_101
+ - arrow=1.3.0=pyhd8ed1ab_0
+ - asttokens=2.4.1=pyhd8ed1ab_0
+ - async-lru=2.0.4=pyhd8ed1ab_0
+ - attrs=23.2.0=pyh71513ae_0
- autoconf=2.71=pl5321hcd07c0c_1
- automake=1.16.5=pl5321hce30654_0
+ - babel=2.14.0=pyhd8ed1ab_0
- bc=1.07.1=h3422bc3_0
- bdw-gc=8.0.6=hc021e02_0
- - blas=2.122=openblas
- - blas-devel=3.9.0=22_osxarm64_openblas
+ - beautifulsoup4=4.12.3=pyha770c72_0
+ - beniget=0.4.1=pyhd8ed1ab_0
+ - blas=2.120=openblas
+ - blas-devel=3.9.0=20_osxarm64_openblas
+ - bleach=6.1.0=pyhd8ed1ab_0
- boost-cpp=1.85.0=hca5e981_2
- brial=1.2.12=pyh694c41f_3
+ - brotli=1.1.0=hb547adb_1
+ - brotli-bin=1.1.0=hb547adb_1
+ - brotli-python=1.1.0=py39hb198ff7_1
+ - bwidget=1.9.14=hce30654_1
- bzip2=1.0.8=h93a5062_5
- c-ares=1.28.1=h93a5062_0
- c-compiler=1.7.0=h6aa9301_1
- ca-certificates=2024.6.2=hf0a4a13_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
- cachetools=5.3.3=pyhd8ed1ab_0
+ - cairo=1.18.0=hc6c324b_2
- cctools=986=h4faf515_0
- cctools_osx-arm64=986=h62378fb_0
- cddlib=1!0.94m=h6d7a090_0
+ - certifi=2024.6.2=pyhd8ed1ab_0
+ - cffi=1.16.0=py39he153c15_0
- chardet=5.2.0=py39h2804cbe_1
+ - charset-normalizer=3.3.2=pyhd8ed1ab_0
- clang=16.0.6=default_h095aff0_8
- clang-16=16.0.6=default_hb63da90_8
- clang_impl_osx-arm64=16.0.6=hc421ffc_16
@@ -34,18 +59,39 @@ dependencies:
- cliquer=1.22=h93a5062_1
- cmake=3.29.6=had79d8f_0
- colorama=0.4.6=pyhd8ed1ab_0
+ - colorlog=6.8.2=py39h2804cbe_0
+ - comm=0.2.2=pyhd8ed1ab_0
- compiler-rt=16.0.6=h3808999_2
- compiler-rt_osx-arm64=16.0.6=h3808999_2
- compilers=1.7.0=hce30654_1
+ - contourpy=1.2.1=py39h48c5dd5_0
+ - conway-polynomials=0.9=pyhd8ed1ab_0
+ - cppy=1.2.1=pyhd8ed1ab_0
- curl=8.8.0=h653d890_0
+ - cvxopt=1.3.2=py39hf9e8641_2
- cxx-compiler=1.7.0=h2ffa867_1
+ - cycler=0.12.1=pyhd8ed1ab_0
+ - cypari2=2.1.5=py39h070b2a8_0
+ - cysignals=1.11.2=py39h65fc70a_3
+ - cython=3.0.10=py39hf3050f2_0
+ - debugpy=1.8.1=py39hf3050f2_0
+ - decorator=5.1.1=pyhd8ed1ab_0
+ - defusedxml=0.7.1=pyhd8ed1ab_0
- distlib=0.3.8=pyhd8ed1ab_0
+ - docutils=0.21.2=pyhd8ed1ab_0
+ - dsdp=5.8=h9397a75_1203
- ecl=23.9.9=h1d9728a_0
- eclib=20231212=h7f07de4_0
- ecm=7.0.5=h41d338b_0
+ - editables=0.5=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_0
+ - exceptiongroup=1.2.0=pyhd8ed1ab_2
+ - executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=hebf3989_0
- fflas-ffpack=2.5.0=h4bc3318_0
+ - fftw=3.3.10=nompi_h6637ab6_110
- filelock=3.15.4=pyhd8ed1ab_0
+ - flit-core=3.9.0=pyhd8ed1ab_1
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
@@ -53,11 +99,17 @@ dependencies:
- fontconfig=2.14.2=h82840c6_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
+ - fonttools=4.53.0=py39hfea33bf_0
- fortran-compiler=1.7.0=hafb19e3_1
- fplll=5.4.5=hb7d509d_0
+ - fpylll=0.6.1=py39h2eadeda_0
+ - fqdn=1.5.1=pyhd8ed1ab_0
- freetype=2.12.1=hadb7bae_2
+ - fribidi=1.0.10=h27ca646_0
+ - furo=2024.5.6=pyhd8ed1ab_0
- gap-core=4.12.2=he8f4e70_3
- gap-defaults=4.12.2=hce30654_3
+ - gast=0.5.4=pyhd8ed1ab_0
- gengetopt=2.23=hbdafb3b_0
- gettext=0.22.5=h8fbad5d_2
- gettext-tools=0.22.5=h8fbad5d_2
@@ -71,28 +123,74 @@ dependencies:
- givaro=4.2.0=h018886a_0
- glpk=5.0=h6d7a090_0
- gmp=6.3.0=h7bae524_2
+ - gmpy2=2.1.5=py39h9bb7c0c_1
+ - graphite2=1.3.13=hebf3989_1003
- gsl=2.7=h6e638da_0
+ - h11=0.14.0=pyhd8ed1ab_0
+ - h2=4.1.0=pyhd8ed1ab_0
+ - harfbuzz=8.5.0=h1836168_0
+ - hatchling=1.25.0=pyhd8ed1ab_0
+ - hpack=4.0.0=pyh9f0ad1d_0
+ - httpcore=1.0.5=pyhd8ed1ab_0
+ - httpx=0.27.0=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_0
- icu=73.2=hc8870d7_0
+ - idna=3.7=pyhd8ed1ab_0
- igraph=0.10.12=h762ac30_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
- iml=1.0.5=hd73f12c_1004
- importlib-metadata=8.0.0=pyha770c72_0
+ - importlib-resources=6.4.0=pyhd8ed1ab_0
- importlib_metadata=8.0.0=hd8ed1ab_0
+ - importlib_resources=6.4.0=pyhd8ed1ab_0
+ - ipykernel=6.29.4=pyh57ce528_0
+ - ipympl=0.9.4=pyhd8ed1ab_0
+ - ipython=8.18.1=pyh707e725_3
+ - ipython_genutils=0.2.0=pyhd8ed1ab_1
+ - ipywidgets=8.1.3=pyhd8ed1ab_0
- isl=0.26=imath32_h347afa1_101
+ - isoduration=20.11.0=pyhd8ed1ab_0
+ - jedi=0.19.1=pyhd8ed1ab_0
+ - jinja2=3.1.4=pyhd8ed1ab_0
+ - jmol=14.32.10=hce30654_0
+ - json5=0.9.25=pyhd8ed1ab_0
+ - jsonpointer=3.0.0=py39h2804cbe_0
+ - jsonschema=4.22.0=pyhd8ed1ab_0
+ - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
+ - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
+ - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
+ - jupyter-lsp=2.2.5=pyhd8ed1ab_0
+ - jupyter-sphinx=0.5.3=pyha770c72_4
+ - jupyter_client=8.6.2=pyhd8ed1ab_0
+ - jupyter_core=5.7.2=py39h2804cbe_0
+ - jupyter_events=0.10.0=pyhd8ed1ab_0
+ - jupyter_server=2.14.1=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
+ - jupyter_sphinx=0.5.3=hd8ed1ab_4
+ - jupyterlab=4.2.2=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
+ - jupyterlab_server=2.27.2=pyhd8ed1ab_0
+ - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
+ - kiwisolver=1.4.5=py39hbd775c9_1
- krb5=1.21.2=h92f50d5_0
- lcalc=2.0.5=h4a402bc_2
+ - lcms2=2.16=ha0e7c42_0
- ld64=711=h634c8be_0
- ld64_osx-arm64=711=ha4bd21c_0
- lerc=4.0.0=h9a09cb3_0
- libasprintf=0.22.5=h8fbad5d_2
- libasprintf-devel=0.22.5=h8fbad5d_2
- libatomic_ops=7.6.14=h1a8c8d9_0
- - libblas=3.9.0=22_osxarm64_openblas
+ - libblas=3.9.0=20_osxarm64_openblas
- libboost=1.85.0=h17eb2be_2
- libboost-devel=1.85.0=hf450f58_2
- libboost-headers=1.85.0=hce30654_2
- libbraiding=1.2=hb7217d7_0
- libbrial=1.2.12=h56a29cd_3
- - libcblas=3.9.0=22_osxarm64_openblas
+ - libbrotlicommon=1.1.0=hb547adb_1
+ - libbrotlidec=1.1.0=hb547adb_1
+ - libbrotlienc=1.1.0=hb547adb_1
+ - libcblas=3.9.0=20_osxarm64_openblas
- libclang-cpp16=16.0.6=default_hb63da90_8
- libcurl=8.8.0=h7b6f9a7_0
- libcxx=17.0.6=h5f092b4_0
@@ -115,11 +213,11 @@ dependencies:
- libintl=0.22.5=h8fbad5d_2
- libintl-devel=0.22.5=h8fbad5d_2
- libjpeg-turbo=3.0.0=hb547adb_1
- - liblapack=3.9.0=22_osxarm64_openblas
- - liblapacke=3.9.0=22_osxarm64_openblas
+ - liblapack=3.9.0=20_osxarm64_openblas
+ - liblapacke=3.9.0=20_osxarm64_openblas
- libllvm16=16.0.6=haab561b_3
- libnghttp2=1.58.0=ha4dd798_1
- - libopenblas=0.3.27=openmp_h6c19121_0
+ - libopenblas=0.3.25=openmp_h6c19121_0
- libpng=1.6.43=h091b4b1_0
- libsodium=1.0.18=h27ca646_1
- libsqlite=3.46.0=hfb93653_0
@@ -129,6 +227,7 @@ dependencies:
- libuv=1.48.0=h93a5062_0
- libwebp=1.4.0=h54798ee_0
- libwebp-base=1.4.0=h93a5062_0
+ - libxcb=1.16=hf2054a2_0
- libxml2=2.12.7=ha661575_1
- libzlib=1.3.1=hfb2fe0b_1
- linbox=1.7.0=h3afee3a_0
@@ -139,63 +238,186 @@ dependencies:
- m4ri=20140914=hc97c1ff_1006
- m4rie=20150908=h22b9e9d_1002
- make=4.3=he57ea6c_1
+ - markupsafe=2.1.5=py39h17cfd9d_0
- mathjax=3.2.2=hce30654_0
+ - matplotlib=3.8.4=py39hdf13c20_2
+ - matplotlib-base=3.8.4=py39h15359f4_2
+ - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2bbcd85_2
+ - memory-allocator=0.1.3=py39h0f82c59_0
- metis=5.1.0=h13dd4ca_1007
+ - mistune=3.0.2=pyhd8ed1ab_0
- mpc=1.3.1=h91ba8db_0
- mpfi=1.5.4=hbde5f5b_1001
- mpfr=4.2.1=h41d338b_1
+ - mpmath=1.3.0=pyhd8ed1ab_0
+ - munkres=1.1.4=pyh9f0ad1d_0
- nauty=2.8.8=h93a5062_1
+ - nbclient=0.10.0=pyhd8ed1ab_0
+ - nbconvert=7.16.4=hd8ed1ab_1
+ - nbconvert-core=7.16.4=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.4=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.5=hb89a1cb_0
+ - nest-asyncio=1.6.0=pyhd8ed1ab_0
+ - networkx=3.2.1=pyhd8ed1ab_0
- ninja=1.12.1=h420ef59_0
+ - notebook=7.2.1=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_0
- ntl=11.4.3=hbb3f309_1
- - openblas=0.3.27=openmp_h55c453e_0
+ - numpy=1.26.4=py39h7aa2656_0
+ - openblas=0.3.25=openmp_h55c453e_0
+ - openjdk=22.0.1=hbeb2e11_0
+ - openjpeg=2.5.2=h9f1df11_0
- openssl=3.3.1=hfb2fe0b_0
+ - overrides=7.7.0=pyhd8ed1ab_0
- packaging=24.1=pyhd8ed1ab_0
- palp=2.20=h27ca646_0
+ - pandoc=3.2.1=hce30654_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - pango=1.54.0=h5cb9fbc_0
- pari=2.15.5=h4f2304c_2_pthread
- pari-elldata=0.0.20161017=0
- pari-galdata=0.0.20180411=0
- pari-galpol=0.0.20180625=0
- pari-seadata=0.0.20090618=0
- pari-seadata-small=0.0.20090618=0
+ - parso=0.8.4=pyhd8ed1ab_0
- patch=2.7.6=h27ca646_1002
+ - pathspec=0.12.1=pyhd8ed1ab_0
- pcre2=10.44=h297a79d_0
+ - pep517=0.13.0=pyhd8ed1ab_0
- perl=5.32.1=7_h4614cfb_perl5
+ - pexpect=4.9.0=pyhd8ed1ab_0
+ - pickleshare=0.7.5=py_1003
+ - pillow=10.3.0=py39h3baf582_1
+ - pip=24.0=pyhd8ed1ab_0
+ - pixman=0.43.4=hebf3989_0
- pkg-config=0.29.2=hab62308_1008
+ - pkgconfig=1.5.5=pyhd8ed1ab_4
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- planarity=3.0.2.0=h93a5062_0
- platformdirs=4.2.2=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
+ - ply=3.11=pyhd8ed1ab_2
- ppl=1.2=h8b147cf_1006
- - primecount=7.13=ha9cb33e_0
- - primesieve=12.1=hebf3989_0
+ - pplpy=0.8.9=py39ha497ee3_1
+ - primecount=7.6=hb6e4faa_0
+ - primecountpy=0.1.0=py39hbd775c9_4
+ - primesieve=11.0=hb7217d7_0
+ - prometheus_client=0.20.0=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.47=pyha770c72_0
+ - prompt_toolkit=3.0.47=hd8ed1ab_0
+ - psutil=6.0.0=py39hfea33bf_0
+ - pthread-stubs=0.4=h27ca646_1001
+ - ptyprocess=0.7.0=pyhd3deb0d_0
+ - pure_eval=0.2.2=pyhd8ed1ab_0
+ - py=1.11.0=pyh6c4a22f_0
+ - pybind11=2.12.0=py39h48c5dd5_0
+ - pybind11-global=2.12.0=py39h48c5dd5_0
+ - pycparser=2.22=pyhd8ed1ab_0
+ - pygments=2.18.0=pyhd8ed1ab_0
+ - pyobjc-core=10.3.1=py39h336d860_0
+ - pyobjc-framework-cocoa=10.3.1=py39h336d860_0
+ - pyparsing=3.1.2=pyhd8ed1ab_0
- pyproject-api=1.7.1=pyhd8ed1ab_0
+ - pyrsistent=0.20.0=py39h17cfd9d_0
+ - pysocks=1.7.1=pyha2e5f31_6
- python=3.9.19=hd7ebdb9_0_cpython
+ - python-build=1.2.1=pyhd8ed1ab_0
+ - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
+ - python-json-logger=2.0.7=pyhd8ed1ab_0
+ - python-lrcalc=2.1=py39hf3050f2_6
+ - python-tzdata=2024.1=pyhd8ed1ab_0
- python_abi=3.9=4_cp39
+ - pythran=0.15.0=py39h1261dcd_1
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pytz-deprecation-shim=0.1.0.post0=py39h2804cbe_4
+ - pyyaml=6.0.1=py39h0f82c59_1
+ - pyzmq=26.0.3=py39he7f0319_0
- qd=2.3.22=hbec66e7_1004
- qhull=2020.2=hc021e02_2
+ - r-base=4.3.3=h8112bfe_3
+ - r-lattice=0.22_6=r43hd2d937b_0
- readline=8.2=h92ec313_1
+ - referencing=0.35.1=pyhd8ed1ab_0
+ - requests=2.32.3=pyhd8ed1ab_0
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_0
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rhash=1.4.4=hb547adb_0
+ - rpds-py=0.18.1=py39h0019b8a_0
+ - rpy2=3.5.11=py39r43hf4a74a7_3
- rw=0.9=h93a5062_2
+ - sagemath-db-combinatorial-designs=20140630=1
+ - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
+ - sagemath-db-graphs=20210214=hd8ed1ab_0
+ - sagemath-db-polytopes=20170220=1
+ - sagetex=3.6.1=pyhd8ed1ab_0
+ - scipy=1.11.4=py39h36c428d_0
+ - send2trash=1.8.3=pyh31c8845_0
+ - setuptools=70.1.1=pyhd8ed1ab_0
+ - setuptools-scm=8.1.0=pyhd8ed1ab_0
+ - setuptools_scm=8.1.0=hd8ed1ab_0
- sigtool=0.1.3=h44b9a77_0
+ - simplegeneric=0.8.1=py_1
- singular=4.3.2.p8=hb460b52_1
+ - six=1.16.0=pyh6c4a22f_0
+ - sniffio=1.3.1=pyhd8ed1ab_0
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - soupsieve=2.5=pyhd8ed1ab_1
+ - sphinx=7.3.7=pyhd8ed1ab_0
+ - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
+ - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
+ - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
+ - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
+ - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
+ - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
+ - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
+ - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
+ - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- sqlite=3.46.0=h5838104_0
+ - stack_data=0.6.2=pyhd8ed1ab_0
- suitesparse=7.7.0=hf6fcff2_1
- symmetrica=3.0.1=hb7217d7_0
- sympow=2.023.6=hb0babe8_3
+ - sympy=1.12.1=pypyh2585a3b_103
- tachyon=0.99b6=hb8a568e_1002
- tapi=1100.0.11=he4954df_0
- tar=1.34=h7cb298e_1
- tbb=2021.12.0=h420ef59_1
+ - terminado=0.18.1=pyh31c8845_0
- texinfo=7.0=pl5321h9ea1dce_0
+ - three.js=122=hd8ed1ab_2
+ - threejs-sage=122=hd8ed1ab_2
+ - tinycss2=1.3.0=pyhd8ed1ab_0
- tk=8.6.13=h5083fa2_1
+ - tktable=2.10=h1e387b8_6
- tomli=2.0.1=pyhd8ed1ab_0
+ - tornado=6.4.1=py39hfea33bf_0
- tox=4.15.1=pyhd8ed1ab_0
+ - traitlets=5.14.3=pyhd8ed1ab_0
+ - trove-classifiers=2024.5.22=pyhd8ed1ab_0
+ - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions=4.12.2=hd8ed1ab_0
- typing_extensions=4.12.2=pyha770c72_0
+ - typing_utils=0.1.0=pyhd8ed1ab_0
- tzdata=2024a=h0c530f3_0
+ - tzlocal=5.2=py39h2804cbe_0
+ - unicodedata2=15.1.0=py39h0f82c59_0
+ - uri-template=1.3.0=pyhd8ed1ab_0
+ - urllib3=2.2.2=pyhd8ed1ab_0
- virtualenv=20.26.3=pyhd8ed1ab_0
+ - wcwidth=0.2.13=pyhd8ed1ab_0
+ - webcolors=24.6.0=pyhd8ed1ab_0
+ - webencodings=0.5.1=pyhd8ed1ab_2
+ - websocket-client=1.8.0=pyhd8ed1ab_0
+ - wheel=0.43.0=pyhd8ed1ab_1
+ - widgetsnbextension=4.0.11=pyhd8ed1ab_0
+ - xorg-libxau=1.0.11=hb547adb_0
+ - xorg-libxdmcp=1.1.3=h27ca646_0
- xz=5.2.6=h57fd34a_0
+ - yaml=0.2.5=h3422bc3_2
- zeromq=4.3.5=hcc0f68c_4
- zipp=3.19.2=pyhd8ed1ab_0
- zlib=1.3.1=hfb2fe0b_1
diff --git a/src/environment-dev-3.10-linux-aarch64.yml b/environment-dev-3.10-linux-aarch64.yml
similarity index 99%
rename from src/environment-dev-3.10-linux-aarch64.yml
rename to environment-dev-3.10-linux-aarch64.yml
index 5cc9a611a2a..111950c3a42 100644
--- a/src/environment-dev-3.10-linux-aarch64.yml
+++ b/environment-dev-3.10-linux-aarch64.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: linux-aarch64
# input_hash: d36865ba776427275c808ea91ee0d71d1f653f57bf83e81fbb92003fd5db575e
diff --git a/src/environment-dev-3.10-linux.yml b/environment-dev-3.10-linux.yml
similarity index 99%
rename from src/environment-dev-3.10-linux.yml
rename to environment-dev-3.10-linux.yml
index 90d8df80567..4e35ec5d152 100644
--- a/src/environment-dev-3.10-linux.yml
+++ b/environment-dev-3.10-linux.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: linux-64
# input_hash: f5ac6bc66f134451e0ec73f0a00b8da508df8c7c642f57231ab559a7c63f8ee0
@@ -303,6 +304,8 @@ dependencies:
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=hed6455c_2
- memory-allocator=0.1.3=py310h2372a71_0
+ - meson=1.5.2=pyhd8ed1ab_0
+ - meson-python=0.15.0=pyh0c530f3_0
- metis=5.1.0=h59595ed_1007
- mistune=3.0.2=pyhd8ed1ab_0
- more-itertools=10.3.0=pyhd8ed1ab_0
diff --git a/src/environment-dev-3.10-macos-x86_64.yml b/environment-dev-3.10-macos-x86_64.yml
similarity index 99%
rename from src/environment-dev-3.10-macos-x86_64.yml
rename to environment-dev-3.10-macos-x86_64.yml
index 6541d3ef7c8..c3f4696d491 100644
--- a/src/environment-dev-3.10-macos-x86_64.yml
+++ b/environment-dev-3.10-macos-x86_64.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: osx-64
# input_hash: 6f780a484a3cb4f5357ae4fc25f621ccf74f1cb625cb47cbd49f37ed9e7d3f46
diff --git a/src/environment-dev-3.10-macos.yml b/environment-dev-3.10-macos.yml
similarity index 99%
rename from src/environment-dev-3.10-macos.yml
rename to environment-dev-3.10-macos.yml
index 014df8bdc08..097508c3f6f 100644
--- a/src/environment-dev-3.10-macos.yml
+++ b/environment-dev-3.10-macos.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: osx-arm64
# input_hash: c03964bb63187e8dea2adbfa9332f08fbdb1b89d359248a94c39f3af0db26d90
@@ -272,6 +273,8 @@ dependencies:
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2bbcd85_2
- memory-allocator=0.1.3=py310h2aa6e3c_0
+ - meson=1.5.2=pyhd8ed1ab_0
+ - meson-python=0.15.0=pyh0c530f3_0
- metis=5.1.0=h13dd4ca_1007
- mistune=3.0.2=pyhd8ed1ab_0
- more-itertools=10.3.0=pyhd8ed1ab_0
diff --git a/src/environment-dev-3.11-linux-aarch64.yml b/environment-dev-3.11-linux-aarch64.yml
similarity index 99%
rename from src/environment-dev-3.11-linux-aarch64.yml
rename to environment-dev-3.11-linux-aarch64.yml
index 9772d14d173..d02836fc39b 100644
--- a/src/environment-dev-3.11-linux-aarch64.yml
+++ b/environment-dev-3.11-linux-aarch64.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: linux-aarch64
# input_hash: 66aaaed1c1f4084624510fb4e264813007a23f0c2a3526f277199a0ebc059af4
diff --git a/src/environment-dev-3.11-linux.yml b/environment-dev-3.11-linux.yml
similarity index 99%
rename from src/environment-dev-3.11-linux.yml
rename to environment-dev-3.11-linux.yml
index f59609c4b25..786c2190d71 100644
--- a/src/environment-dev-3.11-linux.yml
+++ b/environment-dev-3.11-linux.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: linux-64
# input_hash: f63cac647504bbd824a745f50b79ed9af0d2c491bf359361fdaa0624827c7f36
@@ -303,6 +304,8 @@ dependencies:
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=hed6455c_2
- memory-allocator=0.1.3=py311h459d7ec_0
+ - meson=1.5.2=pyhd8ed1ab_0
+ - meson-python=0.15.0=pyh0c530f3_0
- metis=5.1.0=h59595ed_1007
- mistune=3.0.2=pyhd8ed1ab_0
- more-itertools=10.3.0=pyhd8ed1ab_0
diff --git a/src/environment-dev-3.11-macos-x86_64.yml b/environment-dev-3.11-macos-x86_64.yml
similarity index 99%
rename from src/environment-dev-3.11-macos-x86_64.yml
rename to environment-dev-3.11-macos-x86_64.yml
index 3368f995b8c..d49d10ccdd9 100644
--- a/src/environment-dev-3.11-macos-x86_64.yml
+++ b/environment-dev-3.11-macos-x86_64.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: osx-64
# input_hash: 76cbd25511c5f90d515f03ecbad120b0c890d6418428d7ee7d5cc0e82468e02a
diff --git a/src/environment-dev-3.11-macos.yml b/environment-dev-3.11-macos.yml
similarity index 99%
rename from src/environment-dev-3.11-macos.yml
rename to environment-dev-3.11-macos.yml
index ba84799917e..497abbec59f 100644
--- a/src/environment-dev-3.11-macos.yml
+++ b/environment-dev-3.11-macos.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: osx-arm64
# input_hash: 2a680a2d8d0e54717c485a773c614ef8a6102b81d2c396cd75bfe731f43e3b5f
@@ -272,6 +273,8 @@ dependencies:
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2bbcd85_2
- memory-allocator=0.1.3=py311heffc1b2_0
+ - meson=1.5.2=pyhd8ed1ab_0
+ - meson-python=0.15.0=pyh0c530f3_0
- metis=5.1.0=h13dd4ca_1007
- mistune=3.0.2=pyhd8ed1ab_0
- more-itertools=10.3.0=pyhd8ed1ab_0
diff --git a/src/environment-dev-3.9-linux-aarch64.yml b/environment-dev-3.9-linux-aarch64.yml
similarity index 99%
rename from src/environment-dev-3.9-linux-aarch64.yml
rename to environment-dev-3.9-linux-aarch64.yml
index 39923130bc5..eaeb2644dcd 100644
--- a/src/environment-dev-3.9-linux-aarch64.yml
+++ b/environment-dev-3.9-linux-aarch64.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: linux-aarch64
# input_hash: ce794cc8451c14571ca9bfc8ecdd74ad09cf8a281a340df449678e0fed967078
diff --git a/src/environment-dev-3.9-linux.yml b/environment-dev-3.9-linux.yml
similarity index 99%
rename from src/environment-dev-3.9-linux.yml
rename to environment-dev-3.9-linux.yml
index 451a093512e..ab8991dfcd6 100644
--- a/src/environment-dev-3.9-linux.yml
+++ b/environment-dev-3.9-linux.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: linux-64
# input_hash: 9434f8e084f9cad908d6fa3d6e7b5e95bb0546055588979176fb8fe260ae6d0f
@@ -303,6 +304,8 @@ dependencies:
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=hed6455c_2
- memory-allocator=0.1.3=py39hd1e30aa_0
+ - meson=1.5.2=pyhd8ed1ab_0
+ - meson-python=0.15.0=pyh0c530f3_0
- metis=5.1.0=h59595ed_1007
- mistune=3.0.2=pyhd8ed1ab_0
- more-itertools=10.3.0=pyhd8ed1ab_0
diff --git a/src/environment-dev-3.9-macos-x86_64.yml b/environment-dev-3.9-macos-x86_64.yml
similarity index 99%
rename from src/environment-dev-3.9-macos-x86_64.yml
rename to environment-dev-3.9-macos-x86_64.yml
index 92632f26f85..a09f7e4f3b1 100644
--- a/src/environment-dev-3.9-macos-x86_64.yml
+++ b/environment-dev-3.9-macos-x86_64.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: osx-64
# input_hash: 87145dff13f485d3cacd44987c6622d73ff7e5ebfdff843fe604d9835dead5f9
diff --git a/src/environment-dev-3.9-macos.yml b/environment-dev-3.9-macos.yml
similarity index 99%
rename from src/environment-dev-3.9-macos.yml
rename to environment-dev-3.9-macos.yml
index bcc3c684e61..dd2bccb3380 100644
--- a/src/environment-dev-3.9-macos.yml
+++ b/environment-dev-3.9-macos.yml
@@ -1,3 +1,4 @@
+name: sage-dev
# Generated by conda-lock.
# platform: osx-arm64
# input_hash: 3e552281740b1a37b111ca4468f2f30142d4a3d4c041f3d342f28b36394c84de
@@ -272,6 +273,8 @@ dependencies:
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- maxima=5.47.0=h2bbcd85_2
- memory-allocator=0.1.3=py39h0f82c59_0
+ - meson=1.5.2=pyhd8ed1ab_0
+ - meson-python=0.15.0=pyh0c530f3_0
- metis=5.1.0=h13dd4ca_1007
- mistune=3.0.2=pyhd8ed1ab_0
- more-itertools=10.3.0=pyhd8ed1ab_0
diff --git a/meson.build b/meson.build
index 8bf73d23d55..ac5594852ff 100644
--- a/meson.build
+++ b/meson.build
@@ -35,7 +35,7 @@ endif
# Workaround for missing init files (Cython doesn't handle namespace packages well)
create_files_command = [
- 'python3',
+ py,
'-c',
'''
import os
diff --git a/pkgs/sage-conf/VERSION.txt b/pkgs/sage-conf/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sage-conf/VERSION.txt
+++ b/pkgs/sage-conf/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sage-conf_conda/VERSION.txt b/pkgs/sage-conf_conda/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sage-conf_conda/VERSION.txt
+++ b/pkgs/sage-conf_conda/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sage-conf_pypi/VERSION.txt b/pkgs/sage-conf_pypi/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sage-conf_pypi/VERSION.txt
+++ b/pkgs/sage-conf_pypi/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sage-docbuild/VERSION.txt b/pkgs/sage-docbuild/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sage-docbuild/VERSION.txt
+++ b/pkgs/sage-docbuild/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sage-setup/VERSION.txt b/pkgs/sage-setup/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sage-setup/VERSION.txt
+++ b/pkgs/sage-setup/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sage-sws2rst/VERSION.txt b/pkgs/sage-sws2rst/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sage-sws2rst/VERSION.txt
+++ b/pkgs/sage-sws2rst/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-bliss/VERSION.txt b/pkgs/sagemath-bliss/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-bliss/VERSION.txt
+++ b/pkgs/sagemath-bliss/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-categories/VERSION.txt b/pkgs/sagemath-categories/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-categories/VERSION.txt
+++ b/pkgs/sagemath-categories/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-coxeter3/VERSION.txt b/pkgs/sagemath-coxeter3/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-coxeter3/VERSION.txt
+++ b/pkgs/sagemath-coxeter3/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-environment/VERSION.txt b/pkgs/sagemath-environment/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-environment/VERSION.txt
+++ b/pkgs/sagemath-environment/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-mcqd/VERSION.txt b/pkgs/sagemath-mcqd/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-mcqd/VERSION.txt
+++ b/pkgs/sagemath-mcqd/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-meataxe/VERSION.txt b/pkgs/sagemath-meataxe/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-meataxe/VERSION.txt
+++ b/pkgs/sagemath-meataxe/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-objects/VERSION.txt b/pkgs/sagemath-objects/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-objects/VERSION.txt
+++ b/pkgs/sagemath-objects/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-repl/VERSION.txt b/pkgs/sagemath-repl/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-repl/VERSION.txt
+++ b/pkgs/sagemath-repl/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-sirocco/VERSION.txt b/pkgs/sagemath-sirocco/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-sirocco/VERSION.txt
+++ b/pkgs/sagemath-sirocco/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/pkgs/sagemath-tdlib/VERSION.txt b/pkgs/sagemath-tdlib/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/pkgs/sagemath-tdlib/VERSION.txt
+++ b/pkgs/sagemath-tdlib/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/src/VERSION.txt b/src/VERSION.txt
index 8d89e93406d..9228dedd0ce 100644
--- a/src/VERSION.txt
+++ b/src/VERSION.txt
@@ -1 +1 @@
-10.5.beta8
+10.5.rc0
diff --git a/src/bin/sage-env b/src/bin/sage-env
index b9221fe3567..5a53ab1d2ce 100644
--- a/src/bin/sage-env
+++ b/src/bin/sage-env
@@ -383,12 +383,15 @@ if [ -n "$SAGE_LOCAL" ]; then
# "Toolchains/XcodeDefault.xctoolchain/usr/bin/". (See #37237.)
if [ -z "$LD" ]; then
# Running xcode-select on a system with no toolchain writes an
- # error message to stderr, so redirect stderr to /dev/null.
+ # error message to stderr, so redirect stderr to /dev/null.
XCODE_PATH=$(/usr/bin/xcode-select -p 2> /dev/null)
if [ -n $XCODE_PATH ]; then
if [ -x "$XCODE_PATH/usr/bin/ld-classic" -o \
-x "$XCODE_PATH/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld-classic" ]; then
- LDFLAGS="$LDFLAGS -Wl,-ld_classic"
+ # Add -ld_classic only if -ld_classic is not deprecated.
+ if [ -z "$(ld -ld_classic 2>&1 | grep 'ld_classic is deprecated')" ]; then
+ LDFLAGS="$LDFLAGS -Wl,-ld_classic"
+ fi
fi
else
# On a macOS system with no toolchain we don't want this script
diff --git a/src/bin/sage-version.sh b/src/bin/sage-version.sh
index 16a381b0b24..9c1fb9c0309 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.5.beta8'
-SAGE_RELEASE_DATE='2024-10-26'
-SAGE_VERSION_BANNER='SageMath version 10.5.beta8, Release Date: 2024-10-26'
+SAGE_VERSION='10.5.rc0'
+SAGE_RELEASE_DATE='2024-11-16'
+SAGE_VERSION_BANNER='SageMath version 10.5.rc0, Release Date: 2024-11-16'
diff --git a/src/doc/en/developer/packaging.rst b/src/doc/en/developer/packaging.rst
index d59e5dc07e9..2b6903ca466 100644
--- a/src/doc/en/developer/packaging.rst
+++ b/src/doc/en/developer/packaging.rst
@@ -1010,11 +1010,11 @@ to refer to the dot-separated components of a version by ``VERSION_MAJOR``,
``VERSION_MINOR``, and ``VERSION_MICRO``.
For Python packages available from PyPI, you should use an
-``upstream_url`` from ``pypi.io``, which follows the format
+``upstream_url`` from ``files.pythonhosted.org``, which follows the format
.. CODE-BLOCK:: bash
- upstream_url=https://pypi.io/packages/source/m/matplotlib/matplotlib-VERSION.tar.gz
+ upstream_url=https://files.pythonhosted.org/packages/source/m/matplotlib/matplotlib-VERSION.tar.gz
Developers who wish to test a package update from a PR branch before
the archive is available on a Sage mirror. Sage falls back to
diff --git a/src/doc/en/developer/portability_testing.rst b/src/doc/en/developer/portability_testing.rst
index 55cefd0bf60..0f8d9e4b30f 100644
--- a/src/doc/en/developer/portability_testing.rst
+++ b/src/doc/en/developer/portability_testing.rst
@@ -259,7 +259,7 @@ This information comes from Sage's database of equivalent system
packages. For example::
$ ls build/pkgs/flint/distros/
- alpine.txt cygwin.txt fedora.txt gentoo.txt macports.txt opensuse.txt void.txt
+ alpine.txt fedora.txt gentoo.txt macports.txt opensuse.txt void.txt
conda.txt debian.txt freebsd.txt homebrew.txt nix.txt repology.txt
$ cat build/pkgs/flint/distros/debian.txt
libflint-dev
diff --git a/src/doc/en/installation/conda.rst b/src/doc/en/installation/conda.rst
index 69369767854..e3cbf6b342c 100644
--- a/src/doc/en/installation/conda.rst
+++ b/src/doc/en/installation/conda.rst
@@ -61,38 +61,6 @@ If there are any installation failures, please report them to
the conda-forge maintainers by opening a `GitHub Issue for
conda-forge/sage-feedstock `_.
-
-.. _sec-installation-conda-source:
-
-Using conda to provide system packages for the Sage distribution
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If Conda is installed (check by typing ``conda info``), one can install SageMath
-from source as follows:
-
-- Create a new conda environment including all standard packages
- recognized by sage, and activate it::
-
- $ conda env create --file environment-3.11-linux.yml --name sage-build
- $ conda activate sage-build
-
- If you use a different architecture, replace ``linux`` by ``macos``.
- Alternatively, use ``environment-optional-3.11-linux.yml`` in place of
- ``environment-3.11-linux.yml`` to create an environment with all standard and optional
- packages recognized by sage.
-
- A different Python version can be selected by replacing ``3.11`` by ``3.9``
- or ``3.10`` in these commands.
-
-- Then the SageMath distribution will be built using the compilers provided by Conda
- and using many packages installed by Conda::
-
- $ ./bootstrap
- $ ./configure --with-python=$CONDA_PREFIX/bin/python \
- --prefix=$CONDA_PREFIX
- $ make
-
-
.. _sec-installation-conda-develop:
Using conda to provide all dependencies for the Sage library
@@ -118,18 +86,18 @@ Here we assume that you are using a git checkout.
.. code-block:: shell
- $ mamba env create --file src/environment-dev-3.11-linux.yml --name sage-dev
+ $ mamba env create --file environment-dev-3.11-linux.yml --name sage-dev
$ conda activate sage-dev
.. tab:: conda
.. code-block:: shell
- $ conda env create --file src/environment-dev-3.11-linux.yml --name sage-dev
+ $ conda env create --file environment-dev-3.11-linux.yml --name sage-dev
$ conda activate sage-dev
- Alternatively, you can use ``src/environment-3.11-linux.yml`` or
- ``src/environment-optional-3.11-linux.yml``, which will only install standard
+ Alternatively, you can use ``environment-3.11-linux.yml`` or
+ ``environment-optional-3.11-linux.yml``, which will only install standard
(and optional) packages without any additional developer tools.
A different Python version can be selected by replacing ``3.11`` by ``3.9``
@@ -169,7 +137,7 @@ After editing any Cython files, rebuild the Sage library using::
In order to update the conda environment later, you can run::
- $ mamba env update --file src/environment-dev-3.11-linux.yml --name sage-dev
+ $ mamba env update --file environment-dev-3.11-linux.yml --name sage-dev
To build the documentation, use::
@@ -188,5 +156,5 @@ To build the documentation, use::
You can update the conda lock files by running
``.github/workflows/conda-lock-update.py`` or by running
- ``conda-lock --platform linux-64 --filename src/environment-dev-3.11-linux.yml --lockfile src/environment-dev-3.11-linux.lock``
+ ``conda-lock --platform linux-64 --filename environment-dev-3.11-linux.yml --lockfile environment-dev-3.11-linux.lock``
manually.
diff --git a/src/doc/en/installation/launching.rst b/src/doc/en/installation/launching.rst
index ce445a02f16..b612a89a9c1 100644
--- a/src/doc/en/installation/launching.rst
+++ b/src/doc/en/installation/launching.rst
@@ -165,7 +165,28 @@ SageMath documentation at http://doc.sagemath.org/.
Setting up SageMath as a Jupyter kernel in an existing Jupyter notebook or JupyterLab installation
--------------------------------------------------------------------------------------------------
-You may already have a global installation of Jupyter. For added
+By default, SageMath installs itself as a Jupyter kernel in the same
+environment as the SageMath installation. This is the most convenient way to
+use SageMath in a Jupyter notebook. To check if the Sage kernel is
+available, start a Jupyter notebook and look for the kernel named
+``sagemath`` in the list of available kernels.
+Alternatively, you can use the following command to check which kernels are
+available:
+
+.. code-block:: shell-session
+
+ $ jupyter kernelspec list
+ Available kernels:
+ python3 /share/jupyter/kernels/python3
+ sagemath /share/jupyter/kernels/sagemath
+
+.. note::
+
+ The kernel is not automatically available if you have installed SageMath
+ in editable mode (``pip install -e``). In that case, it is recommended
+ to reinstall SageMath in a non-editable way.
+
+You may already have a global installation of Jupyter. For added
convenience, it is possible to link your installation of SageMath into
your Jupyter installation, adding it to the list of available kernels
that can be selected in the notebook or JupyterLab interface.
@@ -177,6 +198,8 @@ Assuming that SageMath can be invoked by typing ``sage``, you can use
sage -sh -c 'ls -d $SAGE_VENV/share/jupyter/kernels/sagemath'
to find the location of the SageMath kernel description.
+Alternatively, use ``jupyter kernelspec list`` from the same environment
+where SageMath is installed to find the location of the SageMath kernel.
Now pick a name for the kernel that identifies it clearly and uniquely.
@@ -196,7 +219,7 @@ new kernel named ``sagemath-dev``.
The ``jupyter kernelspec`` approach by default does lead to about 2Gb of
SageMath documentation being copied into your personal jupyter configuration
-directory. You can avoid that by instead putting a symlink in the relevant spot.
+directory. You can avoid that by instead putting a symlink in the relevant spot
and
.. CODE-BLOCK:: bash
diff --git a/src/doc/en/reference/graphs/index.rst b/src/doc/en/reference/graphs/index.rst
index 34c5f134839..91b0f2d3cd7 100644
--- a/src/doc/en/reference/graphs/index.rst
+++ b/src/doc/en/reference/graphs/index.rst
@@ -14,6 +14,7 @@ Graph objects and methods
sage/graphs/graph
sage/graphs/digraph
sage/graphs/bipartite_graph
+ sage/graphs/matching_covered_graph
sage/graphs/views
Constructors and databases
diff --git a/src/doc/en/reference/matroids/index.rst b/src/doc/en/reference/matroids/index.rst
index b52c5b3420a..284caabe8d0 100644
--- a/src/doc/en/reference/matroids/index.rst
+++ b/src/doc/en/reference/matroids/index.rst
@@ -34,6 +34,15 @@ Concrete implementations
sage/matroids/rank_matroid
sage/matroids/graphic_matroid
+Chow rings of matroids
+----------------------
+
+.. toctree::
+ :maxdepth: 1
+
+ sage/matroids/chow_ring_ideal
+ sage/matroids/chow_ring
+
Abstract matroid classes
------------------------
diff --git a/src/doc/en/reference/references/index.rst b/src/doc/en/reference/references/index.rst
index 78fa9fb65aa..45f5fbc090f 100644
--- a/src/doc/en/reference/references/index.rst
+++ b/src/doc/en/reference/references/index.rst
@@ -265,6 +265,9 @@ REFERENCES:
finite Drinfeld modules.* manuscripta mathematica 93, 1 (01 Aug 1997),
369–379. https://doi.org/10.1007/BF02677478
+.. [ANR2023] Robert Angarone, Anastasia Nathanson, and Victor Reiner. *Chow rings of
+ matroids as permutation representations*, 2023. :arxiv:`2309.14312`.
+
.. [AP1986] \S. Arnborg, A. Proskurowski,
*Characterization and Recognition of Partial 3-Trees*,
SIAM Journal of Alg. and Discrete Methods,
@@ -2925,6 +2928,9 @@ REFERENCES:
"Pyjamask"
https://csrc.nist.gov/CSRC/media/Projects/Lightweight-Cryptography/documents/round-1/spec-doc/Pyjamask-spec.pdf
+.. [Gou2020] Fernando Q. Gouvêa, *$p$-adic Numbers: An Introduction*,
+ Third Edition. Springer Nature Switzerland AG, 2020.
+
.. [GJK+2014] Dimitar Grantcharov, Ji Hye Jung, Seok-Jin Kang, Masaki Kashiwara,
Myungho Kim. *Crystal bases for the quantum queer superalgebra and
semistandard decomposition tableaux.*; Trans. Amer. Math. Soc.,
@@ -4700,6 +4706,9 @@ REFERENCES:
University Press, New York, 1995, With contributions
by A. Zelevinsky, Oxford Science Publications.
+.. [Mac2015] Diane Maclagan and Bernd Sturmfels, *Introduction to
+ Tropical Geometry*, American Mathematical Society, 2015.
+
.. [MagmaHGM] *Hypergeometric motives* in Magma,
http://magma.maths.usyd.edu.au/~watkins/papers/HGM-chapter.pdf
@@ -4929,6 +4938,9 @@ REFERENCES:
.. [MM2015] \J. Matherne and \G. Muller, *Computing upper cluster algebras*,
Int. Math. Res. Not. IMRN, 2015, 3121-3149.
+.. [MM2022] Matthew Mastroeni and Jason McCullough. *Chow rings of matroids are
+ Koszul*. Mathematische Annalen, 387(3-4):1819-1851, November 2022.
+
.. [MMRS2022] Ruslan G. Marzo, Rafael A. Melo, Celso C. Ribeiro and
Marcio C. Santos: *New formulations and branch-and-cut procedures
for the longest induced path problem*. Computers & Operations
diff --git a/src/doc/en/thematic_tutorials/coercion_and_categories.rst b/src/doc/en/thematic_tutorials/coercion_and_categories.rst
index ad5a01ea1a6..5e9fcf77db6 100644
--- a/src/doc/en/thematic_tutorials/coercion_and_categories.rst
+++ b/src/doc/en/thematic_tutorials/coercion_and_categories.rst
@@ -129,13 +129,10 @@ This base class provides a lot more methods than a general parent::
'fraction_field',
'gen',
'gens',
- 'ideal',
'integral_closure',
'is_commutative',
'is_field',
'is_integrally_closed',
- 'is_prime_field',
- 'is_subring',
'krull_dimension',
'localization',
'ngens',
diff --git a/src/environment-3.10-linux-aarch64.yml b/src/environment-3.10-linux-aarch64.yml
deleted file mode 100644
index 7c6026a6b00..00000000000
--- a/src/environment-3.10-linux-aarch64.yml
+++ /dev/null
@@ -1,435 +0,0 @@
-# Generated by conda-lock.
-# platform: linux-aarch64
-# input_hash: 50ecbf09a118347f6c002960a184cf81c369d83e8e8555c2db3282013254eca1
-
-channels:
- - conda-forge
-dependencies:
- - _openmp_mutex=4.5=2_kmp_llvm
- - _r-mutex=1.0.1=anacondar_1
- - _sysroot_linux-aarch64_curr_repodata_hack=4=h57d6b7b_14
- - alabaster=0.7.16=pyhd8ed1ab_0
- - alsa-lib=1.2.11=h31becfc_1
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py310hb299538_4
- - arpack=3.9.1=nompi_hd363cd0_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321h2148fe1_1
- - automake=1.16.5=pl5321h8af1aa0_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=hf897c2e_0
- - bdw-gc=8.0.6=hd62202e_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - binutils=2.40=hf1166c9_7
- - binutils_impl_linux-aarch64=2.40=hf54a868_7
- - binutils_linux-aarch64=2.40=h1f91aba_9
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_linuxaarch64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=ha990451_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=h31becfc_1
- - brotli-bin=1.1.0=h31becfc_1
- - brotli-python=1.1.0=py310hbb3657e_1
- - bwidget=1.9.14=h8af1aa0_1
- - bzip2=1.0.8=h31becfc_5
- - c-ares=1.28.1=h31becfc_0
- - c-compiler=1.7.0=h31becfc_1
- - ca-certificates=2024.6.2=hcefe29a_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=h5c54ea9_2
- - cddlib=1!0.94m=h719063d_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py310hce94938_0
- - chardet=5.2.0=py310hbbe02a8_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - cliquer=1.22=h31becfc_1
- - cmake=3.29.6=h7042e5d_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py310h4c7bcd0_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compilers=1.7.0=h8af1aa0_1
- - contourpy=1.2.1=py310h586407a_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=h7daf2e0_0
- - cvxopt=1.3.2=py310he29a27f_2
- - cxx-compiler=1.7.0=h2a328a1_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py310h4cbba44_0
- - cysignals=1.11.2=py310h485802a_3
- - cython=3.0.10=py310hbb3657e_0
- - debugpy=1.8.1=py310hbb3657e_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=hb12102e_1203
- - ecl=23.9.9=h6475f26_0
- - eclib=20231212=he26bab5_0
- - ecm=7.0.5=ha2d0fc4_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h2f0025b_0
- - fflas-ffpack=2.5.0=h503e619_0
- - fftw=3.3.10=nompi_h020dacd_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=ha9a116f_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py310hb52b2da_0
- - fortran-compiler=1.7.0=h7048d53_1
- - fplll=5.4.5=hb3a790e_0
- - fpylll=0.6.1=py310hfdbf2a6_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=hf0a5ef3_2
- - fribidi=1.0.10=hb9de7d4_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=h597289e_3
- - gap-defaults=4.12.2=h8af1aa0_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gcc=12.3.0=hdb0cc85_13
- - gcc_impl_linux-aarch64=12.3.0=h3d98823_13
- - gcc_linux-aarch64=12.3.0=ha52a6ea_9
- - gengetopt=2.23=h01db608_0
- - gf2x=1.3.0=h1b3b3a3_2
- - gfan=0.6.2=h5f589ec_1003
- - gfortran=12.3.0=hdb0cc85_13
- - gfortran_impl_linux-aarch64=12.3.0=h97ebfd2_13
- - gfortran_linux-aarch64=12.3.0=ha7b8e4b_9
- - giac=1.9.0.21=h04922a4_1
- - giflib=5.2.2=h31becfc_0
- - givaro=4.2.0=h364d21b_0
- - glpk=5.0=h66325d0_0
- - gmp=6.3.0=h0a1ffab_2
- - gmpy2=2.1.5=py310h05bcf56_1
- - graphite2=1.3.13=h2f0025b_1003
- - gsl=2.7=h294027d_0
- - gxx=12.3.0=hdb0cc85_13
- - gxx_impl_linux-aarch64=12.3.0=hba91e99_13
- - gxx_linux-aarch64=12.3.0=h9d1f256_9
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h9812418_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=h787c7f5_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=h197073e_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h15043fe_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh3099207_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=h8af1aa0_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py310h4c7bcd0_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py310h4c7bcd0_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kernel-headers_linux-aarch64=4.18.0=h5b4a56d_14
- - keyutils=1.6.1=h4e544f5_0
- - kiwisolver=1.4.5=py310he290b8a_1
- - krb5=1.21.2=hc419048_0
- - lcalc=2.0.5=he588f68_2
- - lcms2=2.16=h922389a_0
- - ld_impl_linux-aarch64=2.40=h9fc2d93_7
- - lerc=4.0.0=h4de3ea5_0
- - libatomic_ops=7.6.14=h4e544f5_0
- - libblas=3.9.0=20_linuxaarch64_openblas
- - libboost=1.85.0=hb41fec8_2
- - libboost-devel=1.85.0=h37bb5a9_2
- - libboost-headers=1.85.0=h8af1aa0_2
- - libbraiding=1.2=hd600fc2_0
- - libbrial=1.2.12=h9429f74_3
- - libbrotlicommon=1.1.0=h31becfc_1
- - libbrotlidec=1.1.0=h31becfc_1
- - libbrotlienc=1.1.0=h31becfc_1
- - libcblas=3.9.0=20_linuxaarch64_openblas
- - libcups=2.3.3=h405e4a8_4
- - libcurl=8.8.0=h4e8248e_0
- - libdeflate=1.20=h31becfc_0
- - libedit=3.1.20191231=he28a2e2_2
- - libev=4.33=h31becfc_2
- - libexpat=2.6.2=h2f0025b_0
- - libffi=3.4.2=h3557bc0_5
- - libflint=3.0.1=hc392af7_ntl_100
- - libgcc-devel_linux-aarch64=12.3.0=h6144e03_113
- - libgcc-ng=13.2.0=he277a41_13
- - libgd=2.3.3=hcd22fd5_9
- - libgfortran-ng=13.2.0=he9431aa_13
- - libgfortran5=13.2.0=h2af0866_13
- - libglib=2.80.2=haee52c6_1
- - libgomp=13.2.0=he277a41_13
- - libhomfly=1.02r6=h31becfc_1
- - libhwloc=2.10.0=default_h3030c0e_1001
- - libiconv=1.17=h31becfc_2
- - libjpeg-turbo=3.0.0=h31becfc_1
- - liblapack=3.9.0=20_linuxaarch64_openblas
- - liblapacke=3.9.0=20_linuxaarch64_openblas
- - libnghttp2=1.58.0=hb0e430d_1
- - libnsl=2.0.1=h31becfc_0
- - libopenblas=0.3.25=pthreads_h5a5ec62_0
- - libpng=1.6.43=h194ca79_0
- - libsanitizer=12.3.0=h57e2e72_13
- - libsodium=1.0.18=hb9de7d4_1
- - libsqlite=3.46.0=hf51ef55_0
- - libssh2=1.11.0=h492db2e_0
- - libstdcxx-devel_linux-aarch64=12.3.0=h6144e03_113
- - libstdcxx-ng=13.2.0=h3f4de04_13
- - libtiff=4.6.0=hf980d43_3
- - libtool=2.4.7=h4de3ea5_0
- - libuuid=2.38.1=hb4cce97_0
- - libuv=1.48.0=h31becfc_0
- - libwebp=1.4.0=h8b4e01b_0
- - libwebp-base=1.4.0=h31becfc_0
- - libxcb=1.16=h7935292_0
- - libxcrypt=4.4.36=h31becfc_1
- - libxml2=2.12.7=h49dc7a2_1
- - libzlib=1.3.1=h68df207_1
- - linbox=1.7.0=h681a5ee_0
- - llvm-openmp=18.1.8=hb063fc5_0
- - lrcalc=2.1=h2f0025b_6
- - m4=1.4.18=h516909a_1001
- - m4ri=20140914=hedfd65a_1006
- - m4rie=20150908=hf0a5ef3_1002
- - make=4.3=h309ac5b_1
- - markupsafe=2.1.5=py310h7c1f4a2_0
- - mathjax=3.2.2=h8af1aa0_0
- - matplotlib=3.8.4=py310hbbe02a8_2
- - matplotlib-base=3.8.4=py310h84f21c1_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h6475f26_2
- - memory-allocator=0.1.3=py310hb299538_0
- - metis=5.1.0=h2f0025b_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=hf4c8f4c_0
- - mpfi=1.5.4=h846f343_1001
- - mpfr=4.2.1=ha2d0fc4_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h31becfc_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h0425590_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h70be974_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=h0d7519b_1
- - numpy=1.26.4=py310hcbab775_0
- - openblas=0.3.25=pthreads_h339cbfa_0
- - openjdk=22.0.1=h3d4cd67_0
- - openjpeg=2.5.2=h0d9d63b_0
- - openssl=3.3.1=h68df207_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=hb9de7d4_0
- - pandoc=3.2.1=h8af1aa0_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h399c48b_0
- - pari=2.15.5=h169c2a7_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=hf897c2e_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h070dd5b_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h31becfc_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py310h611336f_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=h2f0025b_0
- - pkg-config=0.29.2=hb9de7d4_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h31becfc_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h984aac9_1006
- - pplpy=0.8.9=py310h6665419_1
- - primecount=7.9=hd600fc2_0
- - primecountpy=0.1.0=py310h586407a_4
- - primesieve=11.1=h2f0025b_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py310hb52b2da_0
- - pthread-stubs=0.4=hb9de7d4_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py310h586407a_0
- - pybind11-global=2.12.0=py310h586407a_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py310h7c1f4a2_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.10.14=hbbe8eec_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py310hbb3657e_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.10=4_cp310
- - pythran=0.15.0=py310h5e48e15_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py310h4c7bcd0_4
- - pyyaml=6.0.1=py310hb299538_1
- - pyzmq=26.0.3=py310he875deb_0
- - qd=2.3.22=h05efe27_1004
- - qhull=2020.2=hd62202e_2
- - r-base=4.3.3=h7f20121_3
- - r-lattice=0.22_6=r43h25e906a_0
- - readline=8.2=h8fc344f_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=h31becfc_0
- - rpds-py=0.18.1=py310h59d1b7a_0
- - rpy2=3.5.11=py310r43h8b6b5fc_3
- - rw=0.9=h31becfc_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.3=py310hcbab775_1
- - sed=4.8=ha0d5d3d_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=hbe76a8a_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=hdc7ab3c_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=h3944111_1
- - symmetrica=3.0.1=hd600fc2_0
- - sympow=2.023.6=h157afb5_3
- - sympy=1.12.1=pypyh2585a3b_103
- - sysroot_linux-aarch64=2.17=h5b4a56d_14
- - tachyon=0.99b6=ha0bfc61_1002
- - tar=1.34=h048efde_0
- - tbb=2021.12.0=h70be974_1
- - terminado=0.18.1=pyh0d859eb_0
- - texinfo=7.0=pl5321h17f021e_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h194ca79_0
- - tktable=2.10=h52f7bd3_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py310h03727f4_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py310h4c7bcd0_0
- - unicodedata2=15.1.0=py310hb299538_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-fixesproto=5.0=h3557bc0_1002
- - xorg-inputproto=2.3.2=h3557bc0_1002
- - xorg-kbproto=1.0.7=h3557bc0_1002
- - xorg-libice=1.1.1=h7935292_0
- - xorg-libsm=1.2.4=h5a01bc2_0
- - xorg-libx11=1.8.9=h08be655_1
- - xorg-libxau=1.0.11=h31becfc_0
- - xorg-libxdmcp=1.1.3=h3557bc0_0
- - xorg-libxext=1.3.4=h2a766a3_2
- - xorg-libxfixes=5.0.3=h3557bc0_1004
- - xorg-libxi=1.7.10=h3557bc0_0
- - xorg-libxrender=0.9.11=h7935292_0
- - xorg-libxt=1.3.0=h7935292_1
- - xorg-libxtst=1.2.3=hf897c2e_1002
- - xorg-recordproto=1.14.2=hf897c2e_1002
- - xorg-renderproto=0.11.1=h3557bc0_1002
- - xorg-xextproto=7.3.0=h2a766a3_1003
- - xorg-xproto=7.0.31=h3557bc0_1007
- - xz=5.2.6=h9cdd2b7_0
- - yaml=0.2.5=hf897c2e_2
- - zeromq=4.3.5=h28faeed_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h68df207_1
- - zstd=1.5.6=h02f22dd_0
diff --git a/src/environment-3.10-linux.yml b/src/environment-3.10-linux.yml
deleted file mode 100644
index 929b40139c5..00000000000
--- a/src/environment-3.10-linux.yml
+++ /dev/null
@@ -1,485 +0,0 @@
-# Generated by conda-lock.
-# platform: linux-64
-# input_hash: 5dc443f6ceb3674d099e0ec613ba37acf67d72b0b26699816fc7afb3c9523b1f
-
-channels:
- - conda-forge
-dependencies:
- - _libgcc_mutex=0.1=conda_forge
- - _openmp_mutex=4.5=2_kmp_llvm
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - alsa-lib=1.2.12=h4ab18f5_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py310h2372a71_4
- - arpack=3.9.1=nompi_h77f6705_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attr=2.5.1=h166bdaf_1
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321h2b4cb7a_1
- - automake=1.16.5=pl5321ha770c72_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h7f98852_0
- - bdw-gc=8.0.6=h4bd325d_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - binutils=2.40=h4852527_7
- - binutils_impl_linux-64=2.40=ha1999f0_7
- - binutils_linux-64=2.40=hb3c18ed_9
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_linux64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=h44aadfe_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=hd590300_1
- - brotli-bin=1.1.0=hd590300_1
- - brotli-python=1.1.0=py310hc6cd4ac_1
- - bwidget=1.9.14=ha770c72_1
- - bzip2=1.0.8=hd590300_5
- - c-ares=1.28.1=hd590300_0
- - c-compiler=1.7.0=hd590300_1
- - ca-certificates=2024.6.2=hbcca054_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=hbb29018_2
- - cddlib=1!0.94m=h9202a9a_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py310h2fee648_0
- - chardet=5.2.0=py310hff52083_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - cliquer=1.22=hd590300_1
- - cmake=3.29.6=hcafd917_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py310hff52083_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compilers=1.7.0=ha770c72_1
- - contourpy=1.2.1=py310hd41b1e2_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=he654da7_0
- - cvxopt=1.3.2=py310h7b0674a_2
- - cxx-compiler=1.7.0=h00ab1b0_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py310h14ed79e_0
- - cysignals=1.11.2=py310h945e7c7_3
- - cython=3.0.10=py310hc6cd4ac_0
- - dbus=1.13.6=h5008d03_3
- - debugpy=1.8.1=py310hc6cd4ac_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=hd9d9efa_1203
- - ecl=23.9.9=hed6455c_0
- - eclib=20231212=h96f522a_0
- - ecm=7.0.5=h9458935_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h59595ed_0
- - fflas-ffpack=2.5.0=h4f9960b_0
- - fftw=3.3.10=nompi_hf1063bd_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h14ed4e7_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py310hc51659f_0
- - fortran-compiler=1.7.0=heb67821_1
- - fplll=5.4.5=h384768b_0
- - fpylll=0.6.1=py310h7e26f94_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=h267a509_2
- - fribidi=1.0.10=h36c2ea0_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=he9a28a4_3
- - gap-defaults=4.12.2=ha770c72_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gcc=12.3.0=h915e2ae_13
- - gcc_impl_linux-64=12.3.0=h58ffeeb_13
- - gcc_linux-64=12.3.0=h9528a6a_9
- - gengetopt=2.23=h9c3ff4c_0
- - gettext=0.22.5=h59595ed_2
- - gettext-tools=0.22.5=h59595ed_2
- - gf2x=1.3.0=ha476b99_2
- - gfan=0.6.2=hb86e20a_1003
- - gfortran=12.3.0=h915e2ae_13
- - gfortran_impl_linux-64=12.3.0=h8f2110c_13
- - gfortran_linux-64=12.3.0=h5877db1_9
- - giac=1.9.0.21=h673759e_1
- - giflib=5.2.2=hd590300_0
- - givaro=4.2.0=hb789bce_0
- - glib=2.80.2=h8a4344b_1
- - glib-tools=2.80.2=h73ef956_1
- - glpk=5.0=h445213a_0
- - gmp=6.3.0=hac33072_2
- - gmpy2=2.1.5=py310hc7909c9_1
- - graphite2=1.3.13=h59595ed_1003
- - gsl=2.7=he838d99_0
- - gst-plugins-base=1.24.5=hbaaba92_0
- - gstreamer=1.24.5=haf2f30d_0
- - gxx=12.3.0=h915e2ae_13
- - gxx_impl_linux-64=12.3.0=h2a574ab_13
- - gxx_linux-64=12.3.0=ha28b414_9
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=hfac3d4d_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=h59595ed_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=hef0740d_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h623f65a_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh3099207_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=ha770c72_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py310hff52083_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py310hff52083_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kernel-headers_linux-64=2.6.32=he073ed8_17
- - keyutils=1.6.1=h166bdaf_0
- - kiwisolver=1.4.5=py310hd41b1e2_1
- - krb5=1.21.2=h659d440_0
- - lame=3.100=h166bdaf_1003
- - lcalc=2.0.5=h5aac1b6_2
- - lcms2=2.16=hb7c19ff_0
- - ld_impl_linux-64=2.40=hf3520f5_7
- - lerc=4.0.0=h27087fc_0
- - libasprintf=0.22.5=h661eb56_2
- - libasprintf-devel=0.22.5=h661eb56_2
- - libatomic_ops=7.6.14=h166bdaf_0
- - libblas=3.9.0=20_linux64_openblas
- - libboost=1.85.0=hba137d9_2
- - libboost-devel=1.85.0=h00ab1b0_2
- - libboost-headers=1.85.0=ha770c72_2
- - libbraiding=1.2=hcb278e6_0
- - libbrial=1.2.12=h76af697_3
- - libbrotlicommon=1.1.0=hd590300_1
- - libbrotlidec=1.1.0=hd590300_1
- - libbrotlienc=1.1.0=hd590300_1
- - libcap=2.69=h0f662aa_0
- - libcblas=3.9.0=20_linux64_openblas
- - libclang-cpp15=15.0.7=default_h127d8a8_5
- - libclang13=18.1.8=default_h6ae225f_0
- - libcups=2.3.3=h4637d8d_4
- - libcurl=8.8.0=hca28451_0
- - libdeflate=1.20=hd590300_0
- - libedit=3.1.20191231=he28a2e2_2
- - libev=4.33=hd590300_2
- - libevent=2.1.12=hf998b51_1
- - libexpat=2.6.2=h59595ed_0
- - libffi=3.4.2=h7f98852_5
- - libflac=1.4.3=h59595ed_0
- - libflint=3.0.1=h5f2e117_ntl_100
- - libgcc-devel_linux-64=12.3.0=h6b66f73_113
- - libgcc-ng=13.2.0=h77fa898_13
- - libgcrypt=1.10.3=hd590300_0
- - libgd=2.3.3=h119a65a_9
- - libgettextpo=0.22.5=h59595ed_2
- - libgettextpo-devel=0.22.5=h59595ed_2
- - libgfortran-ng=13.2.0=h69a702a_13
- - libgfortran5=13.2.0=h3d2ce59_13
- - libglib=2.80.2=h8a4344b_1
- - libgomp=13.2.0=h77fa898_13
- - libgpg-error=1.49=h4f305b6_0
- - libhomfly=1.02r6=hd590300_1
- - libhwloc=2.10.0=default_h5622ce7_1001
- - libiconv=1.17=hd590300_2
- - libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=20_linux64_openblas
- - liblapacke=3.9.0=20_linux64_openblas
- - libllvm15=15.0.7=hb3ce162_4
- - libllvm18=18.1.8=hc9dba70_0
- - libnghttp2=1.58.0=h47da74e_1
- - libnsl=2.0.1=hd590300_0
- - libogg=1.3.5=h4ab18f5_0
- - libopenblas=0.3.25=pthreads_h413a1c8_0
- - libopus=1.3.1=h7f98852_1
- - libpng=1.6.43=h2797004_0
- - libpq=16.3=ha72fbe1_0
- - libsanitizer=12.3.0=hb8811af_13
- - libsndfile=1.2.2=hc60ed4a_1
- - libsodium=1.0.18=h36c2ea0_1
- - libsqlite=3.46.0=hde9e2c9_0
- - libssh2=1.11.0=h0841786_0
- - libstdcxx-devel_linux-64=12.3.0=h6b66f73_113
- - libstdcxx-ng=13.2.0=hc0a3c3a_13
- - libsystemd0=255=h3516f8a_1
- - libtiff=4.6.0=h1dd3fc0_3
- - libtool=2.4.7=h27087fc_0
- - libuuid=2.38.1=h0b41bf4_0
- - libuv=1.48.0=hd590300_0
- - libvorbis=1.3.7=h9c3ff4c_0
- - libwebp=1.4.0=h2c329e2_0
- - libwebp-base=1.4.0=hd590300_0
- - libxcb=1.16=hd590300_0
- - libxcrypt=4.4.36=hd590300_1
- - libxkbcommon=1.7.0=h2c5496b_1
- - libxml2=2.12.7=hc051c1a_1
- - libzlib=1.3.1=h4ab18f5_1
- - linbox=1.7.0=ha329b40_0
- - llvm-openmp=18.1.8=hf5423f3_0
- - lrcalc=2.1=h59595ed_6
- - lz4-c=1.9.4=hcb278e6_0
- - m4=1.4.18=h516909a_1001
- - m4ri=20140914=hae5d5c5_1006
- - m4rie=20150908=h267a509_1002
- - make=4.3=hd18ef5c_1
- - markupsafe=2.1.5=py310h2372a71_0
- - mathjax=3.2.2=ha770c72_0
- - matplotlib=3.8.4=py310hff52083_2
- - matplotlib-base=3.8.4=py310hef631a5_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=hed6455c_2
- - memory-allocator=0.1.3=py310h2372a71_0
- - meson=1.5.2=pyhd8ed1ab_0
- - meson-python=0.15.0=pyh0c530f3_0
- - metis=5.1.0=h59595ed_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=hfe3b2da_0
- - mpfi=1.5.4=h9f54685_1001
- - mpfr=4.2.1=h9458935_1
- - mpg123=1.32.6=h59595ed_0
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - mysql-common=8.3.0=hf1915f5_4
- - mysql-libs=8.3.0=hca2cd23_4
- - nauty=2.8.8=hd590300_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h59595ed_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h297d8ca_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - nspr=4.35=h27087fc_0
- - nss=3.101=h593d115_0
- - ntl=11.4.3=hef3c4d3_1
- - numpy=1.26.4=py310hb13e2d6_0
- - openblas=0.3.25=pthreads_h7a3da1a_0
- - openjdk=21.0.2=haa376d0_0
- - openjpeg=2.5.2=h488ebb8_0
- - openssl=3.3.1=h4ab18f5_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=h36c2ea0_0
- - pandoc=3.2.1=ha770c72_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h84a9a3c_0
- - pari=2.15.5=h4d4ae9b_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=h7f98852_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h0f59acf_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_hd590300_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py310hebfe307_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.2=h59595ed_0
- - pkg-config=0.29.2=h36c2ea0_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=hd590300_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h6ec01c2_1006
- - pplpy=0.8.9=py310h18554fa_1
- - primecount=7.9=hcb278e6_0
- - primecountpy=0.1.0=py310hd41b1e2_4
- - primesieve=11.1=h59595ed_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py310hc51659f_0
- - pthread-stubs=0.4=h36c2ea0_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pulseaudio-client=17.0=hb77b528_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py310hd41b1e2_0
- - pybind11-global=2.12.0=py310hd41b1e2_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyqt=5.15.9=py310h04931ad_5
- - pyqt5-sip=12.12.2=py310hc6cd4ac_5
- - pyrsistent=0.20.0=py310h2372a71_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.10.14=hd12c33a_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py310hc6cd4ac_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.10=4_cp310
- - pythran=0.15.0=py310hcb52e73_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py310hff52083_4
- - pyyaml=6.0.1=py310h2372a71_1
- - pyzmq=26.0.3=py310h6883aea_0
- - qd=2.3.22=h2cc385e_1004
- - qhull=2020.2=h4bd325d_2
- - qt-main=5.15.8=ha2b5568_22
- - r-base=4.3.3=he2d9a6e_3
- - r-lattice=0.22_6=r43h57805ef_0
- - readline=8.2=h8228510_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=hd590300_0
- - rpds-py=0.18.1=py310he421c4c_0
- - rpy2=3.5.11=py310r43h1f7b6fc_3
- - rw=0.9=hd590300_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py310hb13e2d6_0
- - sed=4.8=he412f7d_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=h33f5c3f_1
- - sip=6.7.12=py310hc6cd4ac_0
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h6d4b2fc_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hf4753ba_1
- - symmetrica=3.0.1=hcb278e6_0
- - sympow=2.023.6=hc6ab17c_3
- - sympy=1.12.1=pypyh2585a3b_103
- - sysroot_linux-64=2.12=he073ed8_17
- - tachyon=0.99b6=hba7d16a_1002
- - tar=1.34=hb2e2bae_1
- - tbb=2021.12.0=h297d8ca_1
- - terminado=0.18.1=pyh0d859eb_0
- - texinfo=7.0=pl5321h0f457ee_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=noxft_h4845f30_101
- - tktable=2.10=h8bc8fbc_6
- - toml=0.10.2=pyhd8ed1ab_0
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py310hc51659f_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py310hff52083_0
- - unicodedata2=15.1.0=py310h2372a71_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xcb-util=0.4.1=hb711507_2
- - xcb-util-image=0.4.0=hb711507_2
- - xcb-util-keysyms=0.4.1=hb711507_0
- - xcb-util-renderutil=0.3.10=hb711507_0
- - xcb-util-wm=0.4.2=hb711507_0
- - xkeyboard-config=2.42=h4ab18f5_0
- - xorg-fixesproto=5.0=h7f98852_1002
- - xorg-inputproto=2.3.2=h7f98852_1002
- - xorg-kbproto=1.0.7=h7f98852_1002
- - xorg-libice=1.1.1=hd590300_0
- - xorg-libsm=1.2.4=h7391055_0
- - xorg-libx11=1.8.9=hb711507_1
- - xorg-libxau=1.0.11=hd590300_0
- - xorg-libxdmcp=1.1.3=h7f98852_0
- - xorg-libxext=1.3.4=h0b41bf4_2
- - xorg-libxfixes=5.0.3=h7f98852_1004
- - xorg-libxi=1.7.10=h7f98852_0
- - xorg-libxrender=0.9.11=hd590300_0
- - xorg-libxt=1.3.0=hd590300_1
- - xorg-libxtst=1.2.3=h7f98852_1002
- - xorg-recordproto=1.14.2=h7f98852_1002
- - xorg-renderproto=0.11.1=h7f98852_1002
- - xorg-xextproto=7.3.0=h0b41bf4_1003
- - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
- - xorg-xproto=7.0.31=h7f98852_1007
- - xz=5.2.6=h166bdaf_0
- - yaml=0.2.5=h7f98852_2
- - zeromq=4.3.5=h75354e8_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h4ab18f5_1
- - zstd=1.5.6=ha6fb4c9_0
diff --git a/src/environment-3.10-macos-x86_64.yml b/src/environment-3.10-macos-x86_64.yml
deleted file mode 100644
index 268e619f1ff..00000000000
--- a/src/environment-3.10-macos-x86_64.yml
+++ /dev/null
@@ -1,423 +0,0 @@
-# Generated by conda-lock.
-# platform: osx-64
-# input_hash: 831a1103cbcd8c06cbae982446953e3de30517fdd302ac5aa70454b8d19f63d9
-
-channels:
- - conda-forge
-dependencies:
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py310h6729b98_4
- - arpack=3.9.1=nompi_hf81eadf_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321hed12c24_1
- - automake=1.16.5=pl5321h694c41f_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h0d85af4_0
- - bdw-gc=8.0.6=h940c156_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_osx64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=h07eb623_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=h0dc2134_1
- - brotli-bin=1.1.0=h0dc2134_1
- - brotli-python=1.1.0=py310h9e9d8ca_1
- - bwidget=1.9.14=h694c41f_1
- - bzip2=1.0.8=h10d778d_5
- - c-ares=1.28.1=h10d778d_0
- - c-compiler=1.7.0=h282daa2_1
- - ca-certificates=2024.6.2=h8857fd0_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=h9f650ed_2
- - cctools=986=h40f6528_0
- - cctools_osx-64=986=ha1c5b94_0
- - cddlib=1!0.94m=h0f52abe_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py310hdca579f_0
- - chardet=5.2.0=py310h2ec42d9_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - clang=16.0.6=default_ha3b9224_8
- - clang-16=16.0.6=default_h4c8afb6_8
- - clang_impl_osx-64=16.0.6=h8787910_16
- - clang_osx-64=16.0.6=hb91bd55_16
- - clangxx=16.0.6=default_ha3b9224_8
- - clangxx_impl_osx-64=16.0.6=h6d92fbe_16
- - clangxx_osx-64=16.0.6=hb91bd55_16
- - cliquer=1.22=h10d778d_1
- - cmake=3.29.6=h749d262_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py310h2ec42d9_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compiler-rt=16.0.6=ha38d28d_2
- - compiler-rt_osx-64=16.0.6=ha38d28d_2
- - compilers=1.7.0=h694c41f_1
- - contourpy=1.2.1=py310hb3b189b_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=hea67d85_0
- - cvxopt=1.3.2=py310h1fac3e1_2
- - cxx-compiler=1.7.0=h7728843_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py310hc7df965_0
- - cysignals=1.11.2=py310h8c82e65_3
- - cython=3.0.10=py310h5daac23_0
- - debugpy=1.8.1=py310h5daac23_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=h6e329d1_1203
- - ecl=23.9.9=h2b27fa8_0
- - eclib=20231212=h02435c3_0
- - ecm=7.0.5=h4f6b447_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h73e2aa4_0
- - fflas-ffpack=2.5.0=h5898d61_0
- - fftw=3.3.10=nompi_h292e606_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h5bb23bf_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py310h936d840_0
- - fortran-compiler=1.7.0=h6c2ab21_1
- - fplll=5.4.5=hb7981ad_0
- - fpylll=0.6.1=py310h65a3d7e_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=h60636b9_2
- - fribidi=1.0.10=hbcb3906_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=hc16eb5f_3
- - gap-defaults=4.12.2=h694c41f_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gengetopt=2.23=he49afe7_0
- - gettext=0.22.5=h5ff76d1_2
- - gettext-tools=0.22.5=h5ff76d1_2
- - gf2x=1.3.0=hb2a7efb_2
- - gfan=0.6.2=hd793b56_1003
- - gfortran=12.3.0=h2c809b3_1
- - gfortran_impl_osx-64=12.3.0=hc328e78_3
- - gfortran_osx-64=12.3.0=h18f7dce_1
- - giac=1.9.0.21=h92f3f65_1
- - giflib=5.2.2=h10d778d_0
- - givaro=4.2.0=h1b3d6f7_0
- - glpk=5.0=h3cb5acd_0
- - gmp=6.3.0=hf036a51_2
- - gmpy2=2.1.5=py310h0310db1_1
- - graphite2=1.3.13=h73e2aa4_1003
- - gsl=2.7=h93259b0_0
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h053f038_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=hf5e326d_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=hde4452d_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h61918c1_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh57ce528_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isl=0.26=imath32_h2e86a7b_101
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.9=h694c41f_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py310h2ec42d9_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py310h2ec42d9_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py310h88cfcbd_1
- - krb5=1.21.2=hb884880_0
- - lcalc=2.0.5=h547a6ed_2
- - lcms2=2.16=ha2f27b4_0
- - ld64=711=ha02d983_0
- - ld64_osx-64=711=ha20a434_0
- - lerc=4.0.0=hb486fe8_0
- - libasprintf=0.22.5=h5ff76d1_2
- - libasprintf-devel=0.22.5=h5ff76d1_2
- - libatomic_ops=7.6.14=hb7f2c08_0
- - libblas=3.9.0=20_osx64_openblas
- - libboost=1.85.0=h739af76_2
- - libboost-devel=1.85.0=h2b186f8_2
- - libboost-headers=1.85.0=h694c41f_2
- - libbraiding=1.2=hf0c8a7f_0
- - libbrial=1.2.12=h81e9653_3
- - libbrotlicommon=1.1.0=h0dc2134_1
- - libbrotlidec=1.1.0=h0dc2134_1
- - libbrotlienc=1.1.0=h0dc2134_1
- - libcblas=3.9.0=20_osx64_openblas
- - libclang-cpp16=16.0.6=default_h4c8afb6_8
- - libcurl=8.8.0=hf9fcc65_0
- - libcxx=17.0.6=h88467a6_0
- - libdeflate=1.20=h49d49c5_0
- - libedit=3.1.20191231=h0678c8f_2
- - libev=4.33=h10d778d_2
- - libexpat=2.6.2=h73e2aa4_0
- - libffi=3.4.2=h0d85af4_5
- - libflint=3.0.1=h5d15de0_ntl_100
- - libgd=2.3.3=h0dceb68_9
- - libgettextpo=0.22.5=h5ff76d1_2
- - libgettextpo-devel=0.22.5=h5ff76d1_2
- - libgfortran=5.0.0=13_2_0_h97931a8_3
- - libgfortran-devel_osx-64=12.3.0=h0b6f5ec_3
- - libgfortran5=13.2.0=h2873a65_3
- - libglib=2.80.2=h736d271_1
- - libhomfly=1.02r6=h10d778d_1
- - libhwloc=2.10.0=default_h456cccd_1001
- - libiconv=1.17=hd75f5a5_2
- - libintl=0.22.5=h5ff76d1_2
- - libintl-devel=0.22.5=h5ff76d1_2
- - libjpeg-turbo=3.0.0=h0dc2134_1
- - liblapack=3.9.0=20_osx64_openblas
- - liblapacke=3.9.0=20_osx64_openblas
- - libllvm16=16.0.6=hbedff68_3
- - libnghttp2=1.58.0=h64cf6d3_1
- - libopenblas=0.3.25=openmp_hfef2a42_0
- - libpng=1.6.43=h92b6c6a_0
- - libsodium=1.0.18=hbcb3906_1
- - libsqlite=3.46.0=h1b8f9f3_0
- - libssh2=1.11.0=hd019ec5_0
- - libtiff=4.6.0=h129831d_3
- - libtool=2.4.7=hf0c8a7f_0
- - libuv=1.48.0=h67532ce_0
- - libwebp=1.4.0=hc207709_0
- - libwebp-base=1.4.0=h10d778d_0
- - libxcb=1.16=h0dc2134_0
- - libxml2=2.12.7=h3e169fe_1
- - libzlib=1.3.1=h87427d6_1
- - linbox=1.7.0=h7061c92_0
- - llvm-openmp=18.1.8=h15ab845_0
- - llvm-tools=16.0.6=hbedff68_3
- - lrcalc=2.1=h73e2aa4_6
- - m4=1.4.18=haf1e3a3_1001
- - m4ri=20140914=hd82a5f3_1006
- - m4rie=20150908=hc616cfc_1002
- - make=4.3=h22f3db7_1
- - markupsafe=2.1.5=py310hb372a2b_0
- - mathjax=3.2.2=h694c41f_0
- - matplotlib=3.8.4=py310h2ec42d9_2
- - matplotlib-base=3.8.4=py310h7ea1ff3_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h2b27fa8_2
- - memory-allocator=0.1.3=py310h6729b98_0
- - metis=5.1.0=he965462_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=h81bd1dd_0
- - mpfi=1.5.4=h52b28e3_1001
- - mpfr=4.2.1=h4f6b447_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h10d778d_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h5846eda_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h3c5361c_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=h0ab3c2f_1
- - numpy=1.26.4=py310h4bfa8fc_0
- - openblas=0.3.25=openmp_h6794695_0
- - openjdk=22.0.1=h2d185b6_0
- - openjpeg=2.5.2=h7310d3a_0
- - openssl=3.3.1=h87427d6_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=hbcb3906_0
- - pandoc=3.2.1=h694c41f_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h880b76c_0
- - pari=2.15.5=h7ba67ff_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=hbcf498f_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h7634a1b_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h10d778d_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py310h2fdc51f_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=h73e2aa4_0
- - pkg-config=0.29.2=ha3d46e9_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h10d778d_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=ha60d53e_1006
- - pplpy=0.8.9=py310hbe8aec3_1
- - primecount=7.6=ha894c9a_0
- - primecountpy=0.1.0=py310h88cfcbd_4
- - primesieve=11.0=hf0c8a7f_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py310h936d840_0
- - pthread-stubs=0.4=hc929b4f_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py310hb3b189b_0
- - pybind11-global=2.12.0=py310hb3b189b_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyobjc-core=10.3.1=py310h445dc1f_0
- - pyobjc-framework-cocoa=10.3.1=py310h445dc1f_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py310hb372a2b_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.10.14=h00d2728_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py310h5daac23_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.10=4_cp310
- - pythran=0.15.0=py310h076e4b7_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py310h2ec42d9_4
- - pyyaml=6.0.1=py310h6729b98_1
- - pyzmq=26.0.3=py310he0bbd50_0
- - qd=2.3.22=h2beb688_1004
- - qhull=2020.2=h940c156_2
- - r-base=4.3.3=h4648a1f_3
- - r-lattice=0.22_6=r43hb2c329c_0
- - readline=8.2=h9e318b2_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=h0dc2134_0
- - rpds-py=0.18.1=py310h12a1ced_0
- - rpy2=3.5.11=py310r43hf0b6da5_3
- - rw=0.9=h10d778d_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py310h3f1db6d_0
- - send2trash=1.8.3=pyh31c8845_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - sigtool=0.1.3=h88f4db0_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=h0d51a9f_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h28673e1_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hd2b2131_1
- - symmetrica=3.0.1=hf0c8a7f_0
- - sympow=2.023.6=h115ba6a_3
- - sympy=1.12.1=pypyh2585a3b_103
- - tachyon=0.99b6=h3a1d103_1002
- - tapi=1100.0.11=h9ce4665_0
- - tar=1.34=hcb2f6ea_1
- - tbb=2021.12.0=h3c5361c_1
- - terminado=0.18.1=pyh31c8845_0
- - texinfo=7.0=pl5321hc47821c_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h1abcd95_1
- - tktable=2.10=hba9d6f1_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py310h936d840_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py310h2ec42d9_0
- - unicodedata2=15.1.0=py310h6729b98_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=h0dc2134_0
- - xorg-libxdmcp=1.1.3=h35c211d_0
- - xz=5.2.6=h775f41a_0
- - yaml=0.2.5=h0d85af4_2
- - zeromq=4.3.5=hde137ed_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h87427d6_1
- - zstd=1.5.6=h915ae27_0
diff --git a/src/environment-3.10-macos.yml b/src/environment-3.10-macos.yml
deleted file mode 100644
index 87692b1e2ee..00000000000
--- a/src/environment-3.10-macos.yml
+++ /dev/null
@@ -1,425 +0,0 @@
-# Generated by conda-lock.
-# platform: osx-arm64
-# input_hash: fce4b9b5cdb20ebb2d93612fa27b4d6584379772c37a8cccd6c2390e2ce5f3b1
-
-channels:
- - conda-forge
-dependencies:
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py310h2aa6e3c_4
- - arpack=3.9.1=nompi_h593882a_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321hcd07c0c_1
- - automake=1.16.5=pl5321hce30654_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h3422bc3_0
- - bdw-gc=8.0.6=hc021e02_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_osxarm64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=hca5e981_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=hb547adb_1
- - brotli-bin=1.1.0=hb547adb_1
- - brotli-python=1.1.0=py310h1253130_1
- - bwidget=1.9.14=hce30654_1
- - bzip2=1.0.8=h93a5062_5
- - c-ares=1.28.1=h93a5062_0
- - c-compiler=1.7.0=h6aa9301_1
- - ca-certificates=2024.6.2=hf0a4a13_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=hc6c324b_2
- - cctools=986=h4faf515_0
- - cctools_osx-arm64=986=h62378fb_0
- - cddlib=1!0.94m=h6d7a090_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py310hdcd7c05_0
- - chardet=5.2.0=py310hbe9552e_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - clang=16.0.6=default_h095aff0_8
- - clang-16=16.0.6=default_hb63da90_8
- - clang_impl_osx-arm64=16.0.6=hc421ffc_16
- - clang_osx-arm64=16.0.6=h54d7cd3_16
- - clangxx=16.0.6=default_h095aff0_8
- - clangxx_impl_osx-arm64=16.0.6=hcd7bac0_16
- - clangxx_osx-arm64=16.0.6=h54d7cd3_16
- - cliquer=1.22=h93a5062_1
- - cmake=3.29.6=had79d8f_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py310hbe9552e_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compiler-rt=16.0.6=h3808999_2
- - compiler-rt_osx-arm64=16.0.6=h3808999_2
- - compilers=1.7.0=hce30654_1
- - contourpy=1.2.1=py310h21239e6_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=h653d890_0
- - cvxopt=1.3.2=py310h7e4e7d1_2
- - cxx-compiler=1.7.0=h2ffa867_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py310h5e3d6bc_0
- - cysignals=1.11.2=py310hfd3b3fe_3
- - cython=3.0.10=py310h692a8b6_0
- - debugpy=1.8.1=py310h692a8b6_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=h9397a75_1203
- - ecl=23.9.9=h1d9728a_0
- - eclib=20231212=h7f07de4_0
- - ecm=7.0.5=h41d338b_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=hebf3989_0
- - fflas-ffpack=2.5.0=h4bc3318_0
- - fftw=3.3.10=nompi_h6637ab6_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h82840c6_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py310ha6dd24b_0
- - fortran-compiler=1.7.0=hafb19e3_1
- - fplll=5.4.5=hb7d509d_0
- - fpylll=0.6.1=py310hd9be144_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=hadb7bae_2
- - fribidi=1.0.10=h27ca646_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=he8f4e70_3
- - gap-defaults=4.12.2=hce30654_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gengetopt=2.23=hbdafb3b_0
- - gettext=0.22.5=h8fbad5d_2
- - gettext-tools=0.22.5=h8fbad5d_2
- - gf2x=1.3.0=hdaa854c_2
- - gfan=0.6.2=hec08f5c_1003
- - gfortran=12.3.0=h1ca8e4b_1
- - gfortran_impl_osx-arm64=12.3.0=h53ed385_3
- - gfortran_osx-arm64=12.3.0=h57527a5_1
- - giac=1.9.0.21=h1c96721_1
- - giflib=5.2.2=h93a5062_0
- - givaro=4.2.0=h018886a_0
- - glpk=5.0=h6d7a090_0
- - gmp=6.3.0=h7bae524_2
- - gmpy2=2.1.5=py310h3bc658a_1
- - graphite2=1.3.13=hebf3989_1003
- - gsl=2.7=h6e638da_0
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h1836168_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=hc8870d7_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=h762ac30_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=hd73f12c_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh57ce528_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isl=0.26=imath32_h347afa1_101
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=hce30654_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py310hbe9552e_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py310hbe9552e_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py310h38f39d4_1
- - krb5=1.21.2=h92f50d5_0
- - lcalc=2.0.5=h4a402bc_2
- - lcms2=2.16=ha0e7c42_0
- - ld64=711=h634c8be_0
- - ld64_osx-arm64=711=ha4bd21c_0
- - lerc=4.0.0=h9a09cb3_0
- - libasprintf=0.22.5=h8fbad5d_2
- - libasprintf-devel=0.22.5=h8fbad5d_2
- - libatomic_ops=7.6.14=h1a8c8d9_0
- - libblas=3.9.0=20_osxarm64_openblas
- - libboost=1.85.0=h17eb2be_2
- - libboost-devel=1.85.0=hf450f58_2
- - libboost-headers=1.85.0=hce30654_2
- - libbraiding=1.2=hb7217d7_0
- - libbrial=1.2.12=h56a29cd_3
- - libbrotlicommon=1.1.0=hb547adb_1
- - libbrotlidec=1.1.0=hb547adb_1
- - libbrotlienc=1.1.0=hb547adb_1
- - libcblas=3.9.0=20_osxarm64_openblas
- - libclang-cpp16=16.0.6=default_hb63da90_8
- - libcurl=8.8.0=h7b6f9a7_0
- - libcxx=17.0.6=h5f092b4_0
- - libdeflate=1.20=h93a5062_0
- - libedit=3.1.20191231=hc8eb9b7_2
- - libev=4.33=h93a5062_2
- - libexpat=2.6.2=hebf3989_0
- - libffi=3.4.2=h3422bc3_5
- - libflint=3.0.1=h28749a5_ntl_100
- - libgd=2.3.3=hfdf3952_9
- - libgettextpo=0.22.5=h8fbad5d_2
- - libgettextpo-devel=0.22.5=h8fbad5d_2
- - libgfortran=5.0.0=13_2_0_hd922786_3
- - libgfortran-devel_osx-arm64=12.3.0=hc62be1c_3
- - libgfortran5=13.2.0=hf226fd6_3
- - libglib=2.80.2=h59d46d9_1
- - libhomfly=1.02r6=h93a5062_1
- - libhwloc=2.10.0=default_h7685b71_1001
- - libiconv=1.17=h0d3ecfb_2
- - libintl=0.22.5=h8fbad5d_2
- - libintl-devel=0.22.5=h8fbad5d_2
- - libjpeg-turbo=3.0.0=hb547adb_1
- - liblapack=3.9.0=20_osxarm64_openblas
- - liblapacke=3.9.0=20_osxarm64_openblas
- - libllvm16=16.0.6=haab561b_3
- - libnghttp2=1.58.0=ha4dd798_1
- - libopenblas=0.3.25=openmp_h6c19121_0
- - libpng=1.6.43=h091b4b1_0
- - libsodium=1.0.18=h27ca646_1
- - libsqlite=3.46.0=hfb93653_0
- - libssh2=1.11.0=h7a5bd25_0
- - libtiff=4.6.0=h07db509_3
- - libtool=2.4.7=hb7217d7_0
- - libuv=1.48.0=h93a5062_0
- - libwebp=1.4.0=h54798ee_0
- - libwebp-base=1.4.0=h93a5062_0
- - libxcb=1.16=hf2054a2_0
- - libxml2=2.12.7=ha661575_1
- - libzlib=1.3.1=hfb2fe0b_1
- - linbox=1.7.0=h3afee3a_0
- - llvm-openmp=18.1.8=hde57baf_0
- - llvm-tools=16.0.6=haab561b_3
- - lrcalc=2.1=hebf3989_6
- - m4=1.4.18=h642e427_1001
- - m4ri=20140914=hc97c1ff_1006
- - m4rie=20150908=h22b9e9d_1002
- - make=4.3=he57ea6c_1
- - markupsafe=2.1.5=py310hd125d64_0
- - mathjax=3.2.2=hce30654_0
- - matplotlib=3.8.4=py310hb6292c7_2
- - matplotlib-base=3.8.4=py310hedb7998_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h2bbcd85_2
- - memory-allocator=0.1.3=py310h2aa6e3c_0
- - meson=1.5.2=pyhd8ed1ab_0
- - meson-python=0.15.0=pyh0c530f3_0
- - metis=5.1.0=h13dd4ca_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=h91ba8db_0
- - mpfi=1.5.4=hbde5f5b_1001
- - mpfr=4.2.1=h41d338b_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h93a5062_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=hb89a1cb_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h420ef59_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=hbb3f309_1
- - numpy=1.26.4=py310hd45542a_0
- - openblas=0.3.25=openmp_h55c453e_0
- - openjdk=22.0.1=hbeb2e11_0
- - openjpeg=2.5.2=h9f1df11_0
- - openssl=3.3.1=hfb2fe0b_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=h27ca646_0
- - pandoc=3.2.1=hce30654_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h5cb9fbc_0
- - pari=2.15.5=h4f2304c_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=h27ca646_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h297a79d_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h4614cfb_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py310h01af8b1_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=hebf3989_0
- - pkg-config=0.29.2=hab62308_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h93a5062_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h8b147cf_1006
- - pplpy=0.8.9=py310hc3af9bb_1
- - primecount=7.6=hb6e4faa_0
- - primecountpy=0.1.0=py310h38f39d4_4
- - primesieve=11.0=hb7217d7_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py310ha6dd24b_0
- - pthread-stubs=0.4=h27ca646_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py310h21239e6_0
- - pybind11-global=2.12.0=py310h21239e6_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyobjc-core=10.3.1=py310h4b7648a_0
- - pyobjc-framework-cocoa=10.3.1=py310h4b7648a_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py310hd125d64_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.10.14=h2469fbe_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py310h692a8b6_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.10=4_cp310
- - pythran=0.15.0=py310h1359cc7_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py310hbe9552e_4
- - pyyaml=6.0.1=py310h2aa6e3c_1
- - pyzmq=26.0.3=py310h16e08c9_0
- - qd=2.3.22=hbec66e7_1004
- - qhull=2020.2=hc021e02_2
- - r-base=4.3.3=h8112bfe_3
- - r-lattice=0.22_6=r43hd2d937b_0
- - readline=8.2=h92ec313_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=hb547adb_0
- - rpds-py=0.18.1=py310h947b723_0
- - rpy2=3.5.11=py310r43h280b8fa_3
- - rw=0.9=h93a5062_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py310h2b794db_0
- - send2trash=1.8.3=pyh31c8845_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - sigtool=0.1.3=h44b9a77_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=hb460b52_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h5838104_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hf6fcff2_1
- - symmetrica=3.0.1=hb7217d7_0
- - sympow=2.023.6=hb0babe8_3
- - sympy=1.12.1=pypyh2585a3b_103
- - tachyon=0.99b6=hb8a568e_1002
- - tapi=1100.0.11=he4954df_0
- - tar=1.34=h7cb298e_1
- - tbb=2021.12.0=h420ef59_1
- - terminado=0.18.1=pyh31c8845_0
- - texinfo=7.0=pl5321h9ea1dce_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h5083fa2_1
- - tktable=2.10=h1e387b8_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py310ha6dd24b_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py310hbe9552e_0
- - unicodedata2=15.1.0=py310h2aa6e3c_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=hb547adb_0
- - xorg-libxdmcp=1.1.3=h27ca646_0
- - xz=5.2.6=h57fd34a_0
- - yaml=0.2.5=h3422bc3_2
- - zeromq=4.3.5=hcc0f68c_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=hfb2fe0b_1
- - zstd=1.5.6=hb46c0d2_0
diff --git a/src/environment-3.11-linux-aarch64.yml b/src/environment-3.11-linux-aarch64.yml
deleted file mode 100644
index 87cee9aad2a..00000000000
--- a/src/environment-3.11-linux-aarch64.yml
+++ /dev/null
@@ -1,434 +0,0 @@
-# Generated by conda-lock.
-# platform: linux-aarch64
-# input_hash: 53cce21c9c8a4b11b84e96405de20cc945c84809a7997b8508761fc9ca727ee0
-
-channels:
- - conda-forge
-dependencies:
- - _openmp_mutex=4.5=2_kmp_llvm
- - _r-mutex=1.0.1=anacondar_1
- - _sysroot_linux-aarch64_curr_repodata_hack=4=h57d6b7b_14
- - alabaster=0.7.16=pyhd8ed1ab_0
- - alsa-lib=1.2.11=h31becfc_1
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py311hcd402e7_4
- - arpack=3.9.1=nompi_hd363cd0_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321h2148fe1_1
- - automake=1.16.5=pl5321h8af1aa0_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=hf897c2e_0
- - bdw-gc=8.0.6=hd62202e_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - binutils=2.40=hf1166c9_7
- - binutils_impl_linux-aarch64=2.40=hf54a868_7
- - binutils_linux-aarch64=2.40=h1f91aba_9
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_linuxaarch64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=ha990451_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=h31becfc_1
- - brotli-bin=1.1.0=h31becfc_1
- - brotli-python=1.1.0=py311h8715677_1
- - bwidget=1.9.14=h8af1aa0_1
- - bzip2=1.0.8=h31becfc_5
- - c-ares=1.28.1=h31becfc_0
- - c-compiler=1.7.0=h31becfc_1
- - ca-certificates=2024.6.2=hcefe29a_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=h5c54ea9_2
- - cddlib=1!0.94m=h719063d_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py311h7963103_0
- - chardet=5.2.0=py311hfecb2dc_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - cliquer=1.22=h31becfc_1
- - cmake=3.29.6=h7042e5d_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py311hec3470c_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compilers=1.7.0=h8af1aa0_1
- - contourpy=1.2.1=py311h098ece5_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=h7daf2e0_0
- - cvxopt=1.3.2=py311ha095bbf_2
- - cxx-compiler=1.7.0=h2a328a1_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py311h5ab95f0_0
- - cysignals=1.11.2=py311h644d908_3
- - cython=3.0.10=py311h8715677_0
- - debugpy=1.8.1=py311h8715677_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=hb12102e_1203
- - ecl=23.9.9=h6475f26_0
- - eclib=20231212=he26bab5_0
- - ecm=7.0.5=ha2d0fc4_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h2f0025b_0
- - fflas-ffpack=2.5.0=h503e619_0
- - fftw=3.3.10=nompi_h020dacd_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=ha9a116f_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py311hf4892ed_0
- - fortran-compiler=1.7.0=h7048d53_1
- - fplll=5.4.5=hb3a790e_0
- - fpylll=0.6.1=py311h5d3d69a_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=hf0a5ef3_2
- - fribidi=1.0.10=hb9de7d4_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=h597289e_3
- - gap-defaults=4.12.2=h8af1aa0_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gcc=12.3.0=hdb0cc85_13
- - gcc_impl_linux-aarch64=12.3.0=h3d98823_13
- - gcc_linux-aarch64=12.3.0=ha52a6ea_9
- - gengetopt=2.23=h01db608_0
- - gf2x=1.3.0=h1b3b3a3_2
- - gfan=0.6.2=h5f589ec_1003
- - gfortran=12.3.0=hdb0cc85_13
- - gfortran_impl_linux-aarch64=12.3.0=h97ebfd2_13
- - gfortran_linux-aarch64=12.3.0=ha7b8e4b_9
- - giac=1.9.0.21=h04922a4_1
- - giflib=5.2.2=h31becfc_0
- - givaro=4.2.0=h364d21b_0
- - glpk=5.0=h66325d0_0
- - gmp=6.3.0=h0a1ffab_2
- - gmpy2=2.1.5=py311h3c136a7_1
- - graphite2=1.3.13=h2f0025b_1003
- - gsl=2.7=h294027d_0
- - gxx=12.3.0=hdb0cc85_13
- - gxx_impl_linux-aarch64=12.3.0=hba91e99_13
- - gxx_linux-aarch64=12.3.0=h9d1f256_9
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h9812418_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=h787c7f5_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=h197073e_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h15043fe_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh3099207_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=h8af1aa0_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py311hec3470c_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py311hec3470c_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kernel-headers_linux-aarch64=4.18.0=h5b4a56d_14
- - keyutils=1.6.1=h4e544f5_0
- - kiwisolver=1.4.5=py311h0d5d7b0_1
- - krb5=1.21.2=hc419048_0
- - lcalc=2.0.5=he588f68_2
- - lcms2=2.16=h922389a_0
- - ld_impl_linux-aarch64=2.40=h9fc2d93_7
- - lerc=4.0.0=h4de3ea5_0
- - libatomic_ops=7.6.14=h4e544f5_0
- - libblas=3.9.0=20_linuxaarch64_openblas
- - libboost=1.85.0=hb41fec8_2
- - libboost-devel=1.85.0=h37bb5a9_2
- - libboost-headers=1.85.0=h8af1aa0_2
- - libbraiding=1.2=hd600fc2_0
- - libbrial=1.2.12=h9429f74_3
- - libbrotlicommon=1.1.0=h31becfc_1
- - libbrotlidec=1.1.0=h31becfc_1
- - libbrotlienc=1.1.0=h31becfc_1
- - libcblas=3.9.0=20_linuxaarch64_openblas
- - libcups=2.3.3=h405e4a8_4
- - libcurl=8.8.0=h4e8248e_0
- - libdeflate=1.20=h31becfc_0
- - libedit=3.1.20191231=he28a2e2_2
- - libev=4.33=h31becfc_2
- - libexpat=2.6.2=h2f0025b_0
- - libffi=3.4.2=h3557bc0_5
- - libflint=3.0.1=hc392af7_ntl_100
- - libgcc-devel_linux-aarch64=12.3.0=h6144e03_113
- - libgcc-ng=13.2.0=he277a41_13
- - libgd=2.3.3=hcd22fd5_9
- - libgfortran-ng=13.2.0=he9431aa_13
- - libgfortran5=13.2.0=h2af0866_13
- - libglib=2.80.2=haee52c6_1
- - libgomp=13.2.0=he277a41_13
- - libhomfly=1.02r6=h31becfc_1
- - libhwloc=2.10.0=default_h3030c0e_1001
- - libiconv=1.17=h31becfc_2
- - libjpeg-turbo=3.0.0=h31becfc_1
- - liblapack=3.9.0=20_linuxaarch64_openblas
- - liblapacke=3.9.0=20_linuxaarch64_openblas
- - libnghttp2=1.58.0=hb0e430d_1
- - libnsl=2.0.1=h31becfc_0
- - libopenblas=0.3.25=pthreads_h5a5ec62_0
- - libpng=1.6.43=h194ca79_0
- - libsanitizer=12.3.0=h57e2e72_13
- - libsodium=1.0.18=hb9de7d4_1
- - libsqlite=3.46.0=hf51ef55_0
- - libssh2=1.11.0=h492db2e_0
- - libstdcxx-devel_linux-aarch64=12.3.0=h6144e03_113
- - libstdcxx-ng=13.2.0=h3f4de04_13
- - libtiff=4.6.0=hf980d43_3
- - libtool=2.4.7=h4de3ea5_0
- - libuuid=2.38.1=hb4cce97_0
- - libuv=1.48.0=h31becfc_0
- - libwebp=1.4.0=h8b4e01b_0
- - libwebp-base=1.4.0=h31becfc_0
- - libxcb=1.16=h7935292_0
- - libxcrypt=4.4.36=h31becfc_1
- - libxml2=2.12.7=h49dc7a2_1
- - libzlib=1.3.1=h68df207_1
- - linbox=1.7.0=h681a5ee_0
- - llvm-openmp=18.1.8=hb063fc5_0
- - lrcalc=2.1=h2f0025b_6
- - m4=1.4.18=h516909a_1001
- - m4ri=20140914=hedfd65a_1006
- - m4rie=20150908=hf0a5ef3_1002
- - make=4.3=h309ac5b_1
- - markupsafe=2.1.5=py311hc8f2f60_0
- - mathjax=3.2.2=h8af1aa0_0
- - matplotlib=3.8.4=py311hfecb2dc_2
- - matplotlib-base=3.8.4=py311h55059f0_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h6475f26_2
- - memory-allocator=0.1.3=py311hcd402e7_0
- - metis=5.1.0=h2f0025b_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=hf4c8f4c_0
- - mpfi=1.5.4=h846f343_1001
- - mpfr=4.2.1=ha2d0fc4_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h31becfc_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h0425590_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h70be974_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=h0d7519b_1
- - numpy=1.26.4=py311h69ead2a_0
- - openblas=0.3.25=pthreads_h339cbfa_0
- - openjdk=22.0.1=h3d4cd67_0
- - openjpeg=2.5.2=h0d9d63b_0
- - openssl=3.3.1=h68df207_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=hb9de7d4_0
- - pandoc=3.2.1=h8af1aa0_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h399c48b_0
- - pari=2.15.5=h169c2a7_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=hf897c2e_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h070dd5b_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h31becfc_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py311h54289d1_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=h2f0025b_0
- - pkg-config=0.29.2=hb9de7d4_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h31becfc_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h984aac9_1006
- - pplpy=0.8.9=py311ha3770eb_1
- - primecount=7.9=hd600fc2_0
- - primecountpy=0.1.0=py311h098ece5_4
- - primesieve=11.1=h2f0025b_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py311hf4892ed_0
- - pthread-stubs=0.4=hb9de7d4_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py311h098ece5_0
- - pybind11-global=2.12.0=py311h098ece5_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py311hc8f2f60_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.11.9=hddfb980_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py311h8715677_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.11=4_cp311
- - pythran=0.15.0=py311hec5c23b_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py311hec3470c_4
- - pyyaml=6.0.1=py311hcd402e7_1
- - pyzmq=26.0.3=py311hb8d4657_0
- - qd=2.3.22=h05efe27_1004
- - qhull=2020.2=hd62202e_2
- - r-base=4.3.3=h7f20121_3
- - r-lattice=0.22_6=r43h25e906a_0
- - readline=8.2=h8fc344f_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=h31becfc_0
- - rpds-py=0.18.1=py311h949f54a_0
- - rpy2=3.5.11=py311r43hf13da56_3
- - rw=0.9=h31becfc_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.3=py311h69ead2a_1
- - sed=4.8=ha0d5d3d_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=hbe76a8a_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=hdc7ab3c_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=h3944111_1
- - symmetrica=3.0.1=hd600fc2_0
- - sympow=2.023.6=h157afb5_3
- - sympy=1.12.1=pypyh2585a3b_103
- - sysroot_linux-aarch64=2.17=h5b4a56d_14
- - tachyon=0.99b6=ha0bfc61_1002
- - tar=1.34=h048efde_0
- - tbb=2021.12.0=h70be974_1
- - terminado=0.18.1=pyh0d859eb_0
- - texinfo=7.0=pl5321h17f021e_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h194ca79_0
- - tktable=2.10=h52f7bd3_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py311h323e239_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py311hec3470c_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-fixesproto=5.0=h3557bc0_1002
- - xorg-inputproto=2.3.2=h3557bc0_1002
- - xorg-kbproto=1.0.7=h3557bc0_1002
- - xorg-libice=1.1.1=h7935292_0
- - xorg-libsm=1.2.4=h5a01bc2_0
- - xorg-libx11=1.8.9=h08be655_1
- - xorg-libxau=1.0.11=h31becfc_0
- - xorg-libxdmcp=1.1.3=h3557bc0_0
- - xorg-libxext=1.3.4=h2a766a3_2
- - xorg-libxfixes=5.0.3=h3557bc0_1004
- - xorg-libxi=1.7.10=h3557bc0_0
- - xorg-libxrender=0.9.11=h7935292_0
- - xorg-libxt=1.3.0=h7935292_1
- - xorg-libxtst=1.2.3=hf897c2e_1002
- - xorg-recordproto=1.14.2=hf897c2e_1002
- - xorg-renderproto=0.11.1=h3557bc0_1002
- - xorg-xextproto=7.3.0=h2a766a3_1003
- - xorg-xproto=7.0.31=h3557bc0_1007
- - xz=5.2.6=h9cdd2b7_0
- - yaml=0.2.5=hf897c2e_2
- - zeromq=4.3.5=h28faeed_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h68df207_1
- - zstd=1.5.6=h02f22dd_0
diff --git a/src/environment-3.11-linux.yml b/src/environment-3.11-linux.yml
deleted file mode 100644
index 7fee7689a28..00000000000
--- a/src/environment-3.11-linux.yml
+++ /dev/null
@@ -1,484 +0,0 @@
-# Generated by conda-lock.
-# platform: linux-64
-# input_hash: 042b3b9a5ce5e44ed6334284078d156e424e41f02852c8c6a155cb9b4e620e60
-
-channels:
- - conda-forge
-dependencies:
- - _libgcc_mutex=0.1=conda_forge
- - _openmp_mutex=4.5=2_kmp_llvm
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - alsa-lib=1.2.12=h4ab18f5_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py311h459d7ec_4
- - arpack=3.9.1=nompi_h77f6705_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attr=2.5.1=h166bdaf_1
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321h2b4cb7a_1
- - automake=1.16.5=pl5321ha770c72_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h7f98852_0
- - bdw-gc=8.0.6=h4bd325d_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - binutils=2.40=h4852527_7
- - binutils_impl_linux-64=2.40=ha1999f0_7
- - binutils_linux-64=2.40=hb3c18ed_9
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_linux64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=h44aadfe_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=hd590300_1
- - brotli-bin=1.1.0=hd590300_1
- - brotli-python=1.1.0=py311hb755f60_1
- - bwidget=1.9.14=ha770c72_1
- - bzip2=1.0.8=hd590300_5
- - c-ares=1.28.1=hd590300_0
- - c-compiler=1.7.0=hd590300_1
- - ca-certificates=2024.6.2=hbcca054_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=hbb29018_2
- - cddlib=1!0.94m=h9202a9a_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py311hb3a22ac_0
- - chardet=5.2.0=py311h38be061_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - cliquer=1.22=hd590300_1
- - cmake=3.29.6=hcafd917_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py311h38be061_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compilers=1.7.0=ha770c72_1
- - contourpy=1.2.1=py311h9547e67_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=he654da7_0
- - cvxopt=1.3.2=py311hec6cc1f_2
- - cxx-compiler=1.7.0=h00ab1b0_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py311hd2352ae_0
- - cysignals=1.11.2=py311h82528dc_3
- - cython=3.0.10=py311hb755f60_0
- - dbus=1.13.6=h5008d03_3
- - debugpy=1.8.1=py311hb755f60_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=hd9d9efa_1203
- - ecl=23.9.9=hed6455c_0
- - eclib=20231212=h96f522a_0
- - ecm=7.0.5=h9458935_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h59595ed_0
- - fflas-ffpack=2.5.0=h4f9960b_0
- - fftw=3.3.10=nompi_hf1063bd_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h14ed4e7_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py311h331c9d8_0
- - fortran-compiler=1.7.0=heb67821_1
- - fplll=5.4.5=h384768b_0
- - fpylll=0.6.1=py311hcfae7cf_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=h267a509_2
- - fribidi=1.0.10=h36c2ea0_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=he9a28a4_3
- - gap-defaults=4.12.2=ha770c72_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gcc=12.3.0=h915e2ae_13
- - gcc_impl_linux-64=12.3.0=h58ffeeb_13
- - gcc_linux-64=12.3.0=h9528a6a_9
- - gengetopt=2.23=h9c3ff4c_0
- - gettext=0.22.5=h59595ed_2
- - gettext-tools=0.22.5=h59595ed_2
- - gf2x=1.3.0=ha476b99_2
- - gfan=0.6.2=hb86e20a_1003
- - gfortran=12.3.0=h915e2ae_13
- - gfortran_impl_linux-64=12.3.0=h8f2110c_13
- - gfortran_linux-64=12.3.0=h5877db1_9
- - giac=1.9.0.21=h673759e_1
- - giflib=5.2.2=hd590300_0
- - givaro=4.2.0=hb789bce_0
- - glib=2.80.2=h8a4344b_1
- - glib-tools=2.80.2=h73ef956_1
- - glpk=5.0=h445213a_0
- - gmp=6.3.0=hac33072_2
- - gmpy2=2.1.5=py311hc4f1f91_1
- - graphite2=1.3.13=h59595ed_1003
- - gsl=2.7=he838d99_0
- - gst-plugins-base=1.24.5=hbaaba92_0
- - gstreamer=1.24.5=haf2f30d_0
- - gxx=12.3.0=h915e2ae_13
- - gxx_impl_linux-64=12.3.0=h2a574ab_13
- - gxx_linux-64=12.3.0=ha28b414_9
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=hfac3d4d_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=h59595ed_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=hef0740d_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h623f65a_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh3099207_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=ha770c72_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py311h38be061_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py311h38be061_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kernel-headers_linux-64=2.6.32=he073ed8_17
- - keyutils=1.6.1=h166bdaf_0
- - kiwisolver=1.4.5=py311h9547e67_1
- - krb5=1.21.2=h659d440_0
- - lame=3.100=h166bdaf_1003
- - lcalc=2.0.5=h5aac1b6_2
- - lcms2=2.16=hb7c19ff_0
- - ld_impl_linux-64=2.40=hf3520f5_7
- - lerc=4.0.0=h27087fc_0
- - libasprintf=0.22.5=h661eb56_2
- - libasprintf-devel=0.22.5=h661eb56_2
- - libatomic_ops=7.6.14=h166bdaf_0
- - libblas=3.9.0=20_linux64_openblas
- - libboost=1.85.0=hba137d9_2
- - libboost-devel=1.85.0=h00ab1b0_2
- - libboost-headers=1.85.0=ha770c72_2
- - libbraiding=1.2=hcb278e6_0
- - libbrial=1.2.12=h76af697_3
- - libbrotlicommon=1.1.0=hd590300_1
- - libbrotlidec=1.1.0=hd590300_1
- - libbrotlienc=1.1.0=hd590300_1
- - libcap=2.69=h0f662aa_0
- - libcblas=3.9.0=20_linux64_openblas
- - libclang-cpp15=15.0.7=default_h127d8a8_5
- - libclang13=18.1.8=default_h6ae225f_0
- - libcups=2.3.3=h4637d8d_4
- - libcurl=8.8.0=hca28451_0
- - libdeflate=1.20=hd590300_0
- - libedit=3.1.20191231=he28a2e2_2
- - libev=4.33=hd590300_2
- - libevent=2.1.12=hf998b51_1
- - libexpat=2.6.2=h59595ed_0
- - libffi=3.4.2=h7f98852_5
- - libflac=1.4.3=h59595ed_0
- - libflint=3.0.1=h5f2e117_ntl_100
- - libgcc-devel_linux-64=12.3.0=h6b66f73_113
- - libgcc-ng=13.2.0=h77fa898_13
- - libgcrypt=1.10.3=hd590300_0
- - libgd=2.3.3=h119a65a_9
- - libgettextpo=0.22.5=h59595ed_2
- - libgettextpo-devel=0.22.5=h59595ed_2
- - libgfortran-ng=13.2.0=h69a702a_13
- - libgfortran5=13.2.0=h3d2ce59_13
- - libglib=2.80.2=h8a4344b_1
- - libgomp=13.2.0=h77fa898_13
- - libgpg-error=1.49=h4f305b6_0
- - libhomfly=1.02r6=hd590300_1
- - libhwloc=2.10.0=default_h5622ce7_1001
- - libiconv=1.17=hd590300_2
- - libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=20_linux64_openblas
- - liblapacke=3.9.0=20_linux64_openblas
- - libllvm15=15.0.7=hb3ce162_4
- - libllvm18=18.1.8=hc9dba70_0
- - libnghttp2=1.58.0=h47da74e_1
- - libnsl=2.0.1=hd590300_0
- - libogg=1.3.5=h4ab18f5_0
- - libopenblas=0.3.25=pthreads_h413a1c8_0
- - libopus=1.3.1=h7f98852_1
- - libpng=1.6.43=h2797004_0
- - libpq=16.3=ha72fbe1_0
- - libsanitizer=12.3.0=hb8811af_13
- - libsndfile=1.2.2=hc60ed4a_1
- - libsodium=1.0.18=h36c2ea0_1
- - libsqlite=3.46.0=hde9e2c9_0
- - libssh2=1.11.0=h0841786_0
- - libstdcxx-devel_linux-64=12.3.0=h6b66f73_113
- - libstdcxx-ng=13.2.0=hc0a3c3a_13
- - libsystemd0=255=h3516f8a_1
- - libtiff=4.6.0=h1dd3fc0_3
- - libtool=2.4.7=h27087fc_0
- - libuuid=2.38.1=h0b41bf4_0
- - libuv=1.48.0=hd590300_0
- - libvorbis=1.3.7=h9c3ff4c_0
- - libwebp=1.4.0=h2c329e2_0
- - libwebp-base=1.4.0=hd590300_0
- - libxcb=1.16=hd590300_0
- - libxcrypt=4.4.36=hd590300_1
- - libxkbcommon=1.7.0=h2c5496b_1
- - libxml2=2.12.7=hc051c1a_1
- - libzlib=1.3.1=h4ab18f5_1
- - linbox=1.7.0=ha329b40_0
- - llvm-openmp=18.1.8=hf5423f3_0
- - lrcalc=2.1=h59595ed_6
- - lz4-c=1.9.4=hcb278e6_0
- - m4=1.4.18=h516909a_1001
- - m4ri=20140914=hae5d5c5_1006
- - m4rie=20150908=h267a509_1002
- - make=4.3=hd18ef5c_1
- - markupsafe=2.1.5=py311h459d7ec_0
- - mathjax=3.2.2=ha770c72_0
- - matplotlib=3.8.4=py311h38be061_2
- - matplotlib-base=3.8.4=py311ha4ca890_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=hed6455c_2
- - memory-allocator=0.1.3=py311h459d7ec_0
- - meson=1.5.2=pyhd8ed1ab_0
- - meson-python=0.15.0=pyh0c530f3_0
- - metis=5.1.0=h59595ed_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=hfe3b2da_0
- - mpfi=1.5.4=h9f54685_1001
- - mpfr=4.2.1=h9458935_1
- - mpg123=1.32.6=h59595ed_0
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - mysql-common=8.3.0=hf1915f5_4
- - mysql-libs=8.3.0=hca2cd23_4
- - nauty=2.8.8=hd590300_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h59595ed_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h297d8ca_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - nspr=4.35=h27087fc_0
- - nss=3.101=h593d115_0
- - ntl=11.4.3=hef3c4d3_1
- - numpy=1.26.4=py311h64a7726_0
- - openblas=0.3.25=pthreads_h7a3da1a_0
- - openjdk=21.0.2=haa376d0_0
- - openjpeg=2.5.2=h488ebb8_0
- - openssl=3.3.1=h4ab18f5_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=h36c2ea0_0
- - pandoc=3.2.1=ha770c72_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h84a9a3c_0
- - pari=2.15.5=h4d4ae9b_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=h7f98852_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h0f59acf_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_hd590300_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py311h82a398c_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.2=h59595ed_0
- - pkg-config=0.29.2=h36c2ea0_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=hd590300_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h6ec01c2_1006
- - pplpy=0.8.9=py311ha9f9f00_1
- - primecount=7.9=hcb278e6_0
- - primecountpy=0.1.0=py311h9547e67_4
- - primesieve=11.1=h59595ed_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py311h331c9d8_0
- - pthread-stubs=0.4=h36c2ea0_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pulseaudio-client=17.0=hb77b528_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py311h9547e67_0
- - pybind11-global=2.12.0=py311h9547e67_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyqt=5.15.9=py311hf0fb5b6_5
- - pyqt5-sip=12.12.2=py311hb755f60_5
- - pyrsistent=0.20.0=py311h459d7ec_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.11.9=hb806964_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py311hb755f60_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.11=4_cp311
- - pythran=0.15.0=py311h92ebd52_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py311h38be061_4
- - pyyaml=6.0.1=py311h459d7ec_1
- - pyzmq=26.0.3=py311h08a0b41_0
- - qd=2.3.22=h2cc385e_1004
- - qhull=2020.2=h4bd325d_2
- - qt-main=5.15.8=ha2b5568_22
- - r-base=4.3.3=he2d9a6e_3
- - r-lattice=0.22_6=r43h57805ef_0
- - readline=8.2=h8228510_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=hd590300_0
- - rpds-py=0.18.1=py311h5ecf98a_0
- - rpy2=3.5.11=py311r43h1f0f07a_3
- - rw=0.9=hd590300_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py311h64a7726_0
- - sed=4.8=he412f7d_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=h33f5c3f_1
- - sip=6.7.12=py311hb755f60_0
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h6d4b2fc_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hf4753ba_1
- - symmetrica=3.0.1=hcb278e6_0
- - sympow=2.023.6=hc6ab17c_3
- - sympy=1.12.1=pypyh2585a3b_103
- - sysroot_linux-64=2.12=he073ed8_17
- - tachyon=0.99b6=hba7d16a_1002
- - tar=1.34=hb2e2bae_1
- - tbb=2021.12.0=h297d8ca_1
- - terminado=0.18.1=pyh0d859eb_0
- - texinfo=7.0=pl5321h0f457ee_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=noxft_h4845f30_101
- - tktable=2.10=h8bc8fbc_6
- - toml=0.10.2=pyhd8ed1ab_0
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py311h331c9d8_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py311h38be061_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xcb-util=0.4.1=hb711507_2
- - xcb-util-image=0.4.0=hb711507_2
- - xcb-util-keysyms=0.4.1=hb711507_0
- - xcb-util-renderutil=0.3.10=hb711507_0
- - xcb-util-wm=0.4.2=hb711507_0
- - xkeyboard-config=2.42=h4ab18f5_0
- - xorg-fixesproto=5.0=h7f98852_1002
- - xorg-inputproto=2.3.2=h7f98852_1002
- - xorg-kbproto=1.0.7=h7f98852_1002
- - xorg-libice=1.1.1=hd590300_0
- - xorg-libsm=1.2.4=h7391055_0
- - xorg-libx11=1.8.9=hb711507_1
- - xorg-libxau=1.0.11=hd590300_0
- - xorg-libxdmcp=1.1.3=h7f98852_0
- - xorg-libxext=1.3.4=h0b41bf4_2
- - xorg-libxfixes=5.0.3=h7f98852_1004
- - xorg-libxi=1.7.10=h7f98852_0
- - xorg-libxrender=0.9.11=hd590300_0
- - xorg-libxt=1.3.0=hd590300_1
- - xorg-libxtst=1.2.3=h7f98852_1002
- - xorg-recordproto=1.14.2=h7f98852_1002
- - xorg-renderproto=0.11.1=h7f98852_1002
- - xorg-xextproto=7.3.0=h0b41bf4_1003
- - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
- - xorg-xproto=7.0.31=h7f98852_1007
- - xz=5.2.6=h166bdaf_0
- - yaml=0.2.5=h7f98852_2
- - zeromq=4.3.5=h75354e8_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h4ab18f5_1
- - zstd=1.5.6=ha6fb4c9_0
diff --git a/src/environment-3.11-macos-x86_64.yml b/src/environment-3.11-macos-x86_64.yml
deleted file mode 100644
index d0fc9f07c5c..00000000000
--- a/src/environment-3.11-macos-x86_64.yml
+++ /dev/null
@@ -1,422 +0,0 @@
-# Generated by conda-lock.
-# platform: osx-64
-# input_hash: 2d3e06919a9241aca6e25ca728e3013423030e7220d74f404ad621f0ad0ff5bd
-
-channels:
- - conda-forge
-dependencies:
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py311h2725bcf_4
- - arpack=3.9.1=nompi_hf81eadf_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321hed12c24_1
- - automake=1.16.5=pl5321h694c41f_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h0d85af4_0
- - bdw-gc=8.0.6=h940c156_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_osx64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=h07eb623_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=h0dc2134_1
- - brotli-bin=1.1.0=h0dc2134_1
- - brotli-python=1.1.0=py311hdf8f085_1
- - bwidget=1.9.14=h694c41f_1
- - bzip2=1.0.8=h10d778d_5
- - c-ares=1.28.1=h10d778d_0
- - c-compiler=1.7.0=h282daa2_1
- - ca-certificates=2024.6.2=h8857fd0_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=h9f650ed_2
- - cctools=986=h40f6528_0
- - cctools_osx-64=986=ha1c5b94_0
- - cddlib=1!0.94m=h0f52abe_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py311hc0b63fd_0
- - chardet=5.2.0=py311h6eed73b_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - clang=16.0.6=default_ha3b9224_8
- - clang-16=16.0.6=default_h4c8afb6_8
- - clang_impl_osx-64=16.0.6=h8787910_16
- - clang_osx-64=16.0.6=hb91bd55_16
- - clangxx=16.0.6=default_ha3b9224_8
- - clangxx_impl_osx-64=16.0.6=h6d92fbe_16
- - clangxx_osx-64=16.0.6=hb91bd55_16
- - cliquer=1.22=h10d778d_1
- - cmake=3.29.6=h749d262_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py311h6eed73b_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compiler-rt=16.0.6=ha38d28d_2
- - compiler-rt_osx-64=16.0.6=ha38d28d_2
- - compilers=1.7.0=h694c41f_1
- - contourpy=1.2.1=py311h1d816ee_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=hea67d85_0
- - cvxopt=1.3.2=py311he94735a_2
- - cxx-compiler=1.7.0=h7728843_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py311h4fde0ae_0
- - cysignals=1.11.2=py311h8a58447_3
- - cython=3.0.10=py311hdd0406b_0
- - debugpy=1.8.1=py311hdd0406b_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=h6e329d1_1203
- - ecl=23.9.9=h2b27fa8_0
- - eclib=20231212=h02435c3_0
- - ecm=7.0.5=h4f6b447_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h73e2aa4_0
- - fflas-ffpack=2.5.0=h5898d61_0
- - fftw=3.3.10=nompi_h292e606_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h5bb23bf_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py311h72ae277_0
- - fortran-compiler=1.7.0=h6c2ab21_1
- - fplll=5.4.5=hb7981ad_0
- - fpylll=0.6.1=py311h85fbf69_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=h60636b9_2
- - fribidi=1.0.10=hbcb3906_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=hc16eb5f_3
- - gap-defaults=4.12.2=h694c41f_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gengetopt=2.23=he49afe7_0
- - gettext=0.22.5=h5ff76d1_2
- - gettext-tools=0.22.5=h5ff76d1_2
- - gf2x=1.3.0=hb2a7efb_2
- - gfan=0.6.2=hd793b56_1003
- - gfortran=12.3.0=h2c809b3_1
- - gfortran_impl_osx-64=12.3.0=hc328e78_3
- - gfortran_osx-64=12.3.0=h18f7dce_1
- - giac=1.9.0.21=h92f3f65_1
- - giflib=5.2.2=h10d778d_0
- - givaro=4.2.0=h1b3d6f7_0
- - glpk=5.0=h3cb5acd_0
- - gmp=6.3.0=hf036a51_2
- - gmpy2=2.1.5=py311hab17429_1
- - graphite2=1.3.13=h73e2aa4_1003
- - gsl=2.7=h93259b0_0
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h053f038_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=hf5e326d_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=hde4452d_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h61918c1_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh57ce528_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isl=0.26=imath32_h2e86a7b_101
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.9=h694c41f_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py311h6eed73b_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py311h6eed73b_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py311h5fe6e05_1
- - krb5=1.21.2=hb884880_0
- - lcalc=2.0.5=h547a6ed_2
- - lcms2=2.16=ha2f27b4_0
- - ld64=711=ha02d983_0
- - ld64_osx-64=711=ha20a434_0
- - lerc=4.0.0=hb486fe8_0
- - libasprintf=0.22.5=h5ff76d1_2
- - libasprintf-devel=0.22.5=h5ff76d1_2
- - libatomic_ops=7.6.14=hb7f2c08_0
- - libblas=3.9.0=20_osx64_openblas
- - libboost=1.85.0=h739af76_2
- - libboost-devel=1.85.0=h2b186f8_2
- - libboost-headers=1.85.0=h694c41f_2
- - libbraiding=1.2=hf0c8a7f_0
- - libbrial=1.2.12=h81e9653_3
- - libbrotlicommon=1.1.0=h0dc2134_1
- - libbrotlidec=1.1.0=h0dc2134_1
- - libbrotlienc=1.1.0=h0dc2134_1
- - libcblas=3.9.0=20_osx64_openblas
- - libclang-cpp16=16.0.6=default_h4c8afb6_8
- - libcurl=8.8.0=hf9fcc65_0
- - libcxx=17.0.6=h88467a6_0
- - libdeflate=1.20=h49d49c5_0
- - libedit=3.1.20191231=h0678c8f_2
- - libev=4.33=h10d778d_2
- - libexpat=2.6.2=h73e2aa4_0
- - libffi=3.4.2=h0d85af4_5
- - libflint=3.0.1=h5d15de0_ntl_100
- - libgd=2.3.3=h0dceb68_9
- - libgettextpo=0.22.5=h5ff76d1_2
- - libgettextpo-devel=0.22.5=h5ff76d1_2
- - libgfortran=5.0.0=13_2_0_h97931a8_3
- - libgfortran-devel_osx-64=12.3.0=h0b6f5ec_3
- - libgfortran5=13.2.0=h2873a65_3
- - libglib=2.80.2=h736d271_1
- - libhomfly=1.02r6=h10d778d_1
- - libhwloc=2.10.0=default_h456cccd_1001
- - libiconv=1.17=hd75f5a5_2
- - libintl=0.22.5=h5ff76d1_2
- - libintl-devel=0.22.5=h5ff76d1_2
- - libjpeg-turbo=3.0.0=h0dc2134_1
- - liblapack=3.9.0=20_osx64_openblas
- - liblapacke=3.9.0=20_osx64_openblas
- - libllvm16=16.0.6=hbedff68_3
- - libnghttp2=1.58.0=h64cf6d3_1
- - libopenblas=0.3.25=openmp_hfef2a42_0
- - libpng=1.6.43=h92b6c6a_0
- - libsodium=1.0.18=hbcb3906_1
- - libsqlite=3.46.0=h1b8f9f3_0
- - libssh2=1.11.0=hd019ec5_0
- - libtiff=4.6.0=h129831d_3
- - libtool=2.4.7=hf0c8a7f_0
- - libuv=1.48.0=h67532ce_0
- - libwebp=1.4.0=hc207709_0
- - libwebp-base=1.4.0=h10d778d_0
- - libxcb=1.16=h0dc2134_0
- - libxml2=2.12.7=h3e169fe_1
- - libzlib=1.3.1=h87427d6_1
- - linbox=1.7.0=h7061c92_0
- - llvm-openmp=18.1.8=h15ab845_0
- - llvm-tools=16.0.6=hbedff68_3
- - lrcalc=2.1=h73e2aa4_6
- - m4=1.4.18=haf1e3a3_1001
- - m4ri=20140914=hd82a5f3_1006
- - m4rie=20150908=hc616cfc_1002
- - make=4.3=h22f3db7_1
- - markupsafe=2.1.5=py311he705e18_0
- - mathjax=3.2.2=h694c41f_0
- - matplotlib=3.8.4=py311h6eed73b_2
- - matplotlib-base=3.8.4=py311hff79762_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h2b27fa8_2
- - memory-allocator=0.1.3=py311h2725bcf_0
- - metis=5.1.0=he965462_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=h81bd1dd_0
- - mpfi=1.5.4=h52b28e3_1001
- - mpfr=4.2.1=h4f6b447_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h10d778d_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h5846eda_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h3c5361c_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=h0ab3c2f_1
- - numpy=1.26.4=py311hc43a94b_0
- - openblas=0.3.25=openmp_h6794695_0
- - openjdk=22.0.1=h2d185b6_0
- - openjpeg=2.5.2=h7310d3a_0
- - openssl=3.3.1=h87427d6_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=hbcb3906_0
- - pandoc=3.2.1=h694c41f_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h880b76c_0
- - pari=2.15.5=h7ba67ff_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=hbcf498f_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h7634a1b_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h10d778d_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py311h2755ac0_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=h73e2aa4_0
- - pkg-config=0.29.2=ha3d46e9_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h10d778d_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=ha60d53e_1006
- - pplpy=0.8.9=py311h922ec50_1
- - primecount=7.6=ha894c9a_0
- - primecountpy=0.1.0=py311h5fe6e05_4
- - primesieve=11.0=hf0c8a7f_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py311h72ae277_0
- - pthread-stubs=0.4=hc929b4f_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py311h1d816ee_0
- - pybind11-global=2.12.0=py311h1d816ee_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyobjc-core=10.3.1=py311h9d23797_0
- - pyobjc-framework-cocoa=10.3.1=py311h9d23797_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py311he705e18_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.11.9=h657bba9_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py311hdd0406b_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.11=4_cp311
- - pythran=0.15.0=py311ha853786_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py311h6eed73b_4
- - pyyaml=6.0.1=py311h2725bcf_1
- - pyzmq=26.0.3=py311h89e2aaa_0
- - qd=2.3.22=h2beb688_1004
- - qhull=2020.2=h940c156_2
- - r-base=4.3.3=h4648a1f_3
- - r-lattice=0.22_6=r43hb2c329c_0
- - readline=8.2=h9e318b2_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=h0dc2134_0
- - rpds-py=0.18.1=py311h295b1db_0
- - rpy2=3.5.11=py311r43h4a70a88_3
- - rw=0.9=h10d778d_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py311he0bea55_0
- - send2trash=1.8.3=pyh31c8845_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - sigtool=0.1.3=h88f4db0_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=h0d51a9f_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h28673e1_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hd2b2131_1
- - symmetrica=3.0.1=hf0c8a7f_0
- - sympow=2.023.6=h115ba6a_3
- - sympy=1.12.1=pypyh2585a3b_103
- - tachyon=0.99b6=h3a1d103_1002
- - tapi=1100.0.11=h9ce4665_0
- - tar=1.34=hcb2f6ea_1
- - tbb=2021.12.0=h3c5361c_1
- - terminado=0.18.1=pyh31c8845_0
- - texinfo=7.0=pl5321hc47821c_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h1abcd95_1
- - tktable=2.10=hba9d6f1_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py311h72ae277_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py311h6eed73b_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=h0dc2134_0
- - xorg-libxdmcp=1.1.3=h35c211d_0
- - xz=5.2.6=h775f41a_0
- - yaml=0.2.5=h0d85af4_2
- - zeromq=4.3.5=hde137ed_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h87427d6_1
- - zstd=1.5.6=h915ae27_0
diff --git a/src/environment-3.11-macos.yml b/src/environment-3.11-macos.yml
deleted file mode 100644
index 4111aa010f2..00000000000
--- a/src/environment-3.11-macos.yml
+++ /dev/null
@@ -1,424 +0,0 @@
-# Generated by conda-lock.
-# platform: osx-arm64
-# input_hash: fd2f5edaba32b4c1f22d499071de74bde7eb804a27ac64e89ee82df0d733a829
-
-channels:
- - conda-forge
-dependencies:
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py311heffc1b2_4
- - arpack=3.9.1=nompi_h593882a_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321hcd07c0c_1
- - automake=1.16.5=pl5321hce30654_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h3422bc3_0
- - bdw-gc=8.0.6=hc021e02_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_osxarm64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=hca5e981_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=hb547adb_1
- - brotli-bin=1.1.0=hb547adb_1
- - brotli-python=1.1.0=py311ha891d26_1
- - bwidget=1.9.14=hce30654_1
- - bzip2=1.0.8=h93a5062_5
- - c-ares=1.28.1=h93a5062_0
- - c-compiler=1.7.0=h6aa9301_1
- - ca-certificates=2024.6.2=hf0a4a13_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=hc6c324b_2
- - cctools=986=h4faf515_0
- - cctools_osx-arm64=986=h62378fb_0
- - cddlib=1!0.94m=h6d7a090_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py311h4a08483_0
- - chardet=5.2.0=py311h267d04e_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - clang=16.0.6=default_h095aff0_8
- - clang-16=16.0.6=default_hb63da90_8
- - clang_impl_osx-arm64=16.0.6=hc421ffc_16
- - clang_osx-arm64=16.0.6=h54d7cd3_16
- - clangxx=16.0.6=default_h095aff0_8
- - clangxx_impl_osx-arm64=16.0.6=hcd7bac0_16
- - clangxx_osx-arm64=16.0.6=h54d7cd3_16
- - cliquer=1.22=h93a5062_1
- - cmake=3.29.6=had79d8f_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py311h267d04e_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compiler-rt=16.0.6=h3808999_2
- - compiler-rt_osx-arm64=16.0.6=h3808999_2
- - compilers=1.7.0=hce30654_1
- - contourpy=1.2.1=py311hcc98501_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=h653d890_0
- - cvxopt=1.3.2=py311h77cf4c7_2
- - cxx-compiler=1.7.0=h2ffa867_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py311h2c49a9d_0
- - cysignals=1.11.2=py311he42fc87_3
- - cython=3.0.10=py311h92babd0_0
- - debugpy=1.8.1=py311h92babd0_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=h9397a75_1203
- - ecl=23.9.9=h1d9728a_0
- - eclib=20231212=h7f07de4_0
- - ecm=7.0.5=h41d338b_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=hebf3989_0
- - fflas-ffpack=2.5.0=h4bc3318_0
- - fftw=3.3.10=nompi_h6637ab6_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h82840c6_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py311hd3f4193_0
- - fortran-compiler=1.7.0=hafb19e3_1
- - fplll=5.4.5=hb7d509d_0
- - fpylll=0.6.1=py311h341b96b_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=hadb7bae_2
- - fribidi=1.0.10=h27ca646_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=he8f4e70_3
- - gap-defaults=4.12.2=hce30654_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gengetopt=2.23=hbdafb3b_0
- - gettext=0.22.5=h8fbad5d_2
- - gettext-tools=0.22.5=h8fbad5d_2
- - gf2x=1.3.0=hdaa854c_2
- - gfan=0.6.2=hec08f5c_1003
- - gfortran=12.3.0=h1ca8e4b_1
- - gfortran_impl_osx-arm64=12.3.0=h53ed385_3
- - gfortran_osx-arm64=12.3.0=h57527a5_1
- - giac=1.9.0.21=h1c96721_1
- - giflib=5.2.2=h93a5062_0
- - givaro=4.2.0=h018886a_0
- - glpk=5.0=h6d7a090_0
- - gmp=6.3.0=h7bae524_2
- - gmpy2=2.1.5=py311h1e33d93_1
- - graphite2=1.3.13=hebf3989_1003
- - gsl=2.7=h6e638da_0
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h1836168_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=hc8870d7_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=h762ac30_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=hd73f12c_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh57ce528_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.25.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isl=0.26=imath32_h347afa1_101
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=hce30654_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py311h267d04e_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py311h267d04e_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py311he4fd1f5_1
- - krb5=1.21.2=h92f50d5_0
- - lcalc=2.0.5=h4a402bc_2
- - lcms2=2.16=ha0e7c42_0
- - ld64=711=h634c8be_0
- - ld64_osx-arm64=711=ha4bd21c_0
- - lerc=4.0.0=h9a09cb3_0
- - libasprintf=0.22.5=h8fbad5d_2
- - libasprintf-devel=0.22.5=h8fbad5d_2
- - libatomic_ops=7.6.14=h1a8c8d9_0
- - libblas=3.9.0=20_osxarm64_openblas
- - libboost=1.85.0=h17eb2be_2
- - libboost-devel=1.85.0=hf450f58_2
- - libboost-headers=1.85.0=hce30654_2
- - libbraiding=1.2=hb7217d7_0
- - libbrial=1.2.12=h56a29cd_3
- - libbrotlicommon=1.1.0=hb547adb_1
- - libbrotlidec=1.1.0=hb547adb_1
- - libbrotlienc=1.1.0=hb547adb_1
- - libcblas=3.9.0=20_osxarm64_openblas
- - libclang-cpp16=16.0.6=default_hb63da90_8
- - libcurl=8.8.0=h7b6f9a7_0
- - libcxx=17.0.6=h5f092b4_0
- - libdeflate=1.20=h93a5062_0
- - libedit=3.1.20191231=hc8eb9b7_2
- - libev=4.33=h93a5062_2
- - libexpat=2.6.2=hebf3989_0
- - libffi=3.4.2=h3422bc3_5
- - libflint=3.0.1=h28749a5_ntl_100
- - libgd=2.3.3=hfdf3952_9
- - libgettextpo=0.22.5=h8fbad5d_2
- - libgettextpo-devel=0.22.5=h8fbad5d_2
- - libgfortran=5.0.0=13_2_0_hd922786_3
- - libgfortran-devel_osx-arm64=12.3.0=hc62be1c_3
- - libgfortran5=13.2.0=hf226fd6_3
- - libglib=2.80.2=h59d46d9_1
- - libhomfly=1.02r6=h93a5062_1
- - libhwloc=2.10.0=default_h7685b71_1001
- - libiconv=1.17=h0d3ecfb_2
- - libintl=0.22.5=h8fbad5d_2
- - libintl-devel=0.22.5=h8fbad5d_2
- - libjpeg-turbo=3.0.0=hb547adb_1
- - liblapack=3.9.0=20_osxarm64_openblas
- - liblapacke=3.9.0=20_osxarm64_openblas
- - libllvm16=16.0.6=haab561b_3
- - libnghttp2=1.58.0=ha4dd798_1
- - libopenblas=0.3.25=openmp_h6c19121_0
- - libpng=1.6.43=h091b4b1_0
- - libsodium=1.0.18=h27ca646_1
- - libsqlite=3.46.0=hfb93653_0
- - libssh2=1.11.0=h7a5bd25_0
- - libtiff=4.6.0=h07db509_3
- - libtool=2.4.7=hb7217d7_0
- - libuv=1.48.0=h93a5062_0
- - libwebp=1.4.0=h54798ee_0
- - libwebp-base=1.4.0=h93a5062_0
- - libxcb=1.16=hf2054a2_0
- - libxml2=2.12.7=ha661575_1
- - libzlib=1.3.1=hfb2fe0b_1
- - linbox=1.7.0=h3afee3a_0
- - llvm-openmp=18.1.8=hde57baf_0
- - llvm-tools=16.0.6=haab561b_3
- - lrcalc=2.1=hebf3989_6
- - m4=1.4.18=h642e427_1001
- - m4ri=20140914=hc97c1ff_1006
- - m4rie=20150908=h22b9e9d_1002
- - make=4.3=he57ea6c_1
- - markupsafe=2.1.5=py311h05b510d_0
- - mathjax=3.2.2=hce30654_0
- - matplotlib=3.8.4=py311ha1ab1f8_2
- - matplotlib-base=3.8.4=py311h000fb6e_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h2bbcd85_2
- - memory-allocator=0.1.3=py311heffc1b2_0
- - meson=1.5.2=pyhd8ed1ab_0
- - meson-python=0.15.0=pyh0c530f3_0
- - metis=5.1.0=h13dd4ca_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=h91ba8db_0
- - mpfi=1.5.4=hbde5f5b_1001
- - mpfr=4.2.1=h41d338b_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h93a5062_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=hb89a1cb_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h420ef59_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=hbb3f309_1
- - numpy=1.26.4=py311h7125741_0
- - openblas=0.3.25=openmp_h55c453e_0
- - openjdk=22.0.1=hbeb2e11_0
- - openjpeg=2.5.2=h9f1df11_0
- - openssl=3.3.1=hfb2fe0b_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=h27ca646_0
- - pandoc=3.2.1=hce30654_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h5cb9fbc_0
- - pari=2.15.5=h4f2304c_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=h27ca646_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h297a79d_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h4614cfb_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py311hd7951ec_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=hebf3989_0
- - pkg-config=0.29.2=hab62308_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h93a5062_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h8b147cf_1006
- - pplpy=0.8.9=py311h3d77d83_1
- - primecount=7.6=hb6e4faa_0
- - primecountpy=0.1.0=py311he4fd1f5_4
- - primesieve=11.0=hb7217d7_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py311hd3f4193_0
- - pthread-stubs=0.4=h27ca646_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py311hcc98501_0
- - pybind11-global=2.12.0=py311hcc98501_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyobjc-core=10.3.1=py311h5f135c3_0
- - pyobjc-framework-cocoa=10.3.1=py311h5f135c3_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py311h05b510d_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.11.9=h932a869_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py311h92babd0_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.11=4_cp311
- - pythran=0.15.0=py311hceb3b21_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py311h267d04e_4
- - pyyaml=6.0.1=py311heffc1b2_1
- - pyzmq=26.0.3=py311h9bed540_0
- - qd=2.3.22=hbec66e7_1004
- - qhull=2020.2=hc021e02_2
- - r-base=4.3.3=h8112bfe_3
- - r-lattice=0.22_6=r43hd2d937b_0
- - readline=8.2=h92ec313_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=hb547adb_0
- - rpds-py=0.18.1=py311h98c6a39_0
- - rpy2=3.5.11=py311r43hb49d859_3
- - rw=0.9=h93a5062_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py311h2b215a9_0
- - send2trash=1.8.3=pyh31c8845_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - sigtool=0.1.3=h44b9a77_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=hb460b52_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h5838104_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hf6fcff2_1
- - symmetrica=3.0.1=hb7217d7_0
- - sympow=2.023.6=hb0babe8_3
- - sympy=1.12.1=pypyh2585a3b_103
- - tachyon=0.99b6=hb8a568e_1002
- - tapi=1100.0.11=he4954df_0
- - tar=1.34=h7cb298e_1
- - tbb=2021.12.0=h420ef59_1
- - terminado=0.18.1=pyh31c8845_0
- - texinfo=7.0=pl5321h9ea1dce_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h5083fa2_1
- - tktable=2.10=h1e387b8_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py311hd3f4193_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py311h267d04e_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=hb547adb_0
- - xorg-libxdmcp=1.1.3=h27ca646_0
- - xz=5.2.6=h57fd34a_0
- - yaml=0.2.5=h3422bc3_2
- - zeromq=4.3.5=hcc0f68c_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=hfb2fe0b_1
- - zstd=1.5.6=hb46c0d2_0
diff --git a/src/environment-3.9-linux-aarch64.yml b/src/environment-3.9-linux-aarch64.yml
deleted file mode 100644
index 43382444aae..00000000000
--- a/src/environment-3.9-linux-aarch64.yml
+++ /dev/null
@@ -1,435 +0,0 @@
-# Generated by conda-lock.
-# platform: linux-aarch64
-# input_hash: ff1dc47da14265a884b6d8aae2cde457456f547babfa735ad39ad330bb83aa6a
-
-channels:
- - conda-forge
-dependencies:
- - _openmp_mutex=4.5=2_kmp_llvm
- - _r-mutex=1.0.1=anacondar_1
- - _sysroot_linux-aarch64_curr_repodata_hack=4=h57d6b7b_14
- - alabaster=0.7.16=pyhd8ed1ab_0
- - alsa-lib=1.2.11=h31becfc_1
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py39h898b7ef_4
- - arpack=3.9.1=nompi_hd363cd0_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321h2148fe1_1
- - automake=1.16.5=pl5321h8af1aa0_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=hf897c2e_0
- - bdw-gc=8.0.6=hd62202e_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - binutils=2.40=hf1166c9_7
- - binutils_impl_linux-aarch64=2.40=hf54a868_7
- - binutils_linux-aarch64=2.40=h1f91aba_9
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_linuxaarch64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=ha990451_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=h31becfc_1
- - brotli-bin=1.1.0=h31becfc_1
- - brotli-python=1.1.0=py39h387a81e_1
- - bwidget=1.9.14=h8af1aa0_1
- - bzip2=1.0.8=h31becfc_5
- - c-ares=1.28.1=h31becfc_0
- - c-compiler=1.7.0=h31becfc_1
- - ca-certificates=2024.6.2=hcefe29a_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=h5c54ea9_2
- - cddlib=1!0.94m=h719063d_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py39hdf53b9e_0
- - chardet=5.2.0=py39ha65689a_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - cliquer=1.22=h31becfc_1
- - cmake=3.29.6=h7042e5d_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py39h4420490_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compilers=1.7.0=h8af1aa0_1
- - contourpy=1.2.1=py39hd16970a_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=h7daf2e0_0
- - cvxopt=1.3.2=py39h093dae0_2
- - cxx-compiler=1.7.0=h2a328a1_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py39h532d932_0
- - cysignals=1.11.2=py39hfa81392_3
- - cython=3.0.10=py39h387a81e_0
- - debugpy=1.8.1=py39h387a81e_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=hb12102e_1203
- - ecl=23.9.9=h6475f26_0
- - eclib=20231212=he26bab5_0
- - ecm=7.0.5=ha2d0fc4_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h2f0025b_0
- - fflas-ffpack=2.5.0=h503e619_0
- - fftw=3.3.10=nompi_h020dacd_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=ha9a116f_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py39he257ee7_0
- - fortran-compiler=1.7.0=h7048d53_1
- - fplll=5.4.5=hb3a790e_0
- - fpylll=0.6.1=py39h97065f7_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=hf0a5ef3_2
- - fribidi=1.0.10=hb9de7d4_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=h597289e_3
- - gap-defaults=4.12.2=h8af1aa0_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gcc=12.3.0=hdb0cc85_13
- - gcc_impl_linux-aarch64=12.3.0=h3d98823_13
- - gcc_linux-aarch64=12.3.0=ha52a6ea_9
- - gengetopt=2.23=h01db608_0
- - gf2x=1.3.0=h1b3b3a3_2
- - gfan=0.6.2=h5f589ec_1003
- - gfortran=12.3.0=hdb0cc85_13
- - gfortran_impl_linux-aarch64=12.3.0=h97ebfd2_13
- - gfortran_linux-aarch64=12.3.0=ha7b8e4b_9
- - giac=1.9.0.21=h04922a4_1
- - giflib=5.2.2=h31becfc_0
- - givaro=4.2.0=h364d21b_0
- - glpk=5.0=h66325d0_0
- - gmp=6.3.0=h0a1ffab_2
- - gmpy2=2.1.5=py39hcc1b389_1
- - graphite2=1.3.13=h2f0025b_1003
- - gsl=2.7=h294027d_0
- - gxx=12.3.0=hdb0cc85_13
- - gxx_impl_linux-aarch64=12.3.0=hba91e99_13
- - gxx_linux-aarch64=12.3.0=h9d1f256_9
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h9812418_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=h787c7f5_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=h197073e_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h15043fe_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh3099207_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.18.1=pyh707e725_3
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=h8af1aa0_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py39h4420490_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py39h4420490_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kernel-headers_linux-aarch64=4.18.0=h5b4a56d_14
- - keyutils=1.6.1=h4e544f5_0
- - kiwisolver=1.4.5=py39had2cf8c_1
- - krb5=1.21.2=hc419048_0
- - lcalc=2.0.5=he588f68_2
- - lcms2=2.16=h922389a_0
- - ld_impl_linux-aarch64=2.40=h9fc2d93_7
- - lerc=4.0.0=h4de3ea5_0
- - libatomic_ops=7.6.14=h4e544f5_0
- - libblas=3.9.0=20_linuxaarch64_openblas
- - libboost=1.85.0=hb41fec8_2
- - libboost-devel=1.85.0=h37bb5a9_2
- - libboost-headers=1.85.0=h8af1aa0_2
- - libbraiding=1.2=hd600fc2_0
- - libbrial=1.2.12=h9429f74_3
- - libbrotlicommon=1.1.0=h31becfc_1
- - libbrotlidec=1.1.0=h31becfc_1
- - libbrotlienc=1.1.0=h31becfc_1
- - libcblas=3.9.0=20_linuxaarch64_openblas
- - libcups=2.3.3=h405e4a8_4
- - libcurl=8.8.0=h4e8248e_0
- - libdeflate=1.20=h31becfc_0
- - libedit=3.1.20191231=he28a2e2_2
- - libev=4.33=h31becfc_2
- - libexpat=2.6.2=h2f0025b_0
- - libffi=3.4.2=h3557bc0_5
- - libflint=3.0.1=hc392af7_ntl_100
- - libgcc-devel_linux-aarch64=12.3.0=h6144e03_113
- - libgcc-ng=13.2.0=he277a41_13
- - libgd=2.3.3=hcd22fd5_9
- - libgfortran-ng=13.2.0=he9431aa_13
- - libgfortran5=13.2.0=h2af0866_13
- - libglib=2.80.2=haee52c6_1
- - libgomp=13.2.0=he277a41_13
- - libhomfly=1.02r6=h31becfc_1
- - libhwloc=2.10.0=default_h3030c0e_1001
- - libiconv=1.17=h31becfc_2
- - libjpeg-turbo=3.0.0=h31becfc_1
- - liblapack=3.9.0=20_linuxaarch64_openblas
- - liblapacke=3.9.0=20_linuxaarch64_openblas
- - libnghttp2=1.58.0=hb0e430d_1
- - libnsl=2.0.1=h31becfc_0
- - libopenblas=0.3.25=pthreads_h5a5ec62_0
- - libpng=1.6.43=h194ca79_0
- - libsanitizer=12.3.0=h57e2e72_13
- - libsodium=1.0.18=hb9de7d4_1
- - libsqlite=3.46.0=hf51ef55_0
- - libssh2=1.11.0=h492db2e_0
- - libstdcxx-devel_linux-aarch64=12.3.0=h6144e03_113
- - libstdcxx-ng=13.2.0=h3f4de04_13
- - libtiff=4.6.0=hf980d43_3
- - libtool=2.4.7=h4de3ea5_0
- - libuuid=2.38.1=hb4cce97_0
- - libuv=1.48.0=h31becfc_0
- - libwebp=1.4.0=h8b4e01b_0
- - libwebp-base=1.4.0=h31becfc_0
- - libxcb=1.16=h7935292_0
- - libxcrypt=4.4.36=h31becfc_1
- - libxml2=2.12.7=h49dc7a2_1
- - libzlib=1.3.1=h68df207_1
- - linbox=1.7.0=h681a5ee_0
- - llvm-openmp=18.1.8=hb063fc5_0
- - lrcalc=2.1=h2f0025b_6
- - m4=1.4.18=h516909a_1001
- - m4ri=20140914=hedfd65a_1006
- - m4rie=20150908=hf0a5ef3_1002
- - make=4.3=h309ac5b_1
- - markupsafe=2.1.5=py39h7cc1d5f_0
- - mathjax=3.2.2=h8af1aa0_0
- - matplotlib=3.8.4=py39ha65689a_2
- - matplotlib-base=3.8.4=py39hf44f4b6_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h6475f26_2
- - memory-allocator=0.1.3=py39h898b7ef_0
- - metis=5.1.0=h2f0025b_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=hf4c8f4c_0
- - mpfi=1.5.4=h846f343_1001
- - mpfr=4.2.1=ha2d0fc4_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h31becfc_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h0425590_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h70be974_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=h0d7519b_1
- - numpy=1.26.4=py39h91c28bb_0
- - openblas=0.3.25=pthreads_h339cbfa_0
- - openjdk=22.0.1=h3d4cd67_0
- - openjpeg=2.5.2=h0d9d63b_0
- - openssl=3.3.1=h68df207_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=hb9de7d4_0
- - pandoc=3.2.1=h8af1aa0_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h399c48b_0
- - pari=2.15.5=h169c2a7_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=hf897c2e_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h070dd5b_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h31becfc_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py39h4a8821f_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=h2f0025b_0
- - pkg-config=0.29.2=hb9de7d4_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h31becfc_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h984aac9_1006
- - pplpy=0.8.9=py39hf652505_1
- - primecount=7.6=hd600fc2_0
- - primecountpy=0.1.0=py39hd16970a_3
- - primesieve=11.0=hd600fc2_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py39he257ee7_0
- - pthread-stubs=0.4=hb9de7d4_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py39hd16970a_0
- - pybind11-global=2.12.0=py39hd16970a_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py39h7cc1d5f_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.9.19=h4ac3b42_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py39h387a81e_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.9=4_cp39
- - pythran=0.15.0=py39hc2250db_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py39h4420490_4
- - pyyaml=6.0.1=py39h898b7ef_1
- - pyzmq=26.0.3=py39h866fef3_0
- - qd=2.3.22=h05efe27_1004
- - qhull=2020.2=hd62202e_2
- - r-base=4.3.3=h7f20121_3
- - r-lattice=0.22_6=r43h25e906a_0
- - readline=8.2=h8fc344f_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=h31becfc_0
- - rpds-py=0.18.1=py39hb8f4057_0
- - rpy2=3.5.11=py39r43h1ae4408_3
- - rw=0.9=h31becfc_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.3=py39h91c28bb_1
- - sed=4.8=ha0d5d3d_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=hbe76a8a_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=hdc7ab3c_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=h3944111_1
- - symmetrica=3.0.1=hd600fc2_0
- - sympow=2.023.6=h157afb5_3
- - sympy=1.12.1=pypyh2585a3b_103
- - sysroot_linux-aarch64=2.17=h5b4a56d_14
- - tachyon=0.99b6=ha0bfc61_1002
- - tar=1.34=h048efde_0
- - tbb=2021.12.0=h70be974_1
- - terminado=0.18.1=pyh0d859eb_0
- - texinfo=7.0=pl5321h17f021e_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h194ca79_0
- - tktable=2.10=h52f7bd3_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py39ha3e8b56_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py39h4420490_0
- - unicodedata2=15.1.0=py39h898b7ef_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-fixesproto=5.0=h3557bc0_1002
- - xorg-inputproto=2.3.2=h3557bc0_1002
- - xorg-kbproto=1.0.7=h3557bc0_1002
- - xorg-libice=1.1.1=h7935292_0
- - xorg-libsm=1.2.4=h5a01bc2_0
- - xorg-libx11=1.8.9=h08be655_1
- - xorg-libxau=1.0.11=h31becfc_0
- - xorg-libxdmcp=1.1.3=h3557bc0_0
- - xorg-libxext=1.3.4=h2a766a3_2
- - xorg-libxfixes=5.0.3=h3557bc0_1004
- - xorg-libxi=1.7.10=h3557bc0_0
- - xorg-libxrender=0.9.11=h7935292_0
- - xorg-libxt=1.3.0=h7935292_1
- - xorg-libxtst=1.2.3=hf897c2e_1002
- - xorg-recordproto=1.14.2=hf897c2e_1002
- - xorg-renderproto=0.11.1=h3557bc0_1002
- - xorg-xextproto=7.3.0=h2a766a3_1003
- - xorg-xproto=7.0.31=h3557bc0_1007
- - xz=5.2.6=h9cdd2b7_0
- - yaml=0.2.5=hf897c2e_2
- - zeromq=4.3.5=h28faeed_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h68df207_1
- - zstd=1.5.6=h02f22dd_0
diff --git a/src/environment-3.9-linux.yml b/src/environment-3.9-linux.yml
deleted file mode 100644
index 83a922eb4f4..00000000000
--- a/src/environment-3.9-linux.yml
+++ /dev/null
@@ -1,485 +0,0 @@
-# Generated by conda-lock.
-# platform: linux-64
-# input_hash: e864996ba609c3a06f1c78376812e9f6180653730f5c2e60df67268b3e2fb7d6
-
-channels:
- - conda-forge
-dependencies:
- - _libgcc_mutex=0.1=conda_forge
- - _openmp_mutex=4.5=2_kmp_llvm
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - alsa-lib=1.2.12=h4ab18f5_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py39hd1e30aa_4
- - arpack=3.9.1=nompi_h77f6705_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attr=2.5.1=h166bdaf_1
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321h2b4cb7a_1
- - automake=1.16.5=pl5321ha770c72_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h7f98852_0
- - bdw-gc=8.0.6=h4bd325d_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - binutils=2.40=h4852527_7
- - binutils_impl_linux-64=2.40=ha1999f0_7
- - binutils_linux-64=2.40=hb3c18ed_9
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_linux64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=h44aadfe_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=hd590300_1
- - brotli-bin=1.1.0=hd590300_1
- - brotli-python=1.1.0=py39h3d6467e_1
- - bwidget=1.9.14=ha770c72_1
- - bzip2=1.0.8=hd590300_5
- - c-ares=1.28.1=hd590300_0
- - c-compiler=1.7.0=hd590300_1
- - ca-certificates=2024.6.2=hbcca054_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=hbb29018_2
- - cddlib=1!0.94m=h9202a9a_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py39h7a31438_0
- - chardet=5.2.0=py39hf3d152e_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - cliquer=1.22=hd590300_1
- - cmake=3.29.6=hcafd917_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py39hf3d152e_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compilers=1.7.0=ha770c72_1
- - contourpy=1.2.1=py39h7633fee_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=he654da7_0
- - cvxopt=1.3.2=py39h640215f_2
- - cxx-compiler=1.7.0=h00ab1b0_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py39h1698a45_0
- - cysignals=1.11.2=py39h1ce0973_3
- - cython=3.0.10=py39h3d6467e_0
- - dbus=1.13.6=h5008d03_3
- - debugpy=1.8.1=py39h3d6467e_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=hd9d9efa_1203
- - ecl=23.9.9=hed6455c_0
- - eclib=20231212=h96f522a_0
- - ecm=7.0.5=h9458935_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h59595ed_0
- - fflas-ffpack=2.5.0=h4f9960b_0
- - fftw=3.3.10=nompi_hf1063bd_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h14ed4e7_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py39hd3abc70_0
- - fortran-compiler=1.7.0=heb67821_1
- - fplll=5.4.5=h384768b_0
- - fpylll=0.6.1=py39h2525e16_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=h267a509_2
- - fribidi=1.0.10=h36c2ea0_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=he9a28a4_3
- - gap-defaults=4.12.2=ha770c72_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gcc=12.3.0=h915e2ae_13
- - gcc_impl_linux-64=12.3.0=h58ffeeb_13
- - gcc_linux-64=12.3.0=h9528a6a_9
- - gengetopt=2.23=h9c3ff4c_0
- - gettext=0.22.5=h59595ed_2
- - gettext-tools=0.22.5=h59595ed_2
- - gf2x=1.3.0=ha476b99_2
- - gfan=0.6.2=hb86e20a_1003
- - gfortran=12.3.0=h915e2ae_13
- - gfortran_impl_linux-64=12.3.0=h8f2110c_13
- - gfortran_linux-64=12.3.0=h5877db1_9
- - giac=1.9.0.21=h673759e_1
- - giflib=5.2.2=hd590300_0
- - givaro=4.2.0=hb789bce_0
- - glib=2.80.2=h8a4344b_1
- - glib-tools=2.80.2=h73ef956_1
- - glpk=5.0=h445213a_0
- - gmp=6.3.0=hac33072_2
- - gmpy2=2.1.5=py39h048c657_1
- - graphite2=1.3.13=h59595ed_1003
- - gsl=2.7=he838d99_0
- - gst-plugins-base=1.24.5=hbaaba92_0
- - gstreamer=1.24.5=haf2f30d_0
- - gxx=12.3.0=h915e2ae_13
- - gxx_impl_linux-64=12.3.0=h2a574ab_13
- - gxx_linux-64=12.3.0=ha28b414_9
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=hfac3d4d_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=h59595ed_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=hef0740d_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h623f65a_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh3099207_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.18.1=pyh707e725_3
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=ha770c72_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py39hf3d152e_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py39hf3d152e_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kernel-headers_linux-64=2.6.32=he073ed8_17
- - keyutils=1.6.1=h166bdaf_0
- - kiwisolver=1.4.5=py39h7633fee_1
- - krb5=1.21.2=h659d440_0
- - lame=3.100=h166bdaf_1003
- - lcalc=2.0.5=h5aac1b6_2
- - lcms2=2.16=hb7c19ff_0
- - ld_impl_linux-64=2.40=hf3520f5_7
- - lerc=4.0.0=h27087fc_0
- - libasprintf=0.22.5=h661eb56_2
- - libasprintf-devel=0.22.5=h661eb56_2
- - libatomic_ops=7.6.14=h166bdaf_0
- - libblas=3.9.0=20_linux64_openblas
- - libboost=1.85.0=hba137d9_2
- - libboost-devel=1.85.0=h00ab1b0_2
- - libboost-headers=1.85.0=ha770c72_2
- - libbraiding=1.2=hcb278e6_0
- - libbrial=1.2.12=h76af697_3
- - libbrotlicommon=1.1.0=hd590300_1
- - libbrotlidec=1.1.0=hd590300_1
- - libbrotlienc=1.1.0=hd590300_1
- - libcap=2.69=h0f662aa_0
- - libcblas=3.9.0=20_linux64_openblas
- - libclang-cpp15=15.0.7=default_h127d8a8_5
- - libclang13=18.1.8=default_h6ae225f_0
- - libcups=2.3.3=h4637d8d_4
- - libcurl=8.8.0=hca28451_0
- - libdeflate=1.20=hd590300_0
- - libedit=3.1.20191231=he28a2e2_2
- - libev=4.33=hd590300_2
- - libevent=2.1.12=hf998b51_1
- - libexpat=2.6.2=h59595ed_0
- - libffi=3.4.2=h7f98852_5
- - libflac=1.4.3=h59595ed_0
- - libflint=3.0.1=h5f2e117_ntl_100
- - libgcc-devel_linux-64=12.3.0=h6b66f73_113
- - libgcc-ng=13.2.0=h77fa898_13
- - libgcrypt=1.10.3=hd590300_0
- - libgd=2.3.3=h119a65a_9
- - libgettextpo=0.22.5=h59595ed_2
- - libgettextpo-devel=0.22.5=h59595ed_2
- - libgfortran-ng=13.2.0=h69a702a_13
- - libgfortran5=13.2.0=h3d2ce59_13
- - libglib=2.80.2=h8a4344b_1
- - libgomp=13.2.0=h77fa898_13
- - libgpg-error=1.49=h4f305b6_0
- - libhomfly=1.02r6=hd590300_1
- - libhwloc=2.10.0=default_h5622ce7_1001
- - libiconv=1.17=hd590300_2
- - libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=20_linux64_openblas
- - liblapacke=3.9.0=20_linux64_openblas
- - libllvm15=15.0.7=hb3ce162_4
- - libllvm18=18.1.8=hc9dba70_0
- - libnghttp2=1.58.0=h47da74e_1
- - libnsl=2.0.1=hd590300_0
- - libogg=1.3.5=h4ab18f5_0
- - libopenblas=0.3.25=pthreads_h413a1c8_0
- - libopus=1.3.1=h7f98852_1
- - libpng=1.6.43=h2797004_0
- - libpq=16.3=ha72fbe1_0
- - libsanitizer=12.3.0=hb8811af_13
- - libsndfile=1.2.2=hc60ed4a_1
- - libsodium=1.0.18=h36c2ea0_1
- - libsqlite=3.46.0=hde9e2c9_0
- - libssh2=1.11.0=h0841786_0
- - libstdcxx-devel_linux-64=12.3.0=h6b66f73_113
- - libstdcxx-ng=13.2.0=hc0a3c3a_13
- - libsystemd0=255=h3516f8a_1
- - libtiff=4.6.0=h1dd3fc0_3
- - libtool=2.4.7=h27087fc_0
- - libuuid=2.38.1=h0b41bf4_0
- - libuv=1.48.0=hd590300_0
- - libvorbis=1.3.7=h9c3ff4c_0
- - libwebp=1.4.0=h2c329e2_0
- - libwebp-base=1.4.0=hd590300_0
- - libxcb=1.16=hd590300_0
- - libxcrypt=4.4.36=hd590300_1
- - libxkbcommon=1.7.0=h2c5496b_1
- - libxml2=2.12.7=hc051c1a_1
- - libzlib=1.3.1=h4ab18f5_1
- - linbox=1.7.0=ha329b40_0
- - llvm-openmp=18.1.8=hf5423f3_0
- - lrcalc=2.1=h59595ed_6
- - lz4-c=1.9.4=hcb278e6_0
- - m4=1.4.18=h516909a_1001
- - m4ri=20140914=hae5d5c5_1006
- - m4rie=20150908=h267a509_1002
- - make=4.3=hd18ef5c_1
- - markupsafe=2.1.5=py39hd1e30aa_0
- - mathjax=3.2.2=ha770c72_0
- - matplotlib=3.8.4=py39hf3d152e_2
- - matplotlib-base=3.8.4=py39h10d1fc8_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=hed6455c_2
- - memory-allocator=0.1.3=py39hd1e30aa_0
- - meson=1.5.2=pyhd8ed1ab_0
- - meson-python=0.15.0=pyh0c530f3_0
- - metis=5.1.0=h59595ed_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=hfe3b2da_0
- - mpfi=1.5.4=h9f54685_1001
- - mpfr=4.2.1=h9458935_1
- - mpg123=1.32.6=h59595ed_0
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - mysql-common=8.3.0=hf1915f5_4
- - mysql-libs=8.3.0=hca2cd23_4
- - nauty=2.8.8=hd590300_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h59595ed_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h297d8ca_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - nspr=4.35=h27087fc_0
- - nss=3.101=h593d115_0
- - ntl=11.4.3=hef3c4d3_1
- - numpy=1.26.4=py39h474f0d3_0
- - openblas=0.3.25=pthreads_h7a3da1a_0
- - openjdk=21.0.2=haa376d0_0
- - openjpeg=2.5.2=h488ebb8_0
- - openssl=3.3.1=h4ab18f5_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=h36c2ea0_0
- - pandoc=3.2.1=ha770c72_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h84a9a3c_0
- - pari=2.15.5=h4d4ae9b_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=h7f98852_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h0f59acf_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_hd590300_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py39h16a7006_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.2=h59595ed_0
- - pkg-config=0.29.2=h36c2ea0_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=hd590300_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h6ec01c2_1006
- - pplpy=0.8.9=py39h9e9cb73_1
- - primecount=7.9=hcb278e6_0
- - primecountpy=0.1.0=py39h7633fee_4
- - primesieve=11.1=h59595ed_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py39hd3abc70_0
- - pthread-stubs=0.4=h36c2ea0_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pulseaudio-client=17.0=hb77b528_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py39h7633fee_0
- - pybind11-global=2.12.0=py39h7633fee_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyqt=5.15.9=py39h52134e7_5
- - pyqt5-sip=12.12.2=py39h3d6467e_5
- - pyrsistent=0.20.0=py39hd1e30aa_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.9.19=h0755675_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py39h3d6467e_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.9=4_cp39
- - pythran=0.15.0=py39hda80f44_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py39hf3d152e_4
- - pyyaml=6.0.1=py39hd1e30aa_1
- - pyzmq=26.0.3=py39ha1047a2_0
- - qd=2.3.22=h2cc385e_1004
- - qhull=2020.2=h4bd325d_2
- - qt-main=5.15.8=ha2b5568_22
- - r-base=4.3.3=he2d9a6e_3
- - r-lattice=0.22_6=r43h57805ef_0
- - readline=8.2=h8228510_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=hd590300_0
- - rpds-py=0.18.1=py39ha68c5e3_0
- - rpy2=3.5.11=py39r43h44dd56e_3
- - rw=0.9=hd590300_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py39h474f0d3_0
- - sed=4.8=he412f7d_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=h33f5c3f_1
- - sip=6.7.12=py39h3d6467e_0
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h6d4b2fc_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hf4753ba_1
- - symmetrica=3.0.1=hcb278e6_0
- - sympow=2.023.6=hc6ab17c_3
- - sympy=1.12.1=pypyh2585a3b_103
- - sysroot_linux-64=2.12=he073ed8_17
- - tachyon=0.99b6=hba7d16a_1002
- - tar=1.34=hb2e2bae_1
- - tbb=2021.12.0=h297d8ca_1
- - terminado=0.18.1=pyh0d859eb_0
- - texinfo=7.0=pl5321h0f457ee_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=noxft_h4845f30_101
- - tktable=2.10=h8bc8fbc_6
- - toml=0.10.2=pyhd8ed1ab_0
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py39hd3abc70_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py39hf3d152e_0
- - unicodedata2=15.1.0=py39hd1e30aa_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xcb-util=0.4.1=hb711507_2
- - xcb-util-image=0.4.0=hb711507_2
- - xcb-util-keysyms=0.4.1=hb711507_0
- - xcb-util-renderutil=0.3.10=hb711507_0
- - xcb-util-wm=0.4.2=hb711507_0
- - xkeyboard-config=2.42=h4ab18f5_0
- - xorg-fixesproto=5.0=h7f98852_1002
- - xorg-inputproto=2.3.2=h7f98852_1002
- - xorg-kbproto=1.0.7=h7f98852_1002
- - xorg-libice=1.1.1=hd590300_0
- - xorg-libsm=1.2.4=h7391055_0
- - xorg-libx11=1.8.9=hb711507_1
- - xorg-libxau=1.0.11=hd590300_0
- - xorg-libxdmcp=1.1.3=h7f98852_0
- - xorg-libxext=1.3.4=h0b41bf4_2
- - xorg-libxfixes=5.0.3=h7f98852_1004
- - xorg-libxi=1.7.10=h7f98852_0
- - xorg-libxrender=0.9.11=hd590300_0
- - xorg-libxt=1.3.0=hd590300_1
- - xorg-libxtst=1.2.3=h7f98852_1002
- - xorg-recordproto=1.14.2=h7f98852_1002
- - xorg-renderproto=0.11.1=h7f98852_1002
- - xorg-xextproto=7.3.0=h0b41bf4_1003
- - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
- - xorg-xproto=7.0.31=h7f98852_1007
- - xz=5.2.6=h166bdaf_0
- - yaml=0.2.5=h7f98852_2
- - zeromq=4.3.5=h75354e8_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h4ab18f5_1
- - zstd=1.5.6=ha6fb4c9_0
diff --git a/src/environment-3.9-macos-x86_64.yml b/src/environment-3.9-macos-x86_64.yml
deleted file mode 100644
index c3026a8fbc0..00000000000
--- a/src/environment-3.9-macos-x86_64.yml
+++ /dev/null
@@ -1,423 +0,0 @@
-# Generated by conda-lock.
-# platform: osx-64
-# input_hash: 7b973134e4e44170c953a71c99253450b079227c08993b2a49ae3ddd14d93fdb
-
-channels:
- - conda-forge
-dependencies:
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py39hdc70f33_4
- - arpack=3.9.1=nompi_hf81eadf_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321hed12c24_1
- - automake=1.16.5=pl5321h694c41f_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h0d85af4_0
- - bdw-gc=8.0.6=h940c156_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_osx64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=h07eb623_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=h0dc2134_1
- - brotli-bin=1.1.0=h0dc2134_1
- - brotli-python=1.1.0=py39h840bb9f_1
- - bwidget=1.9.14=h694c41f_1
- - bzip2=1.0.8=h10d778d_5
- - c-ares=1.28.1=h10d778d_0
- - c-compiler=1.7.0=h282daa2_1
- - ca-certificates=2024.6.2=h8857fd0_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=h9f650ed_2
- - cctools=986=h40f6528_0
- - cctools_osx-64=986=ha1c5b94_0
- - cddlib=1!0.94m=h0f52abe_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py39h18ef598_0
- - chardet=5.2.0=py39h6e9494a_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - clang=16.0.6=default_ha3b9224_8
- - clang-16=16.0.6=default_h4c8afb6_8
- - clang_impl_osx-64=16.0.6=h8787910_16
- - clang_osx-64=16.0.6=hb91bd55_16
- - clangxx=16.0.6=default_ha3b9224_8
- - clangxx_impl_osx-64=16.0.6=h6d92fbe_16
- - clangxx_osx-64=16.0.6=hb91bd55_16
- - cliquer=1.22=h10d778d_1
- - cmake=3.29.6=h749d262_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py39h6e9494a_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compiler-rt=16.0.6=ha38d28d_2
- - compiler-rt_osx-64=16.0.6=ha38d28d_2
- - compilers=1.7.0=h694c41f_1
- - contourpy=1.2.1=py39h0ca7971_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=hea67d85_0
- - cvxopt=1.3.2=py39hd66cc7a_2
- - cxx-compiler=1.7.0=h7728843_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py39hc0d7317_0
- - cysignals=1.11.2=py39hf6ae30e_3
- - cython=3.0.10=py39hd253f6c_0
- - debugpy=1.8.1=py39hd253f6c_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=h6e329d1_1203
- - ecl=23.9.9=h2b27fa8_0
- - eclib=20231212=h02435c3_0
- - ecm=7.0.5=h4f6b447_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=h73e2aa4_0
- - fflas-ffpack=2.5.0=h5898d61_0
- - fftw=3.3.10=nompi_h292e606_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h5bb23bf_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py39hded5825_0
- - fortran-compiler=1.7.0=h6c2ab21_1
- - fplll=5.4.5=hb7981ad_0
- - fpylll=0.6.1=py39h3b3ffec_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=h60636b9_2
- - fribidi=1.0.10=hbcb3906_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=hc16eb5f_3
- - gap-defaults=4.12.2=h694c41f_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gengetopt=2.23=he49afe7_0
- - gettext=0.22.5=h5ff76d1_2
- - gettext-tools=0.22.5=h5ff76d1_2
- - gf2x=1.3.0=hb2a7efb_2
- - gfan=0.6.2=hd793b56_1003
- - gfortran=12.3.0=h2c809b3_1
- - gfortran_impl_osx-64=12.3.0=hc328e78_3
- - gfortran_osx-64=12.3.0=h18f7dce_1
- - giac=1.9.0.21=h92f3f65_1
- - giflib=5.2.2=h10d778d_0
- - givaro=4.2.0=h1b3d6f7_0
- - glpk=5.0=h3cb5acd_0
- - gmp=6.3.0=hf036a51_2
- - gmpy2=2.1.5=py39h87b48b1_1
- - graphite2=1.3.13=h73e2aa4_1003
- - gsl=2.7=h93259b0_0
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h053f038_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=hf5e326d_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=hde4452d_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=h61918c1_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh57ce528_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.18.1=pyh707e725_3
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isl=0.26=imath32_h2e86a7b_101
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.9=h694c41f_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py39h6e9494a_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.1=py39h6e9494a_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py39h8ee36c8_1
- - krb5=1.21.2=hb884880_0
- - lcalc=2.0.5=h547a6ed_2
- - lcms2=2.16=ha2f27b4_0
- - ld64=711=ha02d983_0
- - ld64_osx-64=711=ha20a434_0
- - lerc=4.0.0=hb486fe8_0
- - libasprintf=0.22.5=h5ff76d1_2
- - libasprintf-devel=0.22.5=h5ff76d1_2
- - libatomic_ops=7.6.14=hb7f2c08_0
- - libblas=3.9.0=20_osx64_openblas
- - libboost=1.85.0=h739af76_2
- - libboost-devel=1.85.0=h2b186f8_2
- - libboost-headers=1.85.0=h694c41f_2
- - libbraiding=1.2=hf0c8a7f_0
- - libbrial=1.2.12=h81e9653_3
- - libbrotlicommon=1.1.0=h0dc2134_1
- - libbrotlidec=1.1.0=h0dc2134_1
- - libbrotlienc=1.1.0=h0dc2134_1
- - libcblas=3.9.0=20_osx64_openblas
- - libclang-cpp16=16.0.6=default_h4c8afb6_8
- - libcurl=8.8.0=hf9fcc65_0
- - libcxx=17.0.6=h88467a6_0
- - libdeflate=1.20=h49d49c5_0
- - libedit=3.1.20191231=h0678c8f_2
- - libev=4.33=h10d778d_2
- - libexpat=2.6.2=h73e2aa4_0
- - libffi=3.4.2=h0d85af4_5
- - libflint=3.0.1=h5d15de0_ntl_100
- - libgd=2.3.3=h0dceb68_9
- - libgettextpo=0.22.5=h5ff76d1_2
- - libgettextpo-devel=0.22.5=h5ff76d1_2
- - libgfortran=5.0.0=13_2_0_h97931a8_3
- - libgfortran-devel_osx-64=12.3.0=h0b6f5ec_3
- - libgfortran5=13.2.0=h2873a65_3
- - libglib=2.80.2=h736d271_1
- - libhomfly=1.02r6=h10d778d_1
- - libhwloc=2.10.0=default_h456cccd_1001
- - libiconv=1.17=hd75f5a5_2
- - libintl=0.22.5=h5ff76d1_2
- - libintl-devel=0.22.5=h5ff76d1_2
- - libjpeg-turbo=3.0.0=h0dc2134_1
- - liblapack=3.9.0=20_osx64_openblas
- - liblapacke=3.9.0=20_osx64_openblas
- - libllvm16=16.0.6=hbedff68_3
- - libnghttp2=1.58.0=h64cf6d3_1
- - libopenblas=0.3.25=openmp_hfef2a42_0
- - libpng=1.6.43=h92b6c6a_0
- - libsodium=1.0.18=hbcb3906_1
- - libsqlite=3.46.0=h1b8f9f3_0
- - libssh2=1.11.0=hd019ec5_0
- - libtiff=4.6.0=h129831d_3
- - libtool=2.4.7=hf0c8a7f_0
- - libuv=1.48.0=h67532ce_0
- - libwebp=1.4.0=hc207709_0
- - libwebp-base=1.4.0=h10d778d_0
- - libxcb=1.16=h0dc2134_0
- - libxml2=2.12.7=h3e169fe_1
- - libzlib=1.3.1=h87427d6_1
- - linbox=1.7.0=h7061c92_0
- - llvm-openmp=18.1.8=h15ab845_0
- - llvm-tools=16.0.6=hbedff68_3
- - lrcalc=2.1=h73e2aa4_6
- - m4=1.4.18=haf1e3a3_1001
- - m4ri=20140914=hd82a5f3_1006
- - m4rie=20150908=hc616cfc_1002
- - make=4.3=h22f3db7_1
- - markupsafe=2.1.5=py39ha09f3b3_0
- - mathjax=3.2.2=h694c41f_0
- - matplotlib=3.8.4=py39h6e9494a_2
- - matplotlib-base=3.8.4=py39hfca4cae_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h2b27fa8_2
- - memory-allocator=0.1.3=py39hdc70f33_0
- - metis=5.1.0=he965462_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=h81bd1dd_0
- - mpfi=1.5.4=h52b28e3_1001
- - mpfr=4.2.1=h4f6b447_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h10d778d_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h5846eda_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h3c5361c_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=h0ab3c2f_1
- - numpy=1.26.4=py39h28c39a1_0
- - openblas=0.3.25=openmp_h6794695_0
- - openjdk=22.0.1=h2d185b6_0
- - openjpeg=2.5.2=h7310d3a_0
- - openssl=3.3.1=h87427d6_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=hbcb3906_0
- - pandoc=3.2.1=h694c41f_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h880b76c_0
- - pari=2.15.5=h7ba67ff_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=hbcf498f_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h7634a1b_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h10d778d_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py39hc3a33ae_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=h73e2aa4_0
- - pkg-config=0.29.2=ha3d46e9_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h10d778d_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=ha60d53e_1006
- - pplpy=0.8.9=py39hc385998_1
- - primecount=7.6=ha894c9a_0
- - primecountpy=0.1.0=py39h8ee36c8_4
- - primesieve=11.0=hf0c8a7f_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py39hded5825_0
- - pthread-stubs=0.4=hc929b4f_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py39h0ca7971_0
- - pybind11-global=2.12.0=py39h0ca7971_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyobjc-core=10.3.1=py39hf8f43b1_0
- - pyobjc-framework-cocoa=10.3.1=py39hf8f43b1_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py39ha09f3b3_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.9.19=h7a9c478_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py39hd253f6c_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.9=4_cp39
- - pythran=0.15.0=py39h5d0c61a_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py39h6e9494a_4
- - pyyaml=6.0.1=py39hdc70f33_1
- - pyzmq=26.0.3=py39h304b177_0
- - qd=2.3.22=h2beb688_1004
- - qhull=2020.2=h940c156_2
- - r-base=4.3.3=h4648a1f_3
- - r-lattice=0.22_6=r43hb2c329c_0
- - readline=8.2=h9e318b2_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=h0dc2134_0
- - rpds-py=0.18.1=py39hf59063a_0
- - rpy2=3.5.11=py39r43hd01001f_3
- - rw=0.9=h10d778d_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py39ha321857_0
- - send2trash=1.8.3=pyh31c8845_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - sigtool=0.1.3=h88f4db0_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=h0d51a9f_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h28673e1_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hd2b2131_1
- - symmetrica=3.0.1=hf0c8a7f_0
- - sympow=2.023.6=h115ba6a_3
- - sympy=1.12.1=pypyh2585a3b_103
- - tachyon=0.99b6=h3a1d103_1002
- - tapi=1100.0.11=h9ce4665_0
- - tar=1.34=hcb2f6ea_1
- - tbb=2021.12.0=h3c5361c_1
- - terminado=0.18.1=pyh31c8845_0
- - texinfo=7.0=pl5321hc47821c_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h1abcd95_1
- - tktable=2.10=hba9d6f1_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py39hded5825_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py39h6e9494a_0
- - unicodedata2=15.1.0=py39hdc70f33_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=h0dc2134_0
- - xorg-libxdmcp=1.1.3=h35c211d_0
- - xz=5.2.6=h775f41a_0
- - yaml=0.2.5=h0d85af4_2
- - zeromq=4.3.5=hde137ed_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=h87427d6_1
- - zstd=1.5.6=h915ae27_0
diff --git a/src/environment-3.9-macos.yml b/src/environment-3.9-macos.yml
deleted file mode 100644
index 906b3b79f22..00000000000
--- a/src/environment-3.9-macos.yml
+++ /dev/null
@@ -1,425 +0,0 @@
-# Generated by conda-lock.
-# platform: osx-arm64
-# input_hash: c72df9df3a2c7c120e9ff1ca936ae3527692a0de782793536087f2041f57d700
-
-channels:
- - conda-forge
-dependencies:
- - _r-mutex=1.0.1=anacondar_1
- - alabaster=0.7.16=pyhd8ed1ab_0
- - anyio=4.4.0=pyhd8ed1ab_0
- - appdirs=1.4.4=pyh9f0ad1d_0
- - appnope=0.1.4=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py39h0f82c59_4
- - arpack=3.9.1=nompi_h593882a_101
- - arrow=1.3.0=pyhd8ed1ab_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - async-lru=2.0.4=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - autoconf=2.71=pl5321hcd07c0c_1
- - automake=1.16.5=pl5321hce30654_0
- - babel=2.14.0=pyhd8ed1ab_0
- - bc=1.07.1=h3422bc3_0
- - bdw-gc=8.0.6=hc021e02_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - beniget=0.4.1=pyhd8ed1ab_0
- - blas=2.120=openblas
- - blas-devel=3.9.0=20_osxarm64_openblas
- - bleach=6.1.0=pyhd8ed1ab_0
- - boost-cpp=1.85.0=hca5e981_2
- - brial=1.2.12=pyh694c41f_3
- - brotli=1.1.0=hb547adb_1
- - brotli-bin=1.1.0=hb547adb_1
- - brotli-python=1.1.0=py39hb198ff7_1
- - bwidget=1.9.14=hce30654_1
- - bzip2=1.0.8=h93a5062_5
- - c-ares=1.28.1=h93a5062_0
- - c-compiler=1.7.0=h6aa9301_1
- - ca-certificates=2024.6.2=hf0a4a13_0
- - cached-property=1.5.2=hd8ed1ab_1
- - cached_property=1.5.2=pyha770c72_1
- - cachetools=5.3.3=pyhd8ed1ab_0
- - cairo=1.18.0=hc6c324b_2
- - cctools=986=h4faf515_0
- - cctools_osx-arm64=986=h62378fb_0
- - cddlib=1!0.94m=h6d7a090_0
- - certifi=2024.6.2=pyhd8ed1ab_0
- - cffi=1.16.0=py39he153c15_0
- - chardet=5.2.0=py39h2804cbe_1
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - clang=16.0.6=default_h095aff0_8
- - clang-16=16.0.6=default_hb63da90_8
- - clang_impl_osx-arm64=16.0.6=hc421ffc_16
- - clang_osx-arm64=16.0.6=h54d7cd3_16
- - clangxx=16.0.6=default_h095aff0_8
- - clangxx_impl_osx-arm64=16.0.6=hcd7bac0_16
- - clangxx_osx-arm64=16.0.6=h54d7cd3_16
- - cliquer=1.22=h93a5062_1
- - cmake=3.29.6=had79d8f_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - colorlog=6.8.2=py39h2804cbe_0
- - comm=0.2.2=pyhd8ed1ab_0
- - compiler-rt=16.0.6=h3808999_2
- - compiler-rt_osx-arm64=16.0.6=h3808999_2
- - compilers=1.7.0=hce30654_1
- - contourpy=1.2.1=py39h48c5dd5_0
- - conway-polynomials=0.9=pyhd8ed1ab_0
- - cppy=1.2.1=pyhd8ed1ab_0
- - curl=8.8.0=h653d890_0
- - cvxopt=1.3.2=py39hf9e8641_2
- - cxx-compiler=1.7.0=h2ffa867_1
- - cycler=0.12.1=pyhd8ed1ab_0
- - cypari2=2.1.5=py39h070b2a8_0
- - cysignals=1.11.2=py39h65fc70a_3
- - cython=3.0.10=py39hf3050f2_0
- - debugpy=1.8.1=py39hf3050f2_0
- - decorator=5.1.1=pyhd8ed1ab_0
- - defusedxml=0.7.1=pyhd8ed1ab_0
- - distlib=0.3.8=pyhd8ed1ab_0
- - docutils=0.21.2=pyhd8ed1ab_0
- - dsdp=5.8=h9397a75_1203
- - ecl=23.9.9=h1d9728a_0
- - eclib=20231212=h7f07de4_0
- - ecm=7.0.5=h41d338b_0
- - editables=0.5=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.0=pyhd8ed1ab_2
- - executing=2.0.1=pyhd8ed1ab_0
- - expat=2.6.2=hebf3989_0
- - fflas-ffpack=2.5.0=h4bc3318_0
- - fftw=3.3.10=nompi_h6637ab6_110
- - filelock=3.15.4=pyhd8ed1ab_0
- - flit-core=3.9.0=pyhd8ed1ab_1
- - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- - font-ttf-inconsolata=3.000=h77eed37_0
- - font-ttf-source-code-pro=2.038=h77eed37_0
- - font-ttf-ubuntu=0.83=h77eed37_2
- - fontconfig=2.14.2=h82840c6_0
- - fonts-conda-ecosystem=1=0
- - fonts-conda-forge=1=0
- - fonttools=4.53.0=py39hfea33bf_0
- - fortran-compiler=1.7.0=hafb19e3_1
- - fplll=5.4.5=hb7d509d_0
- - fpylll=0.6.1=py39h2eadeda_0
- - fqdn=1.5.1=pyhd8ed1ab_0
- - freetype=2.12.1=hadb7bae_2
- - fribidi=1.0.10=h27ca646_0
- - furo=2024.5.6=pyhd8ed1ab_0
- - gap-core=4.12.2=he8f4e70_3
- - gap-defaults=4.12.2=hce30654_3
- - gast=0.5.4=pyhd8ed1ab_0
- - gengetopt=2.23=hbdafb3b_0
- - gettext=0.22.5=h8fbad5d_2
- - gettext-tools=0.22.5=h8fbad5d_2
- - gf2x=1.3.0=hdaa854c_2
- - gfan=0.6.2=hec08f5c_1003
- - gfortran=12.3.0=h1ca8e4b_1
- - gfortran_impl_osx-arm64=12.3.0=h53ed385_3
- - gfortran_osx-arm64=12.3.0=h57527a5_1
- - giac=1.9.0.21=h1c96721_1
- - giflib=5.2.2=h93a5062_0
- - givaro=4.2.0=h018886a_0
- - glpk=5.0=h6d7a090_0
- - gmp=6.3.0=h7bae524_2
- - gmpy2=2.1.5=py39h9bb7c0c_1
- - graphite2=1.3.13=hebf3989_1003
- - gsl=2.7=h6e638da_0
- - h11=0.14.0=pyhd8ed1ab_0
- - h2=4.1.0=pyhd8ed1ab_0
- - harfbuzz=8.5.0=h1836168_0
- - hatchling=1.25.0=pyhd8ed1ab_0
- - hpack=4.0.0=pyh9f0ad1d_0
- - httpcore=1.0.5=pyhd8ed1ab_0
- - httpx=0.27.0=pyhd8ed1ab_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=73.2=hc8870d7_0
- - idna=3.7=pyhd8ed1ab_0
- - igraph=0.10.12=h762ac30_1
- - imagesize=1.4.1=pyhd8ed1ab_0
- - iml=1.0.5=hd73f12c_1004
- - importlib-metadata=8.0.0=pyha770c72_0
- - importlib-resources=6.4.0=pyhd8ed1ab_0
- - importlib_metadata=8.0.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - ipykernel=6.29.4=pyh57ce528_0
- - ipympl=0.9.4=pyhd8ed1ab_0
- - ipython=8.18.1=pyh707e725_3
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=8.1.3=pyhd8ed1ab_0
- - isl=0.26=imath32_h347afa1_101
- - isoduration=20.11.0=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - jmol=14.32.10=hce30654_0
- - json5=0.9.25=pyhd8ed1ab_0
- - jsonpointer=3.0.0=py39h2804cbe_0
- - jsonschema=4.22.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jsonschema-with-format-nongpl=4.22.0=pyhd8ed1ab_0
- - jupyter-jsmol=2022.1.0=pyhd8ed1ab_0
- - jupyter-lsp=2.2.5=pyhd8ed1ab_0
- - jupyter-sphinx=0.5.3=pyha770c72_4
- - jupyter_client=8.6.2=pyhd8ed1ab_0
- - jupyter_core=5.7.2=py39h2804cbe_0
- - jupyter_events=0.10.0=pyhd8ed1ab_0
- - jupyter_server=2.14.1=pyhd8ed1ab_0
- - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0
- - jupyter_sphinx=0.5.3=hd8ed1ab_4
- - jupyterlab=4.2.2=pyhd8ed1ab_0
- - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1
- - jupyterlab_server=2.27.2=pyhd8ed1ab_0
- - jupyterlab_widgets=3.0.11=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py39hbd775c9_1
- - krb5=1.21.2=h92f50d5_0
- - lcalc=2.0.5=h4a402bc_2
- - lcms2=2.16=ha0e7c42_0
- - ld64=711=h634c8be_0
- - ld64_osx-arm64=711=ha4bd21c_0
- - lerc=4.0.0=h9a09cb3_0
- - libasprintf=0.22.5=h8fbad5d_2
- - libasprintf-devel=0.22.5=h8fbad5d_2
- - libatomic_ops=7.6.14=h1a8c8d9_0
- - libblas=3.9.0=20_osxarm64_openblas
- - libboost=1.85.0=h17eb2be_2
- - libboost-devel=1.85.0=hf450f58_2
- - libboost-headers=1.85.0=hce30654_2
- - libbraiding=1.2=hb7217d7_0
- - libbrial=1.2.12=h56a29cd_3
- - libbrotlicommon=1.1.0=hb547adb_1
- - libbrotlidec=1.1.0=hb547adb_1
- - libbrotlienc=1.1.0=hb547adb_1
- - libcblas=3.9.0=20_osxarm64_openblas
- - libclang-cpp16=16.0.6=default_hb63da90_8
- - libcurl=8.8.0=h7b6f9a7_0
- - libcxx=17.0.6=h5f092b4_0
- - libdeflate=1.20=h93a5062_0
- - libedit=3.1.20191231=hc8eb9b7_2
- - libev=4.33=h93a5062_2
- - libexpat=2.6.2=hebf3989_0
- - libffi=3.4.2=h3422bc3_5
- - libflint=3.0.1=h28749a5_ntl_100
- - libgd=2.3.3=hfdf3952_9
- - libgettextpo=0.22.5=h8fbad5d_2
- - libgettextpo-devel=0.22.5=h8fbad5d_2
- - libgfortran=5.0.0=13_2_0_hd922786_3
- - libgfortran-devel_osx-arm64=12.3.0=hc62be1c_3
- - libgfortran5=13.2.0=hf226fd6_3
- - libglib=2.80.2=h59d46d9_1
- - libhomfly=1.02r6=h93a5062_1
- - libhwloc=2.10.0=default_h7685b71_1001
- - libiconv=1.17=h0d3ecfb_2
- - libintl=0.22.5=h8fbad5d_2
- - libintl-devel=0.22.5=h8fbad5d_2
- - libjpeg-turbo=3.0.0=hb547adb_1
- - liblapack=3.9.0=20_osxarm64_openblas
- - liblapacke=3.9.0=20_osxarm64_openblas
- - libllvm16=16.0.6=haab561b_3
- - libnghttp2=1.58.0=ha4dd798_1
- - libopenblas=0.3.25=openmp_h6c19121_0
- - libpng=1.6.43=h091b4b1_0
- - libsodium=1.0.18=h27ca646_1
- - libsqlite=3.46.0=hfb93653_0
- - libssh2=1.11.0=h7a5bd25_0
- - libtiff=4.6.0=h07db509_3
- - libtool=2.4.7=hb7217d7_0
- - libuv=1.48.0=h93a5062_0
- - libwebp=1.4.0=h54798ee_0
- - libwebp-base=1.4.0=h93a5062_0
- - libxcb=1.16=hf2054a2_0
- - libxml2=2.12.7=ha661575_1
- - libzlib=1.3.1=hfb2fe0b_1
- - linbox=1.7.0=h3afee3a_0
- - llvm-openmp=18.1.8=hde57baf_0
- - llvm-tools=16.0.6=haab561b_3
- - lrcalc=2.1=hebf3989_6
- - m4=1.4.18=h642e427_1001
- - m4ri=20140914=hc97c1ff_1006
- - m4rie=20150908=h22b9e9d_1002
- - make=4.3=he57ea6c_1
- - markupsafe=2.1.5=py39h17cfd9d_0
- - mathjax=3.2.2=hce30654_0
- - matplotlib=3.8.4=py39hdf13c20_2
- - matplotlib-base=3.8.4=py39h15359f4_2
- - matplotlib-inline=0.1.7=pyhd8ed1ab_0
- - maxima=5.47.0=h2bbcd85_2
- - memory-allocator=0.1.3=py39h0f82c59_0
- - meson=1.5.2=pyhd8ed1ab_0
- - meson-python=0.15.0=pyh0c530f3_0
- - metis=5.1.0=h13dd4ca_1007
- - mistune=3.0.2=pyhd8ed1ab_0
- - mpc=1.3.1=h91ba8db_0
- - mpfi=1.5.4=hbde5f5b_1001
- - mpfr=4.2.1=h41d338b_1
- - mpmath=1.3.0=pyhd8ed1ab_0
- - munkres=1.1.4=pyh9f0ad1d_0
- - nauty=2.8.8=h93a5062_1
- - nbclient=0.10.0=pyhd8ed1ab_0
- - nbconvert=7.16.4=hd8ed1ab_1
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbconvert-pandoc=7.16.4=hd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=hb89a1cb_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - networkx=3.2.1=pyhd8ed1ab_0
- - ninja=1.12.1=h420ef59_0
- - notebook=7.2.1=pyhd8ed1ab_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
- - ntl=11.4.3=hbb3f309_1
- - numpy=1.26.4=py39h7aa2656_0
- - openblas=0.3.25=openmp_h55c453e_0
- - openjdk=22.0.1=hbeb2e11_0
- - openjpeg=2.5.2=h9f1df11_0
- - openssl=3.3.1=hfb2fe0b_0
- - overrides=7.7.0=pyhd8ed1ab_0
- - packaging=24.1=pyhd8ed1ab_0
- - palp=2.20=h27ca646_0
- - pandoc=3.2.1=hce30654_0
- - pandocfilters=1.5.0=pyhd8ed1ab_0
- - pango=1.54.0=h5cb9fbc_0
- - pari=2.15.5=h4f2304c_2_pthread
- - pari-elldata=0.0.20161017=0
- - pari-galdata=0.0.20180411=0
- - pari-galpol=0.0.20180625=0
- - pari-seadata=0.0.20090618=0
- - pari-seadata-small=0.0.20090618=0
- - parso=0.8.4=pyhd8ed1ab_0
- - patch=2.7.6=h27ca646_1002
- - pathspec=0.12.1=pyhd8ed1ab_0
- - pcre2=10.44=h297a79d_0
- - pep517=0.13.0=pyhd8ed1ab_0
- - perl=5.32.1=7_h4614cfb_perl5
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
- - pillow=10.3.0=py39h3baf582_1
- - pip=24.0=pyhd8ed1ab_0
- - pixman=0.43.4=hebf3989_0
- - pkg-config=0.29.2=hab62308_1008
- - pkgconfig=1.5.5=pyhd8ed1ab_4
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - planarity=3.0.2.0=h93a5062_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - ply=3.11=pyhd8ed1ab_2
- - ppl=1.2=h8b147cf_1006
- - pplpy=0.8.9=py39ha497ee3_1
- - primecount=7.6=hb6e4faa_0
- - primecountpy=0.1.0=py39hbd775c9_4
- - primesieve=11.0=hb7217d7_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - prompt_toolkit=3.0.47=hd8ed1ab_0
- - psutil=6.0.0=py39hfea33bf_0
- - pthread-stubs=0.4=h27ca646_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.2=pyhd8ed1ab_0
- - py=1.11.0=pyh6c4a22f_0
- - pybind11=2.12.0=py39h48c5dd5_0
- - pybind11-global=2.12.0=py39h48c5dd5_0
- - pycparser=2.22=pyhd8ed1ab_0
- - pygments=2.18.0=pyhd8ed1ab_0
- - pyobjc-core=10.3.1=py39h336d860_0
- - pyobjc-framework-cocoa=10.3.1=py39h336d860_0
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pyproject-api=1.7.1=pyhd8ed1ab_0
- - pyrsistent=0.20.0=py39h17cfd9d_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.9.19=hd7ebdb9_0_cpython
- - python-build=1.2.1=pyhd8ed1ab_0
- - python-dateutil=2.9.0=pyhd8ed1ab_0
- - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
- - python-json-logger=2.0.7=pyhd8ed1ab_0
- - python-lrcalc=2.1=py39hf3050f2_6
- - python-tzdata=2024.1=pyhd8ed1ab_0
- - python_abi=3.9=4_cp39
- - pythran=0.15.0=py39h1261dcd_1
- - pytz=2024.1=pyhd8ed1ab_0
- - pytz-deprecation-shim=0.1.0.post0=py39h2804cbe_4
- - pyyaml=6.0.1=py39h0f82c59_1
- - pyzmq=26.0.3=py39he7f0319_0
- - qd=2.3.22=hbec66e7_1004
- - qhull=2020.2=hc021e02_2
- - r-base=4.3.3=h8112bfe_3
- - r-lattice=0.22_6=r43hd2d937b_0
- - readline=8.2=h92ec313_1
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rfc3339-validator=0.1.4=pyhd8ed1ab_0
- - rfc3986-validator=0.1.1=pyh9f0ad1d_0
- - rhash=1.4.4=hb547adb_0
- - rpds-py=0.18.1=py39h0019b8a_0
- - rpy2=3.5.11=py39r43hf4a74a7_3
- - rw=0.9=h93a5062_2
- - sagemath-db-combinatorial-designs=20140630=1
- - sagemath-db-elliptic-curves=0.8.1=hecc5488_0
- - sagemath-db-graphs=20210214=hd8ed1ab_0
- - sagemath-db-polytopes=20170220=1
- - sagetex=3.6.1=pyhd8ed1ab_0
- - scipy=1.11.4=py39h36c428d_0
- - send2trash=1.8.3=pyh31c8845_0
- - setuptools=70.1.1=pyhd8ed1ab_0
- - setuptools-scm=8.1.0=pyhd8ed1ab_0
- - setuptools_scm=8.1.0=hd8ed1ab_0
- - sigtool=0.1.3=h44b9a77_0
- - simplegeneric=0.8.1=py_1
- - singular=4.3.2.p8=hb460b52_1
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
- - snowballstemmer=2.2.0=pyhd8ed1ab_0
- - soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=7.3.7=pyhd8ed1ab_0
- - sphinx-basic-ng=1.0.0b2=pyhd8ed1ab_1
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinxcontrib-applehelp=1.0.8=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=1.0.6=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.0.5=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=1.0.7=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sphinxcontrib-websupport=1.2.7=pyhd8ed1ab_0
- - sqlite=3.46.0=h5838104_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - suitesparse=7.7.0=hf6fcff2_1
- - symmetrica=3.0.1=hb7217d7_0
- - sympow=2.023.6=hb0babe8_3
- - sympy=1.12.1=pypyh2585a3b_103
- - tachyon=0.99b6=hb8a568e_1002
- - tapi=1100.0.11=he4954df_0
- - tar=1.34=h7cb298e_1
- - tbb=2021.12.0=h420ef59_1
- - terminado=0.18.1=pyh31c8845_0
- - texinfo=7.0=pl5321h9ea1dce_0
- - three.js=122=hd8ed1ab_2
- - threejs-sage=122=hd8ed1ab_2
- - tinycss2=1.3.0=pyhd8ed1ab_0
- - tk=8.6.13=h5083fa2_1
- - tktable=2.10=h1e387b8_6
- - tomli=2.0.1=pyhd8ed1ab_0
- - tornado=6.4.1=py39hfea33bf_0
- - tox=4.15.1=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - trove-classifiers=2024.5.22=pyhd8ed1ab_0
- - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - typing_utils=0.1.0=pyhd8ed1ab_0
- - tzdata=2024a=h0c530f3_0
- - tzlocal=5.2=py39h2804cbe_0
- - unicodedata2=15.1.0=py39h0f82c59_0
- - uri-template=1.3.0=pyhd8ed1ab_0
- - urllib3=2.2.2=pyhd8ed1ab_0
- - virtualenv=20.26.3=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webcolors=24.6.0=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=4.0.11=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=hb547adb_0
- - xorg-libxdmcp=1.1.3=h27ca646_0
- - xz=5.2.6=h57fd34a_0
- - yaml=0.2.5=h3422bc3_2
- - zeromq=4.3.5=hcc0f68c_4
- - zipp=3.19.2=pyhd8ed1ab_0
- - zlib=1.3.1=hfb2fe0b_1
- - zstd=1.5.6=hb46c0d2_0
diff --git a/src/meson.build b/src/meson.build
index 12d82fa91c3..10ce96a8da2 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -80,16 +80,19 @@ blas_order += ['cblas', 'openblas', 'OpenBLAS', 'flexiblas', 'blis', 'blas']
blas = dependency(blas_order)
gsl = dependency(
'gsl',
- fallback: ['gsl', 'gsl_dep'],
version: '>=2.5',
required: true,
)
gd = cc.find_library('gd')
-m = cc.find_library('m')
+# Only some platforms have a standalone math library (https://mesonbuild.com/howtox.html#add-math-library-lm-portably)
+m = cc.find_library('m', required: false)
m4ri = cc.find_library('m4ri')
m4rie = cc.find_library('m4rie')
mtx = cc.find_library('mtx', required: false, disabler: true)
-png = cc.find_library('png')
+png = cc.find_library('png', required: false)
+if not png.found()
+ png = cc.find_library('png16')
+endif
zlib = cc.find_library('z')
# Cannot be found via pkg-config
ec = cc.find_library('ec')
diff --git a/src/sage/algebras/down_up_algebra.py b/src/sage/algebras/down_up_algebra.py
index 1bb35730014..48e24c4fa2d 100644
--- a/src/sage/algebras/down_up_algebra.py
+++ b/src/sage/algebras/down_up_algebra.py
@@ -806,7 +806,6 @@ def is_weight_vector(self):
P = self.parent()
R = P.base_ring()
- weights = P._weights
def get_wt(n):
if not n:
@@ -853,9 +852,8 @@ def weight(self):
P = self.parent()
R = P.base_ring()
V = FreeModule(R, 2)
- weights = P._weights
it = iter(self._monomial_coefficients)
n = next(it)
if not n:
return V([P._weights[0], R.zero()])
- return V([P._weights[n], P._weights[n-1]])
+ return V([P._weights[n], P._weights[n - 1]])
diff --git a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
index 2a977b1a513..aa164d6a4ce 100644
--- a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
+++ b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
@@ -17,13 +17,12 @@ AUTHOR:
# ****************************************************************************
from sage.groups.perm_gps.permgroup_named import CyclicPermutationGroup
-from sage.libs.singular.function import lib, singular_function
+from sage.libs.singular.function import lib
from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal
from cpython.object cimport PyObject_RichCompare
# Define some singular functions
lib("freegb.lib")
-poly_reduce = singular_function("NF")
#####################
# Free algebra elements
@@ -695,6 +694,8 @@ cdef class FreeAlgebraElement_letterplace(AlgebraElement):
bck = (libsingular_options['redTail'], libsingular_options['redSB'])
libsingular_options['redTail'] = True
libsingular_options['redSB'] = True
+ from sage.libs.singular.function import singular_function
+ poly_reduce = singular_function("NF")
poly = poly_reduce(C(self._poly), gI, ring=C,
attributes={gI: {"isSB": 1}})
libsingular_options['redTail'] = bck[0]
diff --git a/src/sage/algebras/letterplace/free_algebra_letterplace.pyx b/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
index 7a57922d24a..10146c36aeb 100644
--- a/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
+++ b/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
@@ -121,7 +121,7 @@ TESTS::
algebras with different term orderings, yet.
"""
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
-from sage.libs.singular.function import lib, singular_function
+from sage.libs.singular.function import lib
from sage.libs.singular.function cimport RingWrap
from sage.libs.singular.ring cimport singular_ring_delete, singular_ring_reference
from sage.categories.algebras import Algebras
@@ -132,7 +132,6 @@ from sage.misc.cachefunc import cached_method
#####################
# Define some singular functions
lib("freegb.lib")
-freeAlgebra = singular_function("freeAlgebra")
# unfortunately we cannot set Singular attributes for MPolynomialRing_libsingular
# Hence, we must constantly work around Letterplace's sanity checks,
@@ -892,6 +891,8 @@ cdef class FreeAlgebra_letterplace_libsingular():
def __cinit__(self, MPolynomialRing_libsingular commutative_ring,
int degbound):
+ from sage.libs.singular.function import singular_function
+ freeAlgebra = singular_function("freeAlgebra")
cdef RingWrap rw = freeAlgebra(commutative_ring, degbound)
self._lp_ring = singular_ring_reference(rw._ring)
# `_lp_ring` viewed as `MPolynomialRing_libsingular` with additional
diff --git a/src/sage/algebras/letterplace/letterplace_ideal.pyx b/src/sage/algebras/letterplace/letterplace_ideal.pyx
index 77d0107ba07..060c89c3df0 100644
--- a/src/sage/algebras/letterplace/letterplace_ideal.pyx
+++ b/src/sage/algebras/letterplace/letterplace_ideal.pyx
@@ -41,7 +41,7 @@ AUTHOR:
# https://www.gnu.org/licenses/
# ****************************************************************************
from sage.rings.noncommutative_ideals import Ideal_nc
-from sage.libs.singular.function import lib, singular_function
+from sage.libs.singular.function import lib
from sage.algebras.letterplace.free_algebra_letterplace cimport FreeAlgebra_letterplace, FreeAlgebra_letterplace_libsingular
from sage.algebras.letterplace.free_algebra_element_letterplace cimport FreeAlgebraElement_letterplace
from sage.rings.infinity import Infinity
@@ -49,8 +49,6 @@ from sage.rings.infinity import Infinity
#####################
# Define some singular functions
lib("freegb.lib")
-singular_twostd = singular_function("twostd")
-poly_reduce = singular_function("NF")
class LetterplaceIdeal(Ideal_nc):
@@ -321,6 +319,8 @@ class LetterplaceIdeal(Ideal_nc):
to_L = P.hom(L.gens(), L, check=False)
from_L = L.hom(P.gens(), P, check=False)
I = L.ideal([to_L(x._poly) for x in self.__GB.gens()])
+ from sage.libs.singular.function import singular_function
+ singular_twostd = singular_function("twostd")
gb = singular_twostd(I)
out = [FreeAlgebraElement_letterplace(A, from_L(X), check=False)
for X in gb]
@@ -398,6 +398,8 @@ class LetterplaceIdeal(Ideal_nc):
bck = (libsingular_options['redTail'], libsingular_options['redSB'])
libsingular_options['redTail'] = True
libsingular_options['redSB'] = True
+ from sage.libs.singular.function import singular_function
+ poly_reduce = singular_function("NF")
sI = poly_reduce(sI, gI, ring=C, attributes={gI: {"isSB": 1}})
libsingular_options['redTail'] = bck[0]
libsingular_options['redSB'] = bck[1]
diff --git a/src/sage/algebras/lie_algebras/affine_lie_algebra.py b/src/sage/algebras/lie_algebras/affine_lie_algebra.py
index a637322e4d7..02fefb8e623 100644
--- a/src/sage/algebras/lie_algebras/affine_lie_algebra.py
+++ b/src/sage/algebras/lie_algebras/affine_lie_algebra.py
@@ -838,10 +838,9 @@ def _test_classical_subalgebra(self, **options):
tester = self._tester(**options)
B = self.basis()
roots = set(self._g._Q.roots())
- ac = list(self._g._Q.simple_coroots())
from sage.misc.misc import some_tuples
for r, s in some_tuples(roots, 2, tester._max_runs):
- ret = B[r,0].bracket(B[s,0])
+ ret = B[r, 0].bracket(B[s, 0])
if r + s in roots:
tester.assertEqual(list(ret.support()), [(r+s, 0)], f"obtained [{r}, {s}] == {ret}")
elif r == -s:
@@ -1125,7 +1124,6 @@ def __init__(self, cartan_type):
Q = finite_ct.relabel({n-i: i for i in range(n)}).root_system().root_lattice()
self._roots = tuple(Q.roots())
self._ac = tuple(Q.simple_coroots())
- CP = cartesian_product([range(3)] * n)
if cartan_type.rank() == 2:
self._short_roots = self._roots + tuple(2*r for r in Q.roots())
else:
@@ -1200,7 +1198,6 @@ def __iter__(self):
finite_ct = finite_ct.relabel({n-i: i for i in range(n)})
else:
finite_ct = self._cartan_type.classical()
- Q = finite_ct.root_system().root_lattice()
P = self._facade_for[0]
for i in ZZ:
if i % 2:
diff --git a/src/sage/algebras/lie_algebras/center_uea.py b/src/sage/algebras/lie_algebras/center_uea.py
index 54057bc9735..2799356a4c4 100644
--- a/src/sage/algebras/lie_algebras/center_uea.py
+++ b/src/sage/algebras/lie_algebras/center_uea.py
@@ -419,7 +419,6 @@ def __iter__(self):
n = len(self._gen_degrees)
wts = sorted(self._gen_degrees.values(), reverse=True)
while True:
- total = 0
for exps in intvecwt_iterator(deg, wts):
yield self.element_class(self, {n-1-i: e for i, e in enumerate(exps) if e})
deg += 1
diff --git a/src/sage/algebras/lie_algebras/classical_lie_algebra.py b/src/sage/algebras/lie_algebras/classical_lie_algebra.py
index 15badc6881f..e4e2eb75e68 100644
--- a/src/sage/algebras/lie_algebras/classical_lie_algebra.py
+++ b/src/sage/algebras/lie_algebras/classical_lie_algebra.py
@@ -2359,7 +2359,6 @@ def _construct_struct_coeffs(self, R, p_roots):
for ii, ca in r._monomial_coefficients.items()
for jj, cb in s._monomial_coefficients.items())
s_coeffs[r, s] = {r+s: coeff}
- ht = sum(r.coefficients()) + sum(s.coefficients())
s_coeffs[-r, -s] = {-r-s: -coeff}
if r - s in p_roots_set or s - r in p_roots_set:
coeff = R.prod((-1)**(ca*cb) if (ii, jj) in self._epsilon or ii == jj else 1
diff --git a/src/sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py
index 004718d4a5f..6c4418e4751 100644
--- a/src/sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py
@@ -72,7 +72,7 @@ class FermionicGhostsLieConformalAlgebra(GradedLieConformalAlgebra):
sage: R.structure_coefficients()
Finite family {('a', 'c'): ((0, K),), ('b', 'd'): ((0, K),), ('c', 'a'): ((0, K),), ('d', 'b'): ((0, K),)}
"""
- def __init__(self,R,ngens=2,names=None,index_set=None):
+ def __init__(self, R, ngens=2, names=None, index_set=None):
"""
Initialize ``self``.
diff --git a/src/sage/algebras/orlik_terao.py b/src/sage/algebras/orlik_terao.py
index 60c3c60e6db..26b3c49b443 100644
--- a/src/sage/algebras/orlik_terao.py
+++ b/src/sage/algebras/orlik_terao.py
@@ -557,7 +557,7 @@ class OrlikTeraoInvariantAlgebra(FiniteDimensionalInvariantModule):
defines the action we want, but since the groundset is `\{0,1,2\}`
we first add `1` and then subtract `1`::
- sage: def on_groundset(g,x):
+ sage: def on_groundset(g, x):
....: return g(x+1)-1
Now that we have defined an action we can create the invariant, and
@@ -625,7 +625,7 @@ def __init__(self, R, M, G, action_on_groundset=None, *args, **kwargs):
....: [0,0,-1,0,-1,-1]])
sage: M = Matroid(A);
sage: G = SymmetricGroup(6)
- sage: def on_groundset(g,x): return g(x+1)-1
+ sage: def on_groundset(g, x): return g(x+1)-1
sage: import __main__; __main__.on_groundset = on_groundset
sage: OTG = M.orlik_terao_algebra(QQ, invariant = (G,on_groundset))
sage: TestSuite(OTG).run()
@@ -687,7 +687,7 @@ def construction(self):
sage: A = matrix([[1,1,0],[-1,0,1],[0,-1,-1]])
sage: M = Matroid(A)
sage: G = SymmetricGroup(3)
- sage: def on_groundset(g,x):
+ sage: def on_groundset(g, x):
....: return g(x+1)-1
sage: OTG = M.orlik_terao_algebra(QQ, invariant=(G,on_groundset))
sage: OTG.construction() is None
@@ -718,7 +718,7 @@ def _basis_action(self, g, f):
sage: M.groundset()
frozenset({0, 1, 2})
sage: G = SymmetricGroup(3)
- sage: def on_groundset(g,x):
+ sage: def on_groundset(g, x):
....: return g(x+1)-1
sage: OTG = M.orlik_terao_algebra(QQ, invariant=(G,on_groundset))
sage: def act(g):
diff --git a/src/sage/algebras/quatalg/quaternion_algebra.py b/src/sage/algebras/quatalg/quaternion_algebra.py
index f85f282c0bb..2409db3840b 100644
--- a/src/sage/algebras/quatalg/quaternion_algebra.py
+++ b/src/sage/algebras/quatalg/quaternion_algebra.py
@@ -2609,7 +2609,7 @@ def scale(self, alpha, left=False):
INPUT:
- - `\alpha` -- element of quaternion algebra
+ - `\alpha` -- nonzero element of quaternion algebra
- ``left`` -- boolean (default: ``False``); if ``True`` multiply
`\alpha` on the left, otherwise multiply `\alpha` on the right
@@ -2632,6 +2632,15 @@ def scale(self, alpha, left=False):
sage: I.gens()[0] * i
4*i
+ The scaling element must be nonzero::
+
+ sage: B. = QuaternionAlgebra(419)
+ sage: O = B.quaternion_order([1/2 + 3/2*j, 1/6*i + 2/3*j + 1/2*k, 3*j, k])
+ sage: O * O.zero()
+ Traceback (most recent call last):
+ ...
+ ValueError: the scaling factor must be nonzero
+
TESTS:
Scaling by `1` should not change anything (see :issue:`32245`)::
@@ -2657,6 +2666,8 @@ def scale(self, alpha, left=False):
"""
Q = self.quaternion_algebra()
alpha = Q(alpha)
+ if alpha.is_zero():
+ raise ValueError("the scaling factor must be nonzero")
if left:
gens = basis_for_quaternion_lattice([alpha * b for b in self.basis()])
else:
@@ -3657,7 +3668,9 @@ def is_right_equivalent(self, J, B=10, certificate=False):
sage: B = QuaternionAlgebra(101)
sage: i,j,k = B.gens()
sage: I = B.maximal_order().unit_ideal()
- sage: beta = B.random_element() # random
+ sage: beta = B.random_element()
+ sage: while beta.is_zero():
+ ....: beta = B.random_element()
sage: J = beta*I
sage: bool, alpha = I.is_right_equivalent(J, certificate=True)
sage: bool
@@ -3711,7 +3724,9 @@ def is_principal(self, certificate=False):
sage: B. = QuaternionAlgebra(419)
sage: O = B.quaternion_order([1/2 + 3/2*j, 1/6*i + 2/3*j + 1/2*k, 3*j, k])
- sage: beta = O.random_element() # random
+ sage: beta = O.random_element()
+ sage: while beta.is_zero():
+ ....: beta = O.random_element()
sage: I = O*beta
sage: bool, alpha = I.is_principal(True)
sage: bool
@@ -3951,7 +3966,7 @@ def primitive_decomposition(self):
Check that randomly generated ideals decompose as expected::
- sage: for d in ( m for m in range(400, 750) if is_squarefree(m) ):
+ sage: for d in ( m for m in range(400, 750) if is_squarefree(m) ): # long time (7s)
....: A = QuaternionAlgebra(d)
....: O = A.maximal_order()
....: for _ in range(10):
diff --git a/src/sage/algebras/shuffle_algebra.py b/src/sage/algebras/shuffle_algebra.py
index adee056035c..aea170d2295 100644
--- a/src/sage/algebras/shuffle_algebra.py
+++ b/src/sage/algebras/shuffle_algebra.py
@@ -439,7 +439,7 @@ def _element_constructor_(self, x):
if isinstance(P, ShuffleAlgebra):
if P is self:
return x
- if not (P is self.base_ring()):
+ if P is not self.base_ring():
return self.element_class(self, x.monomial_coefficients())
if isinstance(P, DualPBWBasis):
return self(P.expansion(x))
diff --git a/src/sage/algebras/steenrod/steenrod_algebra.py b/src/sage/algebras/steenrod/steenrod_algebra.py
index 7e4c3dc014f..540cb6ee92d 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra.py
@@ -2533,7 +2533,7 @@ def an_element(self):
return self.monomial(((1, 2),))
return self.term(((), (((1,2), 1),)), GF(p)(p-1))
- def pst(self,s,t):
+ def pst(self, s, t):
r"""
The Margolis element `P^s_t`.
diff --git a/src/sage/algebras/steenrod/steenrod_algebra_bases.py b/src/sage/algebras/steenrod/steenrod_algebra_bases.py
index 06f9a5b87ad..9d37290ef3e 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra_bases.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra_bases.py
@@ -887,7 +887,7 @@ def degree_dictionary(n, basis):
deg = 2**s * (2**t - 1)
return dict
- def sorting_pair(s,t,basis): # pair used for sorting the basis
+ def sorting_pair(s, t, basis): # pair used for sorting the basis
if basis.find('wood') >= 0 and basis.find('z') >= 0:
return (-s-t,-s)
elif basis.find('wood') >= 0 or basis.find('wall') >= 0 or \
diff --git a/src/sage/algebras/steenrod/steenrod_algebra_mult.py b/src/sage/algebras/steenrod/steenrod_algebra_mult.py
index 053290bc5ed..c3ae7c181f9 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra_mult.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra_mult.py
@@ -204,7 +204,7 @@
# Milnor, p=2
-def milnor_multiplication(r,s):
+def milnor_multiplication(r, s):
r"""
Product of Milnor basis elements r and s at the prime 2.
@@ -372,7 +372,7 @@ def multinomial(list):
# Milnor, p odd
-def milnor_multiplication_odd(m1,m2,p):
+def milnor_multiplication_odd(m1, m2, p):
r"""
Product of Milnor basis elements defined by m1 and m2 at the odd prime p.
@@ -568,7 +568,7 @@ def milnor_multiplication_odd(m1,m2,p):
return result
-def multinomial_odd(list,p):
+def multinomial_odd(list, p):
r"""
Multinomial coefficient of list, mod p.
@@ -635,7 +635,7 @@ def multinomial_odd(list,p):
# Adem relations, Serre-Cartan basis, admissible sequences
-def binomial_mod2(n,k):
+def binomial_mod2(n, k):
r"""
The binomial coefficient `\binom{n}{k}`, computed mod 2.
@@ -665,7 +665,7 @@ def binomial_mod2(n,k):
return 0
-def binomial_modp(n,k,p):
+def binomial_modp(n, k, p):
r"""
The binomial coefficient `\binom{n}{k}`, computed mod `p`.
diff --git a/src/sage/arith/misc.py b/src/sage/arith/misc.py
index 745d5fcbbe7..14fe466ccd9 100644
--- a/src/sage/arith/misc.py
+++ b/src/sage/arith/misc.py
@@ -4171,7 +4171,7 @@ def multinomial_coefficients(m, n):
return r
-def kronecker_symbol(x,y):
+def kronecker_symbol(x, y):
"""
The Kronecker symbol `(x|y)`.
diff --git a/src/sage/arith/multi_modular.pyx b/src/sage/arith/multi_modular.pyx
index 1d5e9a46221..6488eb22761 100644
--- a/src/sage/arith/multi_modular.pyx
+++ b/src/sage/arith/multi_modular.pyx
@@ -196,11 +196,11 @@ cdef class MultiModularBasis_base():
while True:
if len(known_primes) >= self._num_primes:
raise RuntimeError("there are not enough primes in the interval [%s, %s] to complete this multimodular computation" % (self._l_bound, self._u_bound))
- p = random_prime(self._u_bound, lbound =self._l_bound)
+ p = random_prime(self._u_bound, lbound=self._l_bound)
if p not in known_primes:
return p
- def extend_with_primes(self, plist, partial_products = None, check=True):
+ def extend_with_primes(self, plist, partial_products=None, check=True):
"""
Extend the stored list of moduli with the given primes in ``plist``.
diff --git a/src/sage/calculus/calculus.py b/src/sage/calculus/calculus.py
index 7a3c50c569e..ef4854db676 100644
--- a/src/sage/calculus/calculus.py
+++ b/src/sage/calculus/calculus.py
@@ -2230,7 +2230,7 @@ def _is_function(v):
x^2 + 1
"""
# note that Sage variables are callable, so we only check the type
- return isinstance(v, Function) or isinstance(v, FunctionType)
+ return isinstance(v, (Function, FunctionType))
def symbolic_expression_from_maxima_string(x, equals_sub=False, maxima=maxima):
diff --git a/src/sage/calculus/functions.py b/src/sage/calculus/functions.py
index c044cc0a968..46479be8b0b 100644
--- a/src/sage/calculus/functions.py
+++ b/src/sage/calculus/functions.py
@@ -139,12 +139,12 @@ def jacobian(functions, variables):
[ 0 e^x]
"""
if isinstance(functions, Matrix) and (functions.nrows() == 1
- or functions.ncols() == 1):
+ or functions.ncols() == 1):
functions = functions.list()
- elif not (isinstance(functions, (tuple, list)) or isinstance(functions, Vector)):
+ elif not isinstance(functions, (tuple, list, Vector)):
functions = [functions]
- if not isinstance(variables, (tuple, list)) and not isinstance(variables, Vector):
+ if not isinstance(variables, (tuple, list, Vector)):
variables = [variables]
return matrix([[diff(f, v) for v in variables] for f in functions])
diff --git a/src/sage/calculus/integration.pyx b/src/sage/calculus/integration.pyx
index f746f8aa04a..179e5751894 100644
--- a/src/sage/calculus/integration.pyx
+++ b/src/sage/calculus/integration.pyx
@@ -498,7 +498,7 @@ def monte_carlo_integral(func, xl, xu, size_t calls, algorithm='plain',
(4.0, 0.0)
sage: monte_carlo_integral(lambda u,v: u*v, [0,0], [2,2], 10000) # abs tol 0.1
(4.0, 0.0)
- sage: def f(x1,x2,x3,x4): return x1*x2*x3*x4
+ sage: def f(x1, x2, x3, x4): return x1*x2*x3*x4
sage: monte_carlo_integral(f, [0,0], [2,2], 1000, params=[0.6,2]) # abs tol 0.2
(4.8, 0.0)
@@ -522,7 +522,7 @@ def monte_carlo_integral(func, xl, xu, size_t calls, algorithm='plain',
ValueError: The function to be integrated depends on 2 variables (x, y),
and so cannot be integrated in 3 dimensions. Please fix additional
variables with the 'params' argument
- sage: def f(x,y): return x*y
+ sage: def f(x, y): return x*y
sage: monte_carlo_integral(f, [0,0,0], [2,2,2], 100)
Traceback (most recent call last):
...
diff --git a/src/sage/calculus/ode.pxd b/src/sage/calculus/ode.pxd
index 2de37b91764..fad66432a9e 100644
--- a/src/sage/calculus/ode.pxd
+++ b/src/sage/calculus/ode.pxd
@@ -1,4 +1,4 @@
cdef class ode_system:
- cdef int c_j(self,double , double *, double *,double *) noexcept
+ cdef int c_j(self, double , double *, double *, double *) noexcept
- cdef int c_f(self,double t, double* , double* ) noexcept
+ cdef int c_f(self, double t, double* , double* ) noexcept
diff --git a/src/sage/calculus/ode.pyx b/src/sage/calculus/ode.pyx
index 646b937e2e4..2addf3e7f81 100644
--- a/src/sage/calculus/ode.pyx
+++ b/src/sage/calculus/ode.pyx
@@ -313,11 +313,11 @@ class ode_solver():
from sage.libs.gsl.all cimport *
cdef class van_der_pol(sage.calculus.ode.ode_system):
- cdef int c_f(self,double t, double *y,double *dydt):
+ cdef int c_f(self, double t, double *y, double *dydt):
dydt[0]=y[1]
dydt[1]=-y[0]-1000*y[1]*(y[0]*y[0]-1)
return GSL_SUCCESS
- cdef int c_j(self, double t,double *y,double *dfdy,double *dfdt):
+ cdef int c_j(self, double t, double *y, double *dfdy, double *dfdt):
dfdy[0]=0
dfdy[1]=1.0
dfdy[2]=-2.0*1000*y[0]*y[1]-1.0
diff --git a/src/sage/calculus/riemann.pyx b/src/sage/calculus/riemann.pyx
index 385aa7a09f8..455567371eb 100644
--- a/src/sage/calculus/riemann.pyx
+++ b/src/sage/calculus/riemann.pyx
@@ -65,7 +65,7 @@ ctypedef np.complex128_t COMPLEX_T
cdef FLOAT_T PI = pi
cdef FLOAT_T TWOPI = 2*PI
-cdef COMPLEX_T I = complex(0,1)
+cdef COMPLEX_T I = complex(0, 1)
cdef class Riemann_Map:
r"""
@@ -1263,7 +1263,7 @@ cpdef complex_to_spiderweb(np.ndarray[COMPLEX_T, ndim = 2] z_values,
return rgb
-cpdef complex_to_rgb(np.ndarray[COMPLEX_T, ndim = 2] z_values):
+cpdef complex_to_rgb(np.ndarray[COMPLEX_T, ndim=2] z_values):
r"""
Convert from a (Numpy) array of complex numbers to its corresponding
matrix of RGB values. For internal use of :meth:`~Riemann_Map.plot_colored`
diff --git a/src/sage/calculus/tests.py b/src/sage/calculus/tests.py
index ac76b5e4f70..2879dda115d 100644
--- a/src/sage/calculus/tests.py
+++ b/src/sage/calculus/tests.py
@@ -16,7 +16,7 @@
::
- sage: def christoffel(i,j,k,vars,g):
+ sage: def christoffel(i, j, k, vars, g):
....: s = 0
....: ginv = g^(-1)
....: for l in range(g.nrows()):
diff --git a/src/sage/calculus/transforms/dwt.pyx b/src/sage/calculus/transforms/dwt.pyx
index fdb68153a8b..c004b00715c 100644
--- a/src/sage/calculus/transforms/dwt.pyx
+++ b/src/sage/calculus/transforms/dwt.pyx
@@ -103,11 +103,11 @@ cdef class DiscreteWaveletTransform(GSLDoubleArray):
"""
Discrete wavelet transform class.
"""
- def __cinit__(self,size_t n,size_t stride, wavelet_type, size_t wavelet_k):
+ def __cinit__(self, size_t n, size_t stride, wavelet_type, size_t wavelet_k):
self.wavelet = NULL
self.workspace = NULL
- def __init__(self,size_t n,size_t stride, wavelet_type, size_t wavelet_k):
+ def __init__(self, size_t n, size_t stride, wavelet_type, size_t wavelet_k):
if not is2pow(n):
raise NotImplementedError("discrete wavelet transform only implemented when n is a 2-power")
GSLDoubleArray.__init__(self,n,stride)
diff --git a/src/sage/calculus/var.pyx b/src/sage/calculus/var.pyx
index 4967bb9bd9a..853c5c493ff 100644
--- a/src/sage/calculus/var.pyx
+++ b/src/sage/calculus/var.pyx
@@ -255,7 +255,7 @@ def function(s, **kwds):
sage: foo(x).conjugate()
2*x
- sage: def deriv(self, *args,**kwds): print("{} {}".format(args, kwds)); return args[kwds['diff_param']]^2
+ sage: def deriv(self, *args, **kwds): print("{} {}".format(args, kwds)); return args[kwds['diff_param']]^2
sage: foo = function("foo", nargs=2, derivative_func=deriv)
sage: foo(x,y).derivative(y)
(x, y) {'diff_param': 1}
diff --git a/src/sage/categories/category.py b/src/sage/categories/category.py
index b534f7be794..feb1b2cb393 100644
--- a/src/sage/categories/category.py
+++ b/src/sage/categories/category.py
@@ -173,7 +173,7 @@ class Category(UniqueRepresentation, SageObject):
....: pass
....:
....: class ElementMethods:# holds the generic operations on elements
- ....: def gcd(x,y):
+ ....: def gcd(x, y):
....: # Euclid algorithms
....: pass
....:
diff --git a/src/sage/categories/category_with_axiom.py b/src/sage/categories/category_with_axiom.py
index 766ec9b64cb..014ac68d369 100644
--- a/src/sage/categories/category_with_axiom.py
+++ b/src/sage/categories/category_with_axiom.py
@@ -1695,7 +1695,7 @@ class ``Sets.Finite``), or in a separate file (typically in a class
)
-def uncamelcase(s,separator=" "):
+def uncamelcase(s, separator=" "):
"""
EXAMPLES::
diff --git a/src/sage/categories/classical_crystals.py b/src/sage/categories/classical_crystals.py
index 42dc02bdb2f..b8b05f17b55 100644
--- a/src/sage/categories/classical_crystals.py
+++ b/src/sage/categories/classical_crystals.py
@@ -328,11 +328,11 @@ def __iter__(self):
sage: fb4 = lambda a,b,c,d: crystals.Tableaux(['B',4],shape=[a+b+c+d,b+c+d,c+d,d])
sage: fd4 = lambda a,b,c,d: crystals.Tableaux(['D',4],shape=[a+b+c+d,b+c+d,c+d,d])
sage: fd5 = lambda a,b,c,d,e: crystals.Tableaux(['D',5],shape=[a+b+c+d+e,b+c+d+e,c+d+e,d+e,e])
- sage: def fd4spinplus(a,b,c,d):
+ sage: def fd4spinplus(a, b, c, d):
....: C = crystals.Tableaux(['D',4],shape=[a+b+c+d,b+c+d,c+d,d])
....: D = crystals.SpinsPlus(['D',4])
....: return crystals.TensorProduct(C,D,generators=[[C[0],D[0]]])
- sage: def fb3spin(a,b,c):
+ sage: def fb3spin(a, b, c):
....: C = crystals.Tableaux(['B',3],shape=[a+b+c,b+c,c])
....: D = crystals.Spins(['B',3])
....: return crystals.TensorProduct(C,D,generators=[[C[0],D[0]]])
diff --git a/src/sage/categories/crystals.py b/src/sage/categories/crystals.py
index c822bbd50fc..ddcdf6bb44d 100644
--- a/src/sage/categories/crystals.py
+++ b/src/sage/categories/crystals.py
@@ -1177,7 +1177,7 @@ def plot(self, **options):
sage: print(C.plot())
Graphics object consisting of 17 graphics primitives
"""
- return self.digraph().plot(edge_labels=True,vertex_size=0,**options)
+ return self.digraph().plot(edge_labels=True, vertex_size=0, **options)
def plot3d(self, **options):
"""
diff --git a/src/sage/categories/discrete_valuation.py b/src/sage/categories/discrete_valuation.py
index 77267664bb2..39ed8ae8148 100644
--- a/src/sage/categories/discrete_valuation.py
+++ b/src/sage/categories/discrete_valuation.py
@@ -196,7 +196,7 @@ def is_unit(self):
"""
return self.valuation() == 0
- def gcd(self,other):
+ def gcd(self, other):
"""
Return the greatest common divisor of ``self`` and ``other``,
normalized so that it is a power of the distinguished
@@ -209,7 +209,7 @@ def gcd(self,other):
else:
return self.parent().uniformizer() ** val
- def lcm(self,other):
+ def lcm(self, other):
"""
Return the least common multiple of ``self`` and ``other``,
normalized so that it is a power of the distinguished
diff --git a/src/sage/categories/distributive_magmas_and_additive_magmas.py b/src/sage/categories/distributive_magmas_and_additive_magmas.py
index 830c6c77c8c..cd736a5d15c 100644
--- a/src/sage/categories/distributive_magmas_and_additive_magmas.py
+++ b/src/sage/categories/distributive_magmas_and_additive_magmas.py
@@ -16,7 +16,7 @@
class DistributiveMagmasAndAdditiveMagmas(CategoryWithAxiom):
"""
- The category of sets `(S,+,*)` with `*` distributing on `+`.
+ The category of sets `(S, +, *)` with `*` distributing on `+`.
This is similar to a ring, but `+` and `*` are only required to be
(additive) magmas.
diff --git a/src/sage/categories/fields.py b/src/sage/categories/fields.py
index dafa795f94f..e1f5c3d68f6 100644
--- a/src/sage/categories/fields.py
+++ b/src/sage/categories/fields.py
@@ -193,7 +193,7 @@ def _call_(self, x):
class ParentMethods:
- def is_field( self, proof=True ):
+ def is_field(self, proof=True):
r"""
Return ``True`` as ``self`` is a field.
@@ -458,6 +458,38 @@ def fraction_field(self):
"""
return self
+ def ideal(self, *gens, **kwds):
+ """
+ Return the ideal generated by ``gens``.
+
+ INPUT:
+
+ - an element or a list/tuple/sequence of elements, the generators
+
+ Any named arguments are ignored.
+
+ EXAMPLES::
+
+ sage: QQ.ideal(2)
+ Principal ideal (1) of Rational Field
+ sage: QQ.ideal(0)
+ Principal ideal (0) of Rational Field
+
+ TESTS::
+
+ sage: QQ.ideal(2, 4)
+ Principal ideal (1) of Rational Field
+
+ sage: QQ.ideal([2, 4])
+ Principal ideal (1) of Rational Field
+ """
+ if len(gens) == 1 and isinstance(gens[0], (list, tuple)):
+ gens = gens[0]
+ for x in gens:
+ if not self(x).is_zero():
+ return self.unit_ideal()
+ return self.zero_ideal()
+
def _squarefree_decomposition_univariate_polynomial(self, f):
r"""
Return the square-free decomposition of ``f`` over this field.
@@ -585,7 +617,7 @@ def quo_rem(self, other):
raise ZeroDivisionError
return (self/other, self.parent().zero())
- def is_unit( self ):
+ def is_unit(self):
r"""
Return ``True`` if ``self`` has a multiplicative inverse.
@@ -602,7 +634,7 @@ def is_unit( self ):
# Of course, in general gcd and lcm in a field are not very interesting.
# However, they should be implemented!
@coerce_binop
- def gcd(self,other):
+ def gcd(self, other):
"""
Greatest common divisor.
diff --git a/src/sage/categories/filtered_modules_with_basis.py b/src/sage/categories/filtered_modules_with_basis.py
index fe28f158cc4..6928fffc7ed 100644
--- a/src/sage/categories/filtered_modules_with_basis.py
+++ b/src/sage/categories/filtered_modules_with_basis.py
@@ -1197,7 +1197,6 @@ def hilbert_series(self, prec=None):
from collections import defaultdict
from sage.rings.integer_ring import ZZ
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
- R = self.base_ring()
PR = PolynomialRing(ZZ, 't')
dims = defaultdict(ZZ)
for b in self.basis():
diff --git a/src/sage/categories/finite_dimensional_algebras_with_basis.py b/src/sage/categories/finite_dimensional_algebras_with_basis.py
index f4a31b557f9..187fe3d675a 100644
--- a/src/sage/categories/finite_dimensional_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_algebras_with_basis.py
@@ -207,7 +207,6 @@ def root_fcn(s, x):
s = 1
n = self.dimension()
B = [b.on_left_matrix() for b in self.basis()]
- I = B[0].parent().one()
while s <= n:
# we use that p_{AB}(x) = p_{BA}(x) here
data = [[None]*(len(B)+1) for _ in B]
diff --git a/src/sage/categories/finite_dimensional_lie_algebras_with_basis.py b/src/sage/categories/finite_dimensional_lie_algebras_with_basis.py
index 6f27e3fa33d..4e5212885ce 100644
--- a/src/sage/categories/finite_dimensional_lie_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_lie_algebras_with_basis.py
@@ -605,13 +605,13 @@ def normalizer_basis(self, S):
sc[k[1], k[0]] = -v
X = self.basis().keys()
d = len(X)
- ret = []
t = m.nrows()
c_mat = matrix(self.base_ring(),
- [[sum(m[i,j] * sc[x,xp][k] for j, xp in enumerate(X)
- if (x, xp) in sc)
+ [[sum(m[i, j] * sc[x, xp][k]
+ for j, xp in enumerate(X) if (x, xp) in sc)
for x in X]
- + [0]*(i*t) + [-m[j,k] for j in range(t)] + [0]*((t-i-1)*t)
+ + [0]*(i*t) + [-m[j, k] for j in range(t)]
+ + [0]*((t-i-1)*t)
for i in range(t) for k in range(d)])
C = c_mat.right_kernel().basis_matrix()
return [self.from_vector(c[:d]) for c in C]
diff --git a/src/sage/categories/finite_dimensional_modules_with_basis.py b/src/sage/categories/finite_dimensional_modules_with_basis.py
index ee5b6490346..4b91c642074 100644
--- a/src/sage/categories/finite_dimensional_modules_with_basis.py
+++ b/src/sage/categories/finite_dimensional_modules_with_basis.py
@@ -212,7 +212,7 @@ def annihilator_basis(self, S, action=operator.mul, side='right'):
sage: # needs sage.graphs sage.modules
sage: x,y,a,b = F.basis()
- sage: def scalar(u,v):
+ sage: def scalar(u, v):
....: return vector([sum(u[i]*v[i] for i in F.basis().keys())])
sage: F.annihilator_basis([x + y, a + b], scalar)
(x - y, a - b)
@@ -496,7 +496,7 @@ def twisted_invariant_module(self, G, chi,
sage: # needs sage.combinat sage.groups sage.modules
sage: M = CombinatorialFreeModule(QQ, [1,2,3])
sage: G = SymmetricGroup(3)
- sage: def action(g,x): return(M.term(g(x))) # permute coordinates
+ sage: def action(g, x): return(M.term(g(x))) # permute coordinates
sage: T = M.twisted_invariant_module(G, [2,0,-1],
....: action_on_basis=action)
sage: import __main__; __main__.action = action
diff --git a/src/sage/categories/finitely_generated_lambda_bracket_algebras.py b/src/sage/categories/finitely_generated_lambda_bracket_algebras.py
index 7d028630658..4a7ca22d50f 100644
--- a/src/sage/categories/finitely_generated_lambda_bracket_algebras.py
+++ b/src/sage/categories/finitely_generated_lambda_bracket_algebras.py
@@ -51,7 +51,7 @@ def ngens(self):
"""
return len(self.gens())
- def gen(self,i):
+ def gen(self, i):
r"""
The ``i``-th generator of this Lie conformal algebra.
diff --git a/src/sage/categories/group_algebras.py b/src/sage/categories/group_algebras.py
index e83de9263d3..72f3dd7251b 100644
--- a/src/sage/categories/group_algebras.py
+++ b/src/sage/categories/group_algebras.py
@@ -238,7 +238,7 @@ def coproduct_on_basis(self, g):
g = self.term(g)
return tensor([g, g])
- def antipode_on_basis(self,g):
+ def antipode_on_basis(self, g):
r"""
Return the antipode of the element ``g`` of the basis.
@@ -263,7 +263,7 @@ def antipode_on_basis(self,g):
"""
return self.term(~g)
- def counit_on_basis(self,g):
+ def counit_on_basis(self, g):
r"""
Return the counit of the element ``g`` of the basis.
@@ -283,7 +283,7 @@ def counit_on_basis(self,g):
"""
return self.base_ring().one()
- def counit(self,x):
+ def counit(self, x):
r"""
Return the counit of the element ``x`` of the group
algebra.
diff --git a/src/sage/categories/magmas_and_additive_magmas.py b/src/sage/categories/magmas_and_additive_magmas.py
index 4b612606aee..24a6955abac 100644
--- a/src/sage/categories/magmas_and_additive_magmas.py
+++ b/src/sage/categories/magmas_and_additive_magmas.py
@@ -19,7 +19,7 @@
class MagmasAndAdditiveMagmas(Category_singleton):
"""
- The category of sets `(S,+,*)` with an additive operation '+' and
+ The category of sets `(S, +, *)` with an additive operation '+' and
a multiplicative operation `*`
EXAMPLES::
diff --git a/src/sage/categories/modules_with_basis.py b/src/sage/categories/modules_with_basis.py
index 7b51d82c7ba..489f2f97dbb 100644
--- a/src/sage/categories/modules_with_basis.py
+++ b/src/sage/categories/modules_with_basis.py
@@ -1395,7 +1395,7 @@ def random_element(self, n=2):
we can find a random element in a trivial module::
sage: class Foo(CombinatorialFreeModule): # needs sage.modules
- ....: def _element_constructor_(self,x):
+ ....: def _element_constructor_(self, x):
....: if x in self:
....: return x
....: else:
@@ -2535,7 +2535,7 @@ def apply_multilinear_morphism(self, f, codomain=None):
and `f` the bilinear morphism `(a,b) \mapsto b \otimes a`
from `A \times B` to `B \otimes A`::
- sage: def f(a,b):
+ sage: def f(a, b):
....: return tensor([b,a])
Now, calling applying `f` on `a \otimes b` returns the same
@@ -2564,7 +2564,7 @@ def apply_multilinear_morphism(self, f, codomain=None):
Mind the `0` in the sums above; otherwise `f` would
not return `0` in `\ZZ`::
- sage: def f(a,b):
+ sage: def f(a, b):
....: return sum(a.coefficients()) * sum(b.coefficients())
sage: type(f(A.zero(), B.zero())) # needs sage.modules
<... 'int'>
diff --git a/src/sage/categories/morphism.pyx b/src/sage/categories/morphism.pyx
index 34bcd1ca5f5..28e89a36299 100644
--- a/src/sage/categories/morphism.pyx
+++ b/src/sage/categories/morphism.pyx
@@ -619,7 +619,7 @@ cdef class SetMorphism(Morphism):
sage: from sage.categories.morphism import SetMorphism
sage: R. = QQ[]
- sage: def foo(x,*args,**kwds):
+ sage: def foo(x, *args, **kwds):
....: print('foo called with {} {}'.format(args, kwds))
....: return x
sage: f = SetMorphism(Hom(R,R,Rings()), foo)
diff --git a/src/sage/categories/regular_crystals.py b/src/sage/categories/regular_crystals.py
index 506be6ba4ec..0459c0e0695 100644
--- a/src/sage/categories/regular_crystals.py
+++ b/src/sage/categories/regular_crystals.py
@@ -587,7 +587,7 @@ def demazure_operator_simple(self, i, ring=None):
l.append(element)
return - C.sum_of_monomials(l)
- def stembridgeDelta_depth(self,i,j):
+ def stembridgeDelta_depth(self, i, j):
r"""
Return the difference in the `j`-depth of ``self`` and `e_i`
of ``self``, where `i` and `j` are in the index set of the
@@ -610,7 +610,7 @@ def stembridgeDelta_depth(self,i,j):
return 0
return -self.e(i).epsilon(j) + self.epsilon(j)
- def stembridgeDelta_rise(self,i,j):
+ def stembridgeDelta_rise(self, i, j):
r"""
Return the difference in the `j`-rise of ``self`` and `e_i` of
``self``, where `i` and `j` are in the index set of the
@@ -633,7 +633,7 @@ def stembridgeDelta_rise(self,i,j):
return 0
return self.e(i).phi(j) - self.phi(j)
- def stembridgeDel_depth(self,i,j):
+ def stembridgeDel_depth(self, i, j):
r"""
Return the difference in the `j`-depth of ``self`` and `f_i` of
``self``, where `i` and `j` are in the index set of the
@@ -656,7 +656,7 @@ def stembridgeDel_depth(self,i,j):
return 0
return -self.epsilon(j) + self.f(i).epsilon(j)
- def stembridgeDel_rise(self,i,j):
+ def stembridgeDel_rise(self, i, j):
r"""
Return the difference in the `j`-rise of ``self`` and `f_i` of
``self``, where `i` and `j` are in the index set of the
@@ -679,7 +679,7 @@ def stembridgeDel_rise(self,i,j):
return 0
return self.phi(j)-self.f(i).phi(j)
- def stembridgeTriple(self,i,j):
+ def stembridgeTriple(self, i, j):
r"""
Let `A` be the Cartan matrix of the crystal, `x` a crystal element,
and let `i` and `j` be in the index set of the crystal.
diff --git a/src/sage/categories/rings.py b/src/sage/categories/rings.py
index 781f1a1462b..8db71edfb9c 100644
--- a/src/sage/categories/rings.py
+++ b/src/sage/categories/rings.py
@@ -12,12 +12,14 @@
# https://www.gnu.org/licenses/
# *****************************************************************************
from functools import reduce
+from types import GeneratorType
from sage.misc.cachefunc import cached_method
from sage.misc.lazy_import import LazyImport
from sage.categories.category_with_axiom import CategoryWithAxiom
from sage.categories.rngs import Rngs
from sage.structure.element import Element
+from sage.structure.parent import Parent
class Rings(CategoryWithAxiom):
@@ -434,6 +436,30 @@ def is_noetherian(self):
"""
return False
+ def is_prime_field(self):
+ r"""
+ Return ``True`` if this ring is one of the prime fields `\QQ` or
+ `\GF{p}`.
+
+ EXAMPLES::
+
+ sage: QQ.is_prime_field()
+ True
+ sage: GF(3).is_prime_field()
+ True
+ sage: GF(9, 'a').is_prime_field() # needs sage.rings.finite_rings
+ False
+ sage: ZZ.is_prime_field()
+ False
+ sage: QQ['x'].is_prime_field()
+ False
+ sage: Qp(19).is_prime_field() # needs sage.rings.padics
+ False
+ """
+ # the case of QQ is handled by QQ itself
+ from sage.categories.finite_fields import FiniteFields
+ return self in FiniteFields() and self.degree() == 1
+
def is_zero(self) -> bool:
"""
Return ``True`` if this is the zero ring.
@@ -457,6 +483,54 @@ def is_zero(self) -> bool:
"""
return self.one() == self.zero()
+ def is_subring(self, other):
+ """
+ Return ``True`` if the canonical map from ``self`` to ``other`` is
+ injective.
+
+ This raises a :exc:`NotImplementedError` if not known.
+
+ EXAMPLES::
+
+ sage: ZZ.is_subring(QQ)
+ True
+ sage: ZZ.is_subring(GF(19))
+ False
+
+ TESTS::
+
+ sage: QQ.is_subring(QQ['x'])
+ True
+ sage: QQ.is_subring(GF(7))
+ False
+ sage: QQ.is_subring(CyclotomicField(7)) # needs sage.rings.number_field
+ True
+ sage: QQ.is_subring(ZZ)
+ False
+
+ Every ring is a subring of itself, :issue:`17287`::
+
+ sage: QQbar.is_subring(QQbar) # needs sage.rings.number_field
+ True
+ sage: RR.is_subring(RR)
+ True
+ sage: CC.is_subring(CC) # needs sage.rings.real_mpfr
+ True
+ sage: x = polygen(ZZ, 'x')
+ sage: K. = NumberField(x^3 - x + 1/10) # needs sage.rings.number_field
+ sage: K.is_subring(K) # needs sage.rings.number_field
+ True
+ sage: R. = RR[]
+ sage: R.is_subring(R)
+ True
+ """
+ if self is other:
+ return True
+ try:
+ return self.Hom(other).natural_map().is_injective()
+ except (TypeError, AttributeError):
+ return False
+
def bracket(self, x, y):
"""
Return the Lie bracket `[x, y] = x y - y x` of `x` and `y`.
@@ -815,32 +889,34 @@ def ideal(self, *args, **kwds):
"""
Create an ideal of this ring.
- .. NOTE::
+ INPUT:
- The code is copied from the base class
- :class:`~sage.rings.ring.Ring`. This is
- because there are rings that do not inherit
- from that class, such as matrix algebras.
- See :issue:`7797`.
+ - an element or a list/tuple/sequence of elements, the generators
- INPUT:
+ - ``coerce`` -- boolean (default: ``True``); whether to first coerce
+ the elements into this ring. This must be a keyword
+ argument. Only set it to ``False`` if you are certain that each
+ generator is already in the ring.
- - an element or a list/tuple/sequence of elements
- - ``coerce`` -- boolean (default: ``True``);
- first coerce the elements into this ring
- - ``side`` -- (optional) string, one of ``'twosided'``
- (default), ``'left'``, ``'right'``; determines
- whether the resulting ideal is twosided, a left
- ideal or a right ideal
+ - ``ideal_class`` -- callable (default: ``self._ideal_class_()``);
+ this must be a keyword argument. A constructor for ideals, taking
+ the ring as the first argument and then the generators.
+ Usually a subclass of :class:`~sage.rings.ideal.Ideal_generic` or
+ :class:`~sage.rings.noncommutative_ideals.Ideal_nc`.
- EXAMPLES::
+ - Further named arguments (such as ``side`` in the case of
+ non-commutative rings) are forwarded to the ideal class.
+
+ The keyword ``side`` can be one of ``'twosided'``,
+ ``'left'``, ``'right'``. It determines whether
+ the resulting ideal is twosided, a left ideal or a right ideal.
+
+ EXAMPLES:
+
+ Matrix rings::
sage: # needs sage.modules
sage: MS = MatrixSpace(QQ, 2, 2)
- sage: isinstance(MS, Ring)
- False
- sage: MS in Rings()
- True
sage: MS.ideal(2)
Twosided Ideal
(
@@ -858,6 +934,36 @@ def ideal(self, *args, **kwds):
[0 0]
)
of Full MatrixSpace of 2 by 2 dense matrices over Rational Field
+
+ Polynomial rings::
+
+ sage: R. = QQ[]
+ sage: R.ideal(x,y)
+ Ideal (x, y) of Multivariate Polynomial Ring in x, y over Rational Field
+ sage: R.ideal(x+y^2)
+ Ideal (y^2 + x) of Multivariate Polynomial Ring in x, y over Rational Field
+ sage: R.ideal( [x^3,y^3+x^3] )
+ Ideal (x^3, x^3 + y^3) of Multivariate Polynomial Ring in x, y over Rational Field
+
+ Non-commutative rings::
+
+ sage: A = SteenrodAlgebra(2) # needs sage.combinat sage.modules
+ sage: A.ideal(A.1, A.2^2) # needs sage.combinat sage.modules
+ Twosided Ideal (Sq(2), Sq(2,2)) of mod 2 Steenrod algebra, milnor basis
+ sage: A.ideal(A.1, A.2^2, side='left') # needs sage.combinat sage.modules
+ Left Ideal (Sq(2), Sq(2,2)) of mod 2 Steenrod algebra, milnor basis
+
+ TESTS:
+
+ Make sure that :issue:`11139` is fixed::
+
+ sage: R. = QQ[]
+ sage: R.ideal([])
+ Principal ideal (0) of Univariate Polynomial Ring in x over Rational Field
+ sage: R.ideal(())
+ Principal ideal (0) of Univariate Polynomial Ring in x over Rational Field
+ sage: R.ideal()
+ Principal ideal (0) of Univariate Polynomial Ring in x over Rational Field
"""
if 'coerce' in kwds:
coerce = kwds['coerce']
@@ -866,8 +972,7 @@ def ideal(self, *args, **kwds):
coerce = True
from sage.rings.ideal import Ideal_generic
- from types import GeneratorType
- if len(args) == 0:
+ if not args:
gens = [self(0)]
else:
gens = args
@@ -889,26 +994,23 @@ def ideal(self, *args, **kwds):
elif isinstance(first, (list, tuple, GeneratorType)):
gens = first
else:
- try:
- if self.has_coerce_map_from(first):
- gens = first.gens() # we have a ring as argument
- elif isinstance(first, Element):
- gens = [first]
- else:
- raise ArithmeticError("there is no coercion from %s to %s" % (first, self))
- except TypeError: # first may be a ring element
- pass
break
- if coerce:
+
+ if not gens:
+ gens = [self.zero()]
+ elif coerce:
gens = [self(g) for g in gens]
+
from sage.categories.principal_ideal_domains import PrincipalIdealDomains
if self in PrincipalIdealDomains():
# Use GCD algorithm to obtain a principal ideal
g = gens[0]
if len(gens) == 1:
try:
- g = g.gcd(g) # note: we set g = gcd(g, g) to "canonicalize" the generator: make polynomials monic, etc.
- except (AttributeError, NotImplementedError):
+ # note: we set g = gcd(g, g) to "canonicalize" the generator:
+ # make polynomials monic, etc.
+ g = g.gcd(g)
+ except (AttributeError, NotImplementedError, IndexError):
pass
else:
for h in gens[1:]:
diff --git a/src/sage/categories/semirings.py b/src/sage/categories/semirings.py
index 624a867608a..6ba7dbec342 100644
--- a/src/sage/categories/semirings.py
+++ b/src/sage/categories/semirings.py
@@ -17,10 +17,10 @@ class Semirings(CategoryWithAxiom):
"""
The category of semirings.
- A semiring `(S,+,*)` is similar to a ring, but without the
+ A semiring `(S, +, *)` is similar to a ring, but without the
requirement that each element must have an additive inverse. In
other words, it is a combination of a commutative additive monoid
- `(S,+)` and a multiplicative monoid `(S,*)`, where `*` distributes
+ `(S, +)` and a multiplicative monoid `(S, *)`, where `*` distributes
over `+`.
.. SEEALSO::
diff --git a/src/sage/categories/sets_cat.py b/src/sage/categories/sets_cat.py
index 9d63ac2fa30..ba13c6bc9a4 100644
--- a/src/sage/categories/sets_cat.py
+++ b/src/sage/categories/sets_cat.py
@@ -1750,8 +1750,8 @@ def _sympy_(self):
class ElementMethods:
## Should eventually contain the basic operations which are no math
## latex, hash, ...
- ##def equal(x,y):
- ##def =(x,y):
+ ##def equal(x, y):
+ ##def =(x, y):
# Used by Element._test_category
_dummy_attribute = None
diff --git a/src/sage/categories/simplicial_sets.py b/src/sage/categories/simplicial_sets.py
index 65e526d8688..76030be831b 100644
--- a/src/sage/categories/simplicial_sets.py
+++ b/src/sage/categories/simplicial_sets.py
@@ -499,7 +499,6 @@ def covering_map(self, character):
for g in G:
cell = AbstractSimplex(d, name="({}, {})".format(s, g))
cells_dict[(s, g)] = cell
- fd = []
faces = self.faces(s)
f0 = faces[0]
for h in G:
@@ -612,7 +611,6 @@ def _canonical_twisting_operator(self):
Quotient of Univariate Laurent Polynomial Ring in F1 over Integer Ring by the ideal (-1 + F1^2)
"""
G, d = self._universal_cover_dict()
- phi = G.abelianization_map()
abelG, R, I, images = G.abelianization_to_algebra(ZZ)
QRP = R.quotient_ring(I)
res = {}
@@ -908,7 +906,6 @@ def twisted_homology(self, n, reduced=False):
singred = singular_function("reduce")
singlift = singular_function("lift")
G, d = self._universal_cover_dict()
- phi = G.abelianization_map()
abelG, R, I, images = G.abelianization_to_algebra(ZZ)
CC = self.twisted_chain_complex()
M1 = CC.differential(n).T
diff --git a/src/sage/categories/supercrystals.py b/src/sage/categories/supercrystals.py
index 09b924e0ad6..59fbf9241df 100644
--- a/src/sage/categories/supercrystals.py
+++ b/src/sage/categories/supercrystals.py
@@ -54,7 +54,7 @@ def tensor(self, *crystals, **options):
Crystal of BKK tableaux of shape [2, 1] of gl(2|3)]
sage: G = T.digraph()
sage: H = S.digraph()
- sage: G.is_isomorphic(H, edge_labels= True)
+ sage: G.is_isomorphic(H, edge_labels=True)
True
"""
cartan_type = self.cartan_type()
diff --git a/src/sage/categories/triangular_kac_moody_algebras.py b/src/sage/categories/triangular_kac_moody_algebras.py
index d6541107a0f..26b94d34b9d 100644
--- a/src/sage/categories/triangular_kac_moody_algebras.py
+++ b/src/sage/categories/triangular_kac_moody_algebras.py
@@ -365,7 +365,6 @@ def _transpose_basis_mapping(self):
alphacheck[1]: alphacheck[1],
alphacheck[2]: alphacheck[2]}
"""
- Q = self.cartan_type().root_system().root_lattice()
K = self.basis().keys()
deg_map = {}
ret = {}
diff --git a/src/sage/coding/code_bounds.py b/src/sage/coding/code_bounds.py
index 4bb33d9565f..892445c75bc 100644
--- a/src/sage/coding/code_bounds.py
+++ b/src/sage/coding/code_bounds.py
@@ -361,7 +361,7 @@ def gilbert_lower_bound(n, q, d):
return ans
-def plotkin_upper_bound(n,q,d, algorithm=None):
+def plotkin_upper_bound(n, q, d, algorithm=None):
r"""
Return the Plotkin upper bound.
@@ -400,7 +400,7 @@ def plotkin_upper_bound(n,q,d, algorithm=None):
return int(d/( d - t * fact)) * q**(n - fact)
-def griesmer_upper_bound(n,q,d,algorithm=None):
+def griesmer_upper_bound(n, q, d, algorithm=None):
r"""
Return the Griesmer upper bound.
@@ -456,7 +456,7 @@ def griesmer_upper_bound(n,q,d,algorithm=None):
return q**(k-1)
-def elias_upper_bound(n,q,d,algorithm=None):
+def elias_upper_bound(n, q, d, algorithm=None):
r"""
Return the Elias upper bound.
@@ -486,7 +486,7 @@ def ff(n, d, w, q):
return int(bnd)
-def hamming_upper_bound(n,q,d):
+def hamming_upper_bound(n, q, d):
r"""
Return the Hamming upper bound.
diff --git a/src/sage/coding/code_constructions.py b/src/sage/coding/code_constructions.py
index be1c087c280..ecee1cd349f 100644
--- a/src/sage/coding/code_constructions.py
+++ b/src/sage/coding/code_constructions.py
@@ -329,7 +329,7 @@ def walsh_matrix(m0):
##################### main constructions #####################
-def DuadicCodeEvenPair(F,S1,S2):
+def DuadicCodeEvenPair(F, S1, S2):
r"""
Construct the "even pair" of duadic codes associated to the
"splitting" (see the docstring for ``_is_a_splitting``
@@ -379,7 +379,7 @@ def DuadicCodeEvenPair(F,S1,S2):
return C1,C2
-def DuadicCodeOddPair(F,S1,S2):
+def DuadicCodeOddPair(F, S1, S2):
"""
Construct the "odd pair" of duadic codes associated to the
"splitting" S1, S2 of n.
@@ -435,7 +435,7 @@ def DuadicCodeOddPair(F,S1,S2):
return C1,C2
-def ExtendedQuadraticResidueCode(n,F):
+def ExtendedQuadraticResidueCode(n, F):
r"""
The extended quadratic residue code (or XQR code) is obtained from
a QR code by adding a check bit to the last coordinate. (These
@@ -500,7 +500,7 @@ def from_parity_check_matrix(H):
return Cd.dual_code()
-def QuadraticResidueCode(n,F):
+def QuadraticResidueCode(n, F):
r"""
A quadratic residue code (or QR code) is a cyclic code whose
generator polynomial is the product of the polynomials
@@ -544,7 +544,7 @@ def QuadraticResidueCode(n,F):
return QuadraticResidueCodeOddPair(n,F)[0]
-def QuadraticResidueCodeEvenPair(n,F):
+def QuadraticResidueCodeEvenPair(n, F):
r"""
Quadratic residue codes of a given odd prime length and base ring
either don't exist at all or occur as 4-tuples - a pair of
@@ -610,7 +610,7 @@ def QuadraticResidueCodeEvenPair(n,F):
return DuadicCodeEvenPair(F,Q,N)
-def QuadraticResidueCodeOddPair(n,F):
+def QuadraticResidueCodeOddPair(n, F):
r"""
Quadratic residue codes of a given odd prime length and base ring
either don't exist at all or occur as 4-tuples - a pair of
@@ -696,7 +696,7 @@ def random_linear_code(F, length, dimension):
return LinearCode(G)
-def ToricCode(P,F):
+def ToricCode(P, F):
r"""
Let `P` denote a list of lattice points in
`\ZZ^d` and let `T` denote the set of all
diff --git a/src/sage/coding/codecan/autgroup_can_label.pyx b/src/sage/coding/codecan/autgroup_can_label.pyx
index e54e64a20a9..b6496249786 100644
--- a/src/sage/coding/codecan/autgroup_can_label.pyx
+++ b/src/sage/coding/codecan/autgroup_can_label.pyx
@@ -223,7 +223,7 @@ class LinearCodeAutGroupCanLabel:
from sage.coding.linear_code import LinearCode, AbstractLinearCode
if not isinstance(C, AbstractLinearCode):
- raise TypeError("%s is not a linear code"%C)
+ raise TypeError("%s is not a linear code" % C)
self.C = C
mat = C.generator_matrix()
diff --git a/src/sage/coding/codecan/codecan.pyx b/src/sage/coding/codecan/codecan.pyx
index 47311e16260..ceb197f7890 100644
--- a/src/sage/coding/codecan/codecan.pyx
+++ b/src/sage/coding/codecan/codecan.pyx
@@ -619,7 +619,7 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
S = SemimonomialTransformationGroup(self._matrix.base_ring(), self._n)
S_n = SymmetricGroup(self._n)
- self._transporter = S(perm= S_n(self._to_best.sage()))
+ self._transporter = S(perm=S_n(self._to_best.sage()))
self._transporter, self._best_candidate, remaining_inner_group = self._compute_group_element(self._transporter, algorithm_type)
# compute the other components of the automorphism group generators
diff --git a/src/sage/coding/codecan/meson.build b/src/sage/coding/codecan/meson.build
index ac3a94a1edd..8749207de4b 100644
--- a/src/sage/coding/codecan/meson.build
+++ b/src/sage/coding/codecan/meson.build
@@ -17,7 +17,7 @@ foreach name, pyx : extension_data
inc_partn_ref2,
inc_rings,
],
- dependencies: [py_dep, cysignals, gmp],
+ dependencies: [py_dep, cysignals, gap, gmp],
)
endforeach
diff --git a/src/sage/coding/guruswami_sudan/gs_decoder.py b/src/sage/coding/guruswami_sudan/gs_decoder.py
index 54a624375bd..a5bf1cf345f 100644
--- a/src/sage/coding/guruswami_sudan/gs_decoder.py
+++ b/src/sage/coding/guruswami_sudan/gs_decoder.py
@@ -375,7 +375,7 @@ def guruswami_sudan_decoding_radius(C=None, n_k=None, l=None, s=None):
"""
n,k = n_k_params(C, n_k)
- def get_tau(s,l):
+ def get_tau(s, l):
"Return the decoding radius given this s and l"
if s <= 0 or l <= 0:
return -1
diff --git a/src/sage/coding/linear_code.py b/src/sage/coding/linear_code.py
index a9e3813b474..3e9d388c434 100644
--- a/src/sage/coding/linear_code.py
+++ b/src/sage/coding/linear_code.py
@@ -1261,7 +1261,7 @@ def genus(self):
gammaC = n+1-k-d
return gammaC
- def is_permutation_equivalent(self,other,algorithm=None):
+ def is_permutation_equivalent(self, other, algorithm=None):
"""
Return ``True`` if ``self`` and ``other`` are permutation equivalent
codes and ``False`` otherwise.
diff --git a/src/sage/coding/reed_muller_code.py b/src/sage/coding/reed_muller_code.py
index 64258f48927..e690534c5e3 100644
--- a/src/sage/coding/reed_muller_code.py
+++ b/src/sage/coding/reed_muller_code.py
@@ -584,16 +584,11 @@ def __init__(self, code):
...
ValueError: the code has to be a Reed-Muller code
"""
- if not (
- isinstance(
- code,
- QAryReedMullerCode) or isinstance(
- code,
- BinaryReedMullerCode)):
+ if not isinstance(code, (QAryReedMullerCode, BinaryReedMullerCode)):
raise ValueError("the code has to be a Reed-Muller code")
super().__init__(code)
- def _repr_(self):
+ def _repr_(self) -> str:
r"""
Return a string representation of ``self``.
@@ -775,9 +770,7 @@ def __init__(self, code, polynomial_ring=None):
...
ValueError: The Polynomial ring should be on Finite Field of size 59 and should have 3 variables
"""
- if not (
- isinstance(code, QAryReedMullerCode)
- or isinstance(code, BinaryReedMullerCode)):
+ if not isinstance(code, (QAryReedMullerCode, BinaryReedMullerCode)):
raise ValueError("the code has to be a Reed-Muller code")
super().__init__(code)
if polynomial_ring is None:
diff --git a/src/sage/combinat/alternating_sign_matrix.py b/src/sage/combinat/alternating_sign_matrix.py
index 230c9a8aae7..69a529054af 100644
--- a/src/sage/combinat/alternating_sign_matrix.py
+++ b/src/sage/combinat/alternating_sign_matrix.py
@@ -262,13 +262,12 @@ def to_monotone_triangle(self):
True
"""
n = self._matrix.nrows()
- triangle = [None] * n
- prev = zero_vector(ZZ, n)
+ triangle = [0] * n
+ add_row = zero_vector(ZZ, n)
for j, row in enumerate(self._matrix):
- add_row = row + prev
+ add_row = row + add_row
triangle[n - 1 - j] = [i + 1 for i in range(n - 1, -1, -1)
if add_row[i] == 1]
- prev = add_row
return MonotoneTriangles(n)(triangle)
@combinatorial_map(name='rotate counterclockwise')
diff --git a/src/sage/combinat/cluster_algebra_quiver/quiver.py b/src/sage/combinat/cluster_algebra_quiver/quiver.py
index 7e07835b935..d9b73e655a9 100644
--- a/src/sage/combinat/cluster_algebra_quiver/quiver.py
+++ b/src/sage/combinat/cluster_algebra_quiver/quiver.py
@@ -1533,7 +1533,7 @@ def mutation_sequence(self, sequence, show_sequence=False, fig_size=1.2 ):
from sage.plot.plot import Graphics
from sage.plot.text import text
- def _plot_arrow( v, k, center=(0,0) ):
+ def _plot_arrow( v, k, center=(0, 0) ):
return text(r"$\longleftrightarrow$",(center[0],center[1]), fontsize=25) + text(r"$\mu_"+str(v)+"$",(center[0],center[1]+0.15), fontsize=15) \
+ text("$"+str(k)+"$",(center[0],center[1]-0.2), fontsize=15)
diff --git a/src/sage/combinat/combination.py b/src/sage/combinat/combination.py
index 49de0da4ab7..c3597e86611 100644
--- a/src/sage/combinat/combination.py
+++ b/src/sage/combinat/combination.py
@@ -642,7 +642,7 @@ def from_rank(r, n, k):
TESTS::
sage: from sage.combinat.combination import from_rank
- sage: def _comb_largest(a,b,x):
+ sage: def _comb_largest(a, b, x):
....: w = a - 1
....: while binomial(w,b) > x:
....: w -= 1
diff --git a/src/sage/combinat/crystals/fast_crystals.py b/src/sage/combinat/crystals/fast_crystals.py
index e427c6b48aa..5f4ca47249f 100644
--- a/src/sage/combinat/crystals/fast_crystals.py
+++ b/src/sage/combinat/crystals/fast_crystals.py
@@ -271,7 +271,7 @@ def digraph(self):
"""
return self._digraph
- def cmp_elements(self, x,y):
+ def cmp_elements(self, x, y):
r"""
Return ``True`` if and only if there is a path from `x` to `y` in the
crystal graph.
diff --git a/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py b/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py
index 9ba9e3c1e0a..4afc713c225 100644
--- a/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py
+++ b/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py
@@ -222,7 +222,7 @@ def __eq__(self, other):
"""
return isinstance(self, type(other)) and self.value == other.value
- def __lt__(self,other):
+ def __lt__(self, other):
"""
Return ``True`` if ``self`` comes before ``other`` and ``False``
otherwise.
diff --git a/src/sage/combinat/crystals/infinity_crystals.py b/src/sage/combinat/crystals/infinity_crystals.py
index a7f98a369fb..c6331093d87 100644
--- a/src/sage/combinat/crystals/infinity_crystals.py
+++ b/src/sage/combinat/crystals/infinity_crystals.py
@@ -296,7 +296,7 @@ class Element(InfinityCrystalOfTableauxElement):
Elements in `\mathcal{B}(\infty)` crystal of tableaux.
"""
- def phi(self,i):
+ def phi(self, i):
r"""
Return `\varphi_i` of ``self``.
diff --git a/src/sage/combinat/crystals/littelmann_path.py b/src/sage/combinat/crystals/littelmann_path.py
index c9fa7cb7933..7e2f9fe5aca 100644
--- a/src/sage/combinat/crystals/littelmann_path.py
+++ b/src/sage/combinat/crystals/littelmann_path.py
@@ -1455,7 +1455,7 @@ def weight(self):
alpha = WLR.simple_roots()
return -WLR.sum(alpha[i] for i in self.to_highest_weight()[1])
- def phi(self,i):
+ def phi(self, i):
r"""
Return `\varphi_i` of ``self``.
diff --git a/src/sage/combinat/crystals/star_crystal.py b/src/sage/combinat/crystals/star_crystal.py
index 02427149ed4..bc80a7a650c 100644
--- a/src/sage/combinat/crystals/star_crystal.py
+++ b/src/sage/combinat/crystals/star_crystal.py
@@ -61,7 +61,7 @@ class StarCrystal(UniqueRepresentation, Parent):
is the highest weight vector in `B(\infty)`;
- if `\Psi_i(b) = f_i^mb_i(0) \otimes b_0`, then
- `\Psi_i(f_i^*b) =f_i^{m+1}b_i(0) \otimes b_0`
+ `\Psi_i(f_i^*b) = f_i^{m+1}b_i(0) \otimes b_0`
and `\varepsilon_i(b^*) = m`;
- the image of `\Psi_i` is `\{f_i^mb_i(0)\otimes b :
@@ -124,7 +124,7 @@ def _repr_(self):
class Element(ElementWrapper):
- def e(self,i):
+ def e(self, i):
r"""
Return the action of `e_i^*` on ``self``.
@@ -152,7 +152,7 @@ def e(self,i):
return None
return P(P._pullback[i]( P._tens[i](image[0].e(i),image[1]) ))
- def f(self,i):
+ def f(self, i):
r"""
Return the action of `f_i^*` on ``self``.
diff --git a/src/sage/combinat/crystals/tensor_product_element.pyx b/src/sage/combinat/crystals/tensor_product_element.pyx
index 607dcc2a8dc..05b17350004 100644
--- a/src/sage/combinat/crystals/tensor_product_element.pyx
+++ b/src/sage/combinat/crystals/tensor_product_element.pyx
@@ -998,7 +998,7 @@ cdef class CrystalOfTableauxElement(TensorProductOfRegularCrystalsElement):
return crystal(self.to_tableau().promotion_inverse(cartan_type.rank()))
cdef class InfinityCrystalOfTableauxElement(CrystalOfTableauxElement):
- def e(self,i):
+ def e(self, i):
r"""
Return the action of `\widetilde{e}_i` on ``self``.
diff --git a/src/sage/combinat/designs/bibd.py b/src/sage/combinat/designs/bibd.py
index 49c930ccb38..09785c3d1da 100644
--- a/src/sage/combinat/designs/bibd.py
+++ b/src/sage/combinat/designs/bibd.py
@@ -521,7 +521,7 @@ def steiner_triple_system(n):
return BIBD(n, sts, name=name,check=False)
-def BIBD_from_TD(v,k,existence=False):
+def BIBD_from_TD(v, k, existence=False):
r"""
Return a BIBD through TD-based constructions.
@@ -894,7 +894,7 @@ def BIBD_from_PBD(PBD, v, k, check=True, base_cases=None):
return bibd
-def _relabel_bibd(B,n,p=None):
+def _relabel_bibd(B, n, p=None):
r"""
Relabel the BIBD on `n` points and blocks of size k such that
`\{0,...,k-2,n-1\},\{k-1,...,2k-3,n-1\},...,\{n-k,...,n-2,n-1\}` are blocks
@@ -1223,7 +1223,7 @@ def _get_r_s_t_u(v):
return r,s,t,u
-def PBD_from_TD(k,t,u):
+def PBD_from_TD(k, t, u):
r"""
Return a `(kt,\{k,t\})`-PBD if `u=0` and a `(kt+u,\{k,k+1,t,u\})`-PBD otherwise.
@@ -1294,7 +1294,7 @@ def BIBD_5q_5_for_q_prime_power(q):
return B
-def BIBD_from_arc_in_desarguesian_projective_plane(n,k,existence=False):
+def BIBD_from_arc_in_desarguesian_projective_plane(n, k, existence=False):
r"""
Return a `(n,k,1)`-BIBD from a maximal arc in a projective plane.
@@ -1430,7 +1430,7 @@ class PairwiseBalancedDesign(GroupDivisibleDesign):
modified in place (each block is sorted, and the whole list is
sorted). Your ``blocks`` object will become the instance's internal data.
"""
- def __init__(self, points, blocks, K=None, lambd=1, check=True, copy=True,**kwds):
+ def __init__(self, points, blocks, K=None, lambd=1, check=True, copy=True, **kwds):
r"""
Constructor.
@@ -1498,7 +1498,7 @@ class BalancedIncompleteBlockDesign(PairwiseBalancedDesign):
sage: b=designs.balanced_incomplete_block_design(9,3); b
(9,3,1)-Balanced Incomplete Block Design
"""
- def __init__(self, points, blocks, k=None, lambd=1, check=True, copy=True,**kwds):
+ def __init__(self, points, blocks, k=None, lambd=1, check=True, copy=True, **kwds):
r"""
Constructor.
diff --git a/src/sage/combinat/designs/database.py b/src/sage/combinat/designs/database.py
index 19eb9d26165..ad86c612e86 100644
--- a/src/sage/combinat/designs/database.py
+++ b/src/sage/combinat/designs/database.py
@@ -69,7 +69,7 @@
cyclic_shift = lambda l,i : l[-i:]+l[:-i]
-def _MOLS_from_string(s,k):
+def _MOLS_from_string(s, k):
r"""
Return MOLS from a string.
@@ -3829,13 +3829,13 @@ def DM_52_6_1():
from itertools import product
- def t1(i,R):
+ def t1(i, R):
if i > 1:
return t1(1,t1(i-1,R))
((x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5),(x6,y6)) = R
return [(z*x3, 3*y3), (z*x1, 3*y1), (z*x2, 3*y2), (z*x6, 3*y6), (z*x4, 3*y4), (z*x5, 3*y5)]
- def t2(i,R):
+ def t2(i, R):
if i > 1:
return t2(1,t2(i-1,R))
((x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5),(x6,y6)) = R
diff --git a/src/sage/combinat/designs/designs_pyx.pyx b/src/sage/combinat/designs/designs_pyx.pyx
index c862821330e..790111d4326 100644
--- a/src/sage/combinat/designs/designs_pyx.pyx
+++ b/src/sage/combinat/designs/designs_pyx.pyx
@@ -350,7 +350,7 @@ def is_orthogonal_array(OA, int k, int n, int t=2, verbose=False, terminology='O
return True
-def is_group_divisible_design(groups,blocks,v,G=None,K=None,lambd=1,verbose=False):
+def is_group_divisible_design(groups, blocks, v, G=None, K=None, lambd=1, verbose=False):
r"""
Check that input is a Group Divisible Design on `\{0, \ldots, v-1\}`.
@@ -469,7 +469,7 @@ def is_group_divisible_design(groups,blocks,v,G=None,K=None,lambd=1,verbose=Fals
print("{} does not belong to [0,...,{}]".format(x, n-1))
return False
- cdef unsigned short * matrix = sig_calloc(n*n,sizeof(unsigned short))
+ cdef unsigned short * matrix = sig_calloc(n*n, sizeof(unsigned short))
if matrix is NULL:
raise MemoryError
@@ -534,7 +534,7 @@ def is_group_divisible_design(groups,blocks,v,G=None,K=None,lambd=1,verbose=Fals
return True if not guess_groups else (True, groups)
-def is_pairwise_balanced_design(blocks,v,K=None,lambd=1,verbose=False):
+def is_pairwise_balanced_design(blocks, v, K=None, lambd=1, verbose=False):
r"""
Check that input is a Pairwise Balanced Design (PBD) on `\{0, \ldots, v-1\}`.
@@ -663,7 +663,7 @@ def is_projective_plane(blocks, verbose=False):
verbose=verbose)
-def is_difference_matrix(M,G,k,lmbda=1,verbose=False):
+def is_difference_matrix(M, G, k, lmbda=1, verbose=False):
r"""
Test if `M` is a `(G,k,\lambda)`-difference matrix.
@@ -728,7 +728,7 @@ def is_difference_matrix(M,G,k,lmbda=1,verbose=False):
return is_quasi_difference_matrix(M,G,k,lmbda=lmbda,mu=lmbda,u=0,verbose=verbose)
-def is_quasi_difference_matrix(M,G,int k,int lmbda,int mu,int u,verbose=False):
+def is_quasi_difference_matrix(M, G, int k, int lmbda, int mu, int u, verbose=False):
r"""
Test if the matrix is a `(G,k;\lambda,\mu;u)`-quasi-difference matrix.
@@ -987,7 +987,7 @@ cpdef _OA_cache_set(int k, int n, truth_value):
else:
_OA_cache[n].min_false = k if k<_OA_cache[n].min_false else _OA_cache[n].min_false
-cpdef _OA_cache_get(int k,int n):
+cpdef _OA_cache_get(int k, int n):
r"""
Get a value from the OA cache of existence results.
@@ -1006,7 +1006,7 @@ cpdef _OA_cache_get(int k,int n):
return None
-cpdef _OA_cache_construction_available(int k,int n):
+cpdef _OA_cache_construction_available(int k, int n):
r"""
Test if a construction is implemented using the cache's information.
diff --git a/src/sage/combinat/designs/difference_family.py b/src/sage/combinat/designs/difference_family.py
index 49b25c12dd0..a74634d32cf 100644
--- a/src/sage/combinat/designs/difference_family.py
+++ b/src/sage/combinat/designs/difference_family.py
@@ -330,7 +330,7 @@ def is_difference_family(G, D, v=None, k=None, l=None, verbose=False):
return True
-def singer_difference_set(q,d):
+def singer_difference_set(q, d):
r"""
Return a difference set associated to the set of hyperplanes in a projective
space of dimension `d` over `GF(q)`.
@@ -641,7 +641,7 @@ def radical_difference_set(K, k, l=1, existence=False, check=True):
return D
-def one_cyclic_tiling(A,n):
+def one_cyclic_tiling(A, n):
r"""
Given a subset ``A`` of the cyclic additive group `G = Z / nZ` return
another subset `B` so that `A + B = G` and `|A| |B| = n` (i.e. any element
@@ -3532,7 +3532,7 @@ def difference_family(v, k, l=1, existence=False, explain_construction=False, ch
For `k=6,7` we look at the set of small prime powers for which a
construction is available::
- sage: def prime_power_mod(r,m):
+ sage: def prime_power_mod(r, m):
....: k = m+r
....: while True:
....: if is_prime_power(k):
diff --git a/src/sage/combinat/designs/difference_matrices.py b/src/sage/combinat/designs/difference_matrices.py
index 11fe16bb8d5..0e90358c234 100644
--- a/src/sage/combinat/designs/difference_matrices.py
+++ b/src/sage/combinat/designs/difference_matrices.py
@@ -124,7 +124,7 @@ def difference_matrix_product(k, M1, G1, lmbda1, M2, G2, lmbda2, check=True):
return G,M
-def difference_matrix(g,k,lmbda=1,existence=False,check=True):
+def difference_matrix(g, k, lmbda=1, existence=False, check=True):
r"""
Return a `(g,k,\lambda)`-difference matrix.
diff --git a/src/sage/combinat/designs/evenly_distributed_sets.pyx b/src/sage/combinat/designs/evenly_distributed_sets.pyx
index 1d1a7acb8ec..8fdf10c0bf1 100644
--- a/src/sage/combinat/designs/evenly_distributed_sets.pyx
+++ b/src/sage/combinat/designs/evenly_distributed_sets.pyx
@@ -433,7 +433,7 @@ cdef class EvenlyDistributedSetsBacktracker:
will be called only once.
"""
cdef unsigned int i,j,k,tmp1,tmp2,verify
- cdef list B = [self.B[i] for i in range(1,self.k)]
+ cdef list B = [self.B[i] for i in range(1, self.k)]
B.append(self.q-1)
cdef list BB = [None]*self.k
cdef set relabs = set([tuple(B)])
diff --git a/src/sage/combinat/designs/latin_squares.py b/src/sage/combinat/designs/latin_squares.py
index c8b61827e90..b117f76b8e0 100644
--- a/src/sage/combinat/designs/latin_squares.py
+++ b/src/sage/combinat/designs/latin_squares.py
@@ -449,12 +449,12 @@ def latin_square_product(M, N, *others):
P = Matrix(D)
if others:
- return latin_square_product(P, others[0],*others[1:])
+ return latin_square_product(P, others[0], *others[1:])
else:
return P
-def MOLS_table(start,stop=None,compare=False,width=None):
+def MOLS_table(start, stop=None, compare=False, width=None):
r"""
Print the MOLS table that Sage can produce.
diff --git a/src/sage/combinat/designs/orthogonal_arrays.py b/src/sage/combinat/designs/orthogonal_arrays.py
index daac0f322cf..5d4498cc5a3 100644
--- a/src/sage/combinat/designs/orthogonal_arrays.py
+++ b/src/sage/combinat/designs/orthogonal_arrays.py
@@ -392,7 +392,7 @@ class TransversalDesign(GroupDivisibleDesign):
sage: designs.transversal_design(None,36)
Transversal Design TD(10,36)
"""
- def __init__(self, blocks, k=None,n=None,check=True,**kwds):
+ def __init__(self, blocks, k=None, n=None, check=True, **kwds):
r"""
Constructor of the class.
@@ -473,7 +473,7 @@ def is_transversal_design(B, k, n, verbose=False):
return is_orthogonal_array([[x % n for x in R] for R in B],k,n,verbose=verbose)
-def wilson_construction(OA,k,r,m,u,check=True,explain_construction=False):
+def wilson_construction(OA, k, r, m, u, check=True, explain_construction=False):
r"""
Return a `OA(k,rm+\sum_i u_i)` from a truncated `OA(k+s,r)` by Wilson's
construction.
@@ -678,7 +678,7 @@ def wilson_construction(OA,k,r,m,u,check=True,explain_construction=False):
return OA
-def TD_product(k,TD1,n1,TD2,n2, check=True):
+def TD_product(k, TD1, n1, TD2, n2, check=True):
r"""
Return the product of two transversal designs.
@@ -726,7 +726,7 @@ def TD_product(k,TD1,n1,TD2,n2, check=True):
return TD
-def orthogonal_array(k,n,t=2,resolvable=False, check=True,existence=False,explain_construction=False):
+def orthogonal_array(k, n, t=2, resolvable=False, check=True, existence=False, explain_construction=False):
r"""
Return an orthogonal array of parameters `k,n,t`.
@@ -1055,7 +1055,7 @@ def largest_available_k(n, t=2):
return k
-def incomplete_orthogonal_array(k,n,holes,resolvable=False, existence=False):
+def incomplete_orthogonal_array(k, n, holes, resolvable=False, existence=False):
r"""
Return an `OA(k,n)-\sum_{1\leq i\leq x} OA(k,s_i)`.
@@ -1582,7 +1582,7 @@ def OA_standard_label(OA):
return [[mapping[element] for element in row] for row in OA]
-def OA_n_times_2_pow_c_from_matrix(k,c,G,A,Y,check=True):
+def OA_n_times_2_pow_c_from_matrix(k, c, G, A, Y, check=True):
r"""
Return an `OA(k, |G| \cdot 2^c)` from a constrained `(G,k-1,2)`-difference
matrix.
@@ -1740,7 +1740,7 @@ def OA_n_times_2_pow_c_from_matrix(k,c,G,A,Y,check=True):
return OA_from_quasi_difference_matrix(list(zip(*Mb)),GG,add_col=True)
-def OA_from_quasi_difference_matrix(M,G,add_col=True,fill_hole=True):
+def OA_from_quasi_difference_matrix(M, G, add_col=True, fill_hole=True):
r"""
Return an Orthogonal Array from a Quasi-Difference matrix.
@@ -1860,7 +1860,7 @@ def OA_from_quasi_difference_matrix(M,G,add_col=True,fill_hole=True):
return new_M
-def OA_from_Vmt(m,t,V):
+def OA_from_Vmt(m, t, V):
r"""
Return an Orthogonal Array from a `V(m,t)`.
@@ -1884,7 +1884,7 @@ def OA_from_Vmt(m,t,V):
return OA_from_quasi_difference_matrix(M,Fq,add_col=False)
-def QDM_from_Vmt(m,t,V):
+def QDM_from_Vmt(m, t, V):
r"""
Return a QDM from a `V(m,t)`.
@@ -1948,7 +1948,7 @@ def QDM_from_Vmt(m,t,V):
return Fq, M
-def OA_from_PBD(k,n,PBD, check=True):
+def OA_from_PBD(k, n, PBD, check=True):
r"""
Return an `OA(k,n)` from a PBD.
@@ -2031,7 +2031,7 @@ def OA_from_PBD(k,n,PBD, check=True):
return OA
-def OA_from_wider_OA(OA,k):
+def OA_from_wider_OA(OA, k):
r"""
Return the first `k` columns of `OA`.
@@ -2116,7 +2116,7 @@ class OAMainFunctions:
...
NotImplementedError: I don't know how to build an OA(12,20)!
"""
- def __init__(self,*args,**kwds):
+ def __init__(self, *args, **kwds):
r"""
There is nothing here.
@@ -2132,7 +2132,7 @@ def __init__(self,*args,**kwds):
largest_available_k = staticmethod(largest_available_k)
@staticmethod
- def explain_construction(k,n,t=2):
+ def explain_construction(k, n, t=2):
r"""
Return a string describing how to builds an `OA(k,n)`.
@@ -2150,7 +2150,7 @@ def explain_construction(k,n,t=2):
return orthogonal_array(k,n,t,explain_construction=True)
@staticmethod
- def build(k,n,t=2,resolvable=False):
+ def build(k, n, t=2, resolvable=False):
r"""
Return an `OA(k,n)` of strength `t`.
@@ -2191,7 +2191,7 @@ def build(k,n,t=2,resolvable=False):
return orthogonal_array(k,n,t,resolvable=resolvable)
@staticmethod
- def exists(k,n,t=2):
+ def exists(k, n, t=2):
r"""
Return the existence status of an `OA(k,n)`.
@@ -2220,7 +2220,7 @@ def exists(k,n,t=2):
return orthogonal_array(k,n,t,existence=True)
@staticmethod
- def is_available(k,n,t=2):
+ def is_available(k, n, t=2):
r"""
Return whether Sage can build an `OA(k,n)`.
diff --git a/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py b/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py
index 937076ebb07..2bfd385492c 100644
--- a/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py
+++ b/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py
@@ -35,7 +35,7 @@
from .orthogonal_arrays import orthogonal_array, wilson_construction, is_orthogonal_array
-def construction_3_3(k,n,m,i,explain_construction=False):
+def construction_3_3(k, n, m, i, explain_construction=False):
r"""
Return an `OA(k,nm+i)`.
@@ -97,7 +97,7 @@ def construction_3_3(k,n,m,i,explain_construction=False):
return OA
-def construction_3_4(k,n,m,r,s,explain_construction=False):
+def construction_3_4(k, n, m, r, s, explain_construction=False):
r"""
Return a `OA(k,nm+rs)`.
@@ -180,7 +180,7 @@ def construction_3_4(k,n,m,r,s,explain_construction=False):
return OA
-def construction_3_5(k,n,m,r,s,t,explain_construction=False):
+def construction_3_5(k, n, m, r, s, t, explain_construction=False):
r"""
Return an `OA(k,nm+r+s+t)`.
@@ -275,7 +275,7 @@ def construction_3_5(k,n,m,r,s,t,explain_construction=False):
return OA
-def construction_3_6(k,n,m,i,explain_construction=False):
+def construction_3_6(k, n, m, i, explain_construction=False):
r"""
Return a `OA(k,nm+i)`.
@@ -578,7 +578,7 @@ def construction_q_x(k, q, x, check=True, explain_construction=False):
return OA
-def thwart_lemma_3_5(k,n,m,a,b,c,d=0,complement=False,explain_construction=False):
+def thwart_lemma_3_5(k, n, m, a, b, c, d=0, complement=False, explain_construction=False):
r"""
Return an `OA(k,nm+a+b+c+d)`.
@@ -757,7 +757,7 @@ def thwart_lemma_3_5(k,n,m,a,b,c,d=0,complement=False,explain_construction=False
return wilson_construction(OA,k,n,m,sizes, check=False)
-def thwart_lemma_4_1(k,n,m,explain_construction=False):
+def thwart_lemma_4_1(k, n, m, explain_construction=False):
r"""
Return an `OA(k,nm+4(n-2))`.
@@ -886,7 +886,7 @@ def thwart_lemma_4_1(k,n,m,explain_construction=False):
return wilson_construction(OA,k,n,m,[n-2,]*4,check=False)
-def three_factor_product(k,n1,n2,n3,check=False,explain_construction=False):
+def three_factor_product(k, n1, n2, n3, check=False, explain_construction=False):
r"""
Return an `OA(k+1,n_1n_2n_3)`.
@@ -1010,7 +1010,7 @@ def three_factor_product(k,n1,n2,n3,check=False,explain_construction=False):
" A three-factor product construction for mutually orthogonal latin squares,\n" +
" https://arxiv.org/abs/1401.1466").format(n1, n2, n3)
- def assert_c_partition(classs,k,n,c):
+ def assert_c_partition(classs, k, n, c):
r"""
Makes sure that ``classs`` contains blocks `B` of size `k` such that the list of
``B[i]`` covers `[n]` exactly `c` times for every index `i`.
@@ -1021,7 +1021,7 @@ def assert_c_partition(classs,k,n,c):
for p in zip(*classs):
assert all(x == i//c for i,x in enumerate(sorted(p))), "A class is not c(={})-parallel".format(c)
- def product_with_parallel_classes(OA1,k,g1,g2,g1_parall,parall,check=True):
+ def product_with_parallel_classes(OA1, k, g1, g2, g1_parall, parall, check=True):
r"""
Return the product of two OA while keeping track of parallel classes.
@@ -1203,7 +1203,7 @@ def _reorder_matrix(matrix):
return list(zip(*matrix))
-def brouwer_separable_design(k,t,q,x,check=False,verbose=False,explain_construction=False):
+def brouwer_separable_design(k, t, q, x, check=False, verbose=False, explain_construction=False):
r"""
Return a `OA(k,t(q^2+q+1)+x)` using Brouwer's result on separable designs.
diff --git a/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx b/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx
index f7f3502548b..dc9c278cd72 100644
--- a/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx
+++ b/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx
@@ -116,7 +116,7 @@ def find_recursive_construction(k, n):
return False
-cpdef find_product_decomposition(int k,int n):
+cpdef find_product_decomposition(int k, int n):
r"""
Find `n_1n_2=n` to obtain an `OA(k,n)` by the product construction.
@@ -157,7 +157,7 @@ cpdef find_product_decomposition(int k,int n):
return wilson_construction, (None,k,n1,n2,(),False)
return False
-cpdef find_wilson_decomposition_with_one_truncated_group(int k,int n):
+cpdef find_wilson_decomposition_with_one_truncated_group(int k, int n):
r"""
Find `rm+u=n` to obtain an `OA(k,n)` by Wilson's construction with one truncated column.
@@ -206,7 +206,7 @@ cpdef find_wilson_decomposition_with_one_truncated_group(int k,int n):
return False
-cpdef find_wilson_decomposition_with_two_truncated_groups(int k,int n):
+cpdef find_wilson_decomposition_with_two_truncated_groups(int k, int n):
r"""
Find `rm+r_1+r_2=n` to obtain an `OA(k,n)` by Wilson's construction with two truncated columns.
@@ -268,7 +268,7 @@ cpdef find_wilson_decomposition_with_two_truncated_groups(int k,int n):
return wilson_construction, (None,k,r,m,(r1,r2),False)
return False
-cpdef find_construction_3_3(int k,int n):
+cpdef find_construction_3_3(int k, int n):
r"""
Find a decomposition for construction 3.3 from [AC07]_.
@@ -398,7 +398,7 @@ cpdef find_construction_3_5(int k, int n):
from sage.combinat.designs.orthogonal_arrays_build_recursive import construction_3_5
return construction_3_5, (k,nn,mm,r,s,t)
-cpdef find_construction_3_6(int k,int n):
+cpdef find_construction_3_6(int k, int n):
r"""
Find a decomposition for construction 3.6 from [AC07]_.
@@ -439,7 +439,7 @@ cpdef find_construction_3_6(int k,int n):
from sage.combinat.designs.orthogonal_arrays_build_recursive import construction_3_6
return construction_3_6, (k,nn,mm,i)
-cpdef find_q_x(int k,int n):
+cpdef find_q_x(int k, int n):
r"""
Find integers `q,x` such that the `q-x` construction yields an `OA(k,n)`.
@@ -492,7 +492,7 @@ cpdef find_q_x(int k,int n):
return construction_q_x, (k,q,x)
return False
-cpdef find_thwart_lemma_3_5(int k,int N):
+cpdef find_thwart_lemma_3_5(int k, int N):
r"""
Find the values on which Lemma 3.5 from [Thwarts]_ applies.
@@ -613,7 +613,7 @@ cpdef find_thwart_lemma_3_5(int k,int N):
return False
-cpdef find_thwart_lemma_4_1(int k,int n):
+cpdef find_thwart_lemma_4_1(int k, int n):
r"""
Find a decomposition for Lemma 4.1 from [Thwarts]_.
@@ -662,7 +662,7 @@ cpdef find_thwart_lemma_4_1(int k,int n):
return False
-cpdef find_three_factor_product(int k,int n):
+cpdef find_three_factor_product(int k, int n):
r"""
Find `n_1n_2n_3=n` to obtain an `OA(k,n)` by the three-factor product from [DukesLing14]_.
@@ -707,7 +707,7 @@ cpdef find_three_factor_product(int k,int n):
return False
-cpdef find_brouwer_separable_design(int k,int n):
+cpdef find_brouwer_separable_design(int k, int n):
r"""
Find `t(q^2+q+1)+x=n` to obtain an `OA(k,n)` by Brouwer's separable design construction.
@@ -878,7 +878,7 @@ def int_as_sum(int value, list S, int k_max):
return None
-cpdef find_brouwer_van_rees_with_one_truncated_column(int k,int n):
+cpdef find_brouwer_van_rees_with_one_truncated_column(int k, int n):
r"""
Find `rm+x_1+...+x_c=n` such that the Brouwer-van Rees constructions yields a `OA(k,n)`.
@@ -947,7 +947,7 @@ cpdef find_brouwer_van_rees_with_one_truncated_column(int k,int n):
return False
from sage.combinat.designs.designs_pyx cimport _OA_cache, _OA_cache_size
-cdef int is_available(int k,int n) except -1:
+cdef int is_available(int k, int n) except -1:
r"""
Return whether Sage can build an OA(k,n)
diff --git a/src/sage/combinat/designs/resolvable_bibd.py b/src/sage/combinat/designs/resolvable_bibd.py
index ccc11176d54..c6e0bbee33b 100644
--- a/src/sage/combinat/designs/resolvable_bibd.py
+++ b/src/sage/combinat/designs/resolvable_bibd.py
@@ -56,7 +56,7 @@
from sage.misc.unknown import Unknown
-def resolvable_balanced_incomplete_block_design(v,k,existence=False):
+def resolvable_balanced_incomplete_block_design(v, k, existence=False):
r"""
Return a resolvable BIBD of parameters `v,k`.
@@ -141,7 +141,7 @@ def resolvable_balanced_incomplete_block_design(v,k,existence=False):
raise NotImplementedError("I don't know how to build a ({},{},1)-RBIBD!".format(v,3))
-def kirkman_triple_system(v,existence=False):
+def kirkman_triple_system(v, existence=False):
r"""
Return a Kirkman Triple System on `v` points.
@@ -368,7 +368,7 @@ def kirkman_triple_system(v,existence=False):
return KTS
-def v_4_1_rbibd(v,existence=False):
+def v_4_1_rbibd(v, existence=False):
r"""
Return a `(v,4,1)`-RBIBD.
@@ -439,7 +439,7 @@ def v_4_1_rbibd(v,existence=False):
return BIBD
-def PBD_4_7(v,check=True, existence=False):
+def PBD_4_7(v, check=True, existence=False):
r"""
Return a `(v,\{4,7\})`-PBD.
@@ -686,7 +686,7 @@ def PBD_4_7(v,check=True, existence=False):
copy=False)
-def PBD_4_7_from_Y(gdd,check=True):
+def PBD_4_7_from_Y(gdd, check=True):
r"""
Return a `(3v+1,\{4,7\})`-PBD from a `(v,\{4,5,7\},\NN-\{3,6,10\})`-GDD.
diff --git a/src/sage/combinat/designs/steiner_quadruple_systems.py b/src/sage/combinat/designs/steiner_quadruple_systems.py
index 9576ae5f5aa..af60e00b63e 100644
--- a/src/sage/combinat/designs/steiner_quadruple_systems.py
+++ b/src/sage/combinat/designs/steiner_quadruple_systems.py
@@ -540,7 +540,7 @@ def P(alpha, m):
return pairs
-def _missing_pair(n,l):
+def _missing_pair(n, l):
r"""
Return the smallest `(x,x+1)` that is not contained in `l`.
diff --git a/src/sage/combinat/designs/subhypergraph_search.pyx b/src/sage/combinat/designs/subhypergraph_search.pyx
index 8de300efe2a..82be44dcd13 100644
--- a/src/sage/combinat/designs/subhypergraph_search.pyx
+++ b/src/sage/combinat/designs/subhypergraph_search.pyx
@@ -172,7 +172,7 @@ cdef void h_free(hypergraph h) noexcept:
h.set_space = NULL
h.sets = NULL
-cdef hypergraph h_init(int n,list H) noexcept:
+cdef hypergraph h_init(int n, list H) noexcept:
r"""
Build a C hypergraph from a list `H` of sets on `\{0,...,n-1\}`.
"""
@@ -210,7 +210,7 @@ cdef hypergraph h_init(int n,list H) noexcept:
return h
-cdef inline void permute(hypergraph * h,int n1,int n2) noexcept:
+cdef inline void permute(hypergraph * h, int n1, int n2) noexcept:
r"""
Permutes two points of h inplace.
@@ -265,7 +265,7 @@ cdef void trace_hypergraph64(hypergraph * h, int n, hypergraph * tmp) noexcept:
tmp.limbs = 1
-cdef int is_subhypergraph_admissible(hypergraph h1,hypergraph * h2_trace,int n,hypergraph tmp1) noexcept:
+cdef int is_subhypergraph_admissible(hypergraph h1, hypergraph * h2_trace, int n, hypergraph tmp1) noexcept:
r"""
If there are `c` sets of size `k` containing `S\subseteq \{0,...,n-1\}` in
`h2`, then there must be `>=c` sets of size `k` containing `S` in h1. This
@@ -308,7 +308,7 @@ cdef int cmp_128_bits(const void * a, const void * b) noexcept nogil:
else:
return -1
-cdef int is_induced_admissible64(hypergraph h1,hypergraph * h2_induced,int n,hypergraph tmp1) noexcept:
+cdef int is_induced_admissible64(hypergraph h1, hypergraph * h2_induced, int n, hypergraph tmp1) noexcept:
r"""
Test if the hypergraph induced in h1 by 0,...,n-1 is equal to the hypergraph
induced in h2 by 0,...,n-1.
@@ -344,7 +344,7 @@ cdef class SubHypergraphSearch:
cdef hypergraph * h2_traces
cdef hypergraph * h2_induced
- def __cinit__(self,H1,H2,induced):
+ def __cinit__(self, H1, H2, induced):
r"""
See the documentation's class.
diff --git a/src/sage/combinat/enumeration_mod_permgroup.pyx b/src/sage/combinat/enumeration_mod_permgroup.pyx
index b2f713228ed..bcc3236205b 100644
--- a/src/sage/combinat/enumeration_mod_permgroup.pyx
+++ b/src/sage/combinat/enumeration_mod_permgroup.pyx
@@ -121,7 +121,7 @@ cpdef int lex_cmp(ClonableIntArray v1, ClonableIntArray v2) noexcept:
1
"""
cdef int i
- cdef int step = min(v1._len,v2._len)
+ cdef int step = min(v1._len, v2._len)
for i in range(step):
if v1._list[i] != v2._list[i]:
break
diff --git a/src/sage/combinat/gray_codes.py b/src/sage/combinat/gray_codes.py
index 63e366c2cb5..db1539d2376 100644
--- a/src/sage/combinat/gray_codes.py
+++ b/src/sage/combinat/gray_codes.py
@@ -103,7 +103,7 @@ def product(m):
j = f[0]
-def combinations(n,t):
+def combinations(n, t):
r"""
Iterator through the switches of the revolving door algorithm.
@@ -177,7 +177,7 @@ def combinations(n,t):
TESTS::
- sage: def check_sets_from_iter(n,k):
+ sage: def check_sets_from_iter(n, k):
....: l = []
....: s = set(range(k))
....: l.append(frozenset(s))
@@ -209,7 +209,7 @@ def combinations(n,t):
return _revolving_door_even(n,t)
-def _revolving_door_odd(n,t):
+def _revolving_door_odd(n, t):
r"""
Revolving door switch for odd `t`.
@@ -255,7 +255,7 @@ def _revolving_door_odd(n,t):
break
-def _revolving_door_even(n,t):
+def _revolving_door_even(n, t):
r"""
Revolving door algorithm for even `t`.
diff --git a/src/sage/combinat/k_tableau.py b/src/sage/combinat/k_tableau.py
index 2c048fe38fc..de6b783f15b 100644
--- a/src/sage/combinat/k_tableau.py
+++ b/src/sage/combinat/k_tableau.py
@@ -4179,7 +4179,7 @@ def add_marking( cls, unmarkedT, marking, k, weight ):
sage: StrongTableaux.add_marking([], [], 2, [])
[]
"""
- def msgn(c,v):
+ def msgn(c, v):
if c in marking:
return -v
else:
diff --git a/src/sage/combinat/knutson_tao_puzzles.py b/src/sage/combinat/knutson_tao_puzzles.py
index f7a7c513c52..7e226bffee3 100644
--- a/src/sage/combinat/knutson_tao_puzzles.py
+++ b/src/sage/combinat/knutson_tao_puzzles.py
@@ -2092,7 +2092,7 @@ def _fill_strip(self, nw_labels, ne_label, pieces, final_pieces=None):
[[0/\0 0\/0, 0/0\0]]
sage: sorted(ps._fill_strip(('0',), '0', ps._rhombus_pieces), key=str)
[[0/\0 0\/0], [0/\0 1\/10]]
- sage: sorted(ps._fill_strip(('0','1'), '0', ps._rhombus_pieces), key =str)
+ sage: sorted(ps._fill_strip(('0','1'), '0', ps._rhombus_pieces), key=str)
[[1/\0 0\/1, 0/\0 0\/0], [1/\0 0\/1, 0/\0 1\/10]]
TESTS::
diff --git a/src/sage/combinat/lr_tableau.py b/src/sage/combinat/lr_tableau.py
index 9a5e7a0ef03..5952f911a74 100644
--- a/src/sage/combinat/lr_tableau.py
+++ b/src/sage/combinat/lr_tableau.py
@@ -28,7 +28,7 @@
# http://www.gnu.org/licenses/
#****************************************************************************
-from itertools import zip_longest
+from itertools import zip_longest, accumulate
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
from sage.combinat.tableau import SemistandardTableau, SemistandardTableaux
@@ -277,14 +277,15 @@ def is_littlewood_richardson(t, heights):
False
"""
from sage.combinat.words.word import Word
- partial = [sum(heights[i] for i in range(j)) for j in range(len(heights)+1)]
try:
w = t.to_word()
except AttributeError: # Not an instance of Tableau
w = sum(reversed(t), [])
+
+ partial = list(accumulate(heights, initial=0))
for i in range(len(heights)):
subword = Word([j for j in w if partial[i]+1 <= j <= partial[i+1]],
- alphabet=list(range(partial[i]+1,partial[i+1]+1)))
+ alphabet=list(range(partial[i]+1, partial[i+1]+1)))
if not subword.is_yamanouchi():
return False
return True
@@ -305,5 +306,5 @@ def _tableau_join(t1, t2, shift=0):
sage: _tableau_join([[1,2]],[[None,None,2],[3]],shift=5)
[[1, 2, 7], [8]]
"""
- return [list(row1) + [e2+shift for e2 in row2 if e2 is not None]
- for (row1, row2) in zip_longest(t1, t2, fillvalue=[])]
+ return [list(row1) + [e2 + shift for e2 in row2 if e2 is not None]
+ for row1, row2 in zip_longest(t1, t2, fillvalue=[])]
diff --git a/src/sage/combinat/meson.build b/src/sage/combinat/meson.build
index c0e9fe15d8b..8c1aba5bd50 100644
--- a/src/sage/combinat/meson.build
+++ b/src/sage/combinat/meson.build
@@ -145,13 +145,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name == 'enumeration_mod_permgroup'
+ deps += [gap]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/combinat',
install: true,
include_directories: [inc_cpython, inc_data_structures, inc_rings],
- dependencies: [py_dep, cysignals, gmp],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/combinat/misc.py b/src/sage/combinat/misc.py
index d04b615be80..55a4b891bd2 100644
--- a/src/sage/combinat/misc.py
+++ b/src/sage/combinat/misc.py
@@ -127,7 +127,7 @@ def hide(self, i):
self.next_value[self.prev_value[i]] = self.next_value[i]
self.prev_value[self.next_value[i]] = self.prev_value[i]
- def unhide(self,i):
+ def unhide(self, i):
"""
TESTS::
diff --git a/src/sage/combinat/multiset_partition_into_sets_ordered.py b/src/sage/combinat/multiset_partition_into_sets_ordered.py
index aae1cd569a2..67fbcb4e70a 100755
--- a/src/sage/combinat/multiset_partition_into_sets_ordered.py
+++ b/src/sage/combinat/multiset_partition_into_sets_ordered.py
@@ -251,8 +251,8 @@ def _repr_normal(self):
string_parts = (str(sorted(k)) for k in self)
else:
string_parts = (str(sorted(k, key=str)) for k in self)
- string_parts = ", ".join(string_parts).replace("[","{").replace("]","}")
- return "[" + string_parts + "]"
+ string = ", ".join(string_parts).replace("[", "{").replace("]", "}")
+ return "[" + string + "]"
def _repr_tight(self):
r"""
@@ -670,7 +670,7 @@ def split_blocks(self, k=2):
if not self:
return {tuple([self]*k): 1}
- out = {}
+ out: dict[tuple, int] = {}
for t in product(*[_split_block(block, k) for block in self]):
tt = tuple([P([l for l in c if l]) for c in zip(*t)])
out[tt] = out.get(tt, 0) + 1
@@ -3520,7 +3520,7 @@ def e(self, i):
w = w.e(i)
return P.element_class(P, (w, breaks))
- def f(self,i):
+ def f(self, i):
r"""
Return `f_i` on ``self``.
diff --git a/src/sage/combinat/ncsf_qsym/combinatorics.py b/src/sage/combinat/ncsf_qsym/combinatorics.py
index ef930596ab8..605ad56aa12 100644
--- a/src/sage/combinat/ncsf_qsym/combinatorics.py
+++ b/src/sage/combinat/ncsf_qsym/combinatorics.py
@@ -51,7 +51,7 @@ def coeff_pi(J, I):
return prod(prod(K.partial_sums()) for K in J.refinement_splitting(I))
-def coeff_lp(J,I):
+def coeff_lp(J, I):
r"""
Return the coefficient `lp_{J,I}` as defined in [NCSF]_.
@@ -73,7 +73,7 @@ def coeff_lp(J,I):
return prod(K[-1] for K in J.refinement_splitting(I))
-def coeff_ell(J,I):
+def coeff_ell(J, I):
r"""
Return the coefficient `\ell_{J,I}` as defined in [NCSF]_.
diff --git a/src/sage/combinat/output.py b/src/sage/combinat/output.py
index 1e2725448f9..3a369e7005d 100644
--- a/src/sage/combinat/output.py
+++ b/src/sage/combinat/output.py
@@ -738,7 +738,7 @@ def get_len(e):
st += ' '
if E_box:
st_num = str_tab[k-j][j]
- ln_left = int((len(st_num) - (len(st_num) % 2))/2)
+ ln_left = len(st_num) // 2
st += st_num.rjust(row_height - 1 - ln_left + len(st_num), ' ').ljust(diag_length, ' ')
else:
st += ' ' * diag_length
@@ -761,12 +761,12 @@ def get_len(e):
import re
mm = min(len(re.search('^ +', l)[0]) for l in str_list) - 1
str_list = [l[mm:].rstrip() for l in str_list]
- while str_list[-1] == '':
+ while not str_list[-1]:
str_list.pop()
return "\n".join(str_list)
-def box_exists(tab, i, j):
+def box_exists(tab, i, j) -> bool:
r"""
Return ``True`` if ``tab[i][j]`` exists and is not ``None``; in particular this
allows for `tab[i][j]` to be ``''`` or ``0``.
diff --git a/src/sage/combinat/partition_tuple.py b/src/sage/combinat/partition_tuple.py
index 0e0e8e4aae9..527df5a2728 100644
--- a/src/sage/combinat/partition_tuple.py
+++ b/src/sage/combinat/partition_tuple.py
@@ -944,7 +944,7 @@ def cells(self):
"""
return [(c,a,b) for c in range(len(self)) for (a,b) in self[c].cells()]
- def content(self, k,r,c, multicharge):
+ def content(self, k, r, c, multicharge):
r"""
Return the content of the cell.
@@ -977,7 +977,7 @@ def content(self, k,r,c, multicharge):
"""
return multicharge[k]-r+c
- def content_tableau(self,multicharge):
+ def content_tableau(self, multicharge):
"""
Return the tableau which has (k,r,c)th entry equal to the content
``multicharge[k]-r+c`` of this cell.
@@ -1191,7 +1191,7 @@ def garnir_tableau(self, *cell):
g._garnir_cell = (comp,row,col)
return g
- def top_garnir_tableau(self,e,cell):
+ def top_garnir_tableau(self, e, cell):
r"""
Return the most dominant *standard* tableau which dominates the
corresponding Garnir tableau and has the same residue that has shape
@@ -1268,7 +1268,7 @@ def top_garnir_tableau(self,e,cell):
from .tableau_tuple import StandardTableauTuple
return StandardTableauTuple(t)
- def arm_length(self, k,r,c):
+ def arm_length(self, k, r, c):
"""
Return the length of the arm of cell ``(k, r, c)`` in ``self``.
@@ -1298,7 +1298,7 @@ def arm_length(self, k,r,c):
except IndexError:
raise ValueError("The cell %s is not in the diagram" % ((k,r,c),))
- def leg_length(self, k,r,c):
+ def leg_length(self, k, r, c):
"""
Return the length of the leg of cell ``(k, r, c)`` in ``self``.
@@ -1343,7 +1343,7 @@ def contains(self, mu):
"""
return mu.level() <= self.level() and all(self[c].contains(mu[c]) for c in range(len(mu)))
- def hook_length(self, k,r,c):
+ def hook_length(self, k, r, c):
r"""
Return the length of the hook of cell ``(k, r, c)`` in the partition.
@@ -1509,7 +1509,7 @@ def young_subgroup_generators(self):
return gens
@cached_method
- def _initial_degree(self,e,multicharge):
+ def _initial_degree(self, e, multicharge):
r"""
Return the Brundan-Kleshchev-Wang degree of the initial tableau
of shape ``self``.
diff --git a/src/sage/combinat/path_tableaux/path_tableau.py b/src/sage/combinat/path_tableaux/path_tableau.py
index 9d9177ee355..8d25be4a128 100644
--- a/src/sage/combinat/path_tableaux/path_tableau.py
+++ b/src/sage/combinat/path_tableaux/path_tableau.py
@@ -52,7 +52,7 @@ class PathTableau(ClonableArray, metaclass=InheritComparisonClasscallMetaclass):
This is the abstract base class for a path tableau.
"""
@abstract_method
- def local_rule(self,i):
+ def local_rule(self, i):
r"""
This is the abstract local rule defined in any coboundary category.
@@ -216,7 +216,7 @@ def commutor(self, other, verbose=False):
return (P(path[:m]), P(path[m-1:]))
- def cactus(self,i,j):
+ def cactus(self, i, j):
r"""
Return the action of the generator `s_{i,j}` of the cactus
group on ``self``.
diff --git a/src/sage/combinat/path_tableaux/semistandard.py b/src/sage/combinat/path_tableaux/semistandard.py
index 368caf54145..51ac4e4cbf8 100644
--- a/src/sage/combinat/path_tableaux/semistandard.py
+++ b/src/sage/combinat/path_tableaux/semistandard.py
@@ -173,7 +173,7 @@ def __init__(self, parent, st, check=True):
elif isinstance(st, GelfandTsetlinPattern):
w = list(st)
w.reverse()
- w = [(),*w]
+ w = [(), *w]
elif isinstance(st, (Tableau,SkewTableau)):
w = st.to_chain()
diff --git a/src/sage/combinat/rigged_configurations/kleber_tree.py b/src/sage/combinat/rigged_configurations/kleber_tree.py
index e82b6c28035..551c975ce76 100644
--- a/src/sage/combinat/rigged_configurations/kleber_tree.py
+++ b/src/sage/combinat/rigged_configurations/kleber_tree.py
@@ -122,11 +122,11 @@ def _draw_tree(tree_node, node_label=True, style_point=None, style_node='fill=wh
start = [0., 0.]
if rpos is None:
rpos = [0., 0.]
- draw_point = lambda point: '(%.3f, %.3f)' % (point[0],point[1])
+
if not tree_node.children:
r = ''
node_name = node_prefix + str(node_id)
- r = "\\node (%s) at %s" % (node_name, draw_point(start))
+ r = "\\node (%s) at (%.3f, %.3f)" % (node_name, *start)
if node_label:
r += "{$%s$};\n" % tree_node._latex_()
else:
@@ -149,7 +149,7 @@ def _draw_tree(tree_node, node_label=True, style_point=None, style_node='fill=wh
nb_children = len(tree_node.children)
half = nb_children // 2
children_str = ''
- pos = [start[0],start[1]]
+ pos = [start[0], start[1]]
start[1] += vspace
lines_str = ''
@@ -184,7 +184,7 @@ def _draw_tree(tree_node, node_label=True, style_point=None, style_node='fill=wh
rpos[0] = pos[0]
rpos[1] = pos[1]
point_str = ''
- node_str = "\\node%s (%s) at %s" % (style_node, node_name, draw_point(pos))
+ node_str = "\\node%s (%s) at (%.3f, %.3f)" % (style_node, node_name, *pos)
if node_label:
node_str += "{$%s$};\n" % tree_node._latex_()
else:
@@ -269,7 +269,7 @@ def depth(self):
sage: n2.depth
1
"""
- depth = -1 # Offset
+ depth = -1 # Offset
cur = self
while cur is not None:
depth += 1
@@ -337,7 +337,7 @@ def multiplicity(self):
mult = Integer(1)
for a, m in self.up_root:
p = self.weight[a]
- for r,s in self.parent().B:
+ for r, s in self.parent().B:
if r == a and s > self.depth:
p -= s - self.depth
mult *= binomial(m + p, m)
@@ -346,7 +346,7 @@ def multiplicity(self):
cur = self.parent_node
while cur.parent_node is not None:
root_diff = cur.up_root - prev_up_root
- for a,m in root_diff:
+ for a, m in root_diff:
p = cur.weight[a]
for r, s in self.parent().B:
if r == a and s > cur.depth:
@@ -636,7 +636,8 @@ def __init__(self, cartan_type, B, classical_ct):
self._CM = self._classical_ct.cartan_matrix().dense_matrix()
self._build_tree()
self._latex_options = dict(edge_labels=True, use_vector_notation=False,
- hspace=2.5, vspace=min(-2.5, -0.75*self._classical_ct.rank()))
+ hspace=2.5,
+ vspace=min(-2.5, -0.75*self._classical_ct.rank()))
def latex_options(self, **options):
"""
@@ -705,21 +706,19 @@ def _build_tree(self):
# Create an empty node at first step
self.root = KleberTreeNode(self, P.zero(),
self._classical_ct.root_system().root_lattice().zero())
- full_list = [self.root] # The list of tree nodes
+ full_list = [self.root] # The list of tree nodes
n = self._classical_ct.rank()
# Convert the B values into an L matrix
- L = []
I = self._classical_ct.index_set()
- for i in range(n):
- L.append([0])
+ L = [[0] for _ in range(n)]
- for r,s in self.B:
- while len(L[0]) < s: # Add more columns if needed
+ for r, s in self.B:
+ while len(L[0]) < s: # Add more columns if needed
for row in L:
row.append(0)
- L[I.index(r)][s - 1] += 1 # The -1 is for indexing
+ L[I.index(r)][s - 1] += 1 # The -1 is for indexing
# Perform a special case of the algorithm for the root node
weight_basis = P.basis()
@@ -751,7 +750,7 @@ def _build_tree(self):
for x in full_list:
growth = True
for a in range(n):
- for i in range(depth - 1, len(L[a])): # Subtract 1 for indexing
+ for i in range(depth - 1, len(L[a])): # Subtract 1 for indexing
x.weight += L[a][i] * weight_basis[I[a]]
new_children = [new_child
@@ -824,16 +823,16 @@ def _children_iter(self, node):
# Construct the shifted weight cone
root_weight = node.weight.to_vector()
ieqs = [[root_weight[i]] + list(col)
- for i,col in enumerate(self._CM.columns())]
+ for i, col in enumerate(self._CM.columns())]
# Construct the negative weight cone
for i in range(n):
v = [0] * (n+1)
v[i+1] = -1
ieqs.append(v)
- ieqs.append([-1]*(n+1)) # For avoiding the origin
+ ieqs.append([-1]*(n+1)) # For avoiding the origin
# Construct the bounds for the non-root nodes
if node != self.root:
- for i,c in enumerate(node.up_root.to_vector()):
+ for i, c in enumerate(node.up_root.to_vector()):
v = [0] * (n+1)
v[0] = c
v[i+1] = 1
@@ -849,9 +848,9 @@ def _children_iter(self, node):
# Build the nodes from the polytope
# Sort for a consistent ordering (it is typically a small list)
for pt in sorted(poly.integral_points(), reverse=True):
- up_root = Q._from_dict({I[i]: -val for i,val in enumerate(pt) if val != 0},
+ up_root = Q._from_dict({I[i]: -val for i, val in enumerate(pt) if val != 0},
remove_zeros=False)
- wt = node.weight + sum(val * P.simple_root(I[i]) for i,val in enumerate(pt))
+ wt = node.weight + sum(val * P.simple_root(I[i]) for i, val in enumerate(pt))
yield KleberTreeNode(self, wt, up_root, node)
def _children_iter_vector(self, node):
@@ -895,9 +894,9 @@ def _children_iter_vector(self, node):
converted_root = sum(cols[i] * c for i, c in enumerate(root)
if c != 0)
- if all(wt[i] >= val for i,val in enumerate(converted_root)):
- wd = {I[i]: wt[i] - val for i,val in enumerate(converted_root)}
- rd = {I[i]: val for i,val in enumerate(root) if val != 0}
+ if all(wt[i] >= val for i, val in enumerate(converted_root)):
+ wd = {I[i]: wt[i] - val for i, val in enumerate(converted_root)}
+ rd = {I[i]: val for i, val in enumerate(root) if val != 0}
yield KleberTreeNode(self,
P._from_dict(wd),
Q._from_dict(rd, remove_zeros=False),
@@ -1171,14 +1170,12 @@ def __init__(self, cartan_type, B):
sage: TestSuite(KT).run(skip='_test_elements')
"""
self._folded_ct = cartan_type.as_folding()
- virtual_dims = []
self.base_dims = B
sigma = self._folded_ct.folding_orbit()
gamma = self._folded_ct.scaling_factors()
classical_ct = self._folded_ct.folding_of().classical()
- for r,s in B:
- for i in sigma[r]:
- virtual_dims.append([i, s * gamma[r]])
+ virtual_dims = [[i, s * gamma[r]]
+ for r, s in B for i in sigma[r]]
KleberTree.__init__(self, cartan_type, virtual_dims, classical_ct)
@@ -1229,8 +1226,9 @@ def _prune(self, new_child, depth):
return True
gamma = self._folded_ct.scaling_factors()
for a in range(1, len(gamma)):
- if (depth - 1) % gamma[a] != 0 and new_child.up_root[sigma[a][0]] \
- != new_child.parent_node.up_root[sigma[a][0]]:
+ s = sigma[a][0]
+ if ((depth - 1) % gamma[a] != 0 and
+ new_child.up_root[s] != new_child.parent_node.up_root[s]):
return True
return False
@@ -1371,12 +1369,11 @@ def __init__(self, cartan_type, B):
self.base_dims = B
sigma = self._folded_ct.folding_orbit()
classical_ct = self._folded_ct.folding_of().classical()
- for r,s in B:
+ for r, s in B:
if r == n:
virtual_dims.extend([[n, s], [n, s]])
else:
- for i in sigma[r]:
- virtual_dims.append([i, s])
+ virtual_dims.extend([i, s] for i in sigma[r])
KleberTree.__init__(self, cartan_type, virtual_dims, classical_ct)
diff --git a/src/sage/combinat/rigged_configurations/rigged_partition.pyx b/src/sage/combinat/rigged_configurations/rigged_partition.pyx
index 84d98c90f3e..c8dc350bd73 100644
--- a/src/sage/combinat/rigged_configurations/rigged_partition.pyx
+++ b/src/sage/combinat/rigged_configurations/rigged_partition.pyx
@@ -191,7 +191,7 @@ cdef class RiggedPartition(SageObject):
from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
if RiggedConfigurations.options.convention == 'English':
- ret_string += "\\cline{2-%s} "%(1+num_cols) + latex(self.vacancy_numbers[0])
+ ret_string += "\\cline{2-%s} " % (1+num_cols) + latex(self.vacancy_numbers[0])
for i, row_len in enumerate(self._list):
ret_string += " &" + "\\phantom{|}&"*row_len
@@ -210,7 +210,7 @@ cdef class RiggedPartition(SageObject):
ret_string += "\n\\end{array}\n}"
else:
for i, row_len in enumerate(reversed(self._list)):
- ret_string += "\\cline{2-%s} "%(1 + row_len) + latex(self.vacancy_numbers[-i-1])
+ ret_string += "\\cline{2-%s} " % (1 + row_len) + latex(self.vacancy_numbers[-i-1])
ret_string += " &" + "\\phantom{|}&"*row_len
if num_cols == row_len:
@@ -220,7 +220,7 @@ cdef class RiggedPartition(SageObject):
ret_string += "}{l}{" + latex(self.rigging[-i-1]) + "}"
ret_string += " \\\\\n"
- ret_string += "\\cline{2-%s}\n\\end{array}\n}"%(1 + num_cols)
+ ret_string += "\\cline{2-%s}\n\\end{array}\n}" % (1 + num_cols)
return ret_string
@@ -645,7 +645,7 @@ cdef class RiggedPartitionTypeB(RiggedPartition):
ret_string = "{\n\\begin{array}[t]{r|" + "c|"*num_cols + "l}\n"
if RiggedConfigurations.options.convention == 'English':
- ret_string += "\\cline{2-%s} "%(1+num_cols) + latex(self.vacancy_numbers[0])
+ ret_string += "\\cline{2-%s} " % (1+num_cols) + latex(self.vacancy_numbers[0])
for i, row_len in enumerate(self._list):
ret_string += " &" + box_str*row_len
@@ -663,7 +663,7 @@ cdef class RiggedPartitionTypeB(RiggedPartition):
ret_string += "\n\\end{array}\n}"
else:
for i, row_len in enumerate(reversed(self._list)):
- ret_string += "\\cline{2-%s} "%(1 + row_len)
+ ret_string += "\\cline{2-%s} " % (1 + row_len)
ret_string += latex(self.vacancy_numbers[-i-1])
ret_string += " &" + box_str*row_len
@@ -674,6 +674,6 @@ cdef class RiggedPartitionTypeB(RiggedPartition):
ret_string += "}{l}{" + latex(self.rigging[-i-1]) + "}"
ret_string += " \\\\\n"
- ret_string += "\\cline{2-%s}\n\\end{array}\n}"%(1 + num_cols)
+ ret_string += "\\cline{2-%s}\n\\end{array}\n}" % (1 + num_cols)
return ret_string
diff --git a/src/sage/combinat/root_system/ambient_space.py b/src/sage/combinat/root_system/ambient_space.py
index 0d00c45273f..d9afa05c169 100644
--- a/src/sage/combinat/root_system/ambient_space.py
+++ b/src/sage/combinat/root_system/ambient_space.py
@@ -197,7 +197,7 @@ def __call__(self, v):
else:
return CombinatorialFreeModule.__call__(self, v)
- def __getitem__(self,i):
+ def __getitem__(self, i):
"""
Note that indexing starts at 1.
diff --git a/src/sage/combinat/root_system/branching_rules.py b/src/sage/combinat/root_system/branching_rules.py
index 91876ee8dd3..cf6b0012c85 100644
--- a/src/sage/combinat/root_system/branching_rules.py
+++ b/src/sage/combinat/root_system/branching_rules.py
@@ -136,7 +136,7 @@ def branch_weyl_character(chi, R, S, rule='default'):
sage: B4 = WeylCharacterRing("B4", style='coroots')
sage: A6 = WeylCharacterRing("A6", style='coroots')
sage: A7 = WeylCharacterRing("A7", style='coroots')
- sage: def try_default_rule(R,S): return [R(f).branch(S) for f in R.fundamental_weights()]
+ sage: def try_default_rule(R, S): return [R(f).branch(S) for f in R.fundamental_weights()]
sage: try_default_rule(A2,A1)
[A1(0) + A1(1), A1(0) + A1(1)]
sage: try_default_rule(D4,B3)
diff --git a/src/sage/combinat/root_system/extended_affine_weyl_group.py b/src/sage/combinat/root_system/extended_affine_weyl_group.py
index b1d35c86f7a..9e72863e5bf 100644
--- a/src/sage/combinat/root_system/extended_affine_weyl_group.py
+++ b/src/sage/combinat/root_system/extended_affine_weyl_group.py
@@ -2035,7 +2035,7 @@ def __init__(self, E):
"""
# note that we have to use the multiplicative version of the translation lattice
# and change the twist to deal with this
- def twist(w,l):
+ def twist(w, l):
return E.exp_lattice()(w.action(l.value))
GroupSemidirectProduct.__init__(self, E.exp_lattice(), E.classical_weyl(), twist=twist, act_to_right=False, prefix0=E._prefixt, print_tuple=E._print_tuple, category=E.Realizations())
@@ -2220,7 +2220,7 @@ def __init__(self, E):
sage: W0P = ExtendedAffineWeylGroup(['D',3,2]).W0P()
sage: TestSuite(W0P).run()
"""
- def twist(w,l):
+ def twist(w, l):
return E.exp_lattice()(w.action(l.value))
GroupSemidirectProduct.__init__(self, E.classical_weyl(), E.exp_lattice(), twist=twist, act_to_right=True, prefix1=E._prefixt, print_tuple=E._print_tuple, category=E.Realizations())
@@ -2418,7 +2418,7 @@ def __init__(self, E):
sage: WF = ExtendedAffineWeylGroup(['D',3,2]).WF()
sage: TestSuite(WF).run()
"""
- def twist(g,w):
+ def twist(g, w):
return g.act_on_affine_weyl(w)
GroupSemidirectProduct.__init__(self, E.affine_weyl(), E.fundamental_group(), twist=twist, act_to_right=False, print_tuple=E._print_tuple, category=E.Realizations())
@@ -2579,7 +2579,7 @@ def __init__(self, E):
sage: FW = ExtendedAffineWeylGroup(['D',3,2]).FW()
sage: TestSuite(FW).run()
"""
- def twist(g,w):
+ def twist(g, w):
return g.act_on_affine_weyl(w)
GroupSemidirectProduct.__init__(self, E.fundamental_group(), E.affine_weyl(), twist=twist, act_to_right=True, print_tuple=E._print_tuple, category=E.Realizations())
@@ -2753,7 +2753,7 @@ def __init__(self, E):
"""
# note that we have to use the multiplicative version of the translation lattice
# and change the twist to deal with this
- def twist(w,l):
+ def twist(w, l):
return E.exp_dual_lattice()(w.action(l.value))
GroupSemidirectProduct.__init__(self, E.exp_dual_lattice(), E.dual_classical_weyl(), twist=twist, act_to_right=False, prefix0=E._prefixt, print_tuple=E._print_tuple, category=E.Realizations())
@@ -2924,7 +2924,7 @@ def __init__(self, E):
"""
# note that we have to use the multiplicative version of the translation lattice
# and change the twist to deal with this
- def twist(w,l):
+ def twist(w, l):
return E.exp_dual_lattice()(w.action(l.value))
GroupSemidirectProduct.__init__(self, E.dual_classical_weyl(), E.exp_dual_lattice(), twist=twist, act_to_right=True, prefix1=E._prefixt, print_tuple=E._print_tuple, category=E.Realizations())
diff --git a/src/sage/combinat/root_system/hecke_algebra_representation.py b/src/sage/combinat/root_system/hecke_algebra_representation.py
index fd40907d33e..a2a5d4421dc 100644
--- a/src/sage/combinat/root_system/hecke_algebra_representation.py
+++ b/src/sage/combinat/root_system/hecke_algebra_representation.py
@@ -464,7 +464,7 @@ def _test_relations(self, **options):
q2 = self._q2
T = self
- def Ti(x,i,c):
+ def Ti(x, i, c):
return T[i](x)+c*x
try:
diff --git a/src/sage/combinat/root_system/meson.build b/src/sage/combinat/root_system/meson.build
index a8827403c7e..35e7bfb1950 100644
--- a/src/sage/combinat/root_system/meson.build
+++ b/src/sage/combinat/root_system/meson.build
@@ -64,13 +64,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name.startswith('reflection_group')
+ deps += [gap]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/combinat/root_system',
install: true,
include_directories: [inc_cpython, inc_rings],
- dependencies: [py_dep, cysignals, gmp],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/combinat/root_system/pieri_factors.py b/src/sage/combinat/root_system/pieri_factors.py
index 36dc4a332f2..fa97defb73e 100644
--- a/src/sage/combinat/root_system/pieri_factors.py
+++ b/src/sage/combinat/root_system/pieri_factors.py
@@ -427,7 +427,7 @@ def maximal_elements_combinatorial(self):
"""
return [self.W.from_reduced_word(range(self.W.cartan_type().n, 0, -1))]
- def stanley_symm_poly_weight(self,w):
+ def stanley_symm_poly_weight(self, w):
r"""
EXAMPLES::
diff --git a/src/sage/combinat/root_system/reflection_group_complex.py b/src/sage/combinat/root_system/reflection_group_complex.py
index 32f57d5da95..1d2641d0c65 100644
--- a/src/sage/combinat/root_system/reflection_group_complex.py
+++ b/src/sage/combinat/root_system/reflection_group_complex.py
@@ -323,7 +323,7 @@ def __init__(self, W_types, index_set=None, hyperplane_index_set=None, reflectio
raise ValueError("the given reflection index set (= %s) does not have the right size" % self._index_set.values())
self._reflection_index_set_inverse = {i: ii for ii,i in enumerate(self._reflection_index_set)}
- def _irrcomp_repr_(self,W_type):
+ def _irrcomp_repr_(self, W_type):
r"""
Return the string representation of an irreducible component
of ``self``.
@@ -703,7 +703,7 @@ def reflections(self):
return Family(self._reflection_index_set,
lambda i: T[self._reflection_index_set_inverse[i]])
- def reflection(self,i):
+ def reflection(self, i):
r"""
Return the ``i``-th reflection of ``self``.
@@ -1725,7 +1725,7 @@ def action_on_root(w, beta):
return beta * w.to_matrix()
@cached_function
- def invariant_value(i,j):
+ def invariant_value(i, j):
if i > j:
return invariant_value(j,i).conjugate()
val = sum(action_on_root(w, Delta[i]) * action_on_root(w, Delta[j]).conjugate()
@@ -1782,7 +1782,7 @@ def invariant_form_standardization(self):
"""
return self.invariant_form().principal_square_root()
- def set_reflection_representation(self,refl_repr=None):
+ def set_reflection_representation(self, refl_repr=None):
r"""
Set the reflection representation of ``self``.
diff --git a/src/sage/combinat/root_system/weyl_characters.py b/src/sage/combinat/root_system/weyl_characters.py
index d7f87d6f494..c8c44224741 100644
--- a/src/sage/combinat/root_system/weyl_characters.py
+++ b/src/sage/combinat/root_system/weyl_characters.py
@@ -2205,8 +2205,8 @@ def demazure_lusztig(self, i, v):
sage: P. = PolynomialRing(QQ)
sage: B2 = WeylCharacterRing("B2",style='coroots',base_ring=P); b2 = B2.ambient()
- sage: def T1(f): return f.demazure_lusztig(1,v)
- sage: def T2(f): return f.demazure_lusztig(2,v)
+ sage: def T1(f): return f.demazure_lusztig(1, v)
+ sage: def T2(f): return f.demazure_lusztig(2, v)
sage: T1(T2(T1(T2(b2(1,-1)))))
(v^2-v)*b2(0,-1) + v^2*b2(-1,1)
sage: [T1(T1(f))==(v-1)*T1(f)+v*f for f in [b2(0,0), b2(1,0), b2(2,3)]]
diff --git a/src/sage/combinat/sf/k_dual.py b/src/sage/combinat/sf/k_dual.py
index ad7471ec001..6d8151c00ac 100644
--- a/src/sage/combinat/sf/k_dual.py
+++ b/src/sage/combinat/sf/k_dual.py
@@ -378,7 +378,7 @@ def one(self):
"""
return self.a_realization().one()
- def retract(self,la):
+ def retract(self, la):
r"""
Give the retract map from the symmetric functions to the quotient ring of
`k`-bounded symmetric functions. This method is here to make the TestSuite run
@@ -492,7 +492,7 @@ def super_categories(self):
class ParentMethods:
- def retract(self,la):
+ def retract(self, la):
r"""
Give the retract map from the symmetric functions to the quotient ring of
`k`-bounded symmetric functions. This method is here to make the TestSuite run
diff --git a/src/sage/combinat/sf/sf.py b/src/sage/combinat/sf/sf.py
index 9f15dd18fea..546a3d22367 100644
--- a/src/sage/combinat/sf/sf.py
+++ b/src/sage/combinat/sf/sf.py
@@ -1604,7 +1604,7 @@ def __init__(self, t, domain, codomain):
sage: Sym = SymmetricFunctions(QQ['x'])
sage: p = Sym.p(); s = Sym.s()
- sage: def t(x) : [(p,c)] = x; return [ (p,2*c), (p.conjugate(), c) ]
+ sage: def t(x) : [(p, c)] = x; return [ (p, 2*c), (p.conjugate(), c) ]
sage: f = sage.combinat.sf.sf.SymmetricaConversionOnBasis(t, p, s)
sage: f(Partition([3,1]))
s[2, 1, 1] + 2*s[3, 1]
diff --git a/src/sage/combinat/sf/sfa.py b/src/sage/combinat/sf/sfa.py
index 794f7a0cb42..8d911087b24 100644
--- a/src/sage/combinat/sf/sfa.py
+++ b/src/sage/combinat/sf/sfa.py
@@ -3783,7 +3783,7 @@ def omega(self):
omega_involution = omega
- def theta(self,a):
+ def theta(self, a):
r"""
Return the image of ``self`` under the theta endomorphism which sends
`p_k` to `a \cdot p_k` for every positive integer `k`.
diff --git a/src/sage/combinat/shard_order.py b/src/sage/combinat/shard_order.py
index f9081ef77dc..002983ef747 100644
--- a/src/sage/combinat/shard_order.py
+++ b/src/sage/combinat/shard_order.py
@@ -88,7 +88,7 @@ def __init__(self, p):
Digraph on 3 vertices
"""
self.runs = p.decreasing_runs(as_tuple=True)
- self.run_indices = [None] * (len(p) + 1)
+ self.run_indices = [0] * (len(p) + 1)
for i, bloc in enumerate(self.runs):
for j in bloc:
self.run_indices[j] = i
diff --git a/src/sage/combinat/similarity_class_type.py b/src/sage/combinat/similarity_class_type.py
index caa691ac559..de3ce6f7989 100644
--- a/src/sage/combinat/similarity_class_type.py
+++ b/src/sage/combinat/similarity_class_type.py
@@ -101,7 +101,7 @@ class type, it is also possible to compute the number of classes of that type
sage: from sage.combinat.similarity_class_type import order_of_general_linear_group, centralizer_algebra_dim
sage: q = ZZ['q'].gen()
- sage: def simultaneous_similarity_classes(n,k):
+ sage: def simultaneous_similarity_classes(n, k):
....: return SimilarityClassTypes(n).sum(lambda la: q**(k*centralizer_algebra_dim(la)), invertible = True)/order_of_general_linear_group(n)
sage: simultaneous_similarity_classes(3, 2)
q^10 + q^8 + 2*q^7 + 2*q^6 + 2*q^5 + q^4
diff --git a/src/sage/combinat/sloane_functions.py b/src/sage/combinat/sloane_functions.py
index 08897c8b6da..b9651829109 100644
--- a/src/sage/combinat/sloane_functions.py
+++ b/src/sage/combinat/sloane_functions.py
@@ -6366,7 +6366,7 @@ def _repr_(self):
"""
return "Linear second order recurrence. A051959."
- def g(self,k):
+ def g(self, k):
"""
EXAMPLES::
diff --git a/src/sage/combinat/subset.py b/src/sage/combinat/subset.py
index 6c8d923ce9f..d6cc38c5cd4 100644
--- a/src/sage/combinat/subset.py
+++ b/src/sage/combinat/subset.py
@@ -506,7 +506,7 @@ def __call__(self, el):
else:
return Parent.__call__(self, el)
- def _element_constructor_(self,X):
+ def _element_constructor_(self, X):
"""
TESTS::
@@ -1148,7 +1148,7 @@ def __call__(self, el):
else:
return Parent.__call__(self, el)
- def _element_constructor_(self,X):
+ def _element_constructor_(self, X):
"""
TESTS::
diff --git a/src/sage/combinat/subsets_pairwise.py b/src/sage/combinat/subsets_pairwise.py
index d8fec5c1a0c..18f6e13a5a9 100644
--- a/src/sage/combinat/subsets_pairwise.py
+++ b/src/sage/combinat/subsets_pairwise.py
@@ -39,7 +39,7 @@ class PairwiseCompatibleSubsets(RecursivelyEnumeratedSet_forest):
elements are pairwise relatively prime::
sage: from sage.combinat.subsets_pairwise import PairwiseCompatibleSubsets
- sage: def predicate(x,y): return gcd(x,y) == 1
+ sage: def predicate(x, y): return gcd(x, y) == 1
sage: P = PairwiseCompatibleSubsets( [4,5,6,8,9], predicate); P
An enumerated set with a forest structure
sage: P.list()
@@ -91,7 +91,7 @@ def __init__(self, ambient, predicate, maximal=False, element_class=Set_object_e
TESTS::
sage: from sage.combinat.subsets_pairwise import PairwiseCompatibleSubsets
- sage: def predicate(x,y): return gcd(x,y) == 1
+ sage: def predicate(x, y): return gcd(x, y) == 1
sage: P = PairwiseCompatibleSubsets( [4,5,6,8,9], predicate); P
An enumerated set with a forest structure
sage: import __main__; __main__.predicate = predicate
@@ -113,7 +113,7 @@ def __eq__(self, other):
TESTS::
sage: from sage.combinat.subsets_pairwise import PairwiseCompatibleSubsets
- sage: def predicate(x,y): return gcd(x,y) == 1
+ sage: def predicate(x, y): return gcd(x, y) == 1
sage: P = PairwiseCompatibleSubsets( [4,5,6,8,9], predicate); P
An enumerated set with a forest structure
sage: P == P
@@ -131,7 +131,7 @@ def __contains__(self, subset):
EXAMPLES::
sage: from sage.combinat.subsets_pairwise import PairwiseCompatibleSubsets
- sage: def predicate(x,y): return gcd(x,y) == 1
+ sage: def predicate(x, y): return gcd(x, y) == 1
sage: P = PairwiseCompatibleSubsets( [4,5,6,8,9], predicate); P
An enumerated set with a forest structure
sage: Set([5,8,9]) in P
@@ -150,7 +150,7 @@ def post_process(self, subset_rest):
TESTS::
sage: from sage.combinat.subsets_pairwise import PairwiseCompatibleSubsets
- sage: def predicate(x,y): return gcd(x,y) == 1
+ sage: def predicate(x, y): return gcd(x, y) == 1
sage: P = PairwiseCompatibleSubsets( [4,5,6,8,9], predicate); P
An enumerated set with a forest structure
sage: P.post_process( ((4,5), (9)) )
@@ -167,7 +167,7 @@ def children(self, subset_rest):
TESTS::
sage: from sage.combinat.subsets_pairwise import PairwiseCompatibleSubsets
- sage: def predicate(x,y): return gcd(x,y) == 1
+ sage: def predicate(x, y): return gcd(x, y) == 1
sage: P = PairwiseCompatibleSubsets( [3,5,7,11,14], predicate); P
An enumerated set with a forest structure
sage: list(P.children( ((3,5), [14,11,7]) ))
diff --git a/src/sage/combinat/tableau.py b/src/sage/combinat/tableau.py
index 80e3391b279..aace1ba5a2c 100644
--- a/src/sage/combinat/tableau.py
+++ b/src/sage/combinat/tableau.py
@@ -2055,14 +2055,14 @@ def k_weight(self, k):
w = self.weight()
s = self.cells()
- for l in range(1, len(w)+1):
+ for l in range(1, len(w) + 1):
new_s = [(i, j) for i, j in s if self[i][j] == l]
# If there are no elements that meet the condition
- if new_s == []:
+ if not new_s:
res.append(0)
continue
- x = set((i-j) % (k+1) for i, j in new_s)
+ x = {(i - j) % (k + 1) for i, j in new_s}
res.append(len(x))
return res
@@ -2955,9 +2955,8 @@ def row_stabilizer(self):
# tableau, by including the identity permutation on the set [1..k].
k = self.size()
gens = [list(range(1, k + 1))]
- for row in self:
- for j in range(len(row) - 1):
- gens.append((row[j], row[j + 1]))
+ gens.extend((row[j], row[j + 1])
+ for row in self for j in range(len(row) - 1))
return PermutationGroup(gens)
def column_stabilizer(self):
@@ -7675,9 +7674,9 @@ def __contains__(self, x):
"""
if isinstance(x, StandardTableau):
return True
- elif Tableaux.__contains__(self, x):
+ if Tableaux.__contains__(self, x):
flatx = sorted(c for row in x for c in row)
- return flatx == list(range(1, len(flatx)+1)) and (len(x) == 0 or
+ return all(i == fi for i, fi in enumerate(flatx, start=1)) and (len(x) == 0 or
(all(row[i] < row[i+1] for row in x for i in range(len(row)-1)) and
all(x[r][c] < x[r+1][c] for r in range(len(x)-1)
for c in range(len(x[r+1])))
@@ -8183,25 +8182,20 @@ def random_element(self):
t = [[None] * n for n in p]
# Get the cells in the Young diagram
- cells = []
- for i in range(len(p)):
- for j in range(p[i]):
- cells.append((i, j))
+ cells = [(i, j) for i in range(len(p)) for j in range(p[i])]
m = sum(p)
- while m > 0:
+ while m:
# Choose a cell at random
cell = random.choice(cells)
# Find a corner
inner_corners = p.corners()
while cell not in inner_corners:
- hooks = []
- for k in range(cell[1] + 1, p[cell[0]]):
- hooks.append((cell[0], k))
- for k in range(cell[0] + 1, len(p)):
- if p[k] > cell[1]:
- hooks.append((k, cell[1]))
+ c0, c1 = cell
+ hooks = [(c0, k) for k in range(c1 + 1, p[c0])]
+ hooks.extend((k, c1)
+ for k in range(c0 + 1, len(p)) if p[k] > c1)
cell = random.choice(hooks)
# Assign m to cell
diff --git a/src/sage/combinat/tutorial.py b/src/sage/combinat/tutorial.py
index ef77bf66d4e..c8d18942181 100644
--- a/src/sage/combinat/tutorial.py
+++ b/src/sage/combinat/tutorial.py
@@ -1314,7 +1314,7 @@
combinatorics, especially when combined with recursion. Here is how to
generate all words of a given length on a given alphabet::
- sage: def words(alphabet,l):
+ sage: def words(alphabet, l):
....: if l == 0:
....: yield []
....: else:
diff --git a/src/sage/combinat/words/finite_word.py b/src/sage/combinat/words/finite_word.py
index 23e02ad61fb..ba9bf3f2157 100644
--- a/src/sage/combinat/words/finite_word.py
+++ b/src/sage/combinat/words/finite_word.py
@@ -511,10 +511,10 @@ def fcn(n):
length = exp * self.length()
if length in ZZ and length >= 0:
return self._parent(fcn, length=length)
- else:
- raise ValueError("Power of the word is not defined on the exponent {}:"
- " the length of the word ({}) times the exponent ({}) must"
- " be a positive integer".format(exp, self.length(), exp))
+
+ raise ValueError("Power of the word is not defined on the exponent {}: "
+ "the length of the word ({}) times the exponent ({}) must "
+ "be a positive integer".format(exp, self.length(), exp))
def length(self):
r"""
@@ -4153,8 +4153,7 @@ def last_position_dict(self):
{'1': 3, '2': 6, '3': 5}
"""
d = {}
- for i, letter in enumerate(self):
- d[letter] = i
+ d.update((letter, i) for i, letter in enumerate(self))
return d
def _pos_in(self, other, p):
@@ -4191,7 +4190,7 @@ def _pos_in(self, other, p):
"""
from sage.misc.superseded import deprecation
deprecation(30187, 'f._pos_in(w, start) is deprecated.'
- ' Use w.first_occurrence(f, start) instead.')
+ ' Use w.first_occurrence(f, start) instead.')
return other.first_occurrence(self, p)
def first_pos_in(self, other):
@@ -4219,7 +4218,7 @@ def first_pos_in(self, other):
"""
from sage.misc.superseded import deprecation
deprecation(30187, 'f.first_pos_in(w) is deprecated.'
- ' Use w.first_occurrence(f) instead.')
+ ' Use w.first_occurrence(f) instead.')
return other.first_occurrence(self)
def find(self, sub, start=0, end=None):
@@ -4440,7 +4439,7 @@ def factor_occurrences_in(self, other):
"""
from sage.misc.superseded import deprecation
deprecation(30187, 'f.factor_occurrences_in(w) is deprecated.'
- ' Use w.factor_occurrences_iterator(f) instead.')
+ ' Use w.factor_occurrences_iterator(f) instead.')
return other.factor_occurrences_iterator(self)
def nb_factor_occurrences_in(self, other):
@@ -4475,7 +4474,7 @@ def nb_factor_occurrences_in(self, other):
"""
from sage.misc.superseded import deprecation
deprecation(30187, 'f.nb_factor_occurrences_in(w) is deprecated.'
- ' Use w.number_of_factor_occurrences(f) instead.')
+ ' Use w.number_of_factor_occurrences(f) instead.')
return other.number_of_factor_occurrences(self)
def nb_subword_occurrences_in(self, other):
@@ -4544,7 +4543,7 @@ def nb_subword_occurrences_in(self, other):
"""
from sage.misc.superseded import deprecation
deprecation(30187, 'f.nb_subword_occurrences_in(w) is deprecated.'
- ' Use w.number_of_subword_occurrences(f) instead.')
+ ' Use w.number_of_subword_occurrences(f) instead.')
return other.number_of_subword_occurrences(self)
def number_of_factor_occurrences(self, other):
@@ -5675,7 +5674,7 @@ def abelian_vectors(self, n):
size = alphabet.cardinality()
if size == float('inf'):
raise TypeError("The alphabet of the parent is infinite; define"
- " the word with a parent on a finite alphabet")
+ " the word with a parent on a finite alphabet")
S = set()
if n > self.length():
return S
@@ -6105,8 +6104,8 @@ def abelian_vector(self):
alphabet = self.parent().alphabet()
if alphabet.cardinality() is Infinity:
raise TypeError("The alphabet of the parent is infinite; define "
- "the word with a parent on a finite alphabet or use "
- "evaluation_dict() instead")
+ "the word with a parent on a finite alphabet "
+ "or use evaluation_dict() instead")
ev_dict = self.evaluation_dict()
return [ev_dict.get(a, 0) for a in alphabet]
@@ -6803,8 +6802,8 @@ def colored_vector(self, x=0, y=0, width='default', height=1, cmap='hsv', thickn
else:
ordered_alphabet = self.parent().alphabet()
dim = float(self.parent().alphabet().cardinality())
- letter_to_integer_dict = {a: i for i, a in
- enumerate(ordered_alphabet)}
+ letter_to_integer_dict = {a: i
+ for i, a in enumerate(ordered_alphabet)}
xp = x
for a in self:
i = letter_to_integer_dict[a]
diff --git a/src/sage/combinat/words/morphism.py b/src/sage/combinat/words/morphism.py
index 7ff3b53451c..343fe8af9eb 100644
--- a/src/sage/combinat/words/morphism.py
+++ b/src/sage/combinat/words/morphism.py
@@ -1048,8 +1048,7 @@ def extend_by(self, other):
raise TypeError("other (=%s) is not a WordMorphism" % other)
nv = dict(other._morph)
- for k, v in self._morph.items():
- nv[k] = v
+ nv.update(self._morph)
return WordMorphism(nv)
def restrict_domain(self, alphabet):
@@ -2467,9 +2466,9 @@ def dual_map(self, k=1):
if k == 1:
from sage.combinat.e_one_star import E1Star
return E1Star(self)
- else:
- raise NotImplementedError("the dual map E_k^*" +
- " is implemented only for k = 1 (not %s)" % k)
+
+ raise NotImplementedError("the dual map E_k^* is implemented only "
+ "for k = 1 (not %s)" % k)
@cached_method
def rauzy_fractal_projection(self, eig=None, prec=53):
diff --git a/src/sage/combinat/words/word_generators.py b/src/sage/combinat/words/word_generators.py
index 5803709ba5b..05ccb242508 100644
--- a/src/sage/combinat/words/word_generators.py
+++ b/src/sage/combinat/words/word_generators.py
@@ -589,7 +589,7 @@ def FibonacciWord(self, alphabet=(0, 1), construction_method='recursive'):
else:
raise NotImplementedError
- def _FibonacciWord_RecursiveConstructionIterator(self,alphabet=(0,1)):
+ def _FibonacciWord_RecursiveConstructionIterator(self, alphabet=(0, 1)):
r"""
Iterate over the symbols of the Fibonacci word, as defined by
the following recursive construction: the Fibonacci word is the
@@ -659,7 +659,7 @@ def FixedPointOfMorphism(self, morphism, first_letter):
"""
return WordMorphism(morphism).fixed_point(letter=first_letter)
- def CodingOfRotationWord(self, alpha, beta, x=0, alphabet=(0,1)):
+ def CodingOfRotationWord(self, alpha, beta, x=0, alphabet=(0, 1)):
r"""
Return the infinite word obtained from the coding of rotation of
parameters `(\alpha,\beta, x)` over the given two-letter alphabet.
@@ -695,7 +695,7 @@ def CodingOfRotationWord(self, alpha, beta, x=0, alphabet=(0,1)):
w = InfiniteWords(alphabet)(f, datatype='callable')
return w
- def _CodingOfRotationWord_function(self, n, alpha, beta, x=0, alphabet=(0,1)):
+ def _CodingOfRotationWord_function(self, n, alpha, beta, x=0, alphabet=(0, 1)):
r"""
Internal function that returns the symbol in position `n` of the
coding of rotation word corresponding to the parameters `\alpha`,
@@ -901,7 +901,7 @@ def CharacteristicSturmianWord(self, slope, alphabet=(0, 1), bits=None):
datatype='iter')
return w
- def _CharacteristicSturmianWord_LetterIterator(self, cf, alphabet=(0,1)):
+ def _CharacteristicSturmianWord_LetterIterator(self, cf, alphabet=(0, 1)):
r"""
Return an iterator over the symbols of the characteristic
Sturmian word of slope ``cf``.
@@ -967,7 +967,7 @@ def _CharacteristicSturmianWord_LetterIterator(self, cf, alphabet=(0,1)):
except StopIteration:
return
- def KolakoskiWord(self, alphabet=(1,2)):
+ def KolakoskiWord(self, alphabet=(1, 2)):
r"""
Return the Kolakoski word over the given alphabet and
starting with the first letter of the alphabet.
@@ -1392,7 +1392,7 @@ def RandomWord(self, n, m=2, alphabet=None):
ChristoffelWord = LowerChristoffelWord
- def UpperChristoffelWord(self, p, q, alphabet=(0,1)):
+ def UpperChristoffelWord(self, p, q, alphabet=(0, 1)):
r"""
Return the upper Christoffel word of slope `p/q`, where
`p` and `q` are relatively prime nonnegative
diff --git a/src/sage/combinat/yang_baxter_graph.py b/src/sage/combinat/yang_baxter_graph.py
index 33552e4cc46..3fb02420f27 100644
--- a/src/sage/combinat/yang_baxter_graph.py
+++ b/src/sage/combinat/yang_baxter_graph.py
@@ -15,6 +15,7 @@
#
# https://www.gnu.org/licenses/
# ****************************************************************************
+from copy import copy
from sage.graphs.digraph import DiGraph
from sage.structure.sage_object import SageObject
@@ -45,8 +46,8 @@ def YangBaxterGraph(partition=None, root=None, operators=None):
OUTPUT: either:
- - :class:`YangBaxterGraph_partition` -- if partition is defined
- - :class:`YangBaxterGraph_generic` -- if partition is ``None``
+ - :class:`YangBaxterGraph_partition` -- if partition is defined
+ - :class:`YangBaxterGraph_generic` -- if partition is ``None``
EXAMPLES:
@@ -108,8 +109,7 @@ def YangBaxterGraph(partition=None, root=None, operators=None):
"""
if partition is None:
return YangBaxterGraph_generic(root=root, operators=operators)
- else:
- return YangBaxterGraph_partition(partition=Partition(partition))
+ return YangBaxterGraph_partition(partition=Partition(partition))
# *********** General class for Yang-Baxter Graphs ***********
@@ -203,7 +203,7 @@ def _digraph(self):
digraph.add_edge(u, v, l)
return digraph
- def __hash__(self):
+ def __hash__(self) -> int:
r"""
TESTS::
@@ -236,7 +236,7 @@ def __eq__(self, other) -> bool:
sage: Y3.__eq__(Y2)
False
"""
- return type(self) is type(other) and self._digraph == other._digraph
+ return isinstance(other, YangBaxterGraph_generic) and self._digraph == other._digraph
def __ne__(self, other) -> bool:
r"""
@@ -311,7 +311,6 @@ def __copy__(self):
sage: Y == B
True
"""
- from copy import copy
Y = self.__class__(self._root, self._operators)
Y._digraph = copy(self._digraph)
return Y
@@ -421,9 +420,7 @@ def vertices(self, sort=False) -> list:
sage: Y.vertices(sort=True)
[(0, 2, 1, 0), (2, 0, 1, 0), (2, 1, 0, 0)]
"""
- if sort:
- return sorted(self)
- return list(self)
+ return sorted(self) if sort else list(self)
def edges(self):
r"""
@@ -505,7 +502,6 @@ def relabel_vertices(self, v, relabel_operator, inplace=True):
sage: Y.vertices(sort=True)
[(1, 2, 3, 4), (2, 1, 3, 4), (2, 3, 1, 4)]
"""
- from copy import copy
relabelling = self.vertex_relabelling_dict(v, relabel_operator)
Y = self if inplace else copy(self)
Y._root = relabelling[Y._root]
@@ -540,11 +536,7 @@ def relabel_edges(self, edge_dict, inplace=True):
sage: Y.edges()
[((0, 2, 1, 0), (2, 0, 1, 0), 17), ((2, 0, 1, 0), (2, 1, 0, 0), 27)]
"""
- if inplace:
- Y = self
- else:
- from copy import copy
- Y = copy(self)
+ Y = self if inplace else copy(self)
digraph = Y._digraph
for u, v in digraph.edges(sort=False, labels=False):
digraph.set_edge_label(u, v, edge_dict[u, v])
@@ -614,7 +606,6 @@ def __copy__(self):
sage: Y == B
True
"""
- from copy import copy
Y = self.__class__(self._partition)
Y._digraph = copy(self._digraph)
return Y
@@ -634,7 +625,7 @@ def _digraph(self):
[((0, 1, 0), (1, 0, 0), Swap positions 0 and 1)]
"""
digraph = super()._digraph
- for (u, v, op) in digraph.edges(sort=True):
+ for u, v, op in digraph.edges():
digraph.set_edge_label(u, v, SwapOperator(op.position()))
return digraph
@@ -754,11 +745,10 @@ def relabel_vertices(self, v, inplace=True):
Y._digraph.relabel(relabelling, inplace=inplace)
Y._vertex_ordering = Y._digraph.vertices(sort=True)
return
- else:
- from copy import copy
- Y = copy(self)
- Y._root = relabelling[Y._root]
- return Y._digraph.relabel(relabelling, inplace=inplace)
+
+ Y = copy(self)
+ Y._root = relabelling[Y._root]
+ return Y._digraph.relabel(relabelling, inplace=inplace)
# ------------- Some Yang-Baxter operators ------------------
@@ -777,7 +767,7 @@ def __init__(self, i):
"""
self._position = i
- def __hash__(self):
+ def __hash__(self) -> int:
r"""
TESTS::
@@ -925,9 +915,8 @@ def __call__(self, u):
j = i + 1
if u[i] < u[j]:
v = list(u)
- (v[j], v[i]) = (v[i], v[j])
+ v[j], v[i] = v[i], v[j]
if isinstance(u, Permutation):
return Permutation(v)
return type(u)(v)
- else:
- return u
+ return u
diff --git a/src/sage/crypto/block_cipher/miniaes.py b/src/sage/crypto/block_cipher/miniaes.py
index 0a421c17e5e..cf591029d80 100644
--- a/src/sage/crypto/block_cipher/miniaes.py
+++ b/src/sage/crypto/block_cipher/miniaes.py
@@ -1642,7 +1642,7 @@ def GF_to_binary(self, G):
return B(S)
# G is a matrix over GF(16)
elif isinstance(G, Matrix_dense):
- if not (G.base_ring() is K):
+ if G.base_ring() is not K:
raise TypeError("input G must be an element of GF(16), a list of elements of GF(16), or a matrix over GF(16)")
S = "".join(str(self._GF_to_bin[G[i][j]])
for i in range(G.nrows()) for j in range(G.ncols()))
@@ -1772,7 +1772,7 @@ def GF_to_integer(self, G):
return [self._GF_to_int[g] for g in G]
# G is a matrix over GF(16)
elif isinstance(G, Matrix_dense):
- if not (G.base_ring() is K):
+ if G.base_ring() is not K:
raise TypeError("input G must be an element of GF(16), a list of elements of GF(16), or a matrix over GF(16)")
return [self._GF_to_int[G[i][j]] for i in range(G.nrows()) for j in range(G.ncols())]
# the type of G doesn't match the supported types
diff --git a/src/sage/crypto/boolean_function.pyx b/src/sage/crypto/boolean_function.pyx
index 7f8f4b4fba0..1716c78f2d9 100644
--- a/src/sage/crypto/boolean_function.pyx
+++ b/src/sage/crypto/boolean_function.pyx
@@ -983,7 +983,7 @@ cdef class BooleanFunction(SageObject):
self._sum_of_square_indicator = sum(a**2 for a in D)
return self._sum_of_square_indicator
- def annihilator(self,d, dim = False):
+ def annihilator(self, d, dim=False):
r"""
Return (if it exists) an annihilator of the boolean function of
degree at most `d`, that is a Boolean polynomial `g` such that
@@ -1054,7 +1054,7 @@ cdef class BooleanFunction(SageObject):
else:
return res
- def algebraic_immunity(self, annihilator = False):
+ def algebraic_immunity(self, annihilator=False):
"""
Return the algebraic immunity of the Boolean function.
diff --git a/src/sage/crypto/sbox.pyx b/src/sage/crypto/sbox.pyx
index 30b7a3cd8c9..af8638ea8e3 100644
--- a/src/sage/crypto/sbox.pyx
+++ b/src/sage/crypto/sbox.pyx
@@ -645,7 +645,7 @@ cdef class SBox(SageObject):
[0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2]
[0 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0]
- TESTS::
+ TESTS:
Testing square SBoxes::
diff --git a/src/sage/crypto/stream.py b/src/sage/crypto/stream.py
index a9e94d63b24..1462295774e 100644
--- a/src/sage/crypto/stream.py
+++ b/src/sage/crypto/stream.py
@@ -95,7 +95,7 @@ def _repr_(self):
"""
return "LFSR cryptosystem over %s" % self._field
- def encoding(self,M):
+ def encoding(self, M):
S = self.cipher_domain()
try:
return S.encoding(M)
@@ -160,7 +160,7 @@ def _repr_(self):
"""
return "Shrinking generator cryptosystem over %s" % self._field
- def encoding(self,M):
+ def encoding(self, M):
S = self.cipher_domain()
try:
return S.encoding(M)
diff --git a/src/sage/data_structures/bitset.pxd b/src/sage/data_structures/bitset.pxd
index 35343fa28ae..db627b294cd 100644
--- a/src/sage/data_structures/bitset.pxd
+++ b/src/sage/data_structures/bitset.pxd
@@ -12,7 +12,7 @@ from sage.data_structures.bitset_base cimport bitset_t
# Python layer over bitset_t
cdef class FrozenBitset:
cdef bitset_t _bitset
- cdef FrozenBitset _new(self,long int capacity)
+ cdef FrozenBitset _new(self, long int capacity)
cpdef FrozenBitset _larger_capacity_(self, long size)
cpdef long capacity(self) noexcept
cpdef bint isempty(self) noexcept
diff --git a/src/sage/data_structures/bounded_integer_sequences.pyx b/src/sage/data_structures/bounded_integer_sequences.pyx
index 44635ad2364..96dd83b4f8e 100644
--- a/src/sage/data_structures/bounded_integer_sequences.pyx
+++ b/src/sage/data_structures/bounded_integer_sequences.pyx
@@ -1380,7 +1380,7 @@ def _biseq_stresstest():
cdef int branch
cdef Py_ssize_t x, y, z
from sage.misc.prandom import randint
- cdef list L = [BoundedIntegerSequence(6, [randint(0,5) for z in range(randint(4,10))]) for y in range(100)]
+ cdef list L = [BoundedIntegerSequence(6, [randint(0, 5) for z in range(randint(4, 10))]) for y in range(100)]
cdef BoundedIntegerSequence S, T
while True:
branch = randint(0,4)
diff --git a/src/sage/databases/cremona.py b/src/sage/databases/cremona.py
index 44c8fbcdc7f..ca859214155 100644
--- a/src/sage/databases/cremona.py
+++ b/src/sage/databases/cremona.py
@@ -1651,7 +1651,7 @@ def _init_allgens(self, ftpdata, largest_conductor=0):
_db = None
-def CremonaDatabase(name=None,mini=None,set_global=None):
+def CremonaDatabase(name=None, mini=None, set_global=None):
"""
Initialize the Cremona database with name ``name``. If ``name`` is
``None`` it instead initializes large Cremona database (named 'cremona'),
diff --git a/src/sage/databases/findstat.py b/src/sage/databases/findstat.py
index 811a190db8f..1285569805e 100644
--- a/src/sage/databases/findstat.py
+++ b/src/sage/databases/findstat.py
@@ -1784,7 +1784,7 @@ def set_sage_code(self, value):
EXAMPLES::
sage: q = findstat([(d, randint(1,1000)) for d in DyckWords(4)]) # optional -- internet
- sage: q.set_sage_code("def statistic(x):\n return randint(1,1000)") # optional -- internet
+ sage: q.set_sage_code("def statistic(x):\n return randint(1, 1000)") # optional -- internet
sage: print(q.sage_code()) # optional -- internet
def statistic(x):
return randint(1,1000)
diff --git a/src/sage/databases/sql_db.py b/src/sage/databases/sql_db.py
index fad05a0add9..3ee328c6cf9 100644
--- a/src/sage/databases/sql_db.py
+++ b/src/sage/databases/sql_db.py
@@ -296,7 +296,7 @@ def _create_print_table(cur, col_titles, **kwds):
plot should be drawn by the object generated by a data slice. Note
that plot kwds are permitted. The dictionary format is::
- {'column_name':((lambda x: plot_function(x)),**kwds)}
+ {'column_name':((lambda x: plot_function(x)), **kwds)}
- ``relabel_cols`` -- dictionary to specify a relabeling of column
headers. The dictionary format is::
@@ -629,7 +629,7 @@ def show(self, **kwds):
plot should be drawn by the object generated by a data slice. Note
that plot kwds are permitted. The dictionary format is::
- {'column_name':((lambda x: plot_function(x)),**kwds)}
+ {'column_name':((lambda x: plot_function(x)), **kwds)}
- ``relabel_cols`` -- dictionary to specify a relabeling of column
headers. The dictionary format is::
diff --git a/src/sage/doctest/control.py b/src/sage/doctest/control.py
index f34d3ef5caa..fff35be8307 100644
--- a/src/sage/doctest/control.py
+++ b/src/sage/doctest/control.py
@@ -282,13 +282,14 @@ def skipfile(filename, tested_optional_tags=False, *,
sage: skipfile(filename, True)
False
"""
- if filename.endswith('.rst.txt'):
- ext = '.rst.txt'
if filename.endswith('__main__.py'):
if log:
log(f"Skipping '{filename}' because it is a __main__.py file")
return True
- _ , ext = os.path.splitext(filename)
+ if filename.endswith('.rst.txt'):
+ ext = '.rst.txt'
+ else:
+ _ , ext = os.path.splitext(filename)
# .rst.txt appear in the installed documentation in subdirectories named "_sources"
if ext not in ('.py', '.pyx', '.pxd', '.pxi', '.sage', '.spyx', '.rst', '.tex', '.rst.txt'):
if log:
diff --git a/src/sage/doctest/external.py b/src/sage/doctest/external.py
index 56727bd79f6..bf0309d3131 100644
--- a/src/sage/doctest/external.py
+++ b/src/sage/doctest/external.py
@@ -32,12 +32,12 @@
#*****************************************************************************
import multiprocessing
-import os
+import platform
# With OS X, Python 3.8 defaults to use 'spawn' instead of 'fork' in
# multiprocessing, and Sage doctesting doesn't work with 'spawn'. See
# trac #27754.
-if os.uname().sysname == 'Darwin':
+if platform.system() == 'Darwin':
multiprocessing.set_start_method('fork', force=True)
Array = multiprocessing.Array
diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py
index b69c842836c..bf6d49906de 100644
--- a/src/sage/doctest/forker.py
+++ b/src/sage/doctest/forker.py
@@ -48,6 +48,7 @@
import os
+import platform
import sys
import time
import signal
@@ -80,7 +81,7 @@
# With OS X, Python 3.8 defaults to use 'spawn' instead of 'fork' in
# multiprocessing, and Sage doctesting doesn't work with 'spawn'. See
# trac #27754.
-if os.uname().sysname == 'Darwin':
+if platform.system() == 'Darwin':
multiprocessing.set_start_method('fork', force=True)
diff --git a/src/sage/doctest/parsing.py b/src/sage/doctest/parsing.py
index 0bc4965cd09..20f6eb6ce69 100644
--- a/src/sage/doctest/parsing.py
+++ b/src/sage/doctest/parsing.py
@@ -1516,6 +1516,21 @@ def do_fixup(self, want, got):
pythran_numpy_warning_regex = re.compile(r'WARNING: Overriding pythran description with argspec information for: numpy\.random\.[a-z_]+')
got = pythran_numpy_warning_regex.sub('', got)
did_fixup = True
+
+ if "ld_classic is deprecated" in got:
+ # New warnings as of Oct '24, Xcode 16.
+ ld_warn_regex = re.compile("ld: warning: -ld_classic is deprecated and will be removed in a future release")
+ got = ld_warn_regex.sub('', got)
+ did_fixup = True
+
+ if "duplicate libraries" in got:
+ # New warnings as of Sept '23, OS X 13.6, new command-line
+ # tools. In particular, these seem to come from ld in
+ # Xcode 15.
+ dup_lib_regex = re.compile("ld: warning: ignoring duplicate libraries: .*")
+ got = dup_lib_regex.sub('', got)
+ did_fixup = True
+
return did_fixup, want, got
def output_difference(self, example, got, optionflags):
diff --git a/src/sage/doctest/sources.py b/src/sage/doctest/sources.py
index 78c45195970..7589f62922b 100644
--- a/src/sage/doctest/sources.py
+++ b/src/sage/doctest/sources.py
@@ -1013,7 +1013,7 @@ def _update_quotetype(self, line):
sage: print(FDS.quotetype)
None
"""
- def _update_parens(start,end=None):
+ def _update_parens(start, end=None):
self.paren_count += line.count("(",start,end) - line.count(")",start,end)
self.bracket_count += line.count("[",start,end) - line.count("]",start,end)
self.curly_count += line.count("{",start,end) - line.count("}",start,end)
diff --git a/src/sage/dynamics/arithmetic_dynamics/affine_ds.py b/src/sage/dynamics/arithmetic_dynamics/affine_ds.py
index c2ad0f04cea..ecf61822ba9 100644
--- a/src/sage/dynamics/arithmetic_dynamics/affine_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/affine_ds.py
@@ -25,7 +25,7 @@ class initialization directly.
- Ben Hutz (2017) relocate code and create new class
"""
-#*****************************************************************************
+# ****************************************************************************
# Copyright (C) 2011 Volker Braun
# Copyright (C) 2006 David Kohel
# Copyright (C) 2006 William Stein
@@ -34,8 +34,8 @@ class initialization directly.
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# ****************************************************************************
from sage.categories.fields import Fields
from sage.dynamics.arithmetic_dynamics.generic_ds import DynamicalSystem
@@ -255,7 +255,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None):
if isinstance(R, FiniteField):
return DynamicalSystem_affine_finite_field(polys, domain)
return DynamicalSystem_affine_field(polys, domain)
- elif isinstance(morphism_or_polys,(list, tuple)):
+ elif isinstance(morphism_or_polys, (list, tuple)):
polys = list(morphism_or_polys)
else:
polys = [morphism_or_polys]
@@ -321,7 +321,7 @@ def __init__(self, polys_or_rat_fncts, domain):
L = polys_or_rat_fncts
# Next attribute needed for _fast_eval and _fastpolys
R = L[0].base_ring()
- self._is_prime_finite_field = isinstance(R, FiniteField) and R.is_prime_field()
+ self._is_prime_finite_field = isinstance(R, FiniteField) and R.degree() == 1
DynamicalSystem.__init__(self, L, domain)
def __copy__(self):
@@ -535,7 +535,7 @@ def dynatomic_polynomial(self, period):
if isinstance(F.parent(), sage.rings.abc.SymbolicRing):
from sage.symbolic.ring import var
u = var(self.domain().coordinate_ring().variable_name())
- return F.subs({F.variables()[0]:u,F.variables()[1]:1})
+ return F.subs({F.variables()[0]: u, F.variables()[1]: 1})
elif T(F.denominator()).degree() == 0:
R = F.parent()
phi = R.hom([S.gen(0), 1], S)
@@ -543,7 +543,7 @@ def dynatomic_polynomial(self, period):
else:
R = F.numerator().parent()
phi = R.hom([S.gen(0), 1], S)
- return phi(F.numerator())/phi(F.denominator())
+ return phi(F.numerator()) / phi(F.denominator())
def nth_iterate_map(self, n):
r"""
@@ -612,8 +612,8 @@ def nth_iterate_map(self, n):
for i in range(len(D)):
for k in range(D[i]):
PHI = [poly(F) for poly in PHI]
- if i != len(D)-1: #avoid extra iterate
- F = [R(poly(F)) for poly in F] #'square'
+ if i != len(D) - 1: # avoid extra iterate
+ F = [R(poly(F)) for poly in F] # 'square'
return DynamicalSystem_affine(PHI, domain=self.domain())
def nth_iterate(self, P, n):
@@ -724,11 +724,11 @@ def orbit(self, P, n):
if isinstance(n, (list, tuple)):
bounds = list(n)
else:
- bounds = [0,n]
- for i in range(1, bounds[0]+1):
+ bounds = [0, n]
+ for i in range(1, bounds[0] + 1):
Q = self(Q)
orb = [Q]
- for i in range(bounds[0]+1, bounds[1]+1):
+ for i in range(bounds[0] + 1, bounds[1] + 1):
Q = self(Q)
orb.append(Q)
return orb
@@ -802,7 +802,7 @@ def multiplier(self, P, n, check=True):
J = self.jacobian()
for i in range(0, n):
R = self(Q)
- l = J(tuple(Q))*l #chain rule matrix multiplication
+ l = J(tuple(Q)) * l # chain rule matrix multiplication
Q = R
return l
@@ -884,6 +884,7 @@ def degree(self):
"""
return self.as_scheme_morphism().degree()
+
class DynamicalSystem_affine_field(DynamicalSystem_affine,
SchemeMorphism_polynomial_affine_space_field):
@cached_method
@@ -985,6 +986,7 @@ def reduce_base_field(self):
"""
return self.as_scheme_morphism().reduce_base_field().as_dynamical_system()
+
class DynamicalSystem_affine_finite_field(DynamicalSystem_affine_field,
SchemeMorphism_polynomial_affine_space_finite_field):
diff --git a/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py b/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py
index 0c27d8e2bde..9734b3767ac 100644
--- a/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py
@@ -703,7 +703,7 @@ def conjugate(self, M, adjugate=False, new_ideal=None):
new_system = self._system.conjugate(M, adjugate=adjugate)
system_domain = new_system.domain()
if new_ideal is None:
- if not system_domain.base_ring() is QQ:
+ if system_domain.base_ring() is not QQ:
new_ideal = system_domain.base_ring().prime_above(self.domain().ideal())
else:
new_ideal = self.domain().ideal()
@@ -960,6 +960,7 @@ def __call__(self, x, type_3_pole_check=True):
new_radius = max(new_radius, p**(-valuation/prime.absolute_ramification_index())*r**i)
return self.domain()(new_center, new_radius)
+
class DynamicalSystem_Berkovich_affine(DynamicalSystem_Berkovich):
r"""
A dynamical system of the affine Berkovich line over `\CC_p`.
diff --git a/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py b/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py
index 76ba5864fe6..196da8a081a 100644
--- a/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py
+++ b/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py
@@ -335,6 +335,7 @@ def height_bound(polynomial):
return (6*(L2norm_sq)**3)
+
def PGL_repn(rational_function):
r"""
Take a linear fraction transformation and represent it as a 2x2 matrix.
@@ -365,6 +366,7 @@ def PGL_repn(rational_function):
g = rational_function.denominator()
return matrix(F, 2, [f[1], f[0], g[1], g[0]])
+
def PGL_order(A):
r"""
Find the multiplicative order of a linear fractional transformation that
@@ -402,6 +404,7 @@ def PGL_order(A):
return n
+
def CRT_helper(automorphisms, moduli):
r"""
Lift the given list of automorphisms to `Zmod(M)`.
@@ -449,6 +452,7 @@ def CRT_helper(automorphisms, moduli):
return autos, modulus*moduli[0]
+
def CRT_automorphisms(automorphisms, order_elts, degree, moduli):
r"""
Compute a maximal list of automorphisms over `Zmod(M)`.
@@ -495,6 +499,7 @@ def CRT_automorphisms(automorphisms, order_elts, degree, moduli):
# get list of CRT'ed automorphisms
return CRT_helper(degree_d_autos, moduli)
+
def valid_automorphisms(automorphisms_CRT, rational_function, ht_bound, M,
return_functions=False):
r"""
@@ -904,6 +909,7 @@ def automorphism_group_FF(rational_function, absolute=False, iso_type=False, ret
else:
return G, which_group(G[1])
+
def field_descent(sigma, y):
r"""
Function for descending an element in a field `E` to a subfield `F`.
@@ -961,6 +967,7 @@ def field_descent(sigma, y):
return x + F(quotient)*a**(steps)
+
def rational_function_coefficient_descent(rational_function, sigma, poly_ring):
r"""
Function for descending the coefficients of a rational function from field `E`
@@ -1059,6 +1066,7 @@ def rational_function_coerce(rational_function, sigma, S_polys):
else:
return S_polys([sigma(a) for a in f]) / S_polys([sigma(b) for b in g])
+
def rational_function_reduce(rational_function):
r"""
Force Sage to divide out common factors in numerator and denominator
@@ -1084,6 +1092,7 @@ def rational_function_reduce(rational_function):
comm_factor = gcd(F,G)
return (F.quo_rem(comm_factor)[0]) / (G.quo_rem(comm_factor)[0])
+
def three_stable_points(rational_function, invariant_list):
r"""
Implementation of Algorithm 1 for automorphism groups from
@@ -1157,6 +1166,7 @@ def three_stable_points(rational_function, invariant_list):
automorphisms.append(s)
return automorphisms
+
def automorphism_group_FF_alg2(rational_function):
r"""
Implementation of algorithm for determining the absolute automorphism
@@ -1455,6 +1465,7 @@ def order_p_automorphisms(rational_function, pre_image):
return automorphisms_p
+
def automorphisms_fixing_pair(rational_function, pair, quad):
r"""
Compute the set of automorphisms with order prime to the characteristic
@@ -1535,6 +1546,7 @@ def automorphisms_fixing_pair(rational_function, pair, quad):
return list(set(automorphisms_prime_to_p))
+
def automorphism_group_FF_alg3(rational_function):
r"""
Implementation of Algorithm 3 in the paper by Faber/Manes/Viray [FMV]_
@@ -2125,6 +2137,7 @@ def greedy_independence_check(P, repeated_mult, point_to_mult):
if len(source) == n+2:
return source, corresponding
+
def conjugating_set_helper(f, g, num_cpus, source, possible_targets):
r"""
Return the set of elements in PGL over the base ring
@@ -2270,6 +2283,7 @@ def find_conjugations_arrangement(tuples):
Conj = find_conjugations_subset(product(*subset_iterators))
return Conj
+
def is_conjugate_helper(f, g, num_cpus, source, possible_targets):
r"""
Return if ``f`` is conjugate to ``g``.
diff --git a/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py b/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py
index c8528c4821f..902f83b55ae 100644
--- a/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py
+++ b/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py
@@ -473,6 +473,8 @@ def Min(Fun, p, ubRes, conj, all_orbits=False):
###################################################
#modification of Bruin-Molnar for all representatives
+
+
def BM_all_minimal(vp, return_transformation=False, D=None):
r"""
Determine a representative in each `SL(2,\ZZ)` orbit with minimal
@@ -623,6 +625,8 @@ def BM_all_minimal(vp, return_transformation=False, D=None):
###################################################
#find minimal model
+
+
def HS_minimal(f, return_transformation=False, D=None):
r"""
Compute a minimal model for the given projective dynamical system.
@@ -713,6 +717,8 @@ def HS_minimal(f, return_transformation=False, D=None):
return F
#find all representatives of orbits for one prime
+
+
def HS_all_minimal_p(p, f, m=None, return_transformation=False):
r"""
Find a representative in each distinct `SL(2,\ZZ)` orbit with
@@ -814,6 +820,8 @@ def HS_all_minimal_p(p, f, m=None, return_transformation=False):
return [funct for funct, matr in reps]
#find all representatives of orbits
+
+
def HS_all_minimal(f, return_transformation=False, D=None):
r"""
Determine a representative in each `SL(2,\ZZ)` orbit with minimal resultant.
@@ -906,6 +914,7 @@ def HS_all_minimal(f, return_transformation=False, D=None):
# Ben Hutz July 2018
#####################################3
+
def get_bound_dynamical(F, f, m=1, dynatomic=True, prec=53, emb=None):
"""
The hyperbolic distance from `j` which must contain the smallest map.
diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py
index a74efd9129a..2fab95104f1 100644
--- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py
@@ -474,7 +474,7 @@ def __init__(self, polys, domain):
"""
# Next attribute needed for _fast_eval and _fastpolys
R = polys[0].base_ring()
- self._is_prime_finite_field = isinstance(R, FiniteField) and R.is_prime_field()
+ self._is_prime_finite_field = isinstance(R, FiniteField) and R.degree() == 1
DynamicalSystem.__init__(self, polys, domain)
def __copy__(self):
@@ -2811,7 +2811,7 @@ def nth_preimage_tree(self, Q, n, **kwds):
display_complex = True
kwds["embed"] = embed
else:
- field_def = self.field_of_definition_preimage(Q,n)
+ field_def = self.field_of_definition_preimage(Q, n)
fbar = self.change_ring(field_def)
if display_complex:
embed = field_def.embeddings(ComplexField())[0]
@@ -2819,7 +2819,7 @@ def nth_preimage_tree(self, Q, n, **kwds):
elif base_ring in FiniteFields():
if numerical:
raise ValueError("can't solve numerically over a finite field, no embedding into CC")
- field_def = self.field_of_definition_preimage(Q,n)
+ field_def = self.field_of_definition_preimage(Q, n)
fbar = self.change_ring(field_def)
# No embedding from finite field into C
kwds["display_complex"] = False
@@ -7026,6 +7026,7 @@ def Lattes_to_curve(self, return_conjugation=False, check_lattes=False):
return (M, E)
return E
+
class DynamicalSystem_projective_field(DynamicalSystem_projective,
SchemeMorphism_polynomial_projective_space_field):
@@ -9117,6 +9118,7 @@ def is_newton(self, return_conjugation=False):
else:
return Npoly.derivative(z) == (z - N_aff[0]).denominator()
+
class DynamicalSystem_projective_finite_field(DynamicalSystem_projective_field,
SchemeMorphism_polynomial_projective_space_finite_field):
diff --git a/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py b/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py
index 3ef9877e782..766dff990e0 100644
--- a/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py
+++ b/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py
@@ -1299,7 +1299,7 @@ def sigmaX(self, P, **kwds):
return Point
return self.point(Point, False)
- def sigmaY(self,P, **kwds):
+ def sigmaY(self, P, **kwds):
r"""
Return the involution on the Wehler K3 surfaces induced by the double covers.
@@ -1579,7 +1579,7 @@ def phi(self, a, **kwds):
kwds.update({"check":False})
return self.sigmaY(A, **kwds)
- def psi(self,a, **kwds):
+ def psi(self, a, **kwds):
r"""
Evaluates the function `\psi = \sigma_x \circ \sigma_y`.
@@ -2448,7 +2448,7 @@ def is_isomorphic(self, right):
"""
return self.defining_ideal() == right.defining_ideal()
- def is_symmetric_orbit(self,orbit):
+ def is_symmetric_orbit(self, orbit):
r"""
Check to see if the orbit is symmetric (i.e. if one of the points on the
orbit is fixed by '\sigma_x' or '\sigma_y').
diff --git a/src/sage/dynamics/cellular_automata/elementary.py b/src/sage/dynamics/cellular_automata/elementary.py
index 51f959ed237..1c91687db8c 100644
--- a/src/sage/dynamics/cellular_automata/elementary.py
+++ b/src/sage/dynamics/cellular_automata/elementary.py
@@ -25,6 +25,7 @@
lazy_import("sage.plot.matrix_plot", "matrix_plot")
from sage.misc.constant_function import ConstantFunction
+
class ElementaryCellularAutomata(SageObject):
r"""
Elementary cellular automata.
diff --git a/src/sage/dynamics/cellular_automata/glca.py b/src/sage/dynamics/cellular_automata/glca.py
index ea84884755b..929f1131456 100644
--- a/src/sage/dynamics/cellular_automata/glca.py
+++ b/src/sage/dynamics/cellular_automata/glca.py
@@ -20,6 +20,7 @@
from sage.typeset.ascii_art import AsciiArt
from sage.typeset.unicode_art import UnicodeArt
+
class GraftalLaceCellularAutomata(SageObject):
r"""
Graftal Lace Cellular Automata (GLCA).
diff --git a/src/sage/dynamics/complex_dynamics/mandel_julia.py b/src/sage/dynamics/complex_dynamics/mandel_julia.py
index f21ffca80e4..b95040c2da2 100644
--- a/src/sage/dynamics/complex_dynamics/mandel_julia.py
+++ b/src/sage/dynamics/complex_dynamics/mandel_julia.py
@@ -58,6 +58,7 @@
EPS = 0.00001
+
def mandelbrot_plot(f=None, **kwds):
r"""
Plot of the Mandelbrot set for a one parameter family of polynomial maps.
@@ -498,6 +499,7 @@ def kneading_sequence(theta):
KS_str = ''.join(KS) + '*'
return KS_str
+
def julia_plot(f=None, **kwds):
r"""
Plots the Julia set of a given polynomial ``f``. Users can specify whether
diff --git a/src/sage/dynamics/finite_dynamical_system.py b/src/sage/dynamics/finite_dynamical_system.py
index d6cfc29feb7..441a498f608 100644
--- a/src/sage/dynamics/finite_dynamical_system.py
+++ b/src/sage/dynamics/finite_dynamical_system.py
@@ -678,6 +678,7 @@ def is_homomesic(self, h, average=None, find_average=False, elements=None):
return True
return orbavgs[0] == average
+
class InvertibleDiscreteDynamicalSystem(DiscreteDynamicalSystem):
r"""
An invertible discrete dynamical system.
@@ -969,6 +970,7 @@ def inverse_evolution_default(self, x):
"""
return self.orbit(x)[-1]
+
class FiniteDynamicalSystem(DiscreteDynamicalSystem):
r"""
A finite discrete dynamical system.
@@ -1113,6 +1115,7 @@ def cycles(self):
break
return cycs
+
class InvertibleFiniteDynamicalSystem(InvertibleDiscreteDynamicalSystem, FiniteDynamicalSystem):
r"""
An invertible finite discrete dynamical system.
diff --git a/src/sage/dynamics/finite_dynamical_system_catalog.py b/src/sage/dynamics/finite_dynamical_system_catalog.py
index 74217178a29..c00083f56c4 100755
--- a/src/sage/dynamics/finite_dynamical_system_catalog.py
+++ b/src/sage/dynamics/finite_dynamical_system_catalog.py
@@ -28,6 +28,7 @@
FiniteDynamicalSystem, InvertibleDiscreteDynamicalSystem, \
InvertibleFiniteDynamicalSystem
+
def permutation(pi, invertible=True):
r"""
Return the invertible finite discrete dynamical system
@@ -64,6 +65,7 @@ def permutation(pi, invertible=True):
X = range(1, n+1)
return InvertibleFiniteDynamicalSystem(X, pi, inverse=pi.inverse(), create_tuple=True)
+
def one_line(xs):
r"""
Return the finite discrete dynamical system
@@ -148,6 +150,7 @@ def bitstring_rotation(n, ones=None):
psi = lambda x: (x[-1],) + x[:-1]
return InvertibleFiniteDynamicalSystem(X, phi, inverse=psi)
+
def striker_sweep(E, predicate, elements, lazy=False):
r"""
Return the invertible finite discrete dynamical system
diff --git a/src/sage/dynamics/surface_dynamics_deprecation.py b/src/sage/dynamics/surface_dynamics_deprecation.py
index 9da8f1d0be3..8f6e37fe1b2 100644
--- a/src/sage/dynamics/surface_dynamics_deprecation.py
+++ b/src/sage/dynamics/surface_dynamics_deprecation.py
@@ -9,6 +9,7 @@
"information at\n" \
" http://www.labri.fr/perso/vdelecro/surface-dynamics/latest/"
+
def surface_dynamics_deprecation(name):
r"""
TESTS::
diff --git a/src/sage/env.py b/src/sage/env.py
index c6fb123cc72..0cfe6dfe8c4 100644
--- a/src/sage/env.py
+++ b/src/sage/env.py
@@ -11,7 +11,7 @@
sage: module_name = "sage.all" # hide .all import from the linter
sage: cmd = f"from {module_name} import SAGE_ROOT, SAGE_LOCAL;"
sage: cmd += "from os.path import samefile;"
- sage: cmd += f"s1 = samefile(SAGE_ROOT, '{SAGE_ROOT}');"
+ sage: cmd += f"s1 = samefile(SAGE_ROOT, '{SAGE_ROOT}') if SAGE_ROOT else True;"
sage: cmd += f"s2 = samefile(SAGE_LOCAL, '{SAGE_LOCAL}');"
sage: cmd += "print(s1 and s2);"
sage: out = check_output([sys.executable, "-c", cmd], env=env).decode().strip() # long time
@@ -36,6 +36,7 @@
from typing import Optional
import sage
+import platform
import os
import socket
import sys
@@ -165,7 +166,6 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
# system info
-UNAME = var("UNAME", os.uname()[0])
HOSTNAME = var("HOSTNAME", socket.gethostname())
LOCAL_IDENTIFIER = var("LOCAL_IDENTIFIER", "{}.{}".format(HOSTNAME, os.getpid()))
diff --git a/src/sage/ext/interpreters/README b/src/sage/ext/interpreters/README
new file mode 100644
index 00000000000..1e42d921e68
--- /dev/null
+++ b/src/sage/ext/interpreters/README
@@ -0,0 +1 @@
+The files in this directory, except meson.build, are autogenerated by sage_setup.autogen
diff --git a/src/sage/features/info.py b/src/sage/features/info.py
new file mode 100644
index 00000000000..eeaf0118c0d
--- /dev/null
+++ b/src/sage/features/info.py
@@ -0,0 +1,30 @@
+# sage_setup: distribution = sagemath-environment
+r"""
+Feature for testing the presence of ``info``, from GNU Info
+"""
+
+from . import Executable
+
+class Info(Executable):
+ r"""
+ A :class:`~sage.features.Feature` describing the presence of :ref:`info `.
+
+ EXAMPLES::
+
+ sage: from sage.features.info import Info
+ sage: Info()
+ Feature('info')
+ """
+ def __init__(self):
+ r"""
+ TESTS::
+
+ sage: from sage.features.info import Info
+ sage: isinstance(Info(), Info)
+ True
+ """
+ Executable.__init__(self, 'info', executable='info',
+ spkg='info', type='standard')
+
+def all_features():
+ return [Info()]
diff --git a/src/sage/functions/piecewise.py b/src/sage/functions/piecewise.py
index 56b900437a5..fc69057ef6f 100644
--- a/src/sage/functions/piecewise.py
+++ b/src/sage/functions/piecewise.py
@@ -673,39 +673,40 @@ def piecewise_add(self, parameters, variable, other):
funcs = []
contains_lower = False
contains_upper = False
- for i in range(len(points)-1):
+ for i in range(len(points) - 1):
+ a, b = points[i], points[i + 1]
try:
- contains_lower = (self.domain().contains(points[i]) or
- other.domain().contains(points[i])) and not contains_upper
- contains_upper = (self.domain().contains(points[i+1]) or
- other.domain().contains(points[i+1]))
+ contains_lower = (self.domain().contains(a) or
+ other.domain().contains(a)) and not contains_upper
+ contains_upper = (self.domain().contains(b) or
+ other.domain().contains(b))
if contains_lower:
if contains_upper:
- rs = RealSet.closed(points[i], points[i+1])
+ rs = RealSet.closed(a, b)
else:
- rs = RealSet.closed_open(points[i], points[i+1])
+ rs = RealSet.closed_open(a, b)
else:
if contains_upper:
- rs = RealSet.open_closed(points[i], points[i+1])
+ rs = RealSet.open_closed(a, b)
else:
- rs = RealSet.open(points[i], points[i+1])
- point = (points[i+1] + points[i])/2
+ rs = RealSet.open(a, b)
+ point = (b + a) / 2
except ValueError:
- if points[i] == minus_infinity and points[i+1] == infinity:
+ if a == minus_infinity and b == infinity:
rs = RealSet.open(minus_infinity, infinity)
point = 0
- elif points[i] == minus_infinity:
+ elif a == minus_infinity:
if contains_lower:
- rs = RealSet.unbounded_below_closed(points[i+1])
+ rs = RealSet.unbounded_below_closed(b)
else:
- rs = RealSet.unbounded_below_open(points[i+1])
- point = points[i+1]-1
- elif points[i+1] == infinity:
+ rs = RealSet.unbounded_below_open(b)
+ point = b - 1
+ elif b == infinity:
if contains_upper:
- rs = RealSet.unbounded_above_closed(points[i])
+ rs = RealSet.unbounded_above_closed(a)
else:
- rs = RealSet.unbounded_above_open(points[i])
- point = points[i]+1
+ rs = RealSet.unbounded_above_open(a)
+ point = a + 1
else:
raise
try:
@@ -1160,17 +1161,17 @@ def laplace(self, parameters, variable, x='x', s='t'):
(s + 1)*e^(-s)/s^2 + 2*e^(-s)/s - 1/s^2
"""
from sage.symbolic.assumptions import assume, forget
- from sage.functions.log import exp
x = SR.var(x)
s = SR.var(s)
assume(s > 0)
+ exp_sx = (-s * x).exp()
result = 0
for domain, f in parameters:
for interval in domain:
a = interval.lower()
b = interval.upper()
- result += (SR(f)*exp(-s*x)).integral(x, a, b)
+ result += (SR(f) * exp_sx).integral(x, a, b)
forget(s > 0)
return result
diff --git a/src/sage/functions/transcendental.py b/src/sage/functions/transcendental.py
index 7cfa2640473..55e24a44cbd 100644
--- a/src/sage/functions/transcendental.py
+++ b/src/sage/functions/transcendental.py
@@ -449,7 +449,7 @@ def zeta_symmetric(s):
- I copied the definition of xi from
http://web.viu.ca/pughg/RiemannZeta/RiemannZetaLong.html
"""
- if not (isinstance(s, ComplexNumber) or isinstance(s, RealNumber)):
+ if not isinstance(s, (ComplexNumber, RealNumber)):
s = ComplexField()(s)
R = s.parent()
diff --git a/src/sage/functions/trig.py b/src/sage/functions/trig.py
index f912dd79e8f..8f390205cae 100644
--- a/src/sage/functions/trig.py
+++ b/src/sage/functions/trig.py
@@ -261,7 +261,9 @@ def __init__(self):
sage: tan(2+I).imag().n() # needs sage.symbolic
1.16673625724092
"""
- GinacFunction.__init__(self, 'tan', latex_name=r"\tan")
+ GinacFunction.__init__(self, 'tan', latex_name=r"\tan",
+ conversions=dict(maxima='tan', mathematica='Tan',
+ giac='tan', fricas='tan', sympy='tan'))
tan = Function_tan()
@@ -349,7 +351,9 @@ def __init__(self):
sage: cot(1.+I) # needs sage.symbolic
0.217621561854403 - 0.868014142895925*I
"""
- GinacFunction.__init__(self, 'cot', latex_name=r"\cot")
+ GinacFunction.__init__(self, 'cot', latex_name=r"\cot",
+ conversions=dict(maxima='cot', mathematica='Cot',
+ giac='cot', fricas='cot', sympy='cot'))
def _eval_numpy_(self, x):
"""
@@ -421,7 +425,9 @@ def __init__(self):
sage: sec(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
(0.49833703055518686+0.5910838417210451j)
"""
- GinacFunction.__init__(self, 'sec', latex_name=r"\sec")
+ GinacFunction.__init__(self, 'sec', latex_name=r"\sec",
+ conversions=dict(maxima='sec', mathematica='Sec',
+ giac='sec', fricas='sec', sympy='sec'))
def _eval_numpy_(self, x):
"""
@@ -493,7 +499,9 @@ def __init__(self):
sage: csc(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
(0.6215180171704284-0.30393100162842646j)
"""
- GinacFunction.__init__(self, 'csc', latex_name=r"\csc")
+ GinacFunction.__init__(self, 'csc', latex_name=r"\csc",
+ conversions=dict(maxima='csc', mathematica='Csc',
+ giac='csc', fricas='csc', sympy='csc'))
def _eval_numpy_(self, x):
"""
diff --git a/src/sage/games/quantumino.py b/src/sage/games/quantumino.py
index e40dc47f407..555f6901f4a 100644
--- a/src/sage/games/quantumino.py
+++ b/src/sage/games/quantumino.py
@@ -205,7 +205,7 @@
pentaminos.append(Polyomino([(0,0,0), (0,1,0), (1,1,0), (1,2,0), (1,2,1)], color='purple'))
pentaminos.append(Polyomino([(0,1,0), (1,0,0), (1,1,0), (1,1,1), (1,2,0)], color='gray'))
-def show_pentaminos(box=(5,8,2)):
+def show_pentaminos(box=(5, 8, 2)):
r"""
Show the 17 3-D pentaminos included in the game and the `5 \times 8
\times 2` box where 16 of them must fit.
@@ -278,7 +278,7 @@ class QuantuminoState(SageObject):
Quantumino state where the following pentamino is put aside :
Polyomino: [(0, 0, 0), (0, 1, 0), (0, 2, 0), (1, 0, 0), (1, 0, 1)], Color: green
"""
- def __init__(self, pentos, aside, box=(5,8,2)):
+ def __init__(self, pentos, aside, box=(5, 8, 2)):
r"""
EXAMPLES::
diff --git a/src/sage/geometry/cone.py b/src/sage/geometry/cone.py
index c4b308adbfa..edb5aa3a3af 100644
--- a/src/sage/geometry/cone.py
+++ b/src/sage/geometry/cone.py
@@ -6796,7 +6796,7 @@ def random_cone(lattice=None, min_ambient_dim=0, max_ambient_dim=None,
# Same thing, except when we're given a lattice.
max_rays = 2*(lattice.dimension() - 1)
- def random_min_max(l,u):
+ def random_min_max(l, u):
r"""
We need to handle two cases for the upper bounds, and we need
to do the same thing for max_ambient_dim/max_rays. So we consolidate
diff --git a/src/sage/geometry/cone_catalog.py b/src/sage/geometry/cone_catalog.py
index d58302d5915..27a308193cf 100644
--- a/src/sage/geometry/cone_catalog.py
+++ b/src/sage/geometry/cone_catalog.py
@@ -530,7 +530,7 @@ def rearrangement(p, ambient_dim=None, lattice=None):
cone should sum to a nonnegative number. In other words, the
generators really are what we think they are::
- sage: def _has_rearrangement_property(v,p):
+ sage: def _has_rearrangement_property(v, p):
....: return sum( sorted(v)[0:p] ) >= 0
sage: all(
....: _has_rearrangement_property(
@@ -713,7 +713,7 @@ def schur(ambient_dim=None, lattice=None):
sage: ambient_dim = ZZ.random_element(10)
sage: V = VectorSpace(QQ, ambient_dim)
sage: rearrange = lambda z: V(sorted(z.list(),reverse=True))
- sage: def majorized_by(x,y):
+ sage: def majorized_by(x, y):
....: x = rearrange(x)
....: y = rearrange(y)
....: return (all(sum(x[0:i]) <= sum(y[0:i])
@@ -755,7 +755,7 @@ def schur(ambient_dim=None, lattice=None):
ambient_dim, lattice = _preprocess_args(ambient_dim, lattice)
- def _f(i,j):
+ def _f(i, j):
if i == j:
return 1
elif j - i == 1:
diff --git a/src/sage/geometry/cone_critical_angles.py b/src/sage/geometry/cone_critical_angles.py
index 9e5252a4bf9..964280e6205 100644
--- a/src/sage/geometry/cone_critical_angles.py
+++ b/src/sage/geometry/cone_critical_angles.py
@@ -676,7 +676,7 @@ def compute_gevp_M(gs, hs):
True
sage: G = matrix.column(gs)
sage: H = matrix.column(hs)
- sage: def _test_indexing(I,J):
+ sage: def _test_indexing(I, J):
....: G_I = G.matrix_from_columns(I)
....: H_J = H.matrix_from_columns(J)
....: return (G_I.transpose()*H_J == M[I,J]
diff --git a/src/sage/geometry/lattice_polytope.py b/src/sage/geometry/lattice_polytope.py
index 857eadba882..2869dcc7442 100644
--- a/src/sage/geometry/lattice_polytope.py
+++ b/src/sage/geometry/lattice_polytope.py
@@ -591,7 +591,6 @@ def _sage_input_(self, sib, coerced):
"""
if self._ambient is not self:
raise NotImplementedError
- data = self._vertices
return sib.name('LatticePolytope')(sib(self._vertices), compute_vertices=False)
def __contains__(self, point):
diff --git a/src/sage/geometry/meson.build b/src/sage/geometry/meson.build
index 826ca9ef1db..8906b859dde 100644
--- a/src/sage/geometry/meson.build
+++ b/src/sage/geometry/meson.build
@@ -32,13 +32,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, flint, gmp]
+ if name == 'palp_normal_form'
+ deps += [gap]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/geometry',
install: true,
include_directories: [inc_cpython, inc_ext, inc_flint, inc_rings],
- dependencies: [py_dep, cysignals, flint, gmp],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/geometry/polyhedron/double_description_inhomogeneous.py b/src/sage/geometry/polyhedron/double_description_inhomogeneous.py
index 873b3b431ea..bc7d3b76539 100644
--- a/src/sage/geometry/polyhedron/double_description_inhomogeneous.py
+++ b/src/sage/geometry/polyhedron/double_description_inhomogeneous.py
@@ -7,7 +7,7 @@
H/V-representations of polyhedra. The latter works with cones
only. This is sufficient to treat general polyhedra by the following
construction: Any polyhedron can be embedded in one dimension higher
-in the hyperplane `(1,*,\dots,*)`. The cone over the embedded
+in the hyperplane `(1, *, \dots, *)`. The cone over the embedded
polyhedron will be called the *homogenized cone* in the
following. Conversely, intersecting the homogenized cone with the
hyperplane `x_0=1` gives you back the original polyhedron.
@@ -268,13 +268,13 @@ def _split_linear_subspace(self):
return l1, L0 + [l - l[0] * l1 for l in L1]
def _extract_Vrep(self, DD):
- """
+ r"""
Extract the V-representation from the extremal rays
of the homogeneous cone.
The V-representation is the intersection of the cone generated
by the rays `R` and ``self._linear_subspace`` with the
- hyperplane `(1,*,*,...,*)`.
+ hyperplane `(1, *, *, \ldots, *)`.
INPUT:
diff --git a/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py b/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py
index b17c2a1ce71..d7ef932a4cf 100644
--- a/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py
+++ b/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py
@@ -26,7 +26,7 @@ class FormalPolyhedraModule(CombinatorialFreeModule):
EXAMPLES::
sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
- sage: def closed_interval(a,b): return Polyhedron(vertices=[[a], [b]])
+ sage: def closed_interval(a, b): return Polyhedron(vertices=[[a], [b]])
A three-dimensional vector space of polyhedra::
@@ -104,7 +104,7 @@ def __init__(self, base_ring, dimension, basis, category):
TESTS::
sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
- sage: def closed_interval(a,b): return Polyhedron(vertices=[[a], [b]])
+ sage: def closed_interval(a, b): return Polyhedron(vertices=[[a], [b]])
sage: I01 = closed_interval(0, 1); I01.rename('conv([0], [1])')
sage: I11 = closed_interval(1, 1); I11.rename('{[1]}')
sage: I12 = closed_interval(1, 2); I12.rename('conv([1], [2])')
@@ -125,7 +125,7 @@ def degree_on_basis(self, m):
EXAMPLES::
sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
- sage: def closed_interval(a,b): return Polyhedron(vertices=[[a], [b]])
+ sage: def closed_interval(a, b): return Polyhedron(vertices=[[a], [b]])
sage: I01 = closed_interval(0, 1); I01.rename('conv([0], [1])')
sage: I11 = closed_interval(1, 1); I11.rename('{[1]}')
sage: I12 = closed_interval(1, 2); I12.rename('conv([1], [2])')
diff --git a/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py b/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py
index 27940e9a723..17fb5028df1 100644
--- a/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py
+++ b/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py
@@ -789,7 +789,7 @@ def first_fundamental_form_inverse_coefficient(self, index):
raise ValueError("Index %s out of bounds." % str(index))
@cached_method
- def rotation(self,theta):
+ def rotation(self, theta):
r"""
Give the matrix of the rotation operator over a given angle `\theta`
with respect to the natural frame.
@@ -1185,7 +1185,7 @@ def second_fundamental_form_coefficients(self):
self._compute_second_fundamental_form_coefficient(index)
return coefficients
- def second_fundamental_form(self,vector1,vector2):
+ def second_fundamental_form(self, vector1, vector2):
r"""
Evaluates the second fundamental form on two vectors on the surface.
If the vectors are given by `v=(v^1,v^2)` and `w=(w^1,w^2)`, the
@@ -1569,7 +1569,7 @@ def _create_pt_ode_system(self, curve, t):
pt_ode.function = lambda t, v1_v2: [fun1(t, v1_v2[0], v1_v2[1]), fun2(t, v1_v2[0], v1_v2[1])]
return pt_ode
- def parallel_translation_numerical(self,curve,t,v0,tinterval):
+ def parallel_translation_numerical(self, curve, t, v0, tinterval):
r"""
Numerically solve the equations for parallel translation of a vector
along a curve on the surface. Explicitly, the equations for parallel
diff --git a/src/sage/geometry/triangulation/triangulations.cc b/src/sage/geometry/triangulation/triangulations.cc
index 8ea306d8f7c..fa8805c9e9d 100644
--- a/src/sage/geometry/triangulation/triangulations.cc
+++ b/src/sage/geometry/triangulation/triangulations.cc
@@ -68,9 +68,9 @@ void triangulations::add_neighbours(const simplices & s)
{
for (flips::const_iterator
f=bistellar_flips.begin(); f!=bistellar_flips.end(); ++f) {
- goodcircuit goody(s,*f);
+ goodcircuit goody(s, *f);
if (goody.is_good()) {
- goody.do_flip(s,*f);
+ goody.do_flip(s, *f);
compact_simplices new_triang=goody.get_neighbor();
add_triang_if_new(new_triang);
}
diff --git a/src/sage/graphs/all.py b/src/sage/graphs/all.py
index 14f4eb9204b..a42a1d7210f 100644
--- a/src/sage/graphs/all.py
+++ b/src/sage/graphs/all.py
@@ -9,6 +9,7 @@
from sage.graphs.graph import Graph
from sage.graphs.digraph import DiGraph
from sage.graphs.bipartite_graph import BipartiteGraph
+from sage.graphs.matching_covered_graph import MatchingCoveredGraph
import sage.graphs.weakly_chordal
import sage.graphs.lovasz_theta
import sage.graphs.partial_cube
diff --git a/src/sage/graphs/base/graph_backends.pyx b/src/sage/graphs/base/graph_backends.pyx
index 4363a812995..518fe1b6700 100644
--- a/src/sage/graphs/base/graph_backends.pyx
+++ b/src/sage/graphs/base/graph_backends.pyx
@@ -668,6 +668,8 @@ cdef class GenericGraphBackend(SageObject):
produces a copy of ``self``. The function returned is always
:func:`unpickle_graph_backend`.
+ EXAMPLES:
+
Pickling of the static graph backend makes pickling of immutable
graphs and digraphs work::
@@ -703,20 +705,30 @@ cdef class GenericGraphBackend(SageObject):
sage: gi = g.copy(immutable=True)
sage: loads(dumps(gi)) == gi
True
+
+ TESTS:
+
+ Check that :issue:`38900` is fixed::
+
+ sage: from itertools import product
+ sage: for sparse, immutable in product([True, False], [True, False]):
+ ....: G = Graph([[0, 1, 2], [(0, 1)]], sparse=sparse, immutable=immutable)
+ ....: H = loads(dumps(G))
+ ....: if type(G._backend) != type(H._backend):
+ ....: print(sparse, immutable, type(G._backend), type(H._backend))
"""
from sage.graphs.base.static_sparse_backend import StaticSparseBackend
from sage.graphs.base.sparse_graph import SparseGraphBackend
from sage.graphs.base.dense_graph import DenseGraphBackend
- # implementation, data_structure, multiedges, directed, loops
+ # data_structure, multiedges, directed, loops
if isinstance(self, CGraphBackend):
- implementation = "c_graph"
if isinstance(self, SparseGraphBackend):
data_structure = "sparse"
elif isinstance(self, DenseGraphBackend):
data_structure = "dense"
elif isinstance(self, StaticSparseBackend):
- implementation = "static_sparse"
+ data_structure = "static_sparse"
else:
raise Exception
multiedges = ( self)._multiple_edges
@@ -735,7 +747,8 @@ cdef class GenericGraphBackend(SageObject):
return (unpickle_graph_backend,
(directed, vertices, edges,
{'loops': loops,
- 'multiedges': multiedges}))
+ 'multiedges': multiedges,
+ 'data_structure': data_structure}))
def unpickle_graph_backend(directed, vertices, edges, kwds):
@@ -779,6 +792,5 @@ def unpickle_graph_backend(directed, vertices, edges, kwds):
else:
from sage.graphs.graph import Graph as constructor
- G = constructor(data=edges, **kwds)
- G.add_vertices(vertices)
+ G = constructor(data=[vertices, edges], format='vertices_and_edges', **kwds)
return G._backend
diff --git a/src/sage/graphs/base/static_dense_graph.pxd b/src/sage/graphs/base/static_dense_graph.pxd
index 0e580a02b57..af3c4db74eb 100644
--- a/src/sage/graphs/base/static_dense_graph.pxd
+++ b/src/sage/graphs/base/static_dense_graph.pxd
@@ -1,4 +1,4 @@
from sage.data_structures.binary_matrix cimport binary_matrix_t
from libc.stdint cimport uint32_t, uint64_t
-cdef dict dense_graph_init(binary_matrix_t m, g, translation = ?, force_undirected = ?)
+cdef dict dense_graph_init(binary_matrix_t m, g, translation=?, force_undirected=?)
diff --git a/src/sage/graphs/bipartite_graph.py b/src/sage/graphs/bipartite_graph.py
index 45e4c67747d..e21ec47e9cf 100644
--- a/src/sage/graphs/bipartite_graph.py
+++ b/src/sage/graphs/bipartite_graph.py
@@ -2633,11 +2633,26 @@ class by some canonization function `c`. If `G` and `H` are graphs,
sage: C.right
{4, 5, 6}
+ TESTS:
+
+ Check that :issue:`38832` is fixed::
+
+ sage: B = BipartiteGraph(matrix([[1, 1], [1, 1]]))
+ sage: B.canonical_label()
+ Bipartite graph on 4 vertices
+ sage: B.canonical_label(certificate=True)[0]
+ Bipartite graph on 4 vertices
+ sage: B.canonical_label(edge_labels=True)
+ Bipartite graph on 4 vertices
+ sage: B.allow_multiple_edges(True)
+ sage: B.add_edges(B.edges())
+ sage: B.canonical_label()
+ Bipartite multi-graph on 4 vertices
+
.. SEEALSO::
:meth:`~sage.graphs.generic_graph.GenericGraph.canonical_label()`
"""
-
if certificate:
C, cert = GenericGraph.canonical_label(self, partition=partition,
certificate=certificate,
@@ -2669,6 +2684,8 @@ class by some canonization function `c`. If `G` and `H` are graphs,
cert = {v: c[G_to[relabeling[v]]] for v in self}
else:
+ if partition is None:
+ partition = self.bipartition()
G_vertices = list(chain(*partition))
G_to = {u: i for i, u in enumerate(G_vertices)}
H = Graph(len(G_vertices))
diff --git a/src/sage/graphs/convexity_properties.pxd b/src/sage/graphs/convexity_properties.pxd
index f6c1b68b6b8..f435ae0aba0 100644
--- a/src/sage/graphs/convexity_properties.pxd
+++ b/src/sage/graphs/convexity_properties.pxd
@@ -12,4 +12,4 @@ cdef class ConvexityProperties:
cdef _bitset_convex_hull(self, bitset_t hull)
cpdef hull(self, list vertices)
cdef _greedy_increase(self, bitset_t bs)
- cpdef hull_number(self, value_only = *, verbose = *)
+ cpdef hull_number(self, value_only=*, verbose=*)
diff --git a/src/sage/graphs/generic_graph.py b/src/sage/graphs/generic_graph.py
index 9786af20367..101952109c3 100644
--- a/src/sage/graphs/generic_graph.py
+++ b/src/sage/graphs/generic_graph.py
@@ -117,7 +117,6 @@
:widths: 30, 70
:delim: |
- :meth:`~GenericGraph.eulerian_orientation` | Return a DiGraph which is an Eulerian orientation of the current graph.
:meth:`~GenericGraph.eulerian_circuit` | Return a list of edges forming an Eulerian circuit if one exists.
:meth:`~GenericGraph.minimum_cycle_basis` | Return a minimum weight cycle basis of the graph.
:meth:`~GenericGraph.cycle_basis` | Return a list of cycles which form a basis of the cycle space of ``self``.
@@ -940,7 +939,7 @@ def _latex_(self):
return self.latex_options().latex()
- def tikz(self, format='dot2tex', edge_labels=None,
+ def tikz(self, format=None, edge_labels=None,
color_by_label=False, prog='dot', rankdir='down',
standalone_config=None, usepackage=None,
usetikzlibrary=None, macros=None,
@@ -4732,110 +4731,6 @@ def size(self):
num_edges = size
- # Orientations
-
- def eulerian_orientation(self):
- r"""
- Return a DiGraph which is an Eulerian orientation of the current graph.
-
- An Eulerian graph being a graph such that any vertex has an even degree,
- an Eulerian orientation of a graph is an orientation of its edges such
- that each vertex `v` verifies `d^+(v)=d^-(v)=d(v)/2`, where `d^+` and
- `d^-` respectively represent the out-degree and the in-degree of a
- vertex.
-
- If the graph is not Eulerian, the orientation verifies for any vertex
- `v` that `| d^+(v)-d^-(v) | \leq 1`.
-
- ALGORITHM:
-
- This algorithm is a random walk through the edges of the graph, which
- orients the edges according to the walk. When a vertex is reached which
- has no non-oriented edge (this vertex must have odd degree), the walk
- resumes at another vertex of odd degree, if any.
-
- This algorithm has complexity `O(n+m)` for ``SparseGraph`` and `O(n^2)`
- for ``DenseGraph``, where `m` is the number of edges in the graph and
- `n` is the number of vertices in the graph.
-
- EXAMPLES:
-
- The CubeGraph with parameter 4, which is regular of even degree, has an
- Eulerian orientation such that `d^+ = d^-`::
-
- sage: g = graphs.CubeGraph(4)
- sage: g.degree()
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
- sage: o = g.eulerian_orientation()
- sage: o.in_degree()
- [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
- sage: o.out_degree()
- [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
-
- Secondly, the Petersen Graph, which is 3 regular has an orientation such
- that the difference between `d^+` and `d^-` is at most 1::
-
- sage: g = graphs.PetersenGraph()
- sage: o = g.eulerian_orientation()
- sage: o.in_degree()
- [2, 2, 2, 2, 2, 1, 1, 1, 1, 1]
- sage: o.out_degree()
- [1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
-
- TESTS::
-
- sage: E0 = Graph(); E4 = Graph(4) # See trac #21741
- sage: E0.eulerian_orientation()
- Digraph on 0 vertices
- sage: E4.eulerian_orientation()
- Digraph on 4 vertices
- """
- from sage.graphs.digraph import DiGraph
-
- d = DiGraph()
- d.add_vertices(self.vertex_iterator())
-
- if not self.size():
- return d
-
- g = copy(self)
-
- # list of vertices of odd degree
- odd = [x for x in g.vertex_iterator() if g.degree(x) % 2]
-
- # Picks the first vertex, which is preferably an odd one
- if odd:
- v = odd.pop()
- else:
- v = next(g.edge_iterator(labels=None))[0]
- odd.append(v)
- # Stops when there is no edge left
- while True:
-
- # If there is an edge adjacent to the current one
- if g.degree(v):
- e = next(g.edge_iterator(v))
- g.delete_edge(e)
- if e[0] != v:
- e = (e[1], e[0], e[2])
- d.add_edge(e)
- v = e[1]
-
- # The current vertex is isolated
- else:
- odd.remove(v)
-
- # jumps to another odd vertex if possible
- if odd:
- v = odd.pop()
- # Else jumps to an even vertex which is not isolated
- elif g.size():
- v = next(g.edge_iterator())[0]
- odd.append(v)
- # If there is none, we are done !
- else:
- return d
-
def eulerian_circuit(self, return_vertices=False, labels=True, path=False):
r"""
Return a list of edges forming an Eulerian circuit if one exists.
@@ -14390,7 +14285,7 @@ def _subgraph_by_adding(self, vertices=None, edges=None, edge_property=None, imm
or (v, u) in edges_to_keep_unlabeled)):
edges_to_keep.append((u, v, l))
else:
- s_vertices = set(vertices)
+ s_vertices = set(G.vertices()) if vertices is None else set(vertices)
edges_to_keep = [e for e in self.edges(vertices=vertices, sort=False, sort_vertices=False)
if e[0] in s_vertices and e[1] in s_vertices]
diff --git a/src/sage/graphs/generic_graph_pyx.pyx b/src/sage/graphs/generic_graph_pyx.pyx
index a350ceeba86..9f8b90d79ab 100644
--- a/src/sage/graphs/generic_graph_pyx.pyx
+++ b/src/sage/graphs/generic_graph_pyx.pyx
@@ -390,7 +390,7 @@ cdef inline double sqrt_approx(double x, double y, double xx, double yy) noexcep
Assuming that `x > y > 0`, it is a taylor expansion at `x^2`. To see how
'bad' the approximation is::
- sage: def dist(x,y):
+ sage: def dist(x, y):
....: x = abs(x)
....: y = abs(y)
....: return max(x,y) + min(x,y)**2/(2*max(x,y))
diff --git a/src/sage/graphs/graph.py b/src/sage/graphs/graph.py
index 33029f74c5c..38714a483fe 100644
--- a/src/sage/graphs/graph.py
+++ b/src/sage/graphs/graph.py
@@ -2695,7 +2695,7 @@ def is_perfect(self, certificate=False):
return True if not certificate else None
answer = self.is_odd_hole_free(certificate=certificate)
- if not (answer is True):
+ if answer is not True:
return answer
return self_complement.is_odd_hole_free(certificate=certificate)
@@ -3020,527 +3020,6 @@ def weight(x):
g.delete_edges(e for e in g.edge_iterator(labels=False) if not b[frozenset(e)])
return g
- # Orientations
-
- @doc_index("Connectivity, orientations, trees")
- def strong_orientation(self):
- r"""
- Return a strongly connected orientation of the current graph.
-
- An orientation of an undirected graph is a digraph obtained by giving an
- unique direction to each of its edges. An orientation is said to be
- strong if there is a directed path between each pair of vertices. See
- also the :wikipedia:`Strongly_connected_component`.
-
- If the graph is 2-edge-connected, a strongly connected orientation
- can be found in linear time. If the given graph is not 2-connected,
- the orientation returned will ensure that each 2-connected component
- has a strongly connected orientation.
-
- OUTPUT: a digraph representing an orientation of the current graph
-
- .. NOTE::
-
- - This method assumes the graph is connected.
- - This time complexity is `O(n+m)` for ``SparseGraph`` and `O(n^2)`
- for ``DenseGraph`` .
-
- .. SEEALSO::
-
- - :meth:`~sage.graphs.graph.Graph.orientations`
- - :meth:`~sage.graphs.orientations.strong_orientations_iterator`
- - :meth:`~sage.graphs.digraph_generators.DiGraphGenerators.nauty_directg`
- - :meth:`~sage.graphs.orientations.random_orientation`
-
- EXAMPLES:
-
- For a 2-regular graph, a strong orientation gives to each vertex an
- out-degree equal to 1::
-
- sage: g = graphs.CycleGraph(5)
- sage: g.strong_orientation().out_degree()
- [1, 1, 1, 1, 1]
-
- The Petersen Graph is 2-edge connected. It then has a strongly connected
- orientation::
-
- sage: g = graphs.PetersenGraph()
- sage: o = g.strong_orientation()
- sage: len(o.strongly_connected_components())
- 1
-
- The same goes for the CubeGraph in any dimension ::
-
- sage: all(len(graphs.CubeGraph(i).strong_orientation().strongly_connected_components()) == 1 for i in range(2,6))
- True
-
- A multigraph also has a strong orientation ::
-
- sage: g = Graph([(1,2),(1,2)], multiedges=True)
- sage: g.strong_orientation()
- Multi-digraph on 2 vertices
- """
- from sage.graphs.digraph import DiGraph
- d = DiGraph(multiedges=self.allows_multiple_edges())
- i = 0
-
- # The algorithm works through a depth-first search. Any edge
- # used in the depth-first search is oriented in the direction
- # in which it has been used. All the other edges are oriented
- # backward
-
- v = next(self.vertex_iterator())
- seen = {}
- i = 1
-
- # Time at which the vertices have been discovered
- seen[v] = i
-
- # indicates the stack of edges to explore
- next_ = self.edges_incident(v)
-
- while next_:
- e = next_.pop()
-
- # Ignore loops
- if e[0] == e[1]:
- continue
-
- # We assume e[0] to be a `seen` vertex
- e = e if seen.get(e[0], False) is not False else (e[1], e[0], e[2])
-
- # If we discovered a new vertex
- if seen.get(e[1], False) is False:
- d.add_edge(e)
- next_.extend(ee for ee in self.edges_incident(e[1])
- if ((e[0], e[1]) != (ee[0], ee[1])) and ((e[0], e[1]) != (ee[1], ee[0])))
- i += 1
- seen[e[1]] = i
-
- # Else, we orient the edges backward
- else:
- if seen[e[0]] < seen[e[1]]:
- d.add_edge(e[1], e[0], e[2])
- else:
- d.add_edge(e)
-
- # Case of multiple edges. If another edge has already been inserted, we
- # add the new one in the opposite direction.
- tmp = None
- for e in self.multiple_edges():
- if tmp == (e[0], e[1]):
- if d.has_edge(e[0], e[1]):
- d.add_edge(e[1], e[0], e[2])
- else:
- d.add_edge(e)
- tmp = (e[0], e[1])
-
- return d
-
- @doc_index("Connectivity, orientations, trees")
- def minimum_outdegree_orientation(self, use_edge_labels=False, solver=None, verbose=0,
- *, integrality_tolerance=1e-3):
- r"""
- Return an orientation of ``self`` with the smallest possible maximum
- outdegree.
-
- Given a Graph `G`, it is polynomial to compute an orientation `D` of the
- edges of `G` such that the maximum out-degree in `D` is minimized. This
- problem, though, is NP-complete in the weighted case [AMOZ2006]_.
-
- INPUT:
-
- - ``use_edge_labels`` -- boolean (default: ``False``)
-
- - When set to ``True``, uses edge labels as weights to compute the
- orientation and assumes a weight of `1` when there is no value
- available for a given edge.
-
- - When set to ``False`` (default), gives a weight of 1 to all the
- edges.
-
- - ``solver`` -- string (default: ``None``); specifies a Mixed Integer
- Linear Programming (MILP) solver to be used. If set to ``None``, the
- default one is used. For more information on MILP solvers and which
- default solver is used, see the method :meth:`solve
- ` of the class
- :class:`MixedIntegerLinearProgram
- `.
-
- - ``verbose`` -- integer (default: 0); sets the level of
- verbosity. Set to 0 by default, which means quiet.
-
- - ``integrality_tolerance`` -- float; parameter for use with MILP
- solvers over an inexact base ring; see
- :meth:`MixedIntegerLinearProgram.get_values`.
-
- EXAMPLES:
-
- Given a complete bipartite graph `K_{n,m}`, the maximum out-degree of an
- optimal orientation is `\left\lceil \frac {nm} {n+m}\right\rceil`::
-
- sage: g = graphs.CompleteBipartiteGraph(3,4)
- sage: o = g.minimum_outdegree_orientation() # needs sage.numerical.mip
- sage: max(o.out_degree()) == integer_ceil((4*3)/(3+4)) # needs sage.numerical.mip
- True
- """
- self._scream_if_not_simple()
- if self.is_directed():
- raise ValueError("Cannot compute an orientation of a DiGraph. "
- "Please convert it to a Graph if you really mean it.")
-
- if use_edge_labels:
- from sage.rings.real_mpfr import RR
-
- def weight(e):
- l = self.edge_label(e)
- return l if l in RR else 1
- else:
- def weight(e):
- return 1
-
- from sage.numerical.mip import MixedIntegerLinearProgram
-
- p = MixedIntegerLinearProgram(maximization=False, solver=solver)
- degree = p.new_variable(nonnegative=True)
-
- # The orientation of an edge is boolean and indicates whether the edge
- # uv goes from u to v ( equal to 0 ) or from v to u ( equal to 1)
- orientation = p.new_variable(binary=True)
-
- # Whether an edge adjacent to a vertex u counts positively or
- # negatively. To do so, we first fix an arbitrary extremity per edge uv.
- ext = {frozenset(e): e[0] for e in self.edge_iterator(labels=False)}
-
- def outgoing(u, e, variable):
- if u == ext[frozenset(e)]:
- return variable
- else:
- return 1 - variable
-
- for u in self:
- p.add_constraint(p.sum(weight(e) * outgoing(u, e, orientation[frozenset(e)])
- for e in self.edge_iterator(vertices=[u], labels=False))
- - degree['max'], max=0)
-
- p.set_objective(degree['max'])
-
- p.solve(log=verbose)
-
- orientation = p.get_values(orientation, convert=bool, tolerance=integrality_tolerance)
-
- # All the edges from self are doubled in O
- # ( one in each direction )
- from sage.graphs.digraph import DiGraph
- O = DiGraph(self)
-
- # Builds the list of edges that should be removed
- edges = []
-
- for e in self.edge_iterator(labels=None):
- if orientation[frozenset(e)]:
- edges.append(e[::-1])
- else:
- edges.append(e)
-
- O.delete_edges(edges)
-
- return O
-
- @doc_index("Connectivity, orientations, trees")
- def bounded_outdegree_orientation(self, bound, solver=None, verbose=False,
- *, integrality_tolerance=1e-3):
- r"""
- Compute an orientation of ``self`` such that every vertex `v` has
- out-degree less than `b(v)`
-
- INPUT:
-
- - ``bound`` -- maximum bound on the out-degree. Can be of three
- different types :
-
- * An integer `k`. In this case, computes an orientation whose maximum
- out-degree is less than `k`.
-
- * A dictionary associating to each vertex its associated maximum
- out-degree.
-
- * A function associating to each vertex its associated maximum
- out-degree.
-
- - ``solver`` -- string (default: ``None``); specifies a Mixed Integer
- Linear Programming (MILP) solver to be used. If set to ``None``, the
- default one is used. For more information on MILP solvers and which
- default solver is used, see the method :meth:`solve
- ` of the class
- :class:`MixedIntegerLinearProgram
- `.
-
- - ``verbose`` -- integer (default: 0); sets the level of
- verbosity. Set to 0 by default, which means quiet.
-
- - ``integrality_tolerance`` -- float; parameter for use with MILP
- solvers over an inexact base ring; see
- :meth:`MixedIntegerLinearProgram.get_values`.
-
- OUTPUT:
-
- A DiGraph representing the orientation if it exists.
- A :exc:`ValueError` exception is raised otherwise.
-
- ALGORITHM:
-
- The problem is solved through a maximum flow :
-
- Given a graph `G`, we create a ``DiGraph`` `D` defined on `E(G)\cup
- V(G)\cup \{s,t\}`. We then link `s` to all of `V(G)` (these edges having
- a capacity equal to the bound associated to each element of `V(G)`), and
- all the elements of `E(G)` to `t` . We then link each `v \in V(G)` to
- each of its incident edges in `G`. A maximum integer flow of value
- `|E(G)|` corresponds to an admissible orientation of `G`. Otherwise,
- none exists.
-
- EXAMPLES:
-
- There is always an orientation of a graph `G` such that a vertex `v` has
- out-degree at most `\lceil \frac {d(v)} 2 \rceil`::
-
- sage: g = graphs.RandomGNP(40, .4)
- sage: b = lambda v: integer_ceil(g.degree(v)/2)
- sage: D = g.bounded_outdegree_orientation(b)
- sage: all( D.out_degree(v) <= b(v) for v in g )
- True
-
-
- Chvatal's graph, being 4-regular, can be oriented in such a way that its
- maximum out-degree is 2::
-
- sage: g = graphs.ChvatalGraph()
- sage: D = g.bounded_outdegree_orientation(2)
- sage: max(D.out_degree())
- 2
-
- For any graph `G`, it is possible to compute an orientation such that
- the maximum out-degree is at most the maximum average degree of `G`
- divided by 2. Anything less, though, is impossible.
-
- sage: g = graphs.RandomGNP(40, .4)
- sage: mad = g.maximum_average_degree() # needs sage.numerical.mip
-
- Hence this is possible ::
-
- sage: d = g.bounded_outdegree_orientation(integer_ceil(mad/2)) # needs sage.numerical.mip
-
- While this is not::
-
- sage: try: # needs sage.numerical.mip
- ....: g.bounded_outdegree_orientation(integer_ceil(mad/2-1))
- ....: print("Error")
- ....: except ValueError:
- ....: pass
-
- TESTS:
-
- As previously for random graphs, but more intensively::
-
- sage: for i in range(30): # long time (up to 6s on sage.math, 2012)
- ....: g = graphs.RandomGNP(40, .4)
- ....: b = lambda v: integer_ceil(g.degree(v)/2)
- ....: D = g.bounded_outdegree_orientation(b)
- ....: if not (
- ....: all( D.out_degree(v) <= b(v) for v in g ) or
- ....: D.size() != g.size()):
- ....: print("Something wrong happened")
- """
- self._scream_if_not_simple()
- from sage.graphs.digraph import DiGraph
- n = self.order()
-
- if not n:
- return DiGraph()
-
- vertices = list(self)
- vertices_id = {y: x for x, y in enumerate(vertices)}
-
- b = {}
-
- # Checking the input type. We make a dictionary out of it
- if isinstance(bound, dict):
- b = bound
- else:
- try:
- b = dict(zip(vertices, map(bound, vertices)))
-
- except TypeError:
- b = dict(zip(vertices, [bound]*n))
-
- d = DiGraph()
-
- # Adding the edges (s,v) and ((u,v),t)
- d.add_edges(('s', vertices_id[v], b[v]) for v in vertices)
-
- d.add_edges(((vertices_id[u], vertices_id[v]), 't', 1)
- for u, v in self.edges(sort=False, labels=None))
-
- # each v is linked to its incident edges
-
- for u, v in self.edge_iterator(labels=None):
- u, v = vertices_id[u], vertices_id[v]
- d.add_edge(u, (u, v), 1)
- d.add_edge(v, (u, v), 1)
-
- # Solving the maximum flow
- value, flow = d.flow('s', 't', value_only=False, integer=True,
- use_edge_labels=True, solver=solver, verbose=verbose,
- integrality_tolerance=integrality_tolerance)
-
- if value != self.size():
- raise ValueError("No orientation exists for the given bound")
-
- D = DiGraph()
- D.add_vertices(vertices)
-
- # The flow graph may not contain all the vertices, if they are
- # not part of the flow...
-
- for u in [x for x in range(n) if x in flow]:
-
- for uu, vv in flow.neighbors_out(u):
- v = vv if vv != u else uu
- D.add_edge(vertices[u], vertices[v])
-
- # I do not like when a method destroys the embedding ;-)
- D.set_pos(self.get_pos())
-
- return D
-
- @doc_index("Connectivity, orientations, trees")
- def orientations(self, data_structure=None, sparse=None):
- r"""
- Return an iterator over orientations of ``self``.
-
- An *orientation* of an undirected graph is a directed graph such that
- every edge is assigned a direction. Hence there are `2^s` oriented
- digraphs for a simple graph with `s` edges.
-
- INPUT:
-
- - ``data_structure`` -- one of ``'sparse'``, ``'static_sparse'``, or
- ``'dense'``; see the documentation of :class:`Graph` or
- :class:`DiGraph`; default is the data structure of ``self``
-
- - ``sparse`` -- boolean (default: ``None``); ``sparse=True`` is an alias
- for ``data_structure="sparse"``, and ``sparse=False`` is an alias for
- ``data_structure="dense"``. By default (``None``), guess the most
- suitable data structure.
-
- .. WARNING::
-
- This always considers multiple edges of graphs as distinguishable,
- and hence, may have repeated digraphs.
-
- .. SEEALSO::
-
- - :meth:`~sage.graphs.graph.Graph.strong_orientation`
- - :meth:`~sage.graphs.orientations.strong_orientations_iterator`
- - :meth:`~sage.graphs.digraph_generators.DiGraphGenerators.nauty_directg`
- - :meth:`~sage.graphs.orientations.random_orientation`
-
- EXAMPLES::
-
- sage: G = Graph([[1,2,3], [(1, 2, 'a'), (1, 3, 'b')]], format='vertices_and_edges')
- sage: it = G.orientations()
- sage: D = next(it)
- sage: D.edges(sort=True)
- [(1, 2, 'a'), (1, 3, 'b')]
- sage: D = next(it)
- sage: D.edges(sort=True)
- [(1, 2, 'a'), (3, 1, 'b')]
-
- TESTS::
-
- sage: G = Graph()
- sage: D = [g for g in G.orientations()]
- sage: len(D)
- 1
- sage: D[0]
- Digraph on 0 vertices
-
- sage: G = Graph(5)
- sage: it = G.orientations()
- sage: D = next(it)
- sage: D.size()
- 0
-
- sage: G = Graph([[1,2,'a'], [1,2,'b']], multiedges=True)
- sage: len(list(G.orientations()))
- 4
-
- sage: G = Graph([[1,2], [1,1]], loops=True)
- sage: len(list(G.orientations()))
- 2
-
- sage: G = Graph([[1,2],[2,3]])
- sage: next(G.orientations())
- Digraph on 3 vertices
- sage: G = graphs.PetersenGraph()
- sage: next(G.orientations())
- An orientation of Petersen graph: Digraph on 10 vertices
-
- An orientation must have the same ground set of vertices as the original
- graph (:issue:`24366`)::
-
- sage: G = Graph(1)
- sage: next(G.orientations())
- Digraph on 1 vertex
- """
- if sparse is not None:
- if data_structure is not None:
- raise ValueError("cannot specify both 'sparse' and 'data_structure'")
- data_structure = "sparse" if sparse else "dense"
- if data_structure is None:
- from sage.graphs.base.dense_graph import DenseGraphBackend
- from sage.graphs.base.sparse_graph import SparseGraphBackend
- if isinstance(self._backend, DenseGraphBackend):
- data_structure = "dense"
- elif isinstance(self._backend, SparseGraphBackend):
- data_structure = "sparse"
- else:
- data_structure = "static_sparse"
-
- name = self.name()
- if name:
- name = 'An orientation of ' + name
-
- from sage.graphs.digraph import DiGraph
- if not self.size():
- D = DiGraph(data=[self.vertices(sort=False), []],
- format='vertices_and_edges',
- name=name,
- pos=self._pos,
- multiedges=self.allows_multiple_edges(),
- loops=self.allows_loops(),
- data_structure=data_structure)
- if hasattr(self, '_embedding'):
- D._embedding = copy(self._embedding)
- yield D
- return
-
- E = [[(u, v, label), (v, u, label)] if u != v else [(u, v, label)]
- for u, v, label in self.edge_iterator()]
- verts = self.vertices(sort=False)
- for edges in itertools.product(*E):
- D = DiGraph(data=[verts, edges],
- format='vertices_and_edges',
- name=name,
- pos=self._pos,
- multiedges=self.allows_multiple_edges(),
- loops=self.allows_loops(),
- data_structure=data_structure)
- if hasattr(self, '_embedding'):
- D._embedding = copy(self._embedding)
- yield D
-
# Coloring
@doc_index("Basic methods")
@@ -8194,97 +7673,9 @@ def is_prime(self, algorithm=None):
return D[0] == NodeType.PRIME and len(D[1]) == self.order()
- def _gomory_hu_tree(self, vertices, algorithm=None):
- r"""
- Return a Gomory-Hu tree associated to ``self``.
-
- This function is the private counterpart of ``gomory_hu_tree()``, with
- the difference that it has an optional argument needed for recursive
- computations, which the user is not interested in defining himself.
-
- See the documentation of ``gomory_hu_tree()`` for more information.
-
- INPUT:
-
- - ``vertices`` -- set of "real" vertices, as opposed to the fakes one
- introduced during the computations. This variable is useful for the
- algorithm and for recursion purposes.
-
- - ``algorithm`` -- select the algorithm used by the :meth:`edge_cut`
- method. Refer to its documentation for allowed values and default
- behaviour.
-
- EXAMPLES:
-
- This function is actually tested in ``gomory_hu_tree()``, this example
- is only present to have a doctest coverage of 100%::
-
- sage: g = graphs.PetersenGraph()
- sage: t = g._gomory_hu_tree(frozenset(g.vertices(sort=False)))
- """
- self._scream_if_not_simple()
-
- # Small case, not really a problem ;-)
- if len(vertices) == 1:
- g = Graph()
- g.add_vertices(vertices)
- return g
-
- # Take any two vertices (u,v)
- it = iter(vertices)
- u, v = next(it), next(it)
-
- # Compute a uv min-edge-cut.
- #
- # The graph is split into U,V with u \in U and v\in V.
- flow, edges, [U, V] = self.edge_cut(u, v, use_edge_labels=True,
- vertices=True, algorithm=algorithm)
-
- # One graph for each part of the previous one
- gU, gV = self.subgraph(U, immutable=False), self.subgraph(V, immutable=False)
-
- # A fake vertex fU (resp. fV) to represent U (resp. V)
- fU = frozenset(U)
- fV = frozenset(V)
-
- # Each edge (uu,vv) with uu \in U and vv\in V yields:
- # - an edge (uu,fV) in gU
- # - an edge (vv,fU) in gV
- #
- # If the same edge is added several times their capacities add up.
-
- from sage.rings.real_mpfr import RR
- for uu, vv, capacity in edges:
- capacity = capacity if capacity in RR else 1
-
- # Assume uu is in gU
- if uu in V:
- uu, vv = vv, uu
-
- # Create the new edges if necessary
- if not gU.has_edge(uu, fV):
- gU.add_edge(uu, fV, 0)
- if not gV.has_edge(vv, fU):
- gV.add_edge(vv, fU, 0)
-
- # update the capacities
- gU.set_edge_label(uu, fV, gU.edge_label(uu, fV) + capacity)
- gV.set_edge_label(vv, fU, gV.edge_label(vv, fU) + capacity)
-
- # Recursion on each side
- gU_tree = gU._gomory_hu_tree(vertices & frozenset(gU), algorithm=algorithm)
- gV_tree = gV._gomory_hu_tree(vertices & frozenset(gV), algorithm=algorithm)
-
- # Union of the two partial trees
- g = gU_tree.union(gV_tree)
-
- # An edge to connect them, with the appropriate label
- g.add_edge(u, v, flow)
-
- return g
-
@doc_index("Connectivity, orientations, trees")
- def gomory_hu_tree(self, algorithm=None):
+ def gomory_hu_tree(self, algorithm=None, solver=None, verbose=0,
+ *, integrality_tolerance=1e-3):
r"""
Return a Gomory-Hu tree of ``self``.
@@ -8305,6 +7696,27 @@ def gomory_hu_tree(self, algorithm=None):
method. Refer to its documentation for allowed values and default
behaviour.
+ - ``solver`` -- string (default: ``None``); specifies a Mixed Integer
+ Linear Programming (MILP) solver to be used. If set to ``None``, the
+ default one is used. For more information on MILP solvers and which
+ default solver is used, see the method :meth:`solve
+ ` of the class
+ :class:`MixedIntegerLinearProgram
+ `.
+
+ Only useful when ``algorithm == "LP"``.
+
+ - ``verbose`` -- integer (default: 0); sets the level of
+ verbosity. Set to 0 by default, which means quiet.
+
+ Only useful when ``algorithm == "LP"``.
+
+ - ``integrality_tolerance`` -- float; parameter for use with MILP
+ solvers over an inexact base ring; see
+ :meth:`MixedIntegerLinearProgram.get_values`.
+
+ Only useful when ``algorithm == "LP"``.
+
OUTPUT: a graph with labeled edges
EXAMPLES:
@@ -8363,18 +7775,81 @@ def gomory_hu_tree(self, algorithm=None):
sage: graphs.EmptyGraph().gomory_hu_tree()
Graph on 0 vertices
"""
- if not self.order():
- return Graph()
- if not self.is_connected():
- g = Graph()
- for cc in self.connected_components_subgraphs():
- g = g.union(cc._gomory_hu_tree(frozenset(cc.vertex_iterator()), algorithm=algorithm))
- else:
- g = self._gomory_hu_tree(frozenset(self.vertex_iterator()), algorithm=algorithm)
+ self._scream_if_not_simple()
+ if self.order() <= 1:
+ return Graph([self, []], format='vertices_and_edges')
+
+ from sage.rings.real_mpfr import RR
+
+ # Graph to store the Gomory-Hu tree
+ T = Graph([self, []], format='vertices_and_edges')
if self.get_pos() is not None:
- g.set_pos(dict(self.get_pos()))
- return g
+ T.set_pos(dict(self.get_pos()))
+
+ # We use a stack to avoid recursion. An element of the stack contains
+ # the graph to be processed and the corresponding set of "real" vertices
+ # (as opposed to the fakes one introduced during the computations.
+ if self.is_connected():
+ stack = [(self, frozenset(self))]
+ else:
+ stack = [(cc, frozenset(cc)) for cc in self.connected_components_subgraphs()]
+
+ # We now iteratively decompose the graph to build the tree
+ while stack:
+ G, vertices = stack.pop()
+
+ if len(vertices) == 1:
+ continue
+
+ # Take any two vertices (u,v)
+ it = iter(vertices)
+ u, v = next(it), next(it)
+
+ # Compute a uv min-edge-cut.
+ #
+ # The graph is split into U,V with u \in U and v\in V.
+ flow, edges, [U, V] = G.edge_cut(u, v, use_edge_labels=True,
+ vertices=True, algorithm=algorithm,
+ solver=solver, verbose=verbose,
+ integrality_tolerance=integrality_tolerance)
+
+ # Add edge (u, v, flow) to the Gomory-Hu tree
+ T.add_edge(u, v, flow)
+
+ # Build one graph for each part of the previous graph and store the
+ # instances to process
+ for X, Y in ((U, V), (V, U)):
+ if len(X) == 1 or len(vertices & frozenset(X)) == 1:
+ continue
+
+ # build the graph of part X
+ gX = G.subgraph(X, immutable=False)
+
+ # A fake vertex fY to represent Y
+ fY = frozenset(Y)
+
+ # For each edge (x, y) in G with x \in X and y\in Y, add edge
+ # (x, fY) in gX. If the same edge is added several times their
+ # capacities add up.
+ for xx, yy, capacity in edges:
+ capacity = capacity if capacity in RR else 1
+
+ # Assume xx is in gX
+ if xx in fY:
+ xx, yy = yy, xx
+
+ # Create the new edge or update its capacity
+ if gX.has_edge(xx, fY):
+ gX.set_edge_label(xx, fY, gX.edge_label(xx, fY) + capacity)
+ else:
+ gX.add_edge(xx, fY, capacity)
+
+ # Store instance to process
+ stack.append((gX, vertices & frozenset(gX)))
+
+ # Finally return the Gomory-Hu tree
+ return T
@doc_index("Leftovers")
def two_factor_petersen(self, solver=None, verbose=0, *, integrality_tolerance=1e-3):
@@ -9691,9 +9166,14 @@ def bipartite_double(self, extended=False):
from sage.graphs.lovasz_theta import lovasz_theta
from sage.graphs.partial_cube import is_partial_cube
from sage.graphs.orientations import orient
+ from sage.graphs.orientations import orientations
+ from sage.graphs.orientations import strong_orientation
from sage.graphs.orientations import strong_orientations_iterator
from sage.graphs.orientations import random_orientation
from sage.graphs.orientations import acyclic_orientations
+ from sage.graphs.orientations import minimum_outdegree_orientation
+ from sage.graphs.orientations import bounded_outdegree_orientation
+ from sage.graphs.orientations import eulerian_orientation
from sage.graphs.connectivity import bridges, cleave, spqr_tree
from sage.graphs.connectivity import is_triconnected
from sage.graphs.comparability import is_comparability
@@ -9743,10 +9223,15 @@ def bipartite_double(self, extended=False):
"is_permutation" : "Graph properties",
"tutte_polynomial" : "Algorithmically hard stuff",
"lovasz_theta" : "Leftovers",
- "orient" : "Connectivity, orientations, trees",
+ "orient": "Connectivity, orientations, trees",
+ "orientations": "Connectivity, orientations, trees",
+ "strong_orientation" : "Connectivity, orientations, trees",
"strong_orientations_iterator" : "Connectivity, orientations, trees",
"random_orientation" : "Connectivity, orientations, trees",
"acyclic_orientations" : "Connectivity, orientations, trees",
+ "minimum_outdegree_orientation": "Connectivity, orientations, trees",
+ "bounded_outdegree_orientation": "Connectivity, orientations, trees",
+ "eulerian_orientation": "Connectivity, orientations, trees",
"bridges" : "Connectivity, orientations, trees",
"cleave" : "Connectivity, orientations, trees",
"spqr_tree" : "Connectivity, orientations, trees",
diff --git a/src/sage/graphs/matching.py b/src/sage/graphs/matching.py
index 457ccc16a75..c8eea2bb005 100644
--- a/src/sage/graphs/matching.py
+++ b/src/sage/graphs/matching.py
@@ -55,7 +55,7 @@
def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0,
*, integrality_tolerance=1e-3):
r"""
- Return whether the graph has a perfect matching
+ Return whether the graph has a perfect matching.
INPUT:
@@ -162,7 +162,7 @@ def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0,
def is_bicritical(G, matching=None, algorithm='Edmonds', coNP_certificate=False,
solver=None, verbose=0, *, integrality_tolerance=0.001):
r"""
- Check if the graph is bicritical
+ Check if the graph is bicritical.
A nontrivial graph `G` is *bicritical* if `G - u - v` has a perfect
matching for any two distinct vertices `u` and `v` of `G`. Bicritical
@@ -270,12 +270,9 @@ def is_bicritical(G, matching=None, algorithm='Edmonds', coNP_certificate=False,
A graph (of order more than two) with more that one component is not bicritical::
- sage: cycle1 = graphs.CycleGraph(4)
- sage: cycle2 = graphs.CycleGraph(6)
- sage: cycle2.relabel(lambda v: v + 4)
- sage: G = Graph()
- sage: G.add_edges(cycle1.edges() + cycle2.edges())
- sage: len(G.connected_components(sort=False))
+ sage: G = graphs.CycleGraph(4)
+ sage: G += graphs.CycleGraph(6)
+ sage: G.connected_components_number()
2
sage: G.is_bicritical()
False
@@ -449,27 +446,25 @@ def is_bicritical(G, matching=None, algorithm='Edmonds', coNP_certificate=False,
return (False, set(list(A)[:2]))
return (False, set(list(B)[:2]))
- # A graph (without a self-loop) is bicritical if and only if the underlying
- # simple graph is bicritical
- G_simple = G.to_simple()
-
from sage.graphs.graph import Graph
if matching:
# The input matching must be a valid perfect matching of the graph
M = Graph(matching)
if any(d != 1 for d in M.degree()):
raise ValueError("the input is not a matching")
- if any(not G_simple.has_edge(edge) for edge in M.edge_iterator()):
+
+ if any(not G.has_edge(edge) for edge in M.edge_iterator()):
raise ValueError("the input is not a matching of the graph")
- if (G_simple.order() != M.order()) or (G_simple.order() != 2*M.size()):
+
+ if (G.order() != M.order()) or (G.order() != 2*M.size()):
raise ValueError("the input is not a perfect matching of the graph")
else:
# A maximum matching of the graph is computed
- M = Graph(G_simple.matching(algorithm=algorithm, solver=solver, verbose=verbose,
+ M = Graph(G.matching(algorithm=algorithm, solver=solver, verbose=verbose,
integrality_tolerance=integrality_tolerance))
# It must be a perfect matching
- if G_simple.order() != M.order():
+ if G.order() != M.order():
u, v = next(M.edge_iterator(labels=False))
return (False, set([u, v])) if coNP_certificate else False
@@ -477,12 +472,12 @@ def is_bicritical(G, matching=None, algorithm='Edmonds', coNP_certificate=False,
# every vertex of the graph distinct from v must be reachable from u through an even length
# M-alternating uv-path starting with an edge not in M and ending with an edge in M
- for u in G_simple:
+ for u in G:
v = next(M.neighbor_iterator(u))
- even = M_alternating_even_mark(G_simple, u, M)
+ even = M_alternating_even_mark(G, u, M)
- for w in G_simple:
+ for w in G:
if w != v and w not in even:
return (False, set([v, w])) if coNP_certificate else False
@@ -980,27 +975,26 @@ def is_matching_covered(G, matching=None, algorithm='Edmonds', coNP_certificate=
if G.order() == 2:
return (True, None) if coNP_certificate else True
- # A graph (without a self-loop) is matching covered if and only if the
- # underlying simple graph is matching covered
- G_simple = G.to_simple()
-
from sage.graphs.graph import Graph
if matching:
# The input matching must be a valid perfect matching of the graph
M = Graph(matching)
+
if any(d != 1 for d in M.degree()):
raise ValueError("the input is not a matching")
- if any(not G_simple.has_edge(edge) for edge in M.edge_iterator()):
+
+ if any(not G.has_edge(edge) for edge in M.edge_iterator()):
raise ValueError("the input is not a matching of the graph")
- if (G_simple.order() != M.order()) or (G_simple.order() != 2*M.size()):
+
+ if (G.order() != M.order()) or (G.order() != 2*M.size()):
raise ValueError("the input is not a perfect matching of the graph")
else:
# A maximum matching of the graph is computed
- M = Graph(G_simple.matching(algorithm=algorithm, solver=solver, verbose=verbose,
+ M = Graph(G.matching(algorithm=algorithm, solver=solver, verbose=verbose,
integrality_tolerance=integrality_tolerance))
# It must be a perfect matching
- if G_simple.order() != M.order():
+ if G.order() != M.order():
return (False, next(M.edge_iterator())) if coNP_certificate else False
# Biparite graph:
@@ -1011,17 +1005,17 @@ def is_matching_covered(G, matching=None, algorithm='Edmonds', coNP_certificate=
# if it is in M or otherwise direct it from B to A. The graph G is
# matching covered if and only if D is strongly connected.
- if G_simple.is_bipartite():
- A, _ = G_simple.bipartite_sets()
+ if G.is_bipartite():
+ A, _ = G.bipartite_sets()
color = dict()
- for u in G_simple:
+ for u in G:
color[u] = 0 if u in A else 1
from sage.graphs.digraph import DiGraph
H = DiGraph()
- for u, v in G_simple.edge_iterator(labels=False):
+ for u, v in G.edge_iterator(labels=False):
if color[u]:
u, v = v, u
@@ -1075,12 +1069,12 @@ def dfs(J, v, visited, orientation):
# an M-alternating odd length uv-path starting and ending with edges not
# in M.
- for u in G_simple:
+ for u in G:
v = next(M.neighbor_iterator(u))
- even = M_alternating_even_mark(G_simple, u, M)
+ even = M_alternating_even_mark(G, u, M)
- for w in G_simple.neighbor_iterator(v):
+ for w in G.neighbor_iterator(v):
if w != u and w not in even:
return (False, (v, w)) if coNP_certificate else False
@@ -1092,7 +1086,7 @@ def matching(G, value_only=False, algorithm='Edmonds',
*, integrality_tolerance=1e-3):
r"""
Return a maximum weighted matching of the graph represented by the list
- of its edges
+ of its edges.
For more information, see the :wikipedia:`Matching_(graph_theory)`.
@@ -1291,7 +1285,7 @@ def weight(x):
def perfect_matchings(G, labels=False):
r"""
- Return an iterator over all perfect matchings of the graph
+ Return an iterator over all perfect matchings of the graph.
ALGORITHM:
@@ -1404,7 +1398,7 @@ def rec(G):
def M_alternating_even_mark(G, vertex, matching):
r"""
Return the vertices reachable from ``vertex`` via an even alternating path
- starting with a non-matching edge
+ starting with a non-matching edge.
This method implements the algorithm proposed in [LR2004]_. Note that
the complexity of the algorithm is linear in number of edges.
@@ -1570,7 +1564,8 @@ def M_alternating_even_mark(G, vertex, matching):
M = Graph(matching)
if any(d != 1 for d in M.degree()):
raise ValueError("the input is not a matching")
- if any(not G_simple.has_edge(edge) for edge in M.edge_iterator()):
+
+ if any(not G.has_edge(edge) for edge in M.edge_iterator()):
raise ValueError("the input is not a matching of the graph")
# Build an M-alternating tree T rooted at vertex
@@ -1605,8 +1600,10 @@ def M_alternating_even_mark(G, vertex, matching):
while ancestor_x[-1] != ancestor_y[-1]:
if rank[ancestor_x[-1]] > rank[ancestor_y[-1]]:
ancestor_x.append(predecessor[ancestor_x[-1]])
+
elif rank[ancestor_x[-1]] < rank[ancestor_y[-1]]:
ancestor_y.append(predecessor[ancestor_y[-1]])
+
else:
ancestor_x.append(predecessor[ancestor_x[-1]])
ancestor_y.append(predecessor[ancestor_y[-1]])
@@ -1616,6 +1613,7 @@ def M_alternating_even_mark(G, vertex, matching):
# Set t as pred of all vertices of the chains and add
# vertices marked odd to the queue
next_rank_to_lcs_rank = rank[lcs] + 1
+
for a in itertools.chain(ancestor_x, ancestor_y):
predecessor[a] = lcs
rank[a] = next_rank_to_lcs_rank
diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py
new file mode 100644
index 00000000000..2a9b8916c90
--- /dev/null
+++ b/src/sage/graphs/matching_covered_graph.py
@@ -0,0 +1,2093 @@
+r"""
+Matching covered graphs
+
+This module implements functions and operations pertaining to matching covered
+graphs.
+
+A *matching* in a graph is a set of pairwise nonadjacent links
+(nonloop edges). In other words, a matching in a graph is the edge set of an
+1-regular subgraph. A matching is called a *perfect* *matching* if it the
+subgraph generated by a set of matching edges spans the graph, i.e. it's the
+edge set of an 1-regular spanning subgraph. A connected nontrivial graph is
+called *matching* *covered* if each edge participates in some perfect matching.
+
+{INDEX_OF_METHODS}
+
+REFERENCES:
+
+- This methods of this module has been adopted and inspired by the book of
+ Lucchesi and Murty --- *Perfect Matchings: a theory of matching covered
+ graphs* [LM2024]_.
+
+AUTHORS:
+
+- Janmenjaya Panda (2024-06-14): initial version
+
+.. TODO::
+
+ The following methods are to be incorporated in
+ :class:`~MatchingCoveredGraph`:
+
+ .. csv-table::
+ :class: contentstable
+ :widths: 30, 70
+ :delim: |
+
+ ``__hash__()`` | Compute a hash for ``self``, if ``self`` is immutable.
+ ``_subgraph_by_deleting()`` | Return the matching covered subgraph containing the provided vertices and edges.
+
+ **Overwritten Methods**
+
+ .. csv-table::
+ :class: contentstable
+ :widths: 30, 70
+ :delim: |
+
+ ``add_clique()`` | Add a clique to the graph with the provided vertices.
+ ``add_cycle()`` | Add a cycle to the graph with the provided vertices.
+ ``add_path()`` | Add a path to the graph with the provided vertices.
+ ``cartesian_product()`` | Return the Cartesian product of ``self`` and ``other``.
+ ``clear()`` | Empties the graph of vertices and edges and removes name, associated objects, and position information.
+ ``complement()`` | Return the complement of the graph.
+ ``contract_edge()`` | Contract an edge from ``u`` to ``v``.
+ ``contract_edges()`` | Contract edges from an iterable container.
+ ``degree_constrained_subgraph()`` | Return a degree-constrained matching covered subgraph.
+ ``delete_edge()`` | Delete the edge from ``u`` to ``v``.
+ ``delete_edges()`` | Delete edges from an iterable container.
+ ``delete_multiedge()`` | Delete all edges from ``u`` to ``v``.
+ ``disjoint_union()`` | Return the disjoint union of ``self`` and ``other``.
+ ``disjunctive_product()`` | Return the disjunctive product of ``self`` and ``other``.
+ ``has_loops()`` | Return whether there are loops in the matching covered graph.
+ ``is_biconnected()`` | Check if the matching covered graph is biconnected.
+ ``is_block_graph()`` | Check whether the matching covered graph is a block graph.
+ ``is_cograph()`` | Check whether the matching covered graph is cograph.
+ ``is_forest()`` | Check if the matching covered graph is a forest, i.e. a disjoint union of trees.
+ ``is_matching_covered()`` | Check if the graph is matching covered.
+ ``is_path()`` | Check whether the graph is a path.
+ ``is_subgraph()`` | Check whether the matching covered graph is a subgraph of ``other``.
+ ``is_tree()`` | Check whether the matching covered graph is a tree.
+ ``join()`` | Return the join of ``self`` and ``other``.
+ ``lexicographic_product()`` | Return the lexicographic product of ``self`` and ``other``.
+ ``load_afile()`` | Load the matching covered graph specified in the given file into the current object.
+ ``loop_edges()`` | Return a list of all loops in the matching covered graph.
+ ``loop_vertices()`` | Return a list of vertices with loops.
+ ``merge_vertices()`` | Merge vertices.
+ ``number_of_loops()`` | Return the number of edges that are loops.
+ ``random_subgraph()`` | Return a random matching covered subgraph containing each vertex with probability ``p``.
+ ``remove_loops()`` | Remove loops on vertices in ``vertices``.
+ ``save_afile()`` | Save the graph to file in alist format.
+ ``strong_product()`` | Return the strong product of ``self`` and ``other``.
+ ``subdivide_edge()`` | Subdivide an edge `k` times.
+ ``subdivide_edges()`` | Subdivide `k` times edges from an iterable container.
+ ``subgraph()`` | Return the matching covered subgraph containing the given vertices and edges.
+ ``subgraph_search()`` | Return a copy of (matching covered) ``G`` in ``self``.
+ ``subgraph_search_count()`` | Return the number of labelled occurrences of (matching covered) ``G`` in ``self``.
+ ``subgraph_search_iterator()`` | Return an iterator over the labelled copies of (matching covered) ``G`` in ``self``.
+ ``tensor_product()`` | Return the tensor product of ``self`` and ``other``.
+ ``to_undirected()`` | Return an undirected Graph instance of the matching covered graph.
+ ``transitive_closure()`` | Return the transitive closure of the matching covered graph.
+ ``transitive_reduction()`` | Return a transitive reduction of the matching covered graph.
+ ``union()`` | Return the union of ``self`` and ``other``.
+
+ **Barriers and canonical partition**
+
+ .. csv-table::
+ :class: contentstable
+ :widths: 30, 70
+ :delim: |
+
+ ``canonical_partition()`` | Return the canonical partition of the (matching covered) graph.
+ ``maximal_barrier()`` | Return the (unique) maximal barrier of the (matching covered) graph containing the (provided) vertex.
+
+ **Bricks, braces and tight cut decomposition**
+
+ .. csv-table::
+ :class: contentstable
+ :widths: 30, 70
+ :delim: |
+
+ ``bricks_and_braces()`` | Return the list of (underlying simple graph of) the bricks and braces of the (matching covered) graph.
+ ``is_brace()`` | Check if the (matching covered) graph is a brace.
+ ``is_brick()`` | Check if the (matching covered) graph is a brick.
+ ``number_of_braces()`` | Return the number of braces.
+ ``number_of_bricks()`` | Return the number of bricks.
+ ``number_of_petersen_bricks()`` | Return the number of Petersen bricks.
+ ``tight_cut_decomposition()`` | Return a tight cut decomposition.
+
+ **Removability and ear decomposition**
+
+ .. csv-table::
+ :class: contentstable
+ :widths: 30, 70
+ :delim: |
+
+ ``add_ear()`` | Add an ear to the graph with the provided end vertices number of internal vertices.
+ ``bisubdivide_edge()`` | Bisubdivide an edge `k` times.
+ ``bisubdivide_edges()`` | Bisubdivide `k` times edges from an iterable container.
+ ``efficient_ear_decomposition()`` | Return a matching covered ear decomposition computed at the fastest possible time.
+ ``is_removable_double_ear()`` | Check whether the pair of ears form a removable double ear.
+ ``is_removable_doubleton()`` | Check whether the pair of edges constitute a removable doubleton.
+ ``is_removable_ear()`` | Check whether the ear is removable.
+ ``is_removable_edge()`` | Check whether the edge is removable.
+ ``optimal_ear_decomposition()`` | Return an optimal ear decomposition.
+ ``removable_double_ears()`` | Return a list of removable double ears.
+ ``removable_doubletons()`` | Return a list of removable doubletons.
+ ``removable_ears()`` | Return a list of removable ears.
+ ``removable_edges()`` | Return a :class:`~EdgesView` of removable edges.
+ ``retract()`` | Compute the retract of the (matching covered) graph.
+
+ **Generating bricks and braces**
+
+ .. csv-table::
+ :class: contentstable
+ :widths: 30, 70
+ :delim: |
+
+ ``brace_generation_sequence()`` | Return a McCuaig brace generation sequence of the (provided) brace.
+ ``brick_generation_sequence()`` | Return a Norine-Thomas brick generation sequence of the (provided) brick.
+ ``is_mccuaig_brace()`` | Check if the brace is a McCuaig brace.
+ ``is_norine_thomas_brick()`` | Check if the brick is a Norine-Thomas brick.
+
+
+Methods
+-------
+"""
+
+# ****************************************************************************
+# Copyright (C) 2024 Janmenjaya Panda
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+# https://www.gnu.org/licenses/
+# ****************************************************************************
+from sage.graphs.graph import Graph
+from sage.misc.rest_index_of_methods import doc_index, gen_thematic_rest_table_index
+
+class MatchingCoveredGraph(Graph):
+ r"""
+ Matching covered graph
+
+ INPUT:
+
+ - ``data`` -- can be any of the following:
+
+ - Empty or ``None`` (throws a :exc:`ValueError` as the graph must be
+ nontrival).
+
+ - An arbitrary graph.
+
+ - ``matching`` -- (default: ``None``); a perfect matching of the
+ graph, that can be given using any valid input format of
+ :class:`~sage.graphs.graph.Graph`.
+
+ If set to ``None``, a matching is computed using the other parameters.
+
+ - ``algorithm`` -- string (default: ``'Edmonds'``); the algorithm to be
+ used to compute a maximum matching of the graph among
+
+ - ``'Edmonds'`` selects Edmonds' algorithm as implemented in NetworkX,
+
+ - ``'LP'`` uses a Linear Program formulation of the matching problem.
+
+ - ``solver`` -- string (default: ``None``); specify a Mixed Integer
+ Linear Programming (MILP) solver to be used. If set to ``None``, the
+ default one is used. For more information on MILP solvers and which
+ default solver is used, see the method :meth:`solve
+ ` of the class
+ :class:`MixedIntegerLinearProgram
+ `.
+
+ - ``verbose`` -- integer (default: ``0``); sets the level of verbosity:
+ set to 0 by default, which means quiet (only useful when ``algorithm
+ == 'LP'``).
+
+ - ``integrality_tolerance`` -- float; parameter for use with MILP
+ solvers over an inexact base ring; see
+ :meth:`MixedIntegerLinearProgram.get_values`.
+
+ OUTPUT:
+
+ - An object of the class :class:`~MatchingCoveredGraph` if the input is
+ valid and the graph is matching covered, or otherwise an error is thrown.
+
+ .. NOTE::
+
+ All remaining arguments are passed to the ``Graph`` constructor
+
+ EXAMPLES:
+
+ Generating an object of the class ``MatchingCoveredGraph`` from the
+ provided instance of ``Graph`` without providing any other information::
+
+ sage: G = MatchingCoveredGraph(graphs.PetersenGraph())
+ sage: G
+ Matching covered petersen graph: graph on 10 vertices
+ sage: sorted(G.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+
+ sage: G = graphs.StaircaseGraph(4)
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered staircase graph: graph on 8 vertices
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 1, None), (2, 7, None), (3, 6, None), (4, 5, None)]
+
+ sage: G = Graph({0: [1, 2, 3, 4], 1: [2, 5],
+ ....: 2: [5], 3: [4, 5], 4: [5]})
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered graph on 6 vertices
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 4, None), (1, 2, None), (3, 5, None)]
+
+ sage: # needs networkx
+ sage: import networkx
+ sage: G = Graph(networkx.complete_bipartite_graph(12, 12))
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered graph on 24 vertices
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 15, None), (1, 14, None), (2, 13, None), (3, 12, None),
+ (4, 23, None), (5, 22, None), (6, 21, None), (7, 20, None),
+ (8, 19, None), (9, 18, None), (10, 17, None), (11, 16, None)]
+
+ sage: G = Graph('E|fG', sparse=True)
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered graph on 6 vertices
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 5, None), (1, 2, None), (3, 4, None)]
+
+ sage: # needs sage.modules
+ sage: M = Matrix([(0,1,0,0,1,1,0,0,0,0),
+ ....: (1,0,1,0,0,0,1,0,0,0),
+ ....: (0,1,0,1,0,0,0,1,0,0),
+ ....: (0,0,1,0,1,0,0,0,1,0),
+ ....: (1,0,0,1,0,0,0,0,0,1),
+ ....: (1,0,0,0,0,0,0,1,1,0),
+ ....: (0,1,0,0,0,0,0,0,1,1),
+ ....: (0,0,1,0,0,1,0,0,0,1),
+ ....: (0,0,0,1,0,1,1,0,0,0),
+ ....: (0,0,0,0,1,0,1,1,0,0)])
+ sage: M
+ [0 1 0 0 1 1 0 0 0 0]
+ [1 0 1 0 0 0 1 0 0 0]
+ [0 1 0 1 0 0 0 1 0 0]
+ [0 0 1 0 1 0 0 0 1 0]
+ [1 0 0 1 0 0 0 0 0 1]
+ [1 0 0 0 0 0 0 1 1 0]
+ [0 1 0 0 0 0 0 0 1 1]
+ [0 0 1 0 0 1 0 0 0 1]
+ [0 0 0 1 0 1 1 0 0 0]
+ [0 0 0 0 1 0 1 1 0 0]
+ sage: G = Graph(M)
+ sage: H = MatchingCoveredGraph(G)
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+
+ sage: # needs sage.modules
+ sage: M = Matrix([(-1, 0, 0, 0, 1, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0),
+ ....: ( 1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0),
+ ....: ( 0, 1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0),
+ ....: ( 0, 0, 1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0),
+ ....: ( 0, 0, 0, 1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1),
+ ....: ( 0, 0, 0, 0, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0),
+ ....: ( 0, 0, 0, 0, 0, 0, 0, 1,-1, 0, 0, 1, 0, 0, 0),
+ ....: ( 0, 0, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0, 1, 0, 0),
+ ....: ( 0, 0, 0, 0, 0, 0, 0, 0, 1,-1, 0, 0, 0, 1, 0),
+ ....: ( 0, 0, 0, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0, 0, 1)])
+ sage: M
+ [-1 0 0 0 1 0 0 0 0 0 -1 0 0 0 0]
+ [ 1 -1 0 0 0 0 0 0 0 0 0 -1 0 0 0]
+ [ 0 1 -1 0 0 0 0 0 0 0 0 0 -1 0 0]
+ [ 0 0 1 -1 0 0 0 0 0 0 0 0 0 -1 0]
+ [ 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 -1]
+ [ 0 0 0 0 0 -1 0 0 0 1 1 0 0 0 0]
+ [ 0 0 0 0 0 0 0 1 -1 0 0 1 0 0 0]
+ [ 0 0 0 0 0 1 -1 0 0 0 0 0 1 0 0]
+ [ 0 0 0 0 0 0 0 0 1 -1 0 0 0 1 0]
+ [ 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 1]
+ sage: G = Graph(M)
+ sage: H = MatchingCoveredGraph(G)
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+
+ sage: G = Graph([(0, 1), (0, 3), (0, 4), (1, 2), (1, 5), (2, 3),
+ ....: (2, 6), (3, 7), (4, 5), (4, 7), (5, 6), (6, 7)])
+ sage: H = MatchingCoveredGraph(G)
+ sage: H == G
+ True
+ sage: sorted(H.get_matching())
+ [(0, 4, None), (1, 5, None), (2, 6, None), (3, 7, None)]
+
+ sage: # optional - python_igraph
+ sage: import igraph
+ sage: G = Graph(igraph.Graph([(0, 1), (0, 3), (1, 2), (2, 3)]))
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered graph on 4 vertices
+ sage: sorted(H.get_matching())
+ [(0, 3, {}), (1, 2, {})]
+
+ One may specify a perfect matching::
+
+ sage: P = graphs.PetersenGraph()
+ sage: M = P.matching()
+ sage: sorted(M)
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+ sage: G = MatchingCoveredGraph(P, matching=M)
+ sage: G
+ Matching covered petersen graph: graph on 10 vertices
+ sage: P == G
+ True
+ sage: sorted(G.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+ sage: sorted(G.get_matching()) == sorted(M)
+ True
+
+ sage: G = graphs.TruncatedBiwheelGraph(14)
+ sage: M = G.matching()
+ sage: sorted(M)
+ [(0, 27, None), (1, 26, None), (2, 3, None), (4, 5, None),
+ (6, 7, None), (8, 9, None), (10, 11, None), (12, 13, None),
+ (14, 15, None), (16, 17, None), (18, 19, None), (20, 21, None),
+ (22, 23, None), (24, 25, None)]
+ sage: H = MatchingCoveredGraph(G, M)
+ sage: H
+ Matching covered truncated biwheel graph: graph on 28 vertices
+ sage: H == G
+ True
+ sage: sorted(H.get_matching()) == sorted(M)
+ True
+
+ One may specify some keyword arguments::
+
+ sage: G = Graph([(0, 1, 5)], {'weighted': True})
+ sage: kwds = {
+ ....: 'loops': False,
+ ....: 'multiedges': True,
+ ....: 'pos': {0: (0, 0), 1: (1, 1)}
+ ....: }
+ sage: H = MatchingCoveredGraph(G, **kwds)
+ sage: H
+ Matching covered multi-graph on 2 vertices
+ sage: H.add_edge(0, 1)
+ sage: H.edges()
+ [(0, 1, None), (0, 1, 5)]
+
+ TESTS:
+
+ An empty graph is not matching covered::
+
+ sage: G = Graph()
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph is trivial
+ sage: G = MatchingCoveredGraph()
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph is trivial
+
+ Providing with a graph that is not connected::
+
+ sage: G = graphs.CycleGraph(4)
+ sage: G += graphs.CycleGraph(6)
+ sage: G.connected_components_number()
+ 2
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph is not connected
+
+ Make sure that self-loops are not allowed for a matching covered graph::
+
+ sage: P = graphs.PetersenGraph()
+ sage: kwds = {'loops': True}
+ sage: G = MatchingCoveredGraph(P, **kwds)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.allows_loops()
+ False
+ sage: G.allow_loops(True)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+ sage: G.add_edge(0, 0)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+ sage: H = MatchingCoveredGraph(P, loops=True)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+
+ Make sure that multiple edges are allowed for a matching covered graph (by
+ default it is off and can be modified to be allowed)::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: G
+ Matching covered petersen graph: graph on 10 vertices
+ sage: G.allows_multiple_edges()
+ False
+ sage: G.size()
+ 15
+ sage: G.allow_multiple_edges(True)
+ sage: G.allows_multiple_edges()
+ True
+ sage: G.add_edge(next(P.edge_iterator()))
+ sage: G.size()
+ 16
+ sage: G
+ Matching covered petersen graph: multi-graph on 10 vertices
+ sage: H = MatchingCoveredGraph(P, multiedges=True)
+ sage: H.allows_multiple_edges()
+ True
+ sage: H.add_edge(next(P.edge_iterator()))
+ sage: H.size()
+ 16
+ sage: H
+ Matching covered petersen graph: multi-graph on 10 vertices
+
+ Providing with a connected nontrivial graph free of self-loops that is
+ not matching covered::
+
+ sage: G = graphs.CompleteGraph(11)
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+ sage: G = Graph({0: [1, 6, 11], 1: [2, 4], 2: [3, 5], 3: [4, 5],
+ ....: 4: [5], 6: [7, 9], 7: [8, 10], 8: [9, 10], 9: [10],
+ ....: 11: [12, 14], 12: [13, 15], 13: [14, 15], 14: [15]})
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+
+ sage: # needs networkx
+ sage: import networkx
+ sage: G = Graph(networkx.complete_bipartite_graph(2, 12))
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+ sage: G = Graph('F~~~w')
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+
+ sage: # needs sage.modules
+ sage: M = Matrix([(0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0),
+ ....: (1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+ ....: (0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+ ....: (0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+ ....: (0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+ ....: (0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+ ....: (1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0),
+ ....: (0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0),
+ ....: (0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0),
+ ....: (0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0),
+ ....: (0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
+ ....: (1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0),
+ ....: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1),
+ ....: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1),
+ ....: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1),
+ ....: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0)])
+ sage: M
+ [0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0]
+ [1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0]
+ [0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0]
+ [0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0]
+ [0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0]
+ [0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0]
+ [1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0]
+ [0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0]
+ [0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0]
+ [0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0]
+ [0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0]
+ [1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0]
+ [0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1]
+ [0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1]
+ [0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1]
+ [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0]
+ sage: G = Graph(M)
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+
+ sage: # needs sage.modules
+ sage: M = Matrix([(1, 1, 0, 0, 0, 0),
+ ....: (0, 0, 1, 1, 0, 0),
+ ....: (0, 0, 1, 0, 1, 0),
+ ....: (1, 0, 0, 0, 0, 1),
+ ....: (0, 1, 0, 1, 1, 1)])
+ sage: G = Graph(M)
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+ sage: G = Graph([(11, 12), (11, 14), (0, 1), (0, 11), (0, 6), (1, 2),
+ ....: (1, 4), (2, 3), (2, 5), (3, 4), (3, 5), (4, 5),
+ ....: (6, 7), (6, 9), (7, 8), (7, 10), (8, 9), (8, 10),
+ ....: (9, 10), (12, 13), (12, 15), (13, 14), (13, 15),
+ ....: (14, 15)])
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+
+ sage: # optional - python_igraph
+ sage: import igraph
+ sage: G = Graph(igraph.Graph([(0, 1), (0, 2), (0, 3), (1, 2), (2, 3)]))
+ sage: H = MatchingCoveredGraph(G)
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+
+ Providing with a wrong matching::
+
+ sage: P = graphs.PetersenGraph()
+ sage: M = str('0')
+ sage: H = MatchingCoveredGraph(P, matching=M)
+ Traceback (most recent call last):
+ ...
+ RuntimeError: the string seems corrupt: valid characters are
+ ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+ sage: N = str('graph')
+ sage: J = MatchingCoveredGraph(P, matching=N)
+ Traceback (most recent call last):
+ ...
+ RuntimeError: the string (graph) seems corrupt: for n = 40,
+ the string is too short
+
+ sage: G = graphs.CompleteGraph(6)
+ sage: M = Graph(G.matching())
+ sage: M.add_edges([(0, 1), (0, 2)])
+ sage: H = MatchingCoveredGraph(G, matching=M)
+ Traceback (most recent call last):
+ ...
+ ValueError: the input is not a matching
+ sage: N = Graph(G.matching())
+ sage: N.add_edge(6, 7)
+ sage: H = MatchingCoveredGraph(G, matching=N)
+ Traceback (most recent call last):
+ ...
+ ValueError: the input is not a matching of the graph
+ sage: J = Graph()
+ sage: J.add_edges([(0, 1), (2, 3)])
+ sage: H = MatchingCoveredGraph(G, matching=J)
+ Traceback (most recent call last):
+ ...
+ ValueError: the input is not a perfect matching of the graph
+
+ Note that data shall be one of empty or ``None`` or an instance of
+ ``Graph`` or an instance of ``MatchingCoveredGraph``. Otherwise a
+ :exc:`ValueError` is returned::
+
+ sage: D = digraphs.Complete(10)
+ sage: D
+ Complete digraph: Digraph on 10 vertices
+ sage: G = MatchingCoveredGraph(D)
+ Traceback (most recent call last):
+ ...
+ TypeError: input data is of unknown type
+ """
+
+ def __init__(self, data=None, matching=None, algorithm='Edmonds',
+ solver=None, verbose=0, integrality_tolerance=0.001,
+ *args, **kwds):
+ r"""
+ Create a matching covered graph, that is a connected nontrivial graph
+ wherein each edge participates in some perfect matching.
+
+ See documentation ``MatchingCoveredGraph?`` for detailed information.
+ """
+ success = False
+
+ if not kwds:
+ kwds = {'loops': False}
+ else:
+ if 'loops' in kwds and kwds['loops']:
+ raise ValueError('loops are not allowed in '
+ 'matching covered graphs')
+ kwds['loops'] = False
+
+ if data is None:
+ raise ValueError('the graph is trivial')
+
+ elif isinstance(data, MatchingCoveredGraph):
+ Graph.__init__(self, data, *args, **kwds)
+ success = True
+
+ elif isinstance(data, Graph):
+ try:
+ self._upgrade_from_graph(data=data, matching=matching,
+ algorithm=algorithm,
+ solver=solver, verbose=verbose,
+ integrality_tolerance=integrality_tolerance,
+ *args, **kwds)
+ success = True
+
+ except Exception as exception:
+ raise exception
+
+ if success:
+ if matching:
+ # The input matching is a valid perfect matching of the graph
+ self._matching = matching
+
+ else:
+ self._matching = Graph(self).matching()
+
+ else:
+ raise TypeError('input data is of unknown type')
+
+ def __repr__(self):
+ r"""
+ Return a short string representation of the (matching covered) graph.
+
+ EXAMPLES:
+
+ If the string representation of the (matching covered) graph does not
+ contain the term 'matching covered', it's used as the prefix::
+
+ sage: G = graphs.CompleteGraph(10)
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered complete graph: graph on 10 vertices
+
+ sage: G = graphs.HexahedralGraph()
+ sage: H = MatchingCoveredGraph(BipartiteGraph(G))
+ sage: H # An object of the class MatchingCoveredGraph
+ Matching covered hexahedron: graph on 8 vertices
+
+ In case the string representation of the (matching covered) graph
+ contains the term 'matching covered', the representation remains as it
+ is::
+
+ sage: G = graphs.CompleteGraph(10)
+ sage: H = MatchingCoveredGraph(G)
+ sage: H
+ Matching covered complete graph: graph on 10 vertices
+ sage: J = MatchingCoveredGraph(H)
+ sage: J
+ Matching covered complete graph: graph on 10 vertices
+ sage: G = graphs.HexahedralGraph()
+ sage: H = BipartiteGraph(MatchingCoveredGraph(G))
+ sage: H # An object of the class BipartiteGraph
+ Bipartite hexahedron: graph on 8 vertices
+ sage: J = MatchingCoveredGraph(H)
+ sage: J # An object of the class MatchingCoveredGraph
+ Matching covered hexahedron: graph on 8 vertices
+ """
+ s = Graph._repr_(self).lower()
+ if "matching covered" in s:
+ return s.capitalize()
+ return "".join(["Matching covered ", s])
+
+ def _subgraph_by_adding(self, vertices=None, edges=None, edge_property=None, immutable=None):
+ r"""
+ Return the matching covered subgraph containing the given vertices and edges.
+
+ The edges also satisfy the edge_property, if it is not None. The
+ subgraph is created by creating a new empty graph and adding the
+ necessary vertices, edges, and other properties.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph._subgraph_by_adding`
+ method to ensure that resultant subgraph is also matching covered.
+
+ INPUT:
+
+ - ``vertices`` -- (default: ``None``) an iterable container of
+ vertices, e.g. a list, set, graph, file or numeric array. If not
+ passed (i.e., ``None``), defaults to the entire graph.
+
+ - ``edges`` -- a single edge or an iterable container of edges (e.g., a
+ list, set, file, numeric array, etc.). By default (``edges=None``),
+ all edges are assumed and the returned graph is an induced
+ subgraph. In the case of multiple edges, specifying an edge as `(u,v)`
+ means to keep all edges `(u,v)`, regardless of the label.
+
+ - ``edge_property`` -- function (default: ``None``); a function that
+ inputs an edge and outputs a boolean value, i.e., a edge ``e`` in
+ ``edges`` is kept if ``edge_property(e) == True``
+
+ - ``immutable`` -- boolean (default: ``None``); whether to create a
+ mutable/immutable subgraph. ``immutable=None`` (default) means that
+ the graph and its subgraph will behave the same way.
+
+ OUTPUT:
+
+ - An instance of :class:`~MatchingCoveredGraph` is returned if the
+ subgraph obtained is matching covered, otherwise a :exc:`ValueError`
+ is thrown.
+
+ EXAMPLES:
+
+ Ladder graphs are matching covered subgraphs of a staircase graph,
+ which is also matching covered::
+
+ sage: G = MatchingCoveredGraph(graphs.StaircaseGraph(4))
+ sage: H = G._subgraph_by_adding(vertices=[0..5])
+ sage: H.order(), H.size()
+ (6, 7)
+ sage: H
+ Matching covered subgraph of (staircase graph): graph on 6 vertices
+ sage: H.is_isomorphic(graphs.LadderGraph(3))
+ True
+
+ Cycle graphs are matching covered subgraphs of a biwheel graph, which
+ is also matching covered::
+
+ sage: G = MatchingCoveredGraph(graphs.BiwheelGraph(5))
+ sage: H = G._subgraph_by_adding(vertices=[0..7],
+ ....: edges=[(u, (u+1) % 8) for u in range(8)])
+ sage: H.order(), H.size()
+ (8, 8)
+ sage: H
+ Matching covered subgraph of (biwheel graph): graph on 8 vertices
+ sage: H.is_isomorphic(graphs.CycleGraph(8))
+ True
+
+ One may pass no value for any of the input arguments; in such a case,
+ the whole matching covered graph will be returned::
+
+ sage: T = graphs.TwinplexGraph()
+ sage: G = MatchingCoveredGraph(T)
+ sage: J = G._subgraph_by_adding()
+ sage: G == J
+ True
+
+ One may use the ``edge_property`` argument::
+
+ sage: G = Graph(multiedges=True)
+ sage: G.add_edges([
+ ....: (0, 1, 'label'), (0, 2), (0, 3), (0, 4),
+ ....: (0, 5), (1, 2, 'label'), (1, 2), (1, 5),
+ ....: (2, 5), (3, 4), (3, 5), (4, 5)
+ ....: ])
+ sage: H = MatchingCoveredGraph(G)
+ sage: J = H._subgraph_by_adding(vertices=[0, 1, 2, 5], edge_property=
+ ....: (lambda edge:
+ ....: (edge[0] in [1, 2]) != (edge[1] in [1, 2]))
+ ....: )
+ sage: J.order(), J.size()
+ (4, 4)
+ sage: J
+ Matching covered subgraph of (): multi-graph on 4 vertices
+ sage: J.is_isomorphic(graphs.CompleteBipartiteGraph(2, 2))
+ True
+
+ We may specify the subgraph to be immutable::
+
+ sage: M = graphs.MoebiusLadderGraph(4)
+ sage: G = MatchingCoveredGraph(M)
+ sage: H = G._subgraph_by_adding(edge_property=
+ ....: (lambda edge: abs(edge[0] - edge[1]) != 4),
+ ....: immutable=True)
+ sage: H.order(), H.size()
+ (8, 8)
+ sage: H
+ Matching covered subgraph of (moebius ladder graph): graph on 8 vertices
+ sage: H.is_isomorphic(graphs.CycleGraph(8))
+ True
+ sage: H.is_immutable()
+ True
+ sage: C = graphs.CubeplexGraph()
+ sage: D = MatchingCoveredGraph(C)
+ sage: I = D._subgraph_by_adding(immutable=True)
+ sage: (I == D) and (I.is_immutable())
+ True
+ sage: J = D._subgraph_by_adding(vertices=D.vertices(), immutable=True)
+ sage: (J == D) and (J.is_immutable())
+ True
+
+ An error is thrown if the subgraph is not matching covered::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: H = G._subgraph_by_adding(vertices=[])
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph is trivial
+ sage: H = G._subgraph_by_adding(edge_property=
+ ....: (lambda edge: edge[0] == 0)
+ ....: )
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph is not connected
+ sage: H = G._subgraph_by_adding(vertices=[1, 2, 3])
+ Traceback (most recent call last):
+ ...
+ ValueError: input graph is not matching covered
+ """
+ if immutable is None:
+ immutable = self.is_immutable()
+
+ if edges is None and edge_property is None:
+ if vertices is None:
+ G = self.copy()
+ G.name('Matching covered subgraph of ({})'.format(self.name()))
+ if immutable:
+ G = G.copy(immutable=True)
+
+ return G
+
+ else:
+ # Check if all existent vertices are there
+ all_existent_vertices = True
+ for vertex in self:
+ if vertex not in vertices:
+ all_existent_vertices = False
+ break
+
+ if all_existent_vertices:
+ G = self.copy()
+ G.name('Matching covered subgraph of ({})'.format(self.name()))
+ if immutable:
+ G = G.copy(immutable=True)
+
+ return G
+
+ G = Graph(self, weighted=self._weighted, loops=self.allows_loops(),
+ multiedges=self.allows_multiple_edges())
+
+ H = G._subgraph_by_adding(vertices=vertices, edges=edges,
+ edge_property=edge_property,
+ immutable=False)
+
+ try:
+ H = MatchingCoveredGraph(H)
+ H.name('Matching covered subgraph of ({})'.format(self.name()))
+ if immutable:
+ H = H.copy(immutable=True)
+
+ return H
+
+ except Exception as exception:
+ raise exception
+
+ def _upgrade_from_graph(self, data=None, matching=None, algorithm='Edmonds',
+ solver=None, verbose=0, integrality_tolerance=0.001,
+ *args, **kwds):
+ r"""
+ Upgrade the given graph to a matching covered graph if eligible.
+
+ See documentation ``MatchingCoveredGraph?`` for detailed information.
+ """
+ try:
+ check = Graph.is_matching_covered(G=data, matching=matching,
+ algorithm=algorithm,
+ coNP_certificate=False,
+ solver=solver, verbose=verbose,
+ integrality_tolerance=integrality_tolerance)
+
+ if check:
+ Graph.__init__(self, data, *args, **kwds)
+ else:
+ raise ValueError("input graph is not matching covered")
+
+ except Exception as exception:
+ raise exception
+
+ @doc_index('Overwritten methods')
+ def add_edge(self, u, v=None, label=None):
+ r"""
+ Add an edge from vertex ``u`` to vertex ``v``.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.add_edge` method
+ to ensure that resultant graph is also matching covered.
+
+ INPUT:
+
+ The following forms are all accepted:
+
+ - G.add_edge(1, 2)
+ - G.add_edge((1, 2))
+ - G.add_edges([(1, 2)])
+ - G.add_edge(1, 2, 'label')
+ - G.add_edge((1, 2, 'label'))
+ - G.add_edges([(1, 2, 'label')])
+
+ OUTPUT:
+
+ - If an edge is provided with a valid format, but addition of the edge
+ leaves the resulting graph not being matching covered, a
+ :exc:`ValueError` is returned without any alteration to the existing
+ matching covered graph. If the addition of the edge preserves the
+ property of matching covered, then the graph is updated and nothing
+ is returned.
+
+ - If the edge is provided with an invalid format, a :exc:`ValueError`
+ is returned.
+
+ WARNING:
+
+ The following intuitive input results in nonintuitive output,
+ even though the resulting graph behind the intuition might be matching
+ covered::
+
+ sage: P = graphs.WheelGraph(6)
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.add_edge((1, 4), 'label')
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ (((1, 4), 'label', None)) is not matching covered
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None),
+ (0, 5, None), (1, 2, None), (1, 5, None), (2, 3, None),
+ (3, 4, None), (4, 5, None)]
+
+ The key word ``label`` must be used::
+
+ sage: W = graphs.WheelGraph(6)
+ sage: G = MatchingCoveredGraph(W)
+ sage: G.add_edge((1, 4), label='label')
+ sage: G.edges(sort=False) # No alteration to the existing graph
+ [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None),
+ (0, 5, None), (1, 2, None), (1, 4, 'label'), (1, 5, None),
+ (2, 3, None), (3, 4, None), (4, 5, None)]
+
+ An expression, analogous to the syntax mentioned above may be used::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: G = MatchingCoveredGraph(S)
+ sage: G.add_edge(0, 5)
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 3, None), (0, 5, None), (0, 6, None),
+ (1, 2, None), (1, 4, None), (2, 5, None), (2, 7, None),
+ (3, 4, None), (3, 6, None), (4, 5, None), (5, 7, None),
+ (6, 7, None)]
+ sage: G.add_edge((2, 3))
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 3, None), (0, 5, None), (0, 6, None),
+ (1, 2, None), (1, 4, None), (2, 3, None), (2, 5, None),
+ (2, 7, None), (3, 4, None), (3, 6, None), (4, 5, None),
+ (5, 7, None), (6, 7, None)]
+ sage: G.add_edges([(0, 4)])
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 5, None),
+ (0, 6, None), (1, 2, None), (1, 4, None), (2, 3, None),
+ (2, 5, None), (2, 7, None), (3, 4, None), (3, 6, None),
+ (4, 5, None), (5, 7, None), (6, 7, None)]
+ sage: G.add_edge(2, 4, 'label')
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 5, None),
+ (0, 6, None), (1, 2, None), (1, 4, None), (2, 3, None),
+ (2, 4, 'label'), (2, 5, None), (2, 7, None), (3, 4, None),
+ (3, 6, None), (4, 5, None), (5, 7, None), (6, 7, None)]
+ sage: G.add_edge((4, 6, 'label'))
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 5, None),
+ (0, 6, None), (1, 2, None), (1, 4, None), (2, 3, None),
+ (2, 4, 'label'), (2, 5, None), (2, 7, None), (3, 4, None),
+ (3, 6, None), (4, 5, None), (4, 6, 'label'), (5, 7, None),
+ (6, 7, None)]
+ sage: G.add_edges([(4, 7, 'label')])
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 5, None),
+ (0, 6, None), (1, 2, None), (1, 4, None), (2, 3, None),
+ (2, 4, 'label'), (2, 5, None), (2, 7, None), (3, 4, None),
+ (3, 6, None), (4, 5, None), (4, 6, 'label'), (4, 7, 'label'),
+ (5, 7, None), (6, 7, None)]
+
+ Note that the ``weight`` of the edge shall be input as the ``label``::
+
+ sage: G.add_edge((1, 3), label=5)
+ sage: G.edges()
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 5, None),
+ (0, 6, None), (1, 2, None), (1, 3, 5), (1, 4, None),
+ (2, 3, None), (2, 4, 'label'), (2, 5, None), (2, 7, None),
+ (3, 4, None), (3, 6, None), (4, 5, None), (4, 6, 'label'),
+ (4, 7, 'label'), (5, 7, None), (6, 7, None)]
+ sage: G.add_edge((2, 4, 6), label=6)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ (((2, 4, 6), None, 6)) is not matching covered
+
+ Vertex name cannot be ``None``, so::
+
+ sage: W = graphs.WheelGraph(6)
+ sage: H = MatchingCoveredGraph(W)
+ sage: H.add_edge(None, 1)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ ((None, 1, None)) is not matching covered
+ sage: H.edges(sort=False) # No alteration to the existing graph
+ [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None),
+ (0, 5, None), (1, 2, None), (1, 5, None), (2, 3, None),
+ (3, 4, None), (4, 5, None)]
+ sage: H.add_edge(None, None)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ ((None, None, None)) is not matching covered
+ sage: H.edges(sort=False) # No alteration to the existing graph
+ [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None),
+ (0, 5, None), (1, 2, None), (1, 5, None), (2, 3, None),
+ (3, 4, None), (4, 5, None)]
+
+ EXAMPLES:
+
+ Adding an already existing edge::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.add_edge(next(G.edge_iterator()))
+ sage: P == G
+ True
+ sage: G.size()
+ 15
+ sage: G.allow_multiple_edges(True)
+ sage: G.add_edge(0, 1)
+ sage: G.size()
+ 16
+
+ Adding an edge such that the resulting graph is matching covered::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.add_edge(1, 4)
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 4, None), (0, 5, None), (1, 2, None),
+ (1, 4, None), (1, 6, None), (2, 3, None), (2, 7, None),
+ (3, 4, None), (3, 8, None), (4, 9, None), (5, 7, None),
+ (5, 8, None), (6, 8, None), (6, 9, None), (7, 9, None)]
+
+ Adding an edge with both the incident vertices being existent such
+ that the resulting graph is not matching covered::
+
+ sage: C = graphs.CycleGraph(4)
+ sage: G = MatchingCoveredGraph(C)
+ sage: G.add_edge(0, 2)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ ((0, 2, None)) is not matching covered
+ sage: G.edges(sort=False) # No alteration to the existing graph
+ [(0, 1, None), (0, 3, None), (1, 2, None), (2, 3, None)]
+
+ Adding an edge with exactly one incident vertex that is nonexistent
+ throws a :exc:`ValueError` exception, as the resulting graph would
+ have an odd order::
+
+ sage: C = graphs.CycleGraph(4)
+ sage: G = MatchingCoveredGraph(C)
+ sage: G.add_edge(0, 4)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ ((0, 4, None)) is not matching covered
+ sage: G.edges(sort=False) # No alteration to the existing graph
+ [(0, 1, None), (0, 3, None), (1, 2, None), (2, 3, None)]
+
+ Adding an edge with both the incident vertices that is nonexistent
+ throws a :exc:`ValueError` exception, as the resulting graph would
+ have been disconnected::
+
+ sage: C = graphs.CycleGraph(4)
+ sage: G = MatchingCoveredGraph(C)
+ sage: G.add_edge(4, 5)
+ Traceback (most recent call last):
+ ...
+ ValueError: the graph obtained after the addition of edge
+ ((4, 5, None)) is not matching covered
+ sage: G.edges(sort=False) # No alteration to the existing graph
+ [(0, 1, None), (0, 3, None), (1, 2, None), (2, 3, None)]
+
+ Adding a self-loop::
+
+ sage: H = graphs.HeawoodGraph()
+ sage: G = MatchingCoveredGraph(H)
+ sage: v = next(G.vertex_iterator())
+ sage: G.add_edge(v, v)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+ """
+ if label is None:
+ if v is None:
+ try:
+ u, v, label = u
+ except Exception:
+ try:
+ u, v = u
+ except Exception:
+ pass
+
+ else:
+ if v is None:
+ try:
+ u, v = u
+ except Exception:
+ pass
+
+ if u in self and v in self:
+ if u == v:
+ raise ValueError('loops are not allowed in '
+ 'matching covered graphs')
+
+ # TODO: A ligher incremental method to check whether the new graph
+ # is matching covered instead of creating a new graph and checking
+
+ G = Graph(self, multiedges=self.allows_multiple_edges())
+ G.add_edge(u, v, label=label)
+
+ try:
+ self.__init__(data=G, matching=self.get_matching())
+
+ except Exception:
+ raise ValueError('the graph obtained after the addition of '
+ 'edge (%s) is not matching covered'
+ % str((u, v, label)))
+
+ else:
+ # At least one of u or v is a nonexistent vertex.
+ # Thus, the resulting graph is either disconnected
+ # or has an odd order, hence not matching covered
+ raise ValueError('the graph obtained after the addition of edge '
+ '(%s) is not matching covered'
+ % str((u, v, label)))
+
+ @doc_index('Overwritten methods')
+ def add_edges(self, edges, loops=False):
+ r"""
+ Add edges from an iterable container.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.add_edges` method
+ to ensure that resultant graph is also matching covered.
+
+ INPUT:
+
+ - ``edges`` -- an iterable of edges, given either as ``(u, v)``
+ or ``(u, v, 'label')``
+
+ - ``loops`` -- boolean (default: ``False``); note that this shall
+ always be set to either ``False`` or ``None`` (since matching covered
+ graphs are free of loops), in which case all the loops
+ ``(v, v, 'label')`` are removed from the iterator. If ``loops`` is
+ set to ``True``, a :exc:`ValueError` is thrown.
+
+ OUTPUT:
+
+ - If ``loops`` is set to ``True``, a :exc:`ValueError` is returned.
+
+ - If ``edges`` is provided with a valid format, but addition of the
+ edges leave the resulting graph not being matching covered, a
+ :exc:`ValueError` is returned without any alteration to the existing
+ matching covered graph. If the addition of the edges preserves the
+ property of matching covered, then the graph is updated and nothing
+ is returned.
+
+ - If ``edges`` is provided with an invalid format, a :exc:`ValueError`
+ is returned.
+
+ EXAMPLES:
+
+ Providing with an empty list of edges::
+
+ sage: C = graphs.CycleGraph(6)
+ sage: G = MatchingCoveredGraph(C)
+ sage: G.add_edges([])
+ sage: G == C
+ True
+
+ Adding some edges, the incident vertices of each of which are existent,
+ such that the resulting graph is matching covered::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: G = MatchingCoveredGraph(S)
+ sage: F = [(0, 4), (2, 4), (4, 6), (4, 7)]
+ sage: G.add_edges(F)
+ sage: G.edges(sort=True)
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 6, None),
+ (1, 2, None), (1, 4, None), (2, 4, None), (2, 5, None),
+ (2, 7, None), (3, 4, None), (3, 6, None), (4, 5, None),
+ (4, 6, None), (4, 7, None), (5, 7, None), (6, 7, None)]
+
+ Adding some edges, at least one of the incident vertices of some of
+ which are nonexistent such that the resulting graph is matching
+ covered::
+
+ sage: C = graphs.CycleGraph(8)
+ sage: G = MatchingCoveredGraph(C)
+ sage: F = [(0, 9), (1, 8), (2, 9), (3, 8),
+ ....: (4, 9), (5, 8), (6, 9), (7, 8)]
+ sage: G.add_edges(F)
+ sage: G.edges(sort=True)
+ [(0, 1, None), (0, 7, None), (0, 9, None), (1, 2, None),
+ (1, 8, None), (2, 3, None), (2, 9, None), (3, 4, None),
+ (3, 8, None), (4, 5, None), (4, 9, None), (5, 6, None),
+ (5, 8, None), (6, 7, None), (6, 9, None), (7, 8, None)]
+ sage: G.is_isomorphic(graphs.BiwheelGraph(5))
+ True
+
+ Adding a removable double ear to a matching covered graph::
+
+ sage: H = graphs.HexahedralGraph()
+ sage: G = MatchingCoveredGraph(H)
+ sage: F = {(0, 8, None), (1, 10), (4, 11, 'label'),
+ ....: (5, 9), (8, 9), (10, 11)}
+ sage: G.add_edges(F)
+ sage: G.edges(sort=True)
+ [(0, 1, None), (0, 3, None), (0, 4, None), (0, 8, None),
+ (1, 2, None), (1, 5, None), (1, 10, None), (2, 3, None),
+ (2, 6, None), (3, 7, None), (4, 5, None), (4, 7, None),
+ (4, 11, 'label'), (5, 6, None), (5, 9, None), (6, 7, None),
+ (8, 9, None), (10, 11, None)]
+
+ Adding some edges, the incident vertices of each of which are existent,
+ such that the resulting graph is NOT matching covered::
+
+ sage: C = graphs.CycleGraph(6)
+ sage: G = MatchingCoveredGraph(C)
+ sage: F = [(0, 2), (3, 5)]
+ sage: G.add_edges(F)
+ Traceback (most recent call last):
+ ...
+ ValueError: the resulting graph after the addition ofthe edges is not matching covered
+
+ Adding some edges, at least one of the incident vertices of some of
+ which are nonexistent such that the resulting graph is NOT matching
+ covered::
+
+ sage: H = graphs.HexahedralGraph()
+ sage: G = MatchingCoveredGraph(H)
+ sage: F = [(3, 8), (6, 9), (8, 9)]
+ sage: G.add_edges(F)
+ Traceback (most recent call last):
+ ...
+ ValueError: the resulting graph after the addition ofthe edges is not matching covered
+ sage: I = [(0, 8), (1, 9)]
+ sage: G.add_edges(I)
+ Traceback (most recent call last):
+ ...
+ ValueError: the resulting graph after the addition ofthe edges is not matching covered
+ sage: J = [(u, 8) for u in range(8)]
+ sage: G.add_edges(J)
+ Traceback (most recent call last):
+ ...
+ ValueError: odd order is not allowed for matching covered graphs
+
+ Setting the parameter ``loops`` to either ``False`` or ``None``::
+
+ sage: W = graphs.WheelGraph(6)
+ sage: G = MatchingCoveredGraph(W)
+ sage: F = [(0, 0), (1, 3), (2, 4)]
+ sage: G.add_edges(edges=F, loops=False)
+ sage: G.edges(sort=True)
+ [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None),
+ (0, 5, None), (1, 2, None), (1, 3, None), (1, 5, None),
+ (2, 3, None), (2, 4, None), (3, 4, None), (4, 5, None)]
+ sage: J = [(1, 1), (3, 5)]
+ sage: G.add_edges(edges=J, loops=True)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+ sage: G.edges(sort=True)
+ [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None),
+ (0, 5, None), (1, 2, None), (1, 3, None), (1, 5, None),
+ (2, 3, None), (2, 4, None), (3, 4, None), (4, 5, None)]
+
+ Setting the parameter ``loops`` to ``True``::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: F = [(0, 0), (0, 2), (0, 3)]
+ sage: G.add_edges(edges=F, loops=True)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+
+ Adding a multiple edge::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: G = MatchingCoveredGraph(S)
+ sage: G.allow_multiple_edges(True)
+ sage: F = [(0, 1, 'label'), (0, 4), (1, 2)]
+ sage: G.add_edges(F)
+ sage: G.edges(sort=False)
+ [(0, 1, None), (0, 1, 'label'), (0, 3, None), (0, 4, None),
+ (0, 6, None), (1, 2, None), (1, 2, None), (1, 4, None),
+ (2, 5, None), (2, 7, None), (3, 4, None), (3, 6, None),
+ (4, 5, None), (5, 7, None), (6, 7, None)]
+
+ TESTS:
+
+ Providing with an edge in ``edges`` that has 0 values to unpack::
+
+ sage: W = graphs.WagnerGraph()
+ sage: G = MatchingCoveredGraph(W)
+ sage: G.add_edges([()])
+ Traceback (most recent call last):
+ ...
+ ValueError: need more than 0 values to unpack
+
+ Providing with an edge in ``edges`` that has precisely one value to unpack::
+
+ sage: T = graphs.TruncatedBiwheelGraph(10)
+ sage: G = MatchingCoveredGraph(T)
+ sage: G.add_edges([(0, )])
+ Traceback (most recent call last):
+ ...
+ ValueError: need more than 1 value to unpack
+
+ Providing with an edge in ``edges`` that has more than 3 values to unpack::
+
+ sage: B = graphs.BiwheelGraph(5)
+ sage: G = MatchingCoveredGraph(B)
+ sage: G.add_edges([(0, 1, 2, 3, 4)])
+ Traceback (most recent call last):
+ ...
+ ValueError: too many values to unpack (expected 2)
+
+ Providing with an edge of unknown data type::
+
+ sage: M = graphs.MurtyGraph()
+ sage: G = MatchingCoveredGraph(M)
+ sage: F = ['', 'edge', None, 1234]
+ sage: G.add_edges(F)
+ Traceback (most recent call last):
+ ...
+ TypeError: input edges is of unknown type
+ """
+ if loops:
+ raise ValueError('loops are not allowed in '
+ 'matching covered graphs')
+
+ if not edges: # do nothing
+ return
+
+ for edge in edges:
+ if isinstance(edge, tuple):
+ if len(edge) == 0:
+ raise ValueError('need more than 0 values to unpack')
+
+ elif len(edge) == 1:
+ raise ValueError('need more than 1 value to unpack')
+
+ elif len(edge) > 3:
+ raise ValueError('too many values to unpack (expected 2)')
+
+ else:
+ raise TypeError('input edges is of unknown type')
+
+ # Remove potentially duplicated edges
+ edges = list(set(edges))
+
+ # Remove all the loops from edges
+ for edge in edges:
+ if edge[0] == edge[1]:
+ edges.remove(edge)
+
+ # Check if all the incident vertices of the input edges are existent
+ new_vertices = list(set([x for u, v, *_ in edges for x in [u, v]]))
+
+ for vertex in new_vertices[:]:
+ if vertex in self:
+ new_vertices.remove(vertex)
+
+ # Throw error if the no. of new vertices is odd
+ if len(new_vertices) % 2:
+ raise ValueError('odd order is not allowed for '
+ 'matching covered graphs')
+
+ try:
+ G = Graph(self, multiedges=self.allows_multiple_edges())
+ G.add_edges(edges=edges, loops=loops)
+
+ # Check if G has a vertex with at most 1 neighbor
+ if any(len(G.neighbors(v)) <= 1 for v in G):
+ raise ValueError('the resulting graph after the addition of'
+ 'the edges is not matching covered')
+
+ # If all the vertices are existent, the existing perfect matching
+ # can be used.
+ if not new_vertices:
+ self.__init__(data=G, matching=self.get_matching())
+
+ else:
+ # Check if the existing perfect matching may be extended to a
+ # perfect matching of the new graph
+ edges_with_two_new_vertices = []
+
+ for edge in edges:
+ if edge[0] in new_vertices and edge[1] in new_vertices:
+ edges_with_two_new_vertices.append(edge)
+
+ H = Graph(data=edges_with_two_new_vertices, format='list_of_edges')
+ M = Graph(self.get_matching()).union(Graph(H.matching()))
+
+ # Check if M is a perfect matching of the resulting graph
+ if (G.order() != 2*M.size()):
+ M = None
+
+ self.__init__(data=G, matching=M)
+
+ except Exception:
+ raise ValueError('the resulting graph after the addition of'
+ 'the edges is not matching covered')
+
+ @doc_index('Overwritten methods')
+ def add_vertex(self, name=None):
+ r"""
+ Add a vertex to the (matching covered) graph.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.add_vertex` method
+ to ensure that isolated vertices are forbidden in
+ :class:`~MatchingCoveredGraph`.
+
+ INPUT:
+
+ - ``name`` -- an immutable object (default: ``None``); when no name is
+ specified (default), then the new vertex will be represented by the
+ least integer not already representing a vertex. ``name`` must be an
+ immutable object (e.g., an integer, a tuple, etc.).
+
+ OUTPUT:
+
+ - If ``name`` specifies an existing vertex, then nothing is done.
+ Otherwise a :exc:`ValueError` is returned with no change to the
+ existing (matching covered) graph is returned since matching covered
+ graphs are free of isolated vertices.
+
+ EXAMPLES:
+
+ Adding an existing vertex::
+
+ sage: P = graphs.PetersenGraph()
+ sage: P
+ Petersen graph: Graph on 10 vertices
+ sage: G = MatchingCoveredGraph(P)
+ sage: G
+ Matching covered petersen graph: graph on 10 vertices
+ sage: u = next(G.vertex_iterator())
+ sage: G.add_vertex(u)
+ sage: G
+ Matching covered petersen graph: graph on 10 vertices
+
+ Adding a new/ non-existing vertex::
+
+ sage: G.add_vertex()
+ Traceback (most recent call last):
+ ...
+ ValueError: isolated vertices are not allowed in matching covered graphs
+ sage: u = 100
+ sage: G.add_vertex(u)
+ Traceback (most recent call last):
+ ...
+ ValueError: isolated vertices are not allowed in matching covered graphs
+ """
+ if name not in self:
+ raise ValueError('isolated vertices are not allowed in '
+ 'matching covered graphs')
+
+ @doc_index('Overwritten methods')
+ def add_vertices(self, vertices):
+ r"""
+ Add vertices to the (matching covered) graph from an iterable container
+ of vertices.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.add_vertices` method
+ to ensure that isolated vertices are forbidden in
+ :class:`~MatchingCoveredGraph`.
+
+ INPUT:
+
+ - ``vertices`` -- iterator container of vertex labels. A new label is
+ created, used and returned in the output list for all ``None`` values
+ in ``vertices``.
+
+ OUTPUT:
+
+ - If all of the vertices are existing vertices of the (matching
+ covered) graph, then nothing is done; otherwise a :exc:`ValueError`
+ is returned with no change to the existing (matching covered) graph
+ since matching covered graphs are free of isolated vertices.
+
+ EXAMPLES:
+
+ Adding a list of already existing vertices::
+
+ sage: T = graphs.TruncatedBiwheelGraph(15)
+ sage: T
+ Truncated biwheel graph: Graph on 30 vertices
+ sage: G = MatchingCoveredGraph(T)
+ sage: G
+ Matching covered truncated biwheel graph: graph on 30 vertices
+ sage: S = [0, 1, 2, 3] # We choose 4 existing vertices
+ sage: G.add_vertices(S)
+ sage: G
+ Matching covered truncated biwheel graph: graph on 30 vertices
+
+ Adding a list of vertices in which at least one is non-existent or
+ ``None`` or possibly both::
+
+ sage: T = graphs.CompleteGraph(2)
+ sage: T
+ Complete graph: Graph on 2 vertices
+ sage: G = MatchingCoveredGraph(T)
+ sage: G
+ Matching covered complete graph: graph on 2 vertices
+ sage: S1 = [2, 3, 4]
+ sage: G.add_vertices(S1)
+ Traceback (most recent call last):
+ ...
+ ValueError: isolated vertices are not allowed in matching covered graphs
+ sage: S2 = [None, None]
+ sage: G.add_vertices(S2)
+ Traceback (most recent call last):
+ ...
+ ValueError: isolated vertices are not allowed in matching covered graphs
+ sage: S3 = [2, None, None, 5]
+ sage: G.add_vertices(S3)
+ Traceback (most recent call last):
+ ...
+ ValueError: isolated vertices are not allowed in matching covered graphs
+ """
+ if any(vertex not in self for vertex in vertices):
+ raise ValueError('isolated vertices are not allowed in '
+ 'matching covered graphs')
+
+ @doc_index('Overwritten methods')
+ def allow_loops(self, new, check=True):
+ r"""
+ Change whether loops are allowed in (matching covered) graphs.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.allow_loops` method
+ to ensure that loops are forbidden in :class:`~MatchingCoveredGraph`.
+
+ INPUT:
+
+ - ``new`` -- boolean
+
+ - ``check`` -- boolean (default: ``True``); whether to remove existing
+ loops from the graph when the new status is ``False``. It is an
+ argument in
+ :meth:`~sage.graphs.generic_graph.GenericGraph.allow_loops` method
+ and is not used in this overwritten one.
+
+ OUTPUT:
+
+ - A :exc:`ValueError` is returned with no change to the existing
+ (matching covered) graph if ``new`` is ``True`` since a matching
+ covered graph, by definition, is free of self-loops. If ``new`` is
+ set to ``False``, there is no output.
+
+ EXAMPLES:
+
+ Petersen graph is matching covered::
+
+ sage: P = graphs.PetersenGraph()
+ sage: P.is_matching_covered()
+ True
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.allow_loops(True)
+ Traceback (most recent call last):
+ ...
+ ValueError: loops are not allowed in matching covered graphs
+ """
+ if new:
+ raise ValueError('loops are not allowed in '
+ 'matching covered graphs')
+
+ @doc_index('Overwritten methods')
+ def allows_loops(self):
+ r"""
+ Return whether loops are permitted in (matching covered) graphs.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.allows_loops` method
+ to show that loops are forbidden in :class:`~MatchingCoveredGraph`.
+
+ OUTPUT:
+
+ - A boolean value ``False`` is returned, since matching covered graphs,
+ by definition, are free of loops.
+
+ EXAMPLES:
+
+ Petersen graph is matching covered::
+
+ sage: P = graphs.PetersenGraph()
+ sage: P.is_matching_covered()
+ True
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.allows_loops()
+ False
+ """
+ return False
+
+ @doc_index('Overwritten methods')
+ def delete_vertex(self, vertex, in_order=False):
+ r"""
+ Delete a vertex, removing all incident edges.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.delete_vertex`
+ method to ensure that an odd order is forbidden in
+ :class:`~MatchingCoveredGraph`.
+
+ INPUT:
+
+ - ``vertex`` -- a vertex that is to be deleted.
+
+ - ``in_order`` -- boolean (default: ``False``); if ``True``, this
+ deletes the `i`-th vertex in the sorted list of vertices, i.e.
+ ``G.vertices(sort=True)[i]``
+
+ OUTPUT:
+
+ - Deleting a non-existent vertex raises a :exc:`ValueError` exception;
+ also a (different) :exc:`ValueError` is returned on deleting an
+ existing vertex since matching covered graphs are of even order. In
+ both cases no modifications are made to the existing (matching
+ covered) graph.
+
+ EXAMPLES:
+
+ Deleting a non-existent vertex::
+
+ sage: W = graphs.WheelGraph(12)
+ sage: G = MatchingCoveredGraph(W)
+ sage: u = 100
+ sage: G.delete_vertex(u)
+ Traceback (most recent call last):
+ ...
+ ValueError: vertex (100) not in the graph
+ sage: G.delete_vertex(vertex=u, in_order=True)
+ Traceback (most recent call last):
+ ...
+ ValueError: vertex (100) not in the graph
+
+ Deleting an existing vertex::
+
+ sage: W = graphs.WheelGraph(12)
+ sage: G = MatchingCoveredGraph(W)
+ sage: u = next(G.vertex_iterator())
+ sage: G.delete_vertex(u)
+ Traceback (most recent call last):
+ ...
+ ValueError: odd order is not allowed for matching covered graphs
+ sage: G.delete_vertex(vertex=u, in_order=True)
+ Traceback (most recent call last):
+ ...
+ ValueError: odd order is not allowed for matching covered graphs
+ """
+ if vertex not in self:
+ raise ValueError('vertex (%s) not in the graph' % str(vertex))
+
+ if in_order:
+ vertex = self.vertices(sort=True)[vertex]
+
+ raise ValueError('odd order is not allowed for '
+ 'matching covered graphs')
+
+ @doc_index('Overwritten methods')
+ def delete_vertices(self, vertices):
+ r"""
+ Delete specified vertices form ``self``.
+
+ This method deletes the vertices from the iterable container
+ ``vertices`` from ``self`` along with incident edges. An error is
+ raised if the resulting graph is not matching covered.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.generic_graph.GenericGraph.delete_vertices`
+ method to ensure that an odd order is forbidden in
+ :class:`~MatchingCoveredGraph`.
+
+ INPUT:
+
+ - ``vertices`` -- a list/ set of vertices that are to be deleted.
+
+ OUTPUT:
+
+ - Deleting a non-existent vertex will raise a :exc:`ValueError`
+ exception, in which case none of the vertices in ``vertices``
+ is deleted.
+
+ - If all of the vertices in the list/ set provided exist in the graph,
+ but the resulting graph after deletion of all of those is not
+ matching covered, then a :exc:`ValueError` exception is raised
+ without any alterations to the existing (matching covered) graph,
+ otherwise the vertices are deleted and nothing is returned.
+
+ EXAMPLES:
+
+ Providing with an empty list of vertices::
+
+ sage: C = graphs.CycleGraph(6)
+ sage: G = MatchingCoveredGraph(C)
+ sage: G.delete_vertices([])
+ sage: G == C
+ True
+
+ Removing all the existent vertices::
+
+ sage: M = graphs.MoebiusLadderGraph(10)
+ sage: G = MatchingCoveredGraph(M)
+ sage: S = list(G.vertices())
+ sage: G.delete_vertices(S)
+ Traceback (most recent call last):
+ ...
+ ValueError: the resulting graph after the removal of the vertices
+ is trivial, therefore is not matching covered
+
+ Providing with a list of vertices with at least one non-existent
+ vertex::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: S
+ Staircase graph: Graph on 8 vertices
+ sage: G = MatchingCoveredGraph(S)
+ sage: G
+ Matching covered staircase graph: graph on 8 vertices
+ sage: T = list(range(5, 20, 2))
+ sage: G.delete_vertices(T)
+ Traceback (most recent call last):
+ ...
+ ValueError: vertex (9) not in the graph
+
+ Removing an odd no. of distinct vertices from
+ a matching covered graph::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: S = [0, 1, 2, 10, 10, 100]
+ sage: G.delete_vertices(S)
+ Traceback (most recent call last):
+ ...
+ ValueError: an odd no. of distinct vertices can not be
+ removed from a matching covered graph
+
+ Providing with a list of existent vertices whose deletion results in a
+ graph which is not matching covered::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: S
+ Staircase graph: Graph on 8 vertices
+ sage: G = MatchingCoveredGraph(S)
+ sage: G
+ Matching covered staircase graph: graph on 8 vertices
+ sage: T = [1, 4]
+ sage: G.delete_vertices(T)
+ Traceback (most recent call last):
+ ...
+ ValueError: the resulting graph after the removal of
+ the vertices is not matching covered
+
+ Providing with a list of existent vertices after the deletion of which
+ the resulting graph is still matching covered; note that in the
+ following example, after the deletion of two vertices from a staircase
+ graph, the resulting graph is NOT a staircase graph
+ (see :issue:`38768`)::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: S
+ Staircase graph: Graph on 8 vertices
+ sage: G = MatchingCoveredGraph(S)
+ sage: G
+ Matching covered staircase graph: graph on 8 vertices
+ sage: T = [6, 7]
+ sage: G.delete_vertices(T)
+ sage: G # Matching covered graph on 6 vertices
+ Matching covered staircase graph: graph on 6 vertices
+ """
+ if not vertices: # do nothing
+ return
+
+ # Remove potentially duplicated vertices
+ vertices = set(vertices)
+
+ if len(vertices) % 2: # try to remove an odd number of vertices
+ raise ValueError('an odd no. of distinct vertices can not be '
+ 'removed from a matching covered graph')
+
+ for vertex in vertices:
+ if vertex not in self:
+ raise ValueError('vertex (%s) not in the graph' % str(vertex))
+
+ if self.order() == len(vertices):
+ raise ValueError('the resulting graph after the removal of the '
+ 'vertices is trivial, therefore is not '
+ 'matching covered')
+
+ try:
+ G = Graph(self, multiedges=self.allows_multiple_edges())
+ G.delete_vertices(vertices)
+
+ M = Graph(self.get_matching())
+
+ M.delete_vertices(vertices)
+ # The resulting matching after the removal of the input vertices
+ # must be a valid perfect matching of the resulting graph obtained
+ # after the removal of the vertices
+
+ if (G.order() != 2*M.size()):
+ M = None
+
+ self.__init__(data=G, matching=M)
+
+ except Exception:
+ raise ValueError('the resulting graph after the removal of '
+ 'the vertices is not matching covered')
+
+ @doc_index('Miscellaneous methods')
+ def get_matching(self):
+ r"""
+ Return an :class:`~EdgesView` of ``self._matching``.
+
+ OUTPUT:
+
+ - This method returns :class:`EdgesView` of the edges of a
+ perfect matching of the (matching covered) graph.
+
+ EXAMPLES:
+
+ If one specifies a perfect matching while initializing the object, the
+ value of ``self._matching`` is captures the same matching::
+
+ sage: P = graphs.PetersenGraph()
+ sage: M = [(0, 1), (2, 3), (4, 9), (5, 7), (6, 8)]
+ sage: G = MatchingCoveredGraph(P, M)
+ sage: sorted(G.get_matching())
+ [(0, 1), (2, 3), (4, 9), (5, 7), (6, 8)]
+ sage: M == sorted(G.get_matching())
+ True
+
+ If no matching is specified while initilizing a matching covered graph,
+ a perfect is computed
+ :meth:`~sage.graphs.graph.Graph.matching` and that is captured as
+ ``self._matching``::
+
+ sage: P = graphs.PetersenGraph()
+ sage: M = P.matching()
+ sage: G = MatchingCoveredGraph(P)
+ sage: sorted(G.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+ sage: sorted(M) == sorted(G.get_matching())
+ True
+ """
+ return self._matching
+
+ @doc_index('Overwritten methods')
+ def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0,
+ *, integrality_tolerance=1e-3):
+ r"""
+ Check whether the graph has a perfect matching.
+
+ .. NOTE::
+
+ This method overwrites the
+ :meth:`~sage.graphs.graph.Graph.has_perfect_matching` method in
+ order to return ``True`` (provided the input arguments are valid)
+ as matching covered graphs always admit a perfect matching.
+
+ INPUT:
+
+ - ``algorithm`` -- string (default: ``'Edmonds'``)
+
+ - ``'Edmonds'`` uses Edmonds' algorithm as implemented in NetworkX to
+ find a matching of maximal cardinality, then check whether this
+ cardinality is half the number of vertices of the graph.
+
+ - ``'LP_matching'`` uses a Linear Program to find a matching of
+ maximal cardinality, then check whether this cardinality is half the
+ number of vertices of the graph.
+
+ - ``'LP'`` uses a Linear Program formulation of the perfect matching
+ problem: put a binary variable ``b[e]`` on each edge `e`, and for
+ each vertex `v`, require that the sum of the values of the edges
+ incident to `v` is 1.
+
+ - ``solver`` -- string (default: ``None``); specifies a Mixed Integer
+ Linear Programming (MILP) solver to be used. If set to ``None``, the
+ default one is used. For more information on MILP solvers and which
+ default solver is used, see the method :meth:`solve
+ ` of the class
+ :class:`MixedIntegerLinearProgram
+ `.
+
+ - ``verbose`` -- integer (default: 0); sets the level of verbosity:
+ set to 0 by default, which means quiet (only useful when
+ ``algorithm == "LP_matching"`` or ``algorithm == "LP"``)
+
+ - ``integrality_tolerance`` -- float; parameter for use with MILP
+ solvers over an inexact base ring; see
+ :meth:`MixedIntegerLinearProgram.get_values`.
+
+ OUTPUT:
+
+ - If the input arguments are valid, a boolean (``True``) is returned as
+ a maximum matching of a matching covered graph is always a perfect
+ matching, otherwise a :exc:`~ValueError` is raised.
+
+ EXAMPLES:
+
+ Note that regardless of the algorithm (as long as the input arguments
+ are in valid format), the method always returns the boolean ``True``::
+
+ sage: P = graphs.PetersenGraph()
+ sage: P.has_perfect_matching() # Calls Graph.has_perfect_matching()
+ True
+ sage: G = MatchingCoveredGraph(P)
+ sage: G.has_perfect_matching() # Calls MatchingCoveredGraph.has_perfect_matching()
+ True
+ sage: W = graphs.WheelGraph(6)
+ sage: H = MatchingCoveredGraph(W)
+ sage: H.has_perfect_matching(algorithm='LP_matching')
+ True
+
+ Providing with an algorithm, that is not one of ``'Edmonds'``,
+ ``'LP_matching'`` or ``'LP'``::
+
+ sage: S = graphs.StaircaseGraph(4)
+ sage: J = MatchingCoveredGraph(S)
+ sage: J.has_perfect_matching(algorithm='algorithm')
+ Traceback (most recent call last):
+ ...
+ ValueError: algorithm must be set to 'Edmonds',
+ 'LP_matching' or 'LP'
+ """
+ if algorithm in ['Edmonds', 'LP_matching', 'LP']:
+ return True
+
+ raise ValueError('algorithm must be set to \'Edmonds\', '
+ '\'LP_matching\' or \'LP\'')
+
+ @doc_index('Miscellaneous methods')
+ def update_matching(self, matching):
+ r"""
+ Update the perfect matching captured in ``self._matching``.
+
+ INPUT:
+
+ - ``matching`` -- a perfect matching of the graph, that can be given
+ using any valid input format of :class:`~sage.graphs.graph.Graph`.
+
+ OUTPUT:
+
+ - If ``matching`` is a valid perfect matching of the graph, then
+ ``self._matching`` gets updated to this provided matching, or
+ otherwise an exception is returned without any alterations to
+ ``self._matching``.
+
+ EXAMPLES:
+
+ Providing with a valid perfect matching of the graph::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: sorted(G.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+ sage: M = [(0, 1), (2, 3), (4, 9), (5, 7), (6, 8)]
+ sage: G.update_matching(M)
+ sage: sorted(G.get_matching())
+ [(0, 1, None), (2, 3, None), (4, 9, None), (5, 7, None), (6, 8, None)]
+
+ TESTS:
+
+ Providing with a wrong matching::
+
+ sage: P = graphs.PetersenGraph()
+ sage: G = MatchingCoveredGraph(P)
+ sage: sorted(G.get_matching())
+ [(0, 5, None), (1, 6, None), (2, 7, None), (3, 8, None), (4, 9, None)]
+ sage: S = str('0')
+ sage: G.update_matching(S)
+ Traceback (most recent call last):
+ ...
+ RuntimeError: the string seems corrupt: valid characters are
+ ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+ sage: T = str('graph')
+ sage: G.update_matching(T)
+ Traceback (most recent call last):
+ ...
+ RuntimeError: the string (graph) seems corrupt: for n = 40,
+ the string is too short
+ sage: M = Graph(G.matching())
+ sage: M.add_edges([(0, 1), (0, 2)])
+ sage: G.update_matching(M)
+ Traceback (most recent call last):
+ ...
+ ValueError: the input is not a matching
+ sage: N = Graph(G.matching())
+ sage: N.add_edge(10, 11)
+ sage: G.update_matching(N)
+ Traceback (most recent call last):
+ ...
+ ValueError: the input is not a matching of the graph
+ sage: J = Graph()
+ sage: J.add_edges([(0, 1), (2, 3)])
+ sage: G.update_matching(J)
+ Traceback (most recent call last):
+ ...
+ ValueError: the input is not a perfect matching of the graph
+ """
+ try:
+ M = Graph(matching)
+
+ if any(d != 1 for d in M.degree()):
+ raise ValueError("the input is not a matching")
+
+ if any(not self.has_edge(edge) for edge in M.edge_iterator()):
+ raise ValueError("the input is not a matching of the graph")
+
+ if (self.order() != M.order()):
+ raise ValueError("the input is not a perfect matching of the graph")
+
+ self._matching = M.edges()
+
+ except Exception as exception:
+ raise exception
+
+
+__doc__ = __doc__.replace('{INDEX_OF_METHODS}', gen_thematic_rest_table_index(MatchingCoveredGraph, only_local_functions=False))
\ No newline at end of file
diff --git a/src/sage/graphs/meson.build b/src/sage/graphs/meson.build
index dbc1808f107..d88f1942daf 100644
--- a/src/sage/graphs/meson.build
+++ b/src/sage/graphs/meson.build
@@ -36,6 +36,7 @@ py.install_sources(
'isgci.py',
'lovasz_theta.py',
'matching.py',
+ 'matching_covered_graph.py',
'mcqd.pxd',
'orientations.py',
'partial_cube.py',
diff --git a/src/sage/graphs/orientations.py b/src/sage/graphs/orientations.py
index 26dc4df7722..af9c795f535 100644
--- a/src/sage/graphs/orientations.py
+++ b/src/sage/graphs/orientations.py
@@ -13,10 +13,14 @@
:delim: |
:meth:`orient` | Return an oriented version of `G` according the input function `f`.
+ :meth:`orientations` | Return an iterator over orientations of `G`.
:meth:`acyclic_orientations` | Return an iterator over all acyclic orientations of an undirected graph `G`.
+ :meth:`strong_orientation` | Return a strongly connected orientation of the graph `G`.
:meth:`strong_orientations_iterator` | Return an iterator over all strong orientations of a graph `G`
:meth:`random_orientation` | Return a random orientation of a graph `G`
-
+ :meth:`minimum_outdegree_orientation` | Return an orientation of `G` with the smallest possible maximum outdegree.
+ :meth:`bounded_outdegree_orientation` | Return an orientation of `G` such that every vertex `v` has out-degree less than `b(v)`.
+ :meth:`eulerian_orientation(G)` | Return a DiGraph which is an Eulerian orientation of the graph `G`.
Authors
-------
@@ -220,6 +224,165 @@ def orient(G, f, weighted=None, data_structure=None, sparse=None,
return D
+def orientations(G, data_structure=None, sparse=None):
+ r"""
+ Return an iterator over orientations of `G`.
+
+ An *orientation* of an undirected graph is a directed graph such that
+ every edge is assigned a direction. Hence there are `2^s` oriented
+ digraphs for a simple graph with `s` edges.
+
+ INPUT:
+
+ - ``G`` -- an undirected graph
+
+ - ``data_structure`` -- one of ``'sparse'``, ``'static_sparse'``, or
+ ``'dense'``; see the documentation of :class:`Graph` or :class:`DiGraph`;
+ default is the data structure of `G`
+
+ - ``sparse`` -- boolean (default: ``None``); ``sparse=True`` is an alias for
+ ``data_structure="sparse"``, and ``sparse=False`` is an alias for
+ ``data_structure="dense"``. By default (``None``), guess the most suitable
+ data structure.
+
+ .. WARNING::
+
+ This always considers multiple edges of graphs as distinguishable, and
+ hence, may have repeated digraphs.
+
+ .. SEEALSO::
+
+ - :meth:`~sage.graphs.graph.Graph.strong_orientation`
+ - :meth:`~sage.graphs.orientations.strong_orientations_iterator`
+ - :meth:`~sage.graphs.digraph_generators.DiGraphGenerators.nauty_directg`
+ - :meth:`~sage.graphs.orientations.random_orientation`
+
+ EXAMPLES::
+
+ sage: G = Graph([[1,2,3], [(1, 2, 'a'), (1, 3, 'b')]], format='vertices_and_edges')
+ sage: it = G.orientations()
+ sage: D = next(it)
+ sage: D.edges(sort=True)
+ [(1, 2, 'a'), (1, 3, 'b')]
+ sage: D = next(it)
+ sage: D.edges(sort=True)
+ [(1, 2, 'a'), (3, 1, 'b')]
+
+ TESTS::
+
+ sage: G = Graph()
+ sage: D = [g for g in G.orientations()]
+ sage: len(D)
+ 1
+ sage: D[0]
+ Digraph on 0 vertices
+
+ sage: G = Graph(5)
+ sage: it = G.orientations()
+ sage: D = next(it)
+ sage: D.size()
+ 0
+
+ sage: G = Graph([[1,2,'a'], [1,2,'b']], multiedges=True)
+ sage: len(list(G.orientations()))
+ 4
+
+ sage: G = Graph([[1,2], [1,1]], loops=True)
+ sage: len(list(G.orientations()))
+ 2
+
+ sage: G = Graph([[1,2],[2,3]])
+ sage: next(G.orientations())
+ Digraph on 3 vertices
+ sage: G = graphs.PetersenGraph()
+ sage: next(G.orientations())
+ An orientation of Petersen graph: Digraph on 10 vertices
+
+ An orientation must have the same ground set of vertices as the original
+ graph (:issue:`24366`)::
+
+ sage: G = Graph(1)
+ sage: next(G.orientations())
+ Digraph on 1 vertex
+
+ Which backend? ::
+
+ sage: next(G.orientations(data_structure='sparse', sparse=True))._backend
+ Traceback (most recent call last):
+ ...
+ ValueError: cannot specify both 'sparse' and 'data_structure'
+ sage: next(G.orientations(sparse=True))._backend
+
+ sage: next(G.orientations(sparse=False))._backend
+
+ sage: next(G.orientations())._backend
+
+ sage: G = Graph(1, data_structure='dense')
+ sage: next(G.orientations())._backend
+
+ sage: G = Graph(1, data_structure='static_sparse')
+ sage: next(G.orientations())._backend
+
+
+ Check that the embedding is copied::
+
+ sage: G = Graph([(0, 1), (0, 2), (1, 2)])
+ sage: embedding = {0: [1, 2], 1: [2, 0], 2: [0, 1]}
+ sage: G.set_embedding(embedding)
+ sage: next(G.orientations()).get_embedding() == embedding
+ True
+ sage: G = Graph()
+ sage: G.set_embedding({})
+ sage: next(G.orientations()).get_embedding() == {}
+ True
+ """
+ if sparse is not None:
+ if data_structure is not None:
+ raise ValueError("cannot specify both 'sparse' and 'data_structure'")
+ data_structure = "sparse" if sparse else "dense"
+ if data_structure is None:
+ from sage.graphs.base.dense_graph import DenseGraphBackend
+ from sage.graphs.base.sparse_graph import SparseGraphBackend
+ if isinstance(G._backend, DenseGraphBackend):
+ data_structure = "dense"
+ elif isinstance(G._backend, SparseGraphBackend):
+ data_structure = "sparse"
+ else:
+ data_structure = "static_sparse"
+
+ name = G.name()
+ if name:
+ name = 'An orientation of ' + name
+
+ if not G.size():
+ D = DiGraph(data=[G, []],
+ format='vertices_and_edges',
+ name=name,
+ pos=G._pos,
+ multiedges=G.allows_multiple_edges(),
+ loops=G.allows_loops(),
+ data_structure=data_structure)
+ if hasattr(G, '_embedding'):
+ D._embedding = copy(G._embedding)
+ yield D
+ return
+
+ E = [[(u, v, label), (v, u, label)] if u != v else [(u, v, label)]
+ for u, v, label in G.edge_iterator()]
+ from itertools import product
+ for edges in product(*E):
+ D = DiGraph(data=[G, edges],
+ format='vertices_and_edges',
+ name=name,
+ pos=G._pos,
+ multiedges=G.allows_multiple_edges(),
+ loops=G.allows_loops(),
+ data_structure=data_structure)
+ if hasattr(G, '_embedding'):
+ D._embedding = copy(G._embedding)
+ yield D
+
+
def acyclic_orientations(G):
r"""
Return an iterator over all acyclic orientations of an undirected graph `G`.
@@ -486,6 +649,124 @@ def helper(G, globO, m, k):
yield D
+def strong_orientation(G):
+ r"""
+ Return a strongly connected orientation of the graph `G`.
+
+ An orientation of an undirected graph is a digraph obtained by giving an
+ unique direction to each of its edges. An orientation is said to be strong
+ if there is a directed path between each pair of vertices. See also the
+ :wikipedia:`Strongly_connected_component`.
+
+ If the graph is 2-edge-connected, a strongly connected orientation can be
+ found in linear time. If the given graph is not 2-connected, the orientation
+ returned will ensure that each 2-connected component has a strongly
+ connected orientation.
+
+ INPUT:
+
+ - ``G`` -- an undirected graph
+
+ OUTPUT: a digraph representing an orientation of the current graph
+
+ .. NOTE::
+
+ - This method assumes that the input the graph is connected.
+ - The time complexity is `O(n+m)` for ``SparseGraph`` and `O(n^2)` for
+ ``DenseGraph`` .
+
+ .. SEEALSO::
+
+ - :meth:`~sage.graphs.graph.Graph.orientations`
+ - :meth:`~sage.graphs.orientations.strong_orientations_iterator`
+ - :meth:`~sage.graphs.digraph_generators.DiGraphGenerators.nauty_directg`
+ - :meth:`~sage.graphs.orientations.random_orientation`
+
+ EXAMPLES:
+
+ For a 2-regular graph, a strong orientation gives to each vertex an
+ out-degree equal to 1::
+
+ sage: g = graphs.CycleGraph(5)
+ sage: g.strong_orientation().out_degree()
+ [1, 1, 1, 1, 1]
+
+ The Petersen Graph is 2-edge connected. It then has a strongly connected
+ orientation::
+
+ sage: g = graphs.PetersenGraph()
+ sage: o = g.strong_orientation()
+ sage: len(o.strongly_connected_components())
+ 1
+
+ The same goes for the CubeGraph in any dimension::
+
+ sage: all(len(graphs.CubeGraph(i).strong_orientation().strongly_connected_components()) == 1
+ ....: for i in range(2,6))
+ True
+
+ A multigraph also has a strong orientation::
+
+ sage: g = Graph([(0, 1), (0, 2), (1, 2)] * 2, multiedges=True)
+ sage: g.strong_orientation()
+ Multi-digraph on 3 vertices
+ """
+ d = DiGraph(multiedges=G.allows_multiple_edges())
+ i = 0
+
+ # The algorithm works through a depth-first search. Any edge used in the
+ # depth-first search is oriented in the direction in which it has been
+ # used. All the other edges are oriented backward
+
+ v = next(G.vertex_iterator())
+ seen = {}
+ i = 1
+
+ # Time at which the vertices have been discovered
+ seen[v] = i
+
+ # indicates the stack of edges to explore
+ next_ = G.edges_incident(v)
+
+ while next_:
+ e = next_.pop()
+
+ # Ignore loops
+ if e[0] == e[1]:
+ continue
+
+ # We assume e[0] to be a `seen` vertex
+ e = e if seen.get(e[0], False) is not False else (e[1], e[0], e[2])
+
+ # If we discovered a new vertex
+ if seen.get(e[1], False) is False:
+ d.add_edge(e)
+ next_.extend(ee for ee in G.edges_incident(e[1])
+ if ((e[0], e[1]) != (ee[0], ee[1])) and ((e[0], e[1]) != (ee[1], ee[0])))
+ i += 1
+ seen[e[1]] = i
+
+ # Else, we orient the edges backward
+ else:
+ if seen[e[0]] < seen[e[1]]:
+ d.add_edge(e[1], e[0], e[2])
+ else:
+ d.add_edge(e)
+
+ # Case of multiple edges. If another edge has already been inserted, we add
+ # the new one in the opposite direction.
+ tmp = None
+ for e in G.multiple_edges():
+ if tmp == (e[0], e[1]):
+ if d.has_edge(e[0], e[1]):
+ d.add_edge(e[1], e[0], e[2])
+ else:
+ d.add_edge(e)
+ tmp = (e[0], e[1])
+
+ return d
+
+
def strong_orientations_iterator(G):
r"""
Return an iterator over all strong orientations of a graph `G`.
@@ -757,3 +1038,412 @@ def random_orientation(G):
D.add_edge(v, u, l)
rbits >>= 1
return D
+
+
+def minimum_outdegree_orientation(G, use_edge_labels=False, solver=None, verbose=0,
+ *, integrality_tolerance=1e-3):
+ r"""
+ Return an orientation of `G` with the smallest possible maximum outdegree.
+
+ Given a Graph `G`, it is polynomial to compute an orientation `D` of the
+ edges of `G` such that the maximum out-degree in `D` is minimized. This
+ problem, though, is NP-complete in the weighted case [AMOZ2006]_.
+
+ INPUT:
+
+ - ``G`` -- an undirected graph
+
+ - ``use_edge_labels`` -- boolean (default: ``False``)
+
+ - When set to ``True``, uses edge labels as weights to compute the
+ orientation and assumes a weight of `1` when there is no value available
+ for a given edge.
+
+ - When set to ``False`` (default), gives a weight of 1 to all the edges.
+
+ - ``solver`` -- string (default: ``None``); specifies a Mixed Integer Linear
+ Programming (MILP) solver to be used. If set to ``None``, the default one
+ is used. For more information on MILP solvers and which default solver is
+ used, see the method :meth:`solve
+ ` of the class
+ :class:`MixedIntegerLinearProgram
+ `.
+
+ - ``verbose`` -- integer (default: 0); sets the level of verbosity. Set to 0
+ by default, which means quiet.
+
+ - ``integrality_tolerance`` -- float; parameter for use with MILP solvers
+ over an inexact base ring;
+ see :meth:`MixedIntegerLinearProgram.get_values`.
+
+ EXAMPLES:
+
+ Given a complete bipartite graph `K_{n,m}`, the maximum out-degree of an
+ optimal orientation is `\left\lceil \frac {nm} {n+m}\right\rceil`::
+
+ sage: g = graphs.CompleteBipartiteGraph(3,4)
+ sage: o = g.minimum_outdegree_orientation() # needs sage.numerical.mip
+ sage: max(o.out_degree()) == integer_ceil((4*3)/(3+4)) # needs sage.numerical.mip
+ True
+
+ Show the influence of edge labels on the solution::
+
+ sage: # needs sage.numerical.mip
+ sage: g = graphs.PetersenGraph()
+ sage: o = g.minimum_outdegree_orientation(use_edge_labels=False)
+ sage: max(o.out_degree())
+ 2
+ sage: _ = [g.set_edge_label(u, v, 1) for u, v in g.edge_iterator(labels=False)]
+ sage: o = g.minimum_outdegree_orientation(use_edge_labels=True)
+ sage: max(o.out_degree())
+ 2
+ sage: g.set_edge_label(0, 1, 100)
+ sage: o = g.minimum_outdegree_orientation(use_edge_labels=True)
+ sage: max(o.out_degree())
+ 3
+
+ TESTS::
+
+ sage: from sage.graphs.orientations import minimum_outdegree_orientation
+ sage: minimum_outdegree_orientation(DiGraph()) # needs sage.numerical.mip
+ Traceback (most recent call last):
+ ...
+ ValueError: Cannot compute an orientation of a DiGraph.
+ Please convert it to a Graph if you really mean it.
+ """
+ G._scream_if_not_simple()
+ if G.is_directed():
+ raise ValueError("Cannot compute an orientation of a DiGraph. "
+ "Please convert it to a Graph if you really mean it.")
+
+ if use_edge_labels:
+ from sage.rings.real_mpfr import RR
+
+ def weight(e):
+ label = G.edge_label(e[0], e[1])
+ return label if label in RR else 1
+ else:
+ def weight(e):
+ return 1
+
+ from sage.numerical.mip import MixedIntegerLinearProgram
+
+ p = MixedIntegerLinearProgram(maximization=False, solver=solver)
+ degree = p.new_variable(nonnegative=True)
+
+ # The orientation of an edge is boolean and indicates whether the edge uv
+ # goes from u to v ( equal to 0 ) or from v to u ( equal to 1)
+ orientation = p.new_variable(binary=True)
+
+ # Whether an edge adjacent to a vertex u counts positively or negatively. To
+ # do so, we first fix an arbitrary extremity per edge uv.
+ ext = {frozenset(e): e[0] for e in G.edge_iterator(labels=False)}
+
+ def outgoing(u, e, variable):
+ if u == ext[frozenset(e)]:
+ return variable
+ return 1 - variable
+
+ for u in G:
+ p.add_constraint(p.sum(weight(e) * outgoing(u, e, orientation[frozenset(e)])
+ for e in G.edge_iterator(vertices=[u], labels=False))
+ - degree['max'], max=0)
+
+ p.set_objective(degree['max'])
+
+ p.solve(log=verbose)
+
+ orientation = p.get_values(orientation, convert=bool, tolerance=integrality_tolerance)
+
+ # All the edges from G are doubled in O ( one in each direction )
+ O = DiGraph(G)
+
+ # Builds the list of edges that should be removed
+ edges = (e[::-1] if orientation[frozenset(e)] else e
+ for e in G.edge_iterator(labels=False))
+ O.delete_edges(edges)
+
+ return O
+
+
+def bounded_outdegree_orientation(G, bound, solver=None, verbose=False,
+ *, integrality_tolerance=1e-3):
+ r"""
+ Return an orientation of `G` such that every vertex `v` has out-degree less
+ than `b(v)`.
+
+ INPUT:
+
+ - ``G`` -- an undirected graph
+
+ - ``bound`` -- maximum bound on the out-degree. Can be of three
+ different types :
+
+ * An integer `k`. In this case, computes an orientation whose maximum
+ out-degree is less than `k`.
+
+ * A dictionary associating to each vertex its associated maximum
+ out-degree.
+
+ * A function associating to each vertex its associated maximum
+ out-degree.
+
+ - ``solver`` -- string (default: ``None``); specifies a Mixed Integer Linear
+ Programming (MILP) solver to be used. If set to ``None``, the default one
+ is used. For more information on MILP solvers and which default solver is
+ used, see the method :meth:`solve
+ ` of the class
+ :class:`MixedIntegerLinearProgram
+ `.
+
+ - ``verbose`` -- integer (default: 0); sets the level of verbosity. Set to 0
+ by default, which means quiet.
+
+ - ``integrality_tolerance`` -- float; parameter for use with MILP solvers
+ over an inexact base ring;
+ see :meth:`MixedIntegerLinearProgram.get_values`.
+
+ OUTPUT:
+
+ A DiGraph representing the orientation if it exists.
+ A :exc:`ValueError` exception is raised otherwise.
+
+ ALGORITHM:
+
+ The problem is solved through a maximum flow :
+
+ Given a graph `G`, we create a ``DiGraph`` `D` defined on `E(G)\cup V(G)\cup
+ \{s,t\}`. We then link `s` to all of `V(G)` (these edges having a capacity
+ equal to the bound associated to each element of `V(G)`), and all the
+ elements of `E(G)` to `t` . We then link each `v \in V(G)` to each of its
+ incident edges in `G`. A maximum integer flow of value `|E(G)|` corresponds
+ to an admissible orientation of `G`. Otherwise, none exists.
+
+ EXAMPLES:
+
+ There is always an orientation of a graph `G` such that a vertex `v` has
+ out-degree at most `\lceil \frac {d(v)} 2 \rceil`::
+
+ sage: g = graphs.RandomGNP(40, .4)
+ sage: b = lambda v: integer_ceil(g.degree(v)/2)
+ sage: D = g.bounded_outdegree_orientation(b)
+ sage: all(D.out_degree(v) <= b(v) for v in g)
+ True
+
+ Chvatal's graph, being 4-regular, can be oriented in such a way that its
+ maximum out-degree is 2::
+
+ sage: g = graphs.ChvatalGraph()
+ sage: D = g.bounded_outdegree_orientation(2)
+ sage: max(D.out_degree())
+ 2
+
+ For any graph `G`, it is possible to compute an orientation such that
+ the maximum out-degree is at most the maximum average degree of `G`
+ divided by 2. Anything less, though, is impossible.
+
+ sage: g = graphs.RandomGNP(40, .4)
+ sage: mad = g.maximum_average_degree() # needs sage.numerical.mip
+
+ Hence this is possible ::
+
+ sage: d = g.bounded_outdegree_orientation(integer_ceil(mad/2)) # needs sage.numerical.mip
+
+ While this is not::
+
+ sage: try: # needs sage.numerical.mip
+ ....: g.bounded_outdegree_orientation(integer_ceil(mad/2-1))
+ ....: print("Error")
+ ....: except ValueError:
+ ....: pass
+
+ The bounds can be specified in different ways::
+
+ sage: g = graphs.PetersenGraph()
+ sage: b = lambda v: integer_ceil(g.degree(v)/2)
+ sage: D = g.bounded_outdegree_orientation(b)
+ sage: b_dict = {u: b(u) for u in g}
+ sage: D = g.bounded_outdegree_orientation(b_dict)
+ sage: unique_bound = 2
+ sage: D = g.bounded_outdegree_orientation(unique_bound)
+
+ TESTS:
+
+ As previously for random graphs, but more intensively::
+
+ sage: for i in range(30): # long time (up to 6s on sage.math, 2012)
+ ....: g = graphs.RandomGNP(40, .4)
+ ....: b = lambda v: integer_ceil(g.degree(v)/2)
+ ....: D = g.bounded_outdegree_orientation(b)
+ ....: if not (
+ ....: all( D.out_degree(v) <= b(v) for v in g ) or
+ ....: D.size() != g.size()):
+ ....: print("Something wrong happened")
+
+ Empty graph::
+
+ sage: Graph().bounded_outdegree_orientation(b)
+ Digraph on 0 vertices
+ """
+ G._scream_if_not_simple()
+ n = G.order()
+
+ if not n:
+ return DiGraph()
+
+ vertices = list(G)
+ vertices_id = {y: x for x, y in enumerate(vertices)}
+
+ b = {}
+
+ # Checking the input type. We make a dictionary out of it
+ if isinstance(bound, dict):
+ b = bound
+ else:
+ try:
+ b = dict(zip(vertices, map(bound, vertices)))
+ except TypeError:
+ b = dict(zip(vertices, [bound]*n))
+
+ d = DiGraph()
+
+ # Adding the edges (s,v) and ((u,v),t)
+ d.add_edges(('s', vertices_id[v], b[v]) for v in vertices)
+
+ d.add_edges(((vertices_id[u], vertices_id[v]), 't', 1)
+ for u, v in G.edges(sort=False, labels=None))
+
+ # each v is linked to its incident edges
+
+ for u, v in G.edge_iterator(labels=None):
+ u, v = vertices_id[u], vertices_id[v]
+ d.add_edge(u, (u, v), 1)
+ d.add_edge(v, (u, v), 1)
+
+ # Solving the maximum flow
+ value, flow = d.flow('s', 't', value_only=False, integer=True,
+ use_edge_labels=True, solver=solver, verbose=verbose,
+ integrality_tolerance=integrality_tolerance)
+
+ if value != G.size():
+ raise ValueError("No orientation exists for the given bound")
+
+ D = DiGraph()
+ D.add_vertices(vertices)
+
+ # The flow graph may not contain all the vertices, if they are
+ # not part of the flow...
+
+ for u in [x for x in range(n) if x in flow]:
+
+ for uu, vv in flow.neighbors_out(u):
+ v = vv if vv != u else uu
+ D.add_edge(vertices[u], vertices[v])
+
+ # I do not like when a method destroys the embedding ;-)
+ D.set_pos(G.get_pos())
+
+ return D
+
+
+def eulerian_orientation(G):
+ r"""
+ Return a DiGraph which is an Eulerian orientation of the graph `G`.
+
+ An Eulerian graph being a graph such that any vertex has an even degree, an
+ Eulerian orientation of a graph is an orientation of its edges such that
+ each vertex `v` verifies `d^+(v)=d^-(v)=d(v)/2`, where `d^+` and `d^-`
+ respectively represent the out-degree and the in-degree of a vertex.
+
+ If the graph is not Eulerian, the orientation verifies for any vertex `v`
+ that `| d^+(v)-d^-(v) | \leq 1`.
+
+ INPUT:
+
+ - ``G`` -- an undirected graph
+
+ ALGORITHM:
+
+ This algorithm is a random walk through the edges of the graph, which
+ orients the edges according to the walk. When a vertex is reached which has
+ no non-oriented edge (this vertex must have odd degree), the walk resumes at
+ another vertex of odd degree, if any.
+
+ This algorithm has time complexity in `O(n+m)` for ``SparseGraph`` and
+ `O(n^2)` for ``DenseGraph``, where `m` is the number of edges in the graph
+ and `n` is the number of vertices in the graph.
+
+ EXAMPLES:
+
+ The CubeGraph with parameter 4, which is regular of even degree, has an
+ Eulerian orientation such that `d^+ = d^-`::
+
+ sage: g = graphs.CubeGraph(4)
+ sage: g.degree()
+ [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
+ sage: o = g.eulerian_orientation()
+ sage: o.in_degree()
+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
+ sage: o.out_degree()
+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
+
+ Secondly, the Petersen Graph, which is 3 regular has an orientation such
+ that the difference between `d^+` and `d^-` is at most 1::
+
+ sage: g = graphs.PetersenGraph()
+ sage: o = g.eulerian_orientation()
+ sage: o.in_degree()
+ [2, 2, 2, 2, 2, 1, 1, 1, 1, 1]
+ sage: o.out_degree()
+ [1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
+
+ TESTS::
+
+ sage: E0 = Graph(); E4 = Graph(4) # See trac #21741
+ sage: E0.eulerian_orientation()
+ Digraph on 0 vertices
+ sage: E4.eulerian_orientation()
+ Digraph on 4 vertices
+ """
+ d = DiGraph([G, []], format='vertices_and_edges')
+
+ if not G.size():
+ return d
+
+ g = copy(G)
+
+ # list of vertices of odd degree
+ odd = [x for x in g.vertex_iterator() if g.degree(x) % 2]
+
+ # Picks the first vertex, which is preferably an odd one
+ if odd:
+ v = odd.pop()
+ else:
+ v = next(g.edge_iterator(labels=None))[0]
+ odd.append(v)
+ # Stops when there is no edge left
+ while True:
+
+ # If there is an edge adjacent to the current one
+ if g.degree(v):
+ e = next(g.edge_iterator(v))
+ g.delete_edge(e)
+ if e[0] != v:
+ e = (e[1], e[0], e[2])
+ d.add_edge(e)
+ v = e[1]
+
+ # The current vertex is isolated
+ else:
+ odd.remove(v)
+
+ # jumps to another odd vertex if possible
+ if odd:
+ v = odd.pop()
+ # Else jumps to an even vertex which is not isolated
+ elif g.size():
+ v = next(g.edge_iterator())[0]
+ odd.append(v)
+ # If there is none, we are done !
+ else:
+ return d
diff --git a/src/sage/graphs/strongly_regular_db.pyx b/src/sage/graphs/strongly_regular_db.pyx
index 0fa241ba218..72db0131c59 100644
--- a/src/sage/graphs/strongly_regular_db.pyx
+++ b/src/sage/graphs/strongly_regular_db.pyx
@@ -1840,7 +1840,7 @@ def eigenmatrix(int v, int k, int l, int mu):
return Matrix(ZZ, [[1, k, v-k-1], [1, r, -r-1], [1, s, -s-1]])
-cpdef latin_squares_graph_parameters(int v, int k, int l,int mu):
+cpdef latin_squares_graph_parameters(int v, int k, int l, int mu):
r"""
Check whether (v,k,l,mu)-strongly regular graph has parameters of an `L_g(n)` s.r.g.
diff --git a/src/sage/groups/abelian_gps/abelian_aut.py b/src/sage/groups/abelian_gps/abelian_aut.py
index 7108f311a48..c58eebc4b4f 100644
--- a/src/sage/groups/abelian_gps/abelian_aut.py
+++ b/src/sage/groups/abelian_gps/abelian_aut.py
@@ -205,6 +205,7 @@ def matrix(self):
m.set_immutable()
return m
+
class AbelianGroupAutomorphismGroup_gap(CachedRepresentation,
GroupMixinLibGAP,
Group,
@@ -403,10 +404,11 @@ def is_subgroup_of(self, G):
"""
if not isinstance(G, AbelianGroupAutomorphismGroup_gap):
raise ValueError("input must be an instance of AbelianGroup_gap")
- if not self.ambient() is G.ambient():
+ if self.ambient() is not G.ambient():
return False
return G.gap().IsSubsemigroup(self).sage()
+
class AbelianGroupAutomorphismGroup(AbelianGroupAutomorphismGroup_gap):
r"""
The full automorphism group of a finite abelian group.
@@ -467,6 +469,7 @@ def _repr_(self):
"""
return "Full group of automorphisms of %s" % self.domain()
+
class AbelianGroupAutomorphismGroup_subgroup(AbelianGroupAutomorphismGroup_gap):
r"""
Groups of automorphisms of abelian groups.
diff --git a/src/sage/groups/abelian_gps/abelian_group.py b/src/sage/groups/abelian_gps/abelian_group.py
index 0ad20d9d4fa..ec5bc722d64 100644
--- a/src/sage/groups/abelian_gps/abelian_group.py
+++ b/src/sage/groups/abelian_gps/abelian_group.py
@@ -1301,10 +1301,26 @@ def __iter__(self):
(1,)
sage: list(G)
[1]
+
+ We can also iterate over infinite groups::
+
+ sage: A = AbelianGroup([3,0,5,0])
+ sage: for a in A:
+ ....: if a^2 == A([1, 2, 3, 4]):
+ ....: print(a, a^2)
+ ....: break
+ f0^2*f1*f2^4*f3^2 f0*f1^2*f2^3*f3^4
"""
invs = self.gens_orders()
- for t in mrange(invs):
- yield self(t)
+ if 0 not in invs:
+ # The group is finite
+ yield from map(self, mrange(invs))
+ else:
+ # A similar approach works for infinite groups.
+ # (This would also work for finite groups, but is more complicated.)
+ from sage.misc.mrange import cantor_product
+ yield from map(self, cantor_product(*[range(n) if n
+ else ZZ for n in invs]))
def number_of_subgroups(self, order=None):
r"""
diff --git a/src/sage/groups/abelian_gps/abelian_group_gap.py b/src/sage/groups/abelian_gps/abelian_group_gap.py
index 199aa935f56..eb41bbd8320 100644
--- a/src/sage/groups/abelian_gps/abelian_group_gap.py
+++ b/src/sage/groups/abelian_gps/abelian_group_gap.py
@@ -39,6 +39,7 @@
from sage.structure.unique_representation import UniqueRepresentation
from sage.categories.groups import Groups
+
class AbelianGroupElement_gap(ElementLibGAP):
r"""
An element of an abelian group via libgap.
@@ -184,6 +185,7 @@ def order(self):
"""
return self.gap().Order().sage()
+
class AbelianGroupElement_polycyclic(AbelianGroupElement_gap):
r"""
An element of an abelian group using the GAP package ``Polycyclic``.
@@ -220,6 +222,7 @@ def exponents(self):
"""
return tuple(self.gap().Exponents().sage())
+
class AbelianGroup_gap(UniqueRepresentation, GroupMixinLibGAP, ParentLibGAP, AbelianGroupBase):
r"""
Finitely generated abelian groups implemented in GAP.
@@ -530,7 +533,7 @@ def is_subgroup_of(self, G):
"""
if not isinstance(G, AbelianGroup_gap):
raise ValueError("input must be an instance of AbelianGroup_gap")
- if not self.ambient() is G.ambient():
+ if self.ambient() is not G.ambient():
return False
return G.gap().IsSubsemigroup(self).sage()
@@ -620,6 +623,7 @@ def subgroup(self, gens):
gens = tuple([self(g) for g in gens])
return AbelianGroupSubgroup_gap(self.ambient(), gens)
+
class AbelianGroupGap(AbelianGroup_gap):
r"""
Abelian groups implemented using GAP.
@@ -730,6 +734,7 @@ def __reduce__(self):
"""
return AbelianGroupGap, (self.gens_orders(),)
+
class AbelianGroupSubgroup_gap(AbelianGroup_gap):
r"""
Subgroups of abelian groups with GAP.
@@ -879,6 +884,7 @@ def retract(self, x):
"""
return self(x)
+
class AbelianGroupQuotient_gap(AbelianGroup_gap):
r"""
Quotients of abelian groups by a subgroup.
diff --git a/src/sage/groups/affine_gps/group_element.py b/src/sage/groups/affine_gps/group_element.py
index fff5881868f..b1e3cd1e0cb 100644
--- a/src/sage/groups/affine_gps/group_element.py
+++ b/src/sage/groups/affine_gps/group_element.py
@@ -132,9 +132,9 @@ def __init__(self, parent, A, b=0, convert=True, check=True):
# Note: the coercion framework expects that we raise TypeError for invalid input
if not isinstance(A, Matrix):
raise TypeError('A must be a matrix')
- if not (A.parent() is parent.matrix_space()):
+ if A.parent() is not parent.matrix_space():
raise TypeError('A must be an element of ' + str(parent.matrix_space()))
- if not (b.parent() is parent.vector_space()):
+ if b.parent() is not parent.vector_space():
raise TypeError('b must be an element of ' + str(parent.vector_space()))
parent._element_constructor_check(A, b)
super().__init__(parent)
diff --git a/src/sage/groups/finitely_presented_named.py b/src/sage/groups/finitely_presented_named.py
index 8b07c5af7df..940d761ef49 100644
--- a/src/sage/groups/finitely_presented_named.py
+++ b/src/sage/groups/finitely_presented_named.py
@@ -202,6 +202,7 @@ def FinitelyGeneratedAbelianPresentation(int_list):
ret_rls = ret_rls + [x[0]**(-1)*x[1]**(-1)*x[0]*x[1] for x in gen_pairs]
return FinitelyPresentedGroup(F, tuple(ret_rls))
+
def FinitelyGeneratedHeisenbergPresentation(n=1, p=0):
r"""
Return a finite presentation of the Heisenberg group.
@@ -292,6 +293,7 @@ def commutator(a, b):
rls += [w**p for w in F.gens()]
return FinitelyPresentedGroup(F, tuple(rls))
+
def DihedralPresentation(n):
r"""
Build the Dihedral group of order `2n` as a finitely presented group.
@@ -327,6 +329,7 @@ def DihedralPresentation(n):
rls = F([1])**n, F([2])**2, (F([1])*F([2]))**2
return FinitelyPresentedGroup( F, rls )
+
def DiCyclicPresentation(n):
r"""
Build the dicyclic group of order `4n`, for `n \geq 2`, as a finitely
@@ -455,6 +458,7 @@ def QuaternionPresentation():
rls = F([1])**4, F([2,2,-1,-1]), F([1,2,1,-2])
return FinitelyPresentedGroup(F, rls)
+
def AlternatingPresentation(n):
r"""
Build the Alternating group of order `n!/2` as a finitely presented group.
@@ -521,6 +525,7 @@ def KleinFourPresentation():
rls = F([1])**2, F([2])**2, F([-1])*F([-2])*F([1])*F([2])
return FinitelyPresentedGroup(F, rls)
+
def BinaryDihedralPresentation(n):
r"""
Build a binary dihedral group of order `4n` as a finitely presented group.
@@ -561,6 +566,7 @@ def BinaryDihedralPresentation(n):
rls = (x**-2 * y**2, x**-2 * z**n, x**-2 * x*y*z)
return FinitelyPresentedGroup(F, rls)
+
def CactusPresentation(n):
r"""
Build the `n`-fruit cactus group as a finitely presented group.
diff --git a/src/sage/groups/fqf_orthogonal.py b/src/sage/groups/fqf_orthogonal.py
index 5da64f03212..e5ebd06ccdb 100644
--- a/src/sage/groups/fqf_orthogonal.py
+++ b/src/sage/groups/fqf_orthogonal.py
@@ -381,6 +381,7 @@ def _repr_(self):
"""
return "Group of isometries of \n%s\ngenerated by %s elements" % (self.invariant_form(), len(self.gens()))
+
class ActionOnFqf(Action):
r"""
Action on a finite quadratic module.
diff --git a/src/sage/groups/group.pyx b/src/sage/groups/group.pyx
index b5047594a9c..d004cdf98e2 100644
--- a/src/sage/groups/group.pyx
+++ b/src/sage/groups/group.pyx
@@ -110,7 +110,7 @@ cdef class Group(Parent):
if not isinstance(category, tuple):
category = (category,)
if not any(cat.is_subcategory(Groups()) for cat in category):
- raise ValueError("%s is not a subcategory of %s"%(category, Groups()))
+ raise ValueError("%s is not a subcategory of %s" % (category, Groups()))
Parent.__init__(self, base=base, category=category)
def is_abelian(self):
diff --git a/src/sage/groups/group_semidirect_product.py b/src/sage/groups/group_semidirect_product.py
index 7287a79f614..5e06d203172 100644
--- a/src/sage/groups/group_semidirect_product.py
+++ b/src/sage/groups/group_semidirect_product.py
@@ -31,7 +31,7 @@ def _repr_(self):
EXAMPLES::
- sage: def twist(x,y):
+ sage: def twist(x, y):
....: return y
sage: GroupSemidirectProduct(WeylGroup(['A',2],prefix='s'), # indirect doctest
....: WeylGroup(['A',3],prefix='t'), twist)
@@ -73,7 +73,7 @@ def __invert__(self):
sage: from sage.groups.group_exp import GroupExp
sage: EL = GroupExp()(L)
sage: W = L.weyl_group(prefix='s')
- sage: def twist(w,v):
+ sage: def twist(w, v):
....: return EL(w.action(v.value))
sage: G = GroupSemidirectProduct(W, EL, twist, prefix1='t')
sage: g = G.an_element(); g
@@ -105,7 +105,7 @@ def to_opposite(self):
sage: W = L.weyl_group(prefix='s'); W
Weyl Group of type ['A', 2]
(as a matrix group acting on the root lattice)
- sage: def twist(w,v):
+ sage: def twist(w, v):
....: return EL(w.action(v.value))
sage: G = GroupSemidirectProduct(W, EL, twist, prefix1='t'); G
Semidirect product of Weyl Group of type ['A', 2] (as a matrix
@@ -215,7 +215,7 @@ class GroupSemidirectProduct(CartesianProduct):
sage: G = GL(2,QQ)
sage: V = QQ^2
sage: EV = GroupExp()(V) # make a multiplicative version of V
- sage: def twist(g,v):
+ sage: def twist(g, v):
....: return EV(g*v.value)
sage: H = GroupSemidirectProduct(G, EV, twist=twist, prefix1='t'); H
Semidirect product of General Linear Group of degree 2
@@ -229,7 +229,7 @@ class GroupSemidirectProduct(CartesianProduct):
sage: # needs sage.rings.number_field
sage: cartan_type = CartanType(['A',2])
sage: W = WeylGroup(cartan_type, prefix='s')
- sage: def twist(w,v):
+ sage: def twist(w, v):
....: return w*v*(~w)
sage: WW = GroupSemidirectProduct(W, W, twist=twist, print_tuple=True)
sage: s = Family(cartan_type.index_set(), lambda i: W.simple_reflection(i))
@@ -252,7 +252,7 @@ def __init__(self, G, H, twist=None, act_to_right=True, prefix0=None,
EXAMPLES::
- sage: def twist(x,y):
+ sage: def twist(x, y):
....: return y
sage: import __main__
sage: __main__.twist = twist
@@ -297,7 +297,7 @@ def act_to_right(self):
EXAMPLES::
- sage: def twist(x,y):
+ sage: def twist(x, y):
....: return y
sage: GroupSemidirectProduct(WeylGroup(['A',2],prefix='s'),
....: WeylGroup(['A',3],prefix='t'), twist).act_to_right()
@@ -311,7 +311,7 @@ def _repr_(self):
EXAMPLES::
- sage: def twist(x,y):
+ sage: def twist(x, y):
....: return y
sage: GroupSemidirectProduct(WeylGroup(['A',2],prefix='s'), # indirect doctest
....: WeylGroup(['A',3],prefix='t'), twist)
@@ -332,7 +332,7 @@ def _element_constructor_(self, x):
r"""
EXAMPLES::
- sage: def twist(x,y):
+ sage: def twist(x, y):
....: return y
sage: import __main__
sage: __main__.twist = twist
@@ -368,7 +368,7 @@ def one(self):
sage: G = GL(2,QQ)
sage: V = QQ^2
sage: EV = GroupExp()(V) # make a multiplicative version of V
- sage: def twist(g,v):
+ sage: def twist(g, v):
....: return EV(g*v.value)
sage: one = GroupSemidirectProduct(G, EV, twist=twist, prefix1='t').one(); one
1
@@ -418,7 +418,7 @@ def product(self, x, y):
sage: G = GL(2,QQ)
sage: V = QQ^2
sage: EV = GroupExp()(V) # make a multiplicative version of V
- sage: def twist(g,v):
+ sage: def twist(g, v):
....: return EV(g*v.value)
sage: S = GroupSemidirectProduct(G, EV, twist=twist, prefix1='t')
sage: g = G([[2,1],[3,1]]); g
@@ -491,7 +491,7 @@ def construction(self):
EXAMPLES::
- sage: def twist(x,y):
+ sage: def twist(x, y):
....: return y
sage: H = GroupSemidirectProduct(WeylGroup(['A',2],prefix='s'),
....: WeylGroup(['A',3],prefix='t'), twist)
diff --git a/src/sage/groups/indexed_free_group.py b/src/sage/groups/indexed_free_group.py
index ad484532f13..67a3308d787 100644
--- a/src/sage/groups/indexed_free_group.py
+++ b/src/sage/groups/indexed_free_group.py
@@ -137,6 +137,7 @@ def group_generators(self):
gens = group_generators
+
class IndexedFreeGroup(IndexedGroup, Group):
"""
An indexed free group.
@@ -297,6 +298,7 @@ def to_word_list(self):
return [ (k, sign(e)) for k,e in self._sorted_items()
for dummy in range(abs(e))]
+
class IndexedFreeAbelianGroup(IndexedGroup, AbelianGroup):
"""
An indexed free abelian group.
diff --git a/src/sage/groups/libgap_group.py b/src/sage/groups/libgap_group.py
index 09889de4af5..81c7b9dd1df 100644
--- a/src/sage/groups/libgap_group.py
+++ b/src/sage/groups/libgap_group.py
@@ -36,6 +36,7 @@
from sage.groups.libgap_wrapper import ParentLibGAP, ElementLibGAP
from sage.groups.libgap_mixin import GroupMixinLibGAP
+
class GroupLibGAP(GroupMixinLibGAP, Group, ParentLibGAP):
Element = ElementLibGAP
diff --git a/src/sage/groups/matrix_gps/finitely_generated_gap.py b/src/sage/groups/matrix_gps/finitely_generated_gap.py
index d3403f22f40..70f409b2b54 100644
--- a/src/sage/groups/matrix_gps/finitely_generated_gap.py
+++ b/src/sage/groups/matrix_gps/finitely_generated_gap.py
@@ -924,6 +924,7 @@ def invariants_of_degree(self, deg, chi=None, R=None):
break
return list(inv)
+
def _new_invariant_is_linearly_independent(F, invariants):
"""
EXAMPLES::
diff --git a/src/sage/groups/matrix_gps/heisenberg.py b/src/sage/groups/matrix_gps/heisenberg.py
index f101c27153b..ed71925c5ed 100644
--- a/src/sage/groups/matrix_gps/heisenberg.py
+++ b/src/sage/groups/matrix_gps/heisenberg.py
@@ -26,6 +26,7 @@
from sage.rings.integer_ring import ZZ
from copy import copy
+
class HeisenbergGroup(UniqueRepresentation, FinitelyGeneratedMatrixGroup_gap):
r"""
The Heisenberg group of degree `n`.
diff --git a/src/sage/groups/matrix_gps/homset.py b/src/sage/groups/matrix_gps/homset.py
index b9d25ae0727..02818275424 100644
--- a/src/sage/groups/matrix_gps/homset.py
+++ b/src/sage/groups/matrix_gps/homset.py
@@ -21,6 +21,7 @@
from sage.misc.lazy_import import lazy_import
from sage.misc.superseded import deprecation
+
def is_MatrixGroupHomset(x):
r"""
Test whether ``x`` is a matrix group homset.
diff --git a/src/sage/groups/matrix_gps/isometries.py b/src/sage/groups/matrix_gps/isometries.py
index 8e0df5f154b..a377066913b 100644
--- a/src/sage/groups/matrix_gps/isometries.py
+++ b/src/sage/groups/matrix_gps/isometries.py
@@ -288,7 +288,7 @@ class GroupActionOnSubmodule(Action):
Echelon basis matrix:
[0 1]
"""
- def __init__(self, MatrixGroup,submodule, is_left=False):
+ def __init__(self, MatrixGroup, submodule, is_left=False):
r"""
Initialize the action.
diff --git a/src/sage/groups/matrix_gps/meson.build b/src/sage/groups/matrix_gps/meson.build
index 43968d8ed59..30b8e2379c0 100644
--- a/src/sage/groups/matrix_gps/meson.build
+++ b/src/sage/groups/matrix_gps/meson.build
@@ -33,13 +33,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, gmp]
+ if name == 'group_element_gap'
+ deps += [gap]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/groups/matrix_gps',
install: true,
include_directories: [inc_cpython],
- dependencies: [py_dep, gmp],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/groups/matrix_gps/morphism.py b/src/sage/groups/matrix_gps/morphism.py
index e2fc2e0fd59..e73ba7e945a 100644
--- a/src/sage/groups/matrix_gps/morphism.py
+++ b/src/sage/groups/matrix_gps/morphism.py
@@ -15,6 +15,7 @@
from sage.misc.lazy_import import lazy_import
+
def to_libgap(x):
"""
Helper to convert ``x`` to a LibGAP matrix or matrix group
diff --git a/src/sage/groups/matrix_gps/named_group_gap.py b/src/sage/groups/matrix_gps/named_group_gap.py
index 699e351f06d..926ae0649a0 100644
--- a/src/sage/groups/matrix_gps/named_group_gap.py
+++ b/src/sage/groups/matrix_gps/named_group_gap.py
@@ -18,6 +18,7 @@
from sage.groups.matrix_gps.matrix_group_gap import MatrixGroup_gap
from sage.groups.matrix_gps.named_group import NamedMatrixGroup_generic
+
class NamedMatrixGroup_gap(NamedMatrixGroup_generic, MatrixGroup_gap):
def __init__(self, degree, base_ring, special, sage_name, latex_string,
diff --git a/src/sage/groups/meson.build b/src/sage/groups/meson.build
index 3e2ffbb471c..a1876172c4d 100644
--- a/src/sage/groups/meson.build
+++ b/src/sage/groups/meson.build
@@ -43,7 +43,7 @@ foreach name, pyx : extension_data
subdir: 'sage/groups',
install: true,
include_directories: [inc_cpython],
- dependencies: [py_dep, gmp],
+ dependencies: [py_dep, gmp, gap],
)
endforeach
diff --git a/src/sage/groups/perm_gps/cubegroup.py b/src/sage/groups/perm_gps/cubegroup.py
index 8eadbac39f1..7603da471f9 100644
--- a/src/sage/groups/perm_gps/cubegroup.py
+++ b/src/sage/groups/perm_gps/cubegroup.py
@@ -128,6 +128,7 @@
#########################################################
# written by Tom Boothby, placed in the public domain
+
def xproj(x, y, z, r):
r"""
Return the `x`-projection of `(x,y,z)` rotated by `r`.
@@ -347,6 +348,7 @@ def create_poly(face, color):
32: "rbd",
}
+
def index2singmaster(facet):
"""
Translate index used (eg, 43) to Singmaster facet notation (eg,
diff --git a/src/sage/groups/perm_gps/partn_ref/data_structures.pyx b/src/sage/groups/perm_gps/partn_ref/data_structures.pyx
index 28672d00038..a3ef7193d3d 100644
--- a/src/sage/groups/perm_gps/partn_ref/data_structures.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/data_structures.pyx
@@ -145,9 +145,9 @@ def OP_represent(int n, merges, perm):
print("Finding:")
for i in range(n):
j = OP_find(OP, i)
- s = "%d -> %d"%(i, j)
+ s = "%d -> %d" % (i, j)
if i == j:
- s += ", root: size=%d, mcr=%d, rank=%d"%\
+ s += ", root: size=%d, mcr=%d, rank=%d" % \
(OP.size[i], OP.mcr[i], OP.rank[i])
print(s)
print("Allocating array to test merge_perm.")
@@ -165,9 +165,9 @@ def OP_represent(int n, merges, perm):
print("Finding:")
for i in range(n):
j = OP_find(OP, i)
- s = "%d -> %d"%(i, j)
+ s = "%d -> %d" % (i, j)
if i == j:
- s += ", root: size=%d, mcr=%d, rank=%d"%\
+ s += ", root: size=%d, mcr=%d, rank=%d" % \
(OP.size[i], OP.mcr[i], OP.rank[i])
print(s)
print("Deallocating OrbitPartition.")
@@ -474,7 +474,7 @@ def PS_represent(partition, splits):
print(PS.entries[i], PS.levels[i], i, n)
good = False
if not (PS.entries[n-1] == n-1 and PS.levels[n-1] == -1):
- print("Failed at i = %d!"%(n-1))
+ print("Failed at i = %d!" % (n-1))
good = False
if not PS.degree == n or not PS.depth == 0:
print("Incorrect degree or depth!")
@@ -486,8 +486,8 @@ def PS_represent(partition, splits):
print("Creating PartitionStack from partition %s." % partition)
PS = PS_from_list(partition)
print("PartitionStack's data:")
- print("entries -> %s"%[PS.entries[i] for i in range(n)])
- print("levels -> %s"%[PS.levels[i] for i in range(n)])
+ print("entries -> %s" % [PS.entries[i] for i in range(n)])
+ print("levels -> %s" % [PS.levels[i] for i in range(n)])
print("depth = %d, degree = %d" % (PS.depth,PS.degree))
PS_print(PS)
print("Checking PS_is_discrete:")
@@ -506,7 +506,7 @@ def PS_represent(partition, splits):
good = True
for i in range(n):
if PS.entries[i] != PS2.entries[i] or PS.levels[i] != PS2.levels[i]:
- print("Failed at i = %d!"%i)
+ print("Failed at i = %d!" % i)
good = False
if PS.degree != PS2.degree or PS.depth != PS2.depth:
print("Failure with degree or depth!")
@@ -517,7 +517,7 @@ def PS_represent(partition, splits):
PS_clear(PS2)
PS_print(PS2)
for s in splits:
- print("Splitting point %d from original:"%s)
+ print("Splitting point %d from original:" % s)
print(PS_split_point(PS, s))
PS_print(PS)
print("Getting permutation from PS2->PS:")
@@ -528,7 +528,7 @@ def PS_represent(partition, splits):
print("Finding first smallest:")
bitset_init(b, n)
i = PS_first_smallest(PS, b)
- print("Minimal element is %d, bitset is:"%i)
+ print("Minimal element is %d, bitset is:" % i)
print(bitset_string(b))
bitset_free(b)
print("Finding element 1:")
@@ -1187,7 +1187,7 @@ cdef bint SC_is_giant(int n, int num_perms, int *perms, float p, bitset_t suppor
# get a bit lost in the group, so our random elements are more random:
SC_identify(perm, n)
for i from 0 <= i < 10:
- SC_mult_perms(perm, perm, perms + n*(rand()%num_perms), n)
+ SC_mult_perms(perm, perm, perms + n*(rand() % num_perms), n)
# look for elements with cycles of prime length q, m/2 < q < m-2
num_steps = ceil(-log(1-p)*log(m)/log(2))
@@ -1203,7 +1203,7 @@ cdef bint SC_is_giant(int n, int num_perms, int *perms, float p, bitset_t suppor
sig_free(perm)
OP_dealloc(OP)
return True
- SC_mult_perms(perm, perm, perms + n*(rand()%num_perms), n)
+ SC_mult_perms(perm, perm, perms + n*(rand() % num_perms), n)
OP_dealloc(OP)
sig_free(perm)
return False
@@ -1311,7 +1311,7 @@ def SC_test_list_perms(list L, int n, int limit, bint gap, bint limit_complain,
sage: def random_perm(x):
....: shuffle(x)
....: return x
- sage: def test_stab_chain_fns_6(m,n,k, gap, contains):
+ sage: def test_stab_chain_fns_6(m, n, k, gap, contains):
....: perms = []
....: for i in range(k):
....: perm = sum([random_perm(list(range(i*(n//m),min(n,(i+1)*(n//m))))) for i in range(m)], [])
@@ -1421,21 +1421,21 @@ def SC_test_list_perms(list L, int n, int limit, bint gap, bint limit_complain,
m = bitset_len(giant_support)
from sage.arith.misc import factorial
if not (order == factorial(m) or order == factorial(m)/2):
- print("SC_is_giant failed: %s %s"%(str(L), order))
+ print("SC_is_giant failed: %s %s" % (str(L), order))
raise AssertionError
if order == factorial(n):
SC_dealloc(SC)
SC = SC_symmetric_group(n)
SC_order(SC,0,order.value)
if not order == factorial(n):
- print("SC_symmetric_group failed: %s %s"%(str(L), order))
+ print("SC_symmetric_group failed: %s %s" % (str(L), order))
raise AssertionError
elif order == factorial(n)/2:
SC_dealloc(SC)
SC = SC_alternating_group(n)
SC_order(SC,0,order.value)
if not order == factorial(n)/2:
- print("SC_alternating_group failed: %s %s"%(str(L), order))
+ print("SC_alternating_group failed: %s %s" % (str(L), order))
raise AssertionError
order2 = Integer(0)
SC_order(SCC,0,order2.value)
@@ -1540,8 +1540,8 @@ def SC_test_list_perms(list L, int n, int limit, bint gap, bint limit_complain,
if SC_is_giant(n, len(L), perm, 0.9, giant_support):
from sage.arith.misc import factorial
m = bitset_len(giant_support)
- if order != factorial(m) and order != factorial(m)/2:
- print("SC_is_giant failed: %s %s"%(str(L), order))
+ if order != factorial(m) and order != factorial(m)//2:
+ print("SC_is_giant failed: %s %s" % (str(L), order))
raise AssertionError
if order != G.order():
print("FAIL {}".format(L))
@@ -1572,13 +1572,13 @@ def SC_test_list_perms(list L, int n, int limit, bint gap, bint limit_complain,
if bool(SC_says) != bool(gap_says):
print("FAIL {}".format(L))
print('element {}'.format(permy))
- print('GAP says %d, SC_contains(modify=0) says %d'%(gap_says, SC_says))
+ print('GAP says %d, SC_contains(modify=0) says %d' % (gap_says, SC_says))
raise AssertionError
SC_says = SC_contains(SC, 0, perm, 1)
if bool(SC_says) != bool(gap_says):
print("FAIL {}".format(L))
print('element {}'.format(permy))
- print('GAP says %d, SC_contains(modify=0) says %d'%(gap_says, SC_says))
+ print('GAP says %d, SC_contains(modify=0) says %d' % (gap_says, SC_says))
raise AssertionError
SC_random_element(SC, 0, perm)
for j from 0 <= j < n:
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_python.pyx b/src/sage/groups/perm_gps/partn_ref/refinement_python.pyx
index 0623c237b76..c210c4c0521 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_python.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_python.pyx
@@ -78,7 +78,7 @@ cdef class PythonPartitionStack:
sage: P # implicit doctest
PythonPartitionStack of degree 7 and depth 0.
"""
- return "PythonPartitionStack of degree %d and depth %d."%(self.c_ps.degree, self.c_ps.depth)
+ return "PythonPartitionStack of degree %d and depth %d." % (self.c_ps.degree, self.c_ps.depth)
def display(self):
"""
@@ -345,11 +345,11 @@ class PythonObjectWrapper:
EXAMPLES::
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonObjectWrapper
- sage: def acae(a,b):
+ sage: def acae(a, b):
....: return 0
- sage: def rari(a,b,c):
+ sage: def rari(a, b, c):
....: return 0
- sage: def cs(a,b,c,d,e):
+ sage: def cs(a, b, c, d, e):
....: return 0
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonObjectWrapper
sage: P = PythonObjectWrapper(None, acae, rari, cs, 7) # implicit doctest
@@ -434,11 +434,11 @@ def aut_gp_and_can_lab_python(S, partition, n,
EXAMPLES::
sage: from sage.groups.perm_gps.partn_ref.refinement_python import aut_gp_and_can_lab_python
- sage: def acae(a,b):
+ sage: def acae(a, b):
....: return 0
- sage: def rari(a,b,c):
+ sage: def rari(a, b, c):
....: return 0
- sage: def cs(a,b,c,d,e):
+ sage: def cs(a, b, c, d, e):
....: return 0
sage: aut_gp_and_can_lab_python(None, [[0,1,2,3],[4,5]], 6, acae, rari, cs, True, True, True)
([[0, 1, 3, 2, 4, 5],
@@ -513,16 +513,16 @@ def double_coset_python(S1, S2, partition1, ordering2, n,
EXAMPLES::
sage: from sage.groups.perm_gps.partn_ref.refinement_python import double_coset_python
- sage: def acae(a,b):
+ sage: def acae(a, b):
....: return 0
- sage: def rari(a,b,c):
+ sage: def rari(a, b, c):
....: return 0
- sage: def cs(a,b,c,d,e):
+ sage: def cs(a, b, c, d, e):
....: return 0
sage: double_coset_python(None, None, [[0,1,2,3],[4,5]], [2,3,1,5,0,4], 6, acae, rari, cs)
[1, 2, 3, 5, 0, 4]
- sage: def compare_lists(p1,p2,l1,l2,deg):
+ sage: def compare_lists(p1, p2, l1, l2, deg):
....: for i in range(len(l1)):
....: a1 = l1[p1[i]]
....: a2 = l2[p2[i]]
diff --git a/src/sage/groups/perm_gps/partn_ref2/meson.build b/src/sage/groups/perm_gps/partn_ref2/meson.build
index ca6fadbfda9..ef97195574e 100644
--- a/src/sage/groups/perm_gps/partn_ref2/meson.build
+++ b/src/sage/groups/perm_gps/partn_ref2/meson.build
@@ -13,7 +13,7 @@ foreach name, pyx : extension_data
subdir: 'sage/groups/perm_gps/partn_ref2',
install: true,
include_directories: [inc_cpython, inc_data_structures, inc_partn_ref2],
- dependencies: [py_dep, cysignals, gmp],
+ dependencies: [py_dep, cysignals, gmp, gap],
)
endforeach
diff --git a/src/sage/groups/perm_gps/permgroup_element.pyx b/src/sage/groups/perm_gps/permgroup_element.pyx
index b0150295f1f..303a2dc6214 100644
--- a/src/sage/groups/perm_gps/permgroup_element.pyx
+++ b/src/sage/groups/perm_gps/permgroup_element.pyx
@@ -96,8 +96,6 @@ Check that :issue:`13569` is fixed::
(1,2), (1,3), (1,3), (2,3), (1,2), (1,2), (1,3), (2,3)]
"""
-# hi
-
# ****************************************************************************
# Copyright (C) 2006 William Stein
# Copyright (C) 2006 David Joyner
@@ -1126,7 +1124,7 @@ cdef class PermutationGroupElement(MultiplicativeGroupElement):
...
AssertionError: (1,3,5)(2,4,6) and [1, 2, 3, 4, 5, 6, 7] should have the same length
"""
- assert len(x) == self.n, '%s and %s should have the same length'%(self, x)
+ assert len(x) == self.n, '%s and %s should have the same length' % (self, x)
return [ x[self.perm[i]] for i in range(self.n) ]
cpdef ClonableIntArray _act_on_array_on_position(self, ClonableIntArray x):
@@ -1146,7 +1144,7 @@ cdef class PermutationGroupElement(MultiplicativeGroupElement):
cdef int i
cdef ClonableIntArray y
cdef int l = self.n
- assert x._len == l, '%s and %s should have the same length'%(self, x)
+ assert x._len == l, '%s and %s should have the same length' % (self, x)
y = x.clone()
for i in range(l):
y._list[i] = x._list[self.perm[i]]
diff --git a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx
index 72042533883..f3abbd13129 100644
--- a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx
+++ b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx
@@ -243,8 +243,8 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement):
sage: SemimonomialTransformationGroup(F, 4).an_element() # indirect doctest
((a, 1, 1, 1); (1,4,3,2), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1)
"""
- return "(%s; %s, %s)"%(self.v, self.perm.cycle_string(),
- self.get_autom())
+ return "(%s; %s, %s)" % (self.v, self.perm.cycle_string(),
+ self.get_autom())
cpdef _richcmp_(left, _right, int op):
"""
diff --git a/src/sage/homology/homology_vector_space_with_basis.py b/src/sage/homology/homology_vector_space_with_basis.py
index 64d3186fea7..60f2ccc77f2 100644
--- a/src/sage/homology/homology_vector_space_with_basis.py
+++ b/src/sage/homology/homology_vector_space_with_basis.py
@@ -690,10 +690,9 @@ def _acted_upon_(self, a, self_on_left):
if m <= n:
return self.parent().zero()
- if not self_on_left: # i.e., module element on left
+ if not self_on_left: # i.e., module element on left
a = a.antipode()
P = self.parent()
- B = list(P.basis(m-n))
return P._from_dict({x.support()[0]: self.eval(a * x)
for x in sorted(self.parent().dual().basis(m-n))})
diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py
index 5982c225439..47cd5570355 100644
--- a/src/sage/interfaces/fricas.py
+++ b/src/sage/interfaces/fricas.py
@@ -227,8 +227,26 @@
# between ' and ".
FRICAS_INIT_CODE = (
")set functions compile on",
- ")set message autoload off",
- ")set message type off",
+ ")set message any on",
+ ")set message autoload off",
+ ")set message bottomup off",
+ ")set message dropmap off",
+ ")set message expose off",
+ ")set message file off",
+ ")set message frame off",
+ ")set message highlighting off",
+ ")set message instant off",
+ ")set message insteach off",
+ ")set message interponly off",
+ ")set message prompt step",
+ ")set message selection off",
+ ")set message set off",
+ ")set message startup on",
+ ")set message storage off",
+ ")set message testing off",
+ ")set message time off",
+ ")set message type off",
+ ")set message void off",
")set output length " + str(FRICAS_LINE_LENGTH),
")lisp (setf |$ioHook|"
" (lambda (x &optional args)"
diff --git a/src/sage/interfaces/mathematica.py b/src/sage/interfaces/mathematica.py
index 71f233746e7..39c3aff9dc2 100644
--- a/src/sage/interfaces/mathematica.py
+++ b/src/sage/interfaces/mathematica.py
@@ -315,7 +315,7 @@
OTHER Examples::
- sage: def math_bessel_K(nu,x):
+ sage: def math_bessel_K(nu, x):
....: return mathematica(nu).BesselK(x).N(20)
sage: math_bessel_K(2,I) # optional - mathematica
-2.59288617549119697817 + 0.18048997206696202663*I
diff --git a/src/sage/interfaces/mathics.py b/src/sage/interfaces/mathics.py
index 3104fefe665..a6d39ad3c14 100644
--- a/src/sage/interfaces/mathics.py
+++ b/src/sage/interfaces/mathics.py
@@ -319,7 +319,7 @@
OTHER Examples::
- sage: def math_bessel_K(nu,x):
+ sage: def math_bessel_K(nu, x):
....: return mathics(nu).BesselK(x).N(20)
sage: math_bessel_K(2,I) # optional - mathics
-2.5928861754911969782 + 0.18048997206696202663 I
diff --git a/src/sage/interfaces/maxima.py b/src/sage/interfaces/maxima.py
index 96158d73039..08a8f37f751 100644
--- a/src/sage/interfaces/maxima.py
+++ b/src/sage/interfaces/maxima.py
@@ -1099,19 +1099,19 @@ def _object_function_class(self):
# living in the symbolic ring and return something
# that is hopefully coercible into the symbolic ring again.
-# def sr_integral(self,*args):
+# def sr_integral(self, *args):
# return args[0]._maxima_().integrate(*args[1:])
-# def sr_sum(self,expression,v,a,b):
+# def sr_sum(self, expression, v, a, b):
# sum = "'sum(%s, %s, %s, %s)" % tuple([repr(expr._maxima_()) for expr in (expression, v, a, b)])
# result = self.simplify_sum(sum)
# result = result.ratsimp()
# return expression.parent()(result)
-# def sr_limit(self,ex,*args):
+# def sr_limit(self, ex, *args):
# return ex._maxima_().limit(*args)
-# def sr_tlimit(self,ex,*args):
+# def sr_tlimit(self, ex, *args):
# return ex._maxima_().tlimit(*args)
diff --git a/src/sage/interfaces/psage.py b/src/sage/interfaces/psage.py
index 96d4233bbeb..9fba3d1d015 100644
--- a/src/sage/interfaces/psage.py
+++ b/src/sage/interfaces/psage.py
@@ -122,7 +122,7 @@ def __del__(self):
except OSError:
pass
- if not (self._expect is None):
+ if self._expect is not None:
cmd = 'kill -9 %s' % self._expect.pid
os.system(cmd)
diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py
index ed883b07105..d02ae43149f 100644
--- a/src/sage/interfaces/singular.py
+++ b/src/sage/interfaces/singular.py
@@ -335,6 +335,7 @@
# ****************************************************************************
import os
+import platform
import re
import sys
import pexpect
@@ -407,7 +408,7 @@ def __init__(self, maxread=None, script_subdirectory=None,
restart_on_ctrlc=True,
verbose_start=False,
logfile=logfile,
- eval_using_file_cutoff=100 if os.uname()[0] == "SunOS" else 1000)
+ eval_using_file_cutoff=100 if platform.system() == "SunOS" else 1000)
self.__libs = []
self._prompt_wait = prompt
self.__to_clear = [] # list of variable names that need to be cleared.
@@ -2269,11 +2270,9 @@ def _instancedoc_(self):
"""
EXAMPLES::
- sage: 'groebner' in singular.groebner.__doc__
+ sage: 'groebner' in singular.groebner.__doc__ # needs info
True
"""
- if not nodes:
- generate_docstring_dictionary()
prefix = """
This function is an automatically generated pexpect wrapper around the Singular
@@ -2288,15 +2287,9 @@ def _instancedoc_(self):
x+y,
y^2-y
""" % (self._name,)
- prefix2 = """
-
-The Singular documentation for '%s' is given below.
-""" % (self._name,)
-
- try:
- return prefix + prefix2 + nodes[node_names[self._name]]
- except KeyError:
- return prefix
+ return prefix + get_docstring(self._name,
+ prefix=True,
+ code=True)
@instancedoc
@@ -2307,15 +2300,10 @@ def _instancedoc_(self):
sage: R = singular.ring(0, '(x,y,z)', 'dp')
sage: A = singular.matrix(2,2)
- sage: 'matrix_expression' in A.nrows.__doc__
+ sage: 'matrix_expression' in A.nrows.__doc__ # needs info
True
"""
- if not nodes:
- generate_docstring_dictionary()
- try:
- return nodes[node_names[self._name]]
- except KeyError:
- return ""
+ return get_docstring(self._name, code=True)
def is_SingularElement(x):
@@ -2341,82 +2329,125 @@ def is_SingularElement(x):
return isinstance(x, SingularElement)
-nodes = {}
-node_names = {}
-
-
-def generate_docstring_dictionary():
+def get_docstring(name, prefix=False, code=False):
"""
- Generate global dictionaries which hold the docstrings for
- Singular functions.
-
- EXAMPLES::
-
- sage: from sage.interfaces.singular import generate_docstring_dictionary
- sage: generate_docstring_dictionary()
- """
-
- global nodes
- global node_names
+ Return the docstring for the function ``name``.
- nodes.clear()
- node_names.clear()
+ INPUT:
- new_node = re.compile(r"File: singular\.[a-z]*, Node: ([^,]*),.*")
- new_lookup = re.compile(r"\* ([^:]*):*([^.]*)\..*")
+ - ``name`` -- a Singular function name
+ - ``prefix`` -- boolean (default: ``False``); whether or not to
+ include the prefix stating that what follows is from the
+ Singular documentation.
+ - ``code`` -- boolean (default: ``False``); whether or not to
+ format the result as a reStructuredText code block. This is
+ intended to support the feature requested in :issue:`11268`.
+
+ OUTPUT:
+
+ A string describing the Singular function ``name``. A
+ :class:`KeyError` is raised if the function was not found in the
+ Singular documentation. If the "info" is not on the user's
+ ``PATH``, an :class:`OSError` will be raised. If "info" was found
+ but failed to execute, a :class:`subprocess.CalledProcessError`
+ will be raised instead.
- L, in_node, curr_node = [], False, None
+ EXAMPLES::
- from sage.libs.singular.singular import get_resource
- singular_info_file = get_resource('i')
+ sage: from sage.interfaces.singular import get_docstring
+ sage: 'groebner' in get_docstring('groebner') # needs_info
+ True
+ sage: 'standard.lib' in get_docstring('groebner') # needs info
+ True
- # singular.hlp contains a few iso-8859-1 encoded special characters
- with open(singular_info_file,
- encoding='latin-1') as f:
- for line in f:
- m = re.match(new_node, line)
- if m:
- # a new node starts
- in_node = True
- nodes[curr_node] = "".join(L)
- L = []
- curr_node, = m.groups()
- elif in_node: # we are in a node
- L.append(line)
- else:
- m = re.match(new_lookup, line)
- if m:
- a, b = m.groups()
- node_names[a] = b.strip()
+ The ``prefix=True`` form is used in Sage's generated docstrings::
- if line in ("6 Index\n", "F Index\n"):
- in_node = False
+ sage: from sage.interfaces.singular import get_docstring
+ sage: print(get_docstring("factorize", prefix=True)) # needs info
+ The Singular documentation for "factorize" is given below.
+ ...
- nodes[curr_node] = "".join(L) # last node
+ TESTS:
+ Non-existent functions raise a :class:`KeyError`::
-def get_docstring(name):
- """
- Return the docstring for the function ``name``.
+ sage: from sage.interfaces.singular import get_docstring
+ sage: get_docstring("mysql_real_escape_string") # needs info
+ Traceback (most recent call last):
+ ...
+ KeyError: 'mysql_real_escape_string'
- INPUT:
+ This is true also for nodes that exist in the documentation but
+ are not function nodes::
- - ``name`` -- a Singular function name
+ sage: from sage.interfaces.singular import get_docstring
+ sage: get_docstring("Preface") # needs info
+ Traceback (most recent call last):
+ ...
+ KeyError: 'Preface'
- EXAMPLES::
+ If GNU Info is not installed, we politely decline to do anything::
sage: from sage.interfaces.singular import get_docstring
- sage: 'groebner' in get_docstring('groebner')
- True
- sage: 'standard.lib' in get_docstring('groebner')
- True
+ sage: from sage.features.info import Info
+ sage: Info().hide()
+ sage: get_docstring('groebner')
+ Traceback (most recent call last):
+ ...
+ OSError: GNU Info is not installed. Singular's documentation
+ will not be available.
+ sage: Info().unhide()
"""
- if not nodes:
- generate_docstring_dictionary()
+ from sage.features.info import Info
+
+ if not Info().is_present():
+ raise OSError("GNU Info is not installed. Singular's "
+ "documentation will not be available.")
+ import subprocess
+ cmd_and_args = ["info", f"--node={name}", "singular"]
try:
- return nodes[node_names[name]]
- except KeyError:
- return ""
+ result = subprocess.run(cmd_and_args,
+ capture_output=True,
+ check=True,
+ text=True)
+ except subprocess.CalledProcessError as e:
+ # Before Texinfo v7.0.0, the "info" program would exit
+ # successfully even if the desired node was not found.
+ if e.returncode == 1:
+ raise KeyError(name) from e
+ else:
+ # Something else bad happened
+ raise e
+
+ # The subprocess call can succeed if the given node exists but is
+ # not a function node (example: "Preface"). All function nodes
+ # should live in the "Functions" section, and we can determine the
+ # current section by the presence of "Up: " on the first
+ # line of the output, in the navigation header.
+ #
+ # There is a small risk of ambiguity here if there are two
+ # sections with the same name, but it's a trade-off: specifying
+ # the full path down to the intended function would be much more
+ # fragile; it would break whenever a subsection name was tweaked
+ # upstream.
+ offset = result.stdout.find("\n")
+ line0 = result.stdout[:offset]
+ if "Up: Functions" not in line0:
+ raise KeyError(name)
+
+ # If the first line was the navigation header, the second line should
+ # be blank; by incrementing the offset by two, we're skipping over it.
+ offset += 2
+ result = result.stdout[offset:]
+
+ if code:
+ result = "::\n\n " + "\n ".join(result.split('\n'))
+
+ if prefix:
+ result = (f'The Singular documentation for "{name}" is given below.'
+ + "\n\n" + result)
+
+ return result
singular = Singular()
diff --git a/src/sage/interfaces/tides.py b/src/sage/interfaces/tides.py
index c1076496cea..42877ede9ee 100644
--- a/src/sage/interfaces/tides.py
+++ b/src/sage/interfaces/tides.py
@@ -340,7 +340,7 @@ def remove_repeated(l1, l2):
j += 1
-def remove_constants(l1,l2):
+def remove_constants(l1, l2):
"""
Given two lists, remove the entries in the first that are real constants,
and also the corresponding elements in the second one.
diff --git a/src/sage/knots/knotinfo.py b/src/sage/knots/knotinfo.py
index b0ff60eefa5..8c246ba8097 100644
--- a/src/sage/knots/knotinfo.py
+++ b/src/sage/knots/knotinfo.py
@@ -1353,7 +1353,6 @@ def cosmetic_crossing_conjecture_verified(self):
return True
if not cosmetic_crossing or cosmetic_crossing == 'Unknown':
return False
- verified = not knotinfo_bool(cosmetic_crossing)
if not knotinfo_bool(cosmetic_crossing):
return True
raise AssertionError(f'{self} is a counterexample to the cosmetic crossing conjecture')
diff --git a/src/sage/lfunctions/dokchitser.py b/src/sage/lfunctions/dokchitser.py
index cc06d96c503..b6524bce984 100644
--- a/src/sage/lfunctions/dokchitser.py
+++ b/src/sage/lfunctions/dokchitser.py
@@ -43,6 +43,9 @@ class Dokchitser(SageObject):
r"""
Dokchitser's `L`-functions Calculator.
+ PARI code can be found on
+ `Dokchitser's homepage `_.
+
Create a Dokchitser `L`-series with
Dokchitser(conductor, gammaV, weight, eps, poles, residues, init,
@@ -153,7 +156,7 @@ class Dokchitser(SageObject):
We redefine the default bound on the coefficients: Deligne's
estimate on tau(n) is better than the default
- coefgrow(n)=`(4n)^{11/2}` (by a factor 1024), so
+ coefgrow(n)= `(4n)^{11/2}` (by a factor 1024), so
re-defining coefgrow() improves efficiency (slightly faster). ::
sage: L.num_coeffs()
@@ -486,6 +489,10 @@ def __call__(self, s, c=None):
- ``s`` -- complex number
+ - ``c`` -- internal parameter, call with `c>1` to get the same value
+ with a different cutoff point (`c` close to `1`); should return the
+ same answer, good to check if everything works with right precision
+
.. NOTE::
Evaluation of the function takes a long time, so each
@@ -500,16 +507,28 @@ def __call__(self, s, c=None):
0.00000000000000000000000000000
sage: L(1+I)
-1.3085436607849493358323930438 + 0.81298000036784359634835412129*I
+ sage: L(1+I, 1.2)
+ -1.3085436607849493358323930438 + 0.81298000036784359634835412129*I
+
+ TESTS::
+
+ sage: L(1+I, 0)
+ Traceback (most recent call last):
+ ...
+ RuntimeError
"""
self.__check_init()
s = self.__CC(s)
try:
- return self.__values[s]
+ return self.__values[s, c]
except AttributeError:
self.__values = {}
except KeyError:
pass
- z = self._gp_call_inst('L', s)
+ if c is None:
+ z = self._gp_call_inst('L', s)
+ else:
+ z = self._gp_call_inst('L', s, c)
CC = self.__CC
if 'pole' in z:
print(z)
@@ -522,10 +541,10 @@ def __call__(self, s, c=None):
msg = z[:i].replace('digits', 'decimal digits')
verbose(msg, level=-1)
ans = CC(z[i + 1:])
- self.__values[s] = ans
+ self.__values[s, c] = ans
return ans
ans = CC(z)
- self.__values[s] = ans
+ self.__values[s, c] = ans
return ans
def derivative(self, s, k=1):
@@ -571,7 +590,7 @@ def taylor_series(self, a=0, k=6, var='z'):
- ``a`` -- complex number (default: 0); point about which to expand
- - ``k`` -- integer (default: 6); series is `O(``var``^k)`
+ - ``k`` -- integer (default: 6); series is `O(\texttt{var}^k)`
- ``var`` -- string (default: ``'z'``); variable of power series
diff --git a/src/sage/libs/coxeter3/coxeter.pyx b/src/sage/libs/coxeter3/coxeter.pyx
index 6f8a651e7eb..cd3e05307c3 100644
--- a/src/sage/libs/coxeter3/coxeter.pyx
+++ b/src/sage/libs/coxeter3/coxeter.pyx
@@ -423,7 +423,8 @@ cdef class CoxGroup(SageObject):
sage: W = CoxGroup(['A', 5]); W
Coxeter group of type A and rank 5
"""
- return "Coxeter group of type %s and rank %s"%(self.type(), self.rank())
+ return "Coxeter group of type %s and rank %s" % (self.type(),
+ self.rank())
def __iter__(self):
"""
diff --git a/src/sage/libs/coxeter3/meson.build b/src/sage/libs/coxeter3/meson.build
index 83cbd2b46cd..ee51998f27d 100644
--- a/src/sage/libs/coxeter3/meson.build
+++ b/src/sage/libs/coxeter3/meson.build
@@ -17,7 +17,7 @@ foreach name, pyx : extension_data_cpp
subdir: 'sage/libs/coxeter3',
install: true,
override_options: ['cython_language=cpp'],
- include_directories: [],
+ include_directories: [inc_cpython],
dependencies: [py_dep, cysignals, coxeter3],
)
endforeach
diff --git a/src/sage/libs/eclib/homspace.pyx b/src/sage/libs/eclib/homspace.pyx
index a502062ff79..f4baaee280a 100644
--- a/src/sage/libs/eclib/homspace.pyx
+++ b/src/sage/libs/eclib/homspace.pyx
@@ -71,7 +71,7 @@ cdef class ModularSymbols:
sage: CremonaModularSymbols(37, cuspidal=True).__repr__()
'Cremona Cuspidal Modular Symbols space of dimension 4 for Gamma_0(37) of weight 2 with sign 0'
"""
- return "Cremona %sModular Symbols space of dimension %s for Gamma_0(%s) of weight 2 with sign %s"%(
+ return "Cremona %sModular Symbols space of dimension %s for Gamma_0(%s) of weight 2 with sign %s" % (
'Cuspidal ' if self.is_cuspidal() else '',
self.dimension(), self.level(), self.sign())
diff --git a/src/sage/libs/eclib/mat.pyx b/src/sage/libs/eclib/mat.pyx
index a5ef4f45c68..bfdeb6ae5c1 100644
--- a/src/sage/libs/eclib/mat.pyx
+++ b/src/sage/libs/eclib/mat.pyx
@@ -49,7 +49,7 @@ cdef class Matrix:
[-1 1 1 -1 0]
[ 0 -1 0 0 0]
"""
- return "%s x %s Cremona matrix over Rational Field"%(self.nrows(), self.ncols())
+ return "%s x %s Cremona matrix over Rational Field" % (self.nrows(), self.ncols())
def str(self):
r"""
diff --git a/src/sage/libs/eclib/mwrank.pyx b/src/sage/libs/eclib/mwrank.pyx
index 6765ac296ed..5bc54a04cdc 100644
--- a/src/sage/libs/eclib/mwrank.pyx
+++ b/src/sage/libs/eclib/mwrank.pyx
@@ -208,7 +208,7 @@ cdef class _bigint:
if s.isdigit() or s[0] == "-" and s[1:].isdigit():
self.x = str_to_bigint(str_to_bytes(s))
else:
- raise ValueError("invalid _bigint: %r"%x)
+ raise ValueError("invalid _bigint: %r" % x)
def __dealloc__(self):
"""
diff --git a/src/sage/libs/eclib/newforms.pyx b/src/sage/libs/eclib/newforms.pyx
index d2af433a801..c067ef6acb9 100644
--- a/src/sage/libs/eclib/newforms.pyx
+++ b/src/sage/libs/eclib/newforms.pyx
@@ -237,7 +237,7 @@ cdef class ECModularSymbol:
sage: M = ECModularSymbol(E, 0); M
Modular symbol with sign 0 over Rational Field attached to Elliptic Curve defined by y^2 + y = x^3 + x^2 - 2*x over Rational Field
"""
- return "Modular symbol with sign %s over Rational Field attached to %s"%(self.sign, self._E)
+ return "Modular symbol with sign %s over Rational Field attached to %s" % (self.sign, self._E)
def __call__(self, r, sign=None, base_at_infinity=True):
r"""
diff --git a/src/sage/libs/gap/element.pyx b/src/sage/libs/gap/element.pyx
index 6345c898c66..b35626b29e1 100644
--- a/src/sage/libs/gap/element.pyx
+++ b/src/sage/libs/gap/element.pyx
@@ -5,9 +5,6 @@ This document describes the individual wrappers for various GAP
elements. For general information about GAP, you should read the
:mod:`~sage.libs.gap.libgap` module documentation.
"""
-
-# hi
-
# ****************************************************************************
# Copyright (C) 2012 Volker Braun
#
@@ -3254,7 +3251,7 @@ cdef class GapElement_RecordIterator():
# note the abs: negative values mean the rec keys are not sorted
key_index = abs(GET_RNAM_PREC(self.rec.value, i))
key = char_to_str(GAP_CSTR_STRING(NAME_RNAM(key_index)))
- cdef Obj result = GET_ELM_PREC(self.rec.value,i)
+ cdef Obj result = GET_ELM_PREC(self.rec.value, i)
val = make_any_gap_element(self.rec.parent(), result)
self.i += 1
return (key, val)
diff --git a/src/sage/libs/gap/libgap.pyx b/src/sage/libs/gap/libgap.pyx
index 8218d51a5cd..f5b58a929f3 100644
--- a/src/sage/libs/gap/libgap.pyx
+++ b/src/sage/libs/gap/libgap.pyx
@@ -176,8 +176,6 @@ AUTHORS:
libgap API
"""
-# hi
-
###############################################################################
# Copyright (C) 2009, William Stein
# Copyright (C) 2012, Volker Braun
diff --git a/src/sage/libs/gap/test_long.py b/src/sage/libs/gap/test_long.py
index 262db5ad287..c92ff9d5223 100644
--- a/src/sage/libs/gap/test_long.py
+++ b/src/sage/libs/gap/test_long.py
@@ -15,7 +15,7 @@ def test_loop_1():
"""
libgap.collect()
for i in range(10000):
- G = libgap.CyclicGroup(2)
+ _ = libgap.CyclicGroup(2)
def test_loop_2():
diff --git a/src/sage/libs/gap/util.pyx b/src/sage/libs/gap/util.pyx
index 8509ae35e55..29fa347ff30 100644
--- a/src/sage/libs/gap/util.pyx
+++ b/src/sage/libs/gap/util.pyx
@@ -2,8 +2,6 @@
Utility functions for GAP
"""
-# hi
-
#*****************************************************************************
# Copyright (C) 2012 Volker Braun
#
diff --git a/src/sage/libs/giac/__init__.py b/src/sage/libs/giac/__init__.py
index ef2267c4378..ba0be068152 100644
--- a/src/sage/libs/giac/__init__.py
+++ b/src/sage/libs/giac/__init__.py
@@ -88,7 +88,7 @@ def local_giacsettings(func):
EXAMPLES::
- sage: def testf(a,b):
+ sage: def testf(a, b):
....: giacsettings.proba_epsilon = a/100
....: giacsettings.threads = b+2
....: return (giacsettings.proba_epsilon, giacsettings.threads)
diff --git a/src/sage/libs/giac/auto-methods.pxi b/src/sage/libs/giac/auto-methods.pxi
index 478c9c21bed..a7c214acab9 100644
--- a/src/sage/libs/giac/auto-methods.pxi
+++ b/src/sage/libs/giac/auto-methods.pxi
@@ -9,7 +9,7 @@ cdef class GiacMethods_base:
:class:`Pygen` instead.
"""
- def Airy_Ai(self,*args):
+ def Airy_Ai(self, *args):
r'''From Giac's documentation:
Help for Airy_Ai:
Airy_Ai(Real)
@@ -18,9 +18,9 @@ cdef class GiacMethods_base:
Ex1:Airy_Ai(0)
Ex2:Airy_Ai(1.5)
'''
- return GiacMethods['Airy_Ai'](self,*args)
+ return GiacMethods['Airy_Ai'](self, *args)
- def Airy_Bi(self,*args):
+ def Airy_Bi(self, *args):
r'''From Giac's documentation:
Help for Airy_Bi:
Airy_Bi(Real)
@@ -29,9 +29,9 @@ cdef class GiacMethods_base:
Ex1:Airy_Bi(1.5)
Ex2:Airy_Bi(0)
'''
- return GiacMethods['Airy_Bi'](self,*args)
+ return GiacMethods['Airy_Bi'](self, *args)
- def Archive(self,*args):
+ def Archive(self, *args):
r'''From Giac's documentation:
Help for Archive:
Archive(SeqVar)
@@ -39,9 +39,9 @@ cdef class GiacMethods_base:
See also: 1/ Unarchiv 2/ archive 3/ unarchive
Ex1:Archive(a,b)
'''
- return GiacMethods['Archive'](self,*args)
+ return GiacMethods['Archive'](self, *args)
- def BesselJ(self,*args):
+ def BesselJ(self, *args):
r'''From Giac's documentation:
Help for BesselJ:
BesselJ(Int(p),Real(x))
@@ -50,9 +50,9 @@ cdef class GiacMethods_base:
Ex1:BesselJ(2,sqrt(2))
Ex2:BesselJ(-2,sqrt(2))
'''
- return GiacMethods['BesselJ'](self,*args)
+ return GiacMethods['BesselJ'](self, *args)
- def BesselY(self,*args):
+ def BesselY(self, *args):
r'''From Giac's documentation:
Help for BesselY:
BesselY(Int(p),Real(x))
@@ -61,9 +61,9 @@ cdef class GiacMethods_base:
Ex1:BesselY(BesselJ(2,sqrt(2)))
Ex2:BesselY(BesselJ(-2,sqrt(2)))
'''
- return GiacMethods['BesselY'](self,*args)
+ return GiacMethods['BesselY'](self, *args)
- def Beta(self,*args):
+ def Beta(self, *args):
r'''From Giac's documentation:
Help for Beta:
Beta(Expr,Expr,[Expr],[1])
@@ -74,9 +74,9 @@ cdef class GiacMethods_base:
Ex3:Beta(3,2,0.5)
Ex4:Beta(3,2,0.5,1)
'''
- return GiacMethods['Beta'](self,*args)
+ return GiacMethods['Beta'](self, *args)
- def BlockDiagonal(self,*args):
+ def BlockDiagonal(self, *args):
r'''From Giac's documentation:
Help for BlockDiagonal:
BlockDiagonal(Lst(l)||Mtrx(A))
@@ -85,9 +85,9 @@ cdef class GiacMethods_base:
Ex1:BlockDiagonal([[1,2],[3,4]])
Ex2:BlockDiagonal([1,2,3])
'''
- return GiacMethods['BlockDiagonal'](self,*args)
+ return GiacMethods['BlockDiagonal'](self, *args)
- def Ci(self,*args):
+ def Ci(self, *args):
r'''From Giac's documentation:
Help for Ci:
Ci(Expr)
@@ -95,9 +95,9 @@ cdef class GiacMethods_base:
See also: 1/ Ei 2/ Si 3/ Li
Ex1:Ci(1.0)
'''
- return GiacMethods['Ci'](self,*args)
+ return GiacMethods['Ci'](self, *args)
- def Circle(self,*args):
+ def Circle(self, *args):
r'''From Giac's documentation:
Help for Circle:
Circle(Real(xc),Real(yc),Real(r),[Intg(option)])
@@ -107,9 +107,9 @@ cdef class GiacMethods_base:
Ex2:Circle(0,1,1,0)
Ex3:Circle(0,1,1,1)
'''
- return GiacMethods['Circle'](self,*args)
+ return GiacMethods['Circle'](self, *args)
- def Col(self,*args):
+ def Col(self, *args):
r'''From Giac's documentation:
Help for Col:
Col(NULL)
@@ -117,9 +117,9 @@ cdef class GiacMethods_base:
See also: 1/ Row
Ex1:Col()
'''
- return GiacMethods['Col'](self,*args)
+ return GiacMethods['Col'](self, *args)
- def CopyVar(self,*args):
+ def CopyVar(self, *args):
r'''From Giac's documentation:
Help for CopyVar:
CopyVar(Var(var1),Var(var2))
@@ -127,9 +127,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:CopyVar(A,B)
'''
- return GiacMethods['CopyVar'](self,*args)
+ return GiacMethods['CopyVar'](self, *args)
- def Dirac(self,*args):
+ def Dirac(self, *args):
r'''From Giac's documentation:
Help for Dirac:
Dirac(Real)
@@ -139,9 +139,9 @@ cdef class GiacMethods_base:
Ex2:Dirac(-1)
Ex3: int(Dirac(x)*(x-1)^2,x,-1,2)
'''
- return GiacMethods['Dirac'](self,*args)
+ return GiacMethods['Dirac'](self, *args)
- def Ei(self,*args):
+ def Ei(self, *args):
r'''From Giac's documentation:
Help for Ei:
Ei(Expr)
@@ -149,9 +149,9 @@ cdef class GiacMethods_base:
See also: 1/ Si 2/ Ci 3/ Li
Ex1:Ei(1.0)
'''
- return GiacMethods['Ei'](self,*args)
+ return GiacMethods['Ei'](self, *args)
- def Factor(self,*args):
+ def Factor(self, *args):
r'''From Giac's documentation:
Help for Factor:
Factor(Expr)
@@ -160,9 +160,9 @@ cdef class GiacMethods_base:
Ex1:Factor(x^4-1)
Ex2:Factor(x^4+12*x^3+54*x^2+108*x+81)
'''
- return GiacMethods['Factor'](self,*args)
+ return GiacMethods['Factor'](self, *args)
- def GF(self,*args):
+ def GF(self, *args):
r'''From Giac's documentation:
Help for GF:
GF(Intg(p), Intg(n)|Minpoly,[Variable],[0|undef|Poly])
@@ -174,9 +174,9 @@ cdef class GiacMethods_base:
Ex5:GF(2,8,['a','G'])
Ex6: G:=GF(2,a^8+a^6+a^3+a^2+1,['a','G'],undef)
'''
- return GiacMethods['GF'](self,*args)
+ return GiacMethods['GF'](self, *args)
- def Gamma(self,*args):
+ def Gamma(self, *args):
r'''From Giac's documentation:
Help for Gamma:
Gamma(Real(a),[Real(b)])
@@ -187,9 +187,9 @@ cdef class GiacMethods_base:
Ex3:Gamma(gamma(-5.1))
Ex4:Gamma(-5.1,2.1)
'''
- return GiacMethods['Gamma'](self,*args)
+ return GiacMethods['Gamma'](self, *args)
- def Heaviside(self,*args):
+ def Heaviside(self, *args):
r'''From Giac's documentation:
Help for Heaviside:
Heaviside(Real)
@@ -199,9 +199,9 @@ cdef class GiacMethods_base:
Ex2:Heaviside(-1)
Ex3:Heaviside(0)
'''
- return GiacMethods['Heaviside'](self,*args)
+ return GiacMethods['Heaviside'](self, *args)
- def JordanBlock(self,*args):
+ def JordanBlock(self, *args):
r'''From Giac's documentation:
Help for JordanBlock:
JordanBlock(Expr(a),Intg(n))
@@ -209,9 +209,9 @@ cdef class GiacMethods_base:
See also: 1/ jordan
Ex1:JordanBlock(7,3)
'''
- return GiacMethods['JordanBlock'](self,*args)
+ return GiacMethods['JordanBlock'](self, *args)
- def LU(self,*args):
+ def LU(self, *args):
r'''From Giac's documentation:
Help for LU:
LU(Mtrx(A),Var(L),Var(U),Var(P))
@@ -220,9 +220,9 @@ cdef class GiacMethods_base:
Ex1:LU([[1,2],[3,4]],L,U,P)
Ex2:LU([[6,12,18],[5,14,31],[3,8,18]],L,U,P)
'''
- return GiacMethods['LU'](self,*args)
+ return GiacMethods['LU'](self, *args)
- def LambertW(self,*args):
+ def LambertW(self, *args):
r'''From Giac's documentation:
Help for LambertW:
LambertW(Real(x),[Intg(n)])
@@ -231,9 +231,9 @@ cdef class GiacMethods_base:
Ex2:LambertW(ln(4))
Ex3:LambertW(-0.1,-1)
'''
- return GiacMethods['LambertW'](self,*args)
+ return GiacMethods['LambertW'](self, *args)
- def Li(self,*args):
+ def Li(self, *args):
r'''From Giac's documentation:
Help for Li:
Li(Expr)
@@ -241,9 +241,9 @@ cdef class GiacMethods_base:
See also: 1/ Si 2/ Ci 3/ Ei
Ex1:Li(2.0)
'''
- return GiacMethods['Li'](self,*args)
+ return GiacMethods['Li'](self, *args)
- def Line(self,*args):
+ def Line(self, *args):
r'''From Giac's documentation:
Help for Line:
Line(Expr(a),Expr(b),Expr(c),Expr(d))
@@ -251,9 +251,9 @@ cdef class GiacMethods_base:
See also: 1/ segment
Ex1:Line(-1,-2,1,2)
'''
- return GiacMethods['Line'](self,*args)
+ return GiacMethods['Line'](self, *args)
- def LineHorz(self,*args):
+ def LineHorz(self, *args):
r'''From Giac's documentation:
Help for LineHorz:
LineHorz(Expr(a))
@@ -261,9 +261,9 @@ cdef class GiacMethods_base:
See also: 1/ Line 2/ LineVert
Ex1:LineHorz(-1)
'''
- return GiacMethods['LineHorz'](self,*args)
+ return GiacMethods['LineHorz'](self, *args)
- def LineTan(self,*args):
+ def LineTan(self, *args):
r'''From Giac's documentation:
Help for LineTan:
LineTan(Expr(f(x)),[Var],Expr(a))
@@ -275,9 +275,9 @@ cdef class GiacMethods_base:
Ex4: LineTan x^2-x,1
Ex5: (LineTan sin(t),t,pi/4)
'''
- return GiacMethods['LineTan'](self,*args)
+ return GiacMethods['LineTan'](self, *args)
- def LineVert(self,*args):
+ def LineVert(self, *args):
r'''From Giac's documentation:
Help for LineVert:
LineVert(Expr(a))
@@ -285,9 +285,9 @@ cdef class GiacMethods_base:
See also: 1/ Line 2/ LineHorz
Ex1:LineVert(2)
'''
- return GiacMethods['LineVert'](self,*args)
+ return GiacMethods['LineVert'](self, *args)
- def Phi(self,*args):
+ def Phi(self, *args):
r'''From Giac's documentation:
Help for Phi:
Phi(Intg(n))
@@ -296,9 +296,9 @@ cdef class GiacMethods_base:
Ex1:Phi(11)
Ex2:Phi(6)
'''
- return GiacMethods['Phi'](self,*args)
+ return GiacMethods['Phi'](self, *args)
- def Pi(self,*args):
+ def Pi(self, *args):
r'''From Giac's documentation:
Help for Pi:
Pi()
@@ -309,9 +309,9 @@ cdef class GiacMethods_base:
Ex3: evalf(pi)
Ex4: evalf(Pi)
'''
- return GiacMethods['Pi'](self,*args)
+ return GiacMethods['Pi'](self, *args)
- def Psi(self,*args):
+ def Psi(self, *args):
r'''From Giac's documentation:
Help for Psi:
Psi(Real(a),Intg(n))
@@ -319,9 +319,9 @@ cdef class GiacMethods_base:
See also: 1/ Gamma
Ex1:Psi(3,1)
'''
- return GiacMethods['Psi'](self,*args)
+ return GiacMethods['Psi'](self, *args)
- def QR(self,*args):
+ def QR(self, *args):
r'''From Giac's documentation:
Help for QR:
QR(Mtrx,Var(Q),Var(R),[Real(eps)])
@@ -329,9 +329,9 @@ cdef class GiacMethods_base:
See also: 1/ qr 2/ LU
Ex1:QR([[1,2],[3,4]],Q,R)
'''
- return GiacMethods['QR'](self,*args)
+ return GiacMethods['QR'](self, *args)
- def RandSeed(self,*args):
+ def RandSeed(self, *args):
r'''From Giac's documentation:
Help for RandSeed:
RandSeed(Intg)
@@ -339,9 +339,9 @@ cdef class GiacMethods_base:
See also: 1/ srand
Ex1:RandSeed(321)
'''
- return GiacMethods['RandSeed'](self,*args)
+ return GiacMethods['RandSeed'](self, *args)
- def Row(self,*args):
+ def Row(self, *args):
r'''From Giac's documentation:
Help for Row:
Row(NULL)
@@ -349,9 +349,9 @@ cdef class GiacMethods_base:
See also: 1/ Col
Ex1:Row()
'''
- return GiacMethods['Row'](self,*args)
+ return GiacMethods['Row'](self, *args)
- def SortA(self,*args):
+ def SortA(self, *args):
r'''From Giac's documentation:
Help for SortA:
SortA(LstReal||Seq||Mtrx)
@@ -362,9 +362,9 @@ cdef class GiacMethods_base:
Ex3: SortA [3,4,2],[6,4,5]
Ex4: SortA [[3,4,2],[6,4,5]]
'''
- return GiacMethods['SortA'](self,*args)
+ return GiacMethods['SortA'](self, *args)
- def SortD(self,*args):
+ def SortD(self, *args):
r'''From Giac's documentation:
Help for SortD:
SortD(LstReal||Seq||Mtrx)
@@ -375,9 +375,9 @@ cdef class GiacMethods_base:
Ex3: SortD [[3,4,2],[6,4,5]]
Ex4: SortD [3,4,2],[6,4,5]
'''
- return GiacMethods['SortD'](self,*args)
+ return GiacMethods['SortD'](self, *args)
- def UTPC(self,*args):
+ def UTPC(self, *args):
r'''From Giac's documentation:
Help for UTPC:
UTPC(Intg(n),Real(x0))
@@ -386,9 +386,9 @@ cdef class GiacMethods_base:
Ex1:UTPC(2,6.1)
Ex2:UTPC(4,6.1)
'''
- return GiacMethods['UTPC'](self,*args)
+ return GiacMethods['UTPC'](self, *args)
- def UTPF(self,*args):
+ def UTPF(self, *args):
r'''From Giac's documentation:
Help for UTPF:
UTPF(Intg(n),Intg(d),Real(x0))
@@ -397,9 +397,9 @@ cdef class GiacMethods_base:
Ex1:UTPF(4,10,3.5)
Ex2:UTPF(4,4,2.1)
'''
- return GiacMethods['UTPF'](self,*args)
+ return GiacMethods['UTPF'](self, *args)
- def UTPN(self,*args):
+ def UTPN(self, *args):
r'''From Giac's documentation:
Help for UTPN:
UTPN(Real(mu),Real(v),Real(x0))
@@ -408,9 +408,9 @@ cdef class GiacMethods_base:
Ex1:UTPN(1.96)
Ex2:UTPN(1,4,2.96)+normal_cdf(1,2,2.96)
'''
- return GiacMethods['UTPN'](self,*args)
+ return GiacMethods['UTPN'](self, *args)
- def UTPT(self,*args):
+ def UTPT(self, *args):
r'''From Giac's documentation:
Help for UTPT:
UTPT(Intg(n),Real(x0))
@@ -419,9 +419,9 @@ cdef class GiacMethods_base:
Ex1:UTPT(3,2.35)
Ex2:UTPT(3,-2.35)
'''
- return GiacMethods['UTPT'](self,*args)
+ return GiacMethods['UTPT'](self, *args)
- def VARS(self,*args):
+ def VARS(self, *args):
r'''From Giac's documentation:
Help for VARS:
VARS(NULL)
@@ -429,9 +429,9 @@ cdef class GiacMethods_base:
See also: 1/ lvar
Ex1:VARS()
'''
- return GiacMethods['VARS'](self,*args)
+ return GiacMethods['VARS'](self, *args)
- def VAS(self,*args):
+ def VAS(self, *args):
r'''From Giac's documentation:
Help for VAS:
VAS(Poly(P))
@@ -439,9 +439,9 @@ cdef class GiacMethods_base:
See also: 1/ VAS_positive 2/ sturmab 3/ realroot
Ex1:VAS(x^3-7*x+7)
'''
- return GiacMethods['VAS'](self,*args)
+ return GiacMethods['VAS'](self, *args)
- def VAS_positive(self,*args):
+ def VAS_positive(self, *args):
r'''From Giac's documentation:
Help for VAS_positive:
VAS_positive(Poly(P))
@@ -449,9 +449,9 @@ cdef class GiacMethods_base:
See also: 1/ poslbdLMQ 2/ posubLMQ 3/ VAS 4/ realroot
Ex1:VAS_positive(x^3-7*x+7)
'''
- return GiacMethods['VAS_positive'](self,*args)
+ return GiacMethods['VAS_positive'](self, *args)
- def Zeta(self,*args):
+ def Zeta(self, *args):
r'''From Giac's documentation:
Help for Zeta:
Zeta(Real(a))
@@ -459,9 +459,9 @@ cdef class GiacMethods_base:
See also: 1/ sum
Ex1:Zeta(2)
'''
- return GiacMethods['Zeta'](self,*args)
+ return GiacMethods['Zeta'](self, *args)
- def a2q(self,*args):
+ def a2q(self, *args):
r'''From Giac's documentation:
Help for a2q:
a2q(Mtrx,VectVar)
@@ -470,9 +470,9 @@ cdef class GiacMethods_base:
Ex1:a2q([[1,2],[4,4]],[x,y])
Ex2:a2q([[1,3],[3,4]],[x,y])
'''
- return GiacMethods['a2q'](self,*args)
+ return GiacMethods['a2q'](self, *args)
- def abcuv(self,*args):
+ def abcuv(self, *args):
r'''From Giac's documentation:
Help for abcuv:
abcuv(Poly(a),Poly(b),Poly(c),[Var])
@@ -484,9 +484,9 @@ cdef class GiacMethods_base:
Ex4:abcuv(X^2+2*X+1,X^2-1,X^3+1,X)
Ex5:abcuv([1,2,1],[1,0,-1],[1,0,0,1])
'''
- return GiacMethods['abcuv'](self,*args)
+ return GiacMethods['abcuv'](self, *args)
- def about(self,*args):
+ def about(self, *args):
r'''From Giac's documentation:
Help for about:
about(Var(a))
@@ -495,9 +495,9 @@ cdef class GiacMethods_base:
Ex1:about(a)
Ex2:about(n)
'''
- return GiacMethods['about'](self,*args)
+ return GiacMethods['about'](self, *args)
- def abs(self,*args):
+ def abs(self, *args):
r'''From Giac's documentation:
Help for abs:
abs(Cplx||LstCplx)
@@ -508,9 +508,9 @@ cdef class GiacMethods_base:
Ex3:abs((1+2*i)^2)
Ex4:abs([-2,1+i,-4])
'''
- return GiacMethods['abs'](self,*args)
+ return GiacMethods['abs'](self, *args)
- def abscissa(self,*args):
+ def abscissa(self, *args):
r'''From Giac's documentation:
Help for abscissa:
abscissa(Pnt or Vect)
@@ -521,9 +521,9 @@ cdef class GiacMethods_base:
Ex3:abscissa(-1-i)
Ex4:abscissa(point(1,2,3))
'''
- return GiacMethods['abscissa'](self,*args)
+ return GiacMethods['abscissa'](self, *args)
- def accumulate_head_tail(self,*args):
+ def accumulate_head_tail(self, *args):
r'''From Giac's documentation:
Help for accumulate_head_tail:
accumulate_head_tail(Lst(l),Intg(p),Intg(q))
@@ -531,9 +531,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:accumulate_head_tail([0,1,2,3,4,5,6,7,8,9],3,2)
'''
- return GiacMethods['accumulate_head_tail'](self,*args)
+ return GiacMethods['accumulate_head_tail'](self, *args)
- def acos(self,*args):
+ def acos(self, *args):
r'''From Giac's documentation:
Help for acos:
acos(Expr)
@@ -541,9 +541,9 @@ cdef class GiacMethods_base:
See also: 1/ cos 2/ acosh
Ex1:acos(0)
'''
- return GiacMethods['acos'](self,*args)
+ return GiacMethods['acos'](self, *args)
- def acos2asin(self,*args):
+ def acos2asin(self, *args):
r'''From Giac's documentation:
Help for acos2asin:
acos2asin(Expr)
@@ -552,9 +552,9 @@ cdef class GiacMethods_base:
Ex1:acos2asin(acos(x)+asin(x))
Ex2:acos2asin(2*acos(x))
'''
- return GiacMethods['acos2asin'](self,*args)
+ return GiacMethods['acos2asin'](self, *args)
- def acos2atan(self,*args):
+ def acos2atan(self, *args):
r'''From Giac's documentation:
Help for acos2atan:
acos2atan(Expr)
@@ -563,9 +563,9 @@ cdef class GiacMethods_base:
Ex1:acos2atan(2*acos(x))
Ex2:acos2atan(acos(sqrt(1-x^2))+acos(x))
'''
- return GiacMethods['acos2atan'](self,*args)
+ return GiacMethods['acos2atan'](self, *args)
- def acosh(self,*args):
+ def acosh(self, *args):
r'''From Giac's documentation:
Help for acosh:
acosh(Expr)
@@ -573,9 +573,9 @@ cdef class GiacMethods_base:
See also: 1/ cosh 2/ acos
Ex1:acosh(1)
'''
- return GiacMethods['acosh'](self,*args)
+ return GiacMethods['acosh'](self, *args)
- def acot(self,*args):
+ def acot(self, *args):
r'''From Giac's documentation:
Help for acot:
acot(Expr)
@@ -583,9 +583,9 @@ cdef class GiacMethods_base:
See also: 1/ atan 2/ arccos
Ex1:acot(0)
'''
- return GiacMethods['acot'](self,*args)
+ return GiacMethods['acot'](self, *args)
- def acsc(self,*args):
+ def acsc(self, *args):
r'''From Giac's documentation:
Help for acsc:
acsc(Expr)
@@ -594,18 +594,18 @@ cdef class GiacMethods_base:
Ex1:acsc(1)
Ex2:acsc(2)
'''
- return GiacMethods['acsc'](self,*args)
+ return GiacMethods['acsc'](self, *args)
- def acyclic(self,*args):
+ def acyclic(self, *args):
r'''From Giac's documentation:
Help for acyclic:
acyclic(Opt)
Option for the random_network command.
See also: 1/ random_network
'''
- return GiacMethods['acyclic'](self,*args)
+ return GiacMethods['acyclic'](self, *args)
- def add(self,*args):
+ def add(self, *args):
r'''From Giac's documentation:
Help for add:
add(Expr,Var,VarMin(a),VarMax(b),[VarStep(p)])
@@ -622,9 +622,9 @@ cdef class GiacMethods_base:
Ex9:add(1/(x*(x+1)),x)
Ex10:add(cos(n*x),n)
'''
- return GiacMethods['add'](self,*args)
+ return GiacMethods['add'](self, *args)
- def add_arc(self,*args):
+ def add_arc(self, *args):
r'''From Giac's documentation:
Help for add_arc:
add_arc(Graph(G),Edge(e)||Trail(T)||Lst(E))
@@ -632,9 +632,9 @@ cdef class GiacMethods_base:
See also: 1/ add_edge 2/ delete_arc 3/ digraph 4/ edges 5/ has_arc 6/ trail
Ex1:add_arc(digraph(trail(1,2,3,4,5,1)),[[1,3],[2,4]])
'''
- return GiacMethods['add_arc'](self,*args)
+ return GiacMethods['add_arc'](self, *args)
- def add_edge(self,*args):
+ def add_edge(self, *args):
r'''From Giac's documentation:
Help for add_edge:
add_edge(Graph(G),Edge(e)||Trail(T)||Lst(E))
@@ -642,9 +642,9 @@ cdef class GiacMethods_base:
See also: 1/ add_arc 2/ delete_edge 3/ edges 4/ graph 5/ has_edge 6/ trail
Ex1:add_edge(graph(trail(1,2,3,4)),[4,1])
'''
- return GiacMethods['add_edge'](self,*args)
+ return GiacMethods['add_edge'](self, *args)
- def add_vertex(self,*args):
+ def add_vertex(self, *args):
r'''From Giac's documentation:
Help for add_vertex:
add_vertex(Graph(G),Vrtx(v)||Lst(V))
@@ -652,9 +652,9 @@ cdef class GiacMethods_base:
See also: 1/ add_arc 2/ add_edge 3/ delete_vertex
Ex1:add_vertex(cycle_graph(5),["a","b"])
'''
- return GiacMethods['add_vertex'](self,*args)
+ return GiacMethods['add_vertex'](self, *args)
- def additionally(self,*args):
+ def additionally(self, *args):
r'''From Giac's documentation:
Help for additionally:
additionally(Expr)
@@ -663,9 +663,9 @@ cdef class GiacMethods_base:
Ex1: assume(n,integer);additionally(n>5)
Ex2: assume(n,integer);assume(n>=2,additionally)
'''
- return GiacMethods['additionally'](self,*args)
+ return GiacMethods['additionally'](self, *args)
- def addtable(self,*args):
+ def addtable(self, *args):
r'''From Giac's documentation:
Help for addtable:
addtable(fourier||laplace,f(x),F(s),Var(x),Var(s))
@@ -673,9 +673,9 @@ cdef class GiacMethods_base:
See also: 1/ fourier 2/ laplace
Ex1:addtable(fourier,y(x),Y(s),x,s)
'''
- return GiacMethods['addtable'](self,*args)
+ return GiacMethods['addtable'](self, *args)
- def adjacency_matrix(self,*args):
+ def adjacency_matrix(self, *args):
r'''From Giac's documentation:
Help for adjacency_matrix:
adjacency_matrix(Graph(G))
@@ -683,9 +683,9 @@ cdef class GiacMethods_base:
See also: 1/ neighbors
Ex1:adjacency_matrix(graph(trail(1,2,3,4,2,5,1,3)))
'''
- return GiacMethods['adjacency_matrix'](self,*args)
+ return GiacMethods['adjacency_matrix'](self, *args)
- def adjoint_matrix(self,*args):
+ def adjoint_matrix(self, *args):
r'''From Giac's documentation:
Help for adjoint_matrix:
adjoint_matrix(Mtrx)
@@ -693,9 +693,9 @@ cdef class GiacMethods_base:
See also: 1/ pcar
Ex1:adjoint_matrix([[1,i],[2,3]])
'''
- return GiacMethods['adjoint_matrix'](self,*args)
+ return GiacMethods['adjoint_matrix'](self, *args)
- def affix(self,*args):
+ def affix(self, *args):
r'''From Giac's documentation:
Help for affix:
affix(Pnt||Vect)
@@ -705,9 +705,9 @@ cdef class GiacMethods_base:
Ex2:affix(point(i)-point(1+2*i))
Ex3:affix([1,2])
'''
- return GiacMethods['affix'](self,*args)
+ return GiacMethods['affix'](self, *args)
- def algsubs(self,*args):
+ def algsubs(self, *args):
r'''From Giac's documentation:
Help for algsubs:
algsubs(Equal(Xpr1=Xpr2),Expr(Xpr))
@@ -717,9 +717,9 @@ cdef class GiacMethods_base:
Ex2:algsubs(a*b/c=d, 2*a*b^2/c)
Ex3:algsubs(2a=p^2-q^2,algsubs(2c=p^2+q^2,c^2-a^2))
'''
- return GiacMethods['algsubs'](self,*args)
+ return GiacMethods['algsubs'](self, *args)
- def algvar(self,*args):
+ def algvar(self, *args):
r'''From Giac's documentation:
Help for algvar:
algvar(Expr)
@@ -727,9 +727,9 @@ cdef class GiacMethods_base:
See also: 1/ lvar 2/ lname
Ex1:algvar(sqrt(x)+y)
'''
- return GiacMethods['algvar'](self,*args)
+ return GiacMethods['algvar'](self, *args)
- def all_trig_solutions(self,*args):
+ def all_trig_solutions(self, *args):
r'''From Giac's documentation:
Help for all_trig_solutions:
all_trig_solutions(:=Intg(0 or 1))
@@ -738,9 +738,9 @@ cdef class GiacMethods_base:
Ex1: all_trig_solutions:=1
Ex2: all_trig_solutions:=0
'''
- return GiacMethods['all_trig_solutions'](self,*args)
+ return GiacMethods['all_trig_solutions'](self, *args)
- def allpairs_distance(self,*args):
+ def allpairs_distance(self, *args):
r'''From Giac's documentation:
Help for allpairs_distance:
allpairs_distance(Graph(G))
@@ -748,9 +748,9 @@ cdef class GiacMethods_base:
See also: 1/ dijkstra 2/ graph_diameter 3/ vertex_distance
Ex1:allpairs_distance(graph(%{[1,2],[1,3],[1,4],[1,5],[2,3],[3,4],[4,5],[5,2]%}))
'''
- return GiacMethods['allpairs_distance'](self,*args)
+ return GiacMethods['allpairs_distance'](self, *args)
- def alog10(self,*args):
+ def alog10(self, *args):
r'''From Giac's documentation:
Help for alog10:
alog10(Expr)
@@ -758,9 +758,9 @@ cdef class GiacMethods_base:
See also: 1/ log10
Ex1:alog10(3)
'''
- return GiacMethods['alog10'](self,*args)
+ return GiacMethods['alog10'](self, *args)
- def altitude(self,*args):
+ def altitude(self, *args):
r'''From Giac's documentation:
Help for altitude:
altitude((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -768,9 +768,9 @@ cdef class GiacMethods_base:
See also: 1/ perpendicular 2/ orthogonal 3/ orthocenter 4/ common_perpendicular
Ex1:altitude(-1,1-i,i)
'''
- return GiacMethods['altitude'](self,*args)
+ return GiacMethods['altitude'](self, *args)
- def angle(self,*args):
+ def angle(self, *args):
r'''From Giac's documentation:
Help for angle:
angle((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -782,9 +782,9 @@ cdef class GiacMethods_base:
Ex4:angle(0,1,i,"a")
Ex5:angle(i,1,1+i,"b")
'''
- return GiacMethods['angle'](self,*args)
+ return GiacMethods['angle'](self, *args)
- def angle_radian(self,*args):
+ def angle_radian(self, *args):
r'''From Giac's documentation:
Help for angle_radian:
angle_radian(:=Intg(0 or 1))
@@ -793,9 +793,9 @@ cdef class GiacMethods_base:
Ex1: angle_radian:=1
Ex2: angle_radian:=0
'''
- return GiacMethods['angle_radian'](self,*args)
+ return GiacMethods['angle_radian'](self, *args)
- def angleat(self,*args):
+ def angleat(self, *args):
r'''From Giac's documentation:
Help for angleat:
angleat(Pnt(A),Pnt(B),Pnt(C),(Pnt or Cplx(z0)))
@@ -803,9 +803,9 @@ cdef class GiacMethods_base:
See also: 1/ angle 2/ angleatraw 3/ legend
Ex1: A:=point(0);B:=point(1);C:=point(i);angleat(A,B,C,-2-i)
'''
- return GiacMethods['angleat'](self,*args)
+ return GiacMethods['angleat'](self, *args)
- def angleatraw(self,*args):
+ def angleatraw(self, *args):
r'''From Giac's documentation:
Help for angleatraw:
angleatraw(Pnt(A)),Pnt(B),Pnt(C),(Pnt or Cplx(z0)))
@@ -813,9 +813,9 @@ cdef class GiacMethods_base:
See also: 1/ angle 2/ angleat
Ex1: A:=point(0);B:=point(1);C:=point(i);angleatraw(A,B,C,-2-i)
'''
- return GiacMethods['angleatraw'](self,*args)
+ return GiacMethods['angleatraw'](self, *args)
- def ans(self,*args):
+ def ans(self, *args):
r'''From Giac's documentation:
Help for ans:
ans(Intg(n))
@@ -825,9 +825,9 @@ cdef class GiacMethods_base:
Ex2:ans(2)
Ex3:ans(-2)
'''
- return GiacMethods['ans'](self,*args)
+ return GiacMethods['ans'](self, *args)
- def antiprism_graph(self,*args):
+ def antiprism_graph(self, *args):
r'''From Giac's documentation:
Help for antiprism_graph:
antiprism_graph(Intg(n))
@@ -835,9 +835,9 @@ cdef class GiacMethods_base:
See also: 1/ prism_graph
Ex1:antiprism_graph(5)
'''
- return GiacMethods['antiprism_graph'](self,*args)
+ return GiacMethods['antiprism_graph'](self, *args)
- def append(self,*args):
+ def append(self, *args):
r'''From Giac's documentation:
Help for append:
append((Lst||Set||Str(L),Elem))
@@ -850,9 +850,9 @@ cdef class GiacMethods_base:
Ex5: S:=set[1,2,4];S:=append(S,6)
Ex6: S:=set[1,2,4];S.append(6)
'''
- return GiacMethods['append'](self,*args)
+ return GiacMethods['append'](self, *args)
- def apply(self,*args):
+ def apply(self, *args):
r'''From Giac's documentation:
Help for apply:
apply(Fnc(f),Lst(l))
@@ -861,9 +861,9 @@ cdef class GiacMethods_base:
Ex1:apply(x->x^3,[1,2,3])
Ex2:apply(x->x+1,[[1,2,3],[1,2,3]],matrix)
'''
- return GiacMethods['apply'](self,*args)
+ return GiacMethods['apply'](self, *args)
- def approx(self,*args):
+ def approx(self, *args):
r'''From Giac's documentation:
Help for approx:
approx(Expr,[Int])
@@ -876,9 +876,9 @@ cdef class GiacMethods_base:
Ex5:approx(sqrt(2)+pi)
Ex6:approx(sqrt(2)+pi,30)
'''
- return GiacMethods['approx'](self,*args)
+ return GiacMethods['approx'](self, *args)
- def arc(self,*args):
+ def arc(self, *args):
r'''From Giac's documentation:
Help for arc:
arc(Pnt, Pnt, Real,[Var(C)],[Var(r)],[Opt(segment)])
@@ -889,9 +889,9 @@ cdef class GiacMethods_base:
Ex3:arc(i,1,pi/4,segment)
Ex4:arc(i,1,pi/4,segment,affichage=1+rempli)
'''
- return GiacMethods['arc'](self,*args)
+ return GiacMethods['arc'](self, *args)
- def arcLen(self,*args):
+ def arcLen(self, *args):
r'''From Giac's documentation:
Help for arcLen:
arcLen(Expr(Xpr) or Lst([Xpr1,Xpr2]),Var,Real(a),Real(b))
@@ -901,9 +901,9 @@ cdef class GiacMethods_base:
Ex2:arcLen([t,t^2],t,1,2)
Ex3:arcLen([cos(t),sin(t)],t,1,2)
'''
- return GiacMethods['arcLen'](self,*args)
+ return GiacMethods['arcLen'](self, *args)
- def arccos(self,*args):
+ def arccos(self, *args):
r'''From Giac's documentation:
Help for arccos:
arccos(Expr)
@@ -911,9 +911,9 @@ cdef class GiacMethods_base:
See also: 1/ cos 2/ acosh
Ex1:arccos(0)
'''
- return GiacMethods['arccos'](self,*args)
+ return GiacMethods['arccos'](self, *args)
- def arccosh(self,*args):
+ def arccosh(self, *args):
r'''From Giac's documentation:
Help for arccosh:
arccosh(Expr)
@@ -921,9 +921,9 @@ cdef class GiacMethods_base:
See also: 1/ cosh 2/ acos
Ex1:arccosh(1)
'''
- return GiacMethods['arccosh'](self,*args)
+ return GiacMethods['arccosh'](self, *args)
- def arclen(self,*args):
+ def arclen(self, *args):
r'''From Giac's documentation:
Help for arclen:
arclen(Expr(Xpr) or Lst([Xpr1,Xpr2]),Var,Real(a),Real(b))
@@ -933,9 +933,9 @@ cdef class GiacMethods_base:
Ex2:arclen([t,t^2],t,1,2)
Ex3:arclen([cos(t),sin(t)],t,1,2)
'''
- return GiacMethods['arclen'](self,*args)
+ return GiacMethods['arclen'](self, *args)
- def arcsin(self,*args):
+ def arcsin(self, *args):
r'''From Giac's documentation:
Help for arcsin:
arcsin(Expr)
@@ -943,9 +943,9 @@ cdef class GiacMethods_base:
See also: 1/ sin
Ex1:arcsin(0)
'''
- return GiacMethods['arcsin'](self,*args)
+ return GiacMethods['arcsin'](self, *args)
- def arcsinh(self,*args):
+ def arcsinh(self, *args):
r'''From Giac's documentation:
Help for arcsinh:
arcsinh(Expr)
@@ -953,9 +953,9 @@ cdef class GiacMethods_base:
See also: 1/ sinh 2/ asin
Ex1:arcsinh(0)
'''
- return GiacMethods['arcsinh'](self,*args)
+ return GiacMethods['arcsinh'](self, *args)
- def arctan(self,*args):
+ def arctan(self, *args):
r'''From Giac's documentation:
Help for arctan:
arctan(Expr)
@@ -963,9 +963,9 @@ cdef class GiacMethods_base:
See also: 1/ tan 2/ atanh
Ex1:arctan(0)
'''
- return GiacMethods['arctan'](self,*args)
+ return GiacMethods['arctan'](self, *args)
- def arctanh(self,*args):
+ def arctanh(self, *args):
r'''From Giac's documentation:
Help for arctanh:
arctanh(Expr)
@@ -973,9 +973,9 @@ cdef class GiacMethods_base:
See also: 1/ atan 2/ tanh
Ex1:arctanh(0)
'''
- return GiacMethods['arctanh'](self,*args)
+ return GiacMethods['arctanh'](self, *args)
- def area(self,*args):
+ def area(self, *args):
r'''From Giac's documentation:
Help for area:
area(Polygone || Expr,x=a..b,[n],[Method])
@@ -989,9 +989,9 @@ cdef class GiacMethods_base:
Ex6:area(x^2,x=0..1,5,simpson)
Ex7:area(x^2,x=0..1,5,rombergm)
'''
- return GiacMethods['area'](self,*args)
+ return GiacMethods['area'](self, *args)
- def areaat(self,*args):
+ def areaat(self, *args):
r'''From Giac's documentation:
Help for areaat:
areaat(Polygone, Pnt||Cplx(z0))
@@ -1003,9 +1003,9 @@ cdef class GiacMethods_base:
Ex4: p:=polygon(0,1,i);areaat(p,1+i)
Ex5: A:=point(0);B:=point(1+i);c:=carre(A,B);areaat(c,i)
'''
- return GiacMethods['areaat'](self,*args)
+ return GiacMethods['areaat'](self, *args)
- def areaatraw(self,*args):
+ def areaatraw(self, *args):
r'''From Giac's documentation:
Help for areaatraw:
areaatraw(Polygone, Pnt||Cplx(z0))
@@ -1017,9 +1017,9 @@ cdef class GiacMethods_base:
Ex4:areaatraw(polygon(0,1,i),1+i)
Ex5: A:=point(0);B:=point(1+i);c:=carre(A,B);areaatraw(c,i)
'''
- return GiacMethods['areaatraw'](self,*args)
+ return GiacMethods['areaatraw'](self, *args)
- def areaplot(self,*args):
+ def areaplot(self, *args):
r'''From Giac's documentation:
Help for areaplot:
areaplot(Expr,x=a..b,[n],[Method])
@@ -1029,9 +1029,9 @@ cdef class GiacMethods_base:
Ex2:areaplot(x^2,x=0..1,5,trapezoid)
Ex3:areaplot(x^2,x=0..1,5,middle_point)
'''
- return GiacMethods['areaplot'](self,*args)
+ return GiacMethods['areaplot'](self, *args)
- def arg(self,*args):
+ def arg(self, *args):
r'''From Giac's documentation:
Help for arg:
arg(Expr)
@@ -1041,9 +1041,9 @@ cdef class GiacMethods_base:
Ex2:arg(1+2*i)
Ex3:arg((1+2*i)^2)
'''
- return GiacMethods['arg'](self,*args)
+ return GiacMethods['arg'](self, *args)
- def array(self,*args):
+ def array(self, *args):
r'''From Giac's documentation:
Help for array:
array(Opt)
@@ -1052,9 +1052,9 @@ cdef class GiacMethods_base:
Ex1: A[0..2,0..2]:=1;A[0..1,1..2]:=2;convert(A,array)
Ex2: B[0..1,1..2]:=1;B[2,2]:=2;convert(B,array)
'''
- return GiacMethods['array'](self,*args)
+ return GiacMethods['array'](self, *args)
- def arrivals(self,*args):
+ def arrivals(self, *args):
r'''From Giac's documentation:
Help for arrivals:
arrivals(Graph(G),[Vrtx(v)])
@@ -1062,9 +1062,9 @@ cdef class GiacMethods_base:
See also: 1/ in_degree
Ex1:arrivals(digraph(%{[1,2],[1,3],[2,3]%}),1)
'''
- return GiacMethods['arrivals'](self,*args)
+ return GiacMethods['arrivals'](self, *args)
- def articulation_points(self,*args):
+ def articulation_points(self, *args):
r'''From Giac's documentation:
Help for articulation_points:
articulation_points(Graph(G))
@@ -1073,9 +1073,9 @@ cdef class GiacMethods_base:
Ex1:articulation_points(path_graph(5))
Ex2:articulation_points(cycle_graph(5))
'''
- return GiacMethods['articulation_points'](self,*args)
+ return GiacMethods['articulation_points'](self, *args)
- def asin(self,*args):
+ def asin(self, *args):
r'''From Giac's documentation:
Help for asin:
asin(Expr)
@@ -1083,9 +1083,9 @@ cdef class GiacMethods_base:
See also: 1/ sin
Ex1:asin(0)
'''
- return GiacMethods['asin'](self,*args)
+ return GiacMethods['asin'](self, *args)
- def asin2acos(self,*args):
+ def asin2acos(self, *args):
r'''From Giac's documentation:
Help for asin2acos:
asin2acos(Expr)
@@ -1094,9 +1094,9 @@ cdef class GiacMethods_base:
Ex1:asin2acos(acos(x)+asin(x))
Ex2:asin2acos(2*asin(x))
'''
- return GiacMethods['asin2acos'](self,*args)
+ return GiacMethods['asin2acos'](self, *args)
- def asin2atan(self,*args):
+ def asin2atan(self, *args):
r'''From Giac's documentation:
Help for asin2atan:
asin2atan(Expr)
@@ -1105,9 +1105,9 @@ cdef class GiacMethods_base:
Ex1:asin2atan(2*asin(x))
Ex2:asin2atan(asin(sqrt(1-x^2))+asin(x))
'''
- return GiacMethods['asin2atan'](self,*args)
+ return GiacMethods['asin2atan'](self, *args)
- def asinh(self,*args):
+ def asinh(self, *args):
r'''From Giac's documentation:
Help for asinh:
asinh(Expr)
@@ -1115,9 +1115,9 @@ cdef class GiacMethods_base:
See also: 1/ sinh 2/ asin
Ex1:asinh(0)
'''
- return GiacMethods['asinh'](self,*args)
+ return GiacMethods['asinh'](self, *args)
- def assign_edge_weights(self,*args):
+ def assign_edge_weights(self, *args):
r'''From Giac's documentation:
Help for assign_edge_weights:
assign_edge_weights(Graph(G),Seq(m,n)||Intrv(a..b))
@@ -1126,9 +1126,9 @@ cdef class GiacMethods_base:
Ex1:assign_edge_weights(digraph(trail(1,2,3,4,1)),1,9)
Ex2:assign_edge_weights(digraph(trail(1,2,3,4,1)),0..1)
'''
- return GiacMethods['assign_edge_weights'](self,*args)
+ return GiacMethods['assign_edge_weights'](self, *args)
- def assume(self,*args):
+ def assume(self, *args):
r'''From Giac's documentation:
Help for assume:
assume(Expr)
@@ -1145,9 +1145,9 @@ cdef class GiacMethods_base:
Ex9:assume(a>=2);additionally(a<6)
Ex10:assume(a)
'''
- return GiacMethods['assume'](self,*args)
+ return GiacMethods['assume'](self, *args)
- def at(self,*args):
+ def at(self, *args):
r'''From Giac's documentation:
Help for at:
at(Lst(l)||Mtrx(m),Index(j)||Lst([j,k]))
@@ -1156,9 +1156,9 @@ cdef class GiacMethods_base:
Ex1:at([10,11,12],1)
Ex2:at([[1,2],[3,4]],[1,0])
'''
- return GiacMethods['at'](self,*args)
+ return GiacMethods['at'](self, *args)
- def atan(self,*args):
+ def atan(self, *args):
r'''From Giac's documentation:
Help for atan:
atan(Expr)
@@ -1166,27 +1166,27 @@ cdef class GiacMethods_base:
See also: 1/ tan 2/ atanh
Ex1:atan(0)
'''
- return GiacMethods['atan'](self,*args)
+ return GiacMethods['atan'](self, *args)
- def atan2acos(self,*args):
+ def atan2acos(self, *args):
r'''From Giac's documentation:
Help for atan2acos:
atan2acos(Expr)
Replaces arctan(x) by pi/2-arccos(x/sqrt(1+x^2)) in the argument.
See also: 1/ atan2acos(atan(x))
'''
- return GiacMethods['atan2acos'](self,*args)
+ return GiacMethods['atan2acos'](self, *args)
- def atan2asin(self,*args):
+ def atan2asin(self, *args):
r'''From Giac's documentation:
Help for atan2asin:
atan2asin(Expr)
Replaces arctan(x) by arcsin(x/sqrt(1+x^2)) in the argument.
See also: 1/ atan2asin(atan(x))
'''
- return GiacMethods['atan2asin'](self,*args)
+ return GiacMethods['atan2asin'](self, *args)
- def atanh(self,*args):
+ def atanh(self, *args):
r'''From Giac's documentation:
Help for atanh:
atanh(Expr)
@@ -1194,9 +1194,9 @@ cdef class GiacMethods_base:
See also: 1/ atan 2/ tanh
Ex1:atanh(0)
'''
- return GiacMethods['atanh'](self,*args)
+ return GiacMethods['atanh'](self, *args)
- def atrig2ln(self,*args):
+ def atrig2ln(self, *args):
r'''From Giac's documentation:
Help for atrig2ln:
atrig2ln(Expr)
@@ -1206,9 +1206,9 @@ cdef class GiacMethods_base:
Ex2:atrig2ln(asin(x))
Ex3:atrig2ln(acos(x))
'''
- return GiacMethods['atrig2ln'](self,*args)
+ return GiacMethods['atrig2ln'](self, *args)
- def augment(self,*args):
+ def augment(self, *args):
r'''From Giac's documentation:
Help for augment:
augment(Lst,Lst||Seq,Seq||Str,Str||Mtrx,Mtrx)
@@ -1220,9 +1220,9 @@ cdef class GiacMethods_base:
Ex4: L:=[1,2];L.concat([3,4,5])
Ex5: S:="abcd";S.concat("efghi")
'''
- return GiacMethods['augment'](self,*args)
+ return GiacMethods['augment'](self, *args)
- def auto_correlation(self,*args):
+ def auto_correlation(self, *args):
r'''From Giac's documentation:
Help for auto_correlation:
auto_correlation(Lst)
@@ -1230,9 +1230,9 @@ cdef class GiacMethods_base:
See also: 1/ cross_correlation 2/ correlation
Ex1:auto_correlation([1,-1,0,2,1])
'''
- return GiacMethods['auto_correlation'](self,*args)
+ return GiacMethods['auto_correlation'](self, *args)
- def autosimplify(self,*args):
+ def autosimplify(self, *args):
r'''From Giac's documentation:
Help for autosimplify:
autosimplify(Cmds)
@@ -1245,9 +1245,9 @@ cdef class GiacMethods_base:
Ex5:autosimplify(factor)
Ex6:autosimplify(simplify)
'''
- return GiacMethods['autosimplify'](self,*args)
+ return GiacMethods['autosimplify'](self, *args)
- def avance(self,*args):
+ def avance(self, *args):
r'''From Giac's documentation:
Help for avance:
avance(NULL or Real(n))
@@ -1256,9 +1256,9 @@ cdef class GiacMethods_base:
Ex1: avance 30
Ex2:avance(30)
'''
- return GiacMethods['avance'](self,*args)
+ return GiacMethods['avance'](self, *args)
- def avgRC(self,*args):
+ def avgRC(self, *args):
r'''From Giac's documentation:
Help for avgRC:
avgRC(Expr(Xpr),Var(Var),[Real(h)])
@@ -1268,9 +1268,9 @@ cdef class GiacMethods_base:
Ex2:avgRC(x^2,x,0.1)
Ex3:avgRC(x^2,x)
'''
- return GiacMethods['avgRC'](self,*args)
+ return GiacMethods['avgRC'](self, *args)
- def axes(self,*args):
+ def axes(self, *args):
r'''From Giac's documentation:
Help for axes:
axes(Opt)
@@ -1279,18 +1279,18 @@ cdef class GiacMethods_base:
Ex1: axes=0;segment(0,point(1,1))
Ex2: axes=1;segment(0,point(1,1),epaisseur=5)
'''
- return GiacMethods['axes'](self,*args)
+ return GiacMethods['axes'](self, *args)
- def axis(self,*args):
+ def axis(self, *args):
r'''From Giac's documentation:
Help for axis:
axis(xmin,xmax,ymin,ymax,[zmin,zmaz])
Defines the graphic display
Ex1:axis(-2,4,-1,6)
'''
- return GiacMethods['axis'](self,*args)
+ return GiacMethods['axis'](self, *args)
- def back(self,*args):
+ def back(self, *args):
r'''From Giac's documentation:
Help for back:
back(Vect or Seq or Str)
@@ -1300,9 +1300,9 @@ cdef class GiacMethods_base:
Ex2:back([1,2,3])
Ex3:back("bonjour")
'''
- return GiacMethods['back'](self,*args)
+ return GiacMethods['back'](self, *args)
- def backward(self,*args):
+ def backward(self, *args):
r'''From Giac's documentation:
Help for backward:
backward(NULL or Real(n))
@@ -1311,9 +1311,9 @@ cdef class GiacMethods_base:
Ex1: recule 30
Ex2:backward(30)
'''
- return GiacMethods['backward'](self,*args)
+ return GiacMethods['backward'](self, *args)
- def baisse_crayon(self,*args):
+ def baisse_crayon(self, *args):
r'''From Giac's documentation:
Help for baisse_crayon:
baisse_crayon(NULL)
@@ -1321,18 +1321,18 @@ cdef class GiacMethods_base:
See also: 1/ leve_crayon 2/ crayon
Ex1:baisse_crayon()
'''
- return GiacMethods['baisse_crayon'](self,*args)
+ return GiacMethods['baisse_crayon'](self, *args)
- def bandwidth(self,*args):
+ def bandwidth(self, *args):
r'''From Giac's documentation:
Help for bandwidth:
bandwidth(Opt)
Option for the kernel_density command.
See also: 1/ kernel_density 2/ bins
'''
- return GiacMethods['bandwidth'](self,*args)
+ return GiacMethods['bandwidth'](self, *args)
- def bar_plot(self,*args):
+ def bar_plot(self, *args):
r'''From Giac's documentation:
Help for bar_plot:
bar_plot(Mtrx)
@@ -1342,9 +1342,9 @@ cdef class GiacMethods_base:
Ex2:bar_plot([3/2,2/3,5/4,4/5,7/6,6/7,9/8,8/9,11/10])
Ex3:bar_plot([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])
'''
- return GiacMethods['bar_plot'](self,*args)
+ return GiacMethods['bar_plot'](self, *args)
- def barplot(self,*args):
+ def barplot(self, *args):
r'''From Giac's documentation:
Help for barplot:
barplot(Mtrx)
@@ -1354,9 +1354,9 @@ cdef class GiacMethods_base:
Ex2:barplot([3/2,2/3,5/4,4/5,7/6,6/7,9/8,8/9,11/10])
Ex3:barplot([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])
'''
- return GiacMethods['barplot'](self,*args)
+ return GiacMethods['barplot'](self, *args)
- def bartlett_hann_window(self,*args):
+ def bartlett_hann_window(self, *args):
r'''From Giac's documentation:
Help for bartlett_hann_window:
bartlett_hann_window(Lst,[Interval(n1..n2)])
@@ -1364,9 +1364,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(bartlett_hann_window(randvector(1000,0..1)))
'''
- return GiacMethods['bartlett_hann_window'](self,*args)
+ return GiacMethods['bartlett_hann_window'](self, *args)
- def barycenter(self,*args):
+ def barycenter(self, *args):
r'''From Giac's documentation:
Help for barycenter:
barycenter([Pnt,Real],[Pnt,Real],[Pnt,Real])
@@ -1376,9 +1376,9 @@ cdef class GiacMethods_base:
Ex2:barycenter([[point(-1),1],[point(1+i),2],[point(1-i),1]])
Ex3:barycenter([point(-1),point(1+i),point(1-i)],[1,2,1])
'''
- return GiacMethods['barycenter'](self,*args)
+ return GiacMethods['barycenter'](self, *args)
- def base(self,*args):
+ def base(self, *args):
r'''From Giac's documentation:
Help for base:
base(Opt)
@@ -1388,9 +1388,9 @@ cdef class GiacMethods_base:
Ex2: convert([3,7,1],base,8)
Ex3: horner(revlist([3,7,1]),8)
'''
- return GiacMethods['base'](self,*args)
+ return GiacMethods['base'](self, *args)
- def basis(self,*args):
+ def basis(self, *args):
r'''From Giac's documentation:
Help for basis:
basis(Lst(vector1,..,vectorn))
@@ -1398,9 +1398,9 @@ cdef class GiacMethods_base:
See also: 1/ ker 2/ ibasis
Ex1:basis([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
'''
- return GiacMethods['basis'](self,*args)
+ return GiacMethods['basis'](self, *args)
- def batons(self,*args):
+ def batons(self, *args):
r'''From Giac's documentation:
Help for batons:
batons(Mtrx)
@@ -1410,9 +1410,9 @@ cdef class GiacMethods_base:
Ex2:batons([[1,3],[2,5],[3,2]])
Ex3:batons([1,2,3],[3,5,2])
'''
- return GiacMethods['batons'](self,*args)
+ return GiacMethods['batons'](self, *args)
- def bellman_ford(self,*args):
+ def bellman_ford(self, *args):
r'''From Giac's documentation:
Help for bellman_ford:
bellman_ford(Graph(G),Vrtx(s),Vrtx(t)||Lst(T))
@@ -1420,9 +1420,9 @@ cdef class GiacMethods_base:
See also: 1/ dijkstra 2/ shortest_path
Ex1:bellman_ford(graph(%{[[1,2],-1],[[2,3],-3],[[3,4],-7],[[4,5],-3],[[5,6],-3],[[1,6],-3]%}),1,4)
'''
- return GiacMethods['bellman_ford'](self,*args)
+ return GiacMethods['bellman_ford'](self, *args)
- def bernoulli(self,*args):
+ def bernoulli(self, *args):
r'''From Giac's documentation:
Help for bernoulli:
bernoulli(Intg||(Intg,Var))
@@ -1431,9 +1431,9 @@ cdef class GiacMethods_base:
Ex1:bernoulli(6)
Ex2:bernoulli(6,x)
'''
- return GiacMethods['bernoulli'](self,*args)
+ return GiacMethods['bernoulli'](self, *args)
- def besselJ(self,*args):
+ def besselJ(self, *args):
r'''From Giac's documentation:
Help for besselJ:
besselJ(Real(x),Int(p))
@@ -1442,9 +1442,9 @@ cdef class GiacMethods_base:
Ex1:besselJ(sqrt(2),2)
Ex2:besselJ(sqrt(2),-2)
'''
- return GiacMethods['besselJ'](self,*args)
+ return GiacMethods['besselJ'](self, *args)
- def besselY(self,*args):
+ def besselY(self, *args):
r'''From Giac's documentation:
Help for besselY:
besselY(Real(x),Int(p))
@@ -1453,9 +1453,9 @@ cdef class GiacMethods_base:
Ex1:besselY(sqrt(2),2)
Ex2:besselY(sqrt(2),-2)
'''
- return GiacMethods['besselY'](self,*args)
+ return GiacMethods['besselY'](self, *args)
- def betad(self,*args):
+ def betad(self, *args):
r'''From Giac's documentation:
Help for betad:
betad(Real(a>0),Real(b>0),Real(0<=x<=1))
@@ -1463,9 +1463,9 @@ cdef class GiacMethods_base:
See also: 1/ betad_cdf 2/ betad_icdf
Ex1:betad(2.2,1.5,0.8)
'''
- return GiacMethods['betad'](self,*args)
+ return GiacMethods['betad'](self, *args)
- def betad_cdf(self,*args):
+ def betad_cdf(self, *args):
r'''From Giac's documentation:
Help for betad_cdf:
betad_cdf(Real(a>0),Real(b>0),Real(0<=x0<=1),[Real(0<=y0<=1)])
@@ -1474,9 +1474,9 @@ cdef class GiacMethods_base:
Ex1:betad_cdf(2,1,0.2)
Ex2:betad_cdf(2,1,0.1,0.3)
'''
- return GiacMethods['betad_cdf'](self,*args)
+ return GiacMethods['betad_cdf'](self, *args)
- def betad_icdf(self,*args):
+ def betad_icdf(self, *args):
r'''From Giac's documentation:
Help for betad_icdf:
betad_icdf(Real(a>0),Real(b>0),Real(0<=p<=1))
@@ -1485,9 +1485,9 @@ cdef class GiacMethods_base:
Ex1:betad_icdf(2,1,0.95)
Ex2:betad_icdf(2,1,0.5)
'''
- return GiacMethods['betad_icdf'](self,*args)
+ return GiacMethods['betad_icdf'](self, *args)
- def betavariate(self,*args):
+ def betavariate(self, *args):
r'''From Giac's documentation:
Help for betavariate:
betavariate(Real(a),Real(b))
@@ -1496,9 +1496,9 @@ cdef class GiacMethods_base:
Ex1:betavariate(1,2)
Ex2:betavariate(1.5,4)
'''
- return GiacMethods['betavariate'](self,*args)
+ return GiacMethods['betavariate'](self, *args)
- def bezier(self,*args):
+ def bezier(self, *args):
r'''From Giac's documentation:
Help for bezier:
bezier(Lst,[plot])
@@ -1509,9 +1509,9 @@ cdef class GiacMethods_base:
Ex3: parameq(bezier(1,1+i,2+i,3-i))
Ex4: parameq(bezier(point([0,0,0]),point([1,1,0]),point([0,1,1])))
'''
- return GiacMethods['bezier'](self,*args)
+ return GiacMethods['bezier'](self, *args)
- def bezout_entiers(self,*args):
+ def bezout_entiers(self, *args):
r'''From Giac's documentation:
Help for bezout_entiers:
bezout_entiers(Intg,Intg)
@@ -1521,9 +1521,9 @@ cdef class GiacMethods_base:
Ex2:bezout_entiers(21,28)
Ex3:bezout_entiers(30,49)
'''
- return GiacMethods['bezout_entiers'](self,*args)
+ return GiacMethods['bezout_entiers'](self, *args)
- def biconnected_components(self,*args):
+ def biconnected_components(self, *args):
r'''From Giac's documentation:
Help for biconnected_components:
biconnected_components(Graph(G))
@@ -1531,9 +1531,9 @@ cdef class GiacMethods_base:
See also: 1/ articulation_points 2/ is_biconnected 3/ is_connected 4/ trail
Ex1:biconnected_components(graph(trail(1,2,3,4,2),trail(4,5,6,7,5)))
'''
- return GiacMethods['biconnected_components'](self,*args)
+ return GiacMethods['biconnected_components'](self, *args)
- def binomial(self,*args):
+ def binomial(self, *args):
r'''From Giac's documentation:
Help for binomial:
binomial(Intg(n),Intg(k),[Real(p in 0..1)])
@@ -1547,9 +1547,9 @@ cdef class GiacMethods_base:
Ex6: randvector(6,binomial,4,0.2)
Ex7: ranm(4,6,binomial,4,0.7)
'''
- return GiacMethods['binomial'](self,*args)
+ return GiacMethods['binomial'](self, *args)
- def binomial_cdf(self,*args):
+ def binomial_cdf(self, *args):
r'''From Giac's documentation:
Help for binomial_cdf:
binomial_cdf(Intg(n),Real(p),Real(x),[Real(y)])
@@ -1559,9 +1559,9 @@ cdef class GiacMethods_base:
Ex2:binomial_cdf(4,0.1,2)
Ex3:binomial_cdf(4,0.5,2,3)
'''
- return GiacMethods['binomial_cdf'](self,*args)
+ return GiacMethods['binomial_cdf'](self, *args)
- def binomial_icdf(self,*args):
+ def binomial_icdf(self, *args):
r'''From Giac's documentation:
Help for binomial_icdf:
binomial_icdf(Intg(n),Real(p),Real(t))
@@ -1570,27 +1570,27 @@ cdef class GiacMethods_base:
Ex1:binomial_icdf(4,0.5,0.68)
Ex2:binomial_icdf(4,0.1,0.95)
'''
- return GiacMethods['binomial_icdf'](self,*args)
+ return GiacMethods['binomial_icdf'](self, *args)
- def bins(self,*args):
+ def bins(self, *args):
r'''From Giac's documentation:
Help for bins:
bins(Opt)
Option for the kernel_density command.
See also: 1/ kernel_density 2/ bandwidth
'''
- return GiacMethods['bins'](self,*args)
+ return GiacMethods['bins'](self, *args)
- def bipartite(self,*args):
+ def bipartite(self, *args):
r'''From Giac's documentation:
Help for bipartite:
bipartite(Opt)
Option for the draw_graph command
See also: 1/ draw_graph
'''
- return GiacMethods['bipartite'](self,*args)
+ return GiacMethods['bipartite'](self, *args)
- def bipartite_matching(self,*args):
+ def bipartite_matching(self, *args):
r'''From Giac's documentation:
Help for bipartite_matching:
bipartite_matching(Graph(G))
@@ -1598,9 +1598,9 @@ cdef class GiacMethods_base:
See also: 1/ is_bipartite 2/ maximum_matching
Ex1:bipartite_matching(graph("desargues"))
'''
- return GiacMethods['bipartite_matching'](self,*args)
+ return GiacMethods['bipartite_matching'](self, *args)
- def bisection_solver(self,*args):
+ def bisection_solver(self, *args):
r'''From Giac's documentation:
Help for bisection_solver:
bisection_solver(Opt)
@@ -1613,9 +1613,9 @@ cdef class GiacMethods_base:
Ex5: fsolve(cos(x)=x,x,0,secant_solver)
Ex6: fsolve(cos(x)=x,x,0,steffenson_solver)
'''
- return GiacMethods['bisection_solver'](self,*args)
+ return GiacMethods['bisection_solver'](self, *args)
- def bisector(self,*args):
+ def bisector(self, *args):
r'''From Giac's documentation:
Help for bisector:
bisector((Pnt(A) or Cplx),(Pnt(B) or Cplx),(Pnt(C) or Cplx))
@@ -1623,9 +1623,9 @@ cdef class GiacMethods_base:
See also: 1/ angle 2/ exbisector
Ex1:bisector(0,1,i)
'''
- return GiacMethods['bisector'](self,*args)
+ return GiacMethods['bisector'](self, *args)
- def bit_depth(self,*args):
+ def bit_depth(self, *args):
r'''From Giac's documentation:
Help for bit_depth:
bit_depth(Lst(clip))
@@ -1633,9 +1633,9 @@ cdef class GiacMethods_base:
See also: 1/ channels 2/ channel_data 3/ duration 4/ samplerate
Ex1:bit_depth(readwav("/some/file"))
'''
- return GiacMethods['bit_depth'](self,*args)
+ return GiacMethods['bit_depth'](self, *args)
- def bitand(self,*args):
+ def bitand(self, *args):
r'''From Giac's documentation:
Help for bitand:
bitand(Intg,Intg)
@@ -1643,9 +1643,9 @@ cdef class GiacMethods_base:
See also: 1/ bitxor 2/ bitor
Ex1:bitand(0x12,0x38)
'''
- return GiacMethods['bitand'](self,*args)
+ return GiacMethods['bitand'](self, *args)
- def bitor(self,*args):
+ def bitor(self, *args):
r'''From Giac's documentation:
Help for bitor:
bitor(Intg,Intg)
@@ -1653,9 +1653,9 @@ cdef class GiacMethods_base:
See also: 1/ bitxor 2/ bitand
Ex1:bitor(0x12,0x38)
'''
- return GiacMethods['bitor'](self,*args)
+ return GiacMethods['bitor'](self, *args)
- def bitxor(self,*args):
+ def bitxor(self, *args):
r'''From Giac's documentation:
Help for bitxor:
bitxor(Intg,Intg)
@@ -1663,9 +1663,9 @@ cdef class GiacMethods_base:
See also: 1/ bitor 2/ bitand
Ex1:bitxor(0x12,0x38)
'''
- return GiacMethods['bitxor'](self,*args)
+ return GiacMethods['bitxor'](self, *args)
- def blackman_harris_window(self,*args):
+ def blackman_harris_window(self, *args):
r'''From Giac's documentation:
Help for blackman_harris_window:
blackman_harris_window(Lst,[Interval(n1..n2)])
@@ -1673,9 +1673,9 @@ cdef class GiacMethods_base:
See also: 1/ bartlett_hann_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(blackman_harris_window(randvector(1000,0..1)))
'''
- return GiacMethods['blackman_harris_window'](self,*args)
+ return GiacMethods['blackman_harris_window'](self, *args)
- def blackman_window(self,*args):
+ def blackman_window(self, *args):
r'''From Giac's documentation:
Help for blackman_window:
blackman_window(Lst,[Real(a)],[Interval(n1..n2)])
@@ -1683,9 +1683,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ bartlett_harris_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(blackman_window(randvector(1000,0..1)))
'''
- return GiacMethods['blackman_window'](self,*args)
+ return GiacMethods['blackman_window'](self, *args)
- def blockmatrix(self,*args):
+ def blockmatrix(self, *args):
r'''From Giac's documentation:
Help for blockmatrix:
blockmatrix(Intg(n),Intg(m),Lst)
@@ -1694,9 +1694,9 @@ cdef class GiacMethods_base:
Ex1:blockmatrix(2,3,[idn(2),idn(2),idn(2),idn(2),idn(2),idn(2)])
Ex2:blockmatrix(2,2,[idn(2),newMat(2,3),newMat(3,2),idn(3)])
'''
- return GiacMethods['blockmatrix'](self,*args)
+ return GiacMethods['blockmatrix'](self, *args)
- def bohman_window(self,*args):
+ def bohman_window(self, *args):
r'''From Giac's documentation:
Help for bohman_window:
bohman_window(Lst,[Interval(n1..n2)])
@@ -1704,9 +1704,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bartlett_hann_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(bohman_window(randvector(1000,0..1)))
'''
- return GiacMethods['bohman_window'](self,*args)
+ return GiacMethods['bohman_window'](self, *args)
- def border(self,*args):
+ def border(self, *args):
r'''From Giac's documentation:
Help for border:
border(Mtrx(A),Lst(b))
@@ -1715,9 +1715,9 @@ cdef class GiacMethods_base:
Ex1:border([[1,2,3,4],[4,5,6,8],[7,8,9,10]],[1,3,5])
Ex2:border([[1,2,3],[4,5,6],[7,8,9]],[1,0,1])
'''
- return GiacMethods['border'](self,*args)
+ return GiacMethods['border'](self, *args)
- def boxcar(self,*args):
+ def boxcar(self, *args):
r'''From Giac's documentation:
Help for boxcar:
boxcar(Real(a),Real(b),Expr(x))
@@ -1725,9 +1725,9 @@ cdef class GiacMethods_base:
See also: 1/ rect 2/ Heaviside
Ex1:boxcar(1,2,x)
'''
- return GiacMethods['boxcar'](self,*args)
+ return GiacMethods['boxcar'](self, *args)
- def boxwhisker(self,*args):
+ def boxwhisker(self, *args):
r'''From Giac's documentation:
Help for boxwhisker:
boxwhisker(Lst,[Lst],[x=a..b||y=a..b])
@@ -1738,9 +1738,9 @@ cdef class GiacMethods_base:
Ex3:boxwhisker([1,2,3,5,10,4],[1,2,3,1,2,3])
Ex4:boxwhisker([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]])
'''
- return GiacMethods['boxwhisker'](self,*args)
+ return GiacMethods['boxwhisker'](self, *args)
- def brent_solver(self,*args):
+ def brent_solver(self, *args):
r'''From Giac's documentation:
Help for brent_solver:
brent_solver(Opt)
@@ -1753,9 +1753,9 @@ cdef class GiacMethods_base:
Ex5: fsolve(cos(x)=x,x,0,secant_solver)
Ex6: fsolve(cos(x)=x,x,0,steffenson_solver)
'''
- return GiacMethods['brent_solver'](self,*args)
+ return GiacMethods['brent_solver'](self, *args)
- def bvpsolve(self,*args):
+ def bvpsolve(self, *args):
r'''From Giac's documentation:
Help for bvpsolve:
bvpsolve(Expr(f(x,y,y')),Lst(x=a..b,y),Lst(y(a),y(b),[y'(1)]),[options])
@@ -1764,9 +1764,9 @@ cdef class GiacMethods_base:
Ex1:bvpsolve((32+2x^3-y*diff(y(x),x))/8,[x=1..3,y],[17,43/3],20)
Ex2:bvpsolve((x^2*diff(y(x),x)^2-9y^2+4x^6)/x^5,[x=1..2,y],[0,ln(256),1],10,output=spline)
'''
- return GiacMethods['bvpsolve'](self,*args)
+ return GiacMethods['bvpsolve'](self, *args)
- def cFactor(self,*args):
+ def cFactor(self, *args):
r'''From Giac's documentation:
Help for cFactor:
cFactor(Expr)
@@ -1776,9 +1776,9 @@ cdef class GiacMethods_base:
Ex2:cFactor(x^2*y^2+y^2+4*x^2+4)
Ex3:cFactor(x^2*y^2+y^2+2*x^2+2)
'''
- return GiacMethods['cFactor'](self,*args)
+ return GiacMethods['cFactor'](self, *args)
- def cSolve(self,*args):
+ def cSolve(self, *args):
r'''From Giac's documentation:
Help for cSolve:
cSolve(LstEq,LstVar)
@@ -1789,9 +1789,9 @@ cdef class GiacMethods_base:
Ex3:cSolve(x^4-y^4 and x+y=0 and x^2=2*x,[x,y])
Ex4:cSolve(u*v-u=v and v^2=u,[u,v])
'''
- return GiacMethods['cSolve'](self,*args)
+ return GiacMethods['cSolve'](self, *args)
- def cZeros(self,*args):
+ def cZeros(self, *args):
r'''From Giac's documentation:
Help for cZeros:
cZeros(Expr(Xpr)||LstExpr, [Var||LstVar])
@@ -1800,9 +1800,9 @@ cdef class GiacMethods_base:
Ex1:cZeros(x^2-1)
Ex2:cZeros([x^2-1,x^2-y^2],[x,y])
'''
- return GiacMethods['cZeros'](self,*args)
+ return GiacMethods['cZeros'](self, *args)
- def camembert(self,*args):
+ def camembert(self, *args):
r'''From Giac's documentation:
Help for camembert:
camembert(Mtrx)
@@ -1812,9 +1812,9 @@ cdef class GiacMethods_base:
Ex2:camembert([3/2,2/3,5/4,4/5,7/6,6/7,9/8,8/9,11/10])
Ex3:camembert([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])
'''
- return GiacMethods['camembert'](self,*args)
+ return GiacMethods['camembert'](self, *args)
- def canonical_form(self,*args):
+ def canonical_form(self, *args):
r'''From Giac's documentation:
Help for canonical_form:
canonical_form(Trinom(a*x^2+b*x+c),[Var])
@@ -1823,9 +1823,9 @@ cdef class GiacMethods_base:
Ex1:canonical_form(2*x^2-12*x+1)
Ex2:canonical_form(2*a^2-12*a+1,a)
'''
- return GiacMethods['canonical_form'](self,*args)
+ return GiacMethods['canonical_form'](self, *args)
- def canonical_labeling(self,*args):
+ def canonical_labeling(self, *args):
r'''From Giac's documentation:
Help for canonical_labeling:
canonical_labeling(Graph(G))
@@ -1833,9 +1833,9 @@ cdef class GiacMethods_base:
See also: 1/ isomorphic_copy 2/ relabel_vertices
Ex1:canonical_labeling(graph("petersen"))
'''
- return GiacMethods['canonical_labeling'](self,*args)
+ return GiacMethods['canonical_labeling'](self, *args)
- def cartesian_product(self,*args):
+ def cartesian_product(self, *args):
r'''From Giac's documentation:
Help for cartesian_product:
cartesian_product(Seq(G1,G2,..))
@@ -1843,9 +1843,9 @@ cdef class GiacMethods_base:
See also: 1/ tensor_product
Ex1:cartesian_product(graph(trail(1,2,3,4,5,2)),star_graph(3))
'''
- return GiacMethods['cartesian_product'](self,*args)
+ return GiacMethods['cartesian_product'](self, *args)
- def cauchy(self,*args):
+ def cauchy(self, *args):
r'''From Giac's documentation:
Help for cauchy:
cauchy(Real(x0),Real(a),Real(x))
@@ -1853,9 +1853,9 @@ cdef class GiacMethods_base:
See also: 1/ cauchy_cdf 2/ cauchy_icdf
Ex1:cauchy(0.0,2.0,1.0)
'''
- return GiacMethods['cauchy'](self,*args)
+ return GiacMethods['cauchy'](self, *args)
- def cauchy_cdf(self,*args):
+ def cauchy_cdf(self, *args):
r'''From Giac's documentation:
Help for cauchy_cdf:
cauchy_cdf(Real(x0),Real(a),Real(x),[Real(y)])
@@ -1864,9 +1864,9 @@ cdef class GiacMethods_base:
Ex1:cauchy_cdf(0.0,2.0,2.1)
Ex2:cauchy_cdf(2,3,-1.9,1.4)
'''
- return GiacMethods['cauchy_cdf'](self,*args)
+ return GiacMethods['cauchy_cdf'](self, *args)
- def cauchy_icdf(self,*args):
+ def cauchy_icdf(self, *args):
r'''From Giac's documentation:
Help for cauchy_icdf:
cauchy_icdf(Real(x0),Real(a),Real(p))
@@ -1874,9 +1874,9 @@ cdef class GiacMethods_base:
See also: 1/ cauchy_cdf 2/ cauchy
Ex1:cauchy_icdf(0.0,2.0,0.95)
'''
- return GiacMethods['cauchy_icdf'](self,*args)
+ return GiacMethods['cauchy_icdf'](self, *args)
- def cauchyd(self,*args):
+ def cauchyd(self, *args):
r'''From Giac's documentation:
Help for cauchyd:
cauchyd(Real(x0),Real(a),Real(x))
@@ -1884,9 +1884,9 @@ cdef class GiacMethods_base:
See also: 1/ cauchy_cdf 2/ cauchy_icdf
Ex1:cauchyd(0.0,2.0,1.0)
'''
- return GiacMethods['cauchyd'](self,*args)
+ return GiacMethods['cauchyd'](self, *args)
- def cauchyd_cdf(self,*args):
+ def cauchyd_cdf(self, *args):
r'''From Giac's documentation:
Help for cauchyd_cdf:
cauchyd_cdf(Real(x0),Real(a),Real(x),[Real(y)])
@@ -1895,9 +1895,9 @@ cdef class GiacMethods_base:
Ex1:cauchyd_cdf(0.0,2.0,2.1)
Ex2:cauchyd_cdf(2,3,-1.9,1.4)
'''
- return GiacMethods['cauchyd_cdf'](self,*args)
+ return GiacMethods['cauchyd_cdf'](self, *args)
- def cauchyd_icdf(self,*args):
+ def cauchyd_icdf(self, *args):
r'''From Giac's documentation:
Help for cauchyd_icdf:
cauchyd_icdf(Real(x0),Real(a),Real(p))
@@ -1905,9 +1905,9 @@ cdef class GiacMethods_base:
See also: 1/ cauchy_cdf 2/ cauchy
Ex1:cauchyd_icdf(0.0,2.0,0.95)
'''
- return GiacMethods['cauchyd_icdf'](self,*args)
+ return GiacMethods['cauchyd_icdf'](self, *args)
- def cdf(self,*args):
+ def cdf(self, *args):
r'''From Giac's documentation:
Help for cdf:
cdf(Func,FuncParams)
@@ -1918,9 +1918,9 @@ cdef class GiacMethods_base:
Ex3:cdf([1,3,4,3,5,6],4)
Ex4:cdf([1,3,4,3,5,6],plot)
'''
- return GiacMethods['cdf'](self,*args)
+ return GiacMethods['cdf'](self, *args)
- def ceil(self,*args):
+ def ceil(self, *args):
r'''From Giac's documentation:
Help for ceil:
ceil(Real or Cplx)
@@ -1929,9 +1929,9 @@ cdef class GiacMethods_base:
Ex1:ceil(-4.2)
Ex2:ceil(4.3+2.4*i)
'''
- return GiacMethods['ceil'](self,*args)
+ return GiacMethods['ceil'](self, *args)
- def ceiling(self,*args):
+ def ceiling(self, *args):
r'''From Giac's documentation:
Help for ceiling:
ceiling(Real or Cplx)
@@ -1940,9 +1940,9 @@ cdef class GiacMethods_base:
Ex1:ceiling(-4.2)
Ex2:ceiling(4.3+2.4*i)
'''
- return GiacMethods['ceiling'](self,*args)
+ return GiacMethods['ceiling'](self, *args)
- def center(self,*args):
+ def center(self, *args):
r'''From Giac's documentation:
Help for center:
center(Crcle)
@@ -1951,9 +1951,9 @@ cdef class GiacMethods_base:
Ex1:center(circle(1+i,2))
Ex2:center(circumcircle(0,1,1+i))
'''
- return GiacMethods['center'](self,*args)
+ return GiacMethods['center'](self, *args)
- def center2interval(self,*args):
+ def center2interval(self, *args):
r'''From Giac's documentation:
Help for center2interval:
center2interval(LstVal(l),[Real(a0)])
@@ -1962,9 +1962,9 @@ cdef class GiacMethods_base:
Ex1:center2interval([2,5,9],1)
Ex2:center2interval([2,5,8])
'''
- return GiacMethods['center2interval'](self,*args)
+ return GiacMethods['center2interval'](self, *args)
- def centered_cube(self,*args):
+ def centered_cube(self, *args):
r'''From Giac's documentation:
Help for centered_cube:
centered_cube(Pnt(A),Pnt(B),Pnt(C))
@@ -1973,9 +1973,9 @@ cdef class GiacMethods_base:
Ex1:centered_cube([0,0,0],[3,0,0],[0,0,1])
Ex2:centered_cube(evalf([0,0,0],[3,2,4],[1,1,0]))
'''
- return GiacMethods['centered_cube'](self,*args)
+ return GiacMethods['centered_cube'](self, *args)
- def centered_tetrahedron(self,*args):
+ def centered_tetrahedron(self, *args):
r'''From Giac's documentation:
Help for centered_tetrahedron:
centered_tetrahedron(Pnt(A),Pnt(B),Pnt(C))
@@ -1984,9 +1984,9 @@ cdef class GiacMethods_base:
Ex1:centered_tetrahedron([0,0,0],[3,0,0],[0,1,0])
Ex2:centered_tetrahedron(evalf([0,0,0],[3,2,4],[1,1,0]))
'''
- return GiacMethods['centered_tetrahedron'](self,*args)
+ return GiacMethods['centered_tetrahedron'](self, *args)
- def cfactor(self,*args):
+ def cfactor(self, *args):
r'''From Giac's documentation:
Help for cfactor:
cfactor(Expr)
@@ -1996,9 +1996,9 @@ cdef class GiacMethods_base:
Ex2:cfactor(x^2*y^2+y^2+4*x^2+4)
Ex3:cfactor(x^2*y^2+y^2+2*x^2+2)
'''
- return GiacMethods['cfactor'](self,*args)
+ return GiacMethods['cfactor'](self, *args)
- def cfsolve(self,*args):
+ def cfsolve(self, *args):
r'''From Giac's documentation:
Help for cfsolve:
cfsolve(Expr,Var,[Guess or Interval],[Method])
@@ -2007,9 +2007,9 @@ cdef class GiacMethods_base:
Ex1:cfsolve(cos(x)=2)
Ex2:cfsolve([x^2+y+2,x+y^2+2],[x,y])
'''
- return GiacMethods['cfsolve'](self,*args)
+ return GiacMethods['cfsolve'](self, *args)
- def changebase(self,*args):
+ def changebase(self, *args):
r'''From Giac's documentation:
Help for changebase:
changebase(Mtrx(A),Mtrx(P))
@@ -2018,9 +2018,9 @@ cdef class GiacMethods_base:
Ex1:changebase([[1,2],[1,3]],[[1,1],[0,1]])
Ex2:changebase([[1,2],[1,3]],[[1,0],[1,1]])
'''
- return GiacMethods['changebase'](self,*args)
+ return GiacMethods['changebase'](self, *args)
- def channel_data(self,*args):
+ def channel_data(self, *args):
r'''From Giac's documentation:
Help for channel_data:
channel_data(Lst(clip),[Intg(chn) or matrix],[range=a..b])
@@ -2031,9 +2031,9 @@ cdef class GiacMethods_base:
Ex3:channel_data(readwav("/some/file"),2)
Ex4:channel_data(readwav("/some/file"),matrix,range=1.0..2.5)
'''
- return GiacMethods['channel_data'](self,*args)
+ return GiacMethods['channel_data'](self, *args)
- def channels(self,*args):
+ def channels(self, *args):
r'''From Giac's documentation:
Help for channels:
channels(Lst(clip))
@@ -2041,9 +2041,9 @@ cdef class GiacMethods_base:
See also: 1/ bit_depth 2/ channel_data 3/ duration 4/ samplerate
Ex1:channels(readwav("/some/file"))
'''
- return GiacMethods['channels'](self,*args)
+ return GiacMethods['channels'](self, *args)
- def char(self,*args):
+ def char(self, *args):
r'''From Giac's documentation:
Help for char:
char(Intg or Lst(Intg))
@@ -2052,9 +2052,9 @@ cdef class GiacMethods_base:
Ex1:char(65)
Ex2:char([65,66,67])
'''
- return GiacMethods['char'](self,*args)
+ return GiacMethods['char'](self, *args)
- def charpoly(self,*args):
+ def charpoly(self, *args):
r'''From Giac's documentation:
Help for charpoly:
charpoly(Mtrx,[Var])
@@ -2065,9 +2065,9 @@ cdef class GiacMethods_base:
Ex3:charpoly([[1,2,3],[1,3,6],[2,5,7]])
Ex4:charpoly([[1,2,3],[1,3,6],[2,5,7]],z)
'''
- return GiacMethods['charpoly'](self,*args)
+ return GiacMethods['charpoly'](self, *args)
- def chinrem(self,*args):
+ def chinrem(self, *args):
r'''From Giac's documentation:
Help for chinrem:
chinrem([Lst||Expr,Lst||Expr],[Lst||Expr,Lst||Expr])
@@ -2076,9 +2076,9 @@ cdef class GiacMethods_base:
Ex1:chinrem([x+2,x^2+1],[x+1,x^2+x+1])
Ex2:chinrem([[1,2],[1,0,1]],[[1,1],[1,1,1]])
'''
- return GiacMethods['chinrem'](self,*args)
+ return GiacMethods['chinrem'](self, *args)
- def chisquare(self,*args):
+ def chisquare(self, *args):
r'''From Giac's documentation:
Help for chisquare:
chisquare(Intg(n),Real(x0))
@@ -2089,9 +2089,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,chisquare,2)
Ex4: ranm(4,3,chisquare,2)
'''
- return GiacMethods['chisquare'](self,*args)
+ return GiacMethods['chisquare'](self, *args)
- def chisquare_cdf(self,*args):
+ def chisquare_cdf(self, *args):
r'''From Giac's documentation:
Help for chisquare_cdf:
chisquare_cdf(Intg(n),Real(x0))
@@ -2100,9 +2100,9 @@ cdef class GiacMethods_base:
Ex1:chisquare_cdf(2,6.1)
Ex2:chisquare_cdf(4,6.1)
'''
- return GiacMethods['chisquare_cdf'](self,*args)
+ return GiacMethods['chisquare_cdf'](self, *args)
- def chisquare_icdf(self,*args):
+ def chisquare_icdf(self, *args):
r'''From Giac's documentation:
Help for chisquare_icdf:
chisquare_icdf(Intg(n),Real(p))
@@ -2111,9 +2111,9 @@ cdef class GiacMethods_base:
Ex1:chisquare_icdf(2,0.95)
Ex2:chisquare_icdf(4,0.05)
'''
- return GiacMethods['chisquare_icdf'](self,*args)
+ return GiacMethods['chisquare_icdf'](self, *args)
- def chisquared(self,*args):
+ def chisquared(self, *args):
r'''From Giac's documentation:
Help for chisquared:
chisquared(Intg(n),Real(x0))
@@ -2124,9 +2124,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,chisquare,2)
Ex4: ranm(4,3,chisquare,2)
'''
- return GiacMethods['chisquared'](self,*args)
+ return GiacMethods['chisquared'](self, *args)
- def chisquared_cdf(self,*args):
+ def chisquared_cdf(self, *args):
r'''From Giac's documentation:
Help for chisquared_cdf:
chisquared_cdf(Intg(n),Real(x0))
@@ -2135,9 +2135,9 @@ cdef class GiacMethods_base:
Ex1:chisquared_cdf(2,6.1)
Ex2:chisquared_cdf(4,6.1)
'''
- return GiacMethods['chisquared_cdf'](self,*args)
+ return GiacMethods['chisquared_cdf'](self, *args)
- def chisquared_icdf(self,*args):
+ def chisquared_icdf(self, *args):
r'''From Giac's documentation:
Help for chisquared_icdf:
chisquared_icdf(Intg(n),Real(p))
@@ -2146,9 +2146,9 @@ cdef class GiacMethods_base:
Ex1:chisquared_icdf(2,0.95)
Ex2:chisquared_icdf(4,0.05)
'''
- return GiacMethods['chisquared_icdf'](self,*args)
+ return GiacMethods['chisquared_icdf'](self, *args)
- def chisquaret(self,*args):
+ def chisquaret(self, *args):
r'''From Giac's documentation:
Help for chisquaret:
chisquaret(Data,[Func],[FuncParams])
@@ -2164,9 +2164,9 @@ cdef class GiacMethods_base:
Ex8:chisquaret([11,16,17,22,14,10],[1/6,1/6,1/6,1/6,1/6,1/6])
Ex9:chisquaret([11,16,17,22,14,10],[(1/6)$6])
'''
- return GiacMethods['chisquaret'](self,*args)
+ return GiacMethods['chisquaret'](self, *args)
- def choice(self,*args):
+ def choice(self, *args):
r'''From Giac's documentation:
Help for choice:
choice(Lst(L))
@@ -2177,9 +2177,9 @@ cdef class GiacMethods_base:
Ex3: L:=[1,2,3,4,5,6];L:=choice(L)
Ex4: L:=[1,2,3,4,5,6];L.choice()
'''
- return GiacMethods['choice'](self,*args)
+ return GiacMethods['choice'](self, *args)
- def cholesky(self,*args):
+ def cholesky(self, *args):
r'''From Giac's documentation:
Help for cholesky:
cholesky(Mtrx)
@@ -2187,9 +2187,9 @@ cdef class GiacMethods_base:
See also: 1/ lu 2/ qr 3/ gauss
Ex1:cholesky([[3,1],[1,4]])
'''
- return GiacMethods['cholesky'](self,*args)
+ return GiacMethods['cholesky'](self, *args)
- def chr(self,*args):
+ def chr(self, *args):
r'''From Giac's documentation:
Help for chr:
chr(Intg or Lst(Intg))
@@ -2198,9 +2198,9 @@ cdef class GiacMethods_base:
Ex1:chr(65)
Ex2:chr([65,66,67])
'''
- return GiacMethods['chr'](self,*args)
+ return GiacMethods['chr'](self, *args)
- def chrem(self,*args):
+ def chrem(self, *args):
r'''From Giac's documentation:
Help for chrem:
chrem(LstIntg(a,b,c....),LstIntg(p,q,r,....))
@@ -2212,9 +2212,9 @@ cdef class GiacMethods_base:
Ex4:chrem([2,4,6,7],[3,5,7,11])
Ex5:chrem([2*x+1,4*x+2,6*x-1,x+1],[3,5,7,11])
'''
- return GiacMethods['chrem'](self,*args)
+ return GiacMethods['chrem'](self, *args)
- def chromatic_index(self,*args):
+ def chromatic_index(self, *args):
r'''From Giac's documentation:
Help for chromatic_index:
chromatic_index(Graph(G),[Lst(cols)])
@@ -2223,18 +2223,18 @@ cdef class GiacMethods_base:
Ex1:chromatic_index(graph("petersen"))
Ex2:chromatic_index(graph("dodecahedron"),colors)
'''
- return GiacMethods['chromatic_index'](self,*args)
+ return GiacMethods['chromatic_index'](self, *args)
- def chromatic_number(self,*args):
+ def chromatic_number(self, *args):
r'''From Giac's documentation:
Help for chromatic_number:
chromatic_number(Graph(G))
Returns the chromatic number of G.
Ex1:chromatic_number(graph("petersen"))
'''
- return GiacMethods['chromatic_number'](self,*args)
+ return GiacMethods['chromatic_number'](self, *args)
- def chromatic_polynomial(self,*args):
+ def chromatic_polynomial(self, *args):
r'''From Giac's documentation:
Help for chromatic_polynomial:
chromatic_polynomial(Graph(G),[Var(t)])
@@ -2243,9 +2243,9 @@ cdef class GiacMethods_base:
Ex1:chromatic_polynomial(graph("petersen"))
Ex2:chromatic_polynomial(graph("petersen"),3)
'''
- return GiacMethods['chromatic_polynomial'](self,*args)
+ return GiacMethods['chromatic_polynomial'](self, *args)
- def circle(self,*args):
+ def circle(self, *args):
r'''From Giac's documentation:
Help for circle:
circle((Pnt(M) or Cplx(M),(Pnt(N) or Cplx(zN)),[Real(a)],[Real(b)],[Var(A)],[Var(B)])
@@ -2260,9 +2260,9 @@ cdef class GiacMethods_base:
Ex7:circle(cercle(point([-1,0,0]),point([1,0,0]),point([0,2,0])))
Ex8:circle(cercle([-1,0,0],point([1,0,0]),[0,2,0]))
'''
- return GiacMethods['circle'](self,*args)
+ return GiacMethods['circle'](self, *args)
- def circumcircle(self,*args):
+ def circumcircle(self, *args):
r'''From Giac's documentation:
Help for circumcircle:
circumcircle((Pnt or Cplx),(Pnt or Cplx),((Pnt or Cplx))
@@ -2270,9 +2270,9 @@ cdef class GiacMethods_base:
See also: 1/ circle 2/ incircle 3/ excircle
Ex1:circumcircle(0,1,1+i)
'''
- return GiacMethods['circumcircle'](self,*args)
+ return GiacMethods['circumcircle'](self, *args)
- def classes(self,*args):
+ def classes(self, *args):
r'''From Giac's documentation:
Help for classes:
classes(Lst(l),[ClassMin],[ClassSize||Lst(Center)])
@@ -2284,9 +2284,9 @@ cdef class GiacMethods_base:
Ex4:classes([1,1.2,1.4,1.6,1.8,2,2.5],1,[1.2,1.6,2.2])
Ex5:classes([0,0.5,1,1.5,2,2.5,3,3.5,4],[0..2,2..4,4..6])
'''
- return GiacMethods['classes'](self,*args)
+ return GiacMethods['classes'](self, *args)
- def clear(self,*args):
+ def clear(self, *args):
r'''From Giac's documentation:
Help for clear:
clear(NULL)
@@ -2294,9 +2294,9 @@ cdef class GiacMethods_base:
See also: 1/ set_pixel 2/ show_pixels
Ex1:clear()
'''
- return GiacMethods['clear'](self,*args)
+ return GiacMethods['clear'](self, *args)
- def clique_cover(self,*args):
+ def clique_cover(self, *args):
r'''From Giac's documentation:
Help for clique_cover:
clique_cover(Graph(G),[Intg(k)])
@@ -2306,9 +2306,9 @@ cdef class GiacMethods_base:
Ex2:clique_cover(cycle_graph(5))
Ex3:clique_cover(graph_complement(complete_graph(3,4)))
'''
- return GiacMethods['clique_cover'](self,*args)
+ return GiacMethods['clique_cover'](self, *args)
- def clique_cover_number(self,*args):
+ def clique_cover_number(self, *args):
r'''From Giac's documentation:
Help for clique_cover_number:
clique_cover_number(Graph(G))
@@ -2318,9 +2318,9 @@ cdef class GiacMethods_base:
Ex2:clique_cover_number(cycle_graph(5))
Ex3:clique_cover_number(graph_complement(complete_graph(3,4)))
'''
- return GiacMethods['clique_cover_number'](self,*args)
+ return GiacMethods['clique_cover_number'](self, *args)
- def clique_number(self,*args):
+ def clique_number(self, *args):
r'''From Giac's documentation:
Help for clique_number:
clique_number(Graph(G))
@@ -2328,9 +2328,9 @@ cdef class GiacMethods_base:
See also: 1/ maximum_clique
Ex1:clique_number(graph_complement(complete_graph(3,4)))
'''
- return GiacMethods['clique_number'](self,*args)
+ return GiacMethods['clique_number'](self, *args)
- def clique_stats(self,*args):
+ def clique_stats(self, *args):
r'''From Giac's documentation:
Help for clique_stats:
clique_stats(Graph(G),[Intg(k)||Intrv(m..n)])
@@ -2340,9 +2340,9 @@ cdef class GiacMethods_base:
Ex2:clique_stats(random_graph(50,0.5),5)
Ex3:clique_stats(random_graph(50,0.5),3..5)
'''
- return GiacMethods['clique_stats'](self,*args)
+ return GiacMethods['clique_stats'](self, *args)
- def clustering_coefficient(self,*args):
+ def clustering_coefficient(self, *args):
r'''From Giac's documentation:
Help for clustering_coefficient:
clustering_coefficient(Graph(G),[Vrtx(v)])
@@ -2351,9 +2351,9 @@ cdef class GiacMethods_base:
Ex1:clustering_coefficient(graph(%{[1,2],[2,3],[2,4],[3,4],[4,1]%}))
Ex2:clustering_coefficient(graph(%{[1,2],[2,3],[2,4],[3,4],[4,1]%}),2)
'''
- return GiacMethods['clustering_coefficient'](self,*args)
+ return GiacMethods['clustering_coefficient'](self, *args)
- def coeff(self,*args):
+ def coeff(self, *args):
r'''From Giac's documentation:
Help for coeff:
coeff(Expr(P),[Var])
@@ -2363,9 +2363,9 @@ cdef class GiacMethods_base:
Ex2:coeff(5*y^2-3,y)
Ex3:coeff(5*y^2-3,y,2)
'''
- return GiacMethods['coeff'](self,*args)
+ return GiacMethods['coeff'](self, *args)
- def coeffs(self,*args):
+ def coeffs(self, *args):
r'''From Giac's documentation:
Help for coeffs:
coeffs(Expr(P),[Var])
@@ -2375,9 +2375,9 @@ cdef class GiacMethods_base:
Ex2:coeffs(5*y^2-3,y)
Ex3:coeffs(5*y^2-3,y,2)
'''
- return GiacMethods['coeffs'](self,*args)
+ return GiacMethods['coeffs'](self, *args)
- def col(self,*args):
+ def col(self, *args):
r'''From Giac's documentation:
Help for col:
col(Mtrx(A),Intg(n)||Interval(n1..n2))
@@ -2387,9 +2387,9 @@ cdef class GiacMethods_base:
Ex2:col([[1,2,3],[4,5,6],[7,8,9]],0..1)
Ex3: count_eq(3,[[3,2,3],[4,3,2],[3,2,1]],col)
'''
- return GiacMethods['col'](self,*args)
+ return GiacMethods['col'](self, *args)
- def colDim(self,*args):
+ def colDim(self, *args):
r'''From Giac's documentation:
Help for colDim:
colDim(Mtrx)
@@ -2398,9 +2398,9 @@ cdef class GiacMethods_base:
Ex1:colDim([[1,2,3],[4,5,6]])
Ex2:colDim([[1,2],[3,4],[5,6]])
'''
- return GiacMethods['colDim'](self,*args)
+ return GiacMethods['colDim'](self, *args)
- def colNorm(self,*args):
+ def colNorm(self, *args):
r'''From Giac's documentation:
Help for colNorm:
colNorm(Vect or Mtrx)
@@ -2409,9 +2409,9 @@ cdef class GiacMethods_base:
Ex1:colNorm([[1,2],[3,-4]])
Ex2:colNorm([[1,2,3,-4],[-5,3,2,1]])
'''
- return GiacMethods['colNorm'](self,*args)
+ return GiacMethods['colNorm'](self, *args)
- def colSwap(self,*args):
+ def colSwap(self, *args):
r'''From Giac's documentation:
Help for colSwap:
colSwap(Mtrx(A),Intg(n1),Intg(n2))
@@ -2419,9 +2419,9 @@ cdef class GiacMethods_base:
See also: 1/ rowSwap
Ex1:colSwap([[1,2],[3,4],[5,6]],0,1)
'''
- return GiacMethods['colSwap'](self,*args)
+ return GiacMethods['colSwap'](self, *args)
- def coldim(self,*args):
+ def coldim(self, *args):
r'''From Giac's documentation:
Help for coldim:
coldim(Mtrx)
@@ -2430,9 +2430,9 @@ cdef class GiacMethods_base:
Ex1:coldim([[1,2,3],[4,5,6]])
Ex2:coldim([[1,2],[3,4],[5,6]])
'''
- return GiacMethods['coldim'](self,*args)
+ return GiacMethods['coldim'](self, *args)
- def collect(self,*args):
+ def collect(self, *args):
r'''From Giac's documentation:
Help for collect:
collect(Poly or LstPoly)
@@ -2442,9 +2442,9 @@ cdef class GiacMethods_base:
Ex2:collect(x^2-2)
Ex3:collect([x^2-2,x^2-4])
'''
- return GiacMethods['collect'](self,*args)
+ return GiacMethods['collect'](self, *args)
- def colnorm(self,*args):
+ def colnorm(self, *args):
r'''From Giac's documentation:
Help for colnorm:
colnorm(Vect or Mtrx)
@@ -2453,9 +2453,9 @@ cdef class GiacMethods_base:
Ex1:colnorm([[1,2],[3,-4]])
Ex2:colnorm([[1,2,3,-4],[-5,3,2,1]])
'''
- return GiacMethods['colnorm'](self,*args)
+ return GiacMethods['colnorm'](self, *args)
- def color(self,*args):
+ def color(self, *args):
r'''From Giac's documentation:
Help for color:
color([GeoObj or legende],Intg)
@@ -2472,9 +2472,9 @@ cdef class GiacMethods_base:
Ex9:color(red);square(0,1);
Ex10:color(red+filled);square(0,1);
'''
- return GiacMethods['color'](self,*args)
+ return GiacMethods['color'](self, *args)
- def colspace(self,*args):
+ def colspace(self, *args):
r'''From Giac's documentation:
Help for colspace:
colspace(Mtrx(A), [Var(d)])
@@ -2483,9 +2483,9 @@ cdef class GiacMethods_base:
Ex1:colspace([[1,2,3],[1,2,3],[1,2,4],[1,2,5]])
Ex2:colspace([[1,2,3],[1,3,6],[2,5,9]],d)
'''
- return GiacMethods['colspace'](self,*args)
+ return GiacMethods['colspace'](self, *args)
- def colswap(self,*args):
+ def colswap(self, *args):
r'''From Giac's documentation:
Help for colswap:
colswap(Mtrx(A),Intg(n1),Intg(n2))
@@ -2493,9 +2493,9 @@ cdef class GiacMethods_base:
See also: 1/ rowSwap
Ex1:colswap([[1,2],[3,4],[5,6]],0,1)
'''
- return GiacMethods['colswap'](self,*args)
+ return GiacMethods['colswap'](self, *args)
- def comDenom(self,*args):
+ def comDenom(self, *args):
r'''From Giac's documentation:
Help for comDenom:
comDenom(Expr,[Var(Var)])
@@ -2505,9 +2505,9 @@ cdef class GiacMethods_base:
Ex2:comDenom(1/x+1/y^2+1,y)
Ex3:comDenom(1/x+1/y^2+1,x)
'''
- return GiacMethods['comDenom'](self,*args)
+ return GiacMethods['comDenom'](self, *args)
- def comb(self,*args):
+ def comb(self, *args):
r'''From Giac's documentation:
Help for comb:
comb(Intg(n),Intg(r))
@@ -2515,9 +2515,9 @@ cdef class GiacMethods_base:
See also: 1/ factorial 2/ perm
Ex1:comb(4,2)
'''
- return GiacMethods['comb'](self,*args)
+ return GiacMethods['comb'](self, *args)
- def combine(self,*args):
+ def combine(self, *args):
r'''From Giac's documentation:
Help for combine:
combine(Expr(Xpr),Fnc(f).)
@@ -2527,9 +2527,9 @@ cdef class GiacMethods_base:
Ex2:combine(sin(x)*cos(x),trig)
Ex3:combine(ln(x)+ln(y),ln)
'''
- return GiacMethods['combine'](self,*args)
+ return GiacMethods['combine'](self, *args)
- def comment(self,*args):
+ def comment(self, *args):
r'''From Giac's documentation:
Help for comment:
comment(Expr)
@@ -2537,9 +2537,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:comment("my_comment")
'''
- return GiacMethods['comment'](self,*args)
+ return GiacMethods['comment'](self, *args)
- def common_perpendicular(self,*args):
+ def common_perpendicular(self, *args):
r'''From Giac's documentation:
Help for common_perpendicular:
common_perpendicular(Line(D1),Line(D2))
@@ -2547,9 +2547,9 @@ cdef class GiacMethods_base:
See also: 1/ altitude 2/ perpendicular
Ex1:common_perpendicular(line([0,0,0],[0,5,5]),line([5,0,0],[0,0,5]))
'''
- return GiacMethods['common_perpendicular'](self,*args)
+ return GiacMethods['common_perpendicular'](self, *args)
- def companion(self,*args):
+ def companion(self, *args):
r'''From Giac's documentation:
Help for companion:
companion(Poly,Var)
@@ -2558,9 +2558,9 @@ cdef class GiacMethods_base:
Ex1:companion(x^2+5x-7,x)
Ex2:companion(-pcar([[1,0,1],[0,2,-1],[1,-1,1]],x),x)
'''
- return GiacMethods['companion'](self,*args)
+ return GiacMethods['companion'](self, *args)
- def compare(self,*args):
+ def compare(self, *args):
r'''From Giac's documentation:
Help for compare:
compare(Obj(arg1),Obj(arg2))
@@ -2570,9 +2570,9 @@ cdef class GiacMethods_base:
Ex2:compare(1.0,2)
Ex3:compare("ab","cd")
'''
- return GiacMethods['compare'](self,*args)
+ return GiacMethods['compare'](self, *args)
- def complete_binary_tree(self,*args):
+ def complete_binary_tree(self, *args):
r'''From Giac's documentation:
Help for complete_binary_tree:
complete_binary_tree(Intg(n))
@@ -2580,9 +2580,9 @@ cdef class GiacMethods_base:
See also: 1/ complete_kary_tree 2/ is_tree 3/ random_tree
Ex1:complete_binary_tree(3)
'''
- return GiacMethods['complete_binary_tree'](self,*args)
+ return GiacMethods['complete_binary_tree'](self, *args)
- def complete_graph(self,*args):
+ def complete_graph(self, *args):
r'''From Giac's documentation:
Help for complete_graph:
complete_graph(Intg(n)||Lst(V)||Seq(n1,n2,...,nk))
@@ -2592,9 +2592,9 @@ cdef class GiacMethods_base:
Ex2:complete_graph(["one","two","three"])
Ex3:complete_graph(2,3,4)
'''
- return GiacMethods['complete_graph'](self,*args)
+ return GiacMethods['complete_graph'](self, *args)
- def complete_kary_tree(self,*args):
+ def complete_kary_tree(self, *args):
r'''From Giac's documentation:
Help for complete_kary_tree:
complete_kary_tree(Intg(n))
@@ -2602,9 +2602,9 @@ cdef class GiacMethods_base:
See also: 1/ complete_binary_tree 2/ is_tree 3/ random_tree
Ex1:complete_kary_tree(3,3)
'''
- return GiacMethods['complete_kary_tree'](self,*args)
+ return GiacMethods['complete_kary_tree'](self, *args)
- def complex(self,*args):
+ def complex(self, *args):
r'''From Giac's documentation:
Help for complex:
complex(Opt)
@@ -2614,9 +2614,9 @@ cdef class GiacMethods_base:
Ex2: assume(a,DOM_COMPLEX)
Ex3: a:=1+i;type(a)
'''
- return GiacMethods['complex'](self,*args)
+ return GiacMethods['complex'](self, *args)
- def complex_variables(self,*args):
+ def complex_variables(self, *args):
r'''From Giac's documentation:
Help for complex_variables:
complex_variables(:=Intg(0 or 1))
@@ -2625,9 +2625,9 @@ cdef class GiacMethods_base:
Ex1: complex_variables:=1
Ex2: complex_variables:=0
'''
- return GiacMethods['complex_variables'](self,*args)
+ return GiacMethods['complex_variables'](self, *args)
- def complexroot(self,*args):
+ def complexroot(self, *args):
r'''From Giac's documentation:
Help for complexroot:
complexroot(Poly(P),Real(l),[Cplx(a)],[Cplx(b)])
@@ -2638,9 +2638,9 @@ cdef class GiacMethods_base:
Ex3:complexroot(x^3+8,1e-5,0,2+2*i)
Ex4:complexroot(x^5-2*x^4+x^3+i,0.1,1+0.5*i,1.1+0.7*i)
'''
- return GiacMethods['complexroot'](self,*args)
+ return GiacMethods['complexroot'](self, *args)
- def concat(self,*args):
+ def concat(self, *args):
r'''From Giac's documentation:
Help for concat:
concat(Lst,Lst||Seq,Seq||Str,Str||Mtrx,Mtrx)
@@ -2652,9 +2652,9 @@ cdef class GiacMethods_base:
Ex4: L:=[1,2];L.concat([3,4,5])
Ex5: S:="abcd";S.concat("efghi")
'''
- return GiacMethods['concat'](self,*args)
+ return GiacMethods['concat'](self, *args)
- def cond(self,*args):
+ def cond(self, *args):
r'''From Giac's documentation:
Help for cond:
cond(Mtrx,[2]||[inf])
@@ -2665,9 +2665,9 @@ cdef class GiacMethods_base:
Ex3:cond([[1,2],[1,4]],2)
Ex4:cond([[1,2],[1,4]],inf)
'''
- return GiacMethods['cond'](self,*args)
+ return GiacMethods['cond'](self, *args)
- def condensation(self,*args):
+ def condensation(self, *args):
r'''From Giac's documentation:
Help for condensation:
condensation(Graph(G))
@@ -2675,9 +2675,9 @@ cdef class GiacMethods_base:
See also: 1/ strongly_connected_components
Ex1:condensation(digraph(%{[1,2],[1,3],[3,1],[1,4],[2,3],[4,3],[4,5],[5,3],[5,6],[7,6],[8,6],[8,7]%}))
'''
- return GiacMethods['condensation'](self,*args)
+ return GiacMethods['condensation'](self, *args)
- def cone(self,*args):
+ def cone(self, *args):
r'''From Giac's documentation:
Help for cone:
cone(Pnt(A),Vect(v),Real(t),[Real(h)])
@@ -2686,9 +2686,9 @@ cdef class GiacMethods_base:
Ex1:cone([0,0,0],[0,0,1],pi/6)
Ex2:cone([0,0,0],[0,1,1],pi/6,4)
'''
- return GiacMethods['cone'](self,*args)
+ return GiacMethods['cone'](self, *args)
- def confrac(self,*args):
+ def confrac(self, *args):
r'''From Giac's documentation:
Help for confrac:
confrac(Opt)
@@ -2696,9 +2696,9 @@ cdef class GiacMethods_base:
See also: 1/ convert
Ex1: convert(sqrt(2),confrac,'L'),L
'''
- return GiacMethods['confrac'](self,*args)
+ return GiacMethods['confrac'](self, *args)
- def conic(self,*args):
+ def conic(self, *args):
r'''From Giac's documentation:
Help for conic:
conic(Expr,[LstVar])
@@ -2709,9 +2709,9 @@ cdef class GiacMethods_base:
Ex3:conic(u^2-2*v^2-2*u*v-1,[u,v])
Ex4:conic(y^2-x*y+3,[x,y])
'''
- return GiacMethods['conic'](self,*args)
+ return GiacMethods['conic'](self, *args)
- def conj(self,*args):
+ def conj(self, *args):
r'''From Giac's documentation:
Help for conj:
conj(Cplx)
@@ -2722,9 +2722,9 @@ cdef class GiacMethods_base:
Ex3:conj((1+2*i)^2)
Ex4:conj([[1+i,2,3],[1,3,6],[2,5,9-i]])
'''
- return GiacMethods['conj'](self,*args)
+ return GiacMethods['conj'](self, *args)
- def conjugate_equation(self,*args):
+ def conjugate_equation(self, *args):
r'''From Giac's documentation:
Help for conjugate_equation:
conjugate_equation(Expr(y0),Lst(P),Lst(V),Var(x),Real(a))
@@ -2732,9 +2732,9 @@ cdef class GiacMethods_base:
See also: 1/ jacobi_equation 2/ euler_lagrange
Ex1:conjugate_equation(A*sin(t)+B*cos(t),[A,B],[1,0],t,0)
'''
- return GiacMethods['conjugate_equation'](self,*args)
+ return GiacMethods['conjugate_equation'](self, *args)
- def conjugate_gradient(self,*args):
+ def conjugate_gradient(self, *args):
r'''From Giac's documentation:
Help for conjugate_gradient:
conjugate_gradient(Mtrx(A),Vect(y),[Vect(x0),Real(eps)])
@@ -2745,18 +2745,18 @@ cdef class GiacMethods_base:
Ex3:conjugate_gradient([[2,1],[1,5]],[1,0],[0.55,-0.11],1e-2)
Ex4:conjugate_gradient([[2,1],[1,5]],[1,0],[0.55,-0.11],1e-10)
'''
- return GiacMethods['conjugate_gradient'](self,*args)
+ return GiacMethods['conjugate_gradient'](self, *args)
- def connected(self,*args):
+ def connected(self, *args):
r'''From Giac's documentation:
Help for connected:
connected(Opt)
Option for the random_regular_graph command.
See also: 1/ directed 2/ weighted 3/ random_regular_graph
'''
- return GiacMethods['connected'](self,*args)
+ return GiacMethods['connected'](self, *args)
- def connected_components(self,*args):
+ def connected_components(self, *args):
r'''From Giac's documentation:
Help for connected_components:
connected_components(Graph(G))
@@ -2764,9 +2764,9 @@ cdef class GiacMethods_base:
See also: 1/ articulation_points 2/ is_biconnected 3/ is_strongly_connected 4/ strongly_connected_components 5/ underlying_graph
Ex1:connected_components(graph_complement(cycle_graph(4)))
'''
- return GiacMethods['connected_components'](self,*args)
+ return GiacMethods['connected_components'](self, *args)
- def cont(self,*args):
+ def cont(self, *args):
r'''From Giac's documentation:
Help for cont:
cont(NULL)
@@ -2774,9 +2774,9 @@ cdef class GiacMethods_base:
See also: 1/ continue
Ex1:cont()
'''
- return GiacMethods['cont'](self,*args)
+ return GiacMethods['cont'](self, *args)
- def contains(self,*args):
+ def contains(self, *args):
r'''From Giac's documentation:
Help for contains:
contains((Lst(l) or Set(l)),Elem(e))
@@ -2786,9 +2786,9 @@ cdef class GiacMethods_base:
Ex2:contains([0,1,2,3],4)
Ex3:contains([1..2],1.5)
'''
- return GiacMethods['contains'](self,*args)
+ return GiacMethods['contains'](self, *args)
- def content(self,*args):
+ def content(self, *args):
r'''From Giac's documentation:
Help for content:
content(Poly(P),[Var])
@@ -2798,9 +2798,9 @@ cdef class GiacMethods_base:
Ex2:content([2,10,6])
Ex3:content(2*t^2+10*t+6,t)
'''
- return GiacMethods['content'](self,*args)
+ return GiacMethods['content'](self, *args)
- def contourplot(self,*args):
+ def contourplot(self, *args):
r'''From Giac's documentation:
Help for contourplot:
contourplot(Expr(Xpr),[LstVar],[LstVal])
@@ -2811,9 +2811,9 @@ cdef class GiacMethods_base:
Ex3:contourplot(x^2+2*y^2-2,[x,y],[1.0,2.0,3.0])
Ex4:contourplot(x^2-y^2,[x=-4..4,y=-4..4],seq(k,k,-11,11,3),xstep=0.1,ystep=0.1)
'''
- return GiacMethods['contourplot'](self,*args)
+ return GiacMethods['contourplot'](self, *args)
- def contract_edge(self,*args):
+ def contract_edge(self, *args):
r'''From Giac's documentation:
Help for contract_edge:
contract_edge(Graph(G),Edge(e))
@@ -2821,9 +2821,9 @@ cdef class GiacMethods_base:
See also: 1/ delete_edge 2/ delete_vertex 3/ foldl
Ex1:contract_edge(complete_graph(4),[1,3])
'''
- return GiacMethods['contract_edge'](self,*args)
+ return GiacMethods['contract_edge'](self, *args)
- def convert(self,*args):
+ def convert(self, *args):
r'''From Giac's documentation:
Help for convert:
convert(Expr(Xpr),Cmd(cmd))
@@ -2847,9 +2847,9 @@ cdef class GiacMethods_base:
Ex16: A[2,1]:=1;convert(A,array)
Ex17: B[0..1,1..2]:=1;B[2,2]:=2;convert(B,array)
'''
- return GiacMethods['convert'](self,*args)
+ return GiacMethods['convert'](self, *args)
- def convertir(self,*args):
+ def convertir(self, *args):
r'''From Giac's documentation:
Help for convertir:
convertir(Expr(Xpr),Cmd(cmd))
@@ -2873,9 +2873,9 @@ cdef class GiacMethods_base:
Ex16: A[2,1]:=1;convert(A,array)
Ex17: B[0..1,1..2]:=1;B[2,2]:=2;convert(B,array)
'''
- return GiacMethods['convertir'](self,*args)
+ return GiacMethods['convertir'](self, *args)
- def convex(self,*args):
+ def convex(self, *args):
r'''From Giac's documentation:
Help for convex:
convex(Expr(f),Lst(x,y,..))
@@ -2891,9 +2891,9 @@ cdef class GiacMethods_base:
Ex8:convex(sqrt((1+cos(x)^2)/sin(x)),x)
Ex9:convex(sqrt((1+(u')^2)/(2*g*u)),u(t))
'''
- return GiacMethods['convex'](self,*args)
+ return GiacMethods['convex'](self, *args)
- def convexhull(self,*args):
+ def convexhull(self, *args):
r'''From Giac's documentation:
Help for convexhull:
convexhull(Lst)
@@ -2903,9 +2903,9 @@ cdef class GiacMethods_base:
Ex2:convexhull([0,1,1+i,1+2i,-1-i,1-3i,-2+i])
Ex3: polygon(convexhull(0,1,1+i,1+2i,-1-i,1-3i,-2+i))
'''
- return GiacMethods['convexhull'](self,*args)
+ return GiacMethods['convexhull'](self, *args)
- def convolution(self,*args):
+ def convolution(self, *args):
r'''From Giac's documentation:
Help for convolution:
convolution(Lst(u),Lst(v))
@@ -2914,9 +2914,9 @@ cdef class GiacMethods_base:
Ex1:convolution([1,2,3],[1,-1,1,-1])
Ex2:convolution(25*exp(2*x),x*exp(-3*x),x)
'''
- return GiacMethods['convolution'](self,*args)
+ return GiacMethods['convolution'](self, *args)
- def coordinates(self,*args):
+ def coordinates(self, *args):
r'''From Giac's documentation:
Help for coordinates:
coordinates(Pnt or Cplx or Vect)
@@ -2931,9 +2931,9 @@ cdef class GiacMethods_base:
Ex7:coordinates(point(1,2,3))
Ex8:coordinates(vecteur([1,2,3],[4,5,6]))
'''
- return GiacMethods['coordinates'](self,*args)
+ return GiacMethods['coordinates'](self, *args)
- def copy(self,*args):
+ def copy(self, *args):
r'''From Giac's documentation:
Help for copy:
copy(Mtrx,Var)
@@ -2941,9 +2941,9 @@ cdef class GiacMethods_base:
See also: 1/ =<
Ex1: A:=copy(B)
'''
- return GiacMethods['copy'](self,*args)
+ return GiacMethods['copy'](self, *args)
- def correlation(self,*args):
+ def correlation(self, *args):
r'''From Giac's documentation:
Help for correlation:
correlation(Lst||Mtrx,[Lst])
@@ -2951,9 +2951,9 @@ cdef class GiacMethods_base:
See also: 1/ covariance 2/ covariance_correlation
Ex1:correlation([[1,2],[1,1],[4,7]])
'''
- return GiacMethods['correlation'](self,*args)
+ return GiacMethods['correlation'](self, *args)
- def cos(self,*args):
+ def cos(self, *args):
r'''From Giac's documentation:
Help for cos:
cos(Expr or Opt)
@@ -2962,9 +2962,9 @@ cdef class GiacMethods_base:
Ex1:cos(0)
Ex2: convert(cos(x)^4+sin(x)^2,cos)
'''
- return GiacMethods['cos'](self,*args)
+ return GiacMethods['cos'](self, *args)
- def cos2sintan(self,*args):
+ def cos2sintan(self, *args):
r'''From Giac's documentation:
Help for cos2sintan:
cos2sintan(Expr)
@@ -2972,9 +2972,9 @@ cdef class GiacMethods_base:
See also: 1/ tan2sincos 2/ sin2costan 3/ tan2sincos2 4/ tan2cossin2
Ex1:cos2sintan(cos(x))
'''
- return GiacMethods['cos2sintan'](self,*args)
+ return GiacMethods['cos2sintan'](self, *args)
- def cosh(self,*args):
+ def cosh(self, *args):
r'''From Giac's documentation:
Help for cosh:
cosh(Expr)
@@ -2982,9 +2982,9 @@ cdef class GiacMethods_base:
See also: 1/ acosh
Ex1:cosh(0)
'''
- return GiacMethods['cosh'](self,*args)
+ return GiacMethods['cosh'](self, *args)
- def cosine_window(self,*args):
+ def cosine_window(self, *args):
r'''From Giac's documentation:
Help for cosine_window:
cosine_window(Lst,[Real(a)],[Interval(n1..n2)])
@@ -2992,9 +2992,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ bartlett_hann_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(cosine_window(randvector(1000,0..1),1.5))
'''
- return GiacMethods['cosine_window'](self,*args)
+ return GiacMethods['cosine_window'](self, *args)
- def cot(self,*args):
+ def cot(self, *args):
r'''From Giac's documentation:
Help for cot:
cot(Expr)
@@ -3002,9 +3002,9 @@ cdef class GiacMethods_base:
See also: 1/ acot 2/ tan
Ex1:cot(pi/2)
'''
- return GiacMethods['cot'](self,*args)
+ return GiacMethods['cot'](self, *args)
- def cote(self,*args):
+ def cote(self, *args):
r'''From Giac's documentation:
Help for cote:
cote(Vect)
@@ -3013,9 +3013,9 @@ cdef class GiacMethods_base:
Ex1:cote(point[1,2,3])
Ex2:cote(point(1,2,3))
'''
- return GiacMethods['cote'](self,*args)
+ return GiacMethods['cote'](self, *args)
- def count(self,*args):
+ def count(self, *args):
r'''From Giac's documentation:
Help for count:
count(Fnc(f)||LstIntg,(Lst||Mtrx)(l),[Opt(row||col)])
@@ -3032,9 +3032,9 @@ cdef class GiacMethods_base:
Ex9:count((x)->x>2 && x<4,[[3,9/2],[4,1]])
Ex10:count((x)->x<2 || x>4,[[3,9/2],[4,1]])
'''
- return GiacMethods['count'](self,*args)
+ return GiacMethods['count'](self, *args)
- def count_eq(self,*args):
+ def count_eq(self, *args):
r'''From Giac's documentation:
Help for count_eq:
count_eq(Real(a),(Lst||Mtrx)(L),[Opt(row||col)])
@@ -3045,9 +3045,9 @@ cdef class GiacMethods_base:
Ex3:count_eq(4,[[3,4],[4,1]],row)
Ex4:count_eq(4,[[3,4],[4,1]],col)
'''
- return GiacMethods['count_eq'](self,*args)
+ return GiacMethods['count_eq'](self, *args)
- def count_inf(self,*args):
+ def count_inf(self, *args):
r'''From Giac's documentation:
Help for count_inf:
count_inf(Real(a),(Lst||Mtrx)(L),[Opt(row||col)])
@@ -3058,9 +3058,9 @@ cdef class GiacMethods_base:
Ex3:count_inf(4,[[3,5],[4,1]],row)
Ex4:count_inf(4,[[3,5],[4,1]],col)
'''
- return GiacMethods['count_inf'](self,*args)
+ return GiacMethods['count_inf'](self, *args)
- def count_sup(self,*args):
+ def count_sup(self, *args):
r'''From Giac's documentation:
Help for count_sup:
count_sup(Real(a),(Lst||Mtrx)(L),[Opt(row||col)])
@@ -3071,9 +3071,9 @@ cdef class GiacMethods_base:
Ex3:count_sup(3,[[3,5],[4,1]],row)
Ex4:count_sup(3,[[3,5],[4,1]],col)
'''
- return GiacMethods['count_sup'](self,*args)
+ return GiacMethods['count_sup'](self, *args)
- def courbe_parametrique(self,*args):
+ def courbe_parametrique(self, *args):
r'''From Giac's documentation:
Help for courbe_parametrique:
courbe_parametrique(Cplx||Lst,Var||Lst(Var))
@@ -3088,9 +3088,9 @@ cdef class GiacMethods_base:
Ex7:courbe_parametrique([v*cos(u),v*sin(u),v],[u,v])
Ex8:courbe_parametrique([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3],ustep=0.1,vstep=0.2)
'''
- return GiacMethods['courbe_parametrique'](self,*args)
+ return GiacMethods['courbe_parametrique'](self, *args)
- def courbe_polaire(self,*args):
+ def courbe_polaire(self, *args):
r'''From Giac's documentation:
Help for courbe_polaire:
courbe_polaire(Expr,Var,VarMin,VarMax)
@@ -3099,9 +3099,9 @@ cdef class GiacMethods_base:
Ex1:courbe_polaire(sin(2*x),x,0,pi)
Ex2:courbe_polaire(sin(2*x),x,0,pi,tstep=0.1)
'''
- return GiacMethods['courbe_polaire'](self,*args)
+ return GiacMethods['courbe_polaire'](self, *args)
- def covariance(self,*args):
+ def covariance(self, *args):
r'''From Giac's documentation:
Help for covariance:
covariance(Lst||Mtrx,[Lst])
@@ -3109,9 +3109,9 @@ cdef class GiacMethods_base:
See also: 1/ correlation 2/ covariance_correlation
Ex1:covariance([[1,2],[1,1],[4,7]])
'''
- return GiacMethods['covariance'](self,*args)
+ return GiacMethods['covariance'](self, *args)
- def covariance_correlation(self,*args):
+ def covariance_correlation(self, *args):
r'''From Giac's documentation:
Help for covariance_correlation:
covariance_correlation(Lst||Mtrx,[Lst])
@@ -3119,9 +3119,9 @@ cdef class GiacMethods_base:
See also: 1/ covariance 2/ correlation
Ex1:covariance_correlation([[1,2],[1,1],[4,7]])
'''
- return GiacMethods['covariance_correlation'](self,*args)
+ return GiacMethods['covariance_correlation'](self, *args)
- def cpartfrac(self,*args):
+ def cpartfrac(self, *args):
r'''From Giac's documentation:
Help for cpartfrac:
cpartfrac(RatFrac)
@@ -3131,9 +3131,9 @@ cdef class GiacMethods_base:
Ex2:cpartfrac((x^2-2*x+3)/(x^2-3*x+2))
Ex3:cpartfrac(a/(z*(z-b)),z)
'''
- return GiacMethods['cpartfrac'](self,*args)
+ return GiacMethods['cpartfrac'](self, *args)
- def crationalroot(self,*args):
+ def crationalroot(self, *args):
r'''From Giac's documentation:
Help for crationalroot:
crationalroot(Poly(P))
@@ -3141,9 +3141,9 @@ cdef class GiacMethods_base:
See also: 1/ proot 2/ froot 3/ complexroot 4/ rationalroot 5/ realroot
Ex1:crationalroot(2*x^3+(-5-7*i)*x^2+(-4+14*i)*x+8-4*i)
'''
- return GiacMethods['crationalroot'](self,*args)
+ return GiacMethods['crationalroot'](self, *args)
- def crayon(self,*args):
+ def crayon(self, *args):
r'''From Giac's documentation:
Help for crayon:
crayon(Color)
@@ -3154,9 +3154,9 @@ cdef class GiacMethods_base:
Ex3:crayon(5)
Ex4:crayon(gomme)
'''
- return GiacMethods['crayon'](self,*args)
+ return GiacMethods['crayon'](self, *args)
- def createwav(self,*args):
+ def createwav(self, *args):
r'''From Giac's documentation:
Help for createwav:
createwav(Lst(data),[opts])
@@ -3168,9 +3168,9 @@ cdef class GiacMethods_base:
Ex4:createwav(10*sin(2*pi*440*soundsec(2)),normalize=-3)
Ex5: t:=soundsec(3):;L,R:=sin(2*pi*440*t),sin(2*pi*445*t):;createwav([L,R])
'''
- return GiacMethods['createwav'](self,*args)
+ return GiacMethods['createwav'](self, *args)
- def cross(self,*args):
+ def cross(self, *args):
r'''From Giac's documentation:
Help for cross:
cross(Vect(v1),Vect(v2))
@@ -3179,9 +3179,9 @@ cdef class GiacMethods_base:
Ex1:cross([1,2],[3,4])
Ex2:cross([1,2,3],[4,5,6])
'''
- return GiacMethods['cross'](self,*args)
+ return GiacMethods['cross'](self, *args)
- def crossP(self,*args):
+ def crossP(self, *args):
r'''From Giac's documentation:
Help for crossP:
crossP(Vect(v1),Vect(v2))
@@ -3190,9 +3190,9 @@ cdef class GiacMethods_base:
Ex1:crossP([1,2],[3,4])
Ex2:crossP([1,2,3],[4,5,6])
'''
- return GiacMethods['crossP'](self,*args)
+ return GiacMethods['crossP'](self, *args)
- def cross_correlation(self,*args):
+ def cross_correlation(self, *args):
r'''From Giac's documentation:
Help for cross_correlation:
cross_correlation(cross_correlation(Lst(u),Lst(v)))
@@ -3200,9 +3200,9 @@ cdef class GiacMethods_base:
See also: 1/ auto_correlation 2/ correlation
Ex1:cross_correlation([1,2],[3,4,5])
'''
- return GiacMethods['cross_correlation'](self,*args)
+ return GiacMethods['cross_correlation'](self, *args)
- def cross_point(self,*args):
+ def cross_point(self, *args):
r'''From Giac's documentation:
Help for cross_point:
cross_point(Opt)
@@ -3211,9 +3211,9 @@ cdef class GiacMethods_base:
Ex1: F:=display(point(2+1.5*i),point_point)
Ex2: F:=display(point(2+1.5*i),rhombus_point)
'''
- return GiacMethods['cross_point'](self,*args)
+ return GiacMethods['cross_point'](self, *args)
- def cross_ratio(self,*args):
+ def cross_ratio(self, *args):
r'''From Giac's documentation:
Help for cross_ratio:
cross_ratio(Pnt or Cplx(a),Pnt or Cplx(b),Pnt or Cplx(c),Pnt or Cplx(d))
@@ -3223,9 +3223,9 @@ cdef class GiacMethods_base:
Ex2:cross_ratio(0,1+i,1,i)
Ex3:cross_ratio(0,1,2,3)
'''
- return GiacMethods['cross_ratio'](self,*args)
+ return GiacMethods['cross_ratio'](self, *args)
- def crossproduct(self,*args):
+ def crossproduct(self, *args):
r'''From Giac's documentation:
Help for crossproduct:
crossproduct(Vect(v1),Vect(v2))
@@ -3234,9 +3234,9 @@ cdef class GiacMethods_base:
Ex1:crossproduct([1,2],[3,4])
Ex2:crossproduct([1,2,3],[4,5,6])
'''
- return GiacMethods['crossproduct'](self,*args)
+ return GiacMethods['crossproduct'](self, *args)
- def csc(self,*args):
+ def csc(self, *args):
r'''From Giac's documentation:
Help for csc:
csc(Expr)
@@ -3244,9 +3244,9 @@ cdef class GiacMethods_base:
See also: 1/ sin 2/ acsc
Ex1:csc(pi/2)
'''
- return GiacMethods['csc'](self,*args)
+ return GiacMethods['csc'](self, *args)
- def csolve(self,*args):
+ def csolve(self, *args):
r'''From Giac's documentation:
Help for csolve:
csolve(LstEq,LstVar)
@@ -3257,9 +3257,9 @@ cdef class GiacMethods_base:
Ex3:csolve(x^4-y^4 and x+y=0 and x^2=2*x,[x,y])
Ex4:csolve(u*v-u=v and v^2=u,[u,v])
'''
- return GiacMethods['csolve'](self,*args)
+ return GiacMethods['csolve'](self, *args)
- def csv2gen(self,*args):
+ def csv2gen(self, *args):
r'''From Giac's documentation:
Help for csv2gen:
csv2gen(Strng(filename),Strng(sep),Strng(nl),Strng(decsep),Strng(eof),[string])
@@ -3267,9 +3267,9 @@ cdef class GiacMethods_base:
See also: 1/ read
Ex1:csv2gen("mat.txt",",",char(10),".")
'''
- return GiacMethods['csv2gen'](self,*args)
+ return GiacMethods['csv2gen'](self, *args)
- def cube(self,*args):
+ def cube(self, *args):
r'''From Giac's documentation:
Help for cube:
cube(Pnt(A),Pnt(B),Pnt(C))
@@ -3281,9 +3281,9 @@ cdef class GiacMethods_base:
Ex4: c:=cube([0,0,0],[1,0,0],[0,1,0]);c1,c2,c4,c3,c5,c6,c7,c8:=sommets(c);
Ex5: c:=cube([0,0,0],[0,2,0],[0,0,1]);c1,c2,c4,c3,c5,c6,c7,c8:=sommets(c);
'''
- return GiacMethods['cube'](self,*args)
+ return GiacMethods['cube'](self, *args)
- def cumSum(self,*args):
+ def cumSum(self, *args):
r'''From Giac's documentation:
Help for cumSum:
cumSum(Lst(l)||Seq||Str)
@@ -3293,9 +3293,9 @@ cdef class GiacMethods_base:
Ex2:cumSum(1.2,3,4.5,6)
Ex3:cumSum("a","b","c","d")
'''
- return GiacMethods['cumSum'](self,*args)
+ return GiacMethods['cumSum'](self, *args)
- def cumsum(self,*args):
+ def cumsum(self, *args):
r'''From Giac's documentation:
Help for cumsum:
cumsum(Lst(l)||Seq||Str)
@@ -3305,9 +3305,9 @@ cdef class GiacMethods_base:
Ex2:cumsum(1.2,3,4.5,6)
Ex3:cumsum("a","b","c","d")
'''
- return GiacMethods['cumsum'](self,*args)
+ return GiacMethods['cumsum'](self, *args)
- def cumulated_frequencies(self,*args):
+ def cumulated_frequencies(self, *args):
r'''From Giac's documentation:
Help for cumulated_frequencies:
cumulated_frequencies(Lst || Mtrx)
@@ -3319,9 +3319,9 @@ cdef class GiacMethods_base:
Ex4:cumulated_frequencies([[1..2,0.3],[2..3,0.5],[3..4,0.2]])
Ex5:cumulated_frequencies([[1..2,0.3,0.5],[2..3,0.5,0.2],[3..4,0.2,0.3]])
'''
- return GiacMethods['cumulated_frequencies'](self,*args)
+ return GiacMethods['cumulated_frequencies'](self, *args)
- def curl(self,*args):
+ def curl(self, *args):
r'''From Giac's documentation:
Help for curl:
curl(Lst(A,B,C),Lst(x,y,z))
@@ -3329,9 +3329,9 @@ cdef class GiacMethods_base:
See also: 1/ derive 2/ divergence
Ex1:curl([2*x*y,x*z,y*z],[x,y,z])
'''
- return GiacMethods['curl'](self,*args)
+ return GiacMethods['curl'](self, *args)
- def current_sheet(self,*args):
+ def current_sheet(self, *args):
r'''From Giac's documentation:
Help for current_sheet:
current_sheet([Intg||Inter],[Intg||Letter],[Letter])
@@ -3339,9 +3339,9 @@ cdef class GiacMethods_base:
Ex1:current_sheet(1,2)
Ex2:current_sheet(A1..A5,B,G)
'''
- return GiacMethods['current_sheet'](self,*args)
+ return GiacMethods['current_sheet'](self, *args)
- def curvature(self,*args):
+ def curvature(self, *args):
r'''From Giac's documentation:
Help for curvature:
curvature(Curve,Point)
@@ -3355,18 +3355,18 @@ cdef class GiacMethods_base:
Ex6:curvature([3*exp(t/2)*cos(t),3*exp(t/2)*sin(t)],t,7)
Ex7: trigcos(curvature([2*cos(t),2*sin(t),3*t],t))
'''
- return GiacMethods['curvature'](self,*args)
+ return GiacMethods['curvature'](self, *args)
- def curve(self,*args):
+ def curve(self, *args):
r'''From Giac's documentation:
Help for curve:
curve(Expr)
Reserved word.
See also: 1/
'''
- return GiacMethods['curve'](self,*args)
+ return GiacMethods['curve'](self, *args)
- def cyan(self,*args):
+ def cyan(self, *args):
r'''From Giac's documentation:
Help for cyan:
cyan(Opt)
@@ -3375,9 +3375,9 @@ cdef class GiacMethods_base:
Ex1: F:=display(point(2+1.5*i),red)
Ex2: F:=display(point(2+1.5*i),point_point+green)
'''
- return GiacMethods['cyan'](self,*args)
+ return GiacMethods['cyan'](self, *args)
- def cycle2perm(self,*args):
+ def cycle2perm(self, *args):
r'''From Giac's documentation:
Help for cycle2perm:
cycle2perm(Cycle)
@@ -3385,9 +3385,9 @@ cdef class GiacMethods_base:
See also: 1/ cycles2permu 2/ permu2cycles
Ex1:cycle2perm([1,3,5])
'''
- return GiacMethods['cycle2perm'](self,*args)
+ return GiacMethods['cycle2perm'](self, *args)
- def cycle_graph(self,*args):
+ def cycle_graph(self, *args):
r'''From Giac's documentation:
Help for cycle_graph:
cycle_graph(Intg(n)||Lst(V))
@@ -3396,9 +3396,9 @@ cdef class GiacMethods_base:
Ex1:cycle_graph(4)
Ex2:cycle_graph(["one","two","three","four","five"])
'''
- return GiacMethods['cycle_graph'](self,*args)
+ return GiacMethods['cycle_graph'](self, *args)
- def cycleinv(self,*args):
+ def cycleinv(self, *args):
r'''From Giac's documentation:
Help for cycleinv:
cycleinv(Cycle(c))
@@ -3406,9 +3406,9 @@ cdef class GiacMethods_base:
See also: 1/ perminv
Ex1:cycleinv([1,3,5])
'''
- return GiacMethods['cycleinv'](self,*args)
+ return GiacMethods['cycleinv'](self, *args)
- def cycles2permu(self,*args):
+ def cycles2permu(self, *args):
r'''From Giac's documentation:
Help for cycles2permu:
cycles2permu(Lst(Cycle))
@@ -3416,9 +3416,9 @@ cdef class GiacMethods_base:
See also: 1/ permu2cycles 2/ cycle2perm
Ex1:cycles2permu([[1,3,5],[3,4]])
'''
- return GiacMethods['cycles2permu'](self,*args)
+ return GiacMethods['cycles2permu'](self, *args)
- def cyclotomic(self,*args):
+ def cyclotomic(self, *args):
r'''From Giac's documentation:
Help for cyclotomic:
cyclotomic(Expr)
@@ -3426,9 +3426,9 @@ cdef class GiacMethods_base:
See also: 1/ none
Ex1:cyclotomic(20)
'''
- return GiacMethods['cyclotomic'](self,*args)
+ return GiacMethods['cyclotomic'](self, *args)
- def cylinder(self,*args):
+ def cylinder(self, *args):
r'''From Giac's documentation:
Help for cylinder:
cylinder(Pnt(A),Vect(v),Real(r),[Real(h)])
@@ -3437,9 +3437,9 @@ cdef class GiacMethods_base:
Ex1:cylinder([0,0,0],[0,1,0],2)
Ex2:cylinder([0,0,0],[0,1,0],2,-3)
'''
- return GiacMethods['cylinder'](self,*args)
+ return GiacMethods['cylinder'](self, *args)
- def dash_line(self,*args):
+ def dash_line(self, *args):
r'''From Giac's documentation:
Help for dash_line:
dash_line(Opt)
@@ -3448,9 +3448,9 @@ cdef class GiacMethods_base:
Ex1: display(line(y=x),green+dash_line+line_width_2)
Ex2: d:=display(line(2+i,1),cap_round_line)
'''
- return GiacMethods['dash_line'](self,*args)
+ return GiacMethods['dash_line'](self, *args)
- def dashdot_line(self,*args):
+ def dashdot_line(self, *args):
r'''From Giac's documentation:
Help for dashdot_line:
dashdot_line(Opt)
@@ -3459,9 +3459,9 @@ cdef class GiacMethods_base:
Ex1: display(line(y=x),green+dash_line+line_width_2)
Ex2: d:=display(line(2+i,1),cap_round_line)
'''
- return GiacMethods['dashdot_line'](self,*args)
+ return GiacMethods['dashdot_line'](self, *args)
- def dashdotdot_line(self,*args):
+ def dashdotdot_line(self, *args):
r'''From Giac's documentation:
Help for dashdotdot_line:
dashdotdot_line(Opt)
@@ -3470,9 +3470,9 @@ cdef class GiacMethods_base:
Ex1: display(line(y=x),green+dash_line+line_width_2)
Ex2: d:=display(line(2+i,1),cap_round_line)
'''
- return GiacMethods['dashdotdot_line'](self,*args)
+ return GiacMethods['dashdotdot_line'](self, *args)
- def dayofweek(self,*args):
+ def dayofweek(self, *args):
r'''From Giac's documentation:
Help for dayofweek:
dayofweek(Int,Int,Int)
@@ -3480,9 +3480,9 @@ cdef class GiacMethods_base:
Ex1:dayofweek(21,4,2014)
Ex2:dayofweek(15,10,1582)
'''
- return GiacMethods['dayofweek'](self,*args)
+ return GiacMethods['dayofweek'](self, *args)
- def deSolve(self,*args):
+ def deSolve(self, *args):
r'''From Giac's documentation:
Help for deSolve:
deSolve(Eq,[TimeVar],FncVar)
@@ -3505,9 +3505,9 @@ cdef class GiacMethods_base:
Ex15:deSolve([z'=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)
Ex16:deSolve([z'=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))
'''
- return GiacMethods['deSolve'](self,*args)
+ return GiacMethods['deSolve'](self, *args)
- def debut_enregistrement(self,*args):
+ def debut_enregistrement(self, *args):
r'''From Giac's documentation:
Help for debut_enregistrement:
debut_enregistrement(Var(nom_du_dessin))
@@ -3516,9 +3516,9 @@ cdef class GiacMethods_base:
Ex1:debut_enregistrement(maison)
Ex2:debut_enregistrement(arbre)
'''
- return GiacMethods['debut_enregistrement'](self,*args)
+ return GiacMethods['debut_enregistrement'](self, *args)
- def degree(self,*args):
+ def degree(self, *args):
r'''From Giac's documentation:
Help for degree:
degree(Poly(P),Var(Var))
@@ -3528,9 +3528,9 @@ cdef class GiacMethods_base:
Ex2:degree([1,0,1,0])
Ex3:degree(x^3+x*y,y)
'''
- return GiacMethods['degree'](self,*args)
+ return GiacMethods['degree'](self, *args)
- def degree_sequence(self,*args):
+ def degree_sequence(self, *args):
r'''From Giac's documentation:
Help for degree_sequence:
degree_sequence(Graph(G))
@@ -3538,9 +3538,9 @@ cdef class GiacMethods_base:
See also: 1/ is_graphic_sequence 2/ is_regular 2/ sequence_graph 3/ vertex_degree
Ex1:degree_sequence(graph(trail(1,2,3,4,2)))
'''
- return GiacMethods['degree_sequence'](self,*args)
+ return GiacMethods['degree_sequence'](self, *args)
- def delcols(self,*args):
+ def delcols(self, *args):
r'''From Giac's documentation:
Help for delcols:
delcols(Mtrx(A),Interval(n1..n2)||n1)
@@ -3550,9 +3550,9 @@ cdef class GiacMethods_base:
Ex2:delcols([[1,2,3],[4,5,6],[7,8,9]],0..1)
Ex3:delcols([[1,2,3],[4,5,6],[7,8,9]],1)
'''
- return GiacMethods['delcols'](self,*args)
+ return GiacMethods['delcols'](self, *args)
- def delete_arc(self,*args):
+ def delete_arc(self, *args):
r'''From Giac's documentation:
Help for delete_arc:
delete_arc(Graph(G),Edge(e)||Trail(T)||Lst(E))
@@ -3560,9 +3560,9 @@ cdef class GiacMethods_base:
See also: 1/ add_arc 2/ delete_edge 3/ digraph 4/ edges 5/ has_arc 6/ trail
Ex1:delete_arc(digraph(trail(1,2,3,4,5,1)),[5,1])
'''
- return GiacMethods['delete_arc'](self,*args)
+ return GiacMethods['delete_arc'](self, *args)
- def delete_edge(self,*args):
+ def delete_edge(self, *args):
r'''From Giac's documentation:
Help for delete_edge:
delete_edge(Graph(G),Edge(e)||Trail(T)||Lst(E))
@@ -3570,9 +3570,9 @@ cdef class GiacMethods_base:
See also: 1/ add_edge 2/ delete_arc 3/ edges 4/ graph 5/ has_edge 6/ trail
Ex1:delete_edge(cycle_graph(4),[1,2])
'''
- return GiacMethods['delete_edge'](self,*args)
+ return GiacMethods['delete_edge'](self, *args)
- def delete_vertex(self,*args):
+ def delete_vertex(self, *args):
r'''From Giac's documentation:
Help for delete_vertex:
delete_vertex(Graph(G),Vrtx(v)||Lst(V))
@@ -3580,9 +3580,9 @@ cdef class GiacMethods_base:
See also: 1/ add_vertex 2/ induced_subgraph
Ex1:delete_vertex(cycle_graph(5),[1,4])
'''
- return GiacMethods['delete_vertex'](self,*args)
+ return GiacMethods['delete_vertex'](self, *args)
- def delrows(self,*args):
+ def delrows(self, *args):
r'''From Giac's documentation:
Help for delrows:
delrows(Mtrx(A),Interval(n1..n2)||n1)
@@ -3592,9 +3592,9 @@ cdef class GiacMethods_base:
Ex2:delrows([[1,2,3],[4,5,6],[7,8,9]],0..1)
Ex3:delrows([[1,2,3],[4,5,6],[7,8,9]],1)
'''
- return GiacMethods['delrows'](self,*args)
+ return GiacMethods['delrows'](self, *args)
- def deltalist(self,*args):
+ def deltalist(self, *args):
r'''From Giac's documentation:
Help for deltalist:
deltalist(Lst)
@@ -3603,9 +3603,9 @@ cdef class GiacMethods_base:
Ex1:deltalist([1,4,8,9])
Ex2:deltalist([1,8,4,9])
'''
- return GiacMethods['deltalist'](self,*args)
+ return GiacMethods['deltalist'](self, *args)
- def denom(self,*args):
+ def denom(self, *args):
r'''From Giac's documentation:
Help for denom:
denom(Frac(a/b) or RatFrac)
@@ -3615,9 +3615,9 @@ cdef class GiacMethods_base:
Ex2:denom((x^3-1)/(x^2-1))
Ex3:denom(1+(x^3-1)/x^2)
'''
- return GiacMethods['denom'](self,*args)
+ return GiacMethods['denom'](self, *args)
- def densityplot(self,*args):
+ def densityplot(self, *args):
r'''From Giac's documentation:
Help for densityplot:
densityplot(Expr,[x=xrange,y=yrange],[z],[xstep],[ystep])
@@ -3626,9 +3626,9 @@ cdef class GiacMethods_base:
Ex1:densityplot(x^2-y^2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
Ex2:densityplot(x^2-y^2,[x=-2..2,y=-2..2],z=-2..2,xstep=0.1,ystep=0.1)
'''
- return GiacMethods['densityplot'](self,*args)
+ return GiacMethods['densityplot'](self, *args)
- def departures(self,*args):
+ def departures(self, *args):
r'''From Giac's documentation:
Help for departures:
departures(Graph(G),[Vrtx(v)])
@@ -3636,9 +3636,9 @@ cdef class GiacMethods_base:
See also: 1/ out_degree
Ex1:departures(digraph(%{[1,2],[1,3],[2,3]%}),1)
'''
- return GiacMethods['departures'](self,*args)
+ return GiacMethods['departures'](self, *args)
- def derive(self,*args):
+ def derive(self, *args):
r'''From Giac's documentation:
Help for derive:
derive(Expr or Fnc,[SeqVar or LstVar],[n])
@@ -3653,9 +3653,9 @@ cdef class GiacMethods_base:
Ex7:derive(x*y+z*y,[y,z])
Ex8: f(x):=sin(2x);g:=diff(f);h:=diff(diff(f))
'''
- return GiacMethods['derive'](self,*args)
+ return GiacMethods['derive'](self, *args)
- def deriver(self,*args):
+ def deriver(self, *args):
r'''From Giac's documentation:
Help for deriver:
deriver(Expr or Fnc,[SeqVar or LstVar],[n])
@@ -3670,9 +3670,9 @@ cdef class GiacMethods_base:
Ex7:deriver(x*y+z*y,[y,z])
Ex8: f(x):=sin(2x);g:=diff(f);h:=diff(diff(f))
'''
- return GiacMethods['deriver'](self,*args)
+ return GiacMethods['deriver'](self, *args)
- def desolve(self,*args):
+ def desolve(self, *args):
r'''From Giac's documentation:
Help for desolve:
desolve(Eq,[TimeVar],FncVar)
@@ -3695,9 +3695,9 @@ cdef class GiacMethods_base:
Ex15:desolve([z'=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)
Ex16:desolve([z'=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))
'''
- return GiacMethods['desolve'](self,*args)
+ return GiacMethods['desolve'](self, *args)
- def dessine_tortue(self,*args):
+ def dessine_tortue(self, *args):
r'''From Giac's documentation:
Help for dessine_tortue:
dessine_tortue([Intg(n)])
@@ -3707,9 +3707,9 @@ cdef class GiacMethods_base:
Ex2:dessine_tortue(0)
Ex3:dessine_tortue(1)
'''
- return GiacMethods['dessine_tortue'](self,*args)
+ return GiacMethods['dessine_tortue'](self, *args)
- def det(self,*args):
+ def det(self, *args):
r'''From Giac's documentation:
Help for det:
det(Mtrx)
@@ -3718,9 +3718,9 @@ cdef class GiacMethods_base:
Ex1:det([[1,2],[3,4]])
Ex2:det([[1,2,3],[1,3,6],[2,5,7]])
'''
- return GiacMethods['det'](self,*args)
+ return GiacMethods['det'](self, *args)
- def det_minor(self,*args):
+ def det_minor(self, *args):
r'''From Giac's documentation:
Help for det_minor:
det_minor(Mtrx(A))
@@ -3728,9 +3728,9 @@ cdef class GiacMethods_base:
See also: 1/ det
Ex1:det_minor([[1,2],[3,4]])
'''
- return GiacMethods['det_minor'](self,*args)
+ return GiacMethods['det_minor'](self, *args)
- def developper(self,*args):
+ def developper(self, *args):
r'''From Giac's documentation:
Help for developper:
developper(Expr)
@@ -3742,9 +3742,9 @@ cdef class GiacMethods_base:
Ex4:developper((x+3)^4)
Ex5:developper((2*x-2*1)*(x^2-3*x+2)+(x^2-2*x+3)*(2*x-3*1))
'''
- return GiacMethods['developper'](self,*args)
+ return GiacMethods['developper'](self, *args)
- def developper_transcendant(self,*args):
+ def developper_transcendant(self, *args):
r'''From Giac's documentation:
Help for developper_transcendant:
developper_transcendant(Expr)
@@ -3754,9 +3754,9 @@ cdef class GiacMethods_base:
Ex2:developper_transcendant(cos(x+y))
Ex3:developper_transcendant(cos(3*x))
'''
- return GiacMethods['developper_transcendant'](self,*args)
+ return GiacMethods['developper_transcendant'](self, *args)
- def dfc(self,*args):
+ def dfc(self, *args):
r'''From Giac's documentation:
Help for dfc:
dfc(Real(x0),Int(n)||Real(eps))
@@ -3768,9 +3768,9 @@ cdef class GiacMethods_base:
Ex4: convert(sqrt(2),confrac,'dev');dev
Ex5: convert(9976/6961,confrac,'l');l
'''
- return GiacMethods['dfc'](self,*args)
+ return GiacMethods['dfc'](self, *args)
- def dfc2f(self,*args):
+ def dfc2f(self, *args):
r'''From Giac's documentation:
Help for dfc2f:
dfc2f(LstFrac_Cont))
@@ -3779,9 +3779,9 @@ cdef class GiacMethods_base:
Ex1:dfc2f([1,1,1])
Ex2:dfc2f([1,2,[2]])
'''
- return GiacMethods['dfc2f'](self,*args)
+ return GiacMethods['dfc2f'](self, *args)
- def diag(self,*args):
+ def diag(self, *args):
r'''From Giac's documentation:
Help for diag:
diag(Lst(l)||(Mtrx(A),[left||right||lu])||Lst(l),Lst(d),Lst(u))
@@ -3794,9 +3794,9 @@ cdef class GiacMethods_base:
Ex5:diag([[1,2],[3,4]],lu)
Ex6:diag([1,2],[3,4,5],[6,7])
'''
- return GiacMethods['diag'](self,*args)
+ return GiacMethods['diag'](self, *args)
- def diff(self,*args):
+ def diff(self, *args):
r'''From Giac's documentation:
Help for diff:
diff(Expr or Fnc,[SeqVar or LstVar],[n])
@@ -3811,9 +3811,9 @@ cdef class GiacMethods_base:
Ex7:diff(x*y+z*y,[y,z])
Ex8: f(x):=sin(2x);g:=diff(f);h:=diff(diff(f))
'''
- return GiacMethods['diff'](self,*args)
+ return GiacMethods['diff'](self, *args)
- def digraph(self,*args):
+ def digraph(self, *args):
r'''From Giac's documentation:
Help for digraph:
digraph([Lst(V)],[Set(E)],[Mtrx(A)],[options])
@@ -3822,9 +3822,9 @@ cdef class GiacMethods_base:
Ex1:digraph(%{[1,2],[2,3],[3,4],[4,1]%})
Ex2:digraph([a,b,c,d],%{[[a,b],1.0],[[a,c],2.3],[[b,d],3.1],[[c,d],4]%})
'''
- return GiacMethods['digraph'](self,*args)
+ return GiacMethods['digraph'](self, *args)
- def dijkstra(self,*args):
+ def dijkstra(self, *args):
r'''From Giac's documentation:
Help for dijkstra:
dijkstra(Graph(G),Vrtx(v),[Vrtx(w)||Lst(W)])
@@ -3832,9 +3832,9 @@ cdef class GiacMethods_base:
See also: 1/ allpairs_distance 2/ shortest_path
Ex1:dijkstra(graph(%{[[1,2],1],[[2,3],3],[[3,4],7],[[4,5],3],[[5,6],3],[[1,6],3]%}),1,4)
'''
- return GiacMethods['dijkstra'](self,*args)
+ return GiacMethods['dijkstra'](self, *args)
- def dim(self,*args):
+ def dim(self, *args):
r'''From Giac's documentation:
Help for dim:
dim(Mtrx)
@@ -3842,18 +3842,18 @@ cdef class GiacMethods_base:
See also: 1/ rowdim 2/ coldim 3/ sizes 4/ size
Ex1:dim([[1,2,3],[4,5,6]])
'''
- return GiacMethods['dim'](self,*args)
+ return GiacMethods['dim'](self, *args)
- def directed(self,*args):
+ def directed(self, *args):
r'''From Giac's documentation:
Help for directed:
directed(Opt)
Option for graph and digraph commands.
See also: 1/ weighted 2/ graph 3/ digraph
'''
- return GiacMethods['directed'](self,*args)
+ return GiacMethods['directed'](self, *args)
- def discard_edge_attribute(self,*args):
+ def discard_edge_attribute(self, *args):
r'''From Giac's documentation:
Help for discard_edge_attribute:
discard_edge_attribute(Graph(G),Edge(e),Seq(tag1=value1,tag2=value2,..))
@@ -3861,9 +3861,9 @@ cdef class GiacMethods_base:
See also: 1/ get_edge_attribute 2/ set_edge_attribute 3/ list_edge_attributes
Ex1:discard_edge_attribute(cycle_graph(3),[1,2],"cost")
'''
- return GiacMethods['discard_edge_attribute'](self,*args)
+ return GiacMethods['discard_edge_attribute'](self, *args)
- def discard_graph_attribute(self,*args):
+ def discard_graph_attribute(self, *args):
r'''From Giac's documentation:
Help for discard_graph_attribute:
discard_graph_attribute(Graph(G),Seq(tag1=value1,tag2=value2,..))
@@ -3871,9 +3871,9 @@ cdef class GiacMethods_base:
See also: 1/ get_graph_attribute 2/ set_graph_attribute 3/ list_graph_attributes
Ex1:discard_graph_attribute(cycle_graph(3),"name")
'''
- return GiacMethods['discard_graph_attribute'](self,*args)
+ return GiacMethods['discard_graph_attribute'](self, *args)
- def discard_vertex_attribute(self,*args):
+ def discard_vertex_attribute(self, *args):
r'''From Giac's documentation:
Help for discard_vertex_attribute:
discard_vertex_attribute(Graph(G),Vrtx(v),Seq(tag1=value1,tag2=value2,..))
@@ -3881,9 +3881,9 @@ cdef class GiacMethods_base:
See also: 1/ get_vertex_attribute 2/ set_vertex_attribute 3/ list_vertex_attributes
Ex1:discard_vertex_attribute(cycle_graph(3),1,"supply")
'''
- return GiacMethods['discard_vertex_attribute'](self,*args)
+ return GiacMethods['discard_vertex_attribute'](self, *args)
- def disjoint_union(self,*args):
+ def disjoint_union(self, *args):
r'''From Giac's documentation:
Help for disjoint_union:
disjoint_union(Seq(G1,G2,...))
@@ -3891,9 +3891,9 @@ cdef class GiacMethods_base:
See also: 1/ graph_join 2/ graph_union
Ex1:disjoint_union(is_connected(disjoint_union(cycle_graph(5),path_graph(4))))
'''
- return GiacMethods['disjoint_union'](self,*args)
+ return GiacMethods['disjoint_union'](self, *args)
- def display(self,*args):
+ def display(self, *args):
r'''From Giac's documentation:
Help for display:
display([GeoObj or legende],Intg)
@@ -3910,9 +3910,9 @@ cdef class GiacMethods_base:
Ex9:display(red);square(0,1);
Ex10:display(red+filled);square(0,1);
'''
- return GiacMethods['display'](self,*args)
+ return GiacMethods['display'](self, *args)
- def disque(self,*args):
+ def disque(self, *args):
r'''From Giac's documentation:
Help for disque:
disque(Real(r),[Real(a)],[Real(b)])
@@ -3923,9 +3923,9 @@ cdef class GiacMethods_base:
Ex3:disque(40,90)
Ex4:disque(40,10,100)
'''
- return GiacMethods['disque'](self,*args)
+ return GiacMethods['disque'](self, *args)
- def disque_centre(self,*args):
+ def disque_centre(self, *args):
r'''From Giac's documentation:
Help for disque_centre:
disque_centre(Real(r),[Real(a)],[Real(b)])
@@ -3936,9 +3936,9 @@ cdef class GiacMethods_base:
Ex3:disque_centre(40,90)
Ex4:disque_centre(40,10,100)
'''
- return GiacMethods['disque_centre'](self,*args)
+ return GiacMethods['disque_centre'](self, *args)
- def distance(self,*args):
+ def distance(self, *args):
r'''From Giac's documentation:
Help for distance:
distance((Pnt or Cplx),(Pnt or Cplx or Curve))
@@ -3948,9 +3948,9 @@ cdef class GiacMethods_base:
Ex2:distance(1+i,segment(1-i,i))
Ex3:distance(0,1+i)
'''
- return GiacMethods['distance'](self,*args)
+ return GiacMethods['distance'](self, *args)
- def distance2(self,*args):
+ def distance2(self, *args):
r'''From Giac's documentation:
Help for distance2:
distance2((Pnt or Cplx),(Pnt or Cplx or Curve))
@@ -3960,9 +3960,9 @@ cdef class GiacMethods_base:
Ex2:distance2(1+i,segment(1-i,i))
Ex3:distance2(0,1+i)
'''
- return GiacMethods['distance2'](self,*args)
+ return GiacMethods['distance2'](self, *args)
- def distanceat(self,*args):
+ def distanceat(self, *args):
r'''From Giac's documentation:
Help for distanceat:
distanceat(GeoObj(A),GeoObj(B),(Pnt or Cplx))
@@ -3971,9 +3971,9 @@ cdef class GiacMethods_base:
Ex1: A:=point(0);B:=point(1+i);distanceat(A,B,(1+i)/2)
Ex2: A:=point(0);s:=segment(1-i,i);distanceat(A,s,1)
'''
- return GiacMethods['distanceat'](self,*args)
+ return GiacMethods['distanceat'](self, *args)
- def distanceatraw(self,*args):
+ def distanceatraw(self, *args):
r'''From Giac's documentation:
Help for distanceatraw:
distanceatraw(GeoObj(A),GeoObj(B),(Pnt or Cplx(z0)))
@@ -3982,9 +3982,9 @@ cdef class GiacMethods_base:
Ex1: A:=point(0);B:=point(1+i);distanceatraw(A,B,(1+i)/2)
Ex2: A:=point(0);s:=segment(1-i,i);distanceatraw(A,s,1)
'''
- return GiacMethods['distanceatraw'](self,*args)
+ return GiacMethods['distanceatraw'](self, *args)
- def divergence(self,*args):
+ def divergence(self, *args):
r'''From Giac's documentation:
Help for divergence:
divergence(Lst(A,B,C),Lst(x,y,z))
@@ -3992,9 +3992,9 @@ cdef class GiacMethods_base:
See also: 1/ derive 2/ curl
Ex1:divergence([x^2+y,x+z+y,z^3+x^2],[x,y,z])
'''
- return GiacMethods['divergence'](self,*args)
+ return GiacMethods['divergence'](self, *args)
- def divide(self,*args):
+ def divide(self, *args):
r'''From Giac's documentation:
Help for divide:
divide((Vect or Poly),(Vect or Poly),[Var])
@@ -4005,9 +4005,9 @@ cdef class GiacMethods_base:
Ex3:divide(t^3+2t^2+3t+4,-t+2,t)
Ex4:divide(t^4-1,(t+1)^2,t)
'''
- return GiacMethods['divide'](self,*args)
+ return GiacMethods['divide'](self, *args)
- def divis(self,*args):
+ def divis(self, *args):
r'''From Giac's documentation:
Help for divis:
divis(Poly(P) or LstPoly)
@@ -4020,9 +4020,9 @@ cdef class GiacMethods_base:
Ex5:divis([x^4-1,t^2-1])
Ex6:divis(poly2symb([1,0,0,0,-1],x))
'''
- return GiacMethods['divis'](self,*args)
+ return GiacMethods['divis'](self, *args)
- def division_point(self,*args):
+ def division_point(self, *args):
r'''From Giac's documentation:
Help for division_point:
division_point(Pnt or Cplx(a),Pnt or Cplx(b),Cplx(k))
@@ -4031,9 +4031,9 @@ cdef class GiacMethods_base:
Ex1:division_point(i,2+i,3+i)
Ex2:division_point(i,2+i,3)
'''
- return GiacMethods['division_point'](self,*args)
+ return GiacMethods['division_point'](self, *args)
- def divisors(self,*args):
+ def divisors(self, *args):
r'''From Giac's documentation:
Help for divisors:
divisors(Intg(a) or LstIntg)
@@ -4042,9 +4042,9 @@ cdef class GiacMethods_base:
Ex1:divisors(36)
Ex2:divisors([36,49])
'''
- return GiacMethods['divisors'](self,*args)
+ return GiacMethods['divisors'](self, *args)
- def divmod(self,*args):
+ def divmod(self, *args):
r'''From Giac's documentation:
Help for divmod:
divmod(Intg(a),Intg(b))
@@ -4054,9 +4054,9 @@ cdef class GiacMethods_base:
Ex2:divmod(125,41)
Ex3:divmod(25+12*i,5+7*i)
'''
- return GiacMethods['divmod'](self,*args)
+ return GiacMethods['divmod'](self, *args)
- def divpc(self,*args):
+ def divpc(self, *args):
r'''From Giac's documentation:
Help for divpc:
divpc(Poly,Poly,Intg(n))
@@ -4064,9 +4064,9 @@ cdef class GiacMethods_base:
See also: 1/ series 2/ quorem
Ex1:divpc(x^4+x+2,x^2+1,5)
'''
- return GiacMethods['divpc'](self,*args)
+ return GiacMethods['divpc'](self, *args)
- def dnewton_solver(self,*args):
+ def dnewton_solver(self, *args):
r'''From Giac's documentation:
Help for dnewton_solver:
dnewton_solver(Opt)
@@ -4079,9 +4079,9 @@ cdef class GiacMethods_base:
Ex5: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
Ex6: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],newtonj_solver)
'''
- return GiacMethods['dnewton_solver'](self,*args)
+ return GiacMethods['dnewton_solver'](self, *args)
- def dodecahedron(self,*args):
+ def dodecahedron(self, *args):
r'''From Giac's documentation:
Help for dodecahedron:
dodecahedron(Pnt(A),Pnt(B),Pnt(C))
@@ -4090,9 +4090,9 @@ cdef class GiacMethods_base:
Ex1:dodecahedron([0,0,0],[0,2,sqrt(5)/2+3/2],[0,0,1])
Ex2:dodecahedron(evalf([0,0,0],[3,2,4],[1,1,0]))
'''
- return GiacMethods['dodecahedron'](self,*args)
+ return GiacMethods['dodecahedron'](self, *args)
- def domain(self,*args):
+ def domain(self, *args):
r'''From Giac's documentation:
Help for domain:
domain(Expr)
@@ -4100,9 +4100,9 @@ cdef class GiacMethods_base:
Ex1:domain(log(x+1))
Ex2:domain(log(x)+asin(x))
'''
- return GiacMethods['domain'](self,*args)
+ return GiacMethods['domain'](self, *args)
- def dot(self,*args):
+ def dot(self, *args):
r'''From Giac's documentation:
Help for dot:
dot(Vect(v1),Vect(v2))
@@ -4112,9 +4112,9 @@ cdef class GiacMethods_base:
Ex2:dot([3,2,4],[3,2,4])
Ex3:dot([[1,2],[3,4]],[[3,2],[4,5]])
'''
- return GiacMethods['dot'](self,*args)
+ return GiacMethods['dot'](self, *args)
- def dotP(self,*args):
+ def dotP(self, *args):
r'''From Giac's documentation:
Help for dotP:
dotP(Vect(v1),Vect(v2))
@@ -4124,9 +4124,9 @@ cdef class GiacMethods_base:
Ex2:dotP([3,2,4],[3,2,4])
Ex3:dotP([[1,2],[3,4]],[[3,2],[4,5]])
'''
- return GiacMethods['dotP'](self,*args)
+ return GiacMethods['dotP'](self, *args)
- def dot_paper(self,*args):
+ def dot_paper(self, *args):
r'''From Giac's documentation:
Help for dot_paper:
dot_paper(Real(ux),Real(uy),Real(t))
@@ -4135,9 +4135,9 @@ cdef class GiacMethods_base:
Ex2:dot_paper(1,pi/3,sqrt(3)/2,x=-1..4,y=-2..2)
Ex3:dot_paper(0.5,3*pi/4,0.5)
'''
- return GiacMethods['dot_paper'](self,*args)
+ return GiacMethods['dot_paper'](self, *args)
- def dotprod(self,*args):
+ def dotprod(self, *args):
r'''From Giac's documentation:
Help for dotprod:
dotprod(Vect(v1),Vect(v2))
@@ -4147,9 +4147,9 @@ cdef class GiacMethods_base:
Ex2:dotprod([3,2,4],[3,2,4])
Ex3:dotprod([[1,2],[3,4]],[[3,2],[4,5]])
'''
- return GiacMethods['dotprod'](self,*args)
+ return GiacMethods['dotprod'](self, *args)
- def draw_arc(self,*args):
+ def draw_arc(self, *args):
r'''From Giac's documentation:
Help for draw_arc:
draw_arc(Intg(x),Intg(y),Intg(rx),Intg(ry),Real(theta1),Real(theta2),Intg(col))
@@ -4157,9 +4157,9 @@ cdef class GiacMethods_base:
See also: 1/ draw_pixel 2/ draw_circle
Ex1: clear(); draw_arc(100,80,40,20,0,pi,blue); show_pixels();
'''
- return GiacMethods['draw_arc'](self,*args)
+ return GiacMethods['draw_arc'](self, *args)
- def draw_circle(self,*args):
+ def draw_circle(self, *args):
r'''From Giac's documentation:
Help for draw_circle:
draw_circle(Intg(x),Intg(y),Intg(r),Intg(col))
@@ -4168,9 +4168,9 @@ cdef class GiacMethods_base:
Ex1: clear(); draw_circle(100,60,20,blue); show_pixels();
Ex2: clear(); draw_circle(100,60,20,blue+filled); show_pixels();
'''
- return GiacMethods['draw_circle'](self,*args)
+ return GiacMethods['draw_circle'](self, *args)
- def draw_graph(self,*args):
+ def draw_graph(self, *args):
r'''From Giac's documentation:
Help for draw_graph:
draw_graph(Graph(G),[opts])
@@ -4182,9 +4182,9 @@ cdef class GiacMethods_base:
Ex4:draw_graph(sierpinski_graph(5,3,at_triangle))
Ex5:draw_graph(graph("soccerball"))
'''
- return GiacMethods['draw_graph'](self,*args)
+ return GiacMethods['draw_graph'](self, *args)
- def draw_line(self,*args):
+ def draw_line(self, *args):
r'''From Giac's documentation:
Help for draw_line:
draw_line(Intg(x1),Intg(y1),Intg(x2),Intg(y2),Intg(col))
@@ -4192,9 +4192,9 @@ cdef class GiacMethods_base:
See also: 1/ draw_pixel 2/ draw_rectangle 3/ draw_polygon
Ex1: clear(); draw_line(10,10,60,60,blue); show_pixels();
'''
- return GiacMethods['draw_line'](self,*args)
+ return GiacMethods['draw_line'](self, *args)
- def draw_pixel(self,*args):
+ def draw_pixel(self, *args):
r'''From Giac's documentation:
Help for draw_pixel:
draw_pixel(Intg(x),Intg(y),Intg(col))
@@ -4202,9 +4202,9 @@ cdef class GiacMethods_base:
See also: 1/ clear 2/ show_pixels 3/ draw_line 4/ draw_rectangle 5/ draw_polygon
Ex1: clear(); set_pixel(4); draw_pixel(1,2,red); show_pixels();
'''
- return GiacMethods['draw_pixel'](self,*args)
+ return GiacMethods['draw_pixel'](self, *args)
- def draw_polygon(self,*args):
+ def draw_polygon(self, *args):
r'''From Giac's documentation:
Help for draw_polygon:
draw_polygon(Lst(l),Intg(col))
@@ -4213,9 +4213,9 @@ cdef class GiacMethods_base:
Ex1: clear(); draw_polygon([[50,30],[100,10],[20,70]],red); show_pixels();
Ex2: clear(); draw_polygon([[50,30],[100,10],[20,70]],red+filled); show_pixels();
'''
- return GiacMethods['draw_polygon'](self,*args)
+ return GiacMethods['draw_polygon'](self, *args)
- def draw_rectangle(self,*args):
+ def draw_rectangle(self, *args):
r'''From Giac's documentation:
Help for draw_rectangle:
draw_rectangle(Intg(x),Intg(y),Intg(w),Intg(h),Intg(col))
@@ -4224,9 +4224,9 @@ cdef class GiacMethods_base:
Ex1: clear(); draw_rectangle(10,20,30,40,red); show_pixels();
Ex2: clear(); draw_rectangle(10,20,30,40,red+filled); show_pixels();
'''
- return GiacMethods['draw_rectangle'](self,*args)
+ return GiacMethods['draw_rectangle'](self, *args)
- def droit(self,*args):
+ def droit(self, *args):
r'''From Giac's documentation:
Help for droit:
droit(Equal(a=b) or Interval(a..b) or Str,Intg)
@@ -4237,9 +4237,9 @@ cdef class GiacMethods_base:
Ex3:droit(1..5)
Ex4:droit("abcdefg",3)
'''
- return GiacMethods['droit'](self,*args)
+ return GiacMethods['droit'](self, *args)
- def droite_tangente(self,*args):
+ def droite_tangente(self, *args):
r'''From Giac's documentation:
Help for droite_tangente:
droite_tangente(Expr(f(x)),[Var],Expr(a))
@@ -4250,9 +4250,9 @@ cdef class GiacMethods_base:
Ex3:droite_tangente(sin(t),t,pi/4)
Ex4:droite_tangente(x^2-x,1)
'''
- return GiacMethods['droite_tangente'](self,*args)
+ return GiacMethods['droite_tangente'](self, *args)
- def dsolve(self,*args):
+ def dsolve(self, *args):
r'''From Giac's documentation:
Help for dsolve:
dsolve(Eq,[TimeVar],FncVar)
@@ -4275,9 +4275,9 @@ cdef class GiacMethods_base:
Ex15:dsolve([z'=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)
Ex16:dsolve([z'=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))
'''
- return GiacMethods['dsolve'](self,*args)
+ return GiacMethods['dsolve'](self, *args)
- def duration(self,*args):
+ def duration(self, *args):
r'''From Giac's documentation:
Help for duration:
duration(Lst(clip))
@@ -4285,9 +4285,9 @@ cdef class GiacMethods_base:
See also: 1/ bit_depth 2/ channels 3/ channel_data 4/ samplerate
Ex1:duration(readwav("/some/file"))
'''
- return GiacMethods['duration'](self,*args)
+ return GiacMethods['duration'](self, *args)
- def e(self,*args):
+ def e(self, *args):
r'''From Giac's documentation:
Help for e:
e()
@@ -4295,9 +4295,9 @@ cdef class GiacMethods_base:
See also: 1/ i 2/ pi
Ex1: evalf(e)
'''
- return GiacMethods['e'](self,*args)
+ return GiacMethods['e'](self, *args)
- def e2r(self,*args):
+ def e2r(self, *args):
r'''From Giac's documentation:
Help for e2r:
e2r(Expr, LstVar or [Var])
@@ -4310,9 +4310,9 @@ cdef class GiacMethods_base:
Ex5:e2r(-x^4+x*3*y+2+y^2*z,[x,y,z])
Ex6:e2r(-x^4+x*3*y+2+y^2*z,[x,y,z])
'''
- return GiacMethods['e2r'](self,*args)
+ return GiacMethods['e2r'](self, *args)
- def ecart_type(self,*args):
+ def ecart_type(self, *args):
r'''From Giac's documentation:
Help for ecart_type:
ecart_type(Lst||Mtrx,[Lst])
@@ -4322,9 +4322,9 @@ cdef class GiacMethods_base:
Ex2:ecart_type([1,2,3],[1,2,1])
Ex3:ecart_type([[1,2,3],[5,6,7]])
'''
- return GiacMethods['ecart_type'](self,*args)
+ return GiacMethods['ecart_type'](self, *args)
- def ecart_type_population(self,*args):
+ def ecart_type_population(self, *args):
r'''From Giac's documentation:
Help for ecart_type_population:
ecart_type_population(Lst||Mtrx,[Lst])
@@ -4334,18 +4334,18 @@ cdef class GiacMethods_base:
Ex2:ecart_type_population([1,2,3],[1,2,1])
Ex3:ecart_type_population([[1,2,3],[5,6,7]])
'''
- return GiacMethods['ecart_type_population'](self,*args)
+ return GiacMethods['ecart_type_population'](self, *args)
- def ecm_factor(self,*args):
+ def ecm_factor(self, *args):
r'''From Giac's documentation:
Help for ecm_factor:
ecm_factor(Intg(a),[Intg(B1)])
Factorization of integer n by the Elliptic Curve Method algorithm, B1 smoothness optional parameter.
Ex1:ecm_factor(1000000000000000003000000000000000000000000000000000031000000000000000093)
'''
- return GiacMethods['ecm_factor'](self,*args)
+ return GiacMethods['ecm_factor'](self, *args)
- def edge_connectivity(self,*args):
+ def edge_connectivity(self, *args):
r'''From Giac's documentation:
Help for edge_connectivity:
edge_connectivity(graph(G))
@@ -4355,9 +4355,9 @@ cdef class GiacMethods_base:
Ex2:edge_connectivity(graph("clebsch"))
Ex3:edge_connectivity(complete_graph(5))
'''
- return GiacMethods['edge_connectivity'](self,*args)
+ return GiacMethods['edge_connectivity'](self, *args)
- def edges(self,*args):
+ def edges(self, *args):
r'''From Giac's documentation:
Help for edges:
edges(Graph(G),[weights])
@@ -4365,9 +4365,9 @@ cdef class GiacMethods_base:
See also: 1/ add_edge 2/ incident_edges 3/ set_edge_weight 4/ get_edge_weight
Ex1:edges(complete_graph(4))
'''
- return GiacMethods['edges'](self,*args)
+ return GiacMethods['edges'](self, *args)
- def egcd(self,*args):
+ def egcd(self, *args):
r'''From Giac's documentation:
Help for egcd:
egcd((Poly or Lst),(Poly or Lst),[Var])
@@ -4378,9 +4378,9 @@ cdef class GiacMethods_base:
Ex3:egcd([1,-2,1],[1,0,0,-1])
Ex4:egcd([1,-2,1],[1,-1,2])
'''
- return GiacMethods['egcd'](self,*args)
+ return GiacMethods['egcd'](self, *args)
- def egv(self,*args):
+ def egv(self, *args):
r'''From Giac's documentation:
Help for egv:
egv(Mtrx)
@@ -4389,9 +4389,9 @@ cdef class GiacMethods_base:
Ex1:egv([[-2,-2,1],[-2,1,-2],[1,-2,-2]])
Ex2:egv([[1,1,3],[1,3,1],[3,1,1]])
'''
- return GiacMethods['egv'](self,*args)
+ return GiacMethods['egv'](self, *args)
- def egvl(self,*args):
+ def egvl(self, *args):
r'''From Giac's documentation:
Help for egvl:
egvl(Mtrx(A))
@@ -4401,9 +4401,9 @@ cdef class GiacMethods_base:
Ex2:egvl([[-2,-2,1],[-2,1,-2],[1,-2,-2]])
Ex3:egvl([[1,1,3],[1,3,1],[3,1,1]])
'''
- return GiacMethods['egvl'](self,*args)
+ return GiacMethods['egvl'](self, *args)
- def eigVc(self,*args):
+ def eigVc(self, *args):
r'''From Giac's documentation:
Help for eigVc:
eigVc(Mtrx)
@@ -4412,9 +4412,9 @@ cdef class GiacMethods_base:
Ex1:eigVc([[-2,-2,1],[-2,1,-2],[1,-2,-2]])
Ex2:eigVc([[1,1,3],[1,3,1],[3,1,1]])
'''
- return GiacMethods['eigVc'](self,*args)
+ return GiacMethods['eigVc'](self, *args)
- def eigVl(self,*args):
+ def eigVl(self, *args):
r'''From Giac's documentation:
Help for eigVl:
eigVl(Mtrx(A))
@@ -4424,9 +4424,9 @@ cdef class GiacMethods_base:
Ex2:eigVl([[-2,-2,1],[-2,1,-2],[1,-2,-2]])
Ex3:eigVl([[1,1,3],[1,3,1],[3,1,1]])
'''
- return GiacMethods['eigVl'](self,*args)
+ return GiacMethods['eigVl'](self, *args)
- def eigenvals(self,*args):
+ def eigenvals(self, *args):
r'''From Giac's documentation:
Help for eigenvals:
eigenvals(Mtrx)
@@ -4436,9 +4436,9 @@ cdef class GiacMethods_base:
Ex2:eigenvals([[1,1,3],[1,3,1],[3,1,1]])
Ex3:eigenvals([[4,1],[-4,0]])
'''
- return GiacMethods['eigenvals'](self,*args)
+ return GiacMethods['eigenvals'](self, *args)
- def eigenvalues(self,*args):
+ def eigenvalues(self, *args):
r'''From Giac's documentation:
Help for eigenvalues:
eigenvalues(Mtrx)
@@ -4448,9 +4448,9 @@ cdef class GiacMethods_base:
Ex2:eigenvalues([[1,1,3],[1,3,1],[3,1,1]])
Ex3:eigenvalues([[4,1],[-4,0]])
'''
- return GiacMethods['eigenvalues'](self,*args)
+ return GiacMethods['eigenvalues'](self, *args)
- def eigenvectors(self,*args):
+ def eigenvectors(self, *args):
r'''From Giac's documentation:
Help for eigenvectors:
eigenvectors(Mtrx)
@@ -4459,9 +4459,9 @@ cdef class GiacMethods_base:
Ex1:eigenvectors([[-2,-2,1],[-2,1,-2],[1,-2,-2]])
Ex2:eigenvectors([[1,1,3],[1,3,1],[3,1,1]])
'''
- return GiacMethods['eigenvectors'](self,*args)
+ return GiacMethods['eigenvectors'](self, *args)
- def eigenvects(self,*args):
+ def eigenvects(self, *args):
r'''From Giac's documentation:
Help for eigenvects:
eigenvects(Mtrx)
@@ -4470,9 +4470,9 @@ cdef class GiacMethods_base:
Ex1:eigenvects([[-2,-2,1],[-2,1,-2],[1,-2,-2]])
Ex2:eigenvects([[1,1,3],[1,3,1],[3,1,1]])
'''
- return GiacMethods['eigenvects'](self,*args)
+ return GiacMethods['eigenvects'](self, *args)
- def element(self,*args):
+ def element(self, *args):
r'''From Giac's documentation:
Help for element:
element((Curve or Real_interval),[Val])
@@ -4485,9 +4485,9 @@ cdef class GiacMethods_base:
Ex5: M:=element(circle(i,1))
Ex6: N:=element(circle(i,1),pi/2)
'''
- return GiacMethods['element'](self,*args)
+ return GiacMethods['element'](self, *args)
- def eliminate(self,*args):
+ def eliminate(self, *args):
r'''From Giac's documentation:
Help for eliminate:
eliminate(LstEq(eqs),LstVar(vars))
@@ -4495,9 +4495,9 @@ cdef class GiacMethods_base:
Ex1:eliminate([x=v0*t,y=y0-g*t^2],t)
Ex2:eliminate([x+y+z+t-2,x*y*t=1,x^2+t^2=z^2],[x,z])
'''
- return GiacMethods['eliminate'](self,*args)
+ return GiacMethods['eliminate'](self, *args)
- def ellipse(self,*args):
+ def ellipse(self, *args):
r'''From Giac's documentation:
Help for ellipse:
ellipse(Pnt(F1),Pnt(F2),(Pnt(M) or Real(a)))
@@ -4509,9 +4509,9 @@ cdef class GiacMethods_base:
Ex4:ellipse(point(-1,0,0),point(1,0,0),point(1,1,1))
Ex5:ellipse(x^2+2y^2-y-2)
'''
- return GiacMethods['ellipse'](self,*args)
+ return GiacMethods['ellipse'](self, *args)
- def entry(self,*args):
+ def entry(self, *args):
r'''From Giac's documentation:
Help for entry:
entry(Intg(n))
@@ -4521,9 +4521,9 @@ cdef class GiacMethods_base:
Ex2:entry(2)
Ex3:entry(-2)
'''
- return GiacMethods['entry'](self,*args)
+ return GiacMethods['entry'](self, *args)
- def envelope(self,*args):
+ def envelope(self, *args):
r'''From Giac's documentation:
Help for envelope:
envelope(Expr(Xpr),Var(t)||[x,y,t])
@@ -4532,9 +4532,9 @@ cdef class GiacMethods_base:
Ex1:envelope(y+x*tan(t)-2*sin(t),t)
Ex2:envelope(v+u*tan(t)-3*sin(t),[u,v,t])
'''
- return GiacMethods['envelope'](self,*args)
+ return GiacMethods['envelope'](self, *args)
- def epsilon(self,*args):
+ def epsilon(self, *args):
r'''From Giac's documentation:
Help for epsilon:
epsilon(NULL)
@@ -4542,9 +4542,9 @@ cdef class GiacMethods_base:
See also: 1/ epsilon2zero
Ex1:epsilon()
'''
- return GiacMethods['epsilon'](self,*args)
+ return GiacMethods['epsilon'](self, *args)
- def epsilon2zero(self,*args):
+ def epsilon2zero(self, *args):
r'''From Giac's documentation:
Help for epsilon2zero:
epsilon2zero(Expr)
@@ -4552,9 +4552,9 @@ cdef class GiacMethods_base:
See also: 1/ evalf
Ex1:epsilon2zero(1e-13+x+5)
'''
- return GiacMethods['epsilon2zero'](self,*args)
+ return GiacMethods['epsilon2zero'](self, *args)
- def equal(self,*args):
+ def equal(self, *args):
r'''From Giac's documentation:
Help for equal:
equal(Expr,Expr)
@@ -4564,9 +4564,9 @@ cdef class GiacMethods_base:
Ex2:equal(2*x,4)
Ex3:equal(x^2-3x+2,0)
'''
- return GiacMethods['equal'](self,*args)
+ return GiacMethods['equal'](self, *args)
- def equal2diff(self,*args):
+ def equal2diff(self, *args):
r'''From Giac's documentation:
Help for equal2diff:
equal2diff(Equal)
@@ -4575,9 +4575,9 @@ cdef class GiacMethods_base:
Ex1:equal2diff(x=2)
Ex2:equal2diff(equal(x,2))
'''
- return GiacMethods['equal2diff'](self,*args)
+ return GiacMethods['equal2diff'](self, *args)
- def equal2list(self,*args):
+ def equal2list(self, *args):
r'''From Giac's documentation:
Help for equal2list:
equal2list(Equal)
@@ -4586,9 +4586,9 @@ cdef class GiacMethods_base:
Ex1:equal2list(x=2)
Ex2:equal2list(equal(x,2))
'''
- return GiacMethods['equal2list'](self,*args)
+ return GiacMethods['equal2list'](self, *args)
- def equation(self,*args):
+ def equation(self, *args):
r'''From Giac's documentation:
Help for equation:
equation(GeoObj, VectParam)
@@ -4596,9 +4596,9 @@ cdef class GiacMethods_base:
See also: 1/ parameq
Ex1:equation(line(1-i,i),[x,y])
'''
- return GiacMethods['equation'](self,*args)
+ return GiacMethods['equation'](self, *args)
- def equilateral_triangle(self,*args):
+ def equilateral_triangle(self, *args):
r'''From Giac's documentation:
Help for equilateral_triangle:
equilateral_triangle((Pnt(A) or Cplx),(Pnt(B) or Cplx),[Pnt(P)],[Var(C)])
@@ -4609,9 +4609,9 @@ cdef class GiacMethods_base:
Ex3:equilateral_triangle(point(0,0,0),point(3,3,3),point(0,0,3))
Ex4:equilateral_triangle(point(0,0,0),point(3,3,3),point(0,0,3),C)
'''
- return GiacMethods['equilateral_triangle'](self,*args)
+ return GiacMethods['equilateral_triangle'](self, *args)
- def erf(self,*args):
+ def erf(self, *args):
r'''From Giac's documentation:
Help for erf:
erf(Real(x0))
@@ -4620,9 +4620,9 @@ cdef class GiacMethods_base:
Ex1:erf(1)
Ex2:erf(1/(sqrt(2)))*1/2
'''
- return GiacMethods['erf'](self,*args)
+ return GiacMethods['erf'](self, *args)
- def erfc(self,*args):
+ def erfc(self, *args):
r'''From Giac's documentation:
Help for erfc:
erfc(Real(x0))
@@ -4631,9 +4631,9 @@ cdef class GiacMethods_base:
Ex1:erfc(1)
Ex2:erfc(1/(sqrt(2)))*1/2
'''
- return GiacMethods['erfc'](self,*args)
+ return GiacMethods['erfc'](self, *args)
- def error(self,*args):
+ def error(self, *args):
r'''From Giac's documentation:
Help for error:
error(Str)
@@ -4642,9 +4642,9 @@ cdef class GiacMethods_base:
Ex1:error("Argument should be integer")
Ex2:error("je provoque une erreur")
'''
- return GiacMethods['error'](self,*args)
+ return GiacMethods['error'](self, *args)
- def est_permu(self,*args):
+ def est_permu(self, *args):
r'''From Giac's documentation:
Help for est_permu:
est_permu(Lst)
@@ -4653,9 +4653,9 @@ cdef class GiacMethods_base:
Ex1:est_permu([4,2,3,1])
Ex2:est_permu([4,2,3,1,0])
'''
- return GiacMethods['est_permu'](self,*args)
+ return GiacMethods['est_permu'](self, *args)
- def euler(self,*args):
+ def euler(self, *args):
r'''From Giac's documentation:
Help for euler:
euler(Intg(n))
@@ -4664,18 +4664,18 @@ cdef class GiacMethods_base:
Ex1:euler(11)
Ex2:euler(6)
'''
- return GiacMethods['euler'](self,*args)
+ return GiacMethods['euler'](self, *args)
- def euler_gamma(self,*args):
+ def euler_gamma(self, *args):
r'''From Giac's documentation:
Help for euler_gamma:
euler_gamma()
Euler's constant=euler_gamma=limit(sum(1/k,k,1,n)-ln(n),n,+infinity).
Ex1: evalf(euler_gamma)
'''
- return GiacMethods['euler_gamma'](self,*args)
+ return GiacMethods['euler_gamma'](self, *args)
- def euler_lagrange(self,*args):
+ def euler_lagrange(self, *args):
r'''From Giac's documentation:
Help for euler_lagrange:
euler_lagrange(Expr(f),[(Var(x),[Var||Lst(y)]) || y(x) || Lst(y(x))])
@@ -4685,9 +4685,9 @@ cdef class GiacMethods_base:
Ex2:euler_lagrange(sqrt(x'^2+y'^2),[x(t),y(t)])
Ex3: assume(y>=0):; euler_lagrange(sqrt((1+y'^2)/y),t,y)
'''
- return GiacMethods['euler_lagrange'](self,*args)
+ return GiacMethods['euler_lagrange'](self, *args)
- def eval_level(self,*args):
+ def eval_level(self, *args):
r'''From Giac's documentation:
Help for eval_level:
eval_level([Intg(n)])
@@ -4698,9 +4698,9 @@ cdef class GiacMethods_base:
Ex4: purge(a,b,c);eval_level(2);a:=b+1; b:=c+1;c:=3;
Ex5: purge(a,b,c);eval_level(3);a:=b+1; b:=c+1;c:=3;
'''
- return GiacMethods['eval_level'](self,*args)
+ return GiacMethods['eval_level'](self, *args)
- def evala(self,*args):
+ def evala(self, *args):
r'''From Giac's documentation:
Help for evala:
evala(Expr)
@@ -4710,9 +4710,9 @@ cdef class GiacMethods_base:
Ex2:evala(2*x*2)
Ex3:evala((2*x+1)^2)
'''
- return GiacMethods['evala'](self,*args)
+ return GiacMethods['evala'](self, *args)
- def evalb(self,*args):
+ def evalb(self, *args):
r'''From Giac's documentation:
Help for evalb:
evalb(Expr)
@@ -4721,9 +4721,9 @@ cdef class GiacMethods_base:
Ex1:evalb(a==2)
Ex2:evalb(sqrt(2)+pi>a)
'''
- return GiacMethods['evalb'](self,*args)
+ return GiacMethods['evalb'](self, *args)
- def evalc(self,*args):
+ def evalc(self, *args):
r'''From Giac's documentation:
Help for evalc:
evalc(Expr)
@@ -4732,9 +4732,9 @@ cdef class GiacMethods_base:
Ex1:evalc(-3+4*i+exp(i))
Ex2:evalc(1/(x+y*i))
'''
- return GiacMethods['evalc'](self,*args)
+ return GiacMethods['evalc'](self, *args)
- def evalf(self,*args):
+ def evalf(self, *args):
r'''From Giac's documentation:
Help for evalf:
evalf(Expr,[Int])
@@ -4747,9 +4747,9 @@ cdef class GiacMethods_base:
Ex5:evalf(sqrt(2)+pi)
Ex6:evalf(sqrt(2)+pi,30)
'''
- return GiacMethods['evalf'](self,*args)
+ return GiacMethods['evalf'](self, *args)
- def evalm(self,*args):
+ def evalm(self, *args):
r'''From Giac's documentation:
Help for evalm:
evalm(Expr)
@@ -4757,9 +4757,9 @@ cdef class GiacMethods_base:
See also: 1/ evalf
Ex1:evalm(2*sin(pi))
'''
- return GiacMethods['evalm'](self,*args)
+ return GiacMethods['evalm'](self, *args)
- def even(self,*args):
+ def even(self, *args):
r'''From Giac's documentation:
Help for even:
even(Intg(n))
@@ -4768,9 +4768,9 @@ cdef class GiacMethods_base:
Ex1:even(6)
Ex2:even(1251)
'''
- return GiacMethods['even'](self,*args)
+ return GiacMethods['even'](self, *args)
- def evolute(self,*args):
+ def evolute(self, *args):
r'''From Giac's documentation:
Help for evolute:
evolute(Curve)
@@ -4780,9 +4780,9 @@ cdef class GiacMethods_base:
Ex2:evolute([t,t^2],t)
Ex3:evolute([3*exp(t/2)*cos(t),3*exp(t/2)*sin(t)],t)
'''
- return GiacMethods['evolute'](self,*args)
+ return GiacMethods['evolute'](self, *args)
- def exact(self,*args):
+ def exact(self, *args):
r'''From Giac's documentation:
Help for exact:
exact(Expr)
@@ -4793,9 +4793,9 @@ cdef class GiacMethods_base:
Ex3:exact(1.4141)
Ex4:exact(0.156381102937)
'''
- return GiacMethods['exact'](self,*args)
+ return GiacMethods['exact'](self, *args)
- def exbisector(self,*args):
+ def exbisector(self, *args):
r'''From Giac's documentation:
Help for exbisector:
exbisector((Pnt(A) or Cplx),(Pnt(B) or Cplx),(Pnt(C) or Cplx))
@@ -4803,9 +4803,9 @@ cdef class GiacMethods_base:
See also: 1/ angle 2/ bisector
Ex1:exbisector(0,1,i)
'''
- return GiacMethods['exbisector'](self,*args)
+ return GiacMethods['exbisector'](self, *args)
- def excircle(self,*args):
+ def excircle(self, *args):
r'''From Giac's documentation:
Help for excircle:
excircle((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -4813,9 +4813,9 @@ cdef class GiacMethods_base:
See also: 1/ incircle 2/ circumcircle
Ex1:excircle(0,1,1+i)
'''
- return GiacMethods['excircle'](self,*args)
+ return GiacMethods['excircle'](self, *args)
- def execute(self,*args):
+ def execute(self, *args):
r'''From Giac's documentation:
Help for execute:
execute(Str)
@@ -4826,9 +4826,9 @@ cdef class GiacMethods_base:
Ex3:execute("0123")
Ex4:execute(sin,x)
'''
- return GiacMethods['execute'](self,*args)
+ return GiacMethods['execute'](self, *args)
- def exp(self,*args):
+ def exp(self, *args):
r'''From Giac's documentation:
Help for exp:
exp(Expr or Opt)
@@ -4837,9 +4837,9 @@ cdef class GiacMethods_base:
Ex1:exp(0)
Ex2: convert(cos(x),exp)
'''
- return GiacMethods['exp'](self,*args)
+ return GiacMethods['exp'](self, *args)
- def exp2list(self,*args):
+ def exp2list(self, *args):
r'''From Giac's documentation:
Help for exp2list:
exp2list(Expr)
@@ -4848,9 +4848,9 @@ cdef class GiacMethods_base:
Ex1:exp2list((x=2) or (x=0))
Ex2:exp2list((x=3 and y=9) or (x=-1 and y=1) )
'''
- return GiacMethods['exp2list'](self,*args)
+ return GiacMethods['exp2list'](self, *args)
- def exp2pow(self,*args):
+ def exp2pow(self, *args):
r'''From Giac's documentation:
Help for exp2pow:
exp2pow(Expr)
@@ -4859,9 +4859,9 @@ cdef class GiacMethods_base:
Ex1:exp2pow(exp(3*ln(x)))
Ex2:exp2pow(exp(x*ln(x)))
'''
- return GiacMethods['exp2pow'](self,*args)
+ return GiacMethods['exp2pow'](self, *args)
- def exp2trig(self,*args):
+ def exp2trig(self, *args):
r'''From Giac's documentation:
Help for exp2trig:
exp2trig(Expr)
@@ -4870,9 +4870,9 @@ cdef class GiacMethods_base:
Ex1:exp2trig(exp(i*x))
Ex2:exp2trig(exp(-i*x))
'''
- return GiacMethods['exp2trig'](self,*args)
+ return GiacMethods['exp2trig'](self, *args)
- def expand(self,*args):
+ def expand(self, *args):
r'''From Giac's documentation:
Help for expand:
expand(Expr)
@@ -4884,9 +4884,9 @@ cdef class GiacMethods_base:
Ex4:expand((x+3)^4)
Ex5:expand((2*x-2*1)*(x^2-3*x+2)+(x^2-2*x+3)*(2*x-3*1))
'''
- return GiacMethods['expand'](self,*args)
+ return GiacMethods['expand'](self, *args)
- def expexpand(self,*args):
+ def expexpand(self, *args):
r'''From Giac's documentation:
Help for expexpand:
expexpand(Expr)
@@ -4894,9 +4894,9 @@ cdef class GiacMethods_base:
See also: 1/ texpand 2/ lnexpand 3/ trigexpand
Ex1:expexpand(exp(3*x))
'''
- return GiacMethods['expexpand'](self,*args)
+ return GiacMethods['expexpand'](self, *args)
- def expln(self,*args):
+ def expln(self, *args):
r'''From Giac's documentation:
Help for expln:
expln(Opt)
@@ -4904,9 +4904,9 @@ cdef class GiacMethods_base:
See also: 1/ exp 2/ ln 3/ convert 4/ trig2exp
Ex1: convert(cos(x),expln)
'''
- return GiacMethods['expln'](self,*args)
+ return GiacMethods['expln'](self, *args)
- def exponential(self,*args):
+ def exponential(self, *args):
r'''From Giac's documentation:
Help for exponential:
exponential(Real(lambda),Real(x))
@@ -4917,9 +4917,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,exponential,1.2)
Ex4: ranm(4,3,exponential,1.2)
'''
- return GiacMethods['exponential'](self,*args)
+ return GiacMethods['exponential'](self, *args)
- def exponential_cdf(self,*args):
+ def exponential_cdf(self, *args):
r'''From Giac's documentation:
Help for exponential_cdf:
exponential_cdf(Real(lambda),Real(x0),[Real(y0)])
@@ -4928,9 +4928,9 @@ cdef class GiacMethods_base:
Ex1:exponential_cdf(4.2,2.1)
Ex2:exponential_cdf(4.2,2.1,3.2)
'''
- return GiacMethods['exponential_cdf'](self,*args)
+ return GiacMethods['exponential_cdf'](self, *args)
- def exponential_icdf(self,*args):
+ def exponential_icdf(self, *args):
r'''From Giac's documentation:
Help for exponential_icdf:
exponential_icdf(Real(lambda),Real(x0),Real(p))
@@ -4939,9 +4939,9 @@ cdef class GiacMethods_base:
Ex1:exponential_icdf(4.2,0.95)
Ex2:exponential_icdf(4.2,0.6)
'''
- return GiacMethods['exponential_icdf'](self,*args)
+ return GiacMethods['exponential_icdf'](self, *args)
- def exponential_regression(self,*args):
+ def exponential_regression(self, *args):
r'''From Giac's documentation:
Help for exponential_regression:
exponential_regression(Lst||Mtrx(A),[Lst])
@@ -4950,9 +4950,9 @@ cdef class GiacMethods_base:
Ex1:exponential_regression([[1.0,2.0],[0.0,1.0],[4.0,7.0]])
Ex2:exponential_regression([1.0,0.0,4.0],[2.0,1.0,7.0])
'''
- return GiacMethods['exponential_regression'](self,*args)
+ return GiacMethods['exponential_regression'](self, *args)
- def exponential_regression_plot(self,*args):
+ def exponential_regression_plot(self, *args):
r'''From Giac's documentation:
Help for exponential_regression_plot:
exponential_regression_plot(Lst||Mtrx(A),[Lst])
@@ -4961,9 +4961,9 @@ cdef class GiacMethods_base:
Ex1:exponential_regression_plot([[1.0,2.0],[0.0,1.0],[4.0,7.0]])
Ex2:exponential_regression_plot([1.0,0.0,4.0],[2.0,1.0,7.0])
'''
- return GiacMethods['exponential_regression_plot'](self,*args)
+ return GiacMethods['exponential_regression_plot'](self, *args)
- def exponentiald(self,*args):
+ def exponentiald(self, *args):
r'''From Giac's documentation:
Help for exponentiald:
exponentiald(Real(lambda),Real(x))
@@ -4974,9 +4974,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,exponential,1.2)
Ex4: ranm(4,3,exponential,1.2)
'''
- return GiacMethods['exponentiald'](self,*args)
+ return GiacMethods['exponentiald'](self, *args)
- def exponentiald_cdf(self,*args):
+ def exponentiald_cdf(self, *args):
r'''From Giac's documentation:
Help for exponentiald_cdf:
exponentiald_cdf(Real(lambda),Real(x0),[Real(y0)])
@@ -4985,9 +4985,9 @@ cdef class GiacMethods_base:
Ex1:exponentiald_cdf(4.2,2.1)
Ex2:exponentiald_cdf(4.2,2.1,3.2)
'''
- return GiacMethods['exponentiald_cdf'](self,*args)
+ return GiacMethods['exponentiald_cdf'](self, *args)
- def exponentiald_icdf(self,*args):
+ def exponentiald_icdf(self, *args):
r'''From Giac's documentation:
Help for exponentiald_icdf:
exponentiald_icdf(Real(lambda),Real(x0),Real(p))
@@ -4996,9 +4996,9 @@ cdef class GiacMethods_base:
Ex1:exponentiald_icdf(4.2,0.95)
Ex2:exponentiald_icdf(4.2,0.6)
'''
- return GiacMethods['exponentiald_icdf'](self,*args)
+ return GiacMethods['exponentiald_icdf'](self, *args)
- def export_graph(self,*args):
+ def export_graph(self, *args):
r'''From Giac's documentation:
Help for export_graph:
export_graph(Graph(G),Str("path/to/graphname"))
@@ -5006,9 +5006,9 @@ cdef class GiacMethods_base:
See also: 1/ import_graph
Ex1:export_graph(complete_graph(5),"K5")
'''
- return GiacMethods['export_graph'](self,*args)
+ return GiacMethods['export_graph'](self, *args)
- def export_mathml(self,*args):
+ def export_mathml(self, *args):
r'''From Giac's documentation:
Help for export_mathml:
export_mathml(Expr,[display||content])
@@ -5018,9 +5018,9 @@ cdef class GiacMethods_base:
Ex2:export_mathml(a+2*b,display)
Ex3:export_mathml(a+2*b,content)
'''
- return GiacMethods['export_mathml'](self,*args)
+ return GiacMethods['export_mathml'](self, *args)
- def expovariate(self,*args):
+ def expovariate(self, *args):
r'''From Giac's documentation:
Help for expovariate:
expovariate(Real(a))
@@ -5029,9 +5029,9 @@ cdef class GiacMethods_base:
Ex1:expovariate(1)
Ex2:expovariate(2)
'''
- return GiacMethods['expovariate'](self,*args)
+ return GiacMethods['expovariate'](self, *args)
- def expr(self,*args):
+ def expr(self, *args):
r'''From Giac's documentation:
Help for expr:
expr(Str)
@@ -5042,9 +5042,9 @@ cdef class GiacMethods_base:
Ex3:expr("0123")
Ex4:expr(sin,x)
'''
- return GiacMethods['expr'](self,*args)
+ return GiacMethods['expr'](self, *args)
- def extend(self,*args):
+ def extend(self, *args):
r'''From Giac's documentation:
Help for extend:
extend(Lst,Lst||Seq,Seq||Str,Str||Mtrx,Mtrx)
@@ -5056,9 +5056,9 @@ cdef class GiacMethods_base:
Ex4: L:=[1,2];L.concat([3,4,5])
Ex5: S:="abcd";S.concat("efghi")
'''
- return GiacMethods['extend'](self,*args)
+ return GiacMethods['extend'](self, *args)
- def extract_measure(self,*args):
+ def extract_measure(self, *args):
r'''From Giac's documentation:
Help for extract_measure:
extract_measure(Var)
@@ -5068,9 +5068,9 @@ cdef class GiacMethods_base:
Ex2:extract_measure(angleatraw(0,1,1+i,1))
Ex3: A:=point(0);B:=point(1+i);a:=distanceatraw(A,B,(1+i)/2);extract_measure(a)
'''
- return GiacMethods['extract_measure'](self,*args)
+ return GiacMethods['extract_measure'](self, *args)
- def extrema(self,*args):
+ def extrema(self, *args):
r'''From Giac's documentation:
Help for extrema:
extrema(Expr,Var,a,b)
@@ -5133,9 +5133,9 @@ cdef class GiacMethods_base:
Ex56:extrema((1+y*sinh(x))/(1+y^2+tanh(x)^2),[x,y])
Ex57:extrema((1+y*sinh(x))/(1+y^2+tanh(x)^2),y=x^2,[x,y])
'''
- return GiacMethods['extrema'](self,*args)
+ return GiacMethods['extrema'](self, *args)
- def ezgcd(self,*args):
+ def ezgcd(self, *args):
r'''From Giac's documentation:
Help for ezgcd:
ezgcd(Poly,Poly)
@@ -5145,9 +5145,9 @@ cdef class GiacMethods_base:
Ex2:ezgcd((x+1)^4-y^4,(x+1-y)^2)
Ex3:ezgcd((x+y-1)*(x+y+1),(x+y+1)^2)
'''
- return GiacMethods['ezgcd'](self,*args)
+ return GiacMethods['ezgcd'](self, *args)
- def f2nd(self,*args):
+ def f2nd(self, *args):
r'''From Giac's documentation:
Help for f2nd:
f2nd(Frac or RatFrac)
@@ -5156,9 +5156,9 @@ cdef class GiacMethods_base:
Ex1:f2nd(42/12)
Ex2:f2nd((x^2+2*x+1)/(x^2-1))
'''
- return GiacMethods['f2nd'](self,*args)
+ return GiacMethods['f2nd'](self, *args)
- def fMax(self,*args):
+ def fMax(self, *args):
r'''From Giac's documentation:
Help for fMax:
fMax(Expr,[Var])
@@ -5167,9 +5167,9 @@ cdef class GiacMethods_base:
Ex1:fMax(-x^2+2*x+1,x)
Ex2:fMax(-x^2+2*x+1,x=1..2)
'''
- return GiacMethods['fMax'](self,*args)
+ return GiacMethods['fMax'](self, *args)
- def fMin(self,*args):
+ def fMin(self, *args):
r'''From Giac's documentation:
Help for fMin:
fMin(Expr,[Var])
@@ -5180,9 +5180,9 @@ cdef class GiacMethods_base:
Ex3:fMin((x-3)^2+(y-5)^2+1,[],[x,y],[1,1])
Ex4:fMin((x-3)^2+(y-5)^2+1,[x+y^2=1],[x,y],[1,1])
'''
- return GiacMethods['fMin'](self,*args)
+ return GiacMethods['fMin'](self, *args)
- def fPart(self,*args):
+ def fPart(self, *args):
r'''From Giac's documentation:
Help for fPart:
fPart(Real||LstReal)
@@ -5194,9 +5194,9 @@ cdef class GiacMethods_base:
Ex4:fPart(-1.2)
Ex5:fPart([3.4,sqrt(2)])
'''
- return GiacMethods['fPart'](self,*args)
+ return GiacMethods['fPart'](self, *args)
- def faces(self,*args):
+ def faces(self, *args):
r'''From Giac's documentation:
Help for faces:
faces(Polygon or Polyedr(P))
@@ -5205,9 +5205,9 @@ cdef class GiacMethods_base:
Ex1:faces(polyhedron([0,0,0],[0,5,0],[0,0,5],[1,2,6]))
Ex2:faces(polyhedron([0,0,0],[0,5,0],[0,0,5],[1,2,6]))[2]
'''
- return GiacMethods['faces'](self,*args)
+ return GiacMethods['faces'](self, *args)
- def facteurs_premiers(self,*args):
+ def facteurs_premiers(self, *args):
r'''From Giac's documentation:
Help for facteurs_premiers:
facteurs_premiers(Intg(a) or LstIntg)
@@ -5216,9 +5216,9 @@ cdef class GiacMethods_base:
Ex1:facteurs_premiers(36)
Ex2:facteurs_premiers([36,52])
'''
- return GiacMethods['facteurs_premiers'](self,*args)
+ return GiacMethods['facteurs_premiers'](self, *args)
- def factor(self,*args):
+ def factor(self, *args):
r'''From Giac's documentation:
Help for factor:
factor(Expr)
@@ -5228,9 +5228,9 @@ cdef class GiacMethods_base:
Ex2:factor(x^4-4,sqrt(2))
Ex3:factor(x^4+12*x^3+54*x^2+108*x+81)
'''
- return GiacMethods['factor'](self,*args)
+ return GiacMethods['factor'](self, *args)
- def factor_xn(self,*args):
+ def factor_xn(self, *args):
r'''From Giac's documentation:
Help for factor_xn:
factor_xn(Poly(P))
@@ -5239,9 +5239,9 @@ cdef class GiacMethods_base:
Ex1:factor_xn(x^4-1)
Ex2:factor_xn(x^4+12*x^3+54*x^2+108*x+81)
'''
- return GiacMethods['factor_xn'](self,*args)
+ return GiacMethods['factor_xn'](self, *args)
- def factorial(self,*args):
+ def factorial(self, *args):
r'''From Giac's documentation:
Help for factorial:
factorial(Intg(n)|| Real(a))
@@ -5250,9 +5250,9 @@ cdef class GiacMethods_base:
Ex1:factorial(4)
Ex2:factorial(1.2)
'''
- return GiacMethods['factorial'](self,*args)
+ return GiacMethods['factorial'](self, *args)
- def factoriser(self,*args):
+ def factoriser(self, *args):
r'''From Giac's documentation:
Help for factoriser:
factoriser(Expr)
@@ -5262,9 +5262,9 @@ cdef class GiacMethods_base:
Ex2:factoriser(x^4-4,sqrt(2))
Ex3:factoriser(x^4+12*x^3+54*x^2+108*x+81)
'''
- return GiacMethods['factoriser'](self,*args)
+ return GiacMethods['factoriser'](self, *args)
- def factoriser_entier(self,*args):
+ def factoriser_entier(self, *args):
r'''From Giac's documentation:
Help for factoriser_entier:
factoriser_entier(Intg(a))
@@ -5273,9 +5273,9 @@ cdef class GiacMethods_base:
Ex1:factoriser_entier(50)
Ex2:factoriser_entier(123456789)
'''
- return GiacMethods['factoriser_entier'](self,*args)
+ return GiacMethods['factoriser_entier'](self, *args)
- def factoriser_sur_C(self,*args):
+ def factoriser_sur_C(self, *args):
r'''From Giac's documentation:
Help for factoriser_sur_C:
factoriser_sur_C(Expr)
@@ -5285,9 +5285,9 @@ cdef class GiacMethods_base:
Ex2:factoriser_sur_C(x^2*y^2+y^2+4*x^2+4)
Ex3:factoriser_sur_C(x^2*y^2+y^2+2*x^2+2)
'''
- return GiacMethods['factoriser_sur_C'](self,*args)
+ return GiacMethods['factoriser_sur_C'](self, *args)
- def factors(self,*args):
+ def factors(self, *args):
r'''From Giac's documentation:
Help for factors:
factors(Poly or LstPoly)
@@ -5296,9 +5296,9 @@ cdef class GiacMethods_base:
Ex1:factors(x^4-1)
Ex2:factors([x^2,x^2-1])
'''
- return GiacMethods['factors'](self,*args)
+ return GiacMethods['factors'](self, *args)
- def fadeev(self,*args):
+ def fadeev(self, *args):
r'''From Giac's documentation:
Help for fadeev:
fadeev(Opt)
@@ -5306,9 +5306,9 @@ cdef class GiacMethods_base:
See also: 1/ pcar
Ex1: pcar([[4,1,-2],[1,2,-1],[2,1,0]],fadeev)
'''
- return GiacMethods['fadeev'](self,*args)
+ return GiacMethods['fadeev'](self, *args)
- def false(self,*args):
+ def false(self, *args):
r'''From Giac's documentation:
Help for false:
false()
@@ -5316,9 +5316,9 @@ cdef class GiacMethods_base:
See also: 1/ true
Ex1: a:=false
'''
- return GiacMethods['false'](self,*args)
+ return GiacMethods['false'](self, *args)
- def falsepos_solver(self,*args):
+ def falsepos_solver(self, *args):
r'''From Giac's documentation:
Help for falsepos_solver:
falsepos_solver(Opt)
@@ -5331,9 +5331,9 @@ cdef class GiacMethods_base:
Ex5: fsolve(cos(x)=x,x,0,secant_solver)
Ex6: fsolve(cos(x)=x,x,0,steffenson_solver)
'''
- return GiacMethods['falsepos_solver'](self,*args)
+ return GiacMethods['falsepos_solver'](self, *args)
- def fclose(self,*args):
+ def fclose(self, *args):
r'''From Giac's documentation:
Help for fclose:
fclose(File(f))
@@ -5341,9 +5341,9 @@ cdef class GiacMethods_base:
See also: 1/ fprint 2/ fopen
Ex1:fclose(f)
'''
- return GiacMethods['fclose'](self,*args)
+ return GiacMethods['fclose'](self, *args)
- def fcoeff(self,*args):
+ def fcoeff(self, *args):
r'''From Giac's documentation:
Help for fcoeff:
fcoeff(Lst(root||pole,order))
@@ -5351,9 +5351,9 @@ cdef class GiacMethods_base:
See also: 1/ pcoeff 2/ froot 3/ proot
Ex1:fcoeff([1,2,0,1,3,-1])
'''
- return GiacMethods['fcoeff'](self,*args)
+ return GiacMethods['fcoeff'](self, *args)
- def fdistrib(self,*args):
+ def fdistrib(self, *args):
r'''From Giac's documentation:
Help for fdistrib:
fdistrib(Expr)
@@ -5365,9 +5365,9 @@ cdef class GiacMethods_base:
Ex4:fdistrib((x+3)^4)
Ex5:fdistrib((2*x-2*1)*(x^2-3*x+2)+(x^2-2*x+3)*(2*x-3*1))
'''
- return GiacMethods['fdistrib'](self,*args)
+ return GiacMethods['fdistrib'](self, *args)
- def fft(self,*args):
+ def fft(self, *args):
r'''From Giac's documentation:
Help for fft:
fft(Vect or (Vect(L),Intg(a),Intg(p))
@@ -5376,9 +5376,9 @@ cdef class GiacMethods_base:
Ex1:fft([1,2,3,4,0,0,0,0])
Ex2:fft(ranm(128),22798,35969)
'''
- return GiacMethods['fft'](self,*args)
+ return GiacMethods['fft'](self, *args)
- def fieldplot(self,*args):
+ def fieldplot(self, *args):
r'''From Giac's documentation:
Help for fieldplot:
fieldplot(Expr,VectVar,[Opt])
@@ -5390,9 +5390,9 @@ cdef class GiacMethods_base:
Ex4:fieldplot(-t*y,[t,y],normalize,xstep=0.5,ystep=0.5)
Ex5:fieldplot(-t*y,[t=-6.868..6.868,y=-6.868..6.868],normalize)
'''
- return GiacMethods['fieldplot'](self,*args)
+ return GiacMethods['fieldplot'](self, *args)
- def find(self,*args):
+ def find(self, *args):
r'''From Giac's documentation:
Help for find:
find(Expr,Vect)
@@ -5404,9 +5404,9 @@ cdef class GiacMethods_base:
Ex4:find("ab","abracadabrant")
Ex5:find(1,%{4,3,1,2%})
'''
- return GiacMethods['find'](self,*args)
+ return GiacMethods['find'](self, *args)
- def find_cycles(self,*args):
+ def find_cycles(self, *args):
r'''From Giac's documentation:
Help for find_cycles:
find_cycles(Graph(G,[length=k||l..u]))
@@ -5416,9 +5416,9 @@ cdef class GiacMethods_base:
Ex2:find_cycles(digraph(%{[1,2],[1,3],[3,1],[1,4],[2,3],[4,3],[4,5],[5,3],[5,6],[7,6],[8,6],[8,7]%}),length=3)
Ex3:find_cycles(digraph(%{[1,2],[1,3],[3,1],[1,4],[2,3],[4,3],[4,5],[5,3],[5,6],[7,6],[8,6],[8,7]%}),length=3..4)
'''
- return GiacMethods['find_cycles'](self,*args)
+ return GiacMethods['find_cycles'](self, *args)
- def findhelp(self,*args):
+ def findhelp(self, *args):
r'''From Giac's documentation:
Help for findhelp:
findhelp(Cmd)
@@ -5426,9 +5426,9 @@ cdef class GiacMethods_base:
See also: 1/ ifte 2/ when
Ex1:findhelp(ifactor)
'''
- return GiacMethods['findhelp'](self,*args)
+ return GiacMethods['findhelp'](self, *args)
- def fisher(self,*args):
+ def fisher(self, *args):
r'''From Giac's documentation:
Help for fisher:
fisher(Intg(n),Intg(m),Real(x0))
@@ -5439,9 +5439,9 @@ cdef class GiacMethods_base:
Ex3: randvector(5,fisher,4,6)
Ex4: ranm(2,3,fisher,4,6)
'''
- return GiacMethods['fisher'](self,*args)
+ return GiacMethods['fisher'](self, *args)
- def fisher_cdf(self,*args):
+ def fisher_cdf(self, *args):
r'''From Giac's documentation:
Help for fisher_cdf:
fisher_cdf(Intg(n),Intg(m),Real(x0))
@@ -5450,9 +5450,9 @@ cdef class GiacMethods_base:
Ex1:fisher_cdf(4,4,2.1)
Ex2:fisher_cdf(4,10,3.5)
'''
- return GiacMethods['fisher_cdf'](self,*args)
+ return GiacMethods['fisher_cdf'](self, *args)
- def fisher_icdf(self,*args):
+ def fisher_icdf(self, *args):
r'''From Giac's documentation:
Help for fisher_icdf:
fisher_icdf(Intg(n),Intg(m),Real(p))
@@ -5461,9 +5461,9 @@ cdef class GiacMethods_base:
Ex1:fisher_icdf(4,10,0.95)
Ex2:fisher_icdf(4,10,0.05)
'''
- return GiacMethods['fisher_icdf'](self,*args)
+ return GiacMethods['fisher_icdf'](self, *args)
- def fisherd(self,*args):
+ def fisherd(self, *args):
r'''From Giac's documentation:
Help for fisherd:
fisherd(Intg(n),Intg(m),Real(x0))
@@ -5474,9 +5474,9 @@ cdef class GiacMethods_base:
Ex3: randvector(5,fisher,4,6)
Ex4: ranm(2,3,fisher,4,6)
'''
- return GiacMethods['fisherd'](self,*args)
+ return GiacMethods['fisherd'](self, *args)
- def fisherd_cdf(self,*args):
+ def fisherd_cdf(self, *args):
r'''From Giac's documentation:
Help for fisherd_cdf:
fisherd_cdf(Intg(n),Intg(m),Real(x0))
@@ -5485,9 +5485,9 @@ cdef class GiacMethods_base:
Ex1:fisherd_cdf(4,4,2.1)
Ex2:fisherd_cdf(4,10,3.5)
'''
- return GiacMethods['fisherd_cdf'](self,*args)
+ return GiacMethods['fisherd_cdf'](self, *args)
- def fisherd_icdf(self,*args):
+ def fisherd_icdf(self, *args):
r'''From Giac's documentation:
Help for fisherd_icdf:
fisherd_icdf(Intg(n),Intg(m),Real(p))
@@ -5496,9 +5496,9 @@ cdef class GiacMethods_base:
Ex1:fisherd_icdf(4,10,0.95)
Ex2:fisherd_icdf(4,10,0.05)
'''
- return GiacMethods['fisherd_icdf'](self,*args)
+ return GiacMethods['fisherd_icdf'](self, *args)
- def fitdistr(self,*args):
+ def fitdistr(self, *args):
r'''From Giac's documentation:
Help for fitdistr:
fitdistr(Lst(L),Fnc(D))
@@ -5508,9 +5508,9 @@ cdef class GiacMethods_base:
Ex2: X:=randvar(normal,stddev=9.5):;Y:=randvar(normal,stddev=1.5):;S:=sample(eval(X/Y,0),1000):;Z:=fitdistr(S,cauchy)
Ex3: X:=randvar(normal,mean=5,variance=2):;S:=sample(exp(X),1000):;fitdistr(log(S),normal)
'''
- return GiacMethods['fitdistr'](self,*args)
+ return GiacMethods['fitdistr'](self, *args)
- def flatten(self,*args):
+ def flatten(self, *args):
r'''From Giac's documentation:
Help for flatten:
flatten(Lst)
@@ -5518,9 +5518,9 @@ cdef class GiacMethods_base:
See also: 1/ mat2list
Ex1:flatten([[1,[2,3],4],[5,6]])
'''
- return GiacMethods['flatten'](self,*args)
+ return GiacMethods['flatten'](self, *args)
- def float2rational(self,*args):
+ def float2rational(self, *args):
r'''From Giac's documentation:
Help for float2rational:
float2rational(Expr)
@@ -5531,9 +5531,9 @@ cdef class GiacMethods_base:
Ex3:float2rational(1.4141)
Ex4:float2rational(0.156381102937)
'''
- return GiacMethods['float2rational'](self,*args)
+ return GiacMethods['float2rational'](self, *args)
- def floor(self,*args):
+ def floor(self, *args):
r'''From Giac's documentation:
Help for floor:
floor(Real or Cplx)
@@ -5542,9 +5542,9 @@ cdef class GiacMethods_base:
Ex1:floor(-2.5)
Ex2:floor(2.5-4.2*i)
'''
- return GiacMethods['floor'](self,*args)
+ return GiacMethods['floor'](self, *args)
- def flow_polynomial(self,*args):
+ def flow_polynomial(self, *args):
r'''From Giac's documentation:
Help for flow_polynomial:
flow_polynomial(Graph(G),[Var(x)])
@@ -5553,18 +5553,18 @@ cdef class GiacMethods_base:
Ex1:flow_polynomial(graph("tetrahedron"))
Ex2:flow_polynomial(graph("tetrahedron"),5)
'''
- return GiacMethods['flow_polynomial'](self,*args)
+ return GiacMethods['flow_polynomial'](self, *args)
- def fmod(self,*args):
+ def fmod(self, *args):
r'''From Giac's documentation:
Help for fmod:
fmod(Real(a),Real(b))
Returns a mod b for a and b floats.
Ex1:fmod(10.0,pi)
'''
- return GiacMethods['fmod'](self,*args)
+ return GiacMethods['fmod'](self, *args)
- def foldl(self,*args):
+ def foldl(self, *args):
r'''From Giac's documentation:
Help for foldl:
foldl(op,id,Seq(r1,r2,...))
@@ -5572,9 +5572,9 @@ cdef class GiacMethods_base:
See also: 1/ apply 2/ foldr 3/ map
Ex1:foldl(F,init,a,b,c)
'''
- return GiacMethods['foldl'](self,*args)
+ return GiacMethods['foldl'](self, *args)
- def foldr(self,*args):
+ def foldr(self, *args):
r'''From Giac's documentation:
Help for foldr:
foldr(op,id,Seq(r1,r2,...))
@@ -5582,9 +5582,9 @@ cdef class GiacMethods_base:
See also: 1/ apply 2/ foldl 3/ map
Ex1:foldr(F,init,a,b,c)
'''
- return GiacMethods['foldr'](self,*args)
+ return GiacMethods['foldr'](self, *args)
- def fonction_derivee(self,*args):
+ def fonction_derivee(self, *args):
r'''From Giac's documentation:
Help for fonction_derivee:
fonction_derivee(Fnc(f))
@@ -5596,9 +5596,9 @@ cdef class GiacMethods_base:
Ex4:fonction_derivee(ln)([x,y])
Ex5: (function_diff @@3)(ln)('x')
'''
- return GiacMethods['fonction_derivee'](self,*args)
+ return GiacMethods['fonction_derivee'](self, *args)
- def forward(self,*args):
+ def forward(self, *args):
r'''From Giac's documentation:
Help for forward:
forward(NULL or Real(n))
@@ -5607,9 +5607,9 @@ cdef class GiacMethods_base:
Ex1: avance 30
Ex2:forward(30)
'''
- return GiacMethods['forward'](self,*args)
+ return GiacMethods['forward'](self, *args)
- def fourier(self,*args):
+ def fourier(self, *args):
r'''From Giac's documentation:
Help for fourier:
fourier(Expr(f(x)),[Var(x),[Var(s)]])
@@ -5632,9 +5632,9 @@ cdef class GiacMethods_base:
Ex15:fourier(atan(x/4)/x,x,s)
Ex16:fourier(piecewise(x<=-1,exp(x+1),x<=1,1,exp(2-2x)),x,s)
'''
- return GiacMethods['fourier'](self,*args)
+ return GiacMethods['fourier'](self, *args)
- def fourier_an(self,*args):
+ def fourier_an(self, *args):
r'''From Giac's documentation:
Help for fourier_an:
fourier_an(Expr(f(x)),Var(x),Period(T),Intg(n),Real(a))
@@ -5643,9 +5643,9 @@ cdef class GiacMethods_base:
Ex1:fourier_an(x^2,x,2,0,-1)
Ex2:fourier_an(x^2,x,2,n,-1)
'''
- return GiacMethods['fourier_an'](self,*args)
+ return GiacMethods['fourier_an'](self, *args)
- def fourier_bn(self,*args):
+ def fourier_bn(self, *args):
r'''From Giac's documentation:
Help for fourier_bn:
fourier_bn(Expr(f(x)),Var(x),Period(T),Intg(n),Real(a))
@@ -5654,9 +5654,9 @@ cdef class GiacMethods_base:
Ex1:fourier_bn(x^2,x,2,0,-1)
Ex2:fourier_bn(x^2,x,2,n,-1)
'''
- return GiacMethods['fourier_bn'](self,*args)
+ return GiacMethods['fourier_bn'](self, *args)
- def fourier_cn(self,*args):
+ def fourier_cn(self, *args):
r'''From Giac's documentation:
Help for fourier_cn:
fourier_cn(Expr(f(x)),Var(x),Period(T),Intg(n),Real(a))
@@ -5665,9 +5665,9 @@ cdef class GiacMethods_base:
Ex1:fourier_cn(x^2,x,2,0,-1)
Ex2:fourier_cn(x^2,x,2,n,-1)
'''
- return GiacMethods['fourier_cn'](self,*args)
+ return GiacMethods['fourier_cn'](self, *args)
- def fprint(self,*args):
+ def fprint(self, *args):
r'''From Giac's documentation:
Help for fprint:
fprint(File(f),Var,[Var,Var...])
@@ -5677,9 +5677,9 @@ cdef class GiacMethods_base:
Ex2:fprint(f,"blabla")
Ex3:fprint(f,Unquoted,"blabla")
'''
- return GiacMethods['fprint'](self,*args)
+ return GiacMethods['fprint'](self, *args)
- def frac(self,*args):
+ def frac(self, *args):
r'''From Giac's documentation:
Help for frac:
frac(Real||LstReal)
@@ -5691,9 +5691,9 @@ cdef class GiacMethods_base:
Ex4:frac(-1.2)
Ex5:frac([3.4,sqrt(2)])
'''
- return GiacMethods['frac'](self,*args)
+ return GiacMethods['frac'](self, *args)
- def fracmod(self,*args):
+ def fracmod(self, *args):
r'''From Giac's documentation:
Help for fracmod:
fracmod(Expr(Xpr),Intg(n))
@@ -5701,9 +5701,9 @@ cdef class GiacMethods_base:
See also: 1/ mod 2/ smod
Ex1:fracmod(41,121)
'''
- return GiacMethods['fracmod'](self,*args)
+ return GiacMethods['fracmod'](self, *args)
- def frame_2d(self,*args):
+ def frame_2d(self, *args):
r'''From Giac's documentation:
Help for frame_2d:
frame_2d(NULL)
@@ -5711,9 +5711,9 @@ cdef class GiacMethods_base:
See also: 1/ frame_3d 2/ Ox_2d_unit_vector 3/ Oy_2d_unit_vector
Ex1:frame_2d()
'''
- return GiacMethods['frame_2d'](self,*args)
+ return GiacMethods['frame_2d'](self, *args)
- def frequencies(self,*args):
+ def frequencies(self, *args):
r'''From Giac's documentation:
Help for frequencies:
frequencies(Lst)
@@ -5722,9 +5722,9 @@ cdef class GiacMethods_base:
Ex1:frequencies([1,2,1,1,2,1,2,4,3,3])
Ex2:frequencies([(rand(6)+1)$(k=1..100)])
'''
- return GiacMethods['frequencies'](self,*args)
+ return GiacMethods['frequencies'](self, *args)
- def frobenius_norm(self,*args):
+ def frobenius_norm(self, *args):
r'''From Giac's documentation:
Help for frobenius_norm:
frobenius_norm(Mtrx)
@@ -5732,9 +5732,9 @@ cdef class GiacMethods_base:
See also: 1/ l1norm 2/ l2 norm 3/ linfnorm 4/ matrix_norm
Ex1:frobenius_norm([[1,2,3],[3,-9,6],[4,5,6]])
'''
- return GiacMethods['frobenius_norm'](self,*args)
+ return GiacMethods['frobenius_norm'](self, *args)
- def froot(self,*args):
+ def froot(self, *args):
r'''From Giac's documentation:
Help for froot:
froot(RatPoly(F))
@@ -5743,9 +5743,9 @@ cdef class GiacMethods_base:
Ex1:froot((x^5-2*x^4+x^3)/(x-3))
Ex2:froot((x^5-2*x^4+x^3)/(x-1))
'''
- return GiacMethods['froot'](self,*args)
+ return GiacMethods['froot'](self, *args)
- def fsolve(self,*args):
+ def fsolve(self, *args):
r'''From Giac's documentation:
Help for fsolve:
fsolve(Expr,Var,[Guess or Interval],[Method])
@@ -5756,9 +5756,9 @@ cdef class GiacMethods_base:
Ex3:fsolve([x^2+y-2,x+y^2-2],[x,y],[0,0],newtonj_solver)
Ex4:fsolve([x^2+y-2,x+y^2-2],[x,y])
'''
- return GiacMethods['fsolve'](self,*args)
+ return GiacMethods['fsolve'](self, *args)
- def fullparfrac(self,*args):
+ def fullparfrac(self, *args):
r'''From Giac's documentation:
Help for fullparfrac:
fullparfrac(Opt)
@@ -5767,9 +5767,9 @@ cdef class GiacMethods_base:
Ex1: convert(1/(x^2-1),parfrac)
Ex2: convert(1/(x^2-1),fullparfrac)
'''
- return GiacMethods['fullparfrac'](self,*args)
+ return GiacMethods['fullparfrac'](self, *args)
- def funcplot(self,*args):
+ def funcplot(self, *args):
r'''From Giac's documentation:
Help for funcplot:
funcplot(Expr,[Var(x) or VectVar] ,[Intg(color)])
@@ -5781,9 +5781,9 @@ cdef class GiacMethods_base:
Ex4:funcplot(x^2+y^2,[x=-1..1,y=-2..2],nstep=900)
Ex5:funcplot((x+i*y)^2,[x=-1..1,y=-2..2],nstep=900,affichage=rempli)
'''
- return GiacMethods['funcplot'](self,*args)
+ return GiacMethods['funcplot'](self, *args)
- def function_diff(self,*args):
+ def function_diff(self, *args):
r'''From Giac's documentation:
Help for function_diff:
function_diff(Fnc(f))
@@ -5795,9 +5795,9 @@ cdef class GiacMethods_base:
Ex4:function_diff(ln)([x,y])
Ex5: (function_diff @@3)(ln)('x')
'''
- return GiacMethods['function_diff'](self,*args)
+ return GiacMethods['function_diff'](self, *args)
- def fxnd(self,*args):
+ def fxnd(self, *args):
r'''From Giac's documentation:
Help for fxnd:
fxnd(Frac or RatFrac)
@@ -5806,9 +5806,9 @@ cdef class GiacMethods_base:
Ex1:fxnd(42/12)
Ex2:fxnd((x^2+2*x+1)/(x^2-1))
'''
- return GiacMethods['fxnd'](self,*args)
+ return GiacMethods['fxnd'](self, *args)
- def gammad(self,*args):
+ def gammad(self, *args):
r'''From Giac's documentation:
Help for gammad:
gammad(Real(a>0),Real(b>0),Real(x>=0))
@@ -5816,9 +5816,9 @@ cdef class GiacMethods_base:
See also: 1/ gammad_cdf; 2/ gammad_icdf
Ex1:gammad(2.2,1.5,0.8)
'''
- return GiacMethods['gammad'](self,*args)
+ return GiacMethods['gammad'](self, *args)
- def gammad_cdf(self,*args):
+ def gammad_cdf(self, *args):
r'''From Giac's documentation:
Help for gammad_cdf:
gammad_cdf(Real(a>0),Real(b>0),Real(x0>=0),[Real(y0>=0)])
@@ -5827,9 +5827,9 @@ cdef class GiacMethods_base:
Ex1:gammad_cdf(2,1,2.96)
Ex2:gammad_cdf(2,1,1.4,2.96)
'''
- return GiacMethods['gammad_cdf'](self,*args)
+ return GiacMethods['gammad_cdf'](self, *args)
- def gammad_icdf(self,*args):
+ def gammad_icdf(self, *args):
r'''From Giac's documentation:
Help for gammad_icdf:
gammad_icdf(Real(a>0),Real(b>0),Real(0<=p<=1))
@@ -5838,9 +5838,9 @@ cdef class GiacMethods_base:
Ex1:gammad_icdf(2,1,0.95)
Ex2:gammad_icdf(2,1,0.5)
'''
- return GiacMethods['gammad_icdf'](self,*args)
+ return GiacMethods['gammad_icdf'](self, *args)
- def gammavariate(self,*args):
+ def gammavariate(self, *args):
r'''From Giac's documentation:
Help for gammavariate:
gammavariate(Real(a),Real(b))
@@ -5849,9 +5849,9 @@ cdef class GiacMethods_base:
Ex1:gammavariate(1,2)
Ex2:gammavariate(1.5,4)
'''
- return GiacMethods['gammavariate'](self,*args)
+ return GiacMethods['gammavariate'](self, *args)
- def gauss(self,*args):
+ def gauss(self, *args):
r'''From Giac's documentation:
Help for gauss:
gauss(Expr,VectVar)
@@ -5859,9 +5859,9 @@ cdef class GiacMethods_base:
See also: 1/ cholesky
Ex1:gauss(x^2+2*a*x*y,[x,y])
'''
- return GiacMethods['gauss'](self,*args)
+ return GiacMethods['gauss'](self, *args)
- def gauss15(self,*args):
+ def gauss15(self, *args):
r'''From Giac's documentation:
Help for gauss15:
gauss15(Opt)
@@ -5872,9 +5872,9 @@ cdef class GiacMethods_base:
Ex3: area(x^2,x=0..1,5,rombergm)
Ex4:gauss15(area(x^2,x=0..1,5,gauss15))
'''
- return GiacMethods['gauss15'](self,*args)
+ return GiacMethods['gauss15'](self, *args)
- def gauss_seidel_linsolve(self,*args):
+ def gauss_seidel_linsolve(self, *args):
r'''From Giac's documentation:
Help for gauss_seidel_linsolve:
gauss_seidel_linsolve([Real(omega)],Mtrx(A),Vect(b),Real(eps),[Int(maxiter)])
@@ -5885,9 +5885,9 @@ cdef class GiacMethods_base:
Ex3: a:=[[100,2],[2,100]];gauss_seidel_linsolve(1.5,a,[0,1],1e-12);
Ex4: a:=[[100,2],[2,100]];gauss_seidel_linsolve(1.5,table(a),[0,1],1e-12);
'''
- return GiacMethods['gauss_seidel_linsolve'](self,*args)
+ return GiacMethods['gauss_seidel_linsolve'](self, *args)
- def gaussian_window(self,*args):
+ def gaussian_window(self, *args):
r'''From Giac's documentation:
Help for gaussian_window:
gaussian_window(Lst,[Real(a)],[Interval(n1..n2)])
@@ -5895,9 +5895,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ bartlett_hann_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(gaussian_window(randvector(1000,0..1),0.4))
'''
- return GiacMethods['gaussian_window'](self,*args)
+ return GiacMethods['gaussian_window'](self, *args)
- def gaussjord(self,*args):
+ def gaussjord(self, *args):
r'''From Giac's documentation:
Help for gaussjord:
gaussjord(Mtrx(M),[Intg(k)]||Opt)
@@ -5908,9 +5908,9 @@ cdef class GiacMethods_base:
Ex3:gaussjord([[2,1,1,-1],[1,1,2,-1],[1,2,1,-4]],2)
Ex4:gaussjord([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],[1,0,0,1,-a4]],keep_pivot)
'''
- return GiacMethods['gaussjord'](self,*args)
+ return GiacMethods['gaussjord'](self, *args)
- def gaussquad(self,*args):
+ def gaussquad(self, *args):
r'''From Giac's documentation:
Help for gaussquad:
gaussquad(Expr(f(x)),Var(x),Real(a),Real(b))
@@ -5920,9 +5920,9 @@ cdef class GiacMethods_base:
Ex2:gaussquad(x^2,x,0,1)
Ex3:gaussquad(exp(-x^2),x,-1,1)
'''
- return GiacMethods['gaussquad'](self,*args)
+ return GiacMethods['gaussquad'](self, *args)
- def gbasis(self,*args):
+ def gbasis(self, *args):
r'''From Giac's documentation:
Help for gbasis:
gbasis(LstPoly,LstVar,[order])
@@ -5934,9 +5934,9 @@ cdef class GiacMethods_base:
Ex4:gbasis([x1+x2+x3,x1*x2+x1*x3+x2*x3,x1*x2*x3-1],[x1,x2,x3],plex)
Ex5:gbasis([x1+x2+x3,x1*x2+x1*x3+x2*x3,x1*x2*x3-1] mod 29,[x1,x2,x3])
'''
- return GiacMethods['gbasis'](self,*args)
+ return GiacMethods['gbasis'](self, *args)
- def gbasis_max_pairs(self,*args):
+ def gbasis_max_pairs(self, *args):
r'''From Giac's documentation:
Help for gbasis_max_pairs:
gbasis_max_pairs(Intg)
@@ -5945,9 +5945,9 @@ cdef class GiacMethods_base:
Ex1:gbasis_max_pairs(4096)
Ex2:gbasis_max_pairs(0)
'''
- return GiacMethods['gbasis_max_pairs'](self,*args)
+ return GiacMethods['gbasis_max_pairs'](self, *args)
- def gbasis_reinject(self,*args):
+ def gbasis_reinject(self, *args):
r'''From Giac's documentation:
Help for gbasis_reinject:
gbasis_reinject(Real(a),[Real(b)])
@@ -5956,9 +5956,9 @@ cdef class GiacMethods_base:
Ex1:gbasis_reinject(0.1)
Ex2:gbasis_reinject(0.1,0.05)
'''
- return GiacMethods['gbasis_reinject'](self,*args)
+ return GiacMethods['gbasis_reinject'](self, *args)
- def gbasis_simult_primes(self,*args):
+ def gbasis_simult_primes(self, *args):
r'''From Giac's documentation:
Help for gbasis_simult_primes:
gbasis_simult_primes(Intg)
@@ -5966,9 +5966,9 @@ cdef class GiacMethods_base:
See also: 1/ gbasis 2/ gbasis_max_pairs 3/ gbasis_reinject
Ex1:gbasis_simult_primes(3)
'''
- return GiacMethods['gbasis_simult_primes'](self,*args)
+ return GiacMethods['gbasis_simult_primes'](self, *args)
- def gcd(self,*args):
+ def gcd(self, *args):
r'''From Giac's documentation:
Help for gcd:
gcd((Intg(a) or Poly),(Intg(b) or Poly))
@@ -5980,9 +5980,9 @@ cdef class GiacMethods_base:
Ex4:gcd(t^2-2*t+1,t^2+t-2)
Ex5:gcd((x^2-1)*(y^2-1)*z^2,x^3*y^3*z+(-(y^3))*z+x^3*z-z)
'''
- return GiacMethods['gcd'](self,*args)
+ return GiacMethods['gcd'](self, *args)
- def gcdex(self,*args):
+ def gcdex(self, *args):
r'''From Giac's documentation:
Help for gcdex:
gcdex((Poly or Lst),(Poly or Lst),[Var])
@@ -5993,9 +5993,9 @@ cdef class GiacMethods_base:
Ex3:gcdex([1,-2,1],[1,0,0,-1])
Ex4:gcdex([1,-2,1],[1,-1,2])
'''
- return GiacMethods['gcdex'](self,*args)
+ return GiacMethods['gcdex'](self, *args)
- def genpoly(self,*args):
+ def genpoly(self, *args):
r'''From Giac's documentation:
Help for genpoly:
genpoly(Poly(P),Intg(b),Var)
@@ -6005,9 +6005,9 @@ cdef class GiacMethods_base:
Ex2:genpoly(7*y+5,6,x)
Ex3:genpoly(7*y-5*z,10,x)
'''
- return GiacMethods['genpoly'](self,*args)
+ return GiacMethods['genpoly'](self, *args)
- def geometric(self,*args):
+ def geometric(self, *args):
r'''From Giac's documentation:
Help for geometric:
geometric(Real(p),Intg(k))
@@ -6018,9 +6018,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,geometric,0.3)
Ex4: ranm(4,3,geometric,0.3)
'''
- return GiacMethods['geometric'](self,*args)
+ return GiacMethods['geometric'](self, *args)
- def geometric_cdf(self,*args):
+ def geometric_cdf(self, *args):
r'''From Giac's documentation:
Help for geometric_cdf:
geometric_cdf(Real(p),Intg(k),[Intg(m)])
@@ -6029,9 +6029,9 @@ cdef class GiacMethods_base:
Ex1:geometric_cdf(0.3,4)
Ex2:geometric_cdf(0.3,4,5)
'''
- return GiacMethods['geometric_cdf'](self,*args)
+ return GiacMethods['geometric_cdf'](self, *args)
- def geometric_icdf(self,*args):
+ def geometric_icdf(self, *args):
r'''From Giac's documentation:
Help for geometric_icdf:
geometric_icdf(Real(p),Real(x))
@@ -6039,9 +6039,9 @@ cdef class GiacMethods_base:
See also: 1/ geometric_cdf 2/ geometric
Ex1:geometric_icdf(0.3,0.95)
'''
- return GiacMethods['geometric_icdf'](self,*args)
+ return GiacMethods['geometric_icdf'](self, *args)
- def getDenom(self,*args):
+ def getDenom(self, *args):
r'''From Giac's documentation:
Help for getDenom:
getDenom(Expr)
@@ -6051,9 +6051,9 @@ cdef class GiacMethods_base:
Ex2:getDenom((x^3-1)/(x^2-1))
Ex3:getDenom(1+(x^3-1)/x^2)
'''
- return GiacMethods['getDenom'](self,*args)
+ return GiacMethods['getDenom'](self, *args)
- def getKey(self,*args):
+ def getKey(self, *args):
r'''From Giac's documentation:
Help for getKey:
getKey(NULL)
@@ -6061,9 +6061,9 @@ cdef class GiacMethods_base:
See also: 1/ getType
Ex1:getKey()
'''
- return GiacMethods['getKey'](self,*args)
+ return GiacMethods['getKey'](self, *args)
- def getNum(self,*args):
+ def getNum(self, *args):
r'''From Giac's documentation:
Help for getNum:
getNum(Expr)
@@ -6073,9 +6073,9 @@ cdef class GiacMethods_base:
Ex2:getNum((x^3-1)/(x^2-1))
Ex3:getNum(1+(x^3-1)/x^2)
'''
- return GiacMethods['getNum'](self,*args)
+ return GiacMethods['getNum'](self, *args)
- def getType(self,*args):
+ def getType(self, *args):
r'''From Giac's documentation:
Help for getType:
getType(Expr)
@@ -6086,9 +6086,9 @@ cdef class GiacMethods_base:
Ex3:getType(x->cos(2*x))
Ex4:getType(1.414)
'''
- return GiacMethods['getType'](self,*args)
+ return GiacMethods['getType'](self, *args)
- def get_edge_attribute(self,*args):
+ def get_edge_attribute(self, *args):
r'''From Giac's documentation:
Help for get_edge_attribute:
get_edge_attribute(Graph(G),Edge(e),Seq(tag1=value1,tag2=value2,..))
@@ -6096,9 +6096,9 @@ cdef class GiacMethods_base:
See also: 1/ discard_edge_attribute 2/ set_edge_attribute 3/ list_edge_attributes
Ex1:get_edge_attribute(cycle_graph(3),[1,2],"cost")
'''
- return GiacMethods['get_edge_attribute'](self,*args)
+ return GiacMethods['get_edge_attribute'](self, *args)
- def get_edge_weight(self,*args):
+ def get_edge_weight(self, *args):
r'''From Giac's documentation:
Help for get_edge_weight:
get_edge_weight(Graph(G),Edge(e))
@@ -6106,9 +6106,9 @@ cdef class GiacMethods_base:
See also: 1/ is_weighted 2/ make_weighted 3/ set_edge_weight 4/ weight_matrix
Ex1:get_edge_weight(graph(%{[[1,2],5],[[2,3],6]%}),[1,2])
'''
- return GiacMethods['get_edge_weight'](self,*args)
+ return GiacMethods['get_edge_weight'](self, *args)
- def get_graph_attribute(self,*args):
+ def get_graph_attribute(self, *args):
r'''From Giac's documentation:
Help for get_graph_attribute:
get_graph_attribute(Graph(G),Seq(tag1=value1,tag2=value2,..))
@@ -6116,9 +6116,9 @@ cdef class GiacMethods_base:
See also: 1/ discard_graph_attribute 2/ set_graph_attribute 3/ list_graph_attributes
Ex1:get_graph_attribute(cycle_graph(3),"name")
'''
- return GiacMethods['get_graph_attribute'](self,*args)
+ return GiacMethods['get_graph_attribute'](self, *args)
- def get_vertex_attribute(self,*args):
+ def get_vertex_attribute(self, *args):
r'''From Giac's documentation:
Help for get_vertex_attribute:
get_vertex_attribute(Graph(G),Vrtx(v),Seq(tag1=value1,tag2=value2,..))
@@ -6126,9 +6126,9 @@ cdef class GiacMethods_base:
See also: 1/ discard_vertex_attribute 2/ set_vertex_attribute 3/ list_vertex_attributes
Ex1:get_vertex_attribute(cycle_graph(3),1,"supply")
'''
- return GiacMethods['get_vertex_attribute'](self,*args)
+ return GiacMethods['get_vertex_attribute'](self, *args)
- def girth(self,*args):
+ def girth(self, *args):
r'''From Giac's documentation:
Help for girth:
girth(Graph(G))
@@ -6137,9 +6137,9 @@ cdef class GiacMethods_base:
Ex1:girth(graph("petersen"))
Ex2:girth(hypercube_graph(3))
'''
- return GiacMethods['girth'](self,*args)
+ return GiacMethods['girth'](self, *args)
- def gl_showaxes(self,*args):
+ def gl_showaxes(self, *args):
r'''From Giac's documentation:
Help for gl_showaxes:
gl_showaxes(Opt=Boolean)
@@ -6148,9 +6148,9 @@ cdef class GiacMethods_base:
Ex1: gl_showaxes=true;plot(sin(x))
Ex2: gl_showaxes=false;plot(sin(x))
'''
- return GiacMethods['gl_showaxes'](self,*args)
+ return GiacMethods['gl_showaxes'](self, *args)
- def grad(self,*args):
+ def grad(self, *args):
r'''From Giac's documentation:
Help for grad:
grad(Expr(Xpr),LstVar)
@@ -6158,9 +6158,9 @@ cdef class GiacMethods_base:
See also: 1/ hessian
Ex1:grad(2*x^2*y-x*z^3,[x,y,z])
'''
- return GiacMethods['grad'](self,*args)
+ return GiacMethods['grad'](self, *args)
- def gramschmidt(self,*args):
+ def gramschmidt(self, *args):
r'''From Giac's documentation:
Help for gramschmidt:
gramschmidt(Basis(B),ScalarProd(Sp))
@@ -6169,9 +6169,9 @@ cdef class GiacMethods_base:
Ex1:gramschmidt(-2)
Ex2:gramschmidt([1,1+x],(p,q)->integrate(p*q,x,-1,1))
'''
- return GiacMethods['gramschmidt'](self,*args)
+ return GiacMethods['gramschmidt'](self, *args)
- def graph(self,*args):
+ def graph(self, *args):
r'''From Giac's documentation:
Help for graph:
graph([Lst(V)],[Set(E)],[Mtrx(A)],[options])
@@ -6185,9 +6185,9 @@ cdef class GiacMethods_base:
Ex6:graph("petersen")
Ex7:graph([[0,1,1,0],[1,0,0,1],[1,0,0,0],[0,1,0,0]])
'''
- return GiacMethods['graph'](self,*args)
+ return GiacMethods['graph'](self, *args)
- def graph_automorphisms(self,*args):
+ def graph_automorphisms(self, *args):
r'''From Giac's documentation:
Help for graph_automorphisms:
graph_automorphisms(Graph(G))
@@ -6195,9 +6195,9 @@ cdef class GiacMethods_base:
See also: 1/ cycles2permu 2/ isomorphic_copy 3/ permute_vertices
Ex1:graph_automorphisms(graph("petersen"))
'''
- return GiacMethods['graph_automorphisms'](self,*args)
+ return GiacMethods['graph_automorphisms'](self, *args)
- def graph_charpoly(self,*args):
+ def graph_charpoly(self, *args):
r'''From Giac's documentation:
Help for graph_charpoly:
graph_charpoly(Graph(G),[Var(x)])
@@ -6206,9 +6206,9 @@ cdef class GiacMethods_base:
Ex1:graph_charpoly(graph(%{[1,2],[2,3]%}))
Ex2:graph_charpoly(graph("shrikhande"))
'''
- return GiacMethods['graph_charpoly'](self,*args)
+ return GiacMethods['graph_charpoly'](self, *args)
- def graph_complement(self,*args):
+ def graph_complement(self, *args):
r'''From Giac's documentation:
Help for graph_complement:
graph_complement(Graph(G))
@@ -6216,9 +6216,9 @@ cdef class GiacMethods_base:
See also: 1/ edges
Ex1:graph_complement(cycle_graph(5))
'''
- return GiacMethods['graph_complement'](self,*args)
+ return GiacMethods['graph_complement'](self, *args)
- def graph_diameter(self,*args):
+ def graph_diameter(self, *args):
r'''From Giac's documentation:
Help for graph_diameter:
graph_diameter(Graph(G))
@@ -6226,9 +6226,9 @@ cdef class GiacMethods_base:
See also: 1/ allpairs_distance 2/ dijkstra 3/ shortest_path 4/ vertex_distance
Ex1:graph_diameter(graph("petersen"))
'''
- return GiacMethods['graph_diameter'](self,*args)
+ return GiacMethods['graph_diameter'](self, *args)
- def graph_equal(self,*args):
+ def graph_equal(self, *args):
r'''From Giac's documentation:
Help for graph_equal:
graph_equal(Graph(G1),Graph(G2))
@@ -6236,9 +6236,9 @@ cdef class GiacMethods_base:
See also: 1/ edges 2/ graph_vertices
Ex1:graph_equal(graph([1,2,3],%{[1,2],[2,3],[3,1]%}),graph(trail(1,2,3,1)))
'''
- return GiacMethods['graph_equal'](self,*args)
+ return GiacMethods['graph_equal'](self, *args)
- def graph_join(self,*args):
+ def graph_join(self, *args):
r'''From Giac's documentation:
Help for graph_join:
graph_join(Graph(G),Graph(H))
@@ -6246,9 +6246,9 @@ cdef class GiacMethods_base:
See also: 1/ disjoint_union 2/ graph_union
Ex1:graph_join(edges(graph_join(cycle_graph(3),graph(2))))
'''
- return GiacMethods['graph_join'](self,*args)
+ return GiacMethods['graph_join'](self, *args)
- def graph_power(self,*args):
+ def graph_power(self, *args):
r'''From Giac's documentation:
Help for graph_power:
graph_power(Graph(G),Intg(k))
@@ -6256,9 +6256,9 @@ cdef class GiacMethods_base:
See also: 1/ adjacency matrix 2/ graph_diameter 3/ shortest_path
Ex1:graph_power(edges(graph_power(path_graph(5),3)))
'''
- return GiacMethods['graph_power'](self,*args)
+ return GiacMethods['graph_power'](self, *args)
- def graph_rank(self,*args):
+ def graph_rank(self, *args):
r'''From Giac's documentation:
Help for graph_rank:
graph_rank(Graph(G),[Lst(E)])
@@ -6267,9 +6267,9 @@ cdef class GiacMethods_base:
Ex1:graph_rank(graph(%{[1,2],[3,4],[4,5]%}))
Ex2:graph_rank(graph(%{[1,2],[3,4],[4,5]%}),[[1,2],[3,4])
'''
- return GiacMethods['graph_rank'](self,*args)
+ return GiacMethods['graph_rank'](self, *args)
- def graph_spectrum(self,*args):
+ def graph_spectrum(self, *args):
r'''From Giac's documentation:
Help for graph_spectrum:
graph_spectrum(Graph(G))
@@ -6277,9 +6277,9 @@ cdef class GiacMethods_base:
See also: 1/ graph_charpoly 2/ seidel_spectrum 3/ is_integer_graph
Ex1:graph_spectrum(cycle_graph(5))
'''
- return GiacMethods['graph_spectrum'](self,*args)
+ return GiacMethods['graph_spectrum'](self, *args)
- def graph_union(self,*args):
+ def graph_union(self, *args):
r'''From Giac's documentation:
Help for graph_union:
graph_union(Seq(G1,G2,...))
@@ -6287,9 +6287,9 @@ cdef class GiacMethods_base:
See also: 1/ disjoint_union 2/ graph_join
Ex1:graph_union(edges(graph_union(cycle_graph(4),path_graph(5))))
'''
- return GiacMethods['graph_union'](self,*args)
+ return GiacMethods['graph_union'](self, *args)
- def graph_vertices(self,*args):
+ def graph_vertices(self, *args):
r'''From Giac's documentation:
Help for graph_vertices:
graph_vertices(Graph(G))
@@ -6297,9 +6297,9 @@ cdef class GiacMethods_base:
See also: 1/ add_vertex 2/ graph 3/ neighbors 4/ permute_vertices 5/ relabel_vertices
Ex1:graph_vertices(graph(%{[a,c],[b,c],[a,b]%}))
'''
- return GiacMethods['graph_vertices'](self,*args)
+ return GiacMethods['graph_vertices'](self, *args)
- def greduce(self,*args):
+ def greduce(self, *args):
r'''From Giac's documentation:
Help for greduce:
greduce(Poly,LstPoly,LstVar,[order])
@@ -6309,9 +6309,9 @@ cdef class GiacMethods_base:
Ex2:greduce(x1^2*x3^2,[x3^3-1,-x2^2-x2*x3-x3^2,x1+x2+x3],[x1,x2,x3],tdeg)
Ex3:greduce(x1^2*x3^2-x2,[x3^3-1,-x2^2-x2*x3-x3^2,x1+x2+x3],[x1,x2,x3])
'''
- return GiacMethods['greduce'](self,*args)
+ return GiacMethods['greduce'](self, *args)
- def greedy_color(self,*args):
+ def greedy_color(self, *args):
r'''From Giac's documentation:
Help for greedy_color:
greedy_color(Graph(G),[Permu(p)])
@@ -6319,9 +6319,9 @@ cdef class GiacMethods_base:
See also: 1/ is_vertex_colorable 2/ chromatic_number
Ex1:greedy_color(graph("petersen"))
'''
- return GiacMethods['greedy_color'](self,*args)
+ return GiacMethods['greedy_color'](self, *args)
- def grid_graph(self,*args):
+ def grid_graph(self, *args):
r'''From Giac's documentation:
Help for grid_graph:
grid_graph(Intg(m),Intg(n),[triangle])
@@ -6329,9 +6329,9 @@ cdef class GiacMethods_base:
See also: 1/ torus_grid_graph
Ex1:grid_graph(5,8)
'''
- return GiacMethods['grid_graph'](self,*args)
+ return GiacMethods['grid_graph'](self, *args)
- def groupermu(self,*args):
+ def groupermu(self, *args):
r'''From Giac's documentation:
Help for groupermu:
groupermu(Permut(a),Permut(b))
@@ -6339,9 +6339,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:groupermu([1,2,0],[3,1,2,0])
'''
- return GiacMethods['groupermu'](self,*args)
+ return GiacMethods['groupermu'](self, *args)
- def hadamard(self,*args):
+ def hadamard(self, *args):
r'''From Giac's documentation:
Help for hadamard:
hadamard(Mtrx,Mtrx)
@@ -6350,9 +6350,9 @@ cdef class GiacMethods_base:
Ex1:hadamard([[1,2],[3,4]])
Ex2:hadamard([[1,2],[3,4]],[[3,4],[5,6]])
'''
- return GiacMethods['hadamard'](self,*args)
+ return GiacMethods['hadamard'](self, *args)
- def half_cone(self,*args):
+ def half_cone(self, *args):
r'''From Giac's documentation:
Help for half_cone:
half_cone(Pnt(A),Vect(v),Real(t),[Real(h)])
@@ -6361,9 +6361,9 @@ cdef class GiacMethods_base:
Ex1:half_cone([0,0,0],[0,0,1],pi/6)
Ex2:half_cone([0,0,0],[0,1,1],pi/6,-4)
'''
- return GiacMethods['half_cone'](self,*args)
+ return GiacMethods['half_cone'](self, *args)
- def half_line(self,*args):
+ def half_line(self, *args):
r'''From Giac's documentation:
Help for half_line:
half_line((Pnt or Cplx),(Pnt or Cplx))
@@ -6372,9 +6372,9 @@ cdef class GiacMethods_base:
Ex1:half_line(i,1+i)
Ex2:half_line(point(i),point(1+i))
'''
- return GiacMethods['half_line'](self,*args)
+ return GiacMethods['half_line'](self, *args)
- def halftan(self,*args):
+ def halftan(self, *args):
r'''From Giac's documentation:
Help for halftan:
halftan(Expr)
@@ -6383,9 +6383,9 @@ cdef class GiacMethods_base:
Ex2:halftan(cos(x))
Ex3:halftan(tan(x))
'''
- return GiacMethods['halftan'](self,*args)
+ return GiacMethods['halftan'](self, *args)
- def halftan_hyp2exp(self,*args):
+ def halftan_hyp2exp(self, *args):
r'''From Giac's documentation:
Help for halftan_hyp2exp:
halftan_hyp2exp(ExprTrig)
@@ -6393,9 +6393,9 @@ cdef class GiacMethods_base:
See also: 1/ hyp2exp 2/ halftan
Ex1:halftan_hyp2exp(sin(x)+sinh(x))
'''
- return GiacMethods['halftan_hyp2exp'](self,*args)
+ return GiacMethods['halftan_hyp2exp'](self, *args)
- def halt(self,*args):
+ def halt(self, *args):
r'''From Giac's documentation:
Help for halt:
halt(NULL)
@@ -6403,18 +6403,18 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:halt()
'''
- return GiacMethods['halt'](self,*args)
+ return GiacMethods['halt'](self, *args)
- def hamdist(self,*args):
+ def hamdist(self, *args):
r'''From Giac's documentation:
Help for hamdist:
hamdist(Intg,Intg)
Bitwise Hamming distance.
Ex1:hamdist(0x12,0x38)
'''
- return GiacMethods['hamdist'](self,*args)
+ return GiacMethods['hamdist'](self, *args)
- def hamming_window(self,*args):
+ def hamming_window(self, *args):
r'''From Giac's documentation:
Help for hamming_window:
hamming_window(Lst,[Interval(n1..n2)])
@@ -6422,9 +6422,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ bartlett_hann_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(hamming_window(randvector(1000,0..1)))
'''
- return GiacMethods['hamming_window'](self,*args)
+ return GiacMethods['hamming_window'](self, *args)
- def hann_poisson_window(self,*args):
+ def hann_poisson_window(self, *args):
r'''From Giac's documentation:
Help for hann_poisson_window:
hann_poisson_window(Lst,[Interval(n1..n2)])
@@ -6432,9 +6432,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ bartlett_hann_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(hann_poisson_window(randvector(1000,0..1),2))
'''
- return GiacMethods['hann_poisson_window'](self,*args)
+ return GiacMethods['hann_poisson_window'](self, *args)
- def hann_window(self,*args):
+ def hann_window(self, *args):
r'''From Giac's documentation:
Help for hann_window:
hann_window(Lst,[Interval(n1..n2)])
@@ -6442,9 +6442,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ bartlett_hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(hann_window(randvector(1000,0..1)))
'''
- return GiacMethods['hann_window'](self,*args)
+ return GiacMethods['hann_window'](self, *args)
- def harmonic_conjugate(self,*args):
+ def harmonic_conjugate(self, *args):
r'''From Giac's documentation:
Help for harmonic_conjugate:
harmonic_conjugate(Line or Pnt(A),Line or Pnt(B),Line or Pnt(C))
@@ -6455,9 +6455,9 @@ cdef class GiacMethods_base:
Ex3:harmonic_conjugate(line(0,1+i),line(0,3+i),line(0,i))
Ex4:harmonic_conjugate(line(0,1+i),line(0,3+i),point(3/2+i))
'''
- return GiacMethods['harmonic_conjugate'](self,*args)
+ return GiacMethods['harmonic_conjugate'](self, *args)
- def harmonic_division(self,*args):
+ def harmonic_division(self, *args):
r'''From Giac's documentation:
Help for harmonic_division:
harmonic_division(Pnt or Line,Pnt or Line,Pnt or Line,Var)
@@ -6468,9 +6468,9 @@ cdef class GiacMethods_base:
Ex3:harmonic_division(line(i,0),line(i,1+i),line(i,3+2*i),D)
Ex4:harmonic_division(line(0,1+i),line(0,3+i),line(0,i),D)
'''
- return GiacMethods['harmonic_division'](self,*args)
+ return GiacMethods['harmonic_division'](self, *args)
- def has(self,*args):
+ def has(self, *args):
r'''From Giac's documentation:
Help for has:
has(Expr,Var)
@@ -6479,9 +6479,9 @@ cdef class GiacMethods_base:
Ex1:has(x+y,x)
Ex2:has(x+y,n)
'''
- return GiacMethods['has'](self,*args)
+ return GiacMethods['has'](self, *args)
- def has_arc(self,*args):
+ def has_arc(self, *args):
r'''From Giac's documentation:
Help for has_arc:
has_arc(Graph(G),Edge(e))
@@ -6490,9 +6490,9 @@ cdef class GiacMethods_base:
Ex1:has_arc(digraph(trail(1,2,3,4,1)),[4,2])
Ex2:has_arc(digraph(trail(1,2,3,4,1)),%{4,2%})
'''
- return GiacMethods['has_arc'](self,*args)
+ return GiacMethods['has_arc'](self, *args)
- def has_edge(self,*args):
+ def has_edge(self, *args):
r'''From Giac's documentation:
Help for has_edge:
has_edge(Graph(G),Edge(e))
@@ -6500,9 +6500,9 @@ cdef class GiacMethods_base:
See also: 1/ edges 2/ has_arc
Ex1:has_edge(graph(trail(1,2,3,4,1)),[2,4])
'''
- return GiacMethods['has_edge'](self,*args)
+ return GiacMethods['has_edge'](self, *args)
- def hasard(self,*args):
+ def hasard(self, *args):
r'''From Giac's documentation:
Help for hasard:
hasard(Intg(n) or Interval(p..n) or NULL,[Intg(b1) or Lst(L)],[Intg(b2)])
@@ -6516,9 +6516,9 @@ cdef class GiacMethods_base:
Ex6:hasard(3,1,10)
Ex7:hasard(3,["r","r","r","b","n"])
'''
- return GiacMethods['hasard'](self,*args)
+ return GiacMethods['hasard'](self, *args)
- def head(self,*args):
+ def head(self, *args):
r'''From Giac's documentation:
Help for head:
head(Vect or Seq or Str)
@@ -6528,9 +6528,9 @@ cdef class GiacMethods_base:
Ex2:head([1,2,3])
Ex3:head("bonjour")
'''
- return GiacMethods['head'](self,*args)
+ return GiacMethods['head'](self, *args)
- def heading(self,*args):
+ def heading(self, *args):
r'''From Giac's documentation:
Help for heading:
heading(NULL or Real)
@@ -6540,36 +6540,36 @@ cdef class GiacMethods_base:
Ex2:heading()
Ex3:heading(cap 90)
'''
- return GiacMethods['heading'](self,*args)
+ return GiacMethods['heading'](self, *args)
- def heapify(self,*args):
+ def heapify(self, *args):
r'''From Giac's documentation:
Help for heapify:
heapify(List)
Partial ordering of a list as a heap.
See also: 1/ heappush 2/ heappop
'''
- return GiacMethods['heapify'](self,*args)
+ return GiacMethods['heapify'](self, *args)
- def heappop(self,*args):
+ def heappop(self, *args):
r'''From Giac's documentation:
Help for heappop:
heappop(List)
Removes and returns the root node of a heap.
See also: 1/ heapify 2/ heappush
'''
- return GiacMethods['heappop'](self,*args)
+ return GiacMethods['heappop'](self, *args)
- def heappush(self,*args):
+ def heappush(self, *args):
r'''From Giac's documentation:
Help for heappush:
heappush(List,Object)
Adds an object in a heap.
See also: 1/ heapify 2/ heappop
'''
- return GiacMethods['heappush'](self,*args)
+ return GiacMethods['heappush'](self, *args)
- def hermite(self,*args):
+ def hermite(self, *args):
r'''From Giac's documentation:
Help for hermite:
hermite(Intg(n)||Matr(A))
@@ -6578,9 +6578,9 @@ cdef class GiacMethods_base:
Ex1:hermite(3)
Ex2: n:=5; a:=ranm(n,n) % 17; l,u:=hermite(x-a);normal(l*(x-a)-u);
'''
- return GiacMethods['hermite'](self,*args)
+ return GiacMethods['hermite'](self, *args)
- def hessenberg(self,*args):
+ def hessenberg(self, *args):
r'''From Giac's documentation:
Help for hessenberg:
hessenberg(Mtrx(A),[Intg(n)])
@@ -6592,9 +6592,9 @@ cdef class GiacMethods_base:
Ex4:hessenberg([[1,2,3],[4,5,6],[7,8,1]],-2)
Ex5:hessenberg([[1,2,3],[4,5,6],[7,8,1]],3)
'''
- return GiacMethods['hessenberg'](self,*args)
+ return GiacMethods['hessenberg'](self, *args)
- def hessian(self,*args):
+ def hessian(self, *args):
r'''From Giac's documentation:
Help for hessian:
hessian(Expr(Xpr),LstVar)
@@ -6602,9 +6602,9 @@ cdef class GiacMethods_base:
See also: 1/ grad
Ex1:hessian(2*x^2*y-x*z,[x,y,z])
'''
- return GiacMethods['hessian'](self,*args)
+ return GiacMethods['hessian'](self, *args)
- def heugcd(self,*args):
+ def heugcd(self, *args):
r'''From Giac's documentation:
Help for heugcd:
heugcd(Poly,Poly)
@@ -6612,9 +6612,9 @@ cdef class GiacMethods_base:
See also: 1/ gcd 2/ modgcd 3/ ezgcd 4/ psrgcd
Ex1:heugcd(x^4-1,(x-1)^2)
'''
- return GiacMethods['heugcd'](self,*args)
+ return GiacMethods['heugcd'](self, *args)
- def hexagon(self,*args):
+ def hexagon(self, *args):
r'''From Giac's documentation:
Help for hexagon:
hexagon(Pnt(A)||Cplx,Pnt(B)||Cplx,[Pnt(P)],[Var(C)],[Var(D)],[Var(E)],[Var(F)])
@@ -6625,9 +6625,9 @@ cdef class GiacMethods_base:
Ex3:hexagon(point(0,0,0),point(3,3,3),point(0,0,3))
Ex4:hexagon(point(0,0,0),point(3,3,3),point(0,0,3),C,D,E,F)
'''
- return GiacMethods['hexagon'](self,*args)
+ return GiacMethods['hexagon'](self, *args)
- def highlight_edges(self,*args):
+ def highlight_edges(self, *args):
r'''From Giac's documentation:
Help for highlight_edges:
highlight_edges(Graph(G),Edge(e)||Lst(E),[Color(c)||Lst(C)])
@@ -6635,9 +6635,9 @@ cdef class GiacMethods_base:
See also: 1/ highlight_vertex 2/ highlight_subgraph 3/ highlight_trail
Ex1: draw_graph(highlight_edges(cycle_graph(3),[1,2]))
'''
- return GiacMethods['highlight_edges'](self,*args)
+ return GiacMethods['highlight_edges'](self, *args)
- def highlight_subgraph(self,*args):
+ def highlight_subgraph(self, *args):
r'''From Giac's documentation:
Help for highlight_subgraph:
highlight_subgraph(Graph(G),Graph(S)||Lst(S1,S2,..),Seq(c1,c2))
@@ -6645,9 +6645,9 @@ cdef class GiacMethods_base:
See also: 1/ highlight_edges 2/ highlight_vertex 3/ highlight_trail
Ex1: draw_graph(highlight_subgraph(cycle_graph(5),path_graph(3)))
'''
- return GiacMethods['highlight_subgraph'](self,*args)
+ return GiacMethods['highlight_subgraph'](self, *args)
- def highlight_trail(self,*args):
+ def highlight_trail(self, *args):
r'''From Giac's documentation:
Help for highlight_trail:
highlight_trail(Graph(G),Trail(t)||Lst(T),[Color(c)||Lst(C)])
@@ -6655,9 +6655,9 @@ cdef class GiacMethods_base:
See also: 1/ highlight_edges 2/ highlight_subgraph 3/ highlight_vertex
Ex1: draw_graph(highlight_trail(cycle_graph(5),trail(1,2,3),green)
'''
- return GiacMethods['highlight_trail'](self,*args)
+ return GiacMethods['highlight_trail'](self, *args)
- def highlight_vertex(self,*args):
+ def highlight_vertex(self, *args):
r'''From Giac's documentation:
Help for highlight_vertex:
highlight_vertex(Graph(G),Vrtx(v)||Lst(V),[Color(c)||Lst(C)])
@@ -6665,9 +6665,9 @@ cdef class GiacMethods_base:
See also: 1/ highlight_edges 2/ highlight_subgraph 3/ highlight_trail
Ex1: draw_graph(highlight_vertex(cycle_graph(3),1))
'''
- return GiacMethods['highlight_vertex'](self,*args)
+ return GiacMethods['highlight_vertex'](self, *args)
- def highpass(self,*args):
+ def highpass(self, *args):
r'''From Giac's documentation:
Help for highpass:
highpass(Lst(s),Real(c),[Intg(samplerate)])
@@ -6675,9 +6675,9 @@ cdef class GiacMethods_base:
See also: 1/ lowpass 2/ moving_average
Ex1: f:=unapply(periodic(sign(x),x,-1/880,1/880),x):;s:=createwav(apply(f,soundsec(1))):;playsnd(highpass(s,5000))
'''
- return GiacMethods['highpass'](self,*args)
+ return GiacMethods['highpass'](self, *args)
- def hilbert(self,*args):
+ def hilbert(self, *args):
r'''From Giac's documentation:
Help for hilbert:
hilbert(Intg(n))
@@ -6685,9 +6685,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:hilbert(4)
'''
- return GiacMethods['hilbert'](self,*args)
+ return GiacMethods['hilbert'](self, *args)
- def histogram(self,*args):
+ def histogram(self, *args):
r'''From Giac's documentation:
Help for histogram:
histogram(Lst(data),[Lst(eff) || Intg(nc) || Real(classmin)],[Real(classsize)])
@@ -6702,9 +6702,9 @@ cdef class GiacMethods_base:
Ex7:histogram(seq(rand(1000),k,0,100),0,100)
Ex8:histogram(seq(rand(1000),k,0,100),10)
'''
- return GiacMethods['histogram'](self,*args)
+ return GiacMethods['histogram'](self, *args)
- def hold(self,*args):
+ def hold(self, *args):
r'''From Giac's documentation:
Help for hold:
hold(Expr)
@@ -6714,9 +6714,9 @@ cdef class GiacMethods_base:
Ex2:hold(1/x+1/(x-1))
Ex3:hold((x+1)*(x-1))
'''
- return GiacMethods['hold'](self,*args)
+ return GiacMethods['hold'](self, *args)
- def homogeneize(self,*args):
+ def homogeneize(self, *args):
r'''From Giac's documentation:
Help for homogeneize:
homogeneize(Expr(P),[Var(t)])
@@ -6724,9 +6724,9 @@ cdef class GiacMethods_base:
Ex1:homogeneize(x^2-1)
Ex2:homogeneize(x^2-y,z)
'''
- return GiacMethods['homogeneize'](self,*args)
+ return GiacMethods['homogeneize'](self, *args)
- def homothety(self,*args):
+ def homothety(self, *args):
r'''From Giac's documentation:
Help for homothety:
homothety(Pnt(C),Real(k),Pnt(A))
@@ -6737,9 +6737,9 @@ cdef class GiacMethods_base:
Ex3: h:=homothety(1+i,1/3);h(i)
Ex4: h:=homothety(point(1,1,1),1/3);h(point(0,1,0))
'''
- return GiacMethods['homothety'](self,*args)
+ return GiacMethods['homothety'](self, *args)
- def horner(self,*args):
+ def horner(self, *args):
r'''From Giac's documentation:
Help for horner:
horner(Poly(P),Real(a))
@@ -6750,9 +6750,9 @@ cdef class GiacMethods_base:
Ex3:horner(x^2+y*x+y^3-1,2,y)
Ex4: X:=[0.0,1.0,2.0]; A:=lagrange(X,exp,lagrange); horner(A,X,1.5);
'''
- return GiacMethods['horner'](self,*args)
+ return GiacMethods['horner'](self, *args)
- def hybrid_solver(self,*args):
+ def hybrid_solver(self, *args):
r'''From Giac's documentation:
Help for hybrid_solver:
hybrid_solver(Opt)
@@ -6765,9 +6765,9 @@ cdef class GiacMethods_base:
Ex5: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
Ex6: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],newtonj_solver)
'''
- return GiacMethods['hybrid_solver'](self,*args)
+ return GiacMethods['hybrid_solver'](self, *args)
- def hybridj_solver(self,*args):
+ def hybridj_solver(self, *args):
r'''From Giac's documentation:
Help for hybridj_solver:
hybridj_solver(Opt)
@@ -6780,9 +6780,9 @@ cdef class GiacMethods_base:
Ex5: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
Ex6: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],newtonj_solver)
'''
- return GiacMethods['hybridj_solver'](self,*args)
+ return GiacMethods['hybridj_solver'](self, *args)
- def hybrids_solver(self,*args):
+ def hybrids_solver(self, *args):
r'''From Giac's documentation:
Help for hybrids_solver:
hybrids_solver(Opt)
@@ -6795,9 +6795,9 @@ cdef class GiacMethods_base:
Ex5: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
Ex6: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],newtonj_solver)
'''
- return GiacMethods['hybrids_solver'](self,*args)
+ return GiacMethods['hybrids_solver'](self, *args)
- def hybridsj_solver(self,*args):
+ def hybridsj_solver(self, *args):
r'''From Giac's documentation:
Help for hybridsj_solver:
hybridsj_solver(Opt)
@@ -6810,9 +6810,9 @@ cdef class GiacMethods_base:
Ex5: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
Ex6: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],newtonj_solver)
'''
- return GiacMethods['hybridsj_solver'](self,*args)
+ return GiacMethods['hybridsj_solver'](self, *args)
- def hyp2exp(self,*args):
+ def hyp2exp(self, *args):
r'''From Giac's documentation:
Help for hyp2exp:
hyp2exp(ExprHyperb)
@@ -6820,9 +6820,9 @@ cdef class GiacMethods_base:
See also: 1/ halftan_hyp2exp
Ex1:hyp2exp(cosh(x))
'''
- return GiacMethods['hyp2exp'](self,*args)
+ return GiacMethods['hyp2exp'](self, *args)
- def hyperbola(self,*args):
+ def hyperbola(self, *args):
r'''From Giac's documentation:
Help for hyperbola:
hyperbola(Focus(F1),Focus(F2),(Pnt(M) or Real(a)))
@@ -6833,9 +6833,9 @@ cdef class GiacMethods_base:
Ex3:hyperbola(point(-1,0,0),point(1,0,0),point(1,1,1))
Ex4:hyperbola(x^2-y^2+y+2)
'''
- return GiacMethods['hyperbola'](self,*args)
+ return GiacMethods['hyperbola'](self, *args)
- def hypercube_graph(self,*args):
+ def hypercube_graph(self, *args):
r'''From Giac's documentation:
Help for hypercube_graph:
hypercube_graph(Intg(n))
@@ -6843,9 +6843,9 @@ cdef class GiacMethods_base:
See also: 1/ graph
Ex1:hypercube_graph(3)
'''
- return GiacMethods['hypercube_graph'](self,*args)
+ return GiacMethods['hypercube_graph'](self, *args)
- def iPart(self,*args):
+ def iPart(self, *args):
r'''From Giac's documentation:
Help for iPart:
iPart(Real||LstReal)
@@ -6855,9 +6855,9 @@ cdef class GiacMethods_base:
Ex2:iPart(sqrt(2))
Ex3:iPart(4.3,sqrt(2))
'''
- return GiacMethods['iPart'](self,*args)
+ return GiacMethods['iPart'](self, *args)
- def iabcuv(self,*args):
+ def iabcuv(self, *args):
r'''From Giac's documentation:
Help for iabcuv:
iabcuv(Intg(a),Intg(b),Intg(c))
@@ -6867,9 +6867,9 @@ cdef class GiacMethods_base:
Ex2:iabcuv(21,28,14)
Ex3:iabcuv(21,28,1)
'''
- return GiacMethods['iabcuv'](self,*args)
+ return GiacMethods['iabcuv'](self, *args)
- def ibasis(self,*args):
+ def ibasis(self, *args):
r'''From Giac's documentation:
Help for ibasis:
ibasis(Lst(Vect,..,Vect),Lst(Vect,..,Vect))
@@ -6877,9 +6877,9 @@ cdef class GiacMethods_base:
See also: 1/ basis
Ex1:ibasis([[1,0,0],[0,1,0]],[[1,1,1],[0,0,1]])
'''
- return GiacMethods['ibasis'](self,*args)
+ return GiacMethods['ibasis'](self, *args)
- def ibpdv(self,*args):
+ def ibpdv(self, *args):
r'''From Giac's documentation:
Help for ibpdv:
ibpdv(Expr(f(x)),Expr(v(x)),[Var(x)],[Real(a)],[Real(b)])
@@ -6891,9 +6891,9 @@ cdef class GiacMethods_base:
Ex4:ibpdv([x*ln(x),-1],0)
Ex5:ibpdv(ibpdv(ln(x),x,x,2,3),0,x,2,3)
'''
- return GiacMethods['ibpdv'](self,*args)
+ return GiacMethods['ibpdv'](self, *args)
- def ibpu(self,*args):
+ def ibpu(self, *args):
r'''From Giac's documentation:
Help for ibpu:
ibpu(Expr(f(x)),Expr(u(x)),[Var(x)],[Real(a)],[Real(b)])
@@ -6905,9 +6905,9 @@ cdef class GiacMethods_base:
Ex4:ibpu([x*ln(x),-1],0)
Ex5:ibpu(ibpu(ln(x),ln(x),x,2,3),0,x,2,3)
'''
- return GiacMethods['ibpu'](self,*args)
+ return GiacMethods['ibpu'](self, *args)
- def icdf(self,*args):
+ def icdf(self, *args):
r'''From Giac's documentation:
Help for icdf:
icdf(Func,FuncParams)
@@ -6916,9 +6916,9 @@ cdef class GiacMethods_base:
Ex1:icdf(binomial,10,0.5,0.6)
Ex2:icdf(normald,0.0,1.0,0.975)
'''
- return GiacMethods['icdf'](self,*args)
+ return GiacMethods['icdf'](self, *args)
- def ichinrem(self,*args):
+ def ichinrem(self, *args):
r'''From Giac's documentation:
Help for ichinrem:
ichinrem(LstIntg(a,p),LstIntg(b,q))
@@ -6929,9 +6929,9 @@ cdef class GiacMethods_base:
Ex3:ichinrem([2%7,3%5,1%9])
Ex4:ichinrem([(x+1)%2,(x+2)%3,(3*x-1)%5])
'''
- return GiacMethods['ichinrem'](self,*args)
+ return GiacMethods['ichinrem'](self, *args)
- def ichrem(self,*args):
+ def ichrem(self, *args):
r'''From Giac's documentation:
Help for ichrem:
ichrem(LstIntg(a,p),LstIntg(b,q))
@@ -6942,9 +6942,9 @@ cdef class GiacMethods_base:
Ex3:ichrem([2%7,3%5,1%9])
Ex4:ichrem([(x+1)%2,(x+2)%3,(3*x-1)%5])
'''
- return GiacMethods['ichrem'](self,*args)
+ return GiacMethods['ichrem'](self, *args)
- def icomp(self,*args):
+ def icomp(self, *args):
r'''From Giac's documentation:
Help for icomp:
icomp(Intg(n),Intg(k),[zeros=true||false])
@@ -6953,9 +6953,9 @@ cdef class GiacMethods_base:
Ex1:icomp(4,2)
Ex2:icomp(6,3,zeros=false)
'''
- return GiacMethods['icomp'](self,*args)
+ return GiacMethods['icomp'](self, *args)
- def icontent(self,*args):
+ def icontent(self, *args):
r'''From Giac's documentation:
Help for icontent:
icontent(Poly,[Var])
@@ -6964,9 +6964,9 @@ cdef class GiacMethods_base:
Ex1:icontent(24x^3+6x^2-12x+18)
Ex2:icontent(24t^3+6t^2-12t+18,t)
'''
- return GiacMethods['icontent'](self,*args)
+ return GiacMethods['icontent'](self, *args)
- def icosahedron(self,*args):
+ def icosahedron(self, *args):
r'''From Giac's documentation:
Help for icosahedron:
icosahedron(Pnt(A),Pnt(B),Pnt(C))
@@ -6975,9 +6975,9 @@ cdef class GiacMethods_base:
Ex1:icosahedron([0,0,0],[sqrt(5),0,0],[1,2,0])
Ex2:icosahedron(evalf([0,0,0],[3,2,4],[1,1,0]))
'''
- return GiacMethods['icosahedron'](self,*args)
+ return GiacMethods['icosahedron'](self, *args)
- def id(self,*args):
+ def id(self, *args):
r'''From Giac's documentation:
Help for id:
id(Seq)
@@ -6985,9 +6985,9 @@ cdef class GiacMethods_base:
See also: 1/ sq 2/ sqrt
Ex1:id(1,2,3)
'''
- return GiacMethods['id'](self,*args)
+ return GiacMethods['id'](self, *args)
- def identity(self,*args):
+ def identity(self, *args):
r'''From Giac's documentation:
Help for identity:
identity(Intg(n))
@@ -6996,9 +6996,9 @@ cdef class GiacMethods_base:
Ex1:identity(3)
Ex2:identity(5)
'''
- return GiacMethods['identity'](self,*args)
+ return GiacMethods['identity'](self, *args)
- def idivis(self,*args):
+ def idivis(self, *args):
r'''From Giac's documentation:
Help for idivis:
idivis(Intg(a) or LstIntg)
@@ -7007,9 +7007,9 @@ cdef class GiacMethods_base:
Ex1:idivis(36)
Ex2:idivis([36,49])
'''
- return GiacMethods['idivis'](self,*args)
+ return GiacMethods['idivis'](self, *args)
- def idn(self,*args):
+ def idn(self, *args):
r'''From Giac's documentation:
Help for idn:
idn(Intg(n))
@@ -7018,9 +7018,9 @@ cdef class GiacMethods_base:
Ex1:idn(3)
Ex2:idn(5)
'''
- return GiacMethods['idn'](self,*args)
+ return GiacMethods['idn'](self, *args)
- def iegcd(self,*args):
+ def iegcd(self, *args):
r'''From Giac's documentation:
Help for iegcd:
iegcd(Intg,Intg)
@@ -7030,9 +7030,9 @@ cdef class GiacMethods_base:
Ex2:iegcd(21,28)
Ex3:iegcd(30,49)
'''
- return GiacMethods['iegcd'](self,*args)
+ return GiacMethods['iegcd'](self, *args)
- def ifactor(self,*args):
+ def ifactor(self, *args):
r'''From Giac's documentation:
Help for ifactor:
ifactor(Intg(a))
@@ -7041,9 +7041,9 @@ cdef class GiacMethods_base:
Ex1:ifactor(50)
Ex2:ifactor(123456789)
'''
- return GiacMethods['ifactor'](self,*args)
+ return GiacMethods['ifactor'](self, *args)
- def ifactors(self,*args):
+ def ifactors(self, *args):
r'''From Giac's documentation:
Help for ifactors:
ifactors(Intg(a) or LstIntg)
@@ -7052,9 +7052,9 @@ cdef class GiacMethods_base:
Ex1:ifactors(36)
Ex2:ifactors([36,52])
'''
- return GiacMethods['ifactors'](self,*args)
+ return GiacMethods['ifactors'](self, *args)
- def ifourier(self,*args):
+ def ifourier(self, *args):
r'''From Giac's documentation:
Help for ifourier:
ifourier(Expr(F(s)),[Var(s),[Var(x)]])
@@ -7068,9 +7068,9 @@ cdef class GiacMethods_base:
Ex6:ifourier(fourier(exp(-abs(x)),x,s)^2,s,x)
Ex7:ifourier(sinc(s),s,x)
'''
- return GiacMethods['ifourier'](self,*args)
+ return GiacMethods['ifourier'](self, *args)
- def igamma(self,*args):
+ def igamma(self, *args):
r'''From Giac's documentation:
Help for igamma:
igamma(Real(a),Real(x),[1])
@@ -7080,9 +7080,9 @@ cdef class GiacMethods_base:
Ex2:igamma(-5.1,2.1)
Ex3:igamma(5.0,2.0,1)
'''
- return GiacMethods['igamma'](self,*args)
+ return GiacMethods['igamma'](self, *args)
- def igcd(self,*args):
+ def igcd(self, *args):
r'''From Giac's documentation:
Help for igcd:
igcd((Intg(a) or Poly),(Intg(b) or Poly))
@@ -7094,9 +7094,9 @@ cdef class GiacMethods_base:
Ex4:igcd(t^2-2*t+1,t^2+t-2)
Ex5:igcd((x^2-1)*(y^2-1)*z^2,x^3*y^3*z+(-(y^3))*z+x^3*z-z)
'''
- return GiacMethods['igcd'](self,*args)
+ return GiacMethods['igcd'](self, *args)
- def igcdex(self,*args):
+ def igcdex(self, *args):
r'''From Giac's documentation:
Help for igcdex:
igcdex(Intg,Intg)
@@ -7106,9 +7106,9 @@ cdef class GiacMethods_base:
Ex2:igcdex(21,28)
Ex3:igcdex(30,49)
'''
- return GiacMethods['igcdex'](self,*args)
+ return GiacMethods['igcdex'](self, *args)
- def ihermite(self,*args):
+ def ihermite(self, *args):
r'''From Giac's documentation:
Help for ihermite:
ihermite(Mtrx(A))
@@ -7117,9 +7117,9 @@ cdef class GiacMethods_base:
Ex1:ihermite([[9,-36,30], [-36,192,-180], [30,-180,180]])
Ex2:ihermite([[1,2,3],[4,5,6],[7,8,9]])
'''
- return GiacMethods['ihermite'](self,*args)
+ return GiacMethods['ihermite'](self, *args)
- def ilaplace(self,*args):
+ def ilaplace(self, *args):
r'''From Giac's documentation:
Help for ilaplace:
ilaplace(Expr,[Var],[IlapVar])
@@ -7129,9 +7129,9 @@ cdef class GiacMethods_base:
Ex2:ilaplace(s/(s^4-1),s,x)
Ex3:ilaplace(exp(-s)/s,s,x)
'''
- return GiacMethods['ilaplace'](self,*args)
+ return GiacMethods['ilaplace'](self, *args)
- def im(self,*args):
+ def im(self, *args):
r'''From Giac's documentation:
Help for im:
im(Cplx)
@@ -7141,9 +7141,9 @@ cdef class GiacMethods_base:
Ex2:im((1+2*i)^2)
Ex3:im([1+2*i,(1+2*i)^2])
'''
- return GiacMethods['im'](self,*args)
+ return GiacMethods['im'](self, *args)
- def imag(self,*args):
+ def imag(self, *args):
r'''From Giac's documentation:
Help for imag:
imag(Cplx)
@@ -7153,9 +7153,9 @@ cdef class GiacMethods_base:
Ex2:imag((1+2*i)^2)
Ex3:imag([1+2*i,(1+2*i)^2])
'''
- return GiacMethods['imag'](self,*args)
+ return GiacMethods['imag'](self, *args)
- def image(self,*args):
+ def image(self, *args):
r'''From Giac's documentation:
Help for image:
image(Mtrx(M))
@@ -7164,9 +7164,9 @@ cdef class GiacMethods_base:
Ex1:image([[1,2],[3,6]])
Ex2:image([[1,2,3],[1,3,6],[2,5,9]])
'''
- return GiacMethods['image'](self,*args)
+ return GiacMethods['image'](self, *args)
- def implicitdiff(self,*args):
+ def implicitdiff(self, *args):
r'''From Giac's documentation:
Help for implicitdiff:
implicitdiff(constr,[depvars],y,diffvars)
@@ -7191,9 +7191,9 @@ cdef class GiacMethods_base:
Ex17:implicitdiff(x*y*z,-2x^3+15x^2*y+11y^3-24y=0,[x,z,y],order=2,[1,-1,0])
Ex18: pd:=implicitdiff(x*y*z,-2x^3+15x^2*y+11y^3-24y=0,[x,z,y],order=4,[0,z,0]);pd[4,0,0]
'''
- return GiacMethods['implicitdiff'](self,*args)
+ return GiacMethods['implicitdiff'](self, *args)
- def implicitplot(self,*args):
+ def implicitplot(self, *args):
r'''From Giac's documentation:
Help for implicitplot:
implicitplot(Expr,Var1,Var2)
@@ -7209,18 +7209,18 @@ cdef class GiacMethods_base:
Ex8:implicitplot((x+5)^2+(y+4)^2-1,x=-6..-4,y=-5..-3)
Ex9:implicitplot((x+5)^2+(y+4)^2-1,[x=-6..-4,y=-5..-3])
'''
- return GiacMethods['implicitplot'](self,*args)
+ return GiacMethods['implicitplot'](self, *args)
- def import_graph(self,*args):
+ def import_graph(self, *args):
r'''From Giac's documentation:
Help for import_graph:
import_graph(Str("path/to/graphname[.dot]"))
Returns the graph constructed from instructions in the file 'path/to/graphname.dot' (in dot format), or "undef" on failure.
Ex1:import_graph("K5.dot")
'''
- return GiacMethods['import_graph'](self,*args)
+ return GiacMethods['import_graph'](self, *args)
- def inString(self,*args):
+ def inString(self, *args):
r'''From Giac's documentation:
Help for inString:
inString(Str(l),Elem(e))
@@ -7229,9 +7229,9 @@ cdef class GiacMethods_base:
Ex1:inString("abcd","b")
Ex2:inString("abcd","e")
'''
- return GiacMethods['inString'](self,*args)
+ return GiacMethods['inString'](self, *args)
- def in_ideal(self,*args):
+ def in_ideal(self, *args):
r'''From Giac's documentation:
Help for in_ideal:
in_ideal(Poly,Lst,LstVar,[order])
@@ -7240,9 +7240,9 @@ cdef class GiacMethods_base:
Ex1:in_ideal((x+y)^2,[y^2,x^2+2*x*y],[x,y])
Ex2:in_ideal(x+y,[y^2,x^2+2*x*y],[x,y])
'''
- return GiacMethods['in_ideal'](self,*args)
+ return GiacMethods['in_ideal'](self, *args)
- def incidence_matrix(self,*args):
+ def incidence_matrix(self, *args):
r'''From Giac's documentation:
Help for incidence_matrix:
incidence_matrix(Graph(G))
@@ -7250,9 +7250,9 @@ cdef class GiacMethods_base:
See also: 1/ incident_edges
Ex1:incidence_matrix(graph("tetrahedron"))
'''
- return GiacMethods['incidence_matrix'](self,*args)
+ return GiacMethods['incidence_matrix'](self, *args)
- def incident_edges(self,*args):
+ def incident_edges(self, *args):
r'''From Giac's documentation:
Help for incident_edges:
incident_edges(Graph(G),Vrtx(v))
@@ -7260,9 +7260,9 @@ cdef class GiacMethods_base:
See also: 1/ adjacency_matrix 2/ vertex_degree 3/ incidence_matrix 4/ neighbors
Ex1:incident_edges(cycle_graph(8),[1,5,7])
'''
- return GiacMethods['incident_edges'](self,*args)
+ return GiacMethods['incident_edges'](self, *args)
- def incircle(self,*args):
+ def incircle(self, *args):
r'''From Giac's documentation:
Help for incircle:
incircle((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -7270,9 +7270,9 @@ cdef class GiacMethods_base:
See also: 1/ excircle 2/ circumcircle
Ex1:incircle(0,1,1+i)
'''
- return GiacMethods['incircle'](self,*args)
+ return GiacMethods['incircle'](self, *args)
- def increasing_power(self,*args):
+ def increasing_power(self, *args):
r'''From Giac's documentation:
Help for increasing_power:
increasing_power(:=Intg(0 or 1))
@@ -7281,9 +7281,9 @@ cdef class GiacMethods_base:
Ex1: increasing_power:=1
Ex2: increasing_power:=0
'''
- return GiacMethods['increasing_power'](self,*args)
+ return GiacMethods['increasing_power'](self, *args)
- def independence_number(self,*args):
+ def independence_number(self, *args):
r'''From Giac's documentation:
Help for independence_number:
independence_number(Graph(G))
@@ -7291,9 +7291,9 @@ cdef class GiacMethods_base:
See also: 1/ clique_number 2/ graph_complement 3/ maximum_clique 4/ maximum_independent_set
Ex1:independence_number(complete_graph(3,4))
'''
- return GiacMethods['independence_number'](self,*args)
+ return GiacMethods['independence_number'](self, *args)
- def indets(self,*args):
+ def indets(self, *args):
r'''From Giac's documentation:
Help for indets:
indets(Expr)
@@ -7301,9 +7301,9 @@ cdef class GiacMethods_base:
See also: 1/ has 2/ lvar
Ex1:indets(exp(x)*2*sin(y))
'''
- return GiacMethods['indets'](self,*args)
+ return GiacMethods['indets'](self, *args)
- def index(self,*args):
+ def index(self, *args):
r'''From Giac's documentation:
Help for index:
index(Vect,Expr)
@@ -7314,9 +7314,9 @@ cdef class GiacMethods_base:
Ex3:index(%{4,3,1,2%},1)
Ex4:index("abracadabrant","c")
'''
- return GiacMethods['index'](self,*args)
+ return GiacMethods['index'](self, *args)
- def induced_subgraph(self,*args):
+ def induced_subgraph(self, *args):
r'''From Giac's documentation:
Help for induced_subgraph:
induced_subgraph(Graph(G),Lst(V))
@@ -7324,9 +7324,9 @@ cdef class GiacMethods_base:
See also: 1/ subgraph
Ex1:induced_subgraph(cycle_graph(6),[1,2,6])
'''
- return GiacMethods['induced_subgraph'](self,*args)
+ return GiacMethods['induced_subgraph'](self, *args)
- def inequationplot(self,*args):
+ def inequationplot(self, *args):
r'''From Giac's documentation:
Help for inequationplot:
inequationplot(Expr,[x=xrange,y=yrange],[xstep],[ystep])
@@ -7337,27 +7337,27 @@ cdef class GiacMethods_base:
Ex3:inequationplot(3-(x^2-y^2),[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
Ex4:inequationplot([x+y>3,x^2ifte(x<5,"A","B"),1,10)
'''
- return GiacMethods['makelist'](self,*args)
+ return GiacMethods['makelist'](self, *args)
- def makemat(self,*args):
+ def makemat(self, *args):
r'''From Giac's documentation:
Help for makemat:
makemat(Fnct(f),RowsNumb,ColsNumb)
@@ -9669,9 +9669,9 @@ cdef class GiacMethods_base:
Ex2:makemat((j,k)->1/(j+k+1),2,3)
Ex3:makemat(sqrt(2),2,3)
'''
- return GiacMethods['makemat'](self,*args)
+ return GiacMethods['makemat'](self, *args)
- def makesuite(self,*args):
+ def makesuite(self, *args):
r'''From Giac's documentation:
Help for makesuite:
makesuite(Vect||Lst)
@@ -9679,9 +9679,9 @@ cdef class GiacMethods_base:
See also: 1/ makevector 2/ op
Ex1:makesuite([1,2,3])
'''
- return GiacMethods['makesuite'](self,*args)
+ return GiacMethods['makesuite'](self, *args)
- def makevector(self,*args):
+ def makevector(self, *args):
r'''From Giac's documentation:
Help for makevector:
makevector(Seq)
@@ -9689,9 +9689,9 @@ cdef class GiacMethods_base:
See also: 1/ makesuite
Ex1:makevector(1,2,3)
'''
- return GiacMethods['makevector'](self,*args)
+ return GiacMethods['makevector'](self, *args)
- def map(self,*args):
+ def map(self, *args):
r'''From Giac's documentation:
Help for map:
map(Lst(l),Fnc(f))
@@ -9701,27 +9701,27 @@ cdef class GiacMethods_base:
Ex2:map([1,2,3],unapply(x^3,x))
Ex3:map(%%%{1,[2,0]%%%}+%%%{2,[1,1]%%%},(a,b,c)->a*(b+2*c))
'''
- return GiacMethods['map'](self,*args)
+ return GiacMethods['map'](self, *args)
- def maple2mupad(self,*args):
+ def maple2mupad(self, *args):
r'''From Giac's documentation:
Help for maple2mupad:
maple2mupad(Str("Name_Maplefile"),Str("Name_Mupadfile"))
maple2mupad("file1","file2") translates file1(Maple) to file2(MuPAD).
See also: 1/ maple2xcas
'''
- return GiacMethods['maple2mupad'](self,*args)
+ return GiacMethods['maple2mupad'](self, *args)
- def maple2xcas(self,*args):
+ def maple2xcas(self, *args):
r'''From Giac's documentation:
Help for maple2xcas:
maple2xcas(Str("NameMapleFile"),Str("NameXcasFile"))
maple2xcas("file1","file2") translates file1(Maple) to file2(Xcas).
See also: 1/ maple2mupad
'''
- return GiacMethods['maple2xcas'](self,*args)
+ return GiacMethods['maple2xcas'](self, *args)
- def maple_ifactors(self,*args):
+ def maple_ifactors(self, *args):
r'''From Giac's documentation:
Help for maple_ifactors:
maple_ifactors(Intg(n))
@@ -9729,9 +9729,9 @@ cdef class GiacMethods_base:
See also: 1/ ifactors
Ex1:maple_ifactors(120)
'''
- return GiacMethods['maple_ifactors'](self,*args)
+ return GiacMethods['maple_ifactors'](self, *args)
- def maple_mode(self,*args):
+ def maple_mode(self, *args):
r'''From Giac's documentation:
Help for maple_mode:
maple_mode(Intg(0) or 1 or 2 or 3)
@@ -9740,9 +9740,9 @@ cdef class GiacMethods_base:
Ex1:maple_mode(1)
Ex2:maple_mode(0)
'''
- return GiacMethods['maple_mode'](self,*args)
+ return GiacMethods['maple_mode'](self, *args)
- def markov(self,*args):
+ def markov(self, *args):
r'''From Giac's documentation:
Help for markov:
markov(Mtrx(M),[Real(eps)])
@@ -9750,9 +9750,9 @@ cdef class GiacMethods_base:
See also: 1/ randmarkov 2/ plotproba
Ex1:markov([[0,0,1/2,0,1/2],[0,0,1,0,0],[1/4,1/4,0,1/4,1/4],[0,0,1/2,0,1/2],[0,0,0,0,1]])
'''
- return GiacMethods['markov'](self,*args)
+ return GiacMethods['markov'](self, *args)
- def mat2list(self,*args):
+ def mat2list(self, *args):
r'''From Giac's documentation:
Help for mat2list:
mat2list(Mtrx)
@@ -9760,9 +9760,9 @@ cdef class GiacMethods_base:
See also: 1/ list2mat 2/ flatten
Ex1:mat2list([[1,8],[4,9]])
'''
- return GiacMethods['mat2list'](self,*args)
+ return GiacMethods['mat2list'](self, *args)
- def mathml(self,*args):
+ def mathml(self, *args):
r'''From Giac's documentation:
Help for mathml:
mathml(Expr)
@@ -9770,9 +9770,9 @@ cdef class GiacMethods_base:
See also: 1/ export_mathml 2/ latex
Ex1:mathml(1/2)
'''
- return GiacMethods['mathml'](self,*args)
+ return GiacMethods['mathml'](self, *args)
- def matpow(self,*args):
+ def matpow(self, *args):
r'''From Giac's documentation:
Help for matpow:
matpow(Mtrx,Intg(n))
@@ -9780,9 +9780,9 @@ cdef class GiacMethods_base:
See also: 1/ &^ 2/ ^
Ex1:matpow([[1,2],[3,4]],n)
'''
- return GiacMethods['matpow'](self,*args)
+ return GiacMethods['matpow'](self, *args)
- def matrix(self,*args):
+ def matrix(self, *args):
r'''From Giac's documentation:
Help for matrix:
matrix(Intg(p),Intg(q),(Fnc(f) or Val(a)))
@@ -9793,9 +9793,9 @@ cdef class GiacMethods_base:
Ex3:matrix(2,3,4)
Ex4: A[0..2,0..2]:=1;A[0..1,1..2]:=2;a:=matrix(A)
'''
- return GiacMethods['matrix'](self,*args)
+ return GiacMethods['matrix'](self, *args)
- def matrix_norm(self,*args):
+ def matrix_norm(self, *args):
r'''From Giac's documentation:
Help for matrix_norm:
matrix_norm(Mtrx,[2]||[inf])
@@ -9806,9 +9806,9 @@ cdef class GiacMethods_base:
Ex3:matrix_norm([[1,2,3],[3,-9,6],[4,5,6]],2)
Ex4:matrix_norm([[1,2,3],[3,-9,6],[4,5,6]],inf)
'''
- return GiacMethods['matrix_norm'](self,*args)
+ return GiacMethods['matrix_norm'](self, *args)
- def max(self,*args):
+ def max(self, *args):
r'''From Giac's documentation:
Help for max:
max(Seq||Lst)
@@ -9816,9 +9816,9 @@ cdef class GiacMethods_base:
See also: 1/ min
Ex1:max(25,35)
'''
- return GiacMethods['max'](self,*args)
+ return GiacMethods['max'](self, *args)
- def maxflow(self,*args):
+ def maxflow(self, *args):
r'''From Giac's documentation:
Help for maxflow:
maxflow(Graph(G),Vrtx(s),Vrtx(t))
@@ -9826,9 +9826,9 @@ cdef class GiacMethods_base:
See also: 1/ minimum_cut
Ex1:maxflow(digraph(%{[[1,2],2],[[2,3],4],[[3,4],3],[[1,5],3],[[5,2],1],[[5,4],2]%}),1,4)
'''
- return GiacMethods['maxflow'](self,*args)
+ return GiacMethods['maxflow'](self, *args)
- def maximal_independent_set(self,*args):
+ def maximal_independent_set(self, *args):
r'''From Giac's documentation:
Help for maximal_independent_set:
maximal_independent_set(Graph(G))
@@ -9836,9 +9836,9 @@ cdef class GiacMethods_base:
See also: 1/ maximum_independent_set
Ex1:maximal_independent_set(graph("petersen"))
'''
- return GiacMethods['maximal_independent_set'](self,*args)
+ return GiacMethods['maximal_independent_set'](self, *args)
- def maximize(self,*args):
+ def maximize(self, *args):
r'''From Giac's documentation:
Help for maximize:
maximize(Expr,[Constr],Vars,[Options])
@@ -9852,9 +9852,9 @@ cdef class GiacMethods_base:
Ex7:maximize((1+x^2+3y+5x-4*x*y)/(1+x^2+y^2),x^2/4+y^2/3=9,[x,y])
Ex8:maximize(cos(x)^2+cos(y)^2,x+y=pi/4,[x,y],locus)
'''
- return GiacMethods['maximize'](self,*args)
+ return GiacMethods['maximize'](self, *args)
- def maximum_clique(self,*args):
+ def maximum_clique(self, *args):
r'''From Giac's documentation:
Help for maximum_clique:
maximum_clique(Graph(G))
@@ -9862,9 +9862,9 @@ cdef class GiacMethods_base:
See also: 1/ clique_number 2/ is_clique 3/ maximum_independent_set
Ex1:maximum_clique(graph_complement(complete_graph(3,4)))
'''
- return GiacMethods['maximum_clique'](self,*args)
+ return GiacMethods['maximum_clique'](self, *args)
- def maximum_degree(self,*args):
+ def maximum_degree(self, *args):
r'''From Giac's documentation:
Help for maximum_degree:
maximum_degree(Graph(G))
@@ -9872,9 +9872,9 @@ cdef class GiacMethods_base:
See also: 1/ minimum_degree 2/ vertex_degree
Ex1:maximum_degree(digraph(trail(1,2,3,4,5,6,4,7,8,2)))
'''
- return GiacMethods['maximum_degree'](self,*args)
+ return GiacMethods['maximum_degree'](self, *args)
- def maximum_independent_set(self,*args):
+ def maximum_independent_set(self, *args):
r'''From Giac's documentation:
Help for maximum_independent_set:
maximum_independent_set(Graph(G))
@@ -9882,9 +9882,9 @@ cdef class GiacMethods_base:
See also: 1/ clique_number 2/ graph_complement 3/ independence_number 4/ maximum_clique
Ex1:maximum_independent_set(complete_graph(3,4))
'''
- return GiacMethods['maximum_independent_set'](self,*args)
+ return GiacMethods['maximum_independent_set'](self, *args)
- def maximum_matching(self,*args):
+ def maximum_matching(self, *args):
r'''From Giac's documentation:
Help for maximum_matching:
maximum_matching(Graph(G))
@@ -9892,9 +9892,9 @@ cdef class GiacMethods_base:
See also: 1/ maximum_independent_set
Ex1: G:=graph("soccerball"); draw_graph(highlight_edges(G,maximum_matching(G)))
'''
- return GiacMethods['maximum_matching'](self,*args)
+ return GiacMethods['maximum_matching'](self, *args)
- def maxnorm(self,*args):
+ def maxnorm(self, *args):
r'''From Giac's documentation:
Help for maxnorm:
maxnorm(Vect or Mtrx)
@@ -9904,9 +9904,9 @@ cdef class GiacMethods_base:
Ex2:maxnorm([1,2,3,-4])
Ex3:maxnorm([[1,2],[3,-4]])
'''
- return GiacMethods['maxnorm'](self,*args)
+ return GiacMethods['maxnorm'](self, *args)
- def mean(self,*args):
+ def mean(self, *args):
r'''From Giac's documentation:
Help for mean:
mean(Lst||Mtrx,[Lst])
@@ -9916,9 +9916,9 @@ cdef class GiacMethods_base:
Ex2:mean([1,2,3],[1,2,3])
Ex3:mean([[1,2,3],[1,2,3]])
'''
- return GiacMethods['mean'](self,*args)
+ return GiacMethods['mean'](self, *args)
- def median(self,*args):
+ def median(self, *args):
r'''From Giac's documentation:
Help for median:
median(Lst||Mtrx,[Lst])
@@ -9927,9 +9927,9 @@ cdef class GiacMethods_base:
Ex1:median([1,2,3,5,10,4])
Ex2:median([1,2,3,5,10,4],[1,2,3,1,2,3])
'''
- return GiacMethods['median'](self,*args)
+ return GiacMethods['median'](self, *args)
- def median_line(self,*args):
+ def median_line(self, *args):
r'''From Giac's documentation:
Help for median_line:
median_line((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -9937,9 +9937,9 @@ cdef class GiacMethods_base:
See also: 1/ midpoint 2/ perpen_bisector
Ex1:median_line(-1,1-i,i)
'''
- return GiacMethods['median_line'](self,*args)
+ return GiacMethods['median_line'](self, *args)
- def member(self,*args):
+ def member(self, *args):
r'''From Giac's documentation:
Help for member:
member(Elem(e),(Lst(l) or Set(l)))
@@ -9948,9 +9948,9 @@ cdef class GiacMethods_base:
Ex1:member(1,[4,3,1,2])
Ex2:member(1,%{4,3,1,2%})
'''
- return GiacMethods['member'](self,*args)
+ return GiacMethods['member'](self, *args)
- def mgf(self,*args):
+ def mgf(self, *args):
r'''From Giac's documentation:
Help for mgf:
mgf(Func,[Real(Param_1),Real(Param_2)])
@@ -9959,9 +9959,9 @@ cdef class GiacMethods_base:
Ex2:mgf(poisson,5)
Ex3:mgf(binomial,n,p)
'''
- return GiacMethods['mgf'](self,*args)
+ return GiacMethods['mgf'](self, *args)
- def mid(self,*args):
+ def mid(self, *args):
r'''From Giac's documentation:
Help for mid:
mid(Lst(l) or Str(l),Intg(d),Intg(n))
@@ -9973,9 +9973,9 @@ cdef class GiacMethods_base:
Ex4:mid("azertyuiop",2)
Ex5:mid([[1,2],[3,4],[5,6]],1)
'''
- return GiacMethods['mid'](self,*args)
+ return GiacMethods['mid'](self, *args)
- def middle_point(self,*args):
+ def middle_point(self, *args):
r'''From Giac's documentation:
Help for middle_point:
middle_point(Opt)
@@ -9988,9 +9988,9 @@ cdef class GiacMethods_base:
Ex5: area(x^2,x=0..1,5,middle_point)
Ex6: area(x^2,x=0..1,5,trapezoid)
'''
- return GiacMethods['middle_point'](self,*args)
+ return GiacMethods['middle_point'](self, *args)
- def midpoint(self,*args):
+ def midpoint(self, *args):
r'''From Giac's documentation:
Help for midpoint:
midpoint((Pnt or Cplx),(Pnt or Cplx))
@@ -9998,9 +9998,9 @@ cdef class GiacMethods_base:
See also: 1/ median_line 2/ perpen_bisector
Ex1:midpoint(-2,2i)
'''
- return GiacMethods['midpoint'](self,*args)
+ return GiacMethods['midpoint'](self, *args)
- def min(self,*args):
+ def min(self, *args):
r'''From Giac's documentation:
Help for min:
min(Seq||Lst)
@@ -10008,9 +10008,9 @@ cdef class GiacMethods_base:
See also: 1/ max
Ex1:min(25,35)
'''
- return GiacMethods['min'](self,*args)
+ return GiacMethods['min'](self, *args)
- def minimal_edge_coloring(self,*args):
+ def minimal_edge_coloring(self, *args):
r'''From Giac's documentation:
Help for minimal_edge_coloring:
minimal_edge_coloring(Graph(G),[sto])
@@ -10019,9 +10019,9 @@ cdef class GiacMethods_base:
Ex1:minimal_edge_coloring(graph("petersen"))
Ex2: G:=minimal_edge_coloring(graph("dodecahedron"),sto); draw_graph(G)
'''
- return GiacMethods['minimal_edge_coloring'](self,*args)
+ return GiacMethods['minimal_edge_coloring'](self, *args)
- def minimal_spanning_tree(self,*args):
+ def minimal_spanning_tree(self, *args):
r'''From Giac's documentation:
Help for minimal_spanning_tree:
minimal_spanning_tree(Graph(G))
@@ -10029,9 +10029,9 @@ cdef class GiacMethods_base:
See also: 1/ spanning_tree
Ex1:minimal_spanning_tree(graph([[0,1,0,4,0,0],[1,0,1,0,4,0],[0,1,0,3,0,1],[4,0,3,0,1,0],[0,4,0,1,0,4],[0,0,1,0,4,0]]))
'''
- return GiacMethods['minimal_spanning_tree'](self,*args)
+ return GiacMethods['minimal_spanning_tree'](self, *args)
- def minimal_vertex_coloring(self,*args):
+ def minimal_vertex_coloring(self, *args):
r'''From Giac's documentation:
Help for minimal_vertex_coloring:
minimal_vertex_coloring(Graph(G),[sto])
@@ -10040,9 +10040,9 @@ cdef class GiacMethods_base:
Ex1:minimal_vertex_coloring(graph("petersen"))
Ex2: draw_graph(minimal_vertex_coloring(graph("petersen"),sto))
'''
- return GiacMethods['minimal_vertex_coloring'](self,*args)
+ return GiacMethods['minimal_vertex_coloring'](self, *args)
- def minimax(self,*args):
+ def minimax(self, *args):
r'''From Giac's documentation:
Help for minimax:
minimax(Expr,Var=a..b,n,[Options])
@@ -10058,9 +10058,9 @@ cdef class GiacMethods_base:
Ex9:minimax(min(1/cosh(3*sin(x)),sin(9x/10)),x=-3..4,30)
Ex10:minimax(when(x==0,0,exp(-1/x^2)),x=-1..1,25)
'''
- return GiacMethods['minimax'](self,*args)
+ return GiacMethods['minimax'](self, *args)
- def minimize(self,*args):
+ def minimize(self, *args):
r'''From Giac's documentation:
Help for minimize:
minimize(Expr,[Constr],Vars,[Options])
@@ -10074,9 +10074,9 @@ cdef class GiacMethods_base:
Ex7:minimize((1+x^2+3y+5x-4*x*y)/(1+x^2+y^2),x^2/4+y^2/3=9,[x,y])
Ex8:minimize(cos(x)^2+cos(y)^2,x+y=pi/4,[x,y],locus)
'''
- return GiacMethods['minimize'](self,*args)
+ return GiacMethods['minimize'](self, *args)
- def minimum_cut(self,*args):
+ def minimum_cut(self, *args):
r'''From Giac's documentation:
Help for minimum_cut:
minimum_cut(Graph(G),Vrtx(s),Vrtx(t))
@@ -10084,9 +10084,9 @@ cdef class GiacMethods_base:
See also: 1/ maxflow
Ex1:minimum_cut(digraph(%{[[1,2],2],[[2,3],4],[[3,4],3],[[1,5],3],[[5,2],1],[[5,4],2]%}),1,4)
'''
- return GiacMethods['minimum_cut'](self,*args)
+ return GiacMethods['minimum_cut'](self, *args)
- def minimum_degree(self,*args):
+ def minimum_degree(self, *args):
r'''From Giac's documentation:
Help for minimum_degree:
minimum_degree(Graph(G))
@@ -10094,9 +10094,9 @@ cdef class GiacMethods_base:
See also: 1/ maximum_degree 2/ vertex_degree
Ex1:minimum_degree(digraph(trail(1,2,3,4,5,6,4,7,8,2)))
'''
- return GiacMethods['minimum_degree'](self,*args)
+ return GiacMethods['minimum_degree'](self, *args)
- def mkisom(self,*args):
+ def mkisom(self, *args):
r'''From Giac's documentation:
Help for mkisom:
mkisom(Vect,(Sign(1) or -1))
@@ -10106,9 +10106,9 @@ cdef class GiacMethods_base:
Ex2:mkisom([[1,0,0],pi/3],-1)
Ex3:mkisom(pi,1)
'''
- return GiacMethods['mkisom'](self,*args)
+ return GiacMethods['mkisom'](self, *args)
- def mksa(self,*args):
+ def mksa(self, *args):
r'''From Giac's documentation:
Help for mksa:
mksa(Unit)
@@ -10116,9 +10116,9 @@ cdef class GiacMethods_base:
See also: 1/ convert 2/ ufactor
Ex1:mksa(1_N)
'''
- return GiacMethods['mksa'](self,*args)
+ return GiacMethods['mksa'](self, *args)
- def modgcd(self,*args):
+ def modgcd(self, *args):
r'''From Giac's documentation:
Help for modgcd:
modgcd(Poly,Poly)
@@ -10126,9 +10126,9 @@ cdef class GiacMethods_base:
See also: 1/ gcd 2/ heugcd 3/ ezgcd 4/ psrgcd
Ex1:modgcd(x^4-1,(x-1)^2)
'''
- return GiacMethods['modgcd'](self,*args)
+ return GiacMethods['modgcd'](self, *args)
- def mods(self,*args):
+ def mods(self, *args):
r'''From Giac's documentation:
Help for mods:
mods(Intg,Intg)
@@ -10138,18 +10138,18 @@ cdef class GiacMethods_base:
Ex2:mods(10,4)
Ex3:mods(11,7)
'''
- return GiacMethods['mods'](self,*args)
+ return GiacMethods['mods'](self, *args)
- def monotonic(self,*args):
+ def monotonic(self, *args):
r'''From Giac's documentation:
Help for monotonic:
monotonic()
Returns a real that increases as time passes
Ex1:monotonic()
'''
- return GiacMethods['monotonic'](self,*args)
+ return GiacMethods['monotonic'](self, *args)
- def montre_tortue(self,*args):
+ def montre_tortue(self, *args):
r'''From Giac's documentation:
Help for montre_tortue:
montre_tortue(NULL)
@@ -10157,9 +10157,9 @@ cdef class GiacMethods_base:
See also: 1/ cache_tortue
Ex1:montre_tortue()
'''
- return GiacMethods['montre_tortue'](self,*args)
+ return GiacMethods['montre_tortue'](self, *args)
- def moustache(self,*args):
+ def moustache(self, *args):
r'''From Giac's documentation:
Help for moustache:
moustache(Lst,[Lst],[x=a..b||y=a..b])
@@ -10170,9 +10170,9 @@ cdef class GiacMethods_base:
Ex3:moustache([1,2,3,5,10,4],[1,2,3,1,2,3])
Ex4:moustache([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]])
'''
- return GiacMethods['moustache'](self,*args)
+ return GiacMethods['moustache'](self, *args)
- def moving_average(self,*args):
+ def moving_average(self, *args):
r'''From Giac's documentation:
Help for moving_average:
moving_average(Lst(A),Intg(n))
@@ -10180,9 +10180,9 @@ cdef class GiacMethods_base:
See also: 1/ lowpass
Ex1: snd:=soundsec(2):;data:=0.5*threshold(3*sin(2*pi*220*snd),[-1.0,1.0])+randvector(length(snd),normald,0,0.05):;moving_average(data,25)
'''
- return GiacMethods['moving_average'](self,*args)
+ return GiacMethods['moving_average'](self, *args)
- def moyal(self,*args):
+ def moyal(self, *args):
r'''From Giac's documentation:
Help for moyal:
moyal(Expr,Expr,VectVar)
@@ -10190,9 +10190,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:moyal(x^2+y^4,x^4-y^2,[x,y],5)
'''
- return GiacMethods['moyal'](self,*args)
+ return GiacMethods['moyal'](self, *args)
- def moyenne(self,*args):
+ def moyenne(self, *args):
r'''From Giac's documentation:
Help for moyenne:
moyenne(Lst||Mtrx,[Lst])
@@ -10202,9 +10202,9 @@ cdef class GiacMethods_base:
Ex2:moyenne([1,2,3],[1,2,3])
Ex3:moyenne([[1,2,3],[1,2,3]])
'''
- return GiacMethods['moyenne'](self,*args)
+ return GiacMethods['moyenne'](self, *args)
- def mul(self,*args):
+ def mul(self, *args):
r'''From Giac's documentation:
Help for mul:
mul(Expr||Lst,[Var||Lst],[Intg(a)],[Intg(b)],[Intg(p)])
@@ -10218,9 +10218,9 @@ cdef class GiacMethods_base:
Ex6:mul([2,3,4],[5,6,7])
Ex7:mul([[2,3,4],[5,6,7]],[[2,3,4],[5,6,7]])
'''
- return GiacMethods['mul'](self,*args)
+ return GiacMethods['mul'](self, *args)
- def mult_c_conjugate(self,*args):
+ def mult_c_conjugate(self, *args):
r'''From Giac's documentation:
Help for mult_c_conjugate:
mult_c_conjugate(Expr)
@@ -10229,9 +10229,9 @@ cdef class GiacMethods_base:
Ex1:mult_c_conjugate(1/(3+i*2))
Ex2:mult_c_conjugate(3+i*2)
'''
- return GiacMethods['mult_c_conjugate'](self,*args)
+ return GiacMethods['mult_c_conjugate'](self, *args)
- def mult_conjugate(self,*args):
+ def mult_conjugate(self, *args):
r'''From Giac's documentation:
Help for mult_conjugate:
mult_conjugate(Expr)
@@ -10240,9 +10240,9 @@ cdef class GiacMethods_base:
Ex1:mult_conjugate(sqrt(3)-sqrt(2))
Ex2:mult_conjugate(1/(sqrt(3)-sqrt(2)))
'''
- return GiacMethods['mult_conjugate'](self,*args)
+ return GiacMethods['mult_conjugate'](self, *args)
- def multinomial(self,*args):
+ def multinomial(self, *args):
r'''From Giac's documentation:
Help for multinomial:
multinomial(Intg(n),Vect(p),Vect(k))
@@ -10253,9 +10253,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,multinomial,[1/2,1/3,1/6])
Ex4: ranm(4,3,multinomial,[1/2,1/3,1/6])
'''
- return GiacMethods['multinomial'](self,*args)
+ return GiacMethods['multinomial'](self, *args)
- def multiplier_conjugue(self,*args):
+ def multiplier_conjugue(self, *args):
r'''From Giac's documentation:
Help for multiplier_conjugue:
multiplier_conjugue(Expr)
@@ -10264,9 +10264,9 @@ cdef class GiacMethods_base:
Ex1:multiplier_conjugue(sqrt(3)-sqrt(2))
Ex2:multiplier_conjugue(1/(sqrt(3)-sqrt(2)))
'''
- return GiacMethods['multiplier_conjugue'](self,*args)
+ return GiacMethods['multiplier_conjugue'](self, *args)
- def multiplier_conjugue_complexe(self,*args):
+ def multiplier_conjugue_complexe(self, *args):
r'''From Giac's documentation:
Help for multiplier_conjugue_complexe:
multiplier_conjugue_complexe(Expr)
@@ -10275,9 +10275,9 @@ cdef class GiacMethods_base:
Ex1:multiplier_conjugue_complexe(1/(3+i*2))
Ex2:multiplier_conjugue_complexe(3+i*2)
'''
- return GiacMethods['multiplier_conjugue_complexe'](self,*args)
+ return GiacMethods['multiplier_conjugue_complexe'](self, *args)
- def multiply(self,*args):
+ def multiply(self, *args):
r'''From Giac's documentation:
Help for multiply:
multiply(Intg or Lst, Intg or Lst)
@@ -10287,27 +10287,27 @@ cdef class GiacMethods_base:
Ex2:multiply([4,1],[-4,2])
Ex3:multiply([[4,1],[-4,1]],[[4,1],[-4,1]])
'''
- return GiacMethods['multiply'](self,*args)
+ return GiacMethods['multiply'](self, *args)
- def mupad2maple(self,*args):
+ def mupad2maple(self, *args):
r'''From Giac's documentation:
Help for mupad2maple:
mupad2maple(Str("NameMupadFile"),Str("NameMapleFile"))
mupad2maple("file1","file2") translates file1(MuPAD) to file2(Maple).
See also: 1/ mupad2xcas
'''
- return GiacMethods['mupad2maple'](self,*args)
+ return GiacMethods['mupad2maple'](self, *args)
- def mupad2xcas(self,*args):
+ def mupad2xcas(self, *args):
r'''From Giac's documentation:
Help for mupad2xcas:
mupad2xcas(Str("NameMupadFile"),Str("NameXcasFile"))
mupad2xcas("file1","file2") translates file1(MuPAD) to file2(Xcas).
See also: 1/ mupad2maple
'''
- return GiacMethods['mupad2xcas'](self,*args)
+ return GiacMethods['mupad2xcas'](self, *args)
- def mycielski(self,*args):
+ def mycielski(self, *args):
r'''From Giac's documentation:
Help for mycielski:
mycielski(Graph(G))
@@ -10316,9 +10316,9 @@ cdef class GiacMethods_base:
Ex1:mycielski(graph("petersen"))
Ex2: is_isomorphic(mycielski(mycielski(path_graph(2))),graph("grotzsch"))
'''
- return GiacMethods['mycielski'](self,*args)
+ return GiacMethods['mycielski'](self, *args)
- def nCr(self,*args):
+ def nCr(self, *args):
r'''From Giac's documentation:
Help for nCr:
nCr(Intg(n),Intg(r))
@@ -10326,9 +10326,9 @@ cdef class GiacMethods_base:
See also: 1/ factorial 2/ perm
Ex1:nCr(4,2)
'''
- return GiacMethods['nCr'](self,*args)
+ return GiacMethods['nCr'](self, *args)
- def nDeriv(self,*args):
+ def nDeriv(self, *args):
r'''From Giac's documentation:
Help for nDeriv:
nDeriv(Expr(Xpr),Var(Var),[Real(h)])
@@ -10338,9 +10338,9 @@ cdef class GiacMethods_base:
Ex2:nDeriv(x^2,x,0.1)
Ex3:nDeriv(x^2,x)
'''
- return GiacMethods['nDeriv'](self,*args)
+ return GiacMethods['nDeriv'](self, *args)
- def nInt(self,*args):
+ def nInt(self, *args):
r'''From Giac's documentation:
Help for nInt:
nInt(Expr(f(x)),Var(x),Real(a),Real(b))
@@ -10350,9 +10350,9 @@ cdef class GiacMethods_base:
Ex2:nInt(x^2,x,0,1)
Ex3:nInt(exp(-x^2),x,-1,1)
'''
- return GiacMethods['nInt'](self,*args)
+ return GiacMethods['nInt'](self, *args)
- def nPr(self,*args):
+ def nPr(self, *args):
r'''From Giac's documentation:
Help for nPr:
nPr(Intg(n),Intg(p))
@@ -10360,9 +10360,9 @@ cdef class GiacMethods_base:
See also: 1/ comb 2/ factorial
Ex1:nPr(4,2)
'''
- return GiacMethods['nPr'](self,*args)
+ return GiacMethods['nPr'](self, *args)
- def nSolve(self,*args):
+ def nSolve(self, *args):
r'''From Giac's documentation:
Help for nSolve:
nSolve(Expr,Var,[Guess or Interval],[Method])
@@ -10371,9 +10371,9 @@ cdef class GiacMethods_base:
Ex1:nSolve(cos(x)=x,x)
Ex2:nSolve(cos(x)=x,x=1.3)
'''
- return GiacMethods['nSolve'](self,*args)
+ return GiacMethods['nSolve'](self, *args)
- def ncols(self,*args):
+ def ncols(self, *args):
r'''From Giac's documentation:
Help for ncols:
ncols(Mtrx)
@@ -10382,9 +10382,9 @@ cdef class GiacMethods_base:
Ex1:ncols([[1,2,3],[4,5,6]])
Ex2:ncols([[1,2],[3,4],[5,6]])
'''
- return GiacMethods['ncols'](self,*args)
+ return GiacMethods['ncols'](self, *args)
- def negbinomial(self,*args):
+ def negbinomial(self, *args):
r'''From Giac's documentation:
Help for negbinomial:
negbinomial(Intg(n),Intg(k),Real(p in 0..1))
@@ -10394,9 +10394,9 @@ cdef class GiacMethods_base:
Ex2:negbinomial(4,2,0.6)
Ex3:negbinomial(4,6,0.3)
'''
- return GiacMethods['negbinomial'](self,*args)
+ return GiacMethods['negbinomial'](self, *args)
- def negbinomial_cdf(self,*args):
+ def negbinomial_cdf(self, *args):
r'''From Giac's documentation:
Help for negbinomial_cdf:
negbinomial_cdf(Intg(n),Real(p),Real(x),[Real(y)])
@@ -10406,9 +10406,9 @@ cdef class GiacMethods_base:
Ex2:negbinomial_cdf(4,0.1,2)
Ex3:negbinomial_cdf(4,0.5,2,3)
'''
- return GiacMethods['negbinomial_cdf'](self,*args)
+ return GiacMethods['negbinomial_cdf'](self, *args)
- def negbinomial_icdf(self,*args):
+ def negbinomial_icdf(self, *args):
r'''From Giac's documentation:
Help for negbinomial_icdf:
negbinomial_icdf(Intg(n),Real(p),Real(t))
@@ -10417,9 +10417,9 @@ cdef class GiacMethods_base:
Ex1:negbinomial_icdf(4,0.5,0.68)
Ex2:negbinomial_icdf(4,0.1,0.95)
'''
- return GiacMethods['negbinomial_icdf'](self,*args)
+ return GiacMethods['negbinomial_icdf'](self, *args)
- def neighbors(self,*args):
+ def neighbors(self, *args):
r'''From Giac's documentation:
Help for neighbors:
neighbors(Graph(G),[Vrtx(v)])
@@ -10427,9 +10427,9 @@ cdef class GiacMethods_base:
See also: 1/ adjacency_matrix 2/ vertex_degree 3/ in_degree 3/ out_degree
Ex1:neighbors(digraph(trail(1,2,3,4,5,6,4,7,8,2)),4)
'''
- return GiacMethods['neighbors'](self,*args)
+ return GiacMethods['neighbors'](self, *args)
- def network_transitivity(self,*args):
+ def network_transitivity(self, *args):
r'''From Giac's documentation:
Help for network_transitivity:
network_transitivity(Graph(G))
@@ -10437,9 +10437,9 @@ cdef class GiacMethods_base:
See also: 1/ clustering_coefficient 2/ number_of_triangles
Ex1:network_transitivity(graph(%{[1,2],[2,3],[2,4],[3,4],[4,1]%}))
'''
- return GiacMethods['network_transitivity'](self,*args)
+ return GiacMethods['network_transitivity'](self, *args)
- def newList(self,*args):
+ def newList(self, *args):
r'''From Giac's documentation:
Help for newList:
newList(Intg(n))
@@ -10447,9 +10447,9 @@ cdef class GiacMethods_base:
See also: 1/ newMat 2/ makelist
Ex1:newList(4)
'''
- return GiacMethods['newList'](self,*args)
+ return GiacMethods['newList'](self, *args)
- def newMat(self,*args):
+ def newMat(self, *args):
r'''From Giac's documentation:
Help for newMat:
newMat(Intg(n),Intg(p))
@@ -10457,9 +10457,9 @@ cdef class GiacMethods_base:
See also: 1/ newList 2/ makemat
Ex1:newMat(2,3)
'''
- return GiacMethods['newMat'](self,*args)
+ return GiacMethods['newMat'](self, *args)
- def newton(self,*args):
+ def newton(self, *args):
r'''From Giac's documentation:
Help for newton:
newton(Expr(f(x)),Var(x),[ApproxVal(a),NumIter(p)])
@@ -10470,9 +10470,9 @@ cdef class GiacMethods_base:
Ex3:newton(x^2-2,x,-2)
Ex4:newton(x^2-2,x,2,5,1e-7)
'''
- return GiacMethods['newton'](self,*args)
+ return GiacMethods['newton'](self, *args)
- def newton_solver(self,*args):
+ def newton_solver(self, *args):
r'''From Giac's documentation:
Help for newton_solver:
newton_solver(Opt)
@@ -10485,9 +10485,9 @@ cdef class GiacMethods_base:
Ex5: fsolve(cos(x)=x,x,0,secant_solver)
Ex6: fsolve(cos(x)=x,x,0,steffenson_solver)
'''
- return GiacMethods['newton_solver'](self,*args)
+ return GiacMethods['newton_solver'](self, *args)
- def newtonj_solver(self,*args):
+ def newtonj_solver(self, *args):
r'''From Giac's documentation:
Help for newtonj_solver:
newtonj_solver(Opt)
@@ -10500,9 +10500,9 @@ cdef class GiacMethods_base:
Ex5: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
Ex6: fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],newtonj_solver)
'''
- return GiacMethods['newtonj_solver'](self,*args)
+ return GiacMethods['newtonj_solver'](self, *args)
- def nextperm(self,*args):
+ def nextperm(self, *args):
r'''From Giac's documentation:
Help for nextperm:
nextperm(Intg(n))
@@ -10511,9 +10511,9 @@ cdef class GiacMethods_base:
Ex1:nextperm([0,2,1,3])
Ex2:nextperm([0,3,2,1])
'''
- return GiacMethods['nextperm'](self,*args)
+ return GiacMethods['nextperm'](self, *args)
- def nextprime(self,*args):
+ def nextprime(self, *args):
r'''From Giac's documentation:
Help for nextprime:
nextprime(Intg(a))
@@ -10522,9 +10522,9 @@ cdef class GiacMethods_base:
Ex1:nextprime(9856989898990)
Ex2:nextprime(97160249868928888261606009)
'''
- return GiacMethods['nextprime'](self,*args)
+ return GiacMethods['nextprime'](self, *args)
- def nlpsolve(self,*args):
+ def nlpsolve(self, *args):
r'''From Giac's documentation:
Help for nlpsolve:
nlpsolve(objective, [constr], [bd], [opts])
@@ -10541,18 +10541,18 @@ cdef class GiacMethods_base:
Ex9:nlpsolve(w^3*(v-w)^2+(w-x-1)^2+(x-y-2)^2+(y-z-3)^2,[w+x+y+z<=5,3z+2v=3],assume=nlp_nonnegative)
Ex10:nlpsolve(sin(x)*Psi(x),x=1..20,nlp_initialpoint=[x=16])
'''
- return GiacMethods['nlpsolve'](self,*args)
+ return GiacMethods['nlpsolve'](self, *args)
- def nodisp(self,*args):
+ def nodisp(self, *args):
r'''From Giac's documentation:
Help for nodisp:
nodisp(Expr)
Displays Done in place of a value.
Ex1:nodisp(A:=ranm(50,50))
'''
- return GiacMethods['nodisp'](self,*args)
+ return GiacMethods['nodisp'](self, *args)
- def non_recursive_normal(self,*args):
+ def non_recursive_normal(self, *args):
r'''From Giac's documentation:
Help for non_recursive_normal:
non_recursive_normal(Expr)
@@ -10561,9 +10561,9 @@ cdef class GiacMethods_base:
Ex1:non_recursive_normal(sin(x+x)+sin(2*x)+x+x)
Ex2:non_recursive_normal(sin(2*x)+sin(2*x)+x+x)
'''
- return GiacMethods['non_recursive_normal'](self,*args)
+ return GiacMethods['non_recursive_normal'](self, *args)
- def nop(self,*args):
+ def nop(self, *args):
r'''From Giac's documentation:
Help for nop:
nop(NULL)
@@ -10571,9 +10571,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:nop()
'''
- return GiacMethods['nop'](self,*args)
+ return GiacMethods['nop'](self, *args)
- def nops(self,*args):
+ def nops(self, *args):
r'''From Giac's documentation:
Help for nops:
nops(Lst or Str or Seq)
@@ -10583,9 +10583,9 @@ cdef class GiacMethods_base:
Ex2:nops("bonjour")
Ex3:nops(1,2,3)
'''
- return GiacMethods['nops'](self,*args)
+ return GiacMethods['nops'](self, *args)
- def norm(self,*args):
+ def norm(self, *args):
r'''From Giac's documentation:
Help for norm:
norm(Vect or Mtrx)
@@ -10596,9 +10596,9 @@ cdef class GiacMethods_base:
Ex3:norm([[1,2],[3,-4]])
Ex4:norm([[1,2,3],[3,-9,6],[4,5,6]])
'''
- return GiacMethods['norm'](self,*args)
+ return GiacMethods['norm'](self, *args)
- def normal(self,*args):
+ def normal(self, *args):
r'''From Giac's documentation:
Help for normal:
normal(Expr)
@@ -10608,9 +10608,9 @@ cdef class GiacMethods_base:
Ex2:normal(2*x*2)
Ex3:normal((2*x+1)^2)
'''
- return GiacMethods['normal'](self,*args)
+ return GiacMethods['normal'](self, *args)
- def normal_cdf(self,*args):
+ def normal_cdf(self, *args):
r'''From Giac's documentation:
Help for normal_cdf:
normal_cdf(Real(mu),Real(sigma),Real(x0),[Real(y0)])
@@ -10620,9 +10620,9 @@ cdef class GiacMethods_base:
Ex2:normal_cdf(1,2,2.96*sqrt(2))
Ex3:normal_cdf(1,2,1.4*sqrt(2),2.96*sqrt(2))
'''
- return GiacMethods['normal_cdf'](self,*args)
+ return GiacMethods['normal_cdf'](self, *args)
- def normal_icdf(self,*args):
+ def normal_icdf(self, *args):
r'''From Giac's documentation:
Help for normal_icdf:
normal_icdf(Real(mu),Real(sigma),Real(p))
@@ -10631,9 +10631,9 @@ cdef class GiacMethods_base:
Ex1:normal_icdf(0.95)
Ex2:normal_icdf(1,2,0.95)
'''
- return GiacMethods['normal_icdf'](self,*args)
+ return GiacMethods['normal_icdf'](self, *args)
- def normald(self,*args):
+ def normald(self, *args):
r'''From Giac's documentation:
Help for normald:
normald(Real(mu),Real(sigma),Real(x0))
@@ -10644,9 +10644,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,normald,1,0.5)
Ex4: ranm(4,3,normald,1,0.5)
'''
- return GiacMethods['normald'](self,*args)
+ return GiacMethods['normald'](self, *args)
- def normald_cdf(self,*args):
+ def normald_cdf(self, *args):
r'''From Giac's documentation:
Help for normald_cdf:
normald_cdf(Real(mu),Real(sigma),Real(x0),[Real(y0)])
@@ -10656,9 +10656,9 @@ cdef class GiacMethods_base:
Ex2:normald_cdf(1,2,2.96*sqrt(2))
Ex3:normald_cdf(1,2,1.4*sqrt(2),2.96*sqrt(2))
'''
- return GiacMethods['normald_cdf'](self,*args)
+ return GiacMethods['normald_cdf'](self, *args)
- def normald_icdf(self,*args):
+ def normald_icdf(self, *args):
r'''From Giac's documentation:
Help for normald_icdf:
normald_icdf(Real(mu),Real(sigma),Real(p))
@@ -10667,9 +10667,9 @@ cdef class GiacMethods_base:
Ex1:normald_icdf(0.95)
Ex2:normald_icdf(1,2,0.95)
'''
- return GiacMethods['normald_icdf'](self,*args)
+ return GiacMethods['normald_icdf'](self, *args)
- def normalize(self,*args):
+ def normalize(self, *args):
r'''From Giac's documentation:
Help for normalize:
normalize(Lst||Cplx)
@@ -10680,9 +10680,9 @@ cdef class GiacMethods_base:
Ex3: fieldplot(-t*y,[t,y],normalize)
Ex4: fieldplot(-t*y,[t,y],normalize,xstep=0.5,ystep=0.5)
'''
- return GiacMethods['normalize'](self,*args)
+ return GiacMethods['normalize'](self, *args)
- def normalt(self,*args):
+ def normalt(self, *args):
r'''From Giac's documentation:
Help for normalt:
normalt(Lst,Real,[Real],Fnc,[Real])
@@ -10691,9 +10691,9 @@ cdef class GiacMethods_base:
Ex1:normalt([10,30],.5,.02,'!=',0.1)
Ex2:normalt([0.48,50],0.5,0.1,'<')
'''
- return GiacMethods['normalt'](self,*args)
+ return GiacMethods['normalt'](self, *args)
- def normalvariate(self,*args):
+ def normalvariate(self, *args):
r'''From Giac's documentation:
Help for normalvariate:
normalvariate(Real(mu),Real(sigma))
@@ -10702,9 +10702,9 @@ cdef class GiacMethods_base:
Ex1:normalvariate(0,1)
Ex2:normalvariate(2,1)
'''
- return GiacMethods['normalvariate'](self,*args)
+ return GiacMethods['normalvariate'](self, *args)
- def nprimes(self,*args):
+ def nprimes(self, *args):
r'''From Giac's documentation:
Help for nprimes:
nprimes(Intg(n))
@@ -10712,9 +10712,9 @@ cdef class GiacMethods_base:
See also: 1/ ithprime 2/ prevprime 3/ nextprime 4/ isprime
Ex1:nprimes(20)
'''
- return GiacMethods['nprimes'](self,*args)
+ return GiacMethods['nprimes'](self, *args)
- def nrows(self,*args):
+ def nrows(self, *args):
r'''From Giac's documentation:
Help for nrows:
nrows(Mtrx)
@@ -10723,9 +10723,9 @@ cdef class GiacMethods_base:
Ex1:nrows([[1,2,3],[4,5,6]])
Ex2:nrows([[1,2],[3,4],[5,6]])
'''
- return GiacMethods['nrows'](self,*args)
+ return GiacMethods['nrows'](self, *args)
- def nuage_points(self,*args):
+ def nuage_points(self, *args):
r'''From Giac's documentation:
Help for nuage_points:
nuage_points(Mtrx)
@@ -10733,9 +10733,9 @@ cdef class GiacMethods_base:
See also: 1/ polygonplot 2/ polygonscatterplot 3/ listplot
Ex1:nuage_points([[1,2,3],[2,0,1],[-1,2,3]])
'''
- return GiacMethods['nuage_points'](self,*args)
+ return GiacMethods['nuage_points'](self, *args)
- def nullspace(self,*args):
+ def nullspace(self, *args):
r'''From Giac's documentation:
Help for nullspace:
nullspace(Mtrx)
@@ -10744,9 +10744,9 @@ cdef class GiacMethods_base:
Ex1:nullspace([[1,2],[3,6]])
Ex2:nullspace([[1,2,3],[1,3,6],[2,5,9]])
'''
- return GiacMethods['nullspace'](self,*args)
+ return GiacMethods['nullspace'](self, *args)
- def number_of_edges(self,*args):
+ def number_of_edges(self, *args):
r'''From Giac's documentation:
Help for number_of_edges:
number_of_edges(Graph(G))
@@ -10754,9 +10754,9 @@ cdef class GiacMethods_base:
See also: 1/ edges 2/ number_of_vertices
Ex1:number_of_edges(complete_graph(5))
'''
- return GiacMethods['number_of_edges'](self,*args)
+ return GiacMethods['number_of_edges'](self, *args)
- def number_of_spanning_trees(self,*args):
+ def number_of_spanning_trees(self, *args):
r'''From Giac's documentation:
Help for number_of_spanning_trees:
number_of_spanning_trees(Graph(G))
@@ -10765,9 +10765,9 @@ cdef class GiacMethods_base:
Ex1:number_of_spanning_trees(complete_graph(4))
Ex2:number_of_spanning_trees(graph(trail(1,2,3,4,1,3)))
'''
- return GiacMethods['number_of_spanning_trees'](self,*args)
+ return GiacMethods['number_of_spanning_trees'](self, *args)
- def number_of_triangles(self,*args):
+ def number_of_triangles(self, *args):
r'''From Giac's documentation:
Help for number_of_triangles:
number_of_triangles(Graph(G))
@@ -10775,9 +10775,9 @@ cdef class GiacMethods_base:
See also: 1/ is_clique 2/ maximal_clique
Ex1:number_of_triangles(graph("tetrahedron"))
'''
- return GiacMethods['number_of_triangles'](self,*args)
+ return GiacMethods['number_of_triangles'](self, *args)
- def number_of_vertices(self,*args):
+ def number_of_vertices(self, *args):
r'''From Giac's documentation:
Help for number_of_vertices:
number_of_vertices(Graph(G))
@@ -10785,9 +10785,9 @@ cdef class GiacMethods_base:
See also: 1/ graph_vertices 2/ number_of_edges
Ex1:number_of_vertices(graph("petersen"))
'''
- return GiacMethods['number_of_vertices'](self,*args)
+ return GiacMethods['number_of_vertices'](self, *args)
- def numer(self,*args):
+ def numer(self, *args):
r'''From Giac's documentation:
Help for numer:
numer(Frac(a/b) or RatFrac)
@@ -10797,9 +10797,9 @@ cdef class GiacMethods_base:
Ex2:numer((x^3-1)/(x^2-1))
Ex3:numer(1+(x^3-1)/x^2)
'''
- return GiacMethods['numer'](self,*args)
+ return GiacMethods['numer'](self, *args)
- def octahedron(self,*args):
+ def octahedron(self, *args):
r'''From Giac's documentation:
Help for octahedron:
octahedron(Pnt(A),Pnt(B),Pnt(C))
@@ -10808,9 +10808,9 @@ cdef class GiacMethods_base:
Ex1:octahedron([0,0,0],[0,0,5],[0,5,0])
Ex2:octahedron(evalf([0,0,0],[3,2,4],[1,1,0]))
'''
- return GiacMethods['octahedron'](self,*args)
+ return GiacMethods['octahedron'](self, *args)
- def odd(self,*args):
+ def odd(self, *args):
r'''From Giac's documentation:
Help for odd:
odd(Intg(n))
@@ -10819,9 +10819,9 @@ cdef class GiacMethods_base:
Ex1:odd(6)
Ex2:odd(1251)
'''
- return GiacMethods['odd'](self,*args)
+ return GiacMethods['odd'](self, *args)
- def odd_girth(self,*args):
+ def odd_girth(self, *args):
r'''From Giac's documentation:
Help for odd_girth:
odd_girth(Graph(G))
@@ -10830,9 +10830,9 @@ cdef class GiacMethods_base:
Ex1:odd_girth(graph("petersen"))
Ex2:odd_girth(hypercube_graph(3))
'''
- return GiacMethods['odd_girth'](self,*args)
+ return GiacMethods['odd_girth'](self, *args)
- def odd_graph(self,*args):
+ def odd_graph(self, *args):
r'''From Giac's documentation:
Help for odd_graph:
odd_graph(Intg(n))
@@ -10840,9 +10840,9 @@ cdef class GiacMethods_base:
See also: 1/ kneser_graph
Ex1:odd_graph(3)
'''
- return GiacMethods['odd_graph'](self,*args)
+ return GiacMethods['odd_graph'](self, *args)
- def odeplot(self,*args):
+ def odeplot(self, *args):
r'''From Giac's documentation:
Help for odeplot:
odeplot(Expr,VectVar,VectInitCond)
@@ -10856,9 +10856,9 @@ cdef class GiacMethods_base:
Ex6:odeplot([-y+b,-1+(x-a)^2+(y-b)^2],[t=-3..3,x,y],[0,a+1,b+0.5],plan)
Ex7:odeplot(5*[-y,x],[t=0..1,x,y],[0,0.3,0.7],tstep=0.05,plan)
'''
- return GiacMethods['odeplot'](self,*args)
+ return GiacMethods['odeplot'](self, *args)
- def odesolve(self,*args):
+ def odesolve(self, *args):
r'''From Giac's documentation:
Help for odesolve:
odesolve(Expr,VectVar,VectInitCond,FinalVal,[tstep=Val,curve])
@@ -10870,9 +10870,9 @@ cdef class GiacMethods_base:
Ex4:odesolve(sin(t*y),t=0..2,y,1,tstep=0.5)
Ex5:odesolve(sin(t*y),t=0..2,y,1,tstep=0.5,curve)
'''
- return GiacMethods['odesolve'](self,*args)
+ return GiacMethods['odesolve'](self, *args)
- def op(self,*args):
+ def op(self, *args):
r'''From Giac's documentation:
Help for op:
op(Op or Fnc)
@@ -10884,9 +10884,9 @@ cdef class GiacMethods_base:
Ex4:op([1,2,3])
Ex5:op(set[1,2,3])
'''
- return GiacMethods['op'](self,*args)
+ return GiacMethods['op'](self, *args)
- def open_polygon(self,*args):
+ def open_polygon(self, *args):
r'''From Giac's documentation:
Help for open_polygon:
open_polygon(LstPnt||LstCplx)
@@ -10895,9 +10895,9 @@ cdef class GiacMethods_base:
Ex1:open_polygon(i,1+i,2-i,-1,-1+i/2)
Ex2:open_polygon(point(0,0,0),point(3,3,3),point(0,0,3),point(3,0,0))
'''
- return GiacMethods['open_polygon'](self,*args)
+ return GiacMethods['open_polygon'](self, *args)
- def ord(self,*args):
+ def ord(self, *args):
r'''From Giac's documentation:
Help for ord:
ord(Char||LstChar)
@@ -10907,9 +10907,9 @@ cdef class GiacMethods_base:
Ex2:ord("ABC")
Ex3:ord(["a","b","c"])
'''
- return GiacMethods['ord'](self,*args)
+ return GiacMethods['ord'](self, *args)
- def order(self,*args):
+ def order(self, *args):
r'''From Giac's documentation:
Help for order:
order(g)
@@ -10917,9 +10917,9 @@ cdef class GiacMethods_base:
Ex1:order(3 % 7)
Ex2: GF(3,5,g); order(g^2+g+1);
'''
- return GiacMethods['order'](self,*args)
+ return GiacMethods['order'](self, *args)
- def order_size(self,*args):
+ def order_size(self, *args):
r'''From Giac's documentation:
Help for order_size:
order_size(Expr)
@@ -10928,9 +10928,9 @@ cdef class GiacMethods_base:
Ex1:order_size(x)
Ex2: limit(sqrt(x)*order_size(x),x=0)
'''
- return GiacMethods['order_size'](self,*args)
+ return GiacMethods['order_size'](self, *args)
- def ordinate(self,*args):
+ def ordinate(self, *args):
r'''From Giac's documentation:
Help for ordinate:
ordinate(Pnt or Vect)
@@ -10941,9 +10941,9 @@ cdef class GiacMethods_base:
Ex3:ordinate(-1-i)
Ex4:ordinate(point(1,2,3))
'''
- return GiacMethods['ordinate'](self,*args)
+ return GiacMethods['ordinate'](self, *args)
- def orthocenter(self,*args):
+ def orthocenter(self, *args):
r'''From Giac's documentation:
Help for orthocenter:
orthocenter((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -10953,9 +10953,9 @@ cdef class GiacMethods_base:
Ex2:orthocenter(point(1+i),point(2),point(i))
Ex3:orthocenter(triangle(0,1,1+i))
'''
- return GiacMethods['orthocenter'](self,*args)
+ return GiacMethods['orthocenter'](self, *args)
- def orthogonal(self,*args):
+ def orthogonal(self, *args):
r'''From Giac's documentation:
Help for orthogonal:
orthogonal((Pnt),(Line or Plan))
@@ -10964,9 +10964,9 @@ cdef class GiacMethods_base:
Ex1:orthogonal(point(0,0,0),line(point(1,0,0),point(0,1,0)))
Ex2:orthogonal(point(0,0,0),plane(point(1,0,0),point(0,1,0),point(0,0,1)))
'''
- return GiacMethods['orthogonal'](self,*args)
+ return GiacMethods['orthogonal'](self, *args)
- def osculating_circle(self,*args):
+ def osculating_circle(self, *args):
r'''From Giac's documentation:
Help for osculating_circle:
osculating_circle(Curve,Point)
@@ -10979,9 +10979,9 @@ cdef class GiacMethods_base:
Ex5:osculating_circle([3*exp(t/2)*cos(t),3*exp(t/2)*sin(t)],t)
Ex6:osculating_circle([3*exp(t/2)*cos(t),3*exp(t/2)*sin(t)],t,7)
'''
- return GiacMethods['osculating_circle'](self,*args)
+ return GiacMethods['osculating_circle'](self, *args)
- def p1oc2(self,*args):
+ def p1oc2(self, *args):
r'''From Giac's documentation:
Help for p1oc2:
p1oc2(Permut,Cycle)
@@ -10989,9 +10989,9 @@ cdef class GiacMethods_base:
See also: 1/ c1op2 2/ p1op2
Ex1:p1oc2([0,2,1],[2,1,3])
'''
- return GiacMethods['p1oc2'](self,*args)
+ return GiacMethods['p1oc2'](self, *args)
- def p1op2(self,*args):
+ def p1op2(self, *args):
r'''From Giac's documentation:
Help for p1op2:
p1op2(Permut,Permut)
@@ -10999,9 +10999,9 @@ cdef class GiacMethods_base:
See also: 1/ c1op2 2/ p1oc2
Ex1:p1op2([0,2,1],[1,0,3,2])
'''
- return GiacMethods['p1op2'](self,*args)
+ return GiacMethods['p1op2'](self, *args)
- def pa2b2(self,*args):
+ def pa2b2(self, *args):
r'''From Giac's documentation:
Help for pa2b2:
pa2b2(Intg(n))
@@ -11010,9 +11010,9 @@ cdef class GiacMethods_base:
Ex2:pa2b2(209)
Ex3:pa2b2(229)
'''
- return GiacMethods['pa2b2'](self,*args)
+ return GiacMethods['pa2b2'](self, *args)
- def pade(self,*args):
+ def pade(self, *args):
r'''From Giac's documentation:
Help for pade:
pade(Expr(Xpr), Var(x), (Intg(n) || Poly(N)), Intg(p))
@@ -11020,9 +11020,9 @@ cdef class GiacMethods_base:
See also: 1/ taylor 2/ series
Ex1:pade(exp(x),x,10,6)
'''
- return GiacMethods['pade'](self,*args)
+ return GiacMethods['pade'](self, *args)
- def parabola(self,*args):
+ def parabola(self, *args):
r'''From Giac's documentation:
Help for parabola:
parabola(Pnt(F)||Pnt(xA+i*yA),Pnt(A)||Real(c),[Pnt(P)])
@@ -11033,9 +11033,9 @@ cdef class GiacMethods_base:
Ex3:parabola(point(0,0,0),point(1,0,0),point(1,1,1))
Ex4:parabola(x-y^2+y-2)
'''
- return GiacMethods['parabola'](self,*args)
+ return GiacMethods['parabola'](self, *args)
- def parallel(self,*args):
+ def parallel(self, *args):
r'''From Giac's documentation:
Help for parallel:
parallel(Pnt or Line,Line or Plan,[Line])
@@ -11049,9 +11049,9 @@ cdef class GiacMethods_base:
Ex6:parallel([1,0,0],line(x=0,y=0),line(x=y,y=z))
Ex7:parallel(line(x=y,y=z),line(x=0,y=0))
'''
- return GiacMethods['parallel'](self,*args)
+ return GiacMethods['parallel'](self, *args)
- def parallelepiped(self,*args):
+ def parallelepiped(self, *args):
r'''From Giac's documentation:
Help for parallelepiped:
parallelepiped(Pnt(A),Pnt(B),Pnt(C),Pnt(D))
@@ -11060,9 +11060,9 @@ cdef class GiacMethods_base:
Ex1:parallelepiped([0,0,0],[2,0,0],[0,1,0],[0,0,3])
Ex2: p:=parallelepiped([0,0,0],[5,0,0],[0,3,0],[0,0,2]);c1,c2,c3,c4,c5,c6,c7,c8:=sommets(p);
'''
- return GiacMethods['parallelepiped'](self,*args)
+ return GiacMethods['parallelepiped'](self, *args)
- def parallelogram(self,*args):
+ def parallelogram(self, *args):
r'''From Giac's documentation:
Help for parallelogram:
parallelogram(Pnt(A)||Cplx,Pnt(B)||Cplx,Pnt(C)||Cplx,[Var(D)])
@@ -11073,9 +11073,9 @@ cdef class GiacMethods_base:
Ex3:parallelogram(point(0,0,0),point(3,3,3),point(0,0,3))
Ex4:parallelogram(point(0,0,0),point(3,3,3),point(0,0,3),D)
'''
- return GiacMethods['parallelogram'](self,*args)
+ return GiacMethods['parallelogram'](self, *args)
- def parameq(self,*args):
+ def parameq(self, *args):
r'''From Giac's documentation:
Help for parameq:
parameq(GeoObj)
@@ -11084,18 +11084,18 @@ cdef class GiacMethods_base:
Ex1:parameq(circle(0,1))
Ex2:parameq(line(i,1-i))
'''
- return GiacMethods['parameq'](self,*args)
+ return GiacMethods['parameq'](self, *args)
- def parameter(self,*args):
+ def parameter(self, *args):
r'''From Giac's documentation:
Help for parameter:
parameter()
Reserved word.
See also: 1/
'''
- return GiacMethods['parameter'](self,*args)
+ return GiacMethods['parameter'](self, *args)
- def paramplot(self,*args):
+ def paramplot(self, *args):
r'''From Giac's documentation:
Help for paramplot:
paramplot(Cplx||Lst,Var||Lst(Var))
@@ -11110,9 +11110,9 @@ cdef class GiacMethods_base:
Ex7:paramplot([v*cos(u),v*sin(u),v],[u,v])
Ex8:paramplot([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3],ustep=0.1,vstep=0.2)
'''
- return GiacMethods['paramplot'](self,*args)
+ return GiacMethods['paramplot'](self, *args)
- def parfrac(self,*args):
+ def parfrac(self, *args):
r'''From Giac's documentation:
Help for parfrac:
parfrac(Opt)
@@ -11121,9 +11121,9 @@ cdef class GiacMethods_base:
Ex1: convert(1/(x^2-1),parfrac)
Ex2: convert(1/(x^2-1),fullparfrac)
'''
- return GiacMethods['parfrac'](self,*args)
+ return GiacMethods['parfrac'](self, *args)
- def pari(self,*args):
+ def pari(self, *args):
r'''From Giac's documentation:
Help for pari:
pari(Str,arguments)
@@ -11138,9 +11138,9 @@ cdef class GiacMethods_base:
Ex7:pari("isprime",9856989898997789789,1)
Ex8:pari("isprime",9856989898997789789,2)
'''
- return GiacMethods['pari'](self,*args)
+ return GiacMethods['pari'](self, *args)
- def part(self,*args):
+ def part(self, *args):
r'''From Giac's documentation:
Help for part:
part(Expr, Intg(n))
@@ -11151,9 +11151,9 @@ cdef class GiacMethods_base:
Ex3:part(exp(x)*sin(x),1)
Ex4:part(part(exp(x)*sin(x)+cos(x),1),1)
'''
- return GiacMethods['part'](self,*args)
+ return GiacMethods['part'](self, *args)
- def partfrac(self,*args):
+ def partfrac(self, *args):
r'''From Giac's documentation:
Help for partfrac:
partfrac(RatFrac or Opt)
@@ -11164,9 +11164,9 @@ cdef class GiacMethods_base:
Ex3:partfrac(a/(z*(z-b)),z)
Ex4: convert(x/(4-x^2),partfrac)
'''
- return GiacMethods['partfrac'](self,*args)
+ return GiacMethods['partfrac'](self, *args)
- def parzen_window(self,*args):
+ def parzen_window(self, *args):
r'''From Giac's documentation:
Help for parzen_window:
parzen_window(Lst,[Interval(n1..n2)])
@@ -11174,9 +11174,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ bartlett_hann_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(parzen_window(randvector(1000,0..1)))
'''
- return GiacMethods['parzen_window'](self,*args)
+ return GiacMethods['parzen_window'](self, *args)
- def pas_de_cote(self,*args):
+ def pas_de_cote(self, *args):
r'''From Giac's documentation:
Help for pas_de_cote:
pas_de_cote(NULL or Real(n))
@@ -11185,9 +11185,9 @@ cdef class GiacMethods_base:
Ex1: pas_de_cote 30
Ex2:pas_de_cote(30)
'''
- return GiacMethods['pas_de_cote'](self,*args)
+ return GiacMethods['pas_de_cote'](self, *args)
- def path_graph(self,*args):
+ def path_graph(self, *args):
r'''From Giac's documentation:
Help for path_graph:
path_graph(Intg(n)||Lst(V))
@@ -11195,9 +11195,9 @@ cdef class GiacMethods_base:
See also: 1/ cycle_graph 2/ graph 3/ trail
Ex1:path_graph(5)
'''
- return GiacMethods['path_graph'](self,*args)
+ return GiacMethods['path_graph'](self, *args)
- def pcar(self,*args):
+ def pcar(self, *args):
r'''From Giac's documentation:
Help for pcar:
pcar(Mtrx,[Var])
@@ -11208,9 +11208,9 @@ cdef class GiacMethods_base:
Ex3:pcar([[1,2,3],[1,3,6],[2,5,7]])
Ex4:pcar([[1,2,3],[1,3,6],[2,5,7]],z)
'''
- return GiacMethods['pcar'](self,*args)
+ return GiacMethods['pcar'](self, *args)
- def pcar_hessenberg(self,*args):
+ def pcar_hessenberg(self, *args):
r'''From Giac's documentation:
Help for pcar_hessenberg:
pcar_hessenberg(Mtrx,[Var])
@@ -11220,9 +11220,9 @@ cdef class GiacMethods_base:
Ex2:pcar_hessenberg([[1,2],[3,4]],x)
Ex3:pcar_hessenberg([[1,2,3],[1,3,6],[2,5,7]])
'''
- return GiacMethods['pcar_hessenberg'](self,*args)
+ return GiacMethods['pcar_hessenberg'](self, *args)
- def pcoef(self,*args):
+ def pcoef(self, *args):
r'''From Giac's documentation:
Help for pcoef:
pcoef(Vect)
@@ -11231,9 +11231,9 @@ cdef class GiacMethods_base:
Ex1:pcoef([1,0,0,0,1])
Ex2:pcoef([1,0,-2])
'''
- return GiacMethods['pcoef'](self,*args)
+ return GiacMethods['pcoef'](self, *args)
- def pcoeff(self,*args):
+ def pcoeff(self, *args):
r'''From Giac's documentation:
Help for pcoeff:
pcoeff(Vect)
@@ -11242,9 +11242,9 @@ cdef class GiacMethods_base:
Ex1:pcoeff([1,0,0,0,1])
Ex2:pcoeff([1,0,-2])
'''
- return GiacMethods['pcoeff'](self,*args)
+ return GiacMethods['pcoeff'](self, *args)
- def pencolor(self,*args):
+ def pencolor(self, *args):
r'''From Giac's documentation:
Help for pencolor:
pencolor(Color)
@@ -11255,9 +11255,9 @@ cdef class GiacMethods_base:
Ex3:pencolor(5)
Ex4:pencolor(gomme)
'''
- return GiacMethods['pencolor'](self,*args)
+ return GiacMethods['pencolor'](self, *args)
- def pendown(self,*args):
+ def pendown(self, *args):
r'''From Giac's documentation:
Help for pendown:
pendown(NULL)
@@ -11265,9 +11265,9 @@ cdef class GiacMethods_base:
See also: 1/ leve_crayon 2/ crayon
Ex1:pendown()
'''
- return GiacMethods['pendown'](self,*args)
+ return GiacMethods['pendown'](self, *args)
- def penup(self,*args):
+ def penup(self, *args):
r'''From Giac's documentation:
Help for penup:
penup(NULL)
@@ -11275,9 +11275,9 @@ cdef class GiacMethods_base:
See also: 1/ baisse_crayon 2/ crayon
Ex1:penup()
'''
- return GiacMethods['penup'](self,*args)
+ return GiacMethods['penup'](self, *args)
- def perimeter(self,*args):
+ def perimeter(self, *args):
r'''From Giac's documentation:
Help for perimeter:
perimeter(Polygone)
@@ -11288,9 +11288,9 @@ cdef class GiacMethods_base:
Ex3:perimeter(circle(0,2))
Ex4:perimeter(0,1,i)
'''
- return GiacMethods['perimeter'](self,*args)
+ return GiacMethods['perimeter'](self, *args)
- def perimeterat(self,*args):
+ def perimeterat(self, *args):
r'''From Giac's documentation:
Help for perimeterat:
perimeterat(Polygone, Pnt||Cplx(z0))
@@ -11302,9 +11302,9 @@ cdef class GiacMethods_base:
Ex4: p:=polygon(0,1,i);perimeterat(p,1+i)
Ex5: A:=point(0);B:=point(1+i);c:=carre(A,B);perimeterat(c,i)
'''
- return GiacMethods['perimeterat'](self,*args)
+ return GiacMethods['perimeterat'](self, *args)
- def perimeteratraw(self,*args):
+ def perimeteratraw(self, *args):
r'''From Giac's documentation:
Help for perimeteratraw:
perimeteratraw(Polygone, Pnt||Cplx(z0))
@@ -11316,18 +11316,18 @@ cdef class GiacMethods_base:
Ex4:perimeteratraw(polygon(0,1,i),1+i)
Ex5: A:=point(0);B:=point(1+i);c:=carre(A,B);perimeteratraw(c,i)
'''
- return GiacMethods['perimeteratraw'](self,*args)
+ return GiacMethods['perimeteratraw'](self, *args)
- def periodic(self,*args):
+ def periodic(self, *args):
r'''From Giac's documentation:
Help for periodic:
periodic(Expr,Var,a,b)
Makes a periodic expression equal to Expr on a..b, period b-a.
Ex1:periodic(x^2,x,-1,1)
'''
- return GiacMethods['periodic'](self,*args)
+ return GiacMethods['periodic'](self, *args)
- def perm(self,*args):
+ def perm(self, *args):
r'''From Giac's documentation:
Help for perm:
perm(Intg(n),Intg(p))
@@ -11335,9 +11335,9 @@ cdef class GiacMethods_base:
See also: 1/ comb 2/ factorial
Ex1:perm(4,2)
'''
- return GiacMethods['perm'](self,*args)
+ return GiacMethods['perm'](self, *args)
- def perminv(self,*args):
+ def perminv(self, *args):
r'''From Giac's documentation:
Help for perminv:
perminv(Permut(a))
@@ -11345,9 +11345,9 @@ cdef class GiacMethods_base:
See also: 1/ cycleinv
Ex1:perminv([1,3,2,4,0])
'''
- return GiacMethods['perminv'](self,*args)
+ return GiacMethods['perminv'](self, *args)
- def permu2cycles(self,*args):
+ def permu2cycles(self, *args):
r'''From Giac's documentation:
Help for permu2cycles:
permu2cycles(Permut)
@@ -11356,9 +11356,9 @@ cdef class GiacMethods_base:
Ex1:permu2cycles([0,2,1,3,5,4])
Ex2:permu2cycles([0,2,1,4,3,5])
'''
- return GiacMethods['permu2cycles'](self,*args)
+ return GiacMethods['permu2cycles'](self, *args)
- def permu2mat(self,*args):
+ def permu2mat(self, *args):
r'''From Giac's documentation:
Help for permu2mat:
permu2mat(Permut(p))
@@ -11366,9 +11366,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:permu2mat([1,3,2,4,0])
'''
- return GiacMethods['permu2mat'](self,*args)
+ return GiacMethods['permu2mat'](self, *args)
- def permuorder(self,*args):
+ def permuorder(self, *args):
r'''From Giac's documentation:
Help for permuorder:
permuorder(Permut(a))
@@ -11376,9 +11376,9 @@ cdef class GiacMethods_base:
See also: 1/ cycles2permu
Ex1:permuorder([1,3,2,4,0])
'''
- return GiacMethods['permuorder'](self,*args)
+ return GiacMethods['permuorder'](self, *args)
- def permute_vertices(self,*args):
+ def permute_vertices(self, *args):
r'''From Giac's documentation:
Help for permute_vertices:
permute_vertices(Graph(G),Lst(V))
@@ -11386,9 +11386,9 @@ cdef class GiacMethods_base:
See also: 1/ graph_vertices 2/ isomorphic_copy 3/ relabel_vertices
Ex1:permute_vertices(graph([a,b,c]),[a,c,b])
'''
- return GiacMethods['permute_vertices'](self,*args)
+ return GiacMethods['permute_vertices'](self, *args)
- def perpen_bisector(self,*args):
+ def perpen_bisector(self, *args):
r'''From Giac's documentation:
Help for perpen_bisector:
perpen_bisector((Pnt or Cplx),(Pnt or Cplx))
@@ -11397,9 +11397,9 @@ cdef class GiacMethods_base:
Ex1:perpen_bisector(1-i,i)
Ex2:perpen_bisector([0,0,0],[5,5,0])
'''
- return GiacMethods['perpen_bisector'](self,*args)
+ return GiacMethods['perpen_bisector'](self, *args)
- def perpendicular(self,*args):
+ def perpendicular(self, *args):
r'''From Giac's documentation:
Help for perpendicular:
perpendicular((Pnt or Line),(Line or Plan))
@@ -11410,9 +11410,9 @@ cdef class GiacMethods_base:
Ex3:perpendicular([0,0,0],line(x=y,y=z))
Ex4:perpendicular(line([0,0,0],[1,1,0]),plane(x+y+z=1))
'''
- return GiacMethods['perpendicular'](self,*args)
+ return GiacMethods['perpendicular'](self, *args)
- def petersen_graph(self,*args):
+ def petersen_graph(self, *args):
r'''From Giac's documentation:
Help for petersen_graph:
petersen_graph(Intg(n),[Intg(k)])
@@ -11422,9 +11422,9 @@ cdef class GiacMethods_base:
Ex2:petersen_graph(6,3)
Ex3:petersen_graph(10,2)
'''
- return GiacMethods['petersen_graph'](self,*args)
+ return GiacMethods['petersen_graph'](self, *args)
- def peval(self,*args):
+ def peval(self, *args):
r'''From Giac's documentation:
Help for peval:
peval(Vect,Real(x0))
@@ -11433,9 +11433,9 @@ cdef class GiacMethods_base:
Ex1:peval([1,0,-2],1)
Ex2:peval([1,2,-25,-26,120],8)
'''
- return GiacMethods['peval'](self,*args)
+ return GiacMethods['peval'](self, *args)
- def pi(self,*args):
+ def pi(self, *args):
r'''From Giac's documentation:
Help for pi:
pi()
@@ -11446,9 +11446,9 @@ cdef class GiacMethods_base:
Ex3: evalf(pi)
Ex4: evalf(Pi)
'''
- return GiacMethods['pi'](self,*args)
+ return GiacMethods['pi'](self, *args)
- def pie(self,*args):
+ def pie(self, *args):
r'''From Giac's documentation:
Help for pie:
pie(Mtrx)
@@ -11458,9 +11458,9 @@ cdef class GiacMethods_base:
Ex2:pie([3/2,2/3,5/4,4/5,7/6,6/7,9/8,8/9,11/10])
Ex3:pie([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])
'''
- return GiacMethods['pie'](self,*args)
+ return GiacMethods['pie'](self, *args)
- def piecewise(self,*args):
+ def piecewise(self, *args):
r'''From Giac's documentation:
Help for piecewise:
piecewise(Cond1,Expr1,..,Cond2p,Expr2p,[Expr2p+1])
@@ -11469,9 +11469,9 @@ cdef class GiacMethods_base:
Ex1:piecewise(x<=-pi,x+2*pi,x<=pi,x,x+2*pi)
Ex2:piecewise(x<-2,-2,x<-1,3x+4,x<0,1,x+1)
'''
- return GiacMethods['piecewise'](self,*args)
+ return GiacMethods['piecewise'](self, *args)
- def pivot(self,*args):
+ def pivot(self, *args):
r'''From Giac's documentation:
Help for pivot:
pivot(Mtrx(A),Intg(nl),Intg(nc))
@@ -11480,9 +11480,9 @@ cdef class GiacMethods_base:
Ex1:pivot([[1,2],[3,4],[5,6]],0,1)
Ex2:pivot([[1,2],[3,4],[5,6]],1,1)
'''
- return GiacMethods['pivot'](self,*args)
+ return GiacMethods['pivot'](self, *args)
- def pixoff(self,*args):
+ def pixoff(self, *args):
r'''From Giac's documentation:
Help for pixoff:
pixoff(Real(x),Real(y))
@@ -11490,9 +11490,9 @@ cdef class GiacMethods_base:
See also: 1/ set_pixel 2/ pixon
Ex1:pixoff(1,2)
'''
- return GiacMethods['pixoff'](self,*args)
+ return GiacMethods['pixoff'](self, *args)
- def pixon(self,*args):
+ def pixon(self, *args):
r'''From Giac's documentation:
Help for pixon:
pixon(Real(x),Real(y))
@@ -11500,18 +11500,18 @@ cdef class GiacMethods_base:
See also: 1/ set_pixel 2/ pixoff
Ex1:pixon(1,2)
'''
- return GiacMethods['pixon'](self,*args)
+ return GiacMethods['pixon'](self, *args)
- def planar(self,*args):
+ def planar(self, *args):
r'''From Giac's documentation:
Help for planar:
planar(Opt)
Option for the draw_graph command.
See also: 1/ spring 2/ tree 3/ draw_graph
'''
- return GiacMethods['planar'](self,*args)
+ return GiacMethods['planar'](self, *args)
- def plane(self,*args):
+ def plane(self, *args):
r'''From Giac's documentation:
Help for plane:
plane(Pnt or Eq, [Pnt or Line],[Pnt])
@@ -11522,9 +11522,9 @@ cdef class GiacMethods_base:
Ex3:plane(x+y+z=0)
Ex4:plane(2*x+y-2*z-1)
'''
- return GiacMethods['plane'](self,*args)
+ return GiacMethods['plane'](self, *args)
- def plane_dual(self,*args):
+ def plane_dual(self, *args):
r'''From Giac's documentation:
Help for plane_dual:
plane_dual(Graph(G)||Lst(F))
@@ -11532,9 +11532,9 @@ cdef class GiacMethods_base:
See also: 1/ is_planar
Ex1:plane_dual(hypercube_graph(3))
'''
- return GiacMethods['plane_dual'](self,*args)
+ return GiacMethods['plane_dual'](self, *args)
- def playsnd(self,*args):
+ def playsnd(self, *args):
r'''From Giac's documentation:
Help for playsnd:
playsnd(Vect)
@@ -11542,18 +11542,18 @@ cdef class GiacMethods_base:
See also: 1/ readwav 2/ writewav 3/ soundsec
Ex1:playsnd(2^14*(sin(2*pi*440*soundsec(1)))
'''
- return GiacMethods['playsnd'](self,*args)
+ return GiacMethods['playsnd'](self, *args)
- def plex(self,*args):
+ def plex(self, *args):
r'''From Giac's documentation:
Help for plex:
plex(Opt)
Option of the gbasis or greduce command to specify an order for monomials (=default order=pure lexicographic).
See also: 1/ gbasis 2/ greduce
'''
- return GiacMethods['plex'](self,*args)
+ return GiacMethods['plex'](self, *args)
- def plot(self,*args):
+ def plot(self, *args):
r'''From Giac's documentation:
Help for plot:
plot((Expr or LstExpr),Var[=VarMin..VarMax],[color=LstColor])
@@ -11567,9 +11567,9 @@ cdef class GiacMethods_base:
Ex6:plot(normald)
Ex7:plot(normald(-1,2))
'''
- return GiacMethods['plot'](self,*args)
+ return GiacMethods['plot'](self, *args)
- def plot3d(self,*args):
+ def plot3d(self, *args):
r'''From Giac's documentation:
Help for plot3d:
plot3d(Expr||Lst(3*Expr),Var,Var)
@@ -11581,9 +11581,9 @@ cdef class GiacMethods_base:
Ex4:plot3d(f,-1..1,-2..2)
Ex5:plot3d([f,g,h],-1..1,-2..2)
'''
- return GiacMethods['plot3d'](self,*args)
+ return GiacMethods['plot3d'](self, *args)
- def plotarea(self,*args):
+ def plotarea(self, *args):
r'''From Giac's documentation:
Help for plotarea:
plotarea(Expr,x=a..b,[n],[Method])
@@ -11593,9 +11593,9 @@ cdef class GiacMethods_base:
Ex2:plotarea(x^2,x=0..1,5,trapezoid)
Ex3:plotarea(x^2,x=0..1,5,middle_point)
'''
- return GiacMethods['plotarea'](self,*args)
+ return GiacMethods['plotarea'](self, *args)
- def plotcdf(self,*args):
+ def plotcdf(self, *args):
r'''From Giac's documentation:
Help for plotcdf:
plotcdf(Func,FuncParams)
@@ -11605,9 +11605,9 @@ cdef class GiacMethods_base:
Ex2:plotcdf(normald,0.0,1.0)
Ex3:plotcdf([1,3,4,3,5,6])
'''
- return GiacMethods['plotcdf'](self,*args)
+ return GiacMethods['plotcdf'](self, *args)
- def plotcontour(self,*args):
+ def plotcontour(self, *args):
r'''From Giac's documentation:
Help for plotcontour:
plotcontour(Expr(Xpr),[LstVar],[LstVal])
@@ -11618,9 +11618,9 @@ cdef class GiacMethods_base:
Ex3:plotcontour(x^2+2*y^2-2,[x,y],[1.0,2.0,3.0])
Ex4:plotcontour(x^2-y^2,[x=-4..4,y=-4..4],seq(k,k,-11,11,3),xstep=0.1,ystep=0.1)
'''
- return GiacMethods['plotcontour'](self,*args)
+ return GiacMethods['plotcontour'](self, *args)
- def plotdensity(self,*args):
+ def plotdensity(self, *args):
r'''From Giac's documentation:
Help for plotdensity:
plotdensity(Expr,[x=xrange,y=yrange],[z],[xstep],[ystep])
@@ -11629,9 +11629,9 @@ cdef class GiacMethods_base:
Ex1:plotdensity(x^2-y^2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
Ex2:plotdensity(x^2-y^2,[x=-2..2,y=-2..2],z=-2..2,xstep=0.1,ystep=0.1)
'''
- return GiacMethods['plotdensity'](self,*args)
+ return GiacMethods['plotdensity'](self, *args)
- def plotfield(self,*args):
+ def plotfield(self, *args):
r'''From Giac's documentation:
Help for plotfield:
plotfield(Expr,VectVar,[Opt])
@@ -11643,9 +11643,9 @@ cdef class GiacMethods_base:
Ex4:plotfield(-t*y,[t,y],normalize,xstep=0.5,ystep=0.5)
Ex5:plotfield(-t*y,[t=-6.868..6.868,y=-6.868..6.868],normalize)
'''
- return GiacMethods['plotfield'](self,*args)
+ return GiacMethods['plotfield'](self, *args)
- def plotfunc(self,*args):
+ def plotfunc(self, *args):
r'''From Giac's documentation:
Help for plotfunc:
plotfunc(Expr,[Var(x) or VectVar] ,[Intg(color)])
@@ -11657,9 +11657,9 @@ cdef class GiacMethods_base:
Ex4:plotfunc(x^2+y^2,[x=-1..1,y=-2..2],nstep=900)
Ex5:plotfunc((x+i*y)^2,[x=-1..1,y=-2..2],nstep=900,affichage=rempli)
'''
- return GiacMethods['plotfunc'](self,*args)
+ return GiacMethods['plotfunc'](self, *args)
- def plotimplicit(self,*args):
+ def plotimplicit(self, *args):
r'''From Giac's documentation:
Help for plotimplicit:
plotimplicit(Expr,Var1,Var2)
@@ -11675,9 +11675,9 @@ cdef class GiacMethods_base:
Ex8:plotimplicit((x+5)^2+(y+4)^2-1,x=-6..-4,y=-5..-3)
Ex9:plotimplicit((x+5)^2+(y+4)^2-1,[x=-6..-4,y=-5..-3])
'''
- return GiacMethods['plotimplicit'](self,*args)
+ return GiacMethods['plotimplicit'](self, *args)
- def plotinequation(self,*args):
+ def plotinequation(self, *args):
r'''From Giac's documentation:
Help for plotinequation:
plotinequation(Expr,[x=xrange,y=yrange],[xstep],[ystep])
@@ -11688,9 +11688,9 @@ cdef class GiacMethods_base:
Ex3:plotinequation(3-(x^2-y^2),[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
Ex4:plotinequation([x+y>3,x^2x>=5,[1,2,6,7])
Ex2:remove(5,[1,2,5,6,7,5])
'''
- return GiacMethods['remove'](self,*args)
+ return GiacMethods['remove'](self, *args)
- def reorder(self,*args):
+ def reorder(self, *args):
r'''From Giac's documentation:
Help for reorder:
reorder(Expr, LstVar)
@@ -13475,9 +13475,9 @@ cdef class GiacMethods_base:
Ex1:reorder(-2)
Ex2:reorder(x^2+2*x+y^2,[y,x])
'''
- return GiacMethods['reorder'](self,*args)
+ return GiacMethods['reorder'](self, *args)
- def resample(self,*args):
+ def resample(self, *args):
r'''From Giac's documentation:
Help for resample:
resample(Lst(clip),[Intg(s),[Intg(q)]])
@@ -13486,9 +13486,9 @@ cdef class GiacMethods_base:
Ex1:resample(readwav("/some/file"),48000)
Ex2:resample(readwav("/some/file"),48000,3)
'''
- return GiacMethods['resample'](self,*args)
+ return GiacMethods['resample'](self, *args)
- def residue(self,*args):
+ def residue(self, *args):
r'''From Giac's documentation:
Help for residue:
residue(Expr,Var(v),Cplx(a))
@@ -13499,9 +13499,9 @@ cdef class GiacMethods_base:
Ex3:residue(cos(z)/(z*(z-b)),z,0)
Ex4:residue(c/(z*(z-b)),z=b)
'''
- return GiacMethods['residue'](self,*args)
+ return GiacMethods['residue'](self, *args)
- def resoudre(self,*args):
+ def resoudre(self, *args):
r'''From Giac's documentation:
Help for resoudre:
resoudre(Expr,[Var])
@@ -13512,9 +13512,9 @@ cdef class GiacMethods_base:
Ex3:resoudre([y-z=0,z-x=0,x-y=0,x-1+y+z=0],[x,y,z])
Ex4:resoudre([x^2-y^2=0,x^2-z^2=0],[x,y,z])
'''
- return GiacMethods['resoudre'](self,*args)
+ return GiacMethods['resoudre'](self, *args)
- def resoudre_dans_C(self,*args):
+ def resoudre_dans_C(self, *args):
r'''From Giac's documentation:
Help for resoudre_dans_C:
resoudre_dans_C(LstEq,LstVar)
@@ -13525,9 +13525,9 @@ cdef class GiacMethods_base:
Ex3:resoudre_dans_C(x^4-y^4 and x+y=0 and x^2=2*x,[x,y])
Ex4:resoudre_dans_C(u*v-u=v and v^2=u,[u,v])
'''
- return GiacMethods['resoudre_dans_C'](self,*args)
+ return GiacMethods['resoudre_dans_C'](self, *args)
- def resoudre_systeme_lineaire(self,*args):
+ def resoudre_systeme_lineaire(self, *args):
r'''From Giac's documentation:
Help for resoudre_systeme_lineaire:
resoudre_systeme_lineaire(LstLinEq,LstVar)
@@ -13543,9 +13543,9 @@ cdef class GiacMethods_base:
Ex8: p,l,u:=lu([[2,1,1],[1,1,2],[1,2,1]]);linsolve(p,l,u,[1,1,4])
Ex9: a:=[[100,2],[2,100]];linsolve(evalf(a),[0,1]);
'''
- return GiacMethods['resoudre_systeme_lineaire'](self,*args)
+ return GiacMethods['resoudre_systeme_lineaire'](self, *args)
- def resultant(self,*args):
+ def resultant(self, *args):
r'''From Giac's documentation:
Help for resultant:
resultant(Poly,Poly,Var)
@@ -13554,9 +13554,9 @@ cdef class GiacMethods_base:
Ex1:resultant(x^2-1,x^3-1,x)
Ex2:resultant(x^3-p*x+q,3*x^2-p,x)
'''
- return GiacMethods['resultant'](self,*args)
+ return GiacMethods['resultant'](self, *args)
- def reverse(self,*args):
+ def reverse(self, *args):
r'''From Giac's documentation:
Help for reverse:
reverse(Lst(L))
@@ -13566,9 +13566,9 @@ cdef class GiacMethods_base:
Ex3: L:=[1,2,3,4];L.revlist()
Ex4: L:=[1,2,3,4];L.reverse()
'''
- return GiacMethods['reverse'](self,*args)
+ return GiacMethods['reverse'](self, *args)
- def reverse_graph(self,*args):
+ def reverse_graph(self, *args):
r'''From Giac's documentation:
Help for reverse_graph:
reverse_graph(Graph(G))
@@ -13576,9 +13576,9 @@ cdef class GiacMethods_base:
See also: 1/ digraph
Ex1:reverse_graph(digraph(%{[1,2],[1,3],[2,3]%}))
'''
- return GiacMethods['reverse_graph'](self,*args)
+ return GiacMethods['reverse_graph'](self, *args)
- def reverse_rsolve(self,*args):
+ def reverse_rsolve(self, *args):
r'''From Giac's documentation:
Help for reverse_rsolve:
reverse_rsolve(Vect(v))
@@ -13586,9 +13586,9 @@ cdef class GiacMethods_base:
See also: 1/ rsolve
Ex1:reverse_rsolve([1,-1,3,3])
'''
- return GiacMethods['reverse_rsolve'](self,*args)
+ return GiacMethods['reverse_rsolve'](self, *args)
- def revert(self,*args):
+ def revert(self, *args):
r'''From Giac's documentation:
Help for revert:
revert(Expr)
@@ -13596,18 +13596,18 @@ cdef class GiacMethods_base:
See also: 1/ series
Ex1:revert(x+x^2+x^4)
'''
- return GiacMethods['revert'](self,*args)
+ return GiacMethods['revert'](self, *args)
- def revlex(self,*args):
+ def revlex(self, *args):
r'''From Giac's documentation:
Help for revlex:
revlex(Opt)
Option of the gbasis or greduce command to specify an order for monomials (complete degree then inverse lexicographic order).
See also: 1/ gbasis 2/ greduce
'''
- return GiacMethods['revlex'](self,*args)
+ return GiacMethods['revlex'](self, *args)
- def revlist(self,*args):
+ def revlist(self, *args):
r'''From Giac's documentation:
Help for revlist:
revlist(Lst(L))
@@ -13617,9 +13617,9 @@ cdef class GiacMethods_base:
Ex3: L:=[1,2,3,4];L.revlist()
Ex4: L:=[1,2,3,4];L.reverse()
'''
- return GiacMethods['revlist'](self,*args)
+ return GiacMethods['revlist'](self, *args)
- def rgb(self,*args):
+ def rgb(self, *args):
r'''From Giac's documentation:
Help for rgb:
rgb(Opt)
@@ -13632,9 +13632,9 @@ cdef class GiacMethods_base:
Ex5: F:=display(square(0,2+i),filled+rgb(rand(),rand(),rand()))
Ex6: L:=rand(),rand(),rand();affichage(square(0,2+i),rgb(L)+rempli);legend(0.2,[L])
'''
- return GiacMethods['rgb'](self,*args)
+ return GiacMethods['rgb'](self, *args)
- def rhombus(self,*args):
+ def rhombus(self, *args):
r'''From Giac's documentation:
Help for rhombus:
rhombus(Pnt(A)||Cplx,Pnt(B)||Cplx,Angle(a)||Pnt(P)||Lst(P,a)),[Var(C)],[Var(D)])
@@ -13646,9 +13646,9 @@ cdef class GiacMethods_base:
Ex4:rhombus(point(0,0,0),point(3,3,3),point(0,0,3),C,D)
Ex5:rhombus(point(0,0,0),point(3,3,3),[point(0,0,3),pi/4],C,D)
'''
- return GiacMethods['rhombus'](self,*args)
+ return GiacMethods['rhombus'](self, *args)
- def rhombus_point(self,*args):
+ def rhombus_point(self, *args):
r'''From Giac's documentation:
Help for rhombus_point:
rhombus_point(Opt)
@@ -13657,9 +13657,9 @@ cdef class GiacMethods_base:
Ex1: F:=display(point(2+1.5*i),point_point)
Ex2: F:=display(point(2+1.5*i),rhombus_point)
'''
- return GiacMethods['rhombus_point'](self,*args)
+ return GiacMethods['rhombus_point'](self, *args)
- def rhs(self,*args):
+ def rhs(self, *args):
r'''From Giac's documentation:
Help for rhs:
rhs(Equal(a=b) or Interval(a..b) or Str,Intg)
@@ -13670,9 +13670,9 @@ cdef class GiacMethods_base:
Ex3:rhs(1..5)
Ex4:rhs("abcdefg",3)
'''
- return GiacMethods['rhs'](self,*args)
+ return GiacMethods['rhs'](self, *args)
- def riemann_window(self,*args):
+ def riemann_window(self, *args):
r'''From Giac's documentation:
Help for riemann_window:
riemann_window(Lst,[Interval(n1..n2)])
@@ -13680,9 +13680,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ bartlett_hann_window 12/ triangle_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(riemann_window(randvector(1000,0..1)))
'''
- return GiacMethods['riemann_window'](self,*args)
+ return GiacMethods['riemann_window'](self, *args)
- def right(self,*args):
+ def right(self, *args):
r'''From Giac's documentation:
Help for right:
right(Equal(a=b) or Interval(a..b) or Str,Intg)
@@ -13693,9 +13693,9 @@ cdef class GiacMethods_base:
Ex3:right(1..5)
Ex4:right("abcdefg",3)
'''
- return GiacMethods['right'](self,*args)
+ return GiacMethods['right'](self, *args)
- def right_rectangle(self,*args):
+ def right_rectangle(self, *args):
r'''From Giac's documentation:
Help for right_rectangle:
right_rectangle(Opt)
@@ -13708,9 +13708,9 @@ cdef class GiacMethods_base:
Ex5: area(x^2,x=0..1,5,middle_point)
Ex6: area(x^2,x=0..1,5,trapezoid)
'''
- return GiacMethods['right_rectangle'](self,*args)
+ return GiacMethods['right_rectangle'](self, *args)
- def right_triangle(self,*args):
+ def right_triangle(self, *args):
r'''From Giac's documentation:
Help for right_triangle:
right_triangle((Pnt(A) or Cplx),(Pnt(B) or Cplx),(Real(k) or Pnt(P) or Lst(P,k)),[Var(C)])
@@ -13722,9 +13722,9 @@ cdef class GiacMethods_base:
Ex4:right_triangle(point(0,0,0),point(3,3,3),[point(0,0,3),1/2],C)
Ex5:right_triangle(point(0,0,0),point(3,3,3),[point(0,0,3),1/2],C)
'''
- return GiacMethods['right_triangle'](self,*args)
+ return GiacMethods['right_triangle'](self, *args)
- def risch(self,*args):
+ def risch(self, *args):
r'''From Giac's documentation:
Help for risch:
risch(Expr,[Var])
@@ -13734,9 +13734,9 @@ cdef class GiacMethods_base:
Ex2:risch(ln(x))
Ex3:risch(exp(x^2),x)
'''
- return GiacMethods['risch'](self,*args)
+ return GiacMethods['risch'](self, *args)
- def rm_a_z(self,*args):
+ def rm_a_z(self, *args):
r'''From Giac's documentation:
Help for rm_a_z:
rm_a_z(NULL)
@@ -13744,9 +13744,9 @@ cdef class GiacMethods_base:
See also: 1/ rm_all_vars
Ex1:rm_a_z()
'''
- return GiacMethods['rm_a_z'](self,*args)
+ return GiacMethods['rm_a_z'](self, *args)
- def rm_all_vars(self,*args):
+ def rm_all_vars(self, *args):
r'''From Giac's documentation:
Help for rm_all_vars:
rm_all_vars(NULL)
@@ -13754,9 +13754,9 @@ cdef class GiacMethods_base:
See also: 1/ rm_a_z
Ex1:rm_all_vars()
'''
- return GiacMethods['rm_all_vars'](self,*args)
+ return GiacMethods['rm_all_vars'](self, *args)
- def rmbreakpoint(self,*args):
+ def rmbreakpoint(self, *args):
r'''From Giac's documentation:
Help for rmbreakpoint:
rmbreakpoint(Intg)
@@ -13764,9 +13764,9 @@ cdef class GiacMethods_base:
See also: 1/ breakpoint
Ex1:rmbreakpoint(1)
'''
- return GiacMethods['rmbreakpoint'](self,*args)
+ return GiacMethods['rmbreakpoint'](self, *args)
- def rmmod(self,*args):
+ def rmmod(self, *args):
r'''From Giac's documentation:
Help for rmmod:
rmmod(Str(pwd))
@@ -13774,9 +13774,9 @@ cdef class GiacMethods_base:
See also: 1/ lsmod 2/ insmod
Ex1:rmmod("/home/parisse/giac/src/libprogfr.so")
'''
- return GiacMethods['rmmod'](self,*args)
+ return GiacMethods['rmmod'](self, *args)
- def rmwatch(self,*args):
+ def rmwatch(self, *args):
r'''From Giac's documentation:
Help for rmwatch:
rmwatch(Var)
@@ -13784,9 +13784,9 @@ cdef class GiacMethods_base:
See also: 1/ watch
Ex1:rmwatch(a)
'''
- return GiacMethods['rmwatch'](self,*args)
+ return GiacMethods['rmwatch'](self, *args)
- def romberg(self,*args):
+ def romberg(self, *args):
r'''From Giac's documentation:
Help for romberg:
romberg(Expr(f(x)),Var(x),Real(a),Real(b))
@@ -13796,9 +13796,9 @@ cdef class GiacMethods_base:
Ex2:romberg(x^2,x,0,1)
Ex3:romberg(exp(-x^2),x,-1,1)
'''
- return GiacMethods['romberg'](self,*args)
+ return GiacMethods['romberg'](self, *args)
- def rombergm(self,*args):
+ def rombergm(self, *args):
r'''From Giac's documentation:
Help for rombergm:
rombergm(Opt)
@@ -13809,9 +13809,9 @@ cdef class GiacMethods_base:
Ex3: area(x^2,x=0..1,5,rombergm)
Ex4:rombergm(area(x^2,x=0..1,5,gauss15))
'''
- return GiacMethods['rombergm'](self,*args)
+ return GiacMethods['rombergm'](self, *args)
- def rombergt(self,*args):
+ def rombergt(self, *args):
r'''From Giac's documentation:
Help for rombergt:
rombergt(Opt)
@@ -13822,9 +13822,9 @@ cdef class GiacMethods_base:
Ex3: area(x^2,x=0..1,5,rombergm)
Ex4:rombergt(area(x^2,x=0..1,5,gauss15))
'''
- return GiacMethods['rombergt'](self,*args)
+ return GiacMethods['rombergt'](self, *args)
- def rond(self,*args):
+ def rond(self, *args):
r'''From Giac's documentation:
Help for rond:
rond(Real(r),[Real(a)],[Real(b)])
@@ -13835,9 +13835,9 @@ cdef class GiacMethods_base:
Ex3:rond(40,90)
Ex4:rond(40,10,100)
'''
- return GiacMethods['rond'](self,*args)
+ return GiacMethods['rond'](self, *args)
- def root(self,*args):
+ def root(self, *args):
r'''From Giac's documentation:
Help for root:
root(Expr(a),Expr(b))
@@ -13848,9 +13848,9 @@ cdef class GiacMethods_base:
Ex3:root(3,1.2)
Ex4:root(3.2,1.2)
'''
- return GiacMethods['root'](self,*args)
+ return GiacMethods['root'](self, *args)
- def rootof(self,*args):
+ def rootof(self, *args):
r'''From Giac's documentation:
Help for rootof:
rootof(LstPoly(P),LstPoly(Q))
@@ -13860,9 +13860,9 @@ cdef class GiacMethods_base:
Ex2: normal(1/rootof([1,0,0],[1,1,0,-1]))
Ex3: rootof(x^4+x+1):='j'; normal(j^5);
'''
- return GiacMethods['rootof'](self,*args)
+ return GiacMethods['rootof'](self, *args)
- def roots(self,*args):
+ def roots(self, *args):
r'''From Giac's documentation:
Help for roots:
roots(Poly,[Var])
@@ -13871,9 +13871,9 @@ cdef class GiacMethods_base:
Ex1:roots(t^3-1,t)
Ex2:roots(x^5-2*x^4+x^3)
'''
- return GiacMethods['roots'](self,*args)
+ return GiacMethods['roots'](self, *args)
- def rotate(self,*args):
+ def rotate(self, *args):
r'''From Giac's documentation:
Help for rotate:
rotate(Lst||Str(L),[Intg(n)])
@@ -13888,9 +13888,9 @@ cdef class GiacMethods_base:
Ex7: L:=[0,1,2,3];L:=rotate([0,1,2,3],2)
Ex8: L:=[0,1,2,3];L.rotate(2)
'''
- return GiacMethods['rotate'](self,*args)
+ return GiacMethods['rotate'](self, *args)
- def rotation(self,*args):
+ def rotation(self, *args):
r'''From Giac's documentation:
Help for rotation:
rotation((Pnt(B) or Cplx or Dr3),Angle(a1),(Pnt(A) or Curve))
@@ -13902,9 +13902,9 @@ cdef class GiacMethods_base:
Ex4: r:=rotation(1+i,pi/2);r(i)
Ex5: r:=rotation(line(x=y,y=z),pi/2);r(point(1,-1,2))
'''
- return GiacMethods['rotation'](self,*args)
+ return GiacMethods['rotation'](self, *args)
- def round(self,*args):
+ def round(self, *args):
r'''From Giac's documentation:
Help for round:
round(Real or Cplx,[Intg(n)])
@@ -13916,9 +13916,9 @@ cdef class GiacMethods_base:
Ex4:round(1.237,2)
Ex5:round(sqrt(2)+i*sqrt(5),4)
'''
- return GiacMethods['round'](self,*args)
+ return GiacMethods['round'](self, *args)
- def row(self,*args):
+ def row(self, *args):
r'''From Giac's documentation:
Help for row:
row(Mtrx(A),Intg(n)||Interval(n1..n2))
@@ -13928,9 +13928,9 @@ cdef class GiacMethods_base:
Ex2:row([[1,2,3],[4,5,6],[7,8,9]],0..1)
Ex3: count_eq(3,[[1,2,3],[4,3,2],[3,2,1]],row)
'''
- return GiacMethods['row'](self,*args)
+ return GiacMethods['row'](self, *args)
- def rowAdd(self,*args):
+ def rowAdd(self, *args):
r'''From Giac's documentation:
Help for rowAdd:
rowAdd(Mtrx(A),Intg(n1),Intg(n2))
@@ -13938,9 +13938,9 @@ cdef class GiacMethods_base:
See also: 1/ rowSwap
Ex1:rowAdd([[1,2],[3,4],[5,6]],1,2)
'''
- return GiacMethods['rowAdd'](self,*args)
+ return GiacMethods['rowAdd'](self, *args)
- def rowDim(self,*args):
+ def rowDim(self, *args):
r'''From Giac's documentation:
Help for rowDim:
rowDim(Mtrx)
@@ -13949,9 +13949,9 @@ cdef class GiacMethods_base:
Ex1:rowDim([[1,2,3],[4,5,6]])
Ex2:rowDim([[1,2],[3,4],[5,6]])
'''
- return GiacMethods['rowDim'](self,*args)
+ return GiacMethods['rowDim'](self, *args)
- def rowNorm(self,*args):
+ def rowNorm(self, *args):
r'''From Giac's documentation:
Help for rowNorm:
rowNorm(Vect or Mtrx)
@@ -13960,9 +13960,9 @@ cdef class GiacMethods_base:
Ex1:rowNorm([[1,2],[3,-4]])
Ex2:rowNorm([[1,2,3,-4],[-5,3,2,1]])
'''
- return GiacMethods['rowNorm'](self,*args)
+ return GiacMethods['rowNorm'](self, *args)
- def rowSwap(self,*args):
+ def rowSwap(self, *args):
r'''From Giac's documentation:
Help for rowSwap:
rowSwap(Mtrx(A),Intg(n1),Intg(n2))
@@ -13970,9 +13970,9 @@ cdef class GiacMethods_base:
See also: 1/ rowAdd 2/ colSwap
Ex1:rowSwap([[1,2],[3,4],[5,6]],1,2)
'''
- return GiacMethods['rowSwap'](self,*args)
+ return GiacMethods['rowSwap'](self, *args)
- def rowdim(self,*args):
+ def rowdim(self, *args):
r'''From Giac's documentation:
Help for rowdim:
rowdim(Mtrx)
@@ -13981,9 +13981,9 @@ cdef class GiacMethods_base:
Ex1:rowdim([[1,2,3],[4,5,6]])
Ex2:rowdim([[1,2],[3,4],[5,6]])
'''
- return GiacMethods['rowdim'](self,*args)
+ return GiacMethods['rowdim'](self, *args)
- def rownorm(self,*args):
+ def rownorm(self, *args):
r'''From Giac's documentation:
Help for rownorm:
rownorm(Vect or Mtrx)
@@ -13992,9 +13992,9 @@ cdef class GiacMethods_base:
Ex1:rownorm([[1,2],[3,-4]])
Ex2:rownorm([[1,2,3,-4],[-5,3,2,1]])
'''
- return GiacMethods['rownorm'](self,*args)
+ return GiacMethods['rownorm'](self, *args)
- def rowspace(self,*args):
+ def rowspace(self, *args):
r'''From Giac's documentation:
Help for rowspace:
rowspace(Mtrx(A), [Var(d)])
@@ -14003,9 +14003,9 @@ cdef class GiacMethods_base:
Ex1:rowspace([[1,2,3],[1,2,3],[1,2,4],[1,2,5]])
Ex2:rowspace([[1,2,3],[1,3,6],[2,5,9]],d)
'''
- return GiacMethods['rowspace'](self,*args)
+ return GiacMethods['rowspace'](self, *args)
- def rowswap(self,*args):
+ def rowswap(self, *args):
r'''From Giac's documentation:
Help for rowswap:
rowswap(Mtrx(A),Intg(n1),Intg(n2))
@@ -14013,9 +14013,9 @@ cdef class GiacMethods_base:
See also: 1/ rowAdd 2/ colSwap
Ex1:rowswap([[1,2],[3,4],[5,6]],1,2)
'''
- return GiacMethods['rowswap'](self,*args)
+ return GiacMethods['rowswap'](self, *args)
- def rref(self,*args):
+ def rref(self, *args):
r'''From Giac's documentation:
Help for rref:
rref(Mtrx(M),[Intg(k)]||Opt)
@@ -14026,9 +14026,9 @@ cdef class GiacMethods_base:
Ex3:rref([[2,1,1,-1],[1,1,2,-1],[1,2,1,-4]],2)
Ex4:rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],[1,0,0,1,-a4]],keep_pivot)
'''
- return GiacMethods['rref'](self,*args)
+ return GiacMethods['rref'](self, *args)
- def rsolve(self,*args):
+ def rsolve(self, *args):
r'''From Giac's documentation:
Help for rsolve:
rsolve((Expr or LstExpr),(Var or LstVar),(InitVal or LstInitVal))
@@ -14040,9 +14040,9 @@ cdef class GiacMethods_base:
Ex4:rsolve(u(n+2)=u(n)+2*u(n+1)+n+1,u(n),[u(0)=0,u(1)=1])
Ex5:rsolve([u(n+1)=3*v(n)+u(n),v(n+1)=v(n)+u(n)],[u(n),v(n)],[u(0)=1,v(0)=2])
'''
- return GiacMethods['rsolve'](self,*args)
+ return GiacMethods['rsolve'](self, *args)
- def same(self,*args):
+ def same(self, *args):
r'''From Giac's documentation:
Help for same:
same(Expr,Expr)
@@ -14051,9 +14051,9 @@ cdef class GiacMethods_base:
Ex1:same(a,b)
Ex2:same((2-1)^2,2^2-2*2+1)
'''
- return GiacMethods['same'](self,*args)
+ return GiacMethods['same'](self, *args)
- def sample(self,*args):
+ def sample(self, *args):
r'''From Giac's documentation:
Help for sample:
sample(Lst(L),Intg(n))
@@ -14066,9 +14066,9 @@ cdef class GiacMethods_base:
Ex5: L:=[1,2,3,4,5,6];L.sample(3)
Ex6:
'''
- return GiacMethods['sample'](self,*args)
+ return GiacMethods['sample'](self, *args)
- def samplerate(self,*args):
+ def samplerate(self, *args):
r'''From Giac's documentation:
Help for samplerate:
samplerate(Lst(clip))
@@ -14076,9 +14076,9 @@ cdef class GiacMethods_base:
See also: 1/ bit_depth 2/ channels 3/ channel_data 4/ duration
Ex1:samplerate(readwav("/some/file"))
'''
- return GiacMethods['samplerate'](self,*args)
+ return GiacMethods['samplerate'](self, *args)
- def sans_factoriser(self,*args):
+ def sans_factoriser(self, *args):
r'''From Giac's documentation:
Help for sans_factoriser:
sans_factoriser(Opt.)
@@ -14090,9 +14090,9 @@ cdef class GiacMethods_base:
Ex4: plotimplicit(x^2+y^2+z^2-1,[x,y,z],xstep=0.2,ystep=0.2,zstep=0.2,unfactored)
Ex5: plotimplicit(x^2+y^2+z^2-1,x=0..1,y=0..1,z=0..1,xstep=0.2,ystep=0.2,zstep=0.2,unfactored)
'''
- return GiacMethods['sans_factoriser'](self,*args)
+ return GiacMethods['sans_factoriser'](self, *args)
- def saute(self,*args):
+ def saute(self, *args):
r'''From Giac's documentation:
Help for saute:
saute(NULL or Real(n))
@@ -14101,9 +14101,9 @@ cdef class GiacMethods_base:
Ex1: saute 30
Ex2:saute(30)
'''
- return GiacMethods['saute'](self,*args)
+ return GiacMethods['saute'](self, *args)
- def scalarProduct(self,*args):
+ def scalarProduct(self, *args):
r'''From Giac's documentation:
Help for scalarProduct:
scalarProduct(Vect(v1),Vect(v2))
@@ -14113,9 +14113,9 @@ cdef class GiacMethods_base:
Ex2:scalarProduct([3,2,4],[3,2,4])
Ex3:scalarProduct([[1,2],[3,4]],[[3,2],[4,5]])
'''
- return GiacMethods['scalarProduct'](self,*args)
+ return GiacMethods['scalarProduct'](self, *args)
- def scalar_product(self,*args):
+ def scalar_product(self, *args):
r'''From Giac's documentation:
Help for scalar_product:
scalar_product(Vect(v1),Vect(v2))
@@ -14125,9 +14125,9 @@ cdef class GiacMethods_base:
Ex2:scalar_product([3,2,4],[3,2,4])
Ex3:scalar_product([[1,2],[3,4]],[[3,2],[4,5]])
'''
- return GiacMethods['scalar_product'](self,*args)
+ return GiacMethods['scalar_product'](self, *args)
- def scatterplot(self,*args):
+ def scatterplot(self, *args):
r'''From Giac's documentation:
Help for scatterplot:
scatterplot(Mtrx)
@@ -14135,9 +14135,9 @@ cdef class GiacMethods_base:
See also: 1/ polygonplot 2/ polygonscatterplot 3/ listplot
Ex1:scatterplot([[1,2,3],[2,0,1],[-1,2,3]])
'''
- return GiacMethods['scatterplot'](self,*args)
+ return GiacMethods['scatterplot'](self, *args)
- def schur(self,*args):
+ def schur(self, *args):
r'''From Giac's documentation:
Help for schur:
schur(Mtrx(A))
@@ -14146,9 +14146,9 @@ cdef class GiacMethods_base:
Ex1:schur([[1,2,3],[4,5,6],[7,8,1]])
Ex2:schur([[1,2,3,4],[4,5,6,7],[7,8,9,0],[0,1,2,3]])
'''
- return GiacMethods['schur'](self,*args)
+ return GiacMethods['schur'](self, *args)
- def sec(self,*args):
+ def sec(self, *args):
r'''From Giac's documentation:
Help for sec:
sec(Expr)
@@ -14156,9 +14156,9 @@ cdef class GiacMethods_base:
See also: 1/ cos 2/ asec
Ex1:sec(pi/3)
'''
- return GiacMethods['sec'](self,*args)
+ return GiacMethods['sec'](self, *args)
- def secant_solver(self,*args):
+ def secant_solver(self, *args):
r'''From Giac's documentation:
Help for secant_solver:
secant_solver(Opt)
@@ -14171,9 +14171,9 @@ cdef class GiacMethods_base:
Ex5: fsolve(cos(x)=x,x,0,secant_solver)
Ex6: fsolve(cos(x)=x,x,0,steffenson_solver)
'''
- return GiacMethods['secant_solver'](self,*args)
+ return GiacMethods['secant_solver'](self, *args)
- def segment(self,*args):
+ def segment(self, *args):
r'''From Giac's documentation:
Help for segment:
segment((Pnt or Cplx or Lst([xM,yM])),(Pnt or Cplx or Lst([xN,yN]),[Var],[Var] or Opt)
@@ -14187,9 +14187,9 @@ cdef class GiacMethods_base:
Ex6: arc(i,1,pi/4,segment)
Ex7: affichage( arc(i,1,pi/4,segment),1+rempli)
'''
- return GiacMethods['segment'](self,*args)
+ return GiacMethods['segment'](self, *args)
- def seidel_spectrum(self,*args):
+ def seidel_spectrum(self, *args):
r'''From Giac's documentation:
Help for seidel_spectrum:
seidel_spectrum(Graph(G))
@@ -14197,9 +14197,9 @@ cdef class GiacMethods_base:
See also: 1/ graph_spectrum
Ex1:seidel_spectrum(graph("clebsch"))
'''
- return GiacMethods['seidel_spectrum'](self,*args)
+ return GiacMethods['seidel_spectrum'](self, *args)
- def seidel_switch(self,*args):
+ def seidel_switch(self, *args):
r'''From Giac's documentation:
Help for seidel_switch:
seidel_switch(Graph(G),Lst(V))
@@ -14207,9 +14207,9 @@ cdef class GiacMethods_base:
See also: 1/ neighbors 2/ graph_complement
Ex1:seidel_switch(cycle_graph(5),[1,2])
'''
- return GiacMethods['seidel_switch'](self,*args)
+ return GiacMethods['seidel_switch'](self, *args)
- def select(self,*args):
+ def select(self, *args):
r'''From Giac's documentation:
Help for select:
select(FncBool(f),Lst(l))
@@ -14218,9 +14218,9 @@ cdef class GiacMethods_base:
Ex1:select(x->x>=5,[1,2,6,7])
Ex2:select(x->isprime(x),range(20)).^2
'''
- return GiacMethods['select'](self,*args)
+ return GiacMethods['select'](self, *args)
- def semi_augment(self,*args):
+ def semi_augment(self, *args):
r'''From Giac's documentation:
Help for semi_augment:
semi_augment(Mtrx(A),Mtrx(B))
@@ -14228,9 +14228,9 @@ cdef class GiacMethods_base:
See also: 1/ augment
Ex1:semi_augment([[68,-21],[56,59],[1,2]],[[68,-21],[56,59]])
'''
- return GiacMethods['semi_augment'](self,*args)
+ return GiacMethods['semi_augment'](self, *args)
- def seq(self,*args):
+ def seq(self, *args):
r'''From Giac's documentation:
Help for seq:
seq(Expr(Xpr),Var(Var)=Int(a..b),[Real(p)]||Expr(Xpr),Var(Var),Real(a),Real(b),[Real(p)])
@@ -14248,9 +14248,9 @@ cdef class GiacMethods_base:
Ex10: [seq(0.3..2,0.2)]
Ex11: a:=(1,2,3);eval(seq(a,4))
'''
- return GiacMethods['seq'](self,*args)
+ return GiacMethods['seq'](self, *args)
- def seqplot(self,*args):
+ def seqplot(self, *args):
r'''From Giac's documentation:
Help for seqplot:
seqplot(Expr(f(Var)),Var=[a,xm,xM],Intg(p))
@@ -14260,9 +14260,9 @@ cdef class GiacMethods_base:
Ex2:seqplot(sqrt(2+t),t=6,5)
Ex3:seqplot(sqrt(2+x),x=[6,1,7],5,affichage=epaisseur_ligne_2)
'''
- return GiacMethods['seqplot'](self,*args)
+ return GiacMethods['seqplot'](self, *args)
- def seqsolve(self,*args):
+ def seqsolve(self, *args):
r'''From Giac's documentation:
Help for seqsolve:
seqsolve((Expr or LstExpr),(Var or LstVar),(InitVal or LstInitVal))
@@ -14275,9 +14275,9 @@ cdef class GiacMethods_base:
Ex5:seqsolve([x+2*y,n+1+x],[x,y,n],[0,1])
Ex6:seqsolve([x+2*y+n+1,x],[x,y,n],[0,1])
'''
- return GiacMethods['seqsolve'](self,*args)
+ return GiacMethods['seqsolve'](self, *args)
- def sequence_graph(self,*args):
+ def sequence_graph(self, *args):
r'''From Giac's documentation:
Help for sequence_graph:
sequence_graph(Lst(L))
@@ -14285,9 +14285,9 @@ cdef class GiacMethods_base:
See also: 1/ degree_sequence 2/ is_graphic_sequence
Ex1:sequence_graph(degree_sequence(sequence_graph([3,2,4,2,3,4,5,7])))
'''
- return GiacMethods['sequence_graph'](self,*args)
+ return GiacMethods['sequence_graph'](self, *args)
- def series(self,*args):
+ def series(self, *args):
r'''From Giac's documentation:
Help for series:
series(Expr,Equal(var=limit_point),[Order],[Dir(1,0,-1)])
@@ -14307,9 +14307,9 @@ cdef class GiacMethods_base:
Ex12:series(subst(sin(x+y)+cos(y*x),[x,y],h*[x,y]),h=0,6,polynom)(h=1)
Ex13: truncate(series(sin(x),x=0,6),6)
'''
- return GiacMethods['series'](self,*args)
+ return GiacMethods['series'](self, *args)
- def set_edge_attribute(self,*args):
+ def set_edge_attribute(self, *args):
r'''From Giac's documentation:
Help for set_edge_attribute:
set_edge_attribute(Graph(G),Edge(e),Seq(tag1=value1,tag2=value2,..))
@@ -14317,9 +14317,9 @@ cdef class GiacMethods_base:
See also: 1/ discard_edge_attribute 2/ get_edge_attribute 3/ list_edge_attributes
Ex1:set_edge_attribute(cycle_graph(3),[1,2],"cost"=12.4)
'''
- return GiacMethods['set_edge_attribute'](self,*args)
+ return GiacMethods['set_edge_attribute'](self, *args)
- def set_edge_weight(self,*args):
+ def set_edge_weight(self, *args):
r'''From Giac's documentation:
Help for set_edge_weight:
set_edge_weight(Graph(G),Edge(e),Real(w))
@@ -14327,9 +14327,9 @@ cdef class GiacMethods_base:
See also: 1/ is_weighted 2/ get_edge_weight 3/ make_weighted 4/ weight_matrix
Ex1:set_edge_weight(graph(%{[1,2],[2,3]%}),[1,2],5)
'''
- return GiacMethods['set_edge_weight'](self,*args)
+ return GiacMethods['set_edge_weight'](self, *args)
- def set_graph_attribute(self,*args):
+ def set_graph_attribute(self, *args):
r'''From Giac's documentation:
Help for set_graph_attribute:
set_graph_attribute(Graph(G),Seq(tag1=value1,tag2=value2,..))
@@ -14337,9 +14337,9 @@ cdef class GiacMethods_base:
See also: 1/ discard_graph_attribute 2/ get_graph_attribute 3/ list_graph_attributes
Ex1:set_graph_attribute(cycle_graph(3),"name"="cycle graph")
'''
- return GiacMethods['set_graph_attribute'](self,*args)
+ return GiacMethods['set_graph_attribute'](self, *args)
- def set_pixel(self,*args):
+ def set_pixel(self, *args):
r'''From Giac's documentation:
Help for set_pixel:
set_pixel(Intg(x),Intg(y),Intg(col))
@@ -14347,9 +14347,9 @@ cdef class GiacMethods_base:
See also: 1/ clear 2/ show_pixels 3/ draw_line 4/ draw_rectangle 5/ draw_polygon
Ex1: clear(); set_pixel(4); draw_pixel(1,2,red); show_pixels();
'''
- return GiacMethods['set_pixel'](self,*args)
+ return GiacMethods['set_pixel'](self, *args)
- def set_vertex_attribute(self,*args):
+ def set_vertex_attribute(self, *args):
r'''From Giac's documentation:
Help for set_vertex_attribute:
set_vertex_attribute(Graph(G),Vrtx(v),Seq(tag1=value1,tag2=value2,..))
@@ -14357,9 +14357,9 @@ cdef class GiacMethods_base:
See also: 1/ discard_vertex_attribute 2/ get_vertex_attribute 3/ list_vertex_attributes
Ex1:set_vertex_attribute(cycle_graph(3),1,"supply"=27)
'''
- return GiacMethods['set_vertex_attribute'](self,*args)
+ return GiacMethods['set_vertex_attribute'](self, *args)
- def set_vertex_positions(self,*args):
+ def set_vertex_positions(self, *args):
r'''From Giac's documentation:
Help for set_vertex_positions:
set_vertex_positions(Graph(G),Lst(vp))
@@ -14367,9 +14367,9 @@ cdef class GiacMethods_base:
See also: 1/ draw_graph
Ex1: G:=graph([1,2,3,4,5,6],%{[1,2],[1,4],[4,5],[2,5],[2,3],[3,6],[5,6]%}); G:=set_vertex_positions(G,[[0,0],[0.5,0],[1,0],[0,0.5],[0.5,0.5],[1,0.5]])
'''
- return GiacMethods['set_vertex_positions'](self,*args)
+ return GiacMethods['set_vertex_positions'](self, *args)
- def shift(self,*args):
+ def shift(self, *args):
r'''From Giac's documentation:
Help for shift:
shift(Lst,[Intg(n)])
@@ -14381,9 +14381,9 @@ cdef class GiacMethods_base:
Ex4: L:=[0,1,2,3];L:=shift(L,2)
Ex5: L:=[0,1,2,3];L.shift(2)
'''
- return GiacMethods['shift'](self,*args)
+ return GiacMethods['shift'](self, *args)
- def shift_phase(self,*args):
+ def shift_phase(self, *args):
r'''From Giac's documentation:
Help for shift_phase:
shift_phase(Expr)
@@ -14396,9 +14396,9 @@ cdef class GiacMethods_base:
Ex5:shift_phase(cos(t))
Ex6:shift_phase(tan(u))
'''
- return GiacMethods['shift_phase'](self,*args)
+ return GiacMethods['shift_phase'](self, *args)
- def shortest_path(self,*args):
+ def shortest_path(self, *args):
r'''From Giac's documentation:
Help for shortest_path:
shortest_path(Graph(G),Vrtx(s),Vrtx(t)||Lst(T))
@@ -14406,9 +14406,9 @@ cdef class GiacMethods_base:
See also: 1/ dijkstra 2/ vertex_distance
Ex1:shortest_path(cycle_graph(6),1,5)
'''
- return GiacMethods['shortest_path'](self,*args)
+ return GiacMethods['shortest_path'](self, *args)
- def show_pixels(self,*args):
+ def show_pixels(self, *args):
r'''From Giac's documentation:
Help for show_pixels:
show_pixels(NULL)
@@ -14416,9 +14416,9 @@ cdef class GiacMethods_base:
See also: 1/ set_pixel 2/ clear
Ex1:show_pixels()
'''
- return GiacMethods['show_pixels'](self,*args)
+ return GiacMethods['show_pixels'](self, *args)
- def shuffle(self,*args):
+ def shuffle(self, *args):
r'''From Giac's documentation:
Help for shuffle:
shuffle(Intg(n)||Lst(L))
@@ -14430,9 +14430,9 @@ cdef class GiacMethods_base:
Ex4: L:=[1,3,5,7,9];L:=randperm(L)
Ex5: L:=[1,3,5,7,9];L.randperm()
'''
- return GiacMethods['shuffle'](self,*args)
+ return GiacMethods['shuffle'](self, *args)
- def sierpinski_graph(self,*args):
+ def sierpinski_graph(self, *args):
r'''From Giac's documentation:
Help for sierpinski_graph:
sierpinski_graph(Intg(n),Intg(k),[triangle])
@@ -14444,9 +14444,9 @@ cdef class GiacMethods_base:
Ex4:sierpinski_graph(3,2)
Ex5:sierpinski_graph(3,3,at_triangle)
'''
- return GiacMethods['sierpinski_graph'](self,*args)
+ return GiacMethods['sierpinski_graph'](self, *args)
- def sign(self,*args):
+ def sign(self, *args):
r'''From Giac's documentation:
Help for sign:
sign(Expr)
@@ -14455,9 +14455,9 @@ cdef class GiacMethods_base:
Ex1:sign(-4)
Ex2:sign(4-5)
'''
- return GiacMethods['sign'](self,*args)
+ return GiacMethods['sign'](self, *args)
- def signature(self,*args):
+ def signature(self, *args):
r'''From Giac's documentation:
Help for signature:
signature(Permut)
@@ -14465,9 +14465,9 @@ cdef class GiacMethods_base:
See also: 1/ permu2cycles 2/ is_permu
Ex1:signature([1,0,3,4,2])
'''
- return GiacMethods['signature'](self,*args)
+ return GiacMethods['signature'](self, *args)
- def signe(self,*args):
+ def signe(self, *args):
r'''From Giac's documentation:
Help for signe:
signe(Str(s))
@@ -14476,9 +14476,9 @@ cdef class GiacMethods_base:
Ex1:signe("Thomas")
Ex2:signe(Thomas)
'''
- return GiacMethods['signe'](self,*args)
+ return GiacMethods['signe'](self, *args)
- def similarity(self,*args):
+ def similarity(self, *args):
r'''From Giac's documentation:
Help for similarity:
similarity(Pnt or Dr3,Real,Angle,Pnt)
@@ -14489,9 +14489,9 @@ cdef class GiacMethods_base:
Ex3: s:=similarity(1+i,2,pi/3);s(i)
Ex4: s:=similarity(line(x=y,y=z),2,pi/3),s(point(-1,2,1))
'''
- return GiacMethods['similarity'](self,*args)
+ return GiacMethods['similarity'](self, *args)
- def simp2(self,*args):
+ def simp2(self, *args):
r'''From Giac's documentation:
Help for simp2:
simp2(Intg(A) or Poly(A),Intg(B) or Poly(B))
@@ -14500,9 +14500,9 @@ cdef class GiacMethods_base:
Ex1:simp2(12,18)
Ex2:simp2(x^3-1,x^2-1)
'''
- return GiacMethods['simp2'](self,*args)
+ return GiacMethods['simp2'](self, *args)
- def simplex_reduce(self,*args):
+ def simplex_reduce(self, *args):
r'''From Giac's documentation:
Help for simplex_reduce:
simplex_reduce(Mtrx(A), Vect(b), Vect(c))
@@ -14513,9 +14513,9 @@ cdef class GiacMethods_base:
Ex4:simplex_reduce([[-3,2,1,0,3],[1,1,0,1,4],[-1,-2,0,0,0]])
Ex5:simplex_reduce([[2,1,1,1,0,0,2],[1,2,3,0,1,0,5],[2,2,1,0,0,1,6],[-3,-1,-3,1,-1,2,0]])
'''
- return GiacMethods['simplex_reduce'](self,*args)
+ return GiacMethods['simplex_reduce'](self, *args)
- def simplifier(self,*args):
+ def simplifier(self, *args):
r'''From Giac's documentation:
Help for simplifier:
simplifier(Expr)
@@ -14525,9 +14525,9 @@ cdef class GiacMethods_base:
Ex2:simplifier(texpand((sin(3*x)+sin(7*x))/sin(5*x)))
Ex3:simplifier(texpand((cos(3*x)+cos(7*x))/cos(5*x)))
'''
- return GiacMethods['simplifier'](self,*args)
+ return GiacMethods['simplifier'](self, *args)
- def simplify(self,*args):
+ def simplify(self, *args):
r'''From Giac's documentation:
Help for simplify:
simplify(Expr)
@@ -14537,9 +14537,9 @@ cdef class GiacMethods_base:
Ex2:simplify(texpand((sin(3*x)+sin(7*x))/sin(5*x)))
Ex3:simplify(texpand((cos(3*x)+cos(7*x))/cos(5*x)))
'''
- return GiacMethods['simplify'](self,*args)
+ return GiacMethods['simplify'](self, *args)
- def simpson(self,*args):
+ def simpson(self, *args):
r'''From Giac's documentation:
Help for simpson:
simpson(Opt)
@@ -14550,9 +14550,9 @@ cdef class GiacMethods_base:
Ex3: area(x^2,x=0..1,5,rombergm)
Ex4:simpson(area(x^2,x=0..1,5,gauss15))
'''
- return GiacMethods['simpson'](self,*args)
+ return GiacMethods['simpson'](self, *args)
- def simult(self,*args):
+ def simult(self, *args):
r'''From Giac's documentation:
Help for simult:
simult(Mtrx(A),Mtrx(B))
@@ -14561,9 +14561,9 @@ cdef class GiacMethods_base:
Ex1:simult([[3,1],[3,2]],[[-2],[2]])
Ex2:simult([[3,1],[3,2]],[[-2,1],[2,-1]])
'''
- return GiacMethods['simult'](self,*args)
+ return GiacMethods['simult'](self, *args)
- def sin(self,*args):
+ def sin(self, *args):
r'''From Giac's documentation:
Help for sin:
sin(Expr or Opt)
@@ -14572,9 +14572,9 @@ cdef class GiacMethods_base:
Ex1:sin(0)
Ex2: convert(cos(x)^4+sin(x)^2,sin)
'''
- return GiacMethods['sin'](self,*args)
+ return GiacMethods['sin'](self, *args)
- def sin2costan(self,*args):
+ def sin2costan(self, *args):
r'''From Giac's documentation:
Help for sin2costan:
sin2costan(Expr)
@@ -14582,9 +14582,9 @@ cdef class GiacMethods_base:
See also: 1/ tan2sincos 2/ cos2sintan 3/ tan2sincos2 4/ tan2cossin2
Ex1:sin2costan(sin(x))
'''
- return GiacMethods['sin2costan'](self,*args)
+ return GiacMethods['sin2costan'](self, *args)
- def sinc(self,*args):
+ def sinc(self, *args):
r'''From Giac's documentation:
Help for sinc:
sinc(Expr(x))
@@ -14592,9 +14592,9 @@ cdef class GiacMethods_base:
See also: 1/ sin
Ex1:sinc(pi*x)
'''
- return GiacMethods['sinc'](self,*args)
+ return GiacMethods['sinc'](self, *args)
- def sincos(self,*args):
+ def sincos(self, *args):
r'''From Giac's documentation:
Help for sincos:
sincos(Expr or Opt)
@@ -14604,9 +14604,9 @@ cdef class GiacMethods_base:
Ex2:sincos(exp(-i*x))
Ex3: convert(exp(i*x),sincos)
'''
- return GiacMethods['sincos'](self,*args)
+ return GiacMethods['sincos'](self, *args)
- def single_inter(self,*args):
+ def single_inter(self, *args):
r'''From Giac's documentation:
Help for single_inter:
single_inter(Curve,Curve,[Pnt(A)||LstPnt(L)])
@@ -14620,9 +14620,9 @@ cdef class GiacMethods_base:
Ex6:single_inter(plane(x=y),plane(y=z))
Ex7:single_inter(line(x=y+1,y=2*z),plane(y=z))
'''
- return GiacMethods['single_inter'](self,*args)
+ return GiacMethods['single_inter'](self, *args)
- def sinh(self,*args):
+ def sinh(self, *args):
r'''From Giac's documentation:
Help for sinh:
sinh(Expr)
@@ -14630,9 +14630,9 @@ cdef class GiacMethods_base:
See also: 1/ asinh
Ex1:sinh(0)
'''
- return GiacMethods['sinh'](self,*args)
+ return GiacMethods['sinh'](self, *args)
- def sizes(self,*args):
+ def sizes(self, *args):
r'''From Giac's documentation:
Help for sizes:
sizes(Lst or Str or Seq)
@@ -14640,9 +14640,9 @@ cdef class GiacMethods_base:
See also: 1/ size 2/ dim
Ex1:sizes([[1,2,3],[1,2],[1]])
'''
- return GiacMethods['sizes'](self,*args)
+ return GiacMethods['sizes'](self, *args)
- def slope(self,*args):
+ def slope(self, *args):
r'''From Giac's documentation:
Help for slope:
slope(Line||Pnt||Cplx,[Pnt||Cplx])
@@ -14657,9 +14657,9 @@ cdef class GiacMethods_base:
Ex7:slope(LineTan(sin(x),pi/4))
Ex8: line(point(1,2),slope=-1)
'''
- return GiacMethods['slope'](self,*args)
+ return GiacMethods['slope'](self, *args)
- def slopeat(self,*args):
+ def slopeat(self, *args):
r'''From Giac's documentation:
Help for slopeat:
slopeat(Line, Pnt||Cplx(z0))
@@ -14669,9 +14669,9 @@ cdef class GiacMethods_base:
Ex2: s:=segment(1-i,i);slopeat(s,point(0.4))
Ex3: t:=tangent(plotfunc(sin(x)),pi/4);slopeat(t,0)
'''
- return GiacMethods['slopeat'](self,*args)
+ return GiacMethods['slopeat'](self, *args)
- def slopeatraw(self,*args):
+ def slopeatraw(self, *args):
r'''From Giac's documentation:
Help for slopeatraw:
slopeatraw(Line, Pnt||Cplx(z0))
@@ -14682,9 +14682,9 @@ cdef class GiacMethods_base:
Ex3:slopeatraw(tangent(plotfunc(sin(x)),pi/4),0)
Ex4:slopeatraw((LineTan sin(x),pi/4),i)
'''
- return GiacMethods['slopeatraw'](self,*args)
+ return GiacMethods['slopeatraw'](self, *args)
- def smith(self,*args):
+ def smith(self, *args):
r'''From Giac's documentation:
Help for smith:
smith(Mtrx(A))
@@ -14693,9 +14693,9 @@ cdef class GiacMethods_base:
Ex1: n:=10; A:=ranm(n,n) % 17; U,D,V:=smith(x*idn(n)-A);normal(U*(x*idn(n)-A)*V-D); diag(D);
Ex2: GF(3,5,g); n:=3; A:=ranm(n,n,g); U,D,V:=smith(x*idn(n)-A);normal(U*(x*idn(n)-A)*V-D); diag(D);
'''
- return GiacMethods['smith'](self,*args)
+ return GiacMethods['smith'](self, *args)
- def smod(self,*args):
+ def smod(self, *args):
r'''From Giac's documentation:
Help for smod:
smod(Intg,Intg)
@@ -14705,9 +14705,9 @@ cdef class GiacMethods_base:
Ex2:smod(10,4)
Ex3:smod(11,7)
'''
- return GiacMethods['smod'](self,*args)
+ return GiacMethods['smod'](self, *args)
- def snedecor(self,*args):
+ def snedecor(self, *args):
r'''From Giac's documentation:
Help for snedecor:
snedecor(Intg(n),Intg(m),Real(x0))
@@ -14718,9 +14718,9 @@ cdef class GiacMethods_base:
Ex3: randvector(5,fisher,4,6)
Ex4: ranm(2,3,fisher,4,6)
'''
- return GiacMethods['snedecor'](self,*args)
+ return GiacMethods['snedecor'](self, *args)
- def snedecor_cdf(self,*args):
+ def snedecor_cdf(self, *args):
r'''From Giac's documentation:
Help for snedecor_cdf:
snedecor_cdf(Intg(n),Intg(m),Real(x0))
@@ -14729,9 +14729,9 @@ cdef class GiacMethods_base:
Ex1:snedecor_cdf(4,4,2.1)
Ex2:snedecor_cdf(4,10,3.5)
'''
- return GiacMethods['snedecor_cdf'](self,*args)
+ return GiacMethods['snedecor_cdf'](self, *args)
- def snedecor_icdf(self,*args):
+ def snedecor_icdf(self, *args):
r'''From Giac's documentation:
Help for snedecor_icdf:
snedecor_icdf(Intg(n),Intg(m),Real(p))
@@ -14740,9 +14740,9 @@ cdef class GiacMethods_base:
Ex1:snedecor_icdf(4,10,0.95)
Ex2:snedecor_icdf(4,10,0.05)
'''
- return GiacMethods['snedecor_icdf'](self,*args)
+ return GiacMethods['snedecor_icdf'](self, *args)
- def snedecord(self,*args):
+ def snedecord(self, *args):
r'''From Giac's documentation:
Help for snedecord:
snedecord(Intg(n),Intg(m),Real(x0))
@@ -14753,9 +14753,9 @@ cdef class GiacMethods_base:
Ex3: randvector(5,fisher,4,6)
Ex4: ranm(2,3,fisher,4,6)
'''
- return GiacMethods['snedecord'](self,*args)
+ return GiacMethods['snedecord'](self, *args)
- def snedecord_cdf(self,*args):
+ def snedecord_cdf(self, *args):
r'''From Giac's documentation:
Help for snedecord_cdf:
snedecord_cdf(Intg(n),Intg(m),Real(x0))
@@ -14764,9 +14764,9 @@ cdef class GiacMethods_base:
Ex1:snedecord_cdf(4,4,2.1)
Ex2:snedecord_cdf(4,10,3.5)
'''
- return GiacMethods['snedecord_cdf'](self,*args)
+ return GiacMethods['snedecord_cdf'](self, *args)
- def snedecord_icdf(self,*args):
+ def snedecord_icdf(self, *args):
r'''From Giac's documentation:
Help for snedecord_icdf:
snedecord_icdf(Intg(n),Intg(m),Real(p))
@@ -14775,9 +14775,9 @@ cdef class GiacMethods_base:
Ex1:snedecord_icdf(4,10,0.95)
Ex2:snedecord_icdf(4,10,0.05)
'''
- return GiacMethods['snedecord_icdf'](self,*args)
+ return GiacMethods['snedecord_icdf'](self, *args)
- def solid_line(self,*args):
+ def solid_line(self, *args):
r'''From Giac's documentation:
Help for solid_line:
solid_line(Opt)
@@ -14786,9 +14786,9 @@ cdef class GiacMethods_base:
Ex1: display(line(y=x),green+dash_line+line_width_2)
Ex2: d:=display(line(2+i,1),cap_round_line)
'''
- return GiacMethods['solid_line'](self,*args)
+ return GiacMethods['solid_line'](self, *args)
- def solve(self,*args):
+ def solve(self, *args):
r'''From Giac's documentation:
Help for solve:
solve(Expr,[Var])
@@ -14799,9 +14799,9 @@ cdef class GiacMethods_base:
Ex3:solve([y-z=0,z-x=0,x-y=0,x-1+y+z=0],[x,y,z])
Ex4:solve([x^2-y^2=0,x^2-z^2=0],[x,y,z])
'''
- return GiacMethods['solve'](self,*args)
+ return GiacMethods['solve'](self, *args)
- def somme(self,*args):
+ def somme(self, *args):
r'''From Giac's documentation:
Help for somme:
somme(Expr,Var,VarMin(a),VarMax(b),[VarStep(p)])
@@ -14818,9 +14818,9 @@ cdef class GiacMethods_base:
Ex9:somme(1/(x*(x+1)),x)
Ex10:somme(cos(n*x),n)
'''
- return GiacMethods['somme'](self,*args)
+ return GiacMethods['somme'](self, *args)
- def sommet(self,*args):
+ def sommet(self, *args):
r'''From Giac's documentation:
Help for sommet:
sommet(Op or Fnct)
@@ -14829,9 +14829,9 @@ cdef class GiacMethods_base:
Ex1:sommet(quote(gcd(45,123)))
Ex2:sommet('gcd(45,123)')
'''
- return GiacMethods['sommet'](self,*args)
+ return GiacMethods['sommet'](self, *args)
- def sort(self,*args):
+ def sort(self, *args):
r'''From Giac's documentation:
Help for sort:
sort(LstReal or Seq [Fnc])
@@ -14843,9 +14843,9 @@ cdef class GiacMethods_base:
Ex4:sort([[1,2],[2,3],[4,3]],(x,y)->when(x[1]==y[1],x[0]>y[0],x[1]>y[1]))
Ex5:sort(y*x*2+x*y)
'''
- return GiacMethods['sort'](self,*args)
+ return GiacMethods['sort'](self, *args)
- def sorta(self,*args):
+ def sorta(self, *args):
r'''From Giac's documentation:
Help for sorta:
sorta(LstReal||Seq×||Mtrx)
@@ -14855,9 +14855,9 @@ cdef class GiacMethods_base:
Ex2:sorta([3,4,2])
Ex3:sorta([[3,4,2],[6,4,5]])
'''
- return GiacMethods['sorta'](self,*args)
+ return GiacMethods['sorta'](self, *args)
- def sortd(self,*args):
+ def sortd(self, *args):
r'''From Giac's documentation:
Help for sortd:
sortd(LstReal||Seq||Mtrx)
@@ -14867,9 +14867,9 @@ cdef class GiacMethods_base:
Ex2:sortd([3,4,2])
Ex3:sortd([[3,4,2],[6,4,5]])
'''
- return GiacMethods['sortd'](self,*args)
+ return GiacMethods['sortd'](self, *args)
- def sorted(self,*args):
+ def sorted(self, *args):
r'''From Giac's documentation:
Help for sorted:
sorted(LstReal or Seq [Fnc])
@@ -14881,9 +14881,9 @@ cdef class GiacMethods_base:
Ex4:sorted([[1,2],[2,3],[4,3]],(x,y)->when(x[1]==y[1],x[0]>y[0],x[1]>y[1]))
Ex5:sorted(y*x*2+x*y)
'''
- return GiacMethods['sorted'](self,*args)
+ return GiacMethods['sorted'](self, *args)
- def soundsec(self,*args):
+ def soundsec(self, *args):
r'''From Giac's documentation:
Help for soundsec:
soundsec(Intg(n),[Intg(N)])
@@ -14892,9 +14892,9 @@ cdef class GiacMethods_base:
Ex1:soundsec(1)
Ex2:soundsec(1,22100)
'''
- return GiacMethods['soundsec'](self,*args)
+ return GiacMethods['soundsec'](self, *args)
- def spanning_tree(self,*args):
+ def spanning_tree(self, *args):
r'''From Giac's documentation:
Help for spanning_tree:
spanning_tree(Graph(G),[Vrtx(r)])
@@ -14903,9 +14903,9 @@ cdef class GiacMethods_base:
Ex1:spanning_tree(graph("petersen"))
Ex2:spanning_tree(graph("petersen"),5)
'''
- return GiacMethods['spanning_tree'](self,*args)
+ return GiacMethods['spanning_tree'](self, *args)
- def sphere(self,*args):
+ def sphere(self, *args):
r'''From Giac's documentation:
Help for sphere:
sphere((Pnt or Vect),(Pnt or Real))
@@ -14914,9 +14914,9 @@ cdef class GiacMethods_base:
Ex1:sphere([0,0,0],[2,2,2])
Ex2:sphere([1,1,1],1)
'''
- return GiacMethods['sphere'](self,*args)
+ return GiacMethods['sphere'](self, *args)
- def spline(self,*args):
+ def spline(self, *args):
r'''From Giac's documentation:
Help for spline:
spline(Lst(lx),Lst(ly),Var(x),Intg(d))
@@ -14924,9 +14924,9 @@ cdef class GiacMethods_base:
See also: 1/ lagrange
Ex1:spline([0,1,2],[1,3,0],x,3)
'''
- return GiacMethods['spline'](self,*args)
+ return GiacMethods['spline'](self, *args)
- def split(self,*args):
+ def split(self, *args):
r'''From Giac's documentation:
Help for split:
split(Expr(Xpr),Lst(var1,var2))
@@ -14935,18 +14935,18 @@ cdef class GiacMethods_base:
Ex1:split(x^3*y^2-y^2+x^3-1,[x,y])
Ex2:split(x^3*y^2-y^2+x^3+1,[x,y])
'''
- return GiacMethods['split'](self,*args)
+ return GiacMethods['split'](self, *args)
- def spring(self,*args):
+ def spring(self, *args):
r'''From Giac's documentation:
Help for spring:
spring(Opt)
Option for the draw_graph command.
See also: 1/ planar 2/ tree 3/ draw_graph
'''
- return GiacMethods['spring'](self,*args)
+ return GiacMethods['spring'](self, *args)
- def sq(self,*args):
+ def sq(self, *args):
r'''From Giac's documentation:
Help for sq:
sq(Seq)
@@ -14955,9 +14955,9 @@ cdef class GiacMethods_base:
Ex1:sq(5)
Ex2:sq(1,2,3)
'''
- return GiacMethods['sq'](self,*args)
+ return GiacMethods['sq'](self, *args)
- def sqrfree(self,*args):
+ def sqrfree(self, *args):
r'''From Giac's documentation:
Help for sqrfree:
sqrfree(Expr)
@@ -14966,9 +14966,9 @@ cdef class GiacMethods_base:
Ex1:sqrfree(x^4-2*x^2+1)
Ex2:sqrfree((x-2)^7*(x+2)^7*(x^4-2*x^2+1))
'''
- return GiacMethods['sqrfree'](self,*args)
+ return GiacMethods['sqrfree'](self, *args)
- def sqrt(self,*args):
+ def sqrt(self, *args):
r'''From Giac's documentation:
Help for sqrt:
sqrt(Expr)
@@ -14977,9 +14977,9 @@ cdef class GiacMethods_base:
Ex1:sqrt(50)
Ex2:sqrt(x^2)
'''
- return GiacMethods['sqrt'](self,*args)
+ return GiacMethods['sqrt'](self, *args)
- def square(self,*args):
+ def square(self, *args):
r'''From Giac's documentation:
Help for square:
square((Pnt(A) or Cplx),(Pnt(B) or Cplx),[Pnt(P),Var(C),Var(D)])
@@ -14990,9 +14990,9 @@ cdef class GiacMethods_base:
Ex3:square(point(0,0,0),point(3,3,3),point(0,0,3))
Ex4:square(point(0,0,0),point(3,3,3),point(0,0,3),C,D)
'''
- return GiacMethods['square'](self,*args)
+ return GiacMethods['square'](self, *args)
- def square_point(self,*args):
+ def square_point(self, *args):
r'''From Giac's documentation:
Help for square_point:
square_point(Opt)
@@ -15001,9 +15001,9 @@ cdef class GiacMethods_base:
Ex1: F:=display(point(2+1.5*i),point_point)
Ex2: F:=display(point(2+1.5*i),rhombus_point)
'''
- return GiacMethods['square_point'](self,*args)
+ return GiacMethods['square_point'](self, *args)
- def srand(self,*args):
+ def srand(self, *args):
r'''From Giac's documentation:
Help for srand:
srand()
@@ -15012,9 +15012,9 @@ cdef class GiacMethods_base:
Ex1:srand(12)
Ex2: srand
'''
- return GiacMethods['srand'](self,*args)
+ return GiacMethods['srand'](self, *args)
- def sst(self,*args):
+ def sst(self, *args):
r'''From Giac's documentation:
Help for sst:
sst(NULL)
@@ -15022,9 +15022,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:sst()
'''
- return GiacMethods['sst'](self,*args)
+ return GiacMethods['sst'](self, *args)
- def sst_in(self,*args):
+ def sst_in(self, *args):
r'''From Giac's documentation:
Help for sst_in:
sst_in(NULL)
@@ -15032,9 +15032,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:sst_in()
'''
- return GiacMethods['sst_in'](self,*args)
+ return GiacMethods['sst_in'](self, *args)
- def st_ordering(self,*args):
+ def st_ordering(self, *args):
r'''From Giac's documentation:
Help for st_ordering:
st_ordering(Graph(G),Vrtx(s),Vrtx(t))
@@ -15042,9 +15042,9 @@ cdef class GiacMethods_base:
See also: 1/ is_biconnected
Ex1:st_ordering(graph("petersen"),1,2)
'''
- return GiacMethods['st_ordering'](self,*args)
+ return GiacMethods['st_ordering'](self, *args)
- def star_graph(self,*args):
+ def star_graph(self, *args):
r'''From Giac's documentation:
Help for star_graph:
star_graph(Intg(n))
@@ -15052,9 +15052,9 @@ cdef class GiacMethods_base:
See also: 1/ complete_graph 2/ wheel_graph
Ex1:star_graph(5)
'''
- return GiacMethods['star_graph'](self,*args)
+ return GiacMethods['star_graph'](self, *args)
- def star_point(self,*args):
+ def star_point(self, *args):
r'''From Giac's documentation:
Help for star_point:
star_point(Opt)
@@ -15063,9 +15063,9 @@ cdef class GiacMethods_base:
Ex1: F:=display(point(2+1.5*i),point_point)
Ex2: F:=display(point(2+1.5*i),rhombus_point)
'''
- return GiacMethods['star_point'](self,*args)
+ return GiacMethods['star_point'](self, *args)
- def stdDev(self,*args):
+ def stdDev(self, *args):
r'''From Giac's documentation:
Help for stdDev:
stdDev(Lst||Mtrx,[Lst])
@@ -15075,9 +15075,9 @@ cdef class GiacMethods_base:
Ex2:stdDev([1,2,3],[1,2,1])
Ex3:stdDev([[1,2,3],[5,6,7]])
'''
- return GiacMethods['stdDev'](self,*args)
+ return GiacMethods['stdDev'](self, *args)
- def stddev(self,*args):
+ def stddev(self, *args):
r'''From Giac's documentation:
Help for stddev:
stddev(Lst||Mtrx,[Lst])
@@ -15087,9 +15087,9 @@ cdef class GiacMethods_base:
Ex2:stddev([1,2,3],[1,2,1])
Ex3:stddev([[1,2,3],[5,6,7]])
'''
- return GiacMethods['stddev'](self,*args)
+ return GiacMethods['stddev'](self, *args)
- def stddevp(self,*args):
+ def stddevp(self, *args):
r'''From Giac's documentation:
Help for stddevp:
stddevp(Lst||Mtrx,[Lst])
@@ -15099,9 +15099,9 @@ cdef class GiacMethods_base:
Ex2:stddevp([1,2,3],[1,2,1])
Ex3:stddevp([[1,2,3],[5,6,7]])
'''
- return GiacMethods['stddevp'](self,*args)
+ return GiacMethods['stddevp'](self, *args)
- def steffenson_solver(self,*args):
+ def steffenson_solver(self, *args):
r'''From Giac's documentation:
Help for steffenson_solver:
steffenson_solver(Opt)
@@ -15114,9 +15114,9 @@ cdef class GiacMethods_base:
Ex5: fsolve(cos(x)=x,x,0,secant_solver)
Ex6: fsolve(cos(x)=x,x,0,steffenson_solver)
'''
- return GiacMethods['steffenson_solver'](self,*args)
+ return GiacMethods['steffenson_solver'](self, *args)
- def stereo2mono(self,*args):
+ def stereo2mono(self, *args):
r'''From Giac's documentation:
Help for stereo2mono:
stereo2mono(Lst(clip))
@@ -15124,9 +15124,9 @@ cdef class GiacMethods_base:
See also: 1/ channel_data 2/ mean 3/ createwav
Ex1:stereo2mono(readwav("/some/file"))
'''
- return GiacMethods['stereo2mono'](self,*args)
+ return GiacMethods['stereo2mono'](self, *args)
- def str(self,*args):
+ def str(self, *args):
r'''From Giac's documentation:
Help for str:
str(Expr or Opt)
@@ -15137,9 +15137,9 @@ cdef class GiacMethods_base:
Ex3:str(quote(a:=12))
Ex4: convert(quote(a:=12),string)
'''
- return GiacMethods['str'](self,*args)
+ return GiacMethods['str'](self, *args)
- def strongly_connected_components(self,*args):
+ def strongly_connected_components(self, *args):
r'''From Giac's documentation:
Help for strongly_connected_components:
strongly_connected_components(Graph(G))
@@ -15147,9 +15147,9 @@ cdef class GiacMethods_base:
See also: 1/ connected_components 2/ is_connected 3/ is_strongly_connected
Ex1:strongly_connected_components(digraph([1,2,3],%{[1,2],[1,3],[2,3],[3,2]%}))
'''
- return GiacMethods['strongly_connected_components'](self,*args)
+ return GiacMethods['strongly_connected_components'](self, *args)
- def student(self,*args):
+ def student(self, *args):
r'''From Giac's documentation:
Help for student:
student(Intg(n),Real(x0))
@@ -15158,9 +15158,9 @@ cdef class GiacMethods_base:
Ex1:student(3,5.2)
Ex2:student(1,5.2)
'''
- return GiacMethods['student'](self,*args)
+ return GiacMethods['student'](self, *args)
- def student_cdf(self,*args):
+ def student_cdf(self, *args):
r'''From Giac's documentation:
Help for student_cdf:
student_cdf(Intg(n),Real(x0))
@@ -15169,9 +15169,9 @@ cdef class GiacMethods_base:
Ex1:student_cdf(3,2.35)
Ex2:student_cdf(3,-3.2)
'''
- return GiacMethods['student_cdf'](self,*args)
+ return GiacMethods['student_cdf'](self, *args)
- def student_icdf(self,*args):
+ def student_icdf(self, *args):
r'''From Giac's documentation:
Help for student_icdf:
student_icdf(Intg(n),Real(p))
@@ -15180,9 +15180,9 @@ cdef class GiacMethods_base:
Ex1:student_icdf(3,0.95)
Ex2:student_icdf(3,0.05)
'''
- return GiacMethods['student_icdf'](self,*args)
+ return GiacMethods['student_icdf'](self, *args)
- def studentd(self,*args):
+ def studentd(self, *args):
r'''From Giac's documentation:
Help for studentd:
studentd(Intg(n),Real(x0))
@@ -15191,9 +15191,9 @@ cdef class GiacMethods_base:
Ex1:studentd(3,5.2)
Ex2:studentd(1,5.2)
'''
- return GiacMethods['studentd'](self,*args)
+ return GiacMethods['studentd'](self, *args)
- def studentt(self,*args):
+ def studentt(self, *args):
r'''From Giac's documentation:
Help for studentt:
studentt(Lst,Real,[Real],Fnc,[Real])
@@ -15202,9 +15202,9 @@ cdef class GiacMethods_base:
Ex1:studentt([10,20],.5,.02,'!=',0.1)
Ex2:studentt([0.48,20],0.5,0.1,'<')
'''
- return GiacMethods['studentt'](self,*args)
+ return GiacMethods['studentt'](self, *args)
- def sturm(self,*args):
+ def sturm(self, *args):
r'''From Giac's documentation:
Help for sturm:
sturm(Poly,[Var],[Cplx(a)],[Cplx(b)])
@@ -15216,9 +15216,9 @@ cdef class GiacMethods_base:
Ex4:sturm(x^5-x^3,x,-2,5)
Ex5:sturm(x^3-1,x,-2-i,5+3i)
'''
- return GiacMethods['sturm'](self,*args)
+ return GiacMethods['sturm'](self, *args)
- def sturmab(self,*args):
+ def sturmab(self, *args):
r'''From Giac's documentation:
Help for sturmab:
sturmab(Poly,Var,Cplx(a),Cplx(b))
@@ -15227,9 +15227,9 @@ cdef class GiacMethods_base:
Ex1:sturmab(x^3-1,x,-2,5)
Ex2:sturmab(x^3-1,x,-2-i,5+3i)
'''
- return GiacMethods['sturmab'](self,*args)
+ return GiacMethods['sturmab'](self, *args)
- def sturmseq(self,*args):
+ def sturmseq(self, *args):
r'''From Giac's documentation:
Help for sturmseq:
sturmseq(Poly,[Var])
@@ -15239,9 +15239,9 @@ cdef class GiacMethods_base:
Ex2:sturmseq(x^5-x^3,x)
Ex3:sturmseq((x^5-x^3)/(x+2),x)
'''
- return GiacMethods['sturmseq'](self,*args)
+ return GiacMethods['sturmseq'](self, *args)
- def style(self,*args):
+ def style(self, *args):
r'''From Giac's documentation:
Help for style:
style(Opt)
@@ -15250,9 +15250,9 @@ cdef class GiacMethods_base:
Ex1: segment(0,point(1,1),style=point)
Ex2: line(y=x,style=point,display=green+line_width_2)
'''
- return GiacMethods['style'](self,*args)
+ return GiacMethods['style'](self, *args)
- def subMat(self,*args):
+ def subMat(self, *args):
r'''From Giac's documentation:
Help for subMat:
subMat(Mtrx(A),Intg(n1),Intg(n2),Intg(n3),Intg(n4).)
@@ -15260,9 +15260,9 @@ cdef class GiacMethods_base:
See also: 1/ mid
Ex1:subMat([[1,2],[3,4],[5,6]],1,0,2,1)
'''
- return GiacMethods['subMat'](self,*args)
+ return GiacMethods['subMat'](self, *args)
- def subdivide_edges(self,*args):
+ def subdivide_edges(self, *args):
r'''From Giac's documentation:
Help for subdivide_edges:
subdivide_edges(Graph(G),Lst(E),[Intg(r)])
@@ -15270,9 +15270,9 @@ cdef class GiacMethods_base:
See also: 1/ edges
Ex1:subdivide_edges(complete_graph(2,3),[[1,3],[1,4]],2)
'''
- return GiacMethods['subdivide_edges'](self,*args)
+ return GiacMethods['subdivide_edges'](self, *args)
- def subgraph(self,*args):
+ def subgraph(self, *args):
r'''From Giac's documentation:
Help for subgraph:
subgraph(Graph(G),Lst(E))
@@ -15280,9 +15280,9 @@ cdef class GiacMethods_base:
See also: 1/ induced_subgraph 2/ highlight_subgraph
Ex1:subgraph(complete_graph(5),[[1,2],[2,3],[3,4],[4,1]])
'''
- return GiacMethods['subgraph'](self,*args)
+ return GiacMethods['subgraph'](self, *args)
- def subs(self,*args):
+ def subs(self, *args):
r'''From Giac's documentation:
Help for subs:
subs(Expr or Var=value,Var=value or Expr)
@@ -15292,9 +15292,9 @@ cdef class GiacMethods_base:
Ex2:subs(x=2,1/(4+x^2))
Ex3: f:=1/(4+x^2);f(x=2)
'''
- return GiacMethods['subs'](self,*args)
+ return GiacMethods['subs'](self, *args)
- def subsop(self,*args):
+ def subsop(self, *args):
r'''From Giac's documentation:
Help for subsop:
subsop(Lst||Mtrx,Intg(n)=Expr)
@@ -15304,9 +15304,9 @@ cdef class GiacMethods_base:
Ex3:subsop([[1,2],[3,4]],1=[10,8])
Ex4:subsop([0,1,2,3],'1=NULL')
'''
- return GiacMethods['subsop'](self,*args)
+ return GiacMethods['subsop'](self, *args)
- def subst(self,*args):
+ def subst(self, *args):
r'''From Giac's documentation:
Help for subst:
subst(Expr,Var(v)=value(a))
@@ -15320,9 +15320,9 @@ cdef class GiacMethods_base:
Ex6:subst('sum(x^(n+1)/((n+p+1)*(n+1)),n,0,inf)',n=k-1)
Ex7: f:=1/(x^2+y^2;f(x=2,y=3)
'''
- return GiacMethods['subst'](self,*args)
+ return GiacMethods['subst'](self, *args)
- def substituer(self,*args):
+ def substituer(self, *args):
r'''From Giac's documentation:
Help for substituer:
substituer(Expr,Var(v)=value(a))
@@ -15336,9 +15336,9 @@ cdef class GiacMethods_base:
Ex6:substituer('sum(x^(n+1)/((n+p+1)*(n+1)),n,0,inf)',n=k-1)
Ex7: f:=1/(x^2+y^2;f(x=2,y=3)
'''
- return GiacMethods['substituer'](self,*args)
+ return GiacMethods['substituer'](self, *args)
- def subtype(self,*args):
+ def subtype(self, *args):
r'''From Giac's documentation:
Help for subtype:
subtype(Expr)
@@ -15349,9 +15349,9 @@ cdef class GiacMethods_base:
Ex3:subtype(poly1[1,2,3])
Ex4:subtype([1,2,3])
'''
- return GiacMethods['subtype'](self,*args)
+ return GiacMethods['subtype'](self, *args)
- def sum(self,*args):
+ def sum(self, *args):
r'''From Giac's documentation:
Help for sum:
sum(Expr,Var,VarMin(a),VarMax(b),[VarStep(p)])
@@ -15368,9 +15368,9 @@ cdef class GiacMethods_base:
Ex9:sum(1/(x*(x+1)),x)
Ex10:sum(cos(n*x),n)
'''
- return GiacMethods['sum'](self,*args)
+ return GiacMethods['sum'](self, *args)
- def sum_riemann(self,*args):
+ def sum_riemann(self, *args):
r'''From Giac's documentation:
Help for sum_riemann:
sum_riemann(Expr(Xpr),Lst(var1,var2))
@@ -15380,9 +15380,9 @@ cdef class GiacMethods_base:
Ex2:sum_riemann(n/(n^2+k),[n,k])
Ex3:sum_riemann(n/(n^2+k^2),[n,k])
'''
- return GiacMethods['sum_riemann'](self,*args)
+ return GiacMethods['sum_riemann'](self, *args)
- def suppress(self,*args):
+ def suppress(self, *args):
r'''From Giac's documentation:
Help for suppress:
suppress(Vect(L)||Str(l),Intg(n))
@@ -15393,9 +15393,9 @@ cdef class GiacMethods_base:
Ex3: L:=[0,1,2,3];L:=suppress(L,2)
Ex4: L:=[0,1,2,3];L.suppress(2)
'''
- return GiacMethods['suppress'](self,*args)
+ return GiacMethods['suppress'](self, *args)
- def surd(self,*args):
+ def surd(self, *args):
r'''From Giac's documentation:
Help for surd:
surd(Expr,Intg(n))
@@ -15404,18 +15404,18 @@ cdef class GiacMethods_base:
Ex1:surd(8,3)
Ex2:surd(-8,3)
'''
- return GiacMethods['surd'](self,*args)
+ return GiacMethods['surd'](self, *args)
- def svd(self,*args):
+ def svd(self, *args):
r'''From Giac's documentation:
Help for svd:
svd(Mtrx(A))
For a square numerical real matrix A, returns U orthogonal, S vector of singular values, Q orthogonal such that A=U*diag(S)*tran(Q).
Ex1:svd([[1,2],[3,4]])
'''
- return GiacMethods['svd'](self,*args)
+ return GiacMethods['svd'](self, *args)
- def swapcol(self,*args):
+ def swapcol(self, *args):
r'''From Giac's documentation:
Help for swapcol:
swapcol(Mtrx(A),Intg(n1),Intg(n2))
@@ -15423,9 +15423,9 @@ cdef class GiacMethods_base:
See also: 1/ rowSwap
Ex1:swapcol([[1,2],[3,4],[5,6]],0,1)
'''
- return GiacMethods['swapcol'](self,*args)
+ return GiacMethods['swapcol'](self, *args)
- def swaprow(self,*args):
+ def swaprow(self, *args):
r'''From Giac's documentation:
Help for swaprow:
swaprow(Mtrx(A),Intg(n1),Intg(n2))
@@ -15433,9 +15433,9 @@ cdef class GiacMethods_base:
See also: 1/ rowAdd 2/ colSwap
Ex1:swaprow([[1,2],[3,4],[5,6]],1,2)
'''
- return GiacMethods['swaprow'](self,*args)
+ return GiacMethods['swaprow'](self, *args)
- def switch_axes(self,*args):
+ def switch_axes(self, *args):
r'''From Giac's documentation:
Help for switch_axes:
switch_axes([Intg(0 or 1)])
@@ -15445,9 +15445,9 @@ cdef class GiacMethods_base:
Ex2:switch_axes(0)
Ex3:switch_axes(1)
'''
- return GiacMethods['switch_axes'](self,*args)
+ return GiacMethods['switch_axes'](self, *args)
- def sylvester(self,*args):
+ def sylvester(self, *args):
r'''From Giac's documentation:
Help for sylvester:
sylvester(Poly,Poly,Var)
@@ -15456,9 +15456,9 @@ cdef class GiacMethods_base:
Ex1:sylvester(x^2-1,x^3-1,x)
Ex2:sylvester(x^3-p*x+q,3*x^2-p,x)
'''
- return GiacMethods['sylvester'](self,*args)
+ return GiacMethods['sylvester'](self, *args)
- def symb2poly(self,*args):
+ def symb2poly(self, *args):
r'''From Giac's documentation:
Help for symb2poly:
symb2poly(Expr, LstVar or [Var])
@@ -15471,9 +15471,9 @@ cdef class GiacMethods_base:
Ex5:symb2poly(-x^4+x*3*y+2+y^2*z,[x,y,z])
Ex6:symb2poly(-x^4+x*3*y+2+y^2*z,[x,y,z])
'''
- return GiacMethods['symb2poly'](self,*args)
+ return GiacMethods['symb2poly'](self, *args)
- def symbol(self,*args):
+ def symbol(self, *args):
r'''From Giac's documentation:
Help for symbol:
symbol(Opt)
@@ -15484,9 +15484,9 @@ cdef class GiacMethods_base:
Ex3: a:=sqrt(2);type(a)
Ex4: type(2x+1)
'''
- return GiacMethods['symbol'](self,*args)
+ return GiacMethods['symbol'](self, *args)
- def syst2mat(self,*args):
+ def syst2mat(self, *args):
r'''From Giac's documentation:
Help for syst2mat:
syst2mat(LstLinEq,LstVar)
@@ -15494,9 +15494,9 @@ cdef class GiacMethods_base:
See also: 1/ linsolve 2/ rref
Ex1:syst2mat([x-y=1,x+2*y],[x,y])
'''
- return GiacMethods['syst2mat'](self,*args)
+ return GiacMethods['syst2mat'](self, *args)
- def tCollect(self,*args):
+ def tCollect(self, *args):
r'''From Giac's documentation:
Help for tCollect:
tCollect(Expr)
@@ -15504,9 +15504,9 @@ cdef class GiacMethods_base:
See also: 1/ texpand 2/ tlin
Ex1:tCollect(sin(x)+cos(x))
'''
- return GiacMethods['tCollect'](self,*args)
+ return GiacMethods['tCollect'](self, *args)
- def tExpand(self,*args):
+ def tExpand(self, *args):
r'''From Giac's documentation:
Help for tExpand:
tExpand(Expr)
@@ -15516,9 +15516,9 @@ cdef class GiacMethods_base:
Ex2:tExpand(cos(x+y))
Ex3:tExpand(cos(3*x))
'''
- return GiacMethods['tExpand'](self,*args)
+ return GiacMethods['tExpand'](self, *args)
- def table(self,*args):
+ def table(self, *args):
r'''From Giac's documentation:
Help for table:
table(SeqEqual(index=value))
@@ -15528,9 +15528,9 @@ cdef class GiacMethods_base:
Ex2: A:=[[0,1],[2,3]];table(A)
Ex3: B:=table([1,2]=12,[2,5]=25);matrix(B)
'''
- return GiacMethods['table'](self,*args)
+ return GiacMethods['table'](self, *args)
- def tablefunc(self,*args):
+ def tablefunc(self, *args):
r'''From Giac's documentation:
Help for tablefunc:
tablefunc(Expr,Var)
@@ -15539,9 +15539,9 @@ cdef class GiacMethods_base:
Ex1:tablefunc(sin(x),x)
Ex2:tablefunc(x^2-x-2,x)
'''
- return GiacMethods['tablefunc'](self,*args)
+ return GiacMethods['tablefunc'](self, *args)
- def tableseq(self,*args):
+ def tableseq(self, *args):
r'''From Giac's documentation:
Help for tableseq:
tableseq(Expr,(Var or LstVar),(InitVal or LstInitVal))
@@ -15550,9 +15550,9 @@ cdef class GiacMethods_base:
Ex1:tableseq(cos(x),x,0.0)
Ex2:tableseq(x+y,[x,y],[1,1])
'''
- return GiacMethods['tableseq'](self,*args)
+ return GiacMethods['tableseq'](self, *args)
- def tabsign(self,*args):
+ def tabsign(self, *args):
r'''From Giac's documentation:
Help for tabsign:
tabsign(Expr,Var)
@@ -15562,9 +15562,9 @@ cdef class GiacMethods_base:
Ex2:tabsign(x^2,x,-3,5)
Ex3:tabsign(sin(x),x)
'''
- return GiacMethods['tabsign'](self,*args)
+ return GiacMethods['tabsign'](self, *args)
- def tabvar(self,*args):
+ def tabvar(self, *args):
r'''From Giac's documentation:
Help for tabvar:
tabvar(Expr,Var)
@@ -15576,9 +15576,9 @@ cdef class GiacMethods_base:
Ex4:tabvar(x^2,x,-3,5)
Ex5:tabvar([sin(2t),cos(3t)])
'''
- return GiacMethods['tabvar'](self,*args)
+ return GiacMethods['tabvar'](self, *args)
- def tail(self,*args):
+ def tail(self, *args):
r'''From Giac's documentation:
Help for tail:
tail(Lst or Seq or Str)
@@ -15588,9 +15588,9 @@ cdef class GiacMethods_base:
Ex2:tail(3,2,4,1,0)
Ex3:tail("bonjour")
'''
- return GiacMethods['tail'](self,*args)
+ return GiacMethods['tail'](self, *args)
- def tan(self,*args):
+ def tan(self, *args):
r'''From Giac's documentation:
Help for tan:
tan(Expr)
@@ -15600,9 +15600,9 @@ cdef class GiacMethods_base:
Ex2:tan(pi/4)
Ex3: convert(tan(x),tan)
'''
- return GiacMethods['tan'](self,*args)
+ return GiacMethods['tan'](self, *args)
- def tan2cossin2(self,*args):
+ def tan2cossin2(self, *args):
r'''From Giac's documentation:
Help for tan2cossin2:
tan2cossin2(Expr)
@@ -15610,9 +15610,9 @@ cdef class GiacMethods_base:
See also: 1/ tan2sincos2 2/ tan2sincos 3/ sin2costan 4/ cos2sintan
Ex1:tan2cossin2(tan(x))
'''
- return GiacMethods['tan2cossin2'](self,*args)
+ return GiacMethods['tan2cossin2'](self, *args)
- def tan2sincos(self,*args):
+ def tan2sincos(self, *args):
r'''From Giac's documentation:
Help for tan2sincos:
tan2sincos(Expr)
@@ -15620,9 +15620,9 @@ cdef class GiacMethods_base:
See also: 1/ sin2costan 2/ cos2sintan 3/ tan2sincos2 4/ tan2cossin2
Ex1:tan2sincos(tan(x))
'''
- return GiacMethods['tan2sincos'](self,*args)
+ return GiacMethods['tan2sincos'](self, *args)
- def tan2sincos2(self,*args):
+ def tan2sincos2(self, *args):
r'''From Giac's documentation:
Help for tan2sincos2:
tan2sincos2(Expr)
@@ -15630,9 +15630,9 @@ cdef class GiacMethods_base:
See also: 1/ tan2cossin2 2/ tan2sincos 3/ sin2costan 4/ cos2sintan
Ex1:tan2sincos2(tan(x))
'''
- return GiacMethods['tan2sincos2'](self,*args)
+ return GiacMethods['tan2sincos2'](self, *args)
- def tangent(self,*args):
+ def tangent(self, *args):
r'''From Giac's documentation:
Help for tangent:
tangent(Curve(C),Pnt(A))
@@ -15647,9 +15647,9 @@ cdef class GiacMethods_base:
Ex7:tangent(plotpolar(3*exp(t/2),t),7)
Ex8: equation(tangente([2*cos(t),2*sin(t),3*t],t))
'''
- return GiacMethods['tangent'](self,*args)
+ return GiacMethods['tangent'](self, *args)
- def tangente(self,*args):
+ def tangente(self, *args):
r'''From Giac's documentation:
Help for tangente:
tangente(Curve(C),Pnt(A))
@@ -15664,9 +15664,9 @@ cdef class GiacMethods_base:
Ex7:tangente(plotpolar(3*exp(t/2),t),7)
Ex8: equation(tangente([2*cos(t),2*sin(t),3*t],t))
'''
- return GiacMethods['tangente'](self,*args)
+ return GiacMethods['tangente'](self, *args)
- def tanh(self,*args):
+ def tanh(self, *args):
r'''From Giac's documentation:
Help for tanh:
tanh(Expr)
@@ -15675,9 +15675,9 @@ cdef class GiacMethods_base:
Ex1:tanh(0)
Ex2:tanh(hyp2exp(tanh(1)))
'''
- return GiacMethods['tanh'](self,*args)
+ return GiacMethods['tanh'](self, *args)
- def taux_accroissement(self,*args):
+ def taux_accroissement(self, *args):
r'''From Giac's documentation:
Help for taux_accroissement:
taux_accroissement(Expr,Var,Val1,(Val1+Var or Val2))
@@ -15687,9 +15687,9 @@ cdef class GiacMethods_base:
Ex2:taux_accroissement(x^2,1,2)
Ex3:taux_accroissement(a^2,a,1,1+h)
'''
- return GiacMethods['taux_accroissement'](self,*args)
+ return GiacMethods['taux_accroissement'](self, *args)
- def taylor(self,*args):
+ def taylor(self, *args):
r'''From Giac's documentation:
Help for taylor:
taylor(Expr,[Var=limit_point],[Order])
@@ -15706,9 +15706,9 @@ cdef class GiacMethods_base:
Ex9:taylor(sin((1+h*t)*(pi/2+k*t)),t=0,3,polynom)(t=1)
Ex10:taylor((-1+k*t)^2/(1+h*t)^3,t=0,3,polynom)(t=1)
'''
- return GiacMethods['taylor'](self,*args)
+ return GiacMethods['taylor'](self, *args)
- def tchebyshev1(self,*args):
+ def tchebyshev1(self, *args):
r'''From Giac's documentation:
Help for tchebyshev1:
tchebyshev1(Intg(n))
@@ -15716,9 +15716,9 @@ cdef class GiacMethods_base:
See also: 1/ tchebyshev2 2/ hermite
Ex1:tchebyshev1(3)
'''
- return GiacMethods['tchebyshev1'](self,*args)
+ return GiacMethods['tchebyshev1'](self, *args)
- def tchebyshev2(self,*args):
+ def tchebyshev2(self, *args):
r'''From Giac's documentation:
Help for tchebyshev2:
tchebyshev2(Intg(n))
@@ -15726,9 +15726,9 @@ cdef class GiacMethods_base:
See also: 1/ tchebyshev1 2/ hermite
Ex1:tchebyshev2(3)
'''
- return GiacMethods['tchebyshev2'](self,*args)
+ return GiacMethods['tchebyshev2'](self, *args)
- def tcoeff(self,*args):
+ def tcoeff(self, *args):
r'''From Giac's documentation:
Help for tcoeff:
tcoeff(Poly||Lst)
@@ -15737,9 +15737,9 @@ cdef class GiacMethods_base:
Ex1:tcoeff(-2*x^3+x^2+7*x)
Ex2:tcoeff([-2,1,7,0])
'''
- return GiacMethods['tcoeff'](self,*args)
+ return GiacMethods['tcoeff'](self, *args)
- def tcollect(self,*args):
+ def tcollect(self, *args):
r'''From Giac's documentation:
Help for tcollect:
tcollect(Expr)
@@ -15747,18 +15747,18 @@ cdef class GiacMethods_base:
See also: 1/ texpand 2/ tlin
Ex1:tcollect(sin(x)+cos(x))
'''
- return GiacMethods['tcollect'](self,*args)
+ return GiacMethods['tcollect'](self, *args)
- def tdeg(self,*args):
+ def tdeg(self, *args):
r'''From Giac's documentation:
Help for tdeg:
tdeg(Opt)
Option of the gbasis or greduce command to specify an order for monomials (complete degree then lexicographic order).
See also: 1/ gbasis 2/ greduce
'''
- return GiacMethods['tdeg'](self,*args)
+ return GiacMethods['tdeg'](self, *args)
- def tensor_product(self,*args):
+ def tensor_product(self, *args):
r'''From Giac's documentation:
Help for tensor_product:
tensor_product(Seq(G1,G2,..))
@@ -15766,9 +15766,9 @@ cdef class GiacMethods_base:
See also: 1/ cartesian_product
Ex1:tensor_product(graph(trail(1,2,3,4,5,2)),star_graph(3))
'''
- return GiacMethods['tensor_product'](self,*args)
+ return GiacMethods['tensor_product'](self, *args)
- def tetrahedron(self,*args):
+ def tetrahedron(self, *args):
r'''From Giac's documentation:
Help for tetrahedron:
tetrahedron(Pnt(A),Pnt(B),Pnt(C),[Pnt(D)])
@@ -15777,9 +15777,9 @@ cdef class GiacMethods_base:
Ex1:tetrahedron([0,0,0],[3,0,0],[0,1,0])
Ex2:tetrahedron([0,0,0],[3,0,0],[0,3,0],[0,0,4])
'''
- return GiacMethods['tetrahedron'](self,*args)
+ return GiacMethods['tetrahedron'](self, *args)
- def texpand(self,*args):
+ def texpand(self, *args):
r'''From Giac's documentation:
Help for texpand:
texpand(Expr)
@@ -15789,9 +15789,9 @@ cdef class GiacMethods_base:
Ex2:texpand(cos(x+y))
Ex3:texpand(cos(3*x))
'''
- return GiacMethods['texpand'](self,*args)
+ return GiacMethods['texpand'](self, *args)
- def thickness(self,*args):
+ def thickness(self, *args):
r'''From Giac's documentation:
Help for thickness:
thickness(Opt)
@@ -15800,9 +15800,9 @@ cdef class GiacMethods_base:
Ex1: segment(0,point(1,1),thickness=5)
Ex2: segment(0,point(1,1),epaisseur=5)
'''
- return GiacMethods['thickness'](self,*args)
+ return GiacMethods['thickness'](self, *args)
- def threshold(self,*args):
+ def threshold(self, *args):
r'''From Giac's documentation:
Help for threshold:
threshold(Lst,Real(bound)[=Expr(repl)] or Lst[Real(lower)[=Expr(rl)],Real(upper)[=Expr(ru)]],[Fnc(compare)],[abs[=true or false]])
@@ -15811,9 +15811,9 @@ cdef class GiacMethods_base:
Ex1:threshold([1,3,2,4,5,4,3,2,3,1],3,'>=')
Ex2:threshold([-10,-5,0,5,10],7=a,abs=true)
'''
- return GiacMethods['threshold'](self,*args)
+ return GiacMethods['threshold'](self, *args)
- def throw(self,*args):
+ def throw(self, *args):
r'''From Giac's documentation:
Help for throw:
throw(Str)
@@ -15822,9 +15822,9 @@ cdef class GiacMethods_base:
Ex1:throw("Argument should be integer")
Ex2:throw("je provoque une erreur")
'''
- return GiacMethods['throw'](self,*args)
+ return GiacMethods['throw'](self, *args)
- def title(self,*args):
+ def title(self, *args):
r'''From Giac's documentation:
Help for title:
title(Opt)
@@ -15833,9 +15833,9 @@ cdef class GiacMethods_base:
Ex1: title="segment";segment(0,point(1,1),epaisseur=5)
Ex2: titre="segment";segment(0,point(1,1),epaisseur=5)
'''
- return GiacMethods['title'](self,*args)
+ return GiacMethods['title'](self, *args)
- def titre(self,*args):
+ def titre(self, *args):
r'''From Giac's documentation:
Help for titre:
titre(Opt)
@@ -15844,9 +15844,9 @@ cdef class GiacMethods_base:
Ex1: title="segment";segment(0,point(1,1),epaisseur=5)
Ex2: titre="segment";segment(0,point(1,1),epaisseur=5)
'''
- return GiacMethods['titre'](self,*args)
+ return GiacMethods['titre'](self, *args)
- def tlin(self,*args):
+ def tlin(self, *args):
r'''From Giac's documentation:
Help for tlin:
tlin(ExprTrig)
@@ -15855,9 +15855,9 @@ cdef class GiacMethods_base:
Ex1:tlin(sin(x)^3)
Ex2:tlin(cos(x)*cos(y))
'''
- return GiacMethods['tlin'](self,*args)
+ return GiacMethods['tlin'](self, *args)
- def tonnetz(self,*args):
+ def tonnetz(self, *args):
r'''From Giac's documentation:
Help for tonnetz:
tonnetz(Intg(a),Intg(b),Intg(c),[Intg(d)])
@@ -15866,9 +15866,9 @@ cdef class GiacMethods_base:
Ex1:tonnetz(3,4,5)
Ex2:tonnetz(2,3,3,4)
'''
- return GiacMethods['tonnetz'](self,*args)
+ return GiacMethods['tonnetz'](self, *args)
- def topologic_sort(self,*args):
+ def topologic_sort(self, *args):
r'''From Giac's documentation:
Help for topologic_sort:
topologic_sort(Graph(G))
@@ -15876,9 +15876,9 @@ cdef class GiacMethods_base:
See also: 1/ digraph 2/ is_acyclic
Ex1:topologic_sort(digraph(%{[c,a],[c,b],[c,d],[a,d],[b,d],[a,b]%}))
'''
- return GiacMethods['topologic_sort'](self,*args)
+ return GiacMethods['topologic_sort'](self, *args)
- def topological_sort(self,*args):
+ def topological_sort(self, *args):
r'''From Giac's documentation:
Help for topological_sort:
topological_sort(Graph(G))
@@ -15886,9 +15886,9 @@ cdef class GiacMethods_base:
See also: 1/ digraph 2/ is_acyclic
Ex1:topological_sort(digraph(%{[c,a],[c,b],[c,d],[a,d],[b,d],[a,b]%}))
'''
- return GiacMethods['topological_sort'](self,*args)
+ return GiacMethods['topological_sort'](self, *args)
- def torus_grid_graph(self,*args):
+ def torus_grid_graph(self, *args):
r'''From Giac's documentation:
Help for torus_grid_graph:
torus_grid_graph(Intg(m),Intg(n))
@@ -15896,9 +15896,9 @@ cdef class GiacMethods_base:
See also: 1/ grid_graph
Ex1:torus_grid_graph(6,12)
'''
- return GiacMethods['torus_grid_graph'](self,*args)
+ return GiacMethods['torus_grid_graph'](self, *args)
- def total_degree(self,*args):
+ def total_degree(self, *args):
r'''From Giac's documentation:
Help for total_degree:
total_degree(Poly(P),Lst(Vars))
@@ -15906,9 +15906,9 @@ cdef class GiacMethods_base:
See also: 1/ valuation 2/ size 3/ degree
Ex1:total_degree(x^3*y+x*y,[x,y])
'''
- return GiacMethods['total_degree'](self,*args)
+ return GiacMethods['total_degree'](self, *args)
- def tourne_droite(self,*args):
+ def tourne_droite(self, *args):
r'''From Giac's documentation:
Help for tourne_droite:
tourne_droite(NULL or Real(n))
@@ -15917,9 +15917,9 @@ cdef class GiacMethods_base:
Ex1: tourne_droite 60
Ex2:tourne_droite(60)
'''
- return GiacMethods['tourne_droite'](self,*args)
+ return GiacMethods['tourne_droite'](self, *args)
- def tourne_gauche(self,*args):
+ def tourne_gauche(self, *args):
r'''From Giac's documentation:
Help for tourne_gauche:
tourne_gauche(NULL or Real(n))
@@ -15928,9 +15928,9 @@ cdef class GiacMethods_base:
Ex1: tourne_gauche 60
Ex2:tourne_gauche(60)
'''
- return GiacMethods['tourne_gauche'](self,*args)
+ return GiacMethods['tourne_gauche'](self, *args)
- def tpsolve(self,*args):
+ def tpsolve(self, *args):
r'''From Giac's documentation:
Help for tpsolve:
tpsolve(supply,demand,cost_matrix)
@@ -15940,9 +15940,9 @@ cdef class GiacMethods_base:
Ex3:tpsolve([95,70,165,165],[195,150,30,45,75],[[15,M,45,M,0],[12,40,M,M,0],[0,15,25,25,0],[M,0,M,12,0]])
Ex4:tpsolve([1,1,1,1],[1,1,1,1],[[10,12,9,11],[5,10,7,8],[12,14,13,11],[8,15,11,9]])
'''
- return GiacMethods['tpsolve'](self,*args)
+ return GiacMethods['tpsolve'](self, *args)
- def trace(self,*args):
+ def trace(self, *args):
r'''From Giac's documentation:
Help for trace:
trace(Mtrx or GeoObj)
@@ -15953,9 +15953,9 @@ cdef class GiacMethods_base:
Ex3: assume(a=[0.7,-5,5,0.1]);trace(point(a-i*a))
Ex4: assume(a=[0.7,-5,5,0.1]);trace(inter_unique(droite(y=a*x+a),droite(y=2*a*x+1)))
'''
- return GiacMethods['trace'](self,*args)
+ return GiacMethods['trace'](self, *args)
- def trail(self,*args):
+ def trail(self, *args):
r'''From Giac's documentation:
Help for trail:
trail(Seq(V))
@@ -15963,9 +15963,9 @@ cdef class GiacMethods_base:
See also: 1/ graph 2/ digraph
Ex1:trail(1,2,3,4,1)
'''
- return GiacMethods['trail'](self,*args)
+ return GiacMethods['trail'](self, *args)
- def trail2edges(self,*args):
+ def trail2edges(self, *args):
r'''From Giac's documentation:
Help for trail2edges:
trail2edges(Trail(T))
@@ -15974,9 +15974,9 @@ cdef class GiacMethods_base:
Ex1:trail2edges(trail(1,2,3,4,1,3))
Ex2:trail2edges([1,2,3,4,1,3])
'''
- return GiacMethods['trail2edges'](self,*args)
+ return GiacMethods['trail2edges'](self, *args)
- def trames(self,*args):
+ def trames(self, *args):
r'''From Giac's documentation:
Help for trames:
trames(Opt)
@@ -15985,9 +15985,9 @@ cdef class GiacMethods_base:
Ex1: animate(sin(x*t),x=-pi..pi,t=-3..3,frames=30)
Ex2: animate3d(x^2+t*y^2,[x=-2..2,y=-2..2],t=-3..3,frames=10)
'''
- return GiacMethods['trames'](self,*args)
+ return GiacMethods['trames'](self, *args)
- def tran(self,*args):
+ def tran(self, *args):
r'''From Giac's documentation:
Help for tran:
tran(Mtrx)
@@ -15997,9 +15997,9 @@ cdef class GiacMethods_base:
Ex2:tran([[1+i,2,3],[1,3,6],[2,5,9-i]])
Ex3:tran(conj([[1+i,2,3],[1,3,6],[2,5,9-i]]))
'''
- return GiacMethods['tran'](self,*args)
+ return GiacMethods['tran'](self, *args)
- def transitive_closure(self,*args):
+ def transitive_closure(self, *args):
r'''From Giac's documentation:
Help for transitive_closure:
transitive_closure(Graph(G),[weighted[=true||false]])
@@ -16007,9 +16007,9 @@ cdef class GiacMethods_base:
See also: 1/ allpairs_distance 2/ is_connected 3/ shortest_path 4/ vertex_distance
Ex1:transitive_closure(digraph([1,2,3,4,5,6],%{[1,2],[2,3],[2,4],[4,5],[3,5]%}),weighted)
'''
- return GiacMethods['transitive_closure'](self,*args)
+ return GiacMethods['transitive_closure'](self, *args)
- def translation(self,*args):
+ def translation(self, *args):
r'''From Giac's documentation:
Help for translation:
translation(Vect, Pnt(C))
@@ -16020,9 +16020,9 @@ cdef class GiacMethods_base:
Ex3: t:=translation(1+i);t(i)
Ex4: t:=translation([1,1,1]);t(point([1,2,3]))
'''
- return GiacMethods['translation'](self,*args)
+ return GiacMethods['translation'](self, *args)
- def transpose(self,*args):
+ def transpose(self, *args):
r'''From Giac's documentation:
Help for transpose:
transpose(Mtrx)
@@ -16032,9 +16032,9 @@ cdef class GiacMethods_base:
Ex2:transpose([[1+i,2,3],[1,3,6],[2,5,9-i]])
Ex3:transpose(conj([[1+i,2,3],[1,3,6],[2,5,9-i]]))
'''
- return GiacMethods['transpose'](self,*args)
+ return GiacMethods['transpose'](self, *args)
- def trapeze(self,*args):
+ def trapeze(self, *args):
r'''From Giac's documentation:
Help for trapeze:
trapeze(Opt)
@@ -16047,9 +16047,9 @@ cdef class GiacMethods_base:
Ex5: area(x^2,x=0..1,5,middle_point)
Ex6: area(x^2,x=0..1,5,trapezoid)
'''
- return GiacMethods['trapeze'](self,*args)
+ return GiacMethods['trapeze'](self, *args)
- def trapezoid(self,*args):
+ def trapezoid(self, *args):
r'''From Giac's documentation:
Help for trapezoid:
trapezoid(Opt)
@@ -16062,9 +16062,9 @@ cdef class GiacMethods_base:
Ex5: area(x^2,x=0..1,5,middle_point)
Ex6: area(x^2,x=0..1,5,trapezoid)
'''
- return GiacMethods['trapezoid'](self,*args)
+ return GiacMethods['trapezoid'](self, *args)
- def traveling_salesman(self,*args):
+ def traveling_salesman(self, *args):
r'''From Giac's documentation:
Help for traveling_salesman:
traveling_salesman(Graph(G),[Mtrx(M)],[opts])
@@ -16076,18 +16076,18 @@ cdef class GiacMethods_base:
Ex4: G:=set_vertex_positions(complete_graph(42),[randvector(2,1000)$(k=1..42)]); traveling_salesman(G,vertex_distance)
Ex5: G:=set_vertex_positions(complete_graph(120),[randvector(2,1000)$(k=1..120)]); c,T:=traveling_salesman(G,vertex_distance,approx)
'''
- return GiacMethods['traveling_salesman'](self,*args)
+ return GiacMethods['traveling_salesman'](self, *args)
- def tree(self,*args):
+ def tree(self, *args):
r'''From Giac's documentation:
Help for tree:
tree(Opt)
Option for the draw_graph command.
See also: 1/ planar 2/ spring 3/ draw_graph
'''
- return GiacMethods['tree'](self,*args)
+ return GiacMethods['tree'](self, *args)
- def tree_height(self,*args):
+ def tree_height(self, *args):
r'''From Giac's documentation:
Help for tree_height:
tree_height(Graph(T),Vrtx(r))
@@ -16095,9 +16095,9 @@ cdef class GiacMethods_base:
See also: 1/ is_tree 2/ random_tree
Ex1:tree_height(graph(%{[1,2],[2,3],[2,4],[4,5]%}),1)
'''
- return GiacMethods['tree_height'](self,*args)
+ return GiacMethods['tree_height'](self, *args)
- def tri(self,*args):
+ def tri(self, *args):
r'''From Giac's documentation:
Help for tri:
tri(Expr(x))
@@ -16105,9 +16105,9 @@ cdef class GiacMethods_base:
See also: 1/ rect 2/ Heaviside
Ex1:tri(x-1)
'''
- return GiacMethods['tri'](self,*args)
+ return GiacMethods['tri'](self, *args)
- def triangle(self,*args):
+ def triangle(self, *args):
r'''From Giac's documentation:
Help for triangle:
triangle((Pnt or Cplx),(Pnt or Cplx),(Pnt or Cplx))
@@ -16117,9 +16117,9 @@ cdef class GiacMethods_base:
Ex2:triangle(0,1,1+i)
Ex3:triangle(point(0,0,0),point(3,3,3),point(0,3,3))
'''
- return GiacMethods['triangle'](self,*args)
+ return GiacMethods['triangle'](self, *args)
- def triangle_paper(self,*args):
+ def triangle_paper(self, *args):
r'''From Giac's documentation:
Help for triangle_paper:
triangle_paper(Real(ux),Real(t),Real(uy),[x=xmin..xmax,y=ymin..ymax])
@@ -16129,9 +16129,9 @@ cdef class GiacMethods_base:
Ex3:triangle_paper(papier_triangule(1,pi/3,sqrt(3)/2,x=-2..6,y=-4*sqrt(3)..4*sqrt(3)))
Ex4:triangle_paper(0.5,3*pi/4,0.5)
'''
- return GiacMethods['triangle_paper'](self,*args)
+ return GiacMethods['triangle_paper'](self, *args)
- def triangle_plein(self,*args):
+ def triangle_plein(self, *args):
r'''From Giac's documentation:
Help for triangle_plein:
triangle_plein(Real(a),[Real(b)],[Real(t)])
@@ -16142,9 +16142,9 @@ cdef class GiacMethods_base:
Ex3:triangle_plein(30,40)
Ex4:triangle_plein(30,40,60)
'''
- return GiacMethods['triangle_plein'](self,*args)
+ return GiacMethods['triangle_plein'](self, *args)
- def triangle_point(self,*args):
+ def triangle_point(self, *args):
r'''From Giac's documentation:
Help for triangle_point:
triangle_point(Opt)
@@ -16153,9 +16153,9 @@ cdef class GiacMethods_base:
Ex1: F:=display(point(2+1.5*i),point_point)
Ex2: F:=display(point(2+1.5*i),rhombus_point)
'''
- return GiacMethods['triangle_point'](self,*args)
+ return GiacMethods['triangle_point'](self, *args)
- def triangle_window(self,*args):
+ def triangle_window(self, *args):
r'''From Giac's documentation:
Help for triangle_window:
triangle_window(Lst,[Intg(d)],[Interval(n1..n2)])
@@ -16163,9 +16163,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ bartlett_hann_window 13/ tukey_window 14/ welch_window
Ex1: scatterplot(triangle_window(randvector(1000,0..1),1))
'''
- return GiacMethods['triangle_window'](self,*args)
+ return GiacMethods['triangle_window'](self, *args)
- def trig2exp(self,*args):
+ def trig2exp(self, *args):
r'''From Giac's documentation:
Help for trig2exp:
trig2exp(Expr)
@@ -16173,9 +16173,9 @@ cdef class GiacMethods_base:
See also: 1/ exp2trig 2/ atrig2ln
Ex1:trig2exp(sin(x))
'''
- return GiacMethods['trig2exp'](self,*args)
+ return GiacMethods['trig2exp'](self, *args)
- def trigcos(self,*args):
+ def trigcos(self, *args):
r'''From Giac's documentation:
Help for trigcos:
trigcos(Expr)
@@ -16183,9 +16183,9 @@ cdef class GiacMethods_base:
See also: 1/ trigsin 2/ trigtan
Ex1:trigcos(sin(x)^4+sin(x)^2)
'''
- return GiacMethods['trigcos'](self,*args)
+ return GiacMethods['trigcos'](self, *args)
- def trigexpand(self,*args):
+ def trigexpand(self, *args):
r'''From Giac's documentation:
Help for trigexpand:
trigexpand(Expr)
@@ -16193,9 +16193,9 @@ cdef class GiacMethods_base:
See also: 1/ texpand 2/ lnexpand 3/ expexpand
Ex1:trigexpand(sin(3*x))
'''
- return GiacMethods['trigexpand'](self,*args)
+ return GiacMethods['trigexpand'](self, *args)
- def triginterp(self,*args):
+ def triginterp(self, *args):
r'''From Giac's documentation:
Help for triginterp:
triginterp(List,Var=xmin..xmax)
@@ -16204,9 +16204,9 @@ cdef class GiacMethods_base:
Ex1:triginterp([11,10,17,24,32,26,23,19],x=0..21)
Ex2:triginterp([11,10,17,24,32,26,23,19],0,21,x)
'''
- return GiacMethods['triginterp'](self,*args)
+ return GiacMethods['triginterp'](self, *args)
- def trigsimplify(self,*args):
+ def trigsimplify(self, *args):
r'''From Giac's documentation:
Help for trigsimplify:
trigsimplify(Expr)
@@ -16214,9 +16214,9 @@ cdef class GiacMethods_base:
See also: 1/ simplify
Ex1:trigsimplify(3*sin(x)-4*sin(x)^3)
'''
- return GiacMethods['trigsimplify'](self,*args)
+ return GiacMethods['trigsimplify'](self, *args)
- def trigsin(self,*args):
+ def trigsin(self, *args):
r'''From Giac's documentation:
Help for trigsin:
trigsin(Expr)
@@ -16224,9 +16224,9 @@ cdef class GiacMethods_base:
See also: 1/ trigcos 2/ trigtan
Ex1:trigsin(cos(x)^4+sin(x)^2)
'''
- return GiacMethods['trigsin'](self,*args)
+ return GiacMethods['trigsin'](self, *args)
- def trigtan(self,*args):
+ def trigtan(self, *args):
r'''From Giac's documentation:
Help for trigtan:
trigtan(Expr)
@@ -16234,9 +16234,9 @@ cdef class GiacMethods_base:
See also: 1/ trigsin 2/ trigcos
Ex1:trigtan(cos(x)^4+sin(x)^2)
'''
- return GiacMethods['trigtan'](self,*args)
+ return GiacMethods['trigtan'](self, *args)
- def trn(self,*args):
+ def trn(self, *args):
r'''From Giac's documentation:
Help for trn:
trn(Mtrx)
@@ -16244,9 +16244,9 @@ cdef class GiacMethods_base:
See also: 1/ tran 2/ conj
Ex1:trn([[1,2+i],[3,4]])
'''
- return GiacMethods['trn'](self,*args)
+ return GiacMethods['trn'](self, *args)
- def true(self,*args):
+ def true(self, *args):
r'''From Giac's documentation:
Help for true:
true()
@@ -16254,9 +16254,9 @@ cdef class GiacMethods_base:
See also: 1/ false
Ex1: a:=true
'''
- return GiacMethods['true'](self,*args)
+ return GiacMethods['true'](self, *args)
- def trunc(self,*args):
+ def trunc(self, *args):
r'''From Giac's documentation:
Help for trunc:
trunc(Real||LstReal,Int(n))
@@ -16268,9 +16268,9 @@ cdef class GiacMethods_base:
Ex4:trunc([4.3333,sqrt(2)],2)
Ex5:trunc(sqrt(2)+i*sqrt(5),4)
'''
- return GiacMethods['trunc'](self,*args)
+ return GiacMethods['trunc'](self, *args)
- def truncate(self,*args):
+ def truncate(self, *args):
r'''From Giac's documentation:
Help for truncate:
truncate(Poly(P),Intg(n))
@@ -16278,9 +16278,9 @@ cdef class GiacMethods_base:
See also: 1/ series
Ex1:truncate((x^2+x)^2,3)
'''
- return GiacMethods['truncate'](self,*args)
+ return GiacMethods['truncate'](self, *args)
- def truncate_graph(self,*args):
+ def truncate_graph(self, *args):
r'''From Giac's documentation:
Help for truncate_graph:
truncate_graph(Graph(G))
@@ -16288,9 +16288,9 @@ cdef class GiacMethods_base:
See also: 1/ is_biconnected 2/ is_planar 3/ plane_dual
Ex1:truncate_graph(graph("tetrahedron"))
'''
- return GiacMethods['truncate_graph'](self,*args)
+ return GiacMethods['truncate_graph'](self, *args)
- def tsimplify(self,*args):
+ def tsimplify(self, *args):
r'''From Giac's documentation:
Help for tsimplify:
tsimplify(Expr)
@@ -16298,9 +16298,9 @@ cdef class GiacMethods_base:
See also: 1/ simplify
Ex1:tsimplify(exp(2*x)+exp(x))
'''
- return GiacMethods['tsimplify'](self,*args)
+ return GiacMethods['tsimplify'](self, *args)
- def tuer(self,*args):
+ def tuer(self, *args):
r'''From Giac's documentation:
Help for tuer:
tuer(NULL)
@@ -16308,9 +16308,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:tuer()
'''
- return GiacMethods['tuer'](self,*args)
+ return GiacMethods['tuer'](self, *args)
- def tukey_window(self,*args):
+ def tukey_window(self, *args):
r'''From Giac's documentation:
Help for tukey_window:
tukey_window(Lst,[Real(a)],[Interval(n1..n2)])
@@ -16318,9 +16318,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ bartlett_hann_window 14/ welch_window
Ex1: scatterplot(tukey_window(randvector(1000,0..1),0.4))
'''
- return GiacMethods['tukey_window'](self,*args)
+ return GiacMethods['tukey_window'](self, *args)
- def tutte_polynomial(self,*args):
+ def tutte_polynomial(self, *args):
r'''From Giac's documentation:
Help for tutte_polynomial:
tutte_polynomial(Graph(G),[Var(x),Var(y)])
@@ -16329,9 +16329,9 @@ cdef class GiacMethods_base:
Ex1:tutte_polynomial(graph("tetrahedron"))
Ex2:tutte_polynomial(graph("tetrahedron"),1,1)
'''
- return GiacMethods['tutte_polynomial'](self,*args)
+ return GiacMethods['tutte_polynomial'](self, *args)
- def two_edge_connected_components(self,*args):
+ def two_edge_connected_components(self, *args):
r'''From Giac's documentation:
Help for two_edge_connected_components:
two_edge_connected_components(Graph(G))
@@ -16339,9 +16339,9 @@ cdef class GiacMethods_base:
See also: 1/ is_two_edge_connected 2/ connected_components
Ex1:two_edge_connected_components(graph(trail(1,2,3,4,5,3,1),trail(5,6,7,8,6)))
'''
- return GiacMethods['two_edge_connected_components'](self,*args)
+ return GiacMethods['two_edge_connected_components'](self, *args)
- def ufactor(self,*args):
+ def ufactor(self, *args):
r'''From Giac's documentation:
Help for ufactor:
ufactor(Unit,Unit)
@@ -16349,9 +16349,9 @@ cdef class GiacMethods_base:
See also: 1/ convert 2/ mksa 3/ usimplify
Ex1:ufactor(100_C,1_A)
'''
- return GiacMethods['ufactor'](self,*args)
+ return GiacMethods['ufactor'](self, *args)
- def ugamma(self,*args):
+ def ugamma(self, *args):
r'''From Giac's documentation:
Help for ugamma:
ugamma(Real(a),Real(x),[1])
@@ -16360,9 +16360,9 @@ cdef class GiacMethods_base:
Ex1:ugamma(5.0,2.0)
Ex2:ugamma(-5.1,2.1)
'''
- return GiacMethods['ugamma'](self,*args)
+ return GiacMethods['ugamma'](self, *args)
- def unapply(self,*args):
+ def unapply(self, *args):
r'''From Giac's documentation:
Help for unapply:
unapply(Expr,Var)
@@ -16371,9 +16371,9 @@ cdef class GiacMethods_base:
Ex1:unapply(2*x^2,x)
Ex2: f(x):=x*exp(x);g:=unapply(diff(f(x),x),x)
'''
- return GiacMethods['unapply'](self,*args)
+ return GiacMethods['unapply'](self, *args)
- def unarchive(self,*args):
+ def unarchive(self, *args):
r'''From Giac's documentation:
Help for unarchive:
unarchive(Str(namefich),Seq(Var))
@@ -16382,9 +16382,9 @@ cdef class GiacMethods_base:
Ex1:unarchive("toto")
Ex2:unarchive("aa.txt")
'''
- return GiacMethods['unarchive'](self,*args)
+ return GiacMethods['unarchive'](self, *args)
- def underlying_graph(self,*args):
+ def underlying_graph(self, *args):
r'''From Giac's documentation:
Help for underlying_graph:
underlying_graph(Graph(G))
@@ -16392,9 +16392,9 @@ cdef class GiacMethods_base:
See also: 1/ is_directed 2/ is_weighted 3/ make_directed 4/ make_weighted
Ex1:underlying_graph(digraph(trail(1,2,3,4,1)))
'''
- return GiacMethods['underlying_graph'](self,*args)
+ return GiacMethods['underlying_graph'](self, *args)
- def unfactored(self,*args):
+ def unfactored(self, *args):
r'''From Giac's documentation:
Help for unfactored:
unfactored(Opt.)
@@ -16406,9 +16406,9 @@ cdef class GiacMethods_base:
Ex4: plotimplicit(x^2+y^2+z^2-1,[x,y,z],xstep=0.2,ystep=0.2,zstep=0.2,unfactored)
Ex5: plotimplicit(x^2+y^2+z^2-1,x=0..1,y=0..1,z=0..1,xstep=0.2,ystep=0.2,zstep=0.2,unfactored)
'''
- return GiacMethods['unfactored'](self,*args)
+ return GiacMethods['unfactored'](self, *args)
- def uniform(self,*args):
+ def uniform(self, *args):
r'''From Giac's documentation:
Help for uniform:
uniform(Real(a),Real(b),Real(x))
@@ -16419,9 +16419,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,uniform,1.2,3.5)
Ex4: ranm(4,3,uniform,1.2,3.5)
'''
- return GiacMethods['uniform'](self,*args)
+ return GiacMethods['uniform'](self, *args)
- def uniform_cdf(self,*args):
+ def uniform_cdf(self, *args):
r'''From Giac's documentation:
Help for uniform_cdf:
uniform_cdf(Real(a),Real(b),Real(x0),[Real(y0)])
@@ -16430,9 +16430,9 @@ cdef class GiacMethods_base:
Ex1:uniform_cdf(3.2,5.7,4.4)
Ex2:uniform_cdf(3.2,5.7,4.4,5.4)
'''
- return GiacMethods['uniform_cdf'](self,*args)
+ return GiacMethods['uniform_cdf'](self, *args)
- def uniform_icdf(self,*args):
+ def uniform_icdf(self, *args):
r'''From Giac's documentation:
Help for uniform_icdf:
uniform_icdf(Real(a),Real(b),Real(p))
@@ -16441,9 +16441,9 @@ cdef class GiacMethods_base:
Ex1:uniform_icdf(4.2,10.3,0.95)
Ex2:uniform_icdf(3.2,5.7,0.48)
'''
- return GiacMethods['uniform_icdf'](self,*args)
+ return GiacMethods['uniform_icdf'](self, *args)
- def uniformd(self,*args):
+ def uniformd(self, *args):
r'''From Giac's documentation:
Help for uniformd:
uniformd(Real(a),Real(b),Real(x))
@@ -16454,9 +16454,9 @@ cdef class GiacMethods_base:
Ex3: randvector(3,uniform,1.2,3.5)
Ex4: ranm(4,3,uniform,1.2,3.5)
'''
- return GiacMethods['uniformd'](self,*args)
+ return GiacMethods['uniformd'](self, *args)
- def uniformd_cdf(self,*args):
+ def uniformd_cdf(self, *args):
r'''From Giac's documentation:
Help for uniformd_cdf:
uniformd_cdf(Real(a),Real(b),Real(x0),[Real(y0)])
@@ -16465,9 +16465,9 @@ cdef class GiacMethods_base:
Ex1:uniformd_cdf(3.2,5.7,4.4)
Ex2:uniformd_cdf(3.2,5.7,4.4,5.4)
'''
- return GiacMethods['uniformd_cdf'](self,*args)
+ return GiacMethods['uniformd_cdf'](self, *args)
- def uniformd_icdf(self,*args):
+ def uniformd_icdf(self, *args):
r'''From Giac's documentation:
Help for uniformd_icdf:
uniformd_icdf(Real(a),Real(b),Real(p))
@@ -16476,9 +16476,9 @@ cdef class GiacMethods_base:
Ex1:uniformd_icdf(4.2,10.3,0.95)
Ex2:uniformd_icdf(3.2,5.7,0.48)
'''
- return GiacMethods['uniformd_icdf'](self,*args)
+ return GiacMethods['uniformd_icdf'](self, *args)
- def unitV(self,*args):
+ def unitV(self, *args):
r'''From Giac's documentation:
Help for unitV:
unitV(Lst||Cplx)
@@ -16489,9 +16489,9 @@ cdef class GiacMethods_base:
Ex3: fieldplot(-t*y,[t,y],normalize)
Ex4: fieldplot(-t*y,[t,y],normalize,xstep=0.5,ystep=0.5)
'''
- return GiacMethods['unitV'](self,*args)
+ return GiacMethods['unitV'](self, *args)
- def unquote(self,*args):
+ def unquote(self, *args):
r'''From Giac's documentation:
Help for unquote:
unquote(Expr)
@@ -16499,9 +16499,9 @@ cdef class GiacMethods_base:
See also: 1/ quote
Ex1:unquote(a)
'''
- return GiacMethods['unquote'](self,*args)
+ return GiacMethods['unquote'](self, *args)
- def upper(self,*args):
+ def upper(self, *args):
r'''From Giac's documentation:
Help for upper:
upper(Mtrx||Strng)
@@ -16510,9 +16510,9 @@ cdef class GiacMethods_base:
Ex1:upper([[1,2,3],[4,5,6],[7,8,9]])
Ex2:upper("hello")
'''
- return GiacMethods['upper'](self,*args)
+ return GiacMethods['upper'](self, *args)
- def user_operator(self,*args):
+ def user_operator(self, *args):
r'''From Giac's documentation:
Help for user_operator:
user_operator(Str(R),Fnc(f),Opt(Binary||Unary||Delete))
@@ -16521,9 +16521,9 @@ cdef class GiacMethods_base:
Ex1:user_operator("R",(x,y)->x*y+x+y,Binary)
Ex2:user_operator("R",(x,y)->x*y+x+y,Delete)
'''
- return GiacMethods['user_operator'](self,*args)
+ return GiacMethods['user_operator'](self, *args)
- def usimplify(self,*args):
+ def usimplify(self, *args):
r'''From Giac's documentation:
Help for usimplify:
usimplify(Unit)
@@ -16531,9 +16531,9 @@ cdef class GiacMethods_base:
See also: 1/ convert 2/ mksa 3/ ufactor
Ex1:usimplify(100_(W*s))
'''
- return GiacMethods['usimplify'](self,*args)
+ return GiacMethods['usimplify'](self, *args)
- def valuation(self,*args):
+ def valuation(self, *args):
r'''From Giac's documentation:
Help for valuation:
valuation(Poly(P))
@@ -16544,9 +16544,9 @@ cdef class GiacMethods_base:
Ex3:valuation(x^5+3*x^2)
Ex4:valuation([5,0,0,3,0,0])
'''
- return GiacMethods['valuation'](self,*args)
+ return GiacMethods['valuation'](self, *args)
- def vandermonde(self,*args):
+ def vandermonde(self, *args):
r'''From Giac's documentation:
Help for vandermonde:
vandermonde(Vect(V))
@@ -16554,9 +16554,9 @@ cdef class GiacMethods_base:
See also: 1/ det
Ex1:vandermonde([1,2,a])
'''
- return GiacMethods['vandermonde'](self,*args)
+ return GiacMethods['vandermonde'](self, *args)
- def variables_are_files(self,*args):
+ def variables_are_files(self, *args):
r'''From Giac's documentation:
Help for variables_are_files:
variables_are_files(:=Intg(0 or 1))
@@ -16565,9 +16565,9 @@ cdef class GiacMethods_base:
Ex1: variables_are_files:=1
Ex2: variables_are_files:=0
'''
- return GiacMethods['variables_are_files'](self,*args)
+ return GiacMethods['variables_are_files'](self, *args)
- def variance(self,*args):
+ def variance(self, *args):
r'''From Giac's documentation:
Help for variance:
variance(Lst||Mtrx,[Lst])
@@ -16577,9 +16577,9 @@ cdef class GiacMethods_base:
Ex2:variance([1,2,3],[1,2,1])
Ex3:variance([[1,2,3],[5,6,7]])
'''
- return GiacMethods['variance'](self,*args)
+ return GiacMethods['variance'](self, *args)
- def version(self,*args):
+ def version(self, *args):
r'''From Giac's documentation:
Help for version:
version(NULL)
@@ -16587,9 +16587,9 @@ cdef class GiacMethods_base:
See also: 1/
Ex1:version()
'''
- return GiacMethods['version'](self,*args)
+ return GiacMethods['version'](self, *args)
- def vertex_connectivity(self,*args):
+ def vertex_connectivity(self, *args):
r'''From Giac's documentation:
Help for vertex_connectivity:
vertex_connectivity(Graph(G))
@@ -16599,9 +16599,9 @@ cdef class GiacMethods_base:
Ex2:vertex_connectivity(graph("clebsch"))
Ex3:vertex_connectivity(complete_graph(5))
'''
- return GiacMethods['vertex_connectivity'](self,*args)
+ return GiacMethods['vertex_connectivity'](self, *args)
- def vertex_degree(self,*args):
+ def vertex_degree(self, *args):
r'''From Giac's documentation:
Help for vertex_degree:
vertex_degree(Graph(G),Vrtx(v))
@@ -16609,9 +16609,9 @@ cdef class GiacMethods_base:
See also: 1/ degree_sequence 2/ is_regular 3/ maximum_degree 4/ minimum_degree 5/ vertex_in_degree 6/ vertex_out_degree
Ex1:vertex_degree(digraph(trail(1,2,3,4,2)),2)
'''
- return GiacMethods['vertex_degree'](self,*args)
+ return GiacMethods['vertex_degree'](self, *args)
- def vertex_distance(self,*args):
+ def vertex_distance(self, *args):
r'''From Giac's documentation:
Help for vertex_distance:
vertex_distance(Graph(G),Vrtx(s),Vrtx(t)||Lst(T))
@@ -16620,9 +16620,9 @@ cdef class GiacMethods_base:
Ex1:vertex_distance(graph("petersen"),1,4)
Ex2:vertex_distance(graph("petersen"),1,[2,4])
'''
- return GiacMethods['vertex_distance'](self,*args)
+ return GiacMethods['vertex_distance'](self, *args)
- def vertex_in_degree(self,*args):
+ def vertex_in_degree(self, *args):
r'''From Giac's documentation:
Help for vertex_in_degree:
vertex_in_degree(Graph(G),Vrtx(v))
@@ -16630,9 +16630,9 @@ cdef class GiacMethods_base:
See also: 1/ degree_sequence 2/ is_regular 3/ maximum_degree 4/ minimum_degree 5/ vertex_degree 6/ vertex_out_degree
Ex1:vertex_in_degree(digraph(trail(1,2,3,4,2)),2)
'''
- return GiacMethods['vertex_in_degree'](self,*args)
+ return GiacMethods['vertex_in_degree'](self, *args)
- def vertex_out_degree(self,*args):
+ def vertex_out_degree(self, *args):
r'''From Giac's documentation:
Help for vertex_out_degree:
vertex_out_degree(Graph(G),Vrtx(v))
@@ -16640,9 +16640,9 @@ cdef class GiacMethods_base:
See also: 1/ degree_sequence 2/ is_regular 3/ maximum_degree 4/ minimum_degree 5/ vertex_degree 6/ vertex_in_degree
Ex1:vertex_out_degree(digraph(trail(1,2,3,4,2)),2)
'''
- return GiacMethods['vertex_out_degree'](self,*args)
+ return GiacMethods['vertex_out_degree'](self, *args)
- def vertices(self,*args):
+ def vertices(self, *args):
r'''From Giac's documentation:
Help for vertices:
vertices(Polygon or Polyedr(P))
@@ -16652,9 +16652,9 @@ cdef class GiacMethods_base:
Ex2:vertices(polyhedron([0,0,0],[0,5,0],[0,0,5],[1,2,6]))
Ex3:vertices(isosceles_triangle(0,1,pi/4))[2]
'''
- return GiacMethods['vertices'](self,*args)
+ return GiacMethods['vertices'](self, *args)
- def vertices_abc(self,*args):
+ def vertices_abc(self, *args):
r'''From Giac's documentation:
Help for vertices_abc:
vertices_abc(Polygon or Polyedr(P))
@@ -16664,9 +16664,9 @@ cdef class GiacMethods_base:
Ex2:vertices_abc(polyhedron([0,0,0],[0,5,0],[0,0,5],[1,2,6]))
Ex3:vertices_abc(isosceles_triangle(0,1,pi/4))[2]
'''
- return GiacMethods['vertices_abc'](self,*args)
+ return GiacMethods['vertices_abc'](self, *args)
- def vertices_abca(self,*args):
+ def vertices_abca(self, *args):
r'''From Giac's documentation:
Help for vertices_abca:
vertices_abca(Polygon or Polyedr(P))
@@ -16676,9 +16676,9 @@ cdef class GiacMethods_base:
Ex2:vertices_abca(polyhedron([0,0,0],[0,5,0],[0,0,5],[1,2,6]))
Ex3:vertices_abca(isosceles_triangle(0,1,pi/4))[2]
'''
- return GiacMethods['vertices_abca'](self,*args)
+ return GiacMethods['vertices_abca'](self, *args)
- def vpotential(self,*args):
+ def vpotential(self, *args):
r'''From Giac's documentation:
Help for vpotential:
vpotential(Vect(V),LstVar)
@@ -16686,9 +16686,9 @@ cdef class GiacMethods_base:
See also: 1/ curl 2/ potential
Ex1:vpotential([2*x*y+3,x^2-4*z,-2*y*z],[x,y,z])
'''
- return GiacMethods['vpotential'](self,*args)
+ return GiacMethods['vpotential'](self, *args)
- def web_graph(self,*args):
+ def web_graph(self, *args):
r'''From Giac's documentation:
Help for web_graph:
web_graph(Intg(a),Intg(b))
@@ -16696,9 +16696,9 @@ cdef class GiacMethods_base:
See also: 1/ prism_graph 2/ wheel_graph
Ex1:web_graph(5,3)
'''
- return GiacMethods['web_graph'](self,*args)
+ return GiacMethods['web_graph'](self, *args)
- def weibull(self,*args):
+ def weibull(self, *args):
r'''From Giac's documentation:
Help for weibull:
weibull(Real(k),Real(lambda),Real(theta),Real(x))
@@ -16708,9 +16708,9 @@ cdef class GiacMethods_base:
Ex2:weibull(2.1,1.2,0.0,1.3)
Ex3:weibull(2.1,1.2,0.5,1.8)
'''
- return GiacMethods['weibull'](self,*args)
+ return GiacMethods['weibull'](self, *args)
- def weibull_cdf(self,*args):
+ def weibull_cdf(self, *args):
r'''From Giac's documentation:
Help for weibull_cdf:
weibull_cdf(Real(k),Real(lambda),Real(theta),Real(x0))
@@ -16722,9 +16722,9 @@ cdef class GiacMethods_base:
Ex4:weibull_cdf(2.2,1.5,0.4,1.2)
Ex5:weibull_cdf(2.2,1.5,0.4,1.2,1.9)
'''
- return GiacMethods['weibull_cdf'](self,*args)
+ return GiacMethods['weibull_cdf'](self, *args)
- def weibull_icdf(self,*args):
+ def weibull_icdf(self, *args):
r'''From Giac's documentation:
Help for weibull_icdf:
weibull_icdf(Real(k),Real(lambda),Real(theta),Real(p))
@@ -16733,9 +16733,9 @@ cdef class GiacMethods_base:
Ex1:weibull_icdf(4.2,1.3,0.0,0.95)
Ex2:weibull_icdf(2.2,1.5,0.4,0.632)
'''
- return GiacMethods['weibull_icdf'](self,*args)
+ return GiacMethods['weibull_icdf'](self, *args)
- def weibulld(self,*args):
+ def weibulld(self, *args):
r'''From Giac's documentation:
Help for weibulld:
weibulld(Real(k),Real(lambda),Real(theta),Real(x))
@@ -16745,9 +16745,9 @@ cdef class GiacMethods_base:
Ex2:weibulld(2.1,1.2,0.0,1.3)
Ex3:weibulld(2.1,1.2,0.5,1.8)
'''
- return GiacMethods['weibulld'](self,*args)
+ return GiacMethods['weibulld'](self, *args)
- def weibulld_cdf(self,*args):
+ def weibulld_cdf(self, *args):
r'''From Giac's documentation:
Help for weibulld_cdf:
weibulld_cdf(Real(k),Real(lambda),Real(theta),Real(x0))
@@ -16759,9 +16759,9 @@ cdef class GiacMethods_base:
Ex4:weibulld_cdf(2.2,1.5,0.4,1.2)
Ex5:weibulld_cdf(2.2,1.5,0.4,1.2,1.9)
'''
- return GiacMethods['weibulld_cdf'](self,*args)
+ return GiacMethods['weibulld_cdf'](self, *args)
- def weibulld_icdf(self,*args):
+ def weibulld_icdf(self, *args):
r'''From Giac's documentation:
Help for weibulld_icdf:
weibulld_icdf(Real(k),Real(lambda),Real(theta),Real(p))
@@ -16770,9 +16770,9 @@ cdef class GiacMethods_base:
Ex1:weibulld_icdf(4.2,1.3,0.0,0.95)
Ex2:weibulld_icdf(2.2,1.5,0.4,0.632)
'''
- return GiacMethods['weibulld_icdf'](self,*args)
+ return GiacMethods['weibulld_icdf'](self, *args)
- def weibullvariate(self,*args):
+ def weibullvariate(self, *args):
r'''From Giac's documentation:
Help for weibullvariate:
weibullvariate(Real(a),Real(b))
@@ -16781,9 +16781,9 @@ cdef class GiacMethods_base:
Ex1:weibullvariate(1,2)
Ex2:weibullvariate(1.5,4)
'''
- return GiacMethods['weibullvariate'](self,*args)
+ return GiacMethods['weibullvariate'](self, *args)
- def weight_matrix(self,*args):
+ def weight_matrix(self, *args):
r'''From Giac's documentation:
Help for weight_matrix:
weight_matrix(Graph(G))
@@ -16791,27 +16791,27 @@ cdef class GiacMethods_base:
See also: 1/ set_edge_weight 2/ get_edge_weights 3/ is_weighted 4/ make_weighted 5/ assign_edge_weights
Ex1:weight_matrix(graph(%{[[1,2],2],[[2,3],1]%})
'''
- return GiacMethods['weight_matrix'](self,*args)
+ return GiacMethods['weight_matrix'](self, *args)
- def weighted(self,*args):
+ def weighted(self, *args):
r'''From Giac's documentation:
Help for weighted:
weighted(Opt)
Option for graph and digraph commands.
See also: 1/ directed 2/ graph 3/ digraph
'''
- return GiacMethods['weighted'](self,*args)
+ return GiacMethods['weighted'](self, *args)
- def weights(self,*args):
+ def weights(self, *args):
r'''From Giac's documentation:
Help for weights:
weights(Opt)
Option for the edges command.
See also: 1/ edges
'''
- return GiacMethods['weights'](self,*args)
+ return GiacMethods['weights'](self, *args)
- def welch_window(self,*args):
+ def welch_window(self, *args):
r'''From Giac's documentation:
Help for welch_window:
welch_window(Lst,[Interval(n1..n2)])
@@ -16819,9 +16819,9 @@ cdef class GiacMethods_base:
See also: 1/ blackman_harris_window 2/ blackman_window 3/ bohman_window 4/ cosine_window 5/ gaussian_window 6/ hamming_window 7/ hann_poisson_window 8/ hann_window 9/ parzen_window 10/ poisson_window 11/ riemann_window 12/ triangle_window 13/ tukey_window 14/ bartlett_hann_window
Ex1: scatterplot(welch_window(randvector(1000,0..1)))
'''
- return GiacMethods['welch_window'](self,*args)
+ return GiacMethods['welch_window'](self, *args)
- def wheel_graph(self,*args):
+ def wheel_graph(self, *args):
r'''From Giac's documentation:
Help for wheel_graph:
wheel_graph(Intg(n))
@@ -16829,9 +16829,9 @@ cdef class GiacMethods_base:
See also: 1/ star_graph 2/ web_graph
Ex1:wheel_graph(5)
'''
- return GiacMethods['wheel_graph'](self,*args)
+ return GiacMethods['wheel_graph'](self, *args)
- def widget_size(self,*args):
+ def widget_size(self, *args):
r'''From Giac's documentation:
Help for widget_size:
widget_size(Intg(n))
@@ -16841,9 +16841,9 @@ cdef class GiacMethods_base:
Ex2:widget_size(8)
Ex3:widget_size(20,58,49,697,563,1,1,0)
'''
- return GiacMethods['widget_size'](self,*args)
+ return GiacMethods['widget_size'](self, *args)
- def wilcoxonp(self,*args):
+ def wilcoxonp(self, *args):
r'''From Giac's documentation:
Help for wilcoxonp:
wilcoxonp(Intg,[Intg])
@@ -16852,9 +16852,9 @@ cdef class GiacMethods_base:
Ex1:wilcoxonp(4)
Ex2:wilcoxonp(7,5)
'''
- return GiacMethods['wilcoxonp'](self,*args)
+ return GiacMethods['wilcoxonp'](self, *args)
- def wilcoxons(self,*args):
+ def wilcoxons(self, *args):
r'''From Giac's documentation:
Help for wilcoxons:
wilcoxons(List,List || Real)
@@ -16863,9 +16863,9 @@ cdef class GiacMethods_base:
Ex1:wilcoxons([1, 3, 4, 5, 7, 8, 8, 12, 15, 17] , [2, 6, 10, 11, 13, 14, 15, 18, 19, 20])
Ex2:wilcoxons([1, 3, 4, 5, 7, 8, 8, 12, 15, 17] , 10)
'''
- return GiacMethods['wilcoxons'](self,*args)
+ return GiacMethods['wilcoxons'](self, *args)
- def wilcoxont(self,*args):
+ def wilcoxont(self, *args):
r'''From Giac's documentation:
Help for wilcoxont:
wilcoxont(List,List || Real,[Func],[Real])
@@ -16876,9 +16876,9 @@ cdef class GiacMethods_base:
Ex3:wilcoxont([1, 3, 4, 5, 7, 8, 8, 12, 15, 17] , 10,'>')
Ex4:wilcoxont([1, 3, 4, 5, 7, 8, 8, 12, 15, 17] , 10,'>',0.05)
'''
- return GiacMethods['wilcoxont'](self,*args)
+ return GiacMethods['wilcoxont'](self, *args)
- def writergb(self,*args):
+ def writergb(self, *args):
r'''From Giac's documentation:
Help for writergb:
writergb(Str(s),Lst)
@@ -16888,9 +16888,9 @@ cdef class GiacMethods_base:
Ex2:writergb("image.png",[[255,0],[0,0]],[[0,255],[0,0]],[[0,0],[255,0]])
Ex3: a:=readrgb("rgb_image.png");writergb("brg_image.png",[a[0],a[4],a[1],a[3],a[2]])
'''
- return GiacMethods['writergb'](self,*args)
+ return GiacMethods['writergb'](self, *args)
- def writewav(self,*args):
+ def writewav(self, *args):
r'''From Giac's documentation:
Help for writewav:
writewav(Str(s),Lst(l))
@@ -16899,9 +16899,9 @@ cdef class GiacMethods_base:
Ex1:writewav("la.wav",2^14*(sin(2*pi*440*soundsec(1))))
Ex2:writewav("beep.wav",[[1,16,44100,80000],[65000$10000,0$10000,65000$10000,0$10000]])
'''
- return GiacMethods['writewav'](self,*args)
+ return GiacMethods['writewav'](self, *args)
- def xcas_mode(self,*args):
+ def xcas_mode(self, *args):
r'''From Giac's documentation:
Help for xcas_mode:
xcas_mode(Intg(0) or 1 or 2 or 3)
@@ -16910,9 +16910,9 @@ cdef class GiacMethods_base:
Ex1:xcas_mode(1)
Ex2:xcas_mode(0)
'''
- return GiacMethods['xcas_mode'](self,*args)
+ return GiacMethods['xcas_mode'](self, *args)
- def xml_print(self,*args):
+ def xml_print(self, *args):
r'''From Giac's documentation:
Help for xml_print:
xml_print(Str)
@@ -16920,18 +16920,18 @@ cdef class GiacMethods_base:
See also: 1/ export_mathml
Ex1:xml_print(export_mathml(a+2*b))
'''
- return GiacMethods['xml_print'](self,*args)
+ return GiacMethods['xml_print'](self, *args)
- def xyztrange(self,*args):
+ def xyztrange(self, *args):
r'''From Giac's documentation:
Help for xyztrange:
xyztrange(SeqReal)
xyztrange puts or erases the axes on the graphic-screen (cf button Cfg).
Ex1:xyztrange(-5.0,5.0,-5.0,2.0,-10.0,10.0,-1.0,6.0,-5.0,5.0,-1.2384,2.0,1,0.0,1.0)
'''
- return GiacMethods['xyztrange'](self,*args)
+ return GiacMethods['xyztrange'](self, *args)
- def zeros(self,*args):
+ def zeros(self, *args):
r'''From Giac's documentation:
Help for zeros:
zeros(Expr,[Var])
@@ -16942,9 +16942,9 @@ cdef class GiacMethods_base:
Ex3:zeros(ln(y)^2-2,y)
Ex4:zeros([x^2-1,x^2-y^2],[x,y])
'''
- return GiacMethods['zeros'](self,*args)
+ return GiacMethods['zeros'](self, *args)
- def ztrans(self,*args):
+ def ztrans(self, *args):
r'''From Giac's documentation:
Help for ztrans:
ztrans(Expr,[Var],[ZtransVar])
@@ -16953,9 +16953,9 @@ cdef class GiacMethods_base:
Ex1:ztrans(a^x)
Ex2:ztrans(a^n,n,z)
'''
- return GiacMethods['ztrans'](self,*args)
+ return GiacMethods['ztrans'](self, *args)
- def type(self,*args):
+ def type(self, *args):
r'''From Giac's documentation:
Help for type:
type(Expr)
@@ -16964,9 +16964,9 @@ cdef class GiacMethods_base:
Ex1:type("abc")
Ex2:type([1,2,3])
'''
- return GiacMethods['type'](self,*args)
+ return GiacMethods['type'](self, *args)
- def zip(self,*args):
+ def zip(self, *args):
r'''From Giac's documentation:
Help for zip:
zip(Fnc2d(f),Lst(l1),Lst(l2),[Val(default)])
@@ -16977,5 +16977,5 @@ cdef class GiacMethods_base:
Ex3:zip('+',[a,b,c,d], [1,2,3],5)
Ex4:zip(sum,[a,b,c,d], [1,2,3,4])
'''
- return GiacMethods['zip'](self,*args)
+ return GiacMethods['zip'](self, *args)
diff --git a/src/sage/libs/giac/giac.pyx b/src/sage/libs/giac/giac.pyx
index 4094307f0fd..91c42f3132c 100644
--- a/src/sage/libs/giac/giac.pyx
+++ b/src/sage/libs/giac/giac.pyx
@@ -642,11 +642,11 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[6])._val
- def __set__(self,value):
+ def __set__(self, value):
l = Pygen('cas_setup()').eval()
pl = [ i for i in l ]
pl[6] = value
- Pygen('cas_setup(%s)'%(pl)).eval()
+ Pygen('cas_setup(%s)' % pl).eval()
property sqrtflag:
r"""
@@ -655,14 +655,14 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[9])._val == 1
- def __set__(self,value):
+ def __set__(self, value):
l = Pygen('cas_setup()').eval()
pl = [ i for i in l ]
if value:
pl[9]=1
else:
pl[9]=0
- Pygen('cas_setup(%s)'%(pl)).eval()
+ Pygen('cas_setup(%s)' % pl).eval()
property complexflag:
r"""
@@ -683,14 +683,14 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[2])._val == 1
- def __set__(self,value):
+ def __set__(self, value):
l = Pygen('cas_setup()').eval()
pl = [ i for i in l ]
if value:
pl[2] = 1
else:
pl[2] = 0
- Pygen('cas_setup(%s)'%(pl)).eval()
+ Pygen('cas_setup(%s)' % pl).eval()
property eval_level:
r"""
@@ -712,11 +712,11 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[7][3])._val
- def __set__(self,value):
+ def __set__(self, value):
l = Pygen('cas_setup()').eval()
pl = [ i for i in l ]
pl[7] = [l[7][0],l[7][1],l[7][2], value]
- Pygen('cas_setup(%s)'%(pl)).eval()
+ Pygen('cas_setup(%s)' % pl).eval()
property proba_epsilon:
r"""
@@ -736,11 +736,11 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[5][1])._double
- def __set__(self,value):
+ def __set__(self, value):
l = Pygen('cas_setup()').eval()
pl = [ i for i in l ]
pl[5] = [l[5][0],value]
- Pygen('cas_setup(%s)'%(pl)).eval()
+ Pygen('cas_setup(%s)' % pl).eval()
property epsilon:
r"""
@@ -759,11 +759,11 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[5][0])._double
- def __set__(self,value):
+ def __set__(self, value):
l = Pygen('cas_setup()').eval()
pl = [ i for i in l ]
pl[5] = [value,l[5][1]]
- Pygen('cas_setup(%s)'%(pl)).eval()
+ Pygen('cas_setup(%s)' % pl).eval()
property threads:
r"""
@@ -772,8 +772,8 @@ cdef class GiacSetting(Pygen):
def __get__(self):
return (self.cas_setup()[7][0])._val
- def __set__(self,value):
- Pygen('threads:=%s'%(str(value))).eval()
+ def __set__(self, value):
+ Pygen('threads:=%s' % str(value)).eval()
########################################################
# #
@@ -958,7 +958,7 @@ cdef class Pygen(GiacMethods_base):
sig_off()
return _wrap_gen(result)
else:
- raise IndexError('list index %s out of range'%(i))
+ raise IndexError('list index %s out of range' % i)
else:
if isinstance(i, slice):
sig_on()
@@ -978,17 +978,18 @@ cdef class Pygen(GiacMethods_base):
raise TypeError('gen indexes are not yet implemented')
# Here we add support to formal variable indexes:
else:
- cmd='%s[%s]'%(self,i)
- ans=Pygen(cmd).eval()
+ cmd = '%s[%s]' % (self, i)
+ ans = Pygen(cmd).eval()
# if the answer is a string, it must be an error message because self is not a list or a string
if (ans._type == 12):
- raise TypeError("Error executing code in Giac\nCODE:\n\t%s\nGiac ERROR:\n\t%s"%(cmd, ans))
+ raise TypeError("Error executing code in Giac\nCODE:\n\t%s\nGiac ERROR:\n\t%s" % (cmd, ans))
return ans
def __setitem__(self, key, value):
"""
Set the value of a coefficient of a giac vector or matrix or list.
- Warning: It is an in place affectation.
+
+ Warning: It is an in place affectation.
TESTS::
@@ -1028,9 +1029,9 @@ cdef class Pygen(GiacMethods_base):
sig_on()
cdef gen g = gen(encstring23('GIACPY_TMP_NAME050268070969290100291003'),context_ptr)
GIAC_sto((self).gptr[0],g,1,context_ptr)
- g=gen(encstring23('GIACPY_TMP_NAME050268070969290100291003[%s]'%(str(key))),context_ptr)
+ g = gen(encstring23('GIACPY_TMP_NAME050268070969290100291003[%s]' % str(key)), context_ptr)
v=((Pygen(value).eval())).gptr[0]
- GIAC_sto(v,g,1,context_ptr)
+ GIAC_sto(v, g, 1, context_ptr)
Pygen('purge(GIACPY_TMP_NAME050268070969290100291003):;').eval()
sig_off()
return
@@ -1221,8 +1222,8 @@ cdef class Pygen(GiacMethods_base):
return self
# To be able to use the eval function before the GiacMethods initialisation
- def cas_setup(self,*args):
- return Pygen('cas_setup')(self,*args)
+ def cas_setup(self, *args):
+ return Pygen('cas_setup')(self, *args)
def savegen(self, str filename):
"""
@@ -1336,7 +1337,7 @@ cdef class Pygen(GiacMethods_base):
sig_off()
return result
- def _integer_(self,Z=None):
+ def _integer_(self, Z=None):
"""
Convert giac integers or modular integers to sage Integers (via gmp).
@@ -1797,7 +1798,7 @@ cdef vecteur _wrap_pylist(L) except +:
#################################
# slice wrapper for a giac list
#################################
-cdef vecteur _getgiacslice(Pygen L,slice sl) except +:
+cdef vecteur _getgiacslice(Pygen L, slice sl) except +:
cdef vecteur * V
cdef int u
@@ -2037,7 +2038,7 @@ class GiacInstance:
def __init__(self):
self.__dict__.update(GiacMethods)
- def __call__(self,s):
+ def __call__(self, s):
return _giac(s)
def _sage_doc_(self):
diff --git a/src/sage/libs/gsl/array.pyx b/src/sage/libs/gsl/array.pyx
index 3916929cca4..2dc98555dbd 100644
--- a/src/sage/libs/gsl/array.pyx
+++ b/src/sage/libs/gsl/array.pyx
@@ -14,7 +14,7 @@ cdef class GSLDoubleArray:
sage: a[:6:2]
[0.0, 1.0, 1.0]
"""
- def __init__(self, size_t n, size_t stride = 1, data = None):
+ def __init__(self, size_t n, size_t stride=1, data=None):
"""
EXAMPLES::
diff --git a/src/sage/libs/gsl/errno.pxd b/src/sage/libs/gsl/errno.pxd
index 02d599289fd..3d54c6ee0ef 100644
--- a/src/sage/libs/gsl/errno.pxd
+++ b/src/sage/libs/gsl/errno.pxd
@@ -5,9 +5,9 @@ from libc.stdio cimport FILE
cdef extern from "gsl/gsl_errno.h":
- ctypedef void gsl_error_handler_t (char * reason, char * file,int line, int gsl_errno)
+ ctypedef void gsl_error_handler_t (char * reason, char * file, int line, int gsl_errno)
- ctypedef void gsl_stream_handler_t (char * label, char * file,int line, char * reason)
+ ctypedef void gsl_stream_handler_t (char * label, char * file, int line, char * reason)
void gsl_error (char * reason,char * file, int line, int gsl_errno)
diff --git a/src/sage/libs/lcalc/lcalc_Lfunction.pxd b/src/sage/libs/lcalc/lcalc_Lfunction.pxd
index 715fa46bba0..b7d3126953c 100644
--- a/src/sage/libs/lcalc/lcalc_Lfunction.pxd
+++ b/src/sage/libs/lcalc/lcalc_Lfunction.pxd
@@ -105,12 +105,12 @@ ctypedef double Double
cdef class Lfunction:
cdef void *thisptr
cdef void _init_fun(self, char *NAME, int what_type, dirichlet_coeff, long long Period, double q, c_Complex w, int A, double *g, c_Complex *l, int n_poles, c_Complex *p, c_Complex *r) noexcept
- cdef c_Complex _value(self,c_Complex s,int derivative) noexcept
- cdef c_Complex _hardy_z_function(self,c_Complex s) noexcept
+ cdef c_Complex _value(self, c_Complex s, int derivative) noexcept
+ cdef c_Complex _hardy_z_function(self, c_Complex s) noexcept
cdef int _compute_rank(self) noexcept
#strange bug, replacing Double with double gives me a compile error
cdef Double _typedN(self, double T) noexcept
- cdef void _find_zeros_v(self, double T1, double T2, double stepsize,doublevec *result) noexcept
+ cdef void _find_zeros_v(self, double T1, double T2, double stepsize, doublevec *result) noexcept
cdef int _find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec* result) noexcept
cdef str _repr
diff --git a/src/sage/libs/lcalc/lcalc_Lfunction.pyx b/src/sage/libs/lcalc/lcalc_Lfunction.pyx
index f1173543ab1..a8a71c2955a 100644
--- a/src/sage/libs/lcalc/lcalc_Lfunction.pyx
+++ b/src/sage/libs/lcalc/lcalc_Lfunction.pyx
@@ -402,19 +402,19 @@ cdef class Lfunction:
cdef void _init_fun(self, char *NAME, int what_type, dirichlet_coeff, long long Period, double q, c_Complex w, int A, double *g, c_Complex *l, int n_poles, c_Complex *p, c_Complex *r) noexcept:
raise NotImplementedError
- cdef c_Complex _value(self,c_Complex s,int derivative) noexcept:
+ cdef c_Complex _value(self, c_Complex s, int derivative) noexcept:
raise NotImplementedError
- cdef c_Complex _hardy_z_function(self,c_Complex s) noexcept:
+ cdef c_Complex _hardy_z_function(self, c_Complex s) noexcept:
raise NotImplementedError
cdef int _compute_rank(self) noexcept:
raise NotImplementedError
- cdef double _typedN(self,double T) noexcept:
+ cdef double _typedN(self, double T) noexcept:
raise NotImplementedError
- cdef void _find_zeros_v(self,double T1, double T2, double stepsize, doublevec *result) noexcept:
+ cdef void _find_zeros_v(self, double T1, double T2, double stepsize, doublevec *result) noexcept:
raise NotImplementedError
cdef int _find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec *result) noexcept:
@@ -498,10 +498,10 @@ cdef class Lfunction_I(Lfunction):
self.thisptr=new_c_Lfunction_I(NAME, what_type, N, coeffs, Period, q, w, A, g, l, n_poles, p, r)
del_ints(coeffs)
- cdef inline c_Complex _value(self,c_Complex s,int derivative) noexcept:
+ cdef inline c_Complex _value(self, c_Complex s, int derivative) noexcept:
return ((self.thisptr)).value(s, derivative, "pure")
- cdef inline c_Complex _hardy_z_function(self,c_Complex s) noexcept:
+ cdef inline c_Complex _hardy_z_function(self, c_Complex s) noexcept:
return ((self.thisptr)).value(s, 0, "rotated pure")
cdef int _compute_rank(self) noexcept:
@@ -635,10 +635,10 @@ cdef class Lfunction_D(Lfunction):
self.thisptr=new_c_Lfunction_D(NAME, what_type, N, coeffs, Period, q, w, A, g, l, n_poles, p, r)
del_doubles(coeffs)
- cdef inline c_Complex _value(self,c_Complex s,int derivative) noexcept:
+ cdef inline c_Complex _value(self, c_Complex s, int derivative) noexcept:
return ((self.thisptr)).value(s, derivative, "pure")
- cdef inline c_Complex _hardy_z_function(self,c_Complex s) noexcept:
+ cdef inline c_Complex _hardy_z_function(self, c_Complex s) noexcept:
return ((self.thisptr)).value(s, 0, "rotated pure")
cdef inline int _compute_rank(self) noexcept:
@@ -650,7 +650,7 @@ cdef class Lfunction_D(Lfunction):
cdef double _typedN(self, double T) noexcept:
return (self.thisptr).N(T)
- cdef int _find_zeros(self, long count, long start,double max_refine, int rank, const char* message_stamp, doublevec *result) noexcept:
+ cdef int _find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec *result) noexcept:
(self.thisptr).find_zeros(count, start, max_refine, rank, message_stamp, result)
# debug tools
@@ -777,10 +777,10 @@ cdef class Lfunction_C:
del_Complexes(coeffs)
- cdef inline c_Complex _value(self,c_Complex s,int derivative) noexcept:
+ cdef inline c_Complex _value(self, c_Complex s, int derivative) noexcept:
return ((self.thisptr)).value(s, derivative, "pure")
- cdef inline c_Complex _hardy_z_function(self,c_Complex s) noexcept:
+ cdef inline c_Complex _hardy_z_function(self, c_Complex s) noexcept:
return ((self.thisptr)).value(s, 0,"rotated pure")
cdef inline int _compute_rank(self) noexcept:
@@ -858,10 +858,10 @@ cdef class Lfunction_Zeta(Lfunction):
self.thisptr = new_c_Lfunction_Zeta()
self._repr = "The Riemann zeta function"
- cdef inline c_Complex _value(self,c_Complex s,int derivative) noexcept:
+ cdef inline c_Complex _value(self, c_Complex s, int derivative) noexcept:
return ((self.thisptr)).value(s, derivative, "pure")
- cdef inline c_Complex _hardy_z_function(self,c_Complex s) noexcept:
+ cdef inline c_Complex _hardy_z_function(self, c_Complex s) noexcept:
return ((self.thisptr)).value(s, 0, "rotated pure")
cdef inline int _compute_rank(self) noexcept:
diff --git a/src/sage/libs/libecm.pyx b/src/sage/libs/libecm.pyx
index 9d53d7284d4..6e0fc8668a5 100644
--- a/src/sage/libs/libecm.pyx
+++ b/src/sage/libs/libecm.pyx
@@ -169,7 +169,7 @@ def ecmfactor(number, double B1, verbose=False, sigma=0):
sage_int_sigma = Integer(sigma)
if number <= 1:
- raise ValueError("Input number (%s) must be greater than 1"%number)
+ raise ValueError("Input number (%s) must be greater than 1" % number)
if verbose:
print("Performing one curve with B1=%1.0f" % B1)
diff --git a/src/sage/libs/linkages/padics/unram_shared.pxi b/src/sage/libs/linkages/padics/unram_shared.pxi
index e3edc87bc39..c13f060a227 100644
--- a/src/sage/libs/linkages/padics/unram_shared.pxi
+++ b/src/sage/libs/linkages/padics/unram_shared.pxi
@@ -83,7 +83,7 @@ def frobenius_unram(self, arithmetic=True):
@cython.binding(True)
-def norm_unram(self, base = None):
+def norm_unram(self, base=None):
r"""
Return the absolute or relative norm of this element.
@@ -170,7 +170,7 @@ def norm_unram(self, base = None):
@cython.binding(True)
-def trace_unram(self, base = None):
+def trace_unram(self, base=None):
r"""
Return the absolute or relative trace of this element.
diff --git a/src/sage/libs/mpmath/meson.build b/src/sage/libs/mpmath/meson.build
index 4659da1563a..a197516f9f1 100644
--- a/src/sage/libs/mpmath/meson.build
+++ b/src/sage/libs/mpmath/meson.build
@@ -21,7 +21,7 @@ foreach name, pyx : extension_data
subdir: 'sage/libs/mpmath',
install: true,
include_directories: [inc_cpython, inc_ext, inc_rings],
- dependencies: [py_dep, cypari2, cysignals, gmp, mpfr],
+ dependencies: [py_dep, cysignals, gmp, mpfr],
)
endforeach
diff --git a/src/sage/libs/mpmath/utils.pyx b/src/sage/libs/mpmath/utils.pyx
index 0123d4190be..5f681852c68 100644
--- a/src/sage/libs/mpmath/utils.pyx
+++ b/src/sage/libs/mpmath/utils.pyx
@@ -75,7 +75,7 @@ cpdef isqrt(n):
mpz_sqrt(y.value, m.value)
return y
-cpdef from_man_exp(man, exp, long prec = 0, str rnd = 'd'):
+cpdef from_man_exp(man, exp, long prec=0, str rnd='d'):
"""
Create normalized mpf value tuple from mantissa and exponent.
diff --git a/src/sage/libs/ntl/ntl_GF2X.pyx b/src/sage/libs/ntl/ntl_GF2X.pyx
index 7f790b540e0..1a48250dc44 100644
--- a/src/sage/libs/ntl/ntl_GF2X.pyx
+++ b/src/sage/libs/ntl/ntl_GF2X.pyx
@@ -674,7 +674,7 @@ cdef class ntl_GF2X():
d.x = GF2X_diff(self.x)
return d
- def reverse(self, int hi = -2):
+ def reverse(self, int hi=-2):
"""
Return reverse of a[0]..a[hi] (hi >= -1)
hi defaults to deg(a)
diff --git a/src/sage/libs/ntl/ntl_ZZ_pE.pyx b/src/sage/libs/ntl/ntl_ZZ_pE.pyx
index 2763c41cb54..4a39cf14051 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pE.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pE.pyx
@@ -328,7 +328,7 @@ cdef class ntl_ZZ_pE():
[1 1 1]
"""
self.c.restore_c()
- cdef ntl_ZZ_pX r = ntl_ZZ_pX(v = None, modulus=self.c.pc)
+ cdef ntl_ZZ_pX r = ntl_ZZ_pX(v=None, modulus=self.c.pc)
r.x = (self.c.f).x
return r
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx b/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx
index 84f5f55f9ec..c9937943824 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx
@@ -134,11 +134,11 @@ cdef class ntl_ZZ_pEContext_class():
self.pc.restore_c()
self.x.restore()
- #def ZZ_pX(self,v = None):
+ #def ZZ_pX(self, v=None):
# from ntl_ZZ_pX import ntl_ZZ_pX
# return ntl_ZZ_pX(v,modulus=self)
- def ZZ_pE(self, v = None):
+ def ZZ_pE(self, v=None):
"""
Return a ZZ_pE object with modulus ``self`` out of the data v.
@@ -151,7 +151,7 @@ cdef class ntl_ZZ_pEContext_class():
from sage.libs.ntl.ntl_ZZ_pE import ntl_ZZ_pE
return ntl_ZZ_pE(v,modulus=self)
- def ZZ_pEX(self, v = None):
+ def ZZ_pEX(self, v=None):
"""
Return a ZZ_pE object with modulus ``self`` out of the data v.
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEX.pyx b/src/sage/libs/ntl/ntl_ZZ_pEX.pyx
index caeaa26e984..9aa36ce9fc2 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEX.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pEX.pyx
@@ -1060,7 +1060,7 @@ cdef class ntl_ZZ_pEX():
[8 1]
"""
self.c.restore_c()
- cdef ntl_ZZ_pE r = ntl_ZZ_pE(modulus = self.c)
+ cdef ntl_ZZ_pE r = ntl_ZZ_pE(modulus=self.c)
sig_on()
ZZ_pEX_TraceMod(r.x, self.x, modulus.x)
sig_off()
@@ -1115,7 +1115,7 @@ cdef class ntl_ZZ_pEX():
[]
"""
self.c.restore_c()
- cdef ntl_ZZ_pE r = ntl_ZZ_pE(modulus = self.c)
+ cdef ntl_ZZ_pE r = ntl_ZZ_pE(modulus=self.c)
sig_on()
ZZ_pEX_resultant(r.x, self.x, other.x)
sig_off()
@@ -1138,7 +1138,7 @@ cdef class ntl_ZZ_pEX():
[9 2]
"""
self.c.restore_c()
- cdef ntl_ZZ_pE r = ntl_ZZ_pE(modulus = self.c)
+ cdef ntl_ZZ_pE r = ntl_ZZ_pE(modulus=self.c)
sig_on()
ZZ_pEX_NormMod(r.x, self.x, modulus.x)
sig_off()
diff --git a/src/sage/libs/ntl/ntl_mat_GF2.pyx b/src/sage/libs/ntl/ntl_mat_GF2.pyx
index ae33d4fbb49..479f4505b71 100644
--- a/src/sage/libs/ntl/ntl_mat_GF2.pyx
+++ b/src/sage/libs/ntl/ntl_mat_GF2.pyx
@@ -520,7 +520,7 @@ cdef class ntl_mat_GF2():
sig_off()
return r
- def IsIdent(self, n = -1):
+ def IsIdent(self, n=-1):
"""
Test if this matrix is the n x n identity matrix.
diff --git a/src/sage/libs/ntl/ntl_mat_GF2E.pyx b/src/sage/libs/ntl/ntl_mat_GF2E.pyx
index 795ad9674fa..eb044cbfc37 100644
--- a/src/sage/libs/ntl/ntl_mat_GF2E.pyx
+++ b/src/sage/libs/ntl/ntl_mat_GF2E.pyx
@@ -49,7 +49,7 @@ cdef class ntl_mat_GF2E():
r"""
The \class{mat_GF2E} class implements arithmetic with matrices over `GF(2**x)`.
"""
- def __init__(self, modulus = None, nrows=0, ncols=0, v=None):
+ def __init__(self, modulus=None, nrows=0, ncols=0, v=None):
"""
Construct a matrix over ntl.GF2E.
@@ -585,7 +585,7 @@ cdef class ntl_mat_GF2E():
sig_off()
return r
- def IsIdent(self, n = -1):
+ def IsIdent(self, n=-1):
r"""
Test if `A` is the `n \times n` identity matrix.
diff --git a/src/sage/libs/ntl/ntlwrap_impl.h b/src/sage/libs/ntl/ntlwrap_impl.h
index 083bab824cc..094cfb52280 100644
--- a/src/sage/libs/ntl/ntlwrap_impl.h
+++ b/src/sage/libs/ntl/ntlwrap_impl.h
@@ -487,13 +487,13 @@ static CYTHON_INLINE mat_ZZ* mat_ZZ_HNF(const mat_ZZ* A, const struct ZZ* D)
static CYTHON_INLINE long mat_ZZ_LLL(struct ZZ **det, mat_ZZ *x, long a, long b, long verbose)
{
*det = new ZZ();
- return LLL(**det,*x,a,b,verbose);
+ return LLL(**det, *x, a, b, verbose);
}
static CYTHON_INLINE long mat_ZZ_LLL_U(struct ZZ **det, mat_ZZ *x, mat_ZZ *U, long a, long b, long verbose)
{
*det = new ZZ();
- return LLL(**det,*x,*U,a,b,verbose);
+ return LLL(**det, *x, *U, a, b, verbose);
}
diff --git a/src/sage/libs/pari/convert_sage.pyx b/src/sage/libs/pari/convert_sage.pyx
index 64386bcf632..e26238d7c38 100644
--- a/src/sage/libs/pari/convert_sage.pyx
+++ b/src/sage/libs/pari/convert_sage.pyx
@@ -379,7 +379,7 @@ cpdef set_integer_from_gen(Integer self, Gen x):
sig_on()
x = new_gen(FF_to_FpXQ_i((x).g))
else:
- raise TypeError("Unable to coerce PARI %s to an Integer"%x)
+ raise TypeError("Unable to coerce PARI %s to an Integer" % x)
# Now we have a true PARI integer, convert it to Sage
INT_to_mpz(self.value, (x).g)
diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd
index dddc452fd98..d8c6d9a1201 100644
--- a/src/sage/libs/singular/decl.pxd
+++ b/src/sage/libs/singular/decl.pxd
@@ -983,7 +983,7 @@ cdef extern from "singular/Singular/libsingular.h":
void setFlag(leftv *A, int F)
void resetFlag(leftv *A, int F)
- ctypedef number* (*nMapFunc)(number *c,const n_Procs_s* src,const n_Procs_s* dst)
+ ctypedef number* (*nMapFunc)(number *c, const n_Procs_s* src, const n_Procs_s* dst)
cdef extern from "singular/coeffs/coeffs.h":
diff --git a/src/sage/libs/singular/function.pxd b/src/sage/libs/singular/function.pxd
index facdcae674a..a83017e74ab 100644
--- a/src/sage/libs/singular/function.pxd
+++ b/src/sage/libs/singular/function.pxd
@@ -52,7 +52,7 @@ cdef class Converter(SageObject):
cdef leftv * append_module(self, m) except NULL
cdef to_sage_integer_matrix(self, intvec *mat)
cdef object to_sage_module_element_sequence_destructive(self, ideal *i)
- cdef to_sage_vector_destructive(self, poly *p, free_module = ?)
+ cdef to_sage_vector_destructive(self, poly *p, free_module=?)
cdef to_sage_matrix(self, matrix* mat)
cdef to_python(self, leftv* to_convert)
diff --git a/src/sage/libs/singular/function.pyx b/src/sage/libs/singular/function.pyx
index c6f65eb718a..7bf2afafbe8 100644
--- a/src/sage/libs/singular/function.pyx
+++ b/src/sage/libs/singular/function.pyx
@@ -352,7 +352,7 @@ cdef leftv* new_leftv(void *data, res_type) noexcept:
res.rtyp = res_type
return res
-cdef free_leftv(leftv *args, ring *r = NULL):
+cdef free_leftv(leftv *args, ring *r=NULL):
"""
Kills this ``leftv`` and all ``leftv``s in the tail.
@@ -692,7 +692,7 @@ cdef class Converter(SageObject):
result[i,j] = p
return result
- cdef to_sage_vector_destructive(self, poly *p, free_module = None):
+ cdef to_sage_vector_destructive(self, poly *p, free_module=None):
cdef int rank
if free_module:
rank = free_module.rank()
@@ -826,7 +826,7 @@ cdef class Converter(SageObject):
cdef poly *p
ncols = mat.ncols()
nrows = mat.nrows()
- cdef matrix* _m=mpNew(nrows,ncols)
+ cdef matrix* _m=mpNew(nrows, ncols)
for i in range(nrows):
for j in range(ncols):
#FIXME
@@ -1314,7 +1314,7 @@ cdef class SingularFunction(SageObject):
sage: from sage.libs.singular.function import singular_function
sage: groebner = singular_function('groebner')
- sage: 'groebner' in groebner.__doc__
+ sage: 'groebner' in groebner.__doc__ # needs info
True
"""
@@ -1360,14 +1360,9 @@ EXAMPLES::
[x2, x1^2],
[x2, x1^2]]
-The Singular documentation for '%s' is given below.
-"""%(self._name,self._name)
- # Github issue #11268: Include the Singular documentation as a block of code
- singular_doc = get_docstring(self._name).split('\n')
- if len(singular_doc) > 1:
- return prefix + "\n::\n\n"+'\n'.join([" "+L for L in singular_doc])
- else:
- return prefix + "\n::\n\n"+" Singular documentation not found"
+"""%(self._name)
+ from sage.interfaces.singular import get_docstring
+ return prefix + get_docstring(self._name, prefix=True, code=True)
cdef common_ring(self, tuple args, ring=None):
"""
diff --git a/src/sage/libs/singular/polynomial.pyx b/src/sage/libs/singular/polynomial.pyx
index 6f7f576cb02..db4b2ff35e2 100644
--- a/src/sage/libs/singular/polynomial.pyx
+++ b/src/sage/libs/singular/polynomial.pyx
@@ -200,7 +200,7 @@ cdef int singular_polynomial_call(poly **ret, poly *p, ring *r, list args,
Leaked 0 bytes
"""
cdef long l = len(args)
- cdef ideal *to_id = idInit(l,1)
+ cdef ideal *to_id = idInit(l, 1)
cdef bint constant_args = 1
for i from 0 <= i < l:
to_id.m[i]= p_Copy( get_element(args[i]), r)
@@ -391,7 +391,7 @@ cdef int singular_polynomial_pow(poly **ret, poly *p, unsigned long exp, ring *r
if r != currRing:
rChangeCurrRing(r)
- cdef int count = singular_polynomial_length_bounded(p,15)
+ cdef int count = singular_polynomial_length_bounded(p, 15)
if count >= 15 or exp > 15:
sig_on()
ret[0] = pPower( p_Copy(p,r), exp)
diff --git a/src/sage/libs/singular/singular.pxd b/src/sage/libs/singular/singular.pxd
index ca31d02456c..9d764b51a6f 100644
--- a/src/sage/libs/singular/singular.pxd
+++ b/src/sage/libs/singular/singular.pxd
@@ -42,10 +42,10 @@ cpdef tuple si2sa_resolution_graded(Resolution res, tuple degrees)
# Conversion from Sage to Singular types
# ======================================
-cdef number *sa2si_QQ(Rational ,ring (*)) noexcept
+cdef number *sa2si_QQ(Rational, ring (*)) noexcept
cdef number *sa2si_ZZ(Integer d, ring *_ring) noexcept
-cdef number *sa2si_GFqGivaro(int exp ,ring (*)) noexcept
+cdef number *sa2si_GFqGivaro(int exp, ring (*)) noexcept
cdef number *sa2si_GFqNTLGF2E(FFgf2eE elem, ring *_ring) noexcept
cdef number *sa2si_GFq_generic(object vector, ring *_ring) noexcept
cdef number *sa2si_ZZmod(IntegerMod_abstract d, ring *_ring) noexcept
diff --git a/src/sage/logic/boolformula.py b/src/sage/logic/boolformula.py
index d22c0443461..b496bb91158 100644
--- a/src/sage/logic/boolformula.py
+++ b/src/sage/logic/boolformula.py
@@ -1106,7 +1106,7 @@ def convert_opt(self, tree):
:func:`~sage.logic.logicparser.apply_func()` in
:mod:`~sage.logic.logicparser`.
"""
- if not isinstance(tree[1], tuple) and not (tree[1] is None):
+ if not isinstance(tree[1], tuple) and tree[1] is not None:
lval = ('prop', tree[1])
else:
lval = tree[1]
diff --git a/src/sage/manifolds/differentiable/affine_connection.py b/src/sage/manifolds/differentiable/affine_connection.py
index d1e25cc3e31..73b6e5d42cd 100644
--- a/src/sage/manifolds/differentiable/affine_connection.py
+++ b/src/sage/manifolds/differentiable/affine_connection.py
@@ -1608,7 +1608,7 @@ def _derive_paral(self, tensor):
# definition of the parallel function
@parallel(p_iter='multiprocessing',ncpus=nproc)
- def make_CovDerivative(ind_part,tc,gam,frame,n_con,rank,manif):
+ def make_CovDerivative(ind_part, tc, gam, frame, n_con, rank, manif):
partial = []
for ind in ind_part:
p = ind[-1] # derivation index
diff --git a/src/sage/manifolds/differentiable/integrated_curve.py b/src/sage/manifolds/differentiable/integrated_curve.py
index 135e6d53d32..17784f555e1 100644
--- a/src/sage/manifolds/differentiable/integrated_curve.py
+++ b/src/sage/manifolds/differentiable/integrated_curve.py
@@ -1293,7 +1293,7 @@ def system(t, y):
# of the system to be provided
if T.jacobian is None:
- def jacobian(t,y):
+ def jacobian(t, y):
jac = []
par = self._curve_parameter
for i in range(dim):
diff --git a/src/sage/manifolds/differentiable/levi_civita_connection.py b/src/sage/manifolds/differentiable/levi_civita_connection.py
index 55c4aca9416..215756f00d3 100644
--- a/src/sage/manifolds/differentiable/levi_civita_connection.py
+++ b/src/sage/manifolds/differentiable/levi_civita_connection.py
@@ -507,7 +507,7 @@ def coef(self, frame=None):
# definition of the parallel function
@parallel(p_iter='multiprocessing',ncpus=nproc)
- def make_Connect(local_list_ijk,chart,ginv,gg,manif):
+ def make_Connect(local_list_ijk, chart, ginv, gg, manif):
partial = []
for i,j,k in local_list_ijk:
rsum = 0
diff --git a/src/sage/manifolds/differentiable/metric.py b/src/sage/manifolds/differentiable/metric.py
index e25033a8cb7..4a783db3478 100644
--- a/src/sage/manifolds/differentiable/metric.py
+++ b/src/sage/manifolds/differentiable/metric.py
@@ -2598,7 +2598,7 @@ def __init__(self, vector_field_module, name, signature=None,
m
sage: Int = M.open_subset('Int')
sage: X.=Int.chart(r"t r:(0,2*m) th:(0,pi):\theta ph:(0,2*pi):\phi")
- sage: XM = M.vector_field_module(); e= X.frame()
+ sage: XM = M.vector_field_module(); e = X.frame()
sage: from sage.manifolds.differentiable.metric import \
....: DegenerateMetric
sage: g = DegenerateMetric(XM, 'g', signature=(2,1,1)); g
diff --git a/src/sage/manifolds/differentiable/vectorfield_module.py b/src/sage/manifolds/differentiable/vectorfield_module.py
index 43efcb19aa6..67cd1abd614 100644
--- a/src/sage/manifolds/differentiable/vectorfield_module.py
+++ b/src/sage/manifolds/differentiable/vectorfield_module.py
@@ -1385,7 +1385,7 @@ class VectorFieldFreeModule(FiniteRankFreeModule):
Let us introduce an open subset of `J\subset I` and the vector field module
corresponding to the restriction of `\Phi` to it::
- sage: J = I.open_subset('J', coord_def= {canon: t self._entries.nrows:
raise TypeError("Expected highr <= self.nrows(), but got %d > %d instead."%(highr, self._entries.nrows))
- cdef Matrix_gf2e_dense A = self.new_matrix(nrows = nrows, ncols = ncols)
+ cdef Matrix_gf2e_dense A = self.new_matrix(nrows=nrows, ncols=ncols)
if ncols == 0 or nrows == 0:
return A
A._entries = mzed_submatrix(A._entries, self._entries, row, col, highr, highc)
diff --git a/src/sage/matrix/matrix_integer_dense.pyx b/src/sage/matrix/matrix_integer_dense.pyx
index c0e0a1fff44..9ea2335b297 100644
--- a/src/sage/matrix/matrix_integer_dense.pyx
+++ b/src/sage/matrix/matrix_integer_dense.pyx
@@ -868,7 +868,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
[ 9 11 13]
[ 9 11 13]
"""
- cdef Matrix_integer_dense M = self._new(self._nrows,self._ncols)
+ cdef Matrix_integer_dense M = self._new(self._nrows, self._ncols)
sig_on()
fmpz_mat_add(M._matrix,self._matrix,( right)._matrix)
@@ -888,7 +888,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
[-2 0 2]
[ 4 6 8]
"""
- cdef Matrix_integer_dense M = self._new(self._nrows,self._ncols)
+ cdef Matrix_integer_dense M = self._new(self._nrows, self._ncols)
sig_on()
fmpz_mat_sub(M._matrix,self._matrix,( right)._matrix)
@@ -4164,7 +4164,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
raise ArithmeticError("non-invertible matrix")
return A
- def _solve_right_nonsingular_square(self, B, check_rank=True, algorithm = 'iml'):
+ def _solve_right_nonsingular_square(self, B, check_rank=True, algorithm='iml'):
r"""
If ``self`` is a matrix `A` of full rank, then this function
returns a vector or matrix `X` such that `A X = B`.
@@ -4606,7 +4606,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
M,d = self.transpose()._solve_flint(B.transpose(), right=True)
return M.transpose(),d
- def _rational_echelon_via_solve(self, solver = 'iml'):
+ def _rational_echelon_via_solve(self, solver='iml'):
r"""
Compute information that gives the reduced row echelon form (over
QQ!) of a matrix with integer entries.
@@ -5029,7 +5029,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
t = verbose('hermite mod %s' % D, caller_name='matrix_integer_dense')
if self._nrows != self._ncols:
raise ValueError("matrix is not square")
- cdef Matrix_integer_dense res = self._new(self._nrows,self._ncols)
+ cdef Matrix_integer_dense res = self._new(self._nrows, self._ncols)
self._hnf_modn(res, D)
verbose('finished hnf mod', t, caller_name='matrix_integer_dense')
return res
diff --git a/src/sage/matrix/matrix_integer_dense_saturation.py b/src/sage/matrix/matrix_integer_dense_saturation.py
index b537b041e08..fdd812597f5 100644
--- a/src/sage/matrix/matrix_integer_dense_saturation.py
+++ b/src/sage/matrix/matrix_integer_dense_saturation.py
@@ -68,6 +68,7 @@ def p_saturation(A, p, proof=True):
H = H.stack(C).hermite_form(include_zero_rows=False, proof=proof)
verbose("done saturating", tm)
+
def random_sublist_of_size(k, n):
"""
INPUT:
@@ -181,6 +182,7 @@ def solve_system_with_difficult_last_row(B, A):
verbose("Done getting linear combinations.", tm)
return X
+
def saturation(A, proof=True, p=0, max_dets=5):
r"""
Compute a saturation matrix of `A`.
@@ -283,6 +285,7 @@ def saturation(A, proof=True, p=0, max_dets=5):
C = solve_system_with_difficult_last_row(B, A)
return C.change_ring(ZZ)._insert_zero_columns(zero_cols)
+
def index_in_saturation(A, proof=True):
r"""
The index of A in its saturation.
diff --git a/src/sage/matrix/matrix_modn_dense_template.pxi b/src/sage/matrix/matrix_modn_dense_template.pxi
index 36830da0549..177cebffb38 100644
--- a/src/sage/matrix/matrix_modn_dense_template.pxi
+++ b/src/sage/matrix/matrix_modn_dense_template.pxi
@@ -431,7 +431,7 @@ cpdef __matrix_from_rows_of_matrices(X):
T = X[0]
m = T._nrows * T._ncols
- cdef Matrix_modn_dense_template A = T.new_matrix(nrows = n, ncols = m)
+ cdef Matrix_modn_dense_template A = T.new_matrix(nrows=n, ncols=m)
for i from 0 <= i < n:
T = X[i]
@@ -2807,7 +2807,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
cdef Py_ssize_t nrows = self._nrows
cdef Py_ssize_t ncols = self._ncols
- cdef Matrix_modn_dense_template M = self.new_matrix(nrows = ncols, ncols = nrows)
+ cdef Matrix_modn_dense_template M = self.new_matrix(nrows=ncols, ncols=nrows)
cdef Py_ssize_t i,j
for i from 0 <= i < ncols:
diff --git a/src/sage/matrix/matrix_polynomial_dense.pyx b/src/sage/matrix/matrix_polynomial_dense.pyx
index 5b3c56ae573..99979a37ed8 100644
--- a/src/sage/matrix/matrix_polynomial_dense.pyx
+++ b/src/sage/matrix/matrix_polynomial_dense.pyx
@@ -291,7 +291,7 @@ cdef class Matrix_polynomial_dense(Matrix_generic_dense):
return all([self[i,j].is_constant()
for j in range(self.ncols()) for i in range(self.nrows())])
- def coefficient_matrix(self,d,row_wise=True):
+ def coefficient_matrix(self, d, row_wise=True):
r"""
Return the constant matrix which is obtained from this matrix by taking
the coefficient of its entries with degree specified by `d`.
@@ -3106,7 +3106,7 @@ cdef class Matrix_polynomial_dense(Matrix_generic_dense):
If the option ``row_wise`` is set to ``False``, the same operation is
performed, but with everything considered column-wise: column space of
`B`, `i` th column of `R` and `A`, column-wise `s`-leading positions
- and `s`-Popov form, and submatrices `R_{J,*}` and `P_{J,*}`.
+ and `s`-Popov form, and submatrices `R_{J, *}` and `P_{J, *}`.
The operation above can be seen as a matrix generalization of division
with remainder for univariate polynomials. If the option
diff --git a/src/sage/matrix/matrix_rational_dense.pyx b/src/sage/matrix/matrix_rational_dense.pyx
index 533f6b55c67..40c63470617 100644
--- a/src/sage/matrix/matrix_rational_dense.pyx
+++ b/src/sage/matrix/matrix_rational_dense.pyx
@@ -2776,7 +2776,7 @@ cdef class Matrix_rational_dense(Matrix_dense):
We verify that 0 rows or columns works::
- sage: x = matrix(QQ,2,0); y= matrix(QQ,0,2); x*y
+ sage: x = matrix(QQ,2,0); y = matrix(QQ,0,2); x*y
[0 0]
[0 0]
sage: matrix(ZZ, 0, 0) * matrix(QQ, 0, 5)
diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py
index 267a818c433..2ba59292d54 100644
--- a/src/sage/matrix/matrix_space.py
+++ b/src/sage/matrix/matrix_space.py
@@ -2664,6 +2664,7 @@ def _from_dict(self, d, coerce=True, remove_zeros=True):
"""
return self.element_class(self, d, coerce=coerce)
+
def dict_to_list(entries, nrows, ncols):
r"""
Given a dictionary of coordinate tuples, return the list given by
diff --git a/src/sage/matrix/matrix_sparse.pyx b/src/sage/matrix/matrix_sparse.pyx
index 95b8969e0aa..92a2d18d846 100644
--- a/src/sage/matrix/matrix_sparse.pyx
+++ b/src/sage/matrix/matrix_sparse.pyx
@@ -927,7 +927,7 @@ cdef class Matrix_sparse(matrix.Matrix):
ncols = PyList_GET_SIZE(columns)
nrows = PyList_GET_SIZE(rows)
- cdef Matrix_sparse A = self.new_matrix(nrows = nrows, ncols = ncols)
+ cdef Matrix_sparse A = self.new_matrix(nrows=nrows, ncols=ncols)
tmp = [el for el in columns if 0 <= el < self._ncols]
columns = tmp
diff --git a/src/sage/matrix/meson.build b/src/sage/matrix/meson.build
index c0841d77f34..932ac4c40c2 100644
--- a/src/sage/matrix/meson.build
+++ b/src/sage/matrix/meson.build
@@ -96,31 +96,17 @@ extension_data = {
}
foreach name, pyx : extension_data
- dependencies = [
- py_dep,
- blas,
- cypari2,
- cysignals,
- fflas,
- flint,
- gd,
- givaro,
- gmp,
- gmpxx,
- iml,
- linbox,
- m,
- m4ri,
- m4rie,
- mpfi,
- mpfr,
- ntl,
- pari,
- png,
- zlib,
- ]
+ dependencies = [py_dep, cysignals, gmp]
if name == 'matrix_gfpn_dense'
dependencies += [mtx, meataxe]
+ elif name == 'matrix_gap'
+ dependencies += [gap]
+ elif name == 'misc_mpfr'
+ dependencies += [mpfr]
+ elif name == 'matrix_complex_ball_dense'
+ dependencies += [mpfi]
+ elif name == 'misc_flint' or name == 'matrix_rational_sparse'
+ dependencies += [flint]
endif
py.extension_module(
diff --git a/src/sage/matrix/misc.pyx b/src/sage/matrix/misc.pyx
index 17277336e3c..5f8f834b33f 100644
--- a/src/sage/matrix/misc.pyx
+++ b/src/sage/matrix/misc.pyx
@@ -209,7 +209,7 @@ def matrix_rational_echelon_form_multimodular(Matrix self, height_guess=None, pr
from sage.structure.proof.proof import get_flag
proof = get_flag(proof, "linear_algebra")
- verbose("Multimodular echelon algorithm on %s x %s matrix"%(self._nrows, self._ncols), caller_name="multimod echelon")
+ verbose("Multimodular echelon algorithm on %s x %s matrix" % (self._nrows, self._ncols), caller_name="multimod echelon")
cdef Matrix E
if self._nrows == 0 or self._ncols == 0:
return self, ()
@@ -219,7 +219,7 @@ def matrix_rational_echelon_form_multimodular(Matrix self, height_guess=None, pr
height = self.height()
if height_guess is None:
height_guess = 10000000*(height+100)
- tm = verbose("height_guess = %s"%height_guess, level=2, caller_name="multimod echelon")
+ tm = verbose("height_guess = %s" % height_guess, level=2, caller_name="multimod echelon")
if proof:
M = self._ncols * height_guess * height + 1
@@ -244,7 +244,7 @@ def matrix_rational_echelon_form_multimodular(Matrix self, height_guess=None, pr
problem = problem + 1
if problem > 50:
verbose("echelon multi-modular possibly not converging?", caller_name="multimod echelon")
- t = verbose("echelon modulo p=%s (%.2f%% done)"%(
+ t = verbose("echelon modulo p=%s (%.2f%% done)" % (
p, 100*float(len(str(prod))) / len(str(M))), level=2, caller_name="multimod echelon")
# We use denoms=False, since we made self integral by calling clear_denom above.
@@ -281,10 +281,10 @@ def matrix_rational_echelon_form_multimodular(Matrix self, height_guess=None, pr
if cmp_pivots(best_pivots, X[i].pivots()) <= 0:
p = X[i].base_ring().order()
if p not in lifts:
- t0 = verbose("Lifting a good matrix", level=2, caller_name = "multimod echelon")
+ t0 = verbose("Lifting a good matrix", level=2, caller_name="multimod echelon")
lift = X[i].lift()
lifts[p] = (lift, p)
- verbose("Finished lift", level=2, caller_name= "multimod echelon", t=t0)
+ verbose("Finished lift", level=2, caller_name="multimod echelon", t=t0)
Y.append(lifts[p])
prod = prod * X[i].base_ring().order()
verbose("finished comparing pivots", level=2, t=t, caller_name="multimod echelon")
diff --git a/src/sage/matrix/special.py b/src/sage/matrix/special.py
index b81703b6fe7..dbb0214994e 100644
--- a/src/sage/matrix/special.py
+++ b/src/sage/matrix/special.py
@@ -3050,7 +3050,7 @@ def random_unimodular_matrix(parent, upper_bound=None, max_tries=100):
@matrix_method
-def random_diagonalizable_matrix(parent,eigenvalues=None,dimensions=None):
+def random_diagonalizable_matrix(parent, eigenvalues=None, dimensions=None):
"""
Create a random matrix that diagonalizes nicely.
diff --git a/src/sage/matrix/strassen.pyx b/src/sage/matrix/strassen.pyx
index 978773e3a27..7298dddabd3 100644
--- a/src/sage/matrix/strassen.pyx
+++ b/src/sage/matrix/strassen.pyx
@@ -20,7 +20,7 @@ from sage.matrix.matrix_window cimport MatrixWindow
from cysignals.signals cimport sig_on, sig_off
-def strassen_window_multiply(C, A,B, cutoff):
+def strassen_window_multiply(C, A, B, cutoff):
"""
Multiply the submatrices specified by A and B, places result in
C. Assumes that A and B have compatible dimensions to be
diff --git a/src/sage/matroids/basis_exchange_matroid.pxd b/src/sage/matroids/basis_exchange_matroid.pxd
index fdcfd82172f..de57ed845a9 100644
--- a/src/sage/matroids/basis_exchange_matroid.pxd
+++ b/src/sage/matroids/basis_exchange_matroid.pxd
@@ -90,6 +90,6 @@ cdef class BasisExchangeMatroid(Matroid):
cpdef _is_isomorphism(self, other, morphism)
cdef bint __is_isomorphism(self, BasisExchangeMatroid other, morphism) noexcept
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
cdef bint nxksrd(bitset_s *b, long n, long k, bint succ) noexcept
diff --git a/src/sage/matroids/basis_exchange_matroid.pyx b/src/sage/matroids/basis_exchange_matroid.pyx
index 8d0dbf1c834..7cf056c4292 100644
--- a/src/sage/matroids/basis_exchange_matroid.pyx
+++ b/src/sage/matroids/basis_exchange_matroid.pyx
@@ -2231,7 +2231,7 @@ cdef class BasisExchangeMatroid(Matroid):
return self._characteristic_setsystem()._isomorphism(other._characteristic_setsystem(), PS, PO) is not None
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data obey the matroid axioms.
@@ -2242,7 +2242,11 @@ cdef class BasisExchangeMatroid(Matroid):
* if `X` and `Y` are in `B`, and `x` is in `X - Y`, then there is a
`y` in `Y - X` such that `(X - x) + y` is again a member of `B`.
- OUTPUT: boolean
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
EXAMPLES::
@@ -2251,8 +2255,8 @@ cdef class BasisExchangeMatroid(Matroid):
sage: M.is_valid()
True
sage: M = Matroid(groundset='abcd', bases=['ab', 'cd'])
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False, {'error': 'exchange axiom failed'})
TESTS:
@@ -2278,7 +2282,7 @@ cdef class BasisExchangeMatroid(Matroid):
if not bitset_eq(self._current_basis, BB._subsets[pointerY]):
# We failed to set the current basis to Y through basis exchanges.
# Therefore, the exchange axioms are violated!
- return False
+ return False if not certificate else (False, {"error": "exchange axiom failed"})
bitset_difference(self._input, BB._subsets[pointerX], BB._subsets[pointerY])
bitset_difference(self._input2, BB._subsets[pointerY], BB._subsets[pointerX])
x = bitset_first(self._input)
@@ -2292,11 +2296,11 @@ cdef class BasisExchangeMatroid(Matroid):
else:
y = bitset_next(self._input2, y + 1)
if not foundpair:
- return False
+ return False if not certificate else (False, {"error": "exchange axiom failed"})
x = bitset_next(self._input, x + 1)
pointerY += 1
pointerX += 1
- return True
+ return True if not certificate else (True, {})
cdef bint nxksrd(bitset_s* b, long n, long k, bint succ) noexcept:
"""
diff --git a/src/sage/matroids/chow_ring.py b/src/sage/matroids/chow_ring.py
new file mode 100644
index 00000000000..173c8db7f84
--- /dev/null
+++ b/src/sage/matroids/chow_ring.py
@@ -0,0 +1,339 @@
+r"""
+Chow rings of matroids
+
+AUTHORS:
+
+- Shriya M
+"""
+
+from sage.matroids.chow_ring_ideal import ChowRingIdeal_nonaug, AugmentedChowRingIdeal_fy, AugmentedChowRingIdeal_atom_free
+from sage.rings.quotient_ring import QuotientRing_generic
+from sage.categories.graded_algebras_with_basis import GradedAlgebrasWithBasis
+from sage.categories.commutative_rings import CommutativeRings
+
+class ChowRing(QuotientRing_generic):
+ r"""
+ The Chow ring of a matroid.
+
+ The *Chow ring of the matroid* `M` is defined as the quotient ring
+
+ .. MATH::
+
+ A^*(M)_R := R[x_{F_1}, \ldots, x_{F_k}] / (I_M + J_M),
+
+ where `(I_M + J_M)` is the :class:`Chow ring ideal
+ ` of matroid `M`.
+
+ The *augmented Chow ring of matroid* `M` has two different presentations
+ as quotient rings:
+
+ The *Feitchner-Yuzvinsky presentation* is the quotient ring
+
+ .. MATH::
+
+ A(M)_R := R[y_{e_1}, \ldots, y_{e_n}, x_{F_1}, \ldots, x_{F_k}] / I_{FY}(M),
+
+ where `I_{FY}(M)` is the :class:`Feitchner-Yuzvinsky augmented Chow ring
+ ideal `
+ of matroid `M`.
+
+ The *atom-free presentation* is the quotient ring
+
+ .. MATH::
+
+ A(M)_R := R[x_{F_1}, \ldots, x_{F_k}] / I_{af}(M),
+
+ where `I_{af}(M)` is the :class:`atom-free augmented Chow ring ideal
+ `
+ of matroid `M`.
+
+ .. SEEALSO::
+
+ :mod:`sage.matroids.chow_ring_ideal`
+
+ INPUT:
+
+ - ``M`` -- matroid
+ - ``R`` -- commutative ring
+ - ``augmented`` -- boolean; when ``True``, this is the augmented
+ Chow ring and if ``False``, this is the non-augmented Chow ring
+ - ``presentation`` -- string (default: ``None``); one of the following
+ (ignored if ``augmented=False``)
+
+ * ``"fy"`` - the Feitchner-Yuzvinsky presentation
+ * ``"atom-free"`` - the atom-free presentation
+
+ REFERENCES:
+
+ - [FY2004]_
+ - [AHK2015]_
+
+ EXAMPLES::
+
+ sage: M1 = matroids.catalog.P8pp()
+ sage: ch = M1.chow_ring(QQ, False)
+ sage: ch
+ Chow ring of P8'': Matroid of rank 4 on 8 elements with 8 nonspanning circuits
+ over Rational Field
+ """
+ def __init__(self, R, M, augmented, presentation=None):
+ r"""
+ Initialize ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, False)
+ sage: TestSuite(ch).run()
+ """
+ self._matroid = M
+ self._augmented = augmented
+ self._presentation = presentation
+ if augmented is True:
+ if presentation == 'fy':
+ self._ideal = AugmentedChowRingIdeal_fy(M, R)
+ elif presentation == 'atom-free':
+ self._ideal = AugmentedChowRingIdeal_atom_free(M, R)
+ else:
+ self._ideal = ChowRingIdeal_nonaug(M, R)
+ C = CommutativeRings().Quotients() & GradedAlgebrasWithBasis(R).FiniteDimensional()
+ QuotientRing_generic.__init__(self, R=self._ideal.ring(),
+ I=self._ideal,
+ names=self._ideal.ring().variable_names(),
+ category=C)
+
+ def _repr_(self):
+ r"""
+ EXAMPLES::
+
+ sage: M1 = matroids.catalog.Fano()
+ sage: ch = M1.chow_ring(QQ, False)
+ sage: ch
+ Chow ring of Fano: Binary matroid of rank 3 on 7 elements, type (3, 0)
+ over Rational Field
+ """
+ output = "Chow ring of {}".format(self._matroid)
+ if self._augmented is True:
+ output = "Augmented " + output
+ if self._presentation == 'fy':
+ output += " in Feitchner-Yuzvinsky presentation"
+ elif self._presentation == 'atom-free':
+ output += " in atom-free presentation"
+ return output + " over " + repr(self.base_ring())
+
+ def _latex_(self):
+ r"""
+ Return the LaTeX output of the polynomial ring and Chow ring ideal.
+
+ EXAMPLES::
+
+ sage: M1 = matroids.Uniform(2,5)
+ sage: ch = M1.chow_ring(QQ, False)
+ sage: ch._latex_()
+ 'A(\\begin{array}{l}\n\\text{\\texttt{U(2,{ }5):{ }Matroid{ }of{ }rank{ }2{ }on{ }5{ }elements{ }with{ }circuit{-}closures}}\\\\\n\\text{\\texttt{{\\char`\\{}2:{ }{\\char`\\{}{\\char`\\{}0,{ }1,{ }2,{ }3,{ }4{\\char`\\}}{\\char`\\}}{\\char`\\}}}}\n\\end{array})_{\\Bold{Q}}'
+ """
+ from sage.misc.latex import latex
+ base = "A({})_{{{}}}"
+ if self._augmented:
+ base += "^*"
+ return base.format(latex(self._matroid), latex(self.base_ring()))
+
+ def matroid(self):
+ r"""
+ Return the matroid of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Uniform(3,6).chow_ring(QQ, True, 'fy')
+ sage: ch.matroid()
+ U(3, 6): Matroid of rank 3 on 6 elements with circuit-closures
+ {3: {{0, 1, 2, 3, 4, 5}}}
+ """
+ return self._matroid
+
+ def _coerce_map_from_base_ring(self):
+ r"""
+ Disable the coercion from the base ring from the category.
+
+ TESTS::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, False)
+ sage: ch._coerce_map_from_base_ring() is None
+ True
+ """
+ return None # don't need anything special
+
+ def basis(self):
+ r"""
+ Return the monomial basis of the given Chow ring.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Uniform(3, 6).chow_ring(QQ, True, 'fy')
+ sage: ch.basis()
+ Family (1, B1, B1*B012345, B0, B0*B012345, B01, B01^2, B2,
+ B2*B012345, B02, B02^2, B12, B12^2, B3, B3*B012345, B03, B03^2,
+ B13, B13^2, B23, B23^2, B4, B4*B012345, B04, B04^2, B14, B14^2,
+ B24, B24^2, B34, B34^2, B5, B5*B012345, B05, B05^2, B15, B15^2,
+ B25, B25^2, B35, B35^2, B45, B45^2, B012345, B012345^2, B012345^3)
+ sage: set(ch.defining_ideal().normal_basis()) == set(ch.basis())
+ True
+ sage: ch = matroids.catalog.Fano().chow_ring(QQ, False)
+ sage: ch.basis()
+ Family (1, Abcd, Aace, Aabf, Adef, Aadg, Abeg, Acfg, Aabcdefg,
+ Aabcdefg^2)
+ sage: set(ch.defining_ideal().normal_basis()) == set(ch.basis())
+ True
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free')
+ sage: ch.basis()
+ Family (1, A0, A0*A012345, A2, A2*A012345, A3, A3*A012345, A23,
+ A23^2, A1, A1*A012345, A013, A013^2, A4, A4*A012345, A04, A04^2,
+ A124, A124^2, A5, A5*A012345, A025, A025^2, A15, A15^2, A345,
+ A345^2, A012345, A012345^2, A012345^3)
+ sage: set(ch.defining_ideal().normal_basis()) == set(ch.basis())
+ True
+ """
+ from sage.sets.family import Family
+ monomial_basis = self._ideal.normal_basis()
+ return Family([self.element_class(self, mon, reduce=False) for mon in monomial_basis])
+
+ class Element(QuotientRing_generic.Element):
+ def to_vector(self, order=None):
+ r"""
+ Return ``self`` as a (dense) free module vector.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Uniform(3, 6).chow_ring(QQ, False)
+ sage: v = ch.an_element(); v
+ -A01 - A02 - A03 - A04 - A05 - A012345
+ sage: v.to_vector()
+ (0, -1, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0)
+ """
+ P = self.parent()
+ B = P.basis()
+ FM = P._dense_free_module()
+ f = self.lift()
+ return FM([f.monomial_coefficient(b.lift()) for b in B])
+
+ _vector_ = to_vector
+
+ def monomial_coefficients(self, copy=None):
+ r"""
+ Return the monomial coefficients of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.catalog.NonFano().chow_ring(QQ, True, 'atom-free')
+ sage: v = ch.an_element(); v
+ Aa
+ sage: v.monomial_coefficients()
+ {0: 0, 1: 1, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0,
+ 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0,
+ 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0,
+ 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0,
+ 34: 0, 35: 0}
+ """
+ B = self.parent().basis()
+ f = self.lift()
+ return {i: f.monomial_coefficient(b.lift()) for i, b in enumerate(B)}
+
+ def degree(self):
+ r"""
+ Return the degree of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Uniform(3, 6).chow_ring(QQ, False)
+ sage: for b in ch.basis():
+ ....: print(b, b.degree())
+ 1 0
+ A01 1
+ A02 1
+ A12 1
+ A03 1
+ A13 1
+ A23 1
+ A04 1
+ A14 1
+ A24 1
+ A34 1
+ A05 1
+ A15 1
+ A25 1
+ A35 1
+ A45 1
+ A012345 1
+ A012345^2 2
+ sage: v = sum(ch.basis())
+ sage: v.degree()
+ 2
+ """
+ return self.lift().degree()
+
+ def homogeneous_degree(self):
+ r"""
+ Return the (homogeneous) degree of ``self`` if homogeneous
+ otherwise raise an error.
+
+ EXAMPLES::
+
+ sage: ch = matroids.catalog.Fano().chow_ring(QQ, True, 'fy')
+ sage: for b in ch.basis():
+ ....: print(b, b.homogeneous_degree())
+ 1 0
+ Ba 1
+ Ba*Babcdefg 2
+ Bb 1
+ Bb*Babcdefg 2
+ Bc 1
+ Bc*Babcdefg 2
+ Bd 1
+ Bd*Babcdefg 2
+ Bbcd 1
+ Bbcd^2 2
+ Be 1
+ Be*Babcdefg 2
+ Bace 1
+ Bace^2 2
+ Bf 1
+ Bf*Babcdefg 2
+ Babf 1
+ Babf^2 2
+ Bdef 1
+ Bdef^2 2
+ Bg 1
+ Bg*Babcdefg 2
+ Badg 1
+ Badg^2 2
+ Bbeg 1
+ Bbeg^2 2
+ Bcfg 1
+ Bcfg^2 2
+ Babcdefg 1
+ Babcdefg^2 2
+ Babcdefg^3 3
+ sage: v = sum(ch.basis()); v
+ Babcdefg^3 + Babf^2 + Bace^2 + Badg^2 + Bbcd^2 + Bbeg^2 +
+ Bcfg^2 + Bdef^2 + Ba*Babcdefg + Bb*Babcdefg + Bc*Babcdefg +
+ Bd*Babcdefg + Be*Babcdefg + Bf*Babcdefg + Bg*Babcdefg +
+ Babcdefg^2 + Ba + Bb + Bc + Bd + Be + Bf + Bg + Babf + Bace +
+ Badg + Bbcd + Bbeg + Bcfg + Bdef + Babcdefg + 1
+ sage: v.homogeneous_degree()
+ Traceback (most recent call last):
+ ...
+ ValueError: element is not homogeneous
+
+ TESTS::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free')
+ sage: ch.zero().homogeneous_degree()
+ Traceback (most recent call last):
+ ...
+ ValueError: the zero element does not have a well-defined degree
+ """
+ if not self:
+ raise ValueError("the zero element does not have a well-defined degree")
+ f = self.lift()
+ if not f.is_homogeneous():
+ raise ValueError("element is not homogeneous")
+ return f.degree()
\ No newline at end of file
diff --git a/src/sage/matroids/chow_ring_ideal.py b/src/sage/matroids/chow_ring_ideal.py
new file mode 100644
index 00000000000..d0ac04a23ee
--- /dev/null
+++ b/src/sage/matroids/chow_ring_ideal.py
@@ -0,0 +1,800 @@
+r"""
+Chow ring ideals of matroids
+
+AUTHORS:
+
+- Shriya M
+"""
+
+from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal
+from sage.matroids.utilities import cmp_elements_key
+from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
+from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence
+from sage.combinat.posets.posets import Poset
+from itertools import product
+
+class ChowRingIdeal(MPolynomialIdeal):
+ def matroid(self):
+ r"""
+ Return the matroid of the given Chow ring ideal.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Uniform(3,6).chow_ring(QQ, False)
+ sage: ch.defining_ideal().matroid()
+ U(3, 6): Matroid of rank 3 on 6 elements with circuit-closures
+ {3: {{0, 1, 2, 3, 4, 5}}}
+ """
+ return self._matroid
+
+ def _lattice_flats(self):
+ r"""
+ Return the ranks and chains of lattice of flats of the matroid.
+
+ EXAMPLES::
+
+ sage: ch = matroids.catalog.NonFano().chow_ring(QQ, True, 'atom-free')
+ sage: ch.defining_ideal()._lattice_flats()
+ ({frozenset({'a'}): 1, frozenset({'b'}): 1, frozenset({'c'}): 1,
+ frozenset({'d'}): 1, frozenset({'e'}): 1, frozenset({'f'}): 1,
+ frozenset({'g'}): 1, frozenset({'d', 'e'}): 2,
+ frozenset({'d', 'f'}): 2, frozenset({'e', 'f'}): 2,
+ frozenset({'a', 'b', 'f'}): 2, frozenset({'a', 'c', 'e'}): 2,
+ frozenset({'a', 'd', 'g'}): 2, frozenset({'b', 'c', 'd'}): 2,
+ frozenset({'b', 'e', 'g'}): 2, frozenset({'c', 'f', 'g'}): 2,
+ frozenset({'a', 'b', 'c', 'd', 'e', 'f', 'g'}): 3},
+ Set of chains of Finite poset containing 17 elements)
+ """
+ F = self._matroid.lattice_of_flats()
+ H = F.hasse_diagram()
+ H.delete_vertex(self._matroid.flats(0)[0]) # remove the empty flat
+ lattice_flats = Poset(H)
+ flats = list(lattice_flats)
+ flats.sort(key=lambda X: (len(X), sorted(X)))
+ ranks = {F: self._matroid.rank(F) for F in flats}
+ chains = lattice_flats.chains() #Only chains
+ return (ranks, chains)
+
+class ChowRingIdeal_nonaug(ChowRingIdeal):
+ r"""
+ The Chow ring ideal of a matroid `M`.
+
+ The *Chow ring ideal* for a matroid `M` is defined as the ideal
+ `(I_M + J_M)` of the polynomial ring
+
+ .. MATH::
+
+ R[x_{F_1}, \ldots, x_{F_k}],
+
+ where
+
+ - `F_1, \ldots, F_k` are the non-empty flats of `M`,
+ - `I_M` is the Stanley-Reisner ideal, i.e., it is generated
+ by products `x_{F_1}, \ldots, x_{F_t}` for subsets `\{F_1, \ldots, F_t\}`
+ of flats that are not chains, and
+ - `J_M` is the ideal generated by all linear forms
+
+ .. MATH::
+
+ \sum_{a \in F} x_F
+
+ for all atoms `a` in the lattice of flats.
+
+ INPUT:
+
+ - ``M`` -- matroid
+ - ``R`` -- commutative ring
+
+ REFERENCES:
+
+ - [ANR2023]_
+
+ EXAMPLES:
+
+ Chow ring ideal of uniform matroid of rank 3 on 6 elements::
+
+ sage: ch = matroids.Uniform(3,6).chow_ring(QQ, False)
+ sage: ch.defining_ideal()
+ Chow ring ideal of U(3, 6): Matroid of rank 3 on 6 elements with
+ circuit-closures {3: {{0, 1, 2, 3, 4, 5}}} - non augmented
+ sage: ch = matroids.catalog.Fano().chow_ring(QQ, False)
+ sage: ch.defining_ideal()
+ Chow ring ideal of Fano: Binary matroid of rank 3 on 7 elements,
+ type (3, 0) - non augmented
+ """
+ def __init__(self, M, R):
+ r"""
+ Initialize ``self``.
+
+ EXAMPLES::
+
+ sage: I = matroids.catalog.Fano().chow_ring(QQ, False).defining_ideal()
+ sage: TestSuite(I).run(skip="_test_category")
+ """
+ self._matroid = M
+ flats = [X for i in range(1, self._matroid.rank() + 1)
+ for X in self._matroid.flats(i)]
+ names = ['A{}'.format(''.join(str(x) for x in sorted(F, key=cmp_elements_key))) for F in flats]
+ try:
+ poly_ring = PolynomialRing(R, names) #self.ring
+ except ValueError: # variables are not proper names
+ poly_ring = PolynomialRing(R, 'A', len(flats))
+ gens = poly_ring.gens()
+ self._flats_generator = dict(zip(flats, gens))
+ MPolynomialIdeal.__init__(self, poly_ring, self._gens_constructor(poly_ring))
+
+ def _gens_constructor(self, poly_ring):
+ r"""
+ Return the generators of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.catalog.NonFano().chow_ring(QQ, False)
+ sage: sorted(ch.defining_ideal()._gens_constructor(ch.defining_ideal().ring()))
+ [Ag + Aadg + Abeg + Acfg + Aabcdefg,
+ Af + Aabf + Acfg + Adf + Aef + Aabcdefg,
+ Ae + Aace + Abeg + Ade + Aef + Aabcdefg,
+ Ad + Aadg + Abcd + Ade + Adf + Aabcdefg,
+ Ac + Aace + Abcd + Acfg + Aabcdefg,
+ Ab + Aabf + Abcd + Abeg + Aabcdefg,
+ Aa + Aabf + Aace + Aadg + Aabcdefg,
+ Adf*Aef, Ade*Aef, Acfg*Aef, Abeg*Aef, Abcd*Aef, Aadg*Aef,
+ Aace*Aef, Aabf*Aef, Ag*Aef, Ad*Aef, Ac*Aef, Ab*Aef, Aa*Aef,
+ Ade*Adf, Acfg*Adf, Abeg*Adf, Abcd*Adf, Aadg*Adf, Aace*Adf,
+ Aabf*Adf, Ag*Adf, Ae*Adf, Ac*Adf, Ab*Adf, Aa*Adf, Acfg*Ade,
+ Abeg*Ade, Abcd*Ade, Aadg*Ade, Aace*Ade, Aabf*Ade, Ag*Ade, Af*Ade,
+ Ac*Ade, Ab*Ade, Aa*Ade, Abeg*Acfg, Abcd*Acfg, Aadg*Acfg,
+ Aace*Acfg, Aabf*Acfg, Ae*Acfg, Ad*Acfg, Ab*Acfg, Aa*Acfg,
+ Abcd*Abeg, Aadg*Abeg, Aace*Abeg, Aabf*Abeg, Af*Abeg, Ad*Abeg,
+ Ac*Abeg, Aa*Abeg, Aadg*Abcd, Aace*Abcd, Aabf*Abcd, Ag*Abcd,
+ Af*Abcd, Ae*Abcd, Aa*Abcd, Aace*Aadg, Aabf*Aadg, Af*Aadg, Ae*Aadg,
+ Ac*Aadg, Ab*Aadg, Aabf*Aace, Ag*Aace, Af*Aace, Ad*Aace, Ab*Aace,
+ Ag*Aabf, Ae*Aabf, Ad*Aabf, Ac*Aabf, Af*Ag, Ae*Ag, Ad*Ag, Ac*Ag,
+ Ab*Ag, Aa*Ag, Ae*Af, Ad*Af, Ac*Af, Ab*Af, Aa*Af, Ad*Ae, Ac*Ae,
+ Ab*Ae, Aa*Ae, Ac*Ad, Ab*Ad, Aa*Ad, Ab*Ac, Aa*Ac, Aa*Ab]
+ """
+ flats = list(self._flats_generator)
+ lattice_flats = Poset((flats, lambda x, y: x <= y))
+ I = []
+ subsets = lattice_flats.antichains().elements_of_depth_iterator(2)
+ for subset in subsets:
+ term = poly_ring.one()
+ for el in subset:
+ term *= self._flats_generator[el]
+ I.append(term) # Stanley-Reisner Ideal
+ atoms = self._matroid.lattice_of_flats().atoms()
+ atoms_gen = {a: poly_ring.zero() for a in atoms}
+ for F in flats:
+ for a in atoms:
+ if a.issubset(F):
+ atoms_gen[a] += self._flats_generator[F]
+ J = list(atoms_gen.values()) # Linear generators
+ return I + J
+
+ def _repr_(self):
+ r"""
+ Return a string representation of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.catalog.Fano().chow_ring(QQ, False)
+ sage: ch.defining_ideal()
+ Chow ring ideal of Fano: Binary matroid of rank 3 on 7 elements,
+ type (3, 0) - non augmented
+ """
+ return "Chow ring ideal of {} - non augmented".format(self._matroid)
+
+ def _latex_(self):
+ r"""
+ Return a LaTeX representation of ``self``.
+
+ EXAMPLES::
+
+ sage: M1 = Matroid(groundset='abcd', bases=['ab','ad', 'bc'])
+ sage: ch = M1.chow_ring(QQ, False)
+ sage: ch.defining_ideal()._latex_()
+ '(I_{\\text{\\texttt{Matroid{ }of{ }rank{ }2{ }on{ }4{ }elements{ }with{ }3{ }bases}}} + J_{\\text{\\texttt{Matroid{ }of{ }rank{ }2{ }on{ }4{ }elements{ }with{ }3{ }bases}}}'
+ """
+ from sage.misc.latex import latex
+ return '(I_{{{M}}} + J_{{{M}}}'.format(M=latex(self._matroid))
+
+ def groebner_basis(self, algorithm='', *args, **kwargs):
+ r"""
+ Return a Groebner basis of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = Matroid(groundset='abc', bases=['ab', 'ac']).chow_ring(QQ, False)
+ sage: ch.defining_ideal().groebner_basis()
+ [Aa*Abc, Aa + Aabc, Abc + Aabc, Aa*Aabc, Abc*Aabc, Aabc^2]
+ sage: ch.defining_ideal().groebner_basis().is_groebner()
+ True
+ sage: ch.defining_ideal().hilbert_series() == ch.defining_ideal().gens().ideal().hilbert_series()
+ True
+
+ Another example would be the Groebner basis of the Chow ring ideal of
+ the matroid of the length 3 cycle graph::
+
+ sage: ch = Matroid(graphs.CycleGraph(3)).chow_ring(QQ, False)
+ sage: ch.defining_ideal().groebner_basis()
+ [A0*A1, A0*A2, A1*A2, A0 + A3, A1 + A3, A2 + A3, A0*A3, A1*A3, A2*A3, A3^2]
+ sage: ch.defining_ideal().groebner_basis().is_groebner()
+ True
+ sage: ch.defining_ideal().hilbert_series() == ch.defining_ideal().gens().ideal().hilbert_series()
+ True
+ """
+ if algorithm == '':
+ algorithm = 'constructed'
+ if algorithm != 'constructed':
+ return super().groebner_basis(algorithm=algorithm, *args, **kwargs)
+ flats = sorted(list(self._flats_generator), key=len)
+ ranks = {F: self._matroid.rank(F) for F in flats}
+ gb = []
+ R = self.ring()
+ flats_gen = self._flats_generator
+ lattice_flats = Poset((flats, lambda x, y: x <= y))
+ antichains = lattice_flats.antichains().elements_of_depth_iterator(2)
+ for subset in antichains: # Taking antichains of size 2
+ term = R.one()
+ for x in subset:
+ term *= flats_gen[x]
+ gb.append(term)
+ for F in flats: # Reduced groebner basis by computing the sum first and then the product
+ term = R.zero()
+ for G in lattice_flats.order_filter([F]):
+ term += flats_gen[G]
+ for G in lattice_flats.order_ideal([F]):
+ if G != F:
+ gb.append(flats_gen[G]*(term) ** (ranks[F] - ranks[G]))
+
+ gb.append(term ** ranks[F])
+
+ return PolynomialSequence(R, [gb])
+
+ def normal_basis(self, algorithm='', *args, **kwargs):
+ r"""
+ Return the monomial basis of the quotient ring of this ideal.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Z(3).chow_ring(QQ, False)
+ sage: I = ch.defining_ideal()
+ sage: I.normal_basis()
+ [1, Ax2x3y1, Ax1x3y2, Ax1x2y3, Ay1y2y3, Atx1y1, Atx2y2, Atx3y3, Atx1x2x3y1y2y3, Atx1x2x3y1y2y3^2]
+ sage: set(I.gens().ideal().normal_basis()) == set(I.normal_basis())
+ True
+ sage: ch = matroids.AG(2,3).chow_ring(QQ, False)
+ sage: I = ch.defining_ideal()
+ sage: I.normal_basis()
+ [1, A012, A236, A046, A156, A345, A247, A057, A137, A258, A678,
+ A038, A148, A012345678, A012345678^2]
+ sage: set(I.gens().ideal().normal_basis()) == set(I.normal_basis())
+ True
+ """
+ if algorithm == '':
+ algorithm = 'constructed'
+ if algorithm != 'constructed':
+ return super().normal_basis(algorithm=algorithm, *args, **kwargs)
+ R = self.ring()
+ flats_gen = self._flats_generator
+ monomial_basis = []
+ ranks, chains = self._lattice_flats()
+ for subset in chains:
+ max_powers = []
+ k = len(subset)
+ if (k == 0):
+ monomial_basis.append(R.one())
+ elif not ((k == 1) & (ranks[subset[0]] == 1)):
+ for i in range(k):
+ if i == 0:
+ max_powers.append(ranks[subset[i]])
+ else:
+ max_powers.append(ranks[subset[i]] - ranks[subset[i-1]])
+ for combination in product(*(range(1, p) for p in max_powers)):
+ expression = R.one()
+ for val, c in zip(subset, combination):
+ expression *= flats_gen[val] ** c
+ monomial_basis.append(expression)
+ return PolynomialSequence(R, [monomial_basis])
+
+
+class AugmentedChowRingIdeal_fy(ChowRingIdeal):
+ r"""
+ The augmented Chow ring ideal of matroid `M` over ring `R` in
+ the Feitchner-Yuzvinsky presentation.
+
+ The augmented Chow ring ideal for a matroid `M` is defined as the ideal
+ `(I_M + J_M)` of the following polynomial ring
+
+ .. MATH::
+
+ R[y_{e_1}, \ldots, y_{e_n}, x_{F_1}, \ldots, x_{F_k}],
+
+ where
+
+ - `F_1, \ldots, F_k` are the proper flats of `M`,
+ - `e_1, \ldots, e_n` are `n` elements of groundset of `M`,
+ - `J_M` is the ideal generated by all quadratic monomials `x_{F} x_{F'}`,
+ where `F` and `F'` are incomparable elements in the lattice of
+ flats and `y_{i} x_F` for all flats `F` and `i \in E \setminus F` and
+ - `I_M` is the ideal generated by all linear forms
+
+ .. MATH::
+
+ y_i - \sum_{i \notin F} x_F
+
+ for all `i \in E`.
+
+ The augmented Chow ring ideal in the Feitchner-Yuzvinsky presentation
+ for a simple matroid `M` is defined as the ideal `I_{FY}(M)` of the
+ following polynomial ring
+
+ .. MATH::
+
+ R[y_{e_1}, \ldots, y_{e_n}, y_{F_1 \cup e}, \ldots, y_{F_k \cup e}],
+
+ where `F_1, \ldots, F_k` are the flats of `M`, `e_1, \ldots, e_n` are
+ `n` elements of groundset of `M`, and `I_{FY}(M)` is the ideal generated by
+
+ - all quadratic monomials `y_{F \cup e} y_{F' \cup e}`, for incomparable
+ elements `F` and `F'` in the lattice of flats,
+
+ - `y_{i} y_{F \cup e}` for all flats `F` and all `i \in E \setminus F`
+
+ - for all `i \in E`
+
+ .. MATH::
+
+ y_i + \sum_{i \in F} y_{F \cup e}
+
+ - and
+
+ .. MATH::
+
+ \sum_{F} y_{F \cup e}.
+
+ Setting `x_F = y_{F \cup e}` and using the last linear
+ form to eliminate `x_E` recovers the usual presentation of
+ augmented Chow ring of `M`.
+
+ REFERENCES:
+
+ - [MM2022]_
+
+ INPUT:
+
+ - ``M`` -- matroid
+ - ``R`` -- commutative ring
+
+ EXAMPLES:
+
+ Augmented Chow ring ideal of Wheel matroid of rank 3::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'fy')
+ sage: ch.defining_ideal()
+ Augmented Chow ring ideal of Wheel(3): Regular matroid of rank 3 on 6
+ elements with 16 bases of Feitchner-Yuzvinsky presentation
+ """
+ def __init__(self, M, R):
+ r"""
+ Initialize ``self``.
+
+ EXAMPLES::
+
+ sage: I = matroids.Wheel(3).chow_ring(QQ, True, 'fy').defining_ideal()
+ sage: TestSuite(I).run(skip="_test_category")
+ """
+ self._matroid = M
+ self._flats = [X for i in range(self._matroid.rank() + 1)
+ for X in self._matroid.flats(i)]
+ E = list(self._matroid.groundset())
+ self._flats_generator = dict()
+ try:
+ names_groundset = ['A{}'.format(''.join(str(x))) for x in E]
+ names_flats = ['B{}'.format(''.join(str(x) for x in sorted(F, key=cmp_elements_key))) for F in self._flats]
+ poly_ring = PolynomialRing(R, names_groundset + names_flats) #self.ring()
+ except ValueError: #variables are not proper names
+ poly_ring = PolynomialRing(R, 'A', len(E) + len(self._flats))
+ for i, x in enumerate(E):
+ self._flats_generator[x] = poly_ring.gens()[i]
+ for i, F in enumerate(self._flats):
+ self._flats_generator[F] = poly_ring.gens()[len(E) + i]
+ self._flats_containing = {x: [] for x in E}
+ for F in self._flats:
+ for x in F:
+ self._flats_containing[x].append(F)
+ MPolynomialIdeal.__init__(self, poly_ring, self._gens_constructor(poly_ring))
+
+ def _gens_constructor(self, poly_ring):
+ r"""
+ Return the generators of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'fy')
+ sage: sorted(ch.defining_ideal()._gens_constructor(ch.defining_ideal().ring()))
+ [B + B0 + B1 + B2 + B3 + B4 + B5 + B013 + B025 + B04 + B124 + B15 + B23 + B345 + B012345,
+ B + B0 + B1 + B2 + B3 + B4 + B5 + B013 + B025 + B04 + B124 + B15 + B23 + B345 + B012345,
+ B + B0 + B1 + B2 + B3 + B4 + B5 + B013 + B025 + B04 + B124 + B15 + B23 + B345 + B012345,
+ B + B0 + B1 + B2 + B3 + B4 + B5 + B013 + B025 + B04 + B124 + B15 + B23 + B345 + B012345,
+ B + B0 + B1 + B2 + B3 + B4 + B5 + B013 + B025 + B04 + B124 + B15 + B23 + B345 + B012345,
+ B + B0 + B1 + B2 + B3 + B4 + B5 + B013 + B025 + B04 + B124 + B15 + B23 + B345 + B012345,
+ A5 + B5 + B025 + B15 + B345 + B012345,
+ A4 + B4 + B04 + B124 + B345 + B012345,
+ A3 + B3 + B013 + B23 + B345 + B012345,
+ A2 + B2 + B025 + B124 + B23 + B012345,
+ A1 + B1 + B013 + B124 + B15 + B012345,
+ A0 + B0 + B013 + B025 + B04 + B012345,
+ B23*B345, B15*B345, B124*B345, B04*B345, B025*B345, B013*B345,
+ B2*B345, B1*B345, B0*B345, A2*B345, A1*B345, A0*B345, B15*B23,
+ B124*B23, B04*B23, B025*B23, B013*B23, B5*B23, B4*B23, B1*B23,
+ B0*B23, A5*B23, A4*B23, A1*B23, A0*B23, B124*B15, B04*B15,
+ B025*B15, B013*B15, B4*B15, B3*B15, B2*B15, B0*B15, A4*B15,
+ A3*B15, A2*B15, A0*B15, B04*B124, B025*B124, B013*B124, B5*B124,
+ B3*B124, B0*B124, A5*B124, A3*B124, A0*B124, B025*B04, B013*B04,
+ B5*B04, B3*B04, B2*B04, B1*B04, A5*B04, A3*B04, A2*B04, A1*B04,
+ B013*B025, B4*B025, B3*B025, B1*B025, A4*B025, A3*B025, A1*B025,
+ B5*B013, B4*B013, B2*B013, A5*B013, A4*B013, A2*B013, B4*B5,
+ B3*B5, B2*B5, B1*B5, B0*B5, A4*B5, A3*B5, A2*B5, A1*B5, A0*B5,
+ B3*B4, B2*B4, B1*B4, B0*B4, A5*B4, A3*B4, A2*B4, A1*B4, A0*B4,
+ B2*B3, B1*B3, B0*B3, A5*B3, A4*B3, A2*B3, A1*B3, A0*B3, B1*B2,
+ B0*B2, A5*B2, A4*B2, A3*B2, A1*B2, A0*B2, B0*B1, A5*B1, A4*B1,
+ A3*B1, A2*B1, A0*B1, A5*B0, A4*B0, A3*B0, A2*B0, A1*B0, A5*B,
+ A4*B, A3*B, A2*B, A1*B, A0*B]
+ """
+ E = list(self._matroid.groundset())
+ Q = []
+ L = []
+ lattice_flats = Poset((self._flats, lambda x, y: x <= y))
+ antichains = lattice_flats.antichains().elements_of_depth_iterator(2)
+ for F, G in antichains:
+ Q.append(self._flats_generator[F] * self._flats_generator[G]) # Quadratic generators
+
+ for x in E:
+ term = poly_ring.zero()
+ term1 = poly_ring.zero()
+ for F in self._flats:
+ term1 += self._flats_generator[F]
+ if F not in self._flats_containing[x]:
+ Q.append(self._flats_generator[x] * self._flats_generator[F])
+ else:
+ term += self._flats_generator[F]
+ L.append(self._flats_generator[x] + term) # Linear generators
+ L.append(term1)
+ return Q + L
+
+ def _repr_(self):
+ r"""
+ EXAMPLES::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'fy')
+ sage: ch.defining_ideal()
+ Augmented Chow ring ideal of Wheel(3): Regular matroid of rank 3 on
+ 6 elements with 16 bases of Feitchner-Yuzvinsky presentation
+ """
+ return "Augmented Chow ring ideal of {} of Feitchner-Yuzvinsky presentation".format(self._matroid)
+
+ def _latex_(self):
+ r"""
+ Return a LaTeX representation of ``self``.
+
+ EXAMPLES::
+
+ sage: M1 = Matroid(graphs.CycleGraph(3))
+ sage: ch = M1.chow_ring(QQ, True, 'fy')
+ sage: ch.defining_ideal()._latex_()
+ 'I_{FY}(\\text{\\texttt{Graphic{ }matroid{ }of{ }rank{ }2{ }on{ }3{ }elements}})'
+ """
+ from sage.misc.latex import latex
+ return 'I_{{FY}}({})'.format((latex(self._matroid)))
+
+ def groebner_basis(self, algorithm='', *args, **kwargs):
+ r"""
+ Return the Groebner basis of ``self``.
+
+ EXAMPLES::
+
+ sage: ch = matroids.catalog.NonFano().chow_ring(QQ, True, 'fy')
+ sage: ch.defining_ideal().groebner_basis(algorithm='')
+ Polynomial Sequence with 178 Polynomials in 25 Variables
+ sage: ch.defining_ideal().groebner_basis(algorithm='').is_groebner()
+ True
+ sage: ch.defining_ideal().hilbert_series() == ch.defining_ideal().gens().ideal().hilbert_series()
+ True
+ """
+ if algorithm == '':
+ algorithm = 'constructed'
+ if algorithm != 'constructed':
+ return super().groebner_basis(algorithm=algorithm, *args, **kwargs)
+ gb = [] # reduced groebner basis with two eliminated cases
+ E = list(self._matroid.groundset())
+ poly_ring = self.ring()
+ reln = lambda x,y: x <= y
+ lattice_flats = Poset((self._flats, reln))
+ antichains = lattice_flats.antichains().elements_of_depth_iterator(2)
+ for F, G in antichains:
+ gb.append(self._flats_generator[F] * self._flats_generator[G]) # non-nested flats
+ for i in E:
+ term = poly_ring.zero()
+ for H in self._flats_containing[i]:
+ term += self._flats_generator[H]
+ if term != poly_ring.zero():
+ gb.append(self._flats_generator[i] + term) # 5.7 (MM2022)
+
+ for F in self._flats:
+ term1 = poly_ring.zero()
+ for H in lattice_flats.order_filter([F]):
+ term1 += self._flats_generator[H]
+ if term1 != poly_ring.zero():
+ gb.append(term1**(self._matroid.rank(F) + 1)) #5.6 (MM2022)
+ order_ideal_modified = lattice_flats.order_ideal([F])
+ order_ideal_modified.remove(F)
+ for G in order_ideal_modified: # nested flats
+ gb.append(self._flats_generator[G]*term1**(self._matroid.rank(F) - self._matroid.rank(G)))
+
+ return PolynomialSequence(poly_ring, [gb])
+
+ def normal_basis(self, algorithm='', *args, **kwargs):
+ r"""
+ Return the monomial basis of the quotient ring of this ideal.
+
+ EXAMPLES::
+
+ sage: ch = matroids.Uniform(2,5).chow_ring(QQ, True, 'fy')
+ sage: I = ch.defining_ideal()
+ sage: I.normal_basis()
+ [1, B0, B1, B2, B3, B4, B01234, B01234^2]
+ sage: set(I.gens().ideal().normal_basis()) == set(I.normal_basis())
+ True
+ sage: ch = matroids.catalog.Fano().chow_ring(QQ, True, 'fy')
+ sage: I = ch.defining_ideal()
+ sage: I.normal_basis()
+ Polynomial Sequence with 32 Polynomials in 15 Variables
+ sage: set(I.gens().ideal().normal_basis()) == set(I.normal_basis())
+ True
+ """
+ if algorithm == '':
+ algorithm = 'constructed'
+ if algorithm != 'constructed':
+ return super().normal_basis(algorithm=algorithm, *args, **kwargs)
+ R = self.ring()
+ flats_gen = self._flats_generator
+ monomial_basis = []
+ ranks, chains = self._lattice_flats()
+ for subset in chains:
+ if not subset:
+ monomial_basis.append(R.one())
+ else:
+ k = len(subset)
+ max_powers = []
+ max_powers.append(ranks[subset[0]])
+ for i in range(1, k):
+ max_powers.append(ranks[subset[i]] - ranks[subset[i-1]])
+ ranges = [range(1, p) for p in max_powers]
+ ranges[0] = range(1, max_powers[0] + 1)
+ for combination in product(*(r for r in ranges)):
+ # generating combinations for all powers up to max_powers
+ expression = R.one()
+ for val, c in zip(subset, combination):
+ expression *= flats_gen[val] ** c
+ monomial_basis.append(expression)
+ return PolynomialSequence(R, [monomial_basis])
+
+
+class AugmentedChowRingIdeal_atom_free(ChowRingIdeal):
+ r"""
+ The augmented Chow ring ideal for a matroid `M` over ring `R` in the
+ atom-free presentation.
+
+ The augmented Chow ring ideal in the atom-free presentation for a matroid
+ `M` is defined as the ideal `I_{af}(M)` of the polynomial ring:
+
+ .. MATH::
+
+ R[x_{F_1}, \ldots, x_{F_k}],
+
+ where `F_1, \ldots, F_k` are the non-empty flats of `M` and `I_{af}(M)` is
+ the ideal generated by
+
+ - all quadratic monomials `x_{F} x_{F'}` for all incomparable elements
+ `F` and `F'` in the lattice of flats,
+
+ - for all flats `F` and `i \in E \setminus F`
+
+ .. MATH::
+
+ x_F \sum_{i \in F'} x_{F'}
+
+ - and for all `i \in E`
+
+ .. MATH::
+
+ \sum_{i \in F'} (x_{F'})^2.
+
+ REFERENCES:
+
+ - [MM2022]_
+
+ INPUT:
+
+ - ``M`` -- matroid
+ - ``R`` -- commutative ring
+
+ EXAMPLES:
+
+ Augmented Chow ring ideal of Wheel matroid of rank 3::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free')
+ sage: ch.defining_ideal()
+ Augmented Chow ring ideal of Wheel(3): Regular matroid of rank 3 on 6
+ elements with 16 bases in the atom-free presentation
+ """
+ def __init__(self, M, R):
+ r"""
+ Initialize ``self``.
+
+ EXAMPLES::
+
+ sage: I = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free').defining_ideal()
+ sage: TestSuite(I).run(skip="_test_category")
+ """
+ self._matroid = M
+ self._flats = [X for i in range(1, self._matroid.rank() + 1)
+ for X in self._matroid.flats(i)]
+ names = ['A{}'.format(''.join(str(x) for x in sorted(F, key=cmp_elements_key))) for F in self._flats]
+ try:
+ poly_ring = PolynomialRing(R, names) #self.ring
+ except ValueError: # variables are not proper names
+ poly_ring = PolynomialRing(R, 'A', len(self._flats))
+ gens = poly_ring.gens()
+ self._flats_generator = dict(zip(self._flats, gens))
+ MPolynomialIdeal.__init__(self, poly_ring, self._gens_constructor(poly_ring))
+
+ def _gens_constructor(self, poly_ring):
+ r"""
+ Return the generators of ``self``.
+
+ EXAMPLES::
+
+ sage: M1 = Matroid(graphs.CycleGraph(3))
+ sage: ch = M1.chow_ring(QQ, True, 'atom-free')
+ sage: sorted(ch.defining_ideal()._gens_constructor(ch.defining_ideal().ring()))
+ [A2^2 + 2*A2*A3 + A3^2, A1*A2, A1*A2 + A2*A3, A1*A2 + A1*A3, A0*A2,
+ A0*A2 + A2*A3, A0*A2 + A0*A3, A1^2 + 2*A1*A3 + A3^2, A0*A1,
+ A0*A1 + A1*A3, A0*A1 + A0*A3, A0^2 + 2*A0*A3 + A3^2]
+ """
+ E = list(self._matroid.groundset())
+ Q = [] # Quadratic generators
+ flats_containing = {x: [] for x in E}
+ for F in self._flats:
+ for x in F:
+ flats_containing[x].append(F)
+ reln = lambda x,y: x <= y
+ lattice_flats = Poset((self._flats, reln))
+ antichains = lattice_flats.antichains().elements_of_depth_iterator(2)
+ for F, G in antichains:
+ Q.append(self._flats_generator[F] * self._flats_generator[G])
+ for F in self._flats:
+ for x in E: # generators for every set of flats containing element
+ term = poly_ring.zero()
+ for H in flats_containing[x]:
+ term += self._flats_generator[H]
+ if term**2 not in Q:
+ Q.append(term**2)
+
+ if F not in flats_containing[x]: # generators for every set of flats not containing element
+ Q.append(self._flats_generator[F]*term)
+ return Q
+
+ def _repr_(self):
+ r"""
+ EXAMPLES::
+
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free')
+ sage: ch.defining_ideal()
+ Augmented Chow ring ideal of Wheel(3): Regular matroid of rank 3 on
+ 6 elements with 16 bases in the atom-free presentation
+ """
+ return "Augmented Chow ring ideal of {} in the atom-free presentation".format(self._matroid)
+
+ def _latex_(self):
+ r"""
+ Return the LaTeX output of the ring and generators of ``self``.
+
+ EXAMPLES::
+
+ sage: M1 = Matroid(graphs.CycleGraph(3))
+ sage: ch = M1.chow_ring(QQ, True, 'atom-free')
+ sage: ch.defining_ideal()._latex_()
+ 'I_{af}(\\text{\\texttt{Graphic{ }matroid{ }of{ }rank{ }2{ }on{ }3{ }elements}})'
+ """
+ from sage.misc.latex import latex
+ return 'I_{{af}}({})'.format(latex(self._matroid))
+
+ def groebner_basis(self, algorithm='', *args, **kwargs):
+ """
+ Return the Groebner basis of ``self``.
+
+ EXAMPLES::
+
+ sage: M1 = matroids.Uniform(3,6)
+ sage: ch = M1.chow_ring(QQ, True, 'atom-free')
+ sage: ch.defining_ideal().groebner_basis(algorithm='')
+ Polynomial Sequence with 253 Polynomials in 22 Variables
+ sage: ch.defining_ideal().groebner_basis(algorithm='').is_groebner()
+ True
+ sage: ch.defining_ideal().hilbert_series() == ch.defining_ideal().gens().ideal().hilbert_series()
+ True
+ """
+ if algorithm == '':
+ algorithm = 'constructed'
+ if algorithm != 'constructed':
+ return super().groebner_basis(algorithm=algorithm, *args, **kwargs)
+ gb = []
+ poly_ring = self.ring()
+ lattice_flats = Poset((self._flats, lambda x, y: x <= y))
+ antichains = lattice_flats.antichains().elements_of_depth_iterator(2)
+ for F, G in antichains:
+ gb.append(self._flats_generator[F]*self._flats_generator[G])
+ for F in self._flats:
+ term = poly_ring.zero()
+ for H in lattice_flats.order_filter([F]):
+ term += self._flats_generator[H]
+ if term != poly_ring.zero():
+ order_ideal_modified = lattice_flats.order_ideal([F])
+ order_ideal_modified.remove(F)
+ for G in order_ideal_modified:
+ gb.append(self._flats_generator[G] * (term ** (self._matroid.rank(F) - self._matroid.rank(G))))
+ gb.append(term ** (self._matroid.rank(F) + 1))
+
+ return PolynomialSequence(poly_ring, [gb])
+
+ def normal_basis(self, algorithm='', *args, **kwargs):
+ r"""
+ Return the monomial basis of the quotient ring of this ideal.
+
+ EXAMPLES::
+
+ sage: ch = Matroid(graphs.CycleGraph(3)).chow_ring(QQ, True, 'atom-free')
+ sage: I = ch.defining_ideal()
+ sage: I.normal_basis()
+ [1, A0, A1, A2, A3, A3^2]
+ sage: set(I.gens().ideal().normal_basis()) == set(I.normal_basis())
+ True
+ sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free')
+ sage: I = ch.defining_ideal()
+ sage: I.normal_basis()
+ Polynomial Sequence with 30 Polynomials in 14 Variables
+ sage: set(I.gens().ideal().normal_basis()) == set(I.normal_basis())
+ True
+ """
+ if algorithm == '':
+ algorithm = 'constructed'
+ if algorithm != 'constructed':
+ return super().normal_basis(algorithm=algorithm, *args, **kwargs)
+ R = self.ring()
+ flats_gen = self._flats_generator
+ monomial_basis = []
+ ranks, chains = self._lattice_flats()
+ for subset in chains:
+ max_powers = []
+ k = len(subset)
+ if not subset:
+ monomial_basis.append(R.one())
+ else:
+ for i in range(k):
+ if i == 0:
+ max_powers.append(ranks[subset[i]])
+ else:
+ max_powers.append(ranks[subset[i]] - ranks[subset[i-1]])
+ ranges = [range(1, p) for p in max_powers]
+ ranges[0] = range(1, max_powers[0] + 1)
+ first_rank = ranks[subset[k-1]] + 1
+ for combination in product(*(r for r in ranges)):
+ # Generating combinations for all powers from 1 to max_powers
+ if sum(combination) <= first_rank:
+ expression = R.one()
+ for val, c in zip(subset, combination):
+ expression *= flats_gen[val] ** c
+ monomial_basis.append(expression)
+ return PolynomialSequence(R, [monomial_basis])
\ No newline at end of file
diff --git a/src/sage/matroids/circuits_matroid.pxd b/src/sage/matroids/circuits_matroid.pxd
index a3bffafce6d..d7526ee2712 100644
--- a/src/sage/matroids/circuits_matroid.pxd
+++ b/src/sage/matroids/circuits_matroid.pxd
@@ -34,4 +34,4 @@ cdef class CircuitsMatroid(Matroid):
cpdef relabel(self, mapping)
# verification
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
diff --git a/src/sage/matroids/circuits_matroid.pyx b/src/sage/matroids/circuits_matroid.pyx
index 3b3693b52f6..cd44db7772b 100644
--- a/src/sage/matroids/circuits_matroid.pyx
+++ b/src/sage/matroids/circuits_matroid.pyx
@@ -869,13 +869,17 @@ cdef class CircuitsMatroid(Matroid):
# verification
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if ``self`` obeys the matroid axioms.
For a matroid defined by its circuits, we check the circuit axioms.
- OUTPUT: boolean
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
EXAMPLES::
@@ -901,8 +905,12 @@ cdef class CircuitsMatroid(Matroid):
False
sage: C = [[1, 2, 3], [3, 4, 5]]
sage: M = Matroid(circuits=C)
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False,
+ {'circuit 1': frozenset({...}),
+ 'circuit 2': frozenset({...}),
+ 'element': 3,
+ 'error': 'elimination axiom failed'})
"""
from itertools import combinations_with_replacement
cdef int i, j
@@ -911,7 +919,7 @@ cdef class CircuitsMatroid(Matroid):
# loop through all circuit length pairs (i, j) with i <= j
for C1 in self._k_C[i]:
if not C1: # the empty set can't be a circuit
- return False
+ return False if not certificate else (False, {"error": "the empty set can't be a circuit"})
for C2 in self._k_C[j]:
I12 = C1 & C2
if not I12: # C1 and C2 are disjoint; nothing to test
@@ -920,10 +928,10 @@ cdef class CircuitsMatroid(Matroid):
if len(C1) == len(C2): # they are the same circuit
break
# C1 < C2; a circuit can't be a subset of another circuit
- return False
+ return False if not certificate else (False, {"error": "a circuit can't be a subset of another circuit", "circuit 1": C1, "circuit 2": C2})
# check circuit elimination axiom
U12 = C1 | C2
for e in I12:
if self._is_independent(U12 - {e}):
- return False
- return True
+ return False if not certificate else (False, {"error": "elimination axiom failed", "circuit 1": C1, "circuit 2": C2, "element": e})
+ return True if not certificate else (True, {})
diff --git a/src/sage/matroids/constructor.py b/src/sage/matroids/constructor.py
index a71674e2987..8548b2bfede 100644
--- a/src/sage/matroids/constructor.py
+++ b/src/sage/matroids/constructor.py
@@ -815,7 +815,7 @@ def Matroid(groundset=None, data=None, **kwds):
key = 'matroid'
elif isinstance(data, str):
key = 'revlex'
- elif isinstance(data, dict) or isinstance(data, FiniteLatticePoset):
+ elif isinstance(data, (dict, FiniteLatticePoset)):
key = 'flats'
elif data is None:
raise TypeError("no input data given for Matroid()")
diff --git a/src/sage/matroids/dual_matroid.py b/src/sage/matroids/dual_matroid.py
index 76ad7aaa600..d4dce31ddc2 100644
--- a/src/sage/matroids/dual_matroid.py
+++ b/src/sage/matroids/dual_matroid.py
@@ -545,13 +545,17 @@ def relabel(self, mapping):
M = self._matroid.relabel(mapping).dual()
return M
- def is_valid(self):
+ def is_valid(self, certificate=False):
"""
Test if ``self`` obeys the matroid axioms.
For a :class:`DualMatroid`, we check its dual.
- OUTPUT: boolean
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
EXAMPLES::
@@ -564,4 +568,11 @@ def is_valid(self):
sage: M.dual().is_valid()
False
"""
+ if certificate:
+ v, c = self._matroid.is_valid(certificate)
+ if v:
+ return True, {}
+ else:
+ c["error"] = "the dual matroid is not valid: " + c["error"]
+ return v, c
return self._matroid.is_valid()
diff --git a/src/sage/matroids/flats_matroid.pxd b/src/sage/matroids/flats_matroid.pxd
index 23fd4ceb1ec..6eb99792794 100644
--- a/src/sage/matroids/flats_matroid.pxd
+++ b/src/sage/matroids/flats_matroid.pxd
@@ -24,4 +24,4 @@ cdef class FlatsMatroid(Matroid):
cpdef relabel(self, mapping)
# verification
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
diff --git a/src/sage/matroids/flats_matroid.pyx b/src/sage/matroids/flats_matroid.pyx
index 6842839e03f..ff1b21fec0c 100644
--- a/src/sage/matroids/flats_matroid.pyx
+++ b/src/sage/matroids/flats_matroid.pyx
@@ -539,7 +539,7 @@ cdef class FlatsMatroid(Matroid):
# verification
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if ``self`` obeys the matroid axioms.
@@ -548,7 +548,11 @@ cdef class FlatsMatroid(Matroid):
If the lattice of flats has already been computed, we instead perform
the equivalent check of whether it forms a geometric lattice.
- OUTPUT: boolean
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
EXAMPLES::
@@ -586,8 +590,8 @@ cdef class FlatsMatroid(Matroid):
....: '06a','16b','268','369','07b','178','279','37a',
....: '0123c','89abc',
....: '0123456789abc'])
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False, {'error': 'the lattice of flats is not geometric'})
sage: Matroid(matroids.catalog.Fano().lattice_of_flats()).is_valid()
True
@@ -609,16 +613,21 @@ cdef class FlatsMatroid(Matroid):
TESTS::
- sage: Matroid(flats={0: [], 1: [[0], [1]], 2: [[0, 1]]}).is_valid() # missing an intersection
- False
- sage: Matroid(flats={0: [[]], 2: [[0], [1]], 3: [[0, 1]]}).is_valid() # invalid ranks
- False
- sage: Matroid(flats={0: [[]], 1: [[0], [1]], 2: [[0], [0, 1]]}).is_valid() # duplicates
- False
- sage: Matroid(flats={0: [[]], 1: [[0], [1], [0, 1]]}).is_valid()
- False
- sage: Matroid(flats={0: [[]], 1: [[0, 1], [2]], 2: [[0], [1], [0, 1, 2]]}).is_valid()
- False
+ sage: Matroid(flats={0: [], 1: [[0], [1]], 2: [[0, 1]]}).is_valid(certificate=True) # missing an intersection
+ (False, {'error': 'flats dictionary has invalid ranks'})
+ sage: Matroid(flats={0: [[]], 2: [[0], [1]], 3: [[0, 1]]}).is_valid(certificate=True) # invalid ranks
+ (False, {'error': 'flats dictionary has invalid ranks'})
+ sage: Matroid(flats={0: [[]], 1: [[0], [1]], 2: [[0], [0, 1]]}).is_valid(certificate=True) # duplicates
+ (False, {'error': 'flats dictionary has repeated flats'})
+ sage: Matroid(flats={0: [[]], 1: [[0], [1], [0, 1]]}).is_valid(certificate=True)
+ (False,
+ {'error': 'a single element extension of a flat must be a subset of exactly one flat',
+ 'flat': frozenset()})
+ sage: Matroid(flats={0: [[]], 1: [[0, 1], [2]], 2: [[0], [1], [0, 1, 2]]}).is_valid(certificate=True)
+ (False,
+ {'error': 'the intersection of two flats must be a flat',
+ 'flat 1': frozenset({0, 1}),
+ 'flat 2': frozenset({1})})
sage: M = Matroid(flats={0: [''], # missing an extension of flat ['5'] by '6'
....: 1: ['0','1','2','3','4','5','6','7','8','9','a','b','c'],
....: 2: ['45','46','47','4c','57','5c','67','6c','7c',
@@ -626,13 +635,15 @@ cdef class FlatsMatroid(Matroid):
....: '06a','16b','268','369','07b','178','279','37a',
....: '0123c','89abc'],
....: 3: ['0123456789abc']})
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False,
+ {'error': 'a single element extension of a flat must be a subset of exactly one flat',
+ 'flat': frozenset({'...'})})
sage: M = Matroid(flats=[[], [0], [1], [0], [0, 1]]) # duplicates are ignored
sage: M.lattice_of_flats()
Finite lattice containing 4 elements
- sage: M.is_valid()
- True
+ sage: M.is_valid(certificate=True)
+ (True, {})
sage: M = Matroid(flats=['',
....: '0','1','2','3','4','5','6','7','8','9','a','b','c',
....: '45','46','47','4c','56','57','5c','67','6c','7c',
@@ -640,10 +651,16 @@ cdef class FlatsMatroid(Matroid):
....: '06a','16b','268','369','07b','178','279','37a',
....: '0123c','89abc',
....: '0123456789abc'])
- sage: M.is_valid()
- True
+ sage: M.is_valid(certificate=True)
+ (True, {})
"""
if self._L is not None: # if the lattice of flats is available
+ if certificate:
+ if not self._is_closed(self._groundset):
+ return False, {"error": "the groundset must be a flat"}
+ if not self._L.is_geometric():
+ return False, {"error": "the lattice of flats is not geometric"}
+ return True, {}
return self._is_closed(self._groundset) and self._L.is_geometric()
cdef int i, j, k
@@ -654,14 +671,14 @@ cdef class FlatsMatroid(Matroid):
# check flats dictionary for invalid ranks and repeated flats
ranks = list(self._F)
if ranks != list(range(len(ranks))):
- return False
+ return False if not certificate else (False, {"error": "flats dictionary has invalid ranks"})
flats_lst = [F for i in self._F for F in self._F[i]]
if len(flats_lst) != len(set(flats_lst)):
- return False
+ return False if not certificate else (False, {"error": "flats dictionary has repeated flats"})
# the groundset must be a flat
if not self._is_closed(self._groundset):
- return False
+ return False if not certificate else (False, {"error": "the groundset must be a flat"})
# a single element extension of a flat must be a subset of exactly one flat
for i in ranks[:-1]:
@@ -671,7 +688,7 @@ cdef class FlatsMatroid(Matroid):
if F2 >= F1:
cover.extend(F1 ^ F2)
if len(cover) != len(F1 ^ self._groundset) or set(cover) != F1 ^ self._groundset:
- return False
+ return False if not certificate else (False, {"error": "a single element extension of a flat must be a subset of exactly one flat", "flat": F1})
# the intersection of two flats must be a flat
for i in ranks:
@@ -688,6 +705,6 @@ cdef class FlatsMatroid(Matroid):
if flag:
break
if not flag:
- return False
+ return False if not certificate else (False, {"error": "the intersection of two flats must be a flat", "flat 1": F1, "flat 2": F2})
- return True
+ return True if not certificate else (True, {})
diff --git a/src/sage/matroids/graphic_matroid.pxd b/src/sage/matroids/graphic_matroid.pxd
index 3684ab19f0d..b9902e967d6 100644
--- a/src/sage/matroids/graphic_matroid.pxd
+++ b/src/sage/matroids/graphic_matroid.pxd
@@ -21,7 +21,7 @@ cdef class GraphicMatroid(Matroid):
cpdef bint _is_closed(self, frozenset X) noexcept
cpdef _is_isomorphic(self, other, certificate=*)
cpdef _isomorphism(self, other)
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
cpdef bint is_graphic(self) noexcept
cpdef bint is_regular(self) noexcept
cpdef graph(self)
diff --git a/src/sage/matroids/graphic_matroid.pyx b/src/sage/matroids/graphic_matroid.pyx
index 5e740e78637..53bd8adef39 100644
--- a/src/sage/matroids/graphic_matroid.pyx
+++ b/src/sage/matroids/graphic_matroid.pyx
@@ -1093,13 +1093,17 @@ cdef class GraphicMatroid(Matroid):
"""
return self.is_isomorphic(other, certificate=True)[1]
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
"""
Test if the data obey the matroid axioms.
Since a graph is used for the data, this is always the case.
- OUTPUT: ``True``
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: ``True``, or ``(True, {})``
EXAMPLES::
@@ -1108,7 +1112,7 @@ cdef class GraphicMatroid(Matroid):
sage: M.is_valid()
True
"""
- return True
+ return True if not certificate else (True, {})
cpdef bint is_graphic(self) noexcept:
r"""
diff --git a/src/sage/matroids/lean_matrix.pyx b/src/sage/matroids/lean_matrix.pyx
index f7051f45c92..e0f86c6db83 100644
--- a/src/sage/matroids/lean_matrix.pyx
+++ b/src/sage/matroids/lean_matrix.pyx
@@ -593,8 +593,8 @@ cdef class LeanMatrix:
cdef list lU_2 = sorted(list(U_2))
cdef list lV_2 = sorted(list(V_2))
- cdef dict rU = dict(zip(lU_2,range(len(U_2))))
- cdef dict rV = dict(zip(lV_2,range(len(V_2))))
+ cdef dict rU = dict(zip(lU_2, range(len(U_2))))
+ cdef dict rV = dict(zip(lV_2, range(len(V_2))))
# find a unique representation of every column in U_1xY_3 using columns in U_1xV_2
B = self.matrix_from_rows_and_columns(list(U_1), range(len(Y)))
@@ -2550,7 +2550,7 @@ cdef class QuaternaryMatrix(LeanMatrix):
Return a submatrix indexed by indicated rows and columns, as well as
the column order of the resulting submatrix.
"""
- cdef QuaternaryMatrix A = QuaternaryMatrix(len(rows), len(columns), ring = self._gf4)
+ cdef QuaternaryMatrix A = QuaternaryMatrix(len(rows), len(columns), ring=self._gf4)
cdef long r, c, lc, lg
cdef mp_bitcnt_t *cols
# deal with trivial case
diff --git a/src/sage/matroids/linear_matroid.pxd b/src/sage/matroids/linear_matroid.pxd
index b0890a76148..1bff3fc87dc 100644
--- a/src/sage/matroids/linear_matroid.pxd
+++ b/src/sage/matroids/linear_matroid.pxd
@@ -62,7 +62,7 @@ cdef class LinearMatroid(BasisExchangeMatroid):
cpdef _is_3connected_shifting(self, certificate=*)
cpdef _is_4connected_shifting(self, certificate=*)
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
cdef class BinaryMatroid(LinearMatroid):
cdef tuple _b_invariant, _b_partition
@@ -92,7 +92,7 @@ cdef class BinaryMatroid(LinearMatroid):
cpdef relabel(self, mapping)
cpdef bint is_graphic(self) noexcept
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
cdef class TernaryMatroid(LinearMatroid):
@@ -122,7 +122,7 @@ cdef class TernaryMatroid(LinearMatroid):
cpdef _fast_isom_test(self, other)
cpdef relabel(self, mapping)
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
cdef class QuaternaryMatroid(LinearMatroid):
cdef object _x_zero, _x_one
@@ -149,7 +149,7 @@ cdef class QuaternaryMatroid(LinearMatroid):
cpdef _fast_isom_test(self, other)
cpdef relabel(self, mapping)
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
cdef class RegularMatroid(LinearMatroid):
cdef _bases_count, _r_invariant
@@ -174,4 +174,4 @@ cdef class RegularMatroid(LinearMatroid):
cpdef bint is_regular(self) noexcept
cpdef bint is_graphic(self) noexcept
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
diff --git a/src/sage/matroids/linear_matroid.pyx b/src/sage/matroids/linear_matroid.pyx
index 6848604f0c8..9030ce47f25 100644
--- a/src/sage/matroids/linear_matroid.pyx
+++ b/src/sage/matroids/linear_matroid.pyx
@@ -2614,13 +2614,19 @@ cdef class LinearMatroid(BasisExchangeMatroid):
cochains = self.linear_coextension_cochains(F, cosimple=cosimple, fundamentals=fundamentals)
return self._linear_coextensions(element, cochains)
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data represent an actual matroid.
Since this matroid is linear, we test the representation matrix.
- OUTPUT:
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
+
+ The boolean output value is:
- ``True`` if the matrix is over a field.
- ``True`` if the matrix is over a ring and all cross ratios are
@@ -2649,19 +2655,19 @@ cdef class LinearMatroid(BasisExchangeMatroid):
sage: from sage.matroids.advanced import * # LinearMatroid
sage: M = LinearMatroid(ring=ZZ, reduced_matrix=Matrix(ZZ,
....: [[1, 0, 1], [1, 1, 0], [0, 1, 1]]))
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False, {'error': 'not all cross ratios are invertible'})
"""
if self.base_ring().is_field():
- return True
+ return True if not certificate else (True, {})
try:
CR = self.cross_ratios()
except (ArithmeticError, TypeError, ValueError):
- return False
+ return False if not certificate else (False, {"error": "can't compute cross ratios"})
for x in CR:
if not x ** (-1) in self.base_ring():
- return False
- return True
+ return False if not certificate else (False, {"error": "not all cross ratios are invertible"})
+ return True if not certificate else (True, {})
# connectivity
@@ -3855,21 +3861,25 @@ cdef class BinaryMatroid(LinearMatroid):
if len(C[e] & C[f] & C[g]) > 0:
M.append([0,col[e,f], col[e,g], col[f,e], col[f,g], col[g,e], col[g,f]])
r += 1
- cdef BinaryMatrix m = BinaryMatrix(r,c)
+ cdef BinaryMatrix m = BinaryMatrix(r, c)
for r in range(len(M)):
for c in M[r]:
m.set(r,c)
# now self is graphic iff there is a binary vector x so that M*x = 0 and x_0 = 1, so:
return BinaryMatroid(m).corank(frozenset([0])) > 0
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data obey the matroid axioms.
Since this is a linear matroid over the field `\GF{2}`, this is always
the case.
- OUTPUT: ``True``
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: ``True``, or ``(True, {})``
EXAMPLES::
@@ -3877,11 +3887,11 @@ cdef class BinaryMatroid(LinearMatroid):
sage: M.is_valid()
True
"""
- return True
+ return True if not certificate else (True, {})
# representability
- cpdef binary_matroid(self, randomized_tests=1, verify = True):
+ cpdef binary_matroid(self, randomized_tests=1, verify=True):
r"""
Return a binary matroid representing ``self``.
@@ -4724,14 +4734,18 @@ cdef class TernaryMatroid(LinearMatroid):
basis=bas,
keep_initial_representation=False)
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data obey the matroid axioms.
Since this is a linear matroid over the field `\GF{3}`, this is always
the case.
- OUTPUT: ``True``
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: ``True``, or ``(True, {})``
EXAMPLES::
@@ -4739,11 +4753,11 @@ cdef class TernaryMatroid(LinearMatroid):
sage: M.is_valid()
True
"""
- return True
+ return True if not certificate else (True, {})
# representability
- cpdef ternary_matroid(self, randomized_tests=1, verify = True):
+ cpdef ternary_matroid(self, randomized_tests=1, verify=True):
r"""
Return a ternary matroid representing ``self``.
@@ -5488,14 +5502,18 @@ cdef class QuaternaryMatroid(LinearMatroid):
basis=bas,
keep_initial_representation=False)
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data obey the matroid axioms.
Since this is a linear matroid over the field `\GF{4}`, this is always
the case.
- OUTPUT: ``True``
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: ``True``, or ``(True, {})``
EXAMPLES::
@@ -5503,7 +5521,7 @@ cdef class QuaternaryMatroid(LinearMatroid):
sage: M.is_valid() # needs sage.rings.finite_rings
True
"""
- return True
+ return True if not certificate else (True, {})
def __reduce__(self):
"""
@@ -6270,7 +6288,7 @@ cdef class RegularMatroid(LinearMatroid):
"""
return BinaryMatroid(reduced_matrix=self._reduced_representation()).is_graphic()
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data obey the matroid axioms.
@@ -6278,7 +6296,11 @@ cdef class RegularMatroid(LinearMatroid):
representation matrix is *totally unimodular*, i.e. if all square
submatrices have determinant in `\{-1, 0, 1\}`.
- OUTPUT: boolean
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
EXAMPLES::
@@ -6287,15 +6309,17 @@ cdef class RegularMatroid(LinearMatroid):
....: [0, 1, 0, 1, 0, 1, 1],
....: [0, 0, 1, 0, 1, 1, 1]]),
....: regular=True, check=False)
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False, {'error': 'the representation matrix is not totally unimodular'})
sage: M = Matroid(graphs.PetersenGraph())
sage: M.is_valid()
True
"""
M = LinearMatroid(ring=QQ, reduced_matrix=self.representation(self.basis(), True, False))
CR = M.cross_ratios()
- return CR.issubset(set([1]))
+ if CR.issubset(set([1])):
+ return True if not certificate else (True, {})
+ return False if not certificate else (False, {"error": "the representation matrix is not totally unimodular"})
# representation
@@ -6313,7 +6337,7 @@ cdef class RegularMatroid(LinearMatroid):
"""
return True
- cpdef binary_matroid(self, randomized_tests=1, verify = True):
+ cpdef binary_matroid(self, randomized_tests=1, verify=True):
r"""
Return a binary matroid representing ``self``.
@@ -6368,7 +6392,7 @@ cdef class RegularMatroid(LinearMatroid):
"""
return True
- cpdef ternary_matroid(self, randomized_tests=1, verify = True):
+ cpdef ternary_matroid(self, randomized_tests=1, verify=True):
r"""
Return a ternary matroid representing ``self``.
diff --git a/src/sage/matroids/matroid.pxd b/src/sage/matroids/matroid.pxd
index 6218cb804f4..fb8d8a2939c 100644
--- a/src/sage/matroids/matroid.pxd
+++ b/src/sage/matroids/matroid.pxd
@@ -105,7 +105,7 @@ cdef class Matroid(SageObject):
cpdef is_coclosed(self, X)
# verification
- cpdef bint is_valid(self) noexcept
+ cpdef is_valid(self, certificate=*)
# enumeration
cpdef SetSystem circuits(self, k=*)
@@ -234,9 +234,9 @@ cdef class Matroid(SageObject):
cpdef broken_circuit_complex(self, ordering=*)
# visualization
- cpdef plot(self,B=*,lineorders=*,pos_method=*,pos_dict=*,save_pos=*)
- cpdef show(self,B=*,lineorders=*,pos_method=*,pos_dict=*,save_pos=*,lims=*)
- cpdef _fix_positions(self,pos_dict=*,lineorders=*)
+ cpdef plot(self, B=*, lineorders=*, pos_method=*, pos_dict=*, save_pos=*)
+ cpdef show(self, B=*, lineorders=*, pos_method=*, pos_dict=*, save_pos=*, lims=*)
+ cpdef _fix_positions(self, pos_dict=*, lineorders=*)
# construction
cpdef direct_sum(self, matroids)
diff --git a/src/sage/matroids/matroid.pyx b/src/sage/matroids/matroid.pyx
index 0384ff81a22..ff853ba9f5a 100644
--- a/src/sage/matroids/matroid.pyx
+++ b/src/sage/matroids/matroid.pyx
@@ -2306,7 +2306,7 @@ cdef class Matroid(SageObject):
# verification
- cpdef bint is_valid(self) noexcept:
+ cpdef is_valid(self, certificate=False):
r"""
Test if the data obey the matroid axioms.
@@ -2320,7 +2320,11 @@ cdef class Matroid(SageObject):
Certain subclasses may check other axioms instead.
- OUTPUT: boolean
+ INPUT:
+
+ - ``certificate`` -- boolean (default: ``False``)
+
+ OUTPUT: boolean, or (boolean, dictionary)
EXAMPLES::
@@ -2341,8 +2345,10 @@ cdef class Matroid(SageObject):
sage: def r(X):
....: return -1
sage: M = Matroid(groundset=[0,1,2], rank_function=r)
- sage: M.is_valid()
- False
+ sage: M.is_valid(certificate=True)
+ (False,
+ {'error': "the rank must be between 0 and the set's cardinality",
+ 'set': frozenset()})
"""
cdef int i, j, rX, rY
cdef frozenset X, Y, E = self.groundset()
@@ -2351,17 +2357,17 @@ cdef class Matroid(SageObject):
X = frozenset(Xt)
rX = self._rank(X)
if rX > i or rX < 0:
- return False
+ return False if not certificate else (False, {"error": "the rank must be between 0 and the set's cardinality", "set": X})
for j in range(i, len(E) + 1):
for Yt in combinations(E, j):
Y = frozenset(Yt)
rY = self._rank(Y)
if X.issubset(Y) and rX > rY:
- return False
+ return False if not certificate else (False, {"error": "the rank function must be monotonic", "set 1": X, "set 2": Y})
if (self._rank(X.union(Y)) +
self._rank(X.intersection(Y)) > rX + rY):
- return False
- return True
+ return False if not certificate else (False, {"error": "the rank function must be submodular", "set 1": X, "set 2": Y})
+ return True if not certificate else (True, {})
# enumeration
@@ -6307,7 +6313,7 @@ cdef class Matroid(SageObject):
from sage.matroids.linear_matroid import BinaryMatroid
return BinaryMatroid(groundset=E, matrix=A, basis=list(basis), keep_initial_representation=False)
- cpdef binary_matroid(self, randomized_tests=1, verify = True):
+ cpdef binary_matroid(self, randomized_tests=1, verify=True):
r"""
Return a binary matroid representing ``self``, if such a
representation exists.
@@ -6486,7 +6492,7 @@ cdef class Matroid(SageObject):
from sage.matroids.linear_matroid import TernaryMatroid
return TernaryMatroid(groundset=E, matrix=A, basis=basis, keep_initial_representation=False)
- cpdef ternary_matroid(self, randomized_tests=1, verify = True):
+ cpdef ternary_matroid(self, randomized_tests=1, verify=True):
r"""
Return a ternary matroid representing ``self``, if such a
representation exists.
@@ -8028,111 +8034,84 @@ cdef class Matroid(SageObject):
return [F for F in FF if fsol[F]]
- def chow_ring(self, R=None):
+ def chow_ring(self, R, augmented=False, presentation=None):
r"""
- Return the Chow ring of ``self`` over ``R``.
-
- Let `M` be a matroid and `R` be a commutative ring.
- The *Chow ring* of `M` is the quotient ring
-
- .. MATH::
+ Return the (augmented) Chow ring of ``self`` over ``R``.
- A^*(M)_R := R[x_{F_1}, \ldots, x_{F_k}] / (Q_M + L_M),
-
- where
-
- - `F_1, \ldots, F_k` are the non-empty proper flats of `M`,
- - `Q_M` is the ideal generated by all `x_{F_i} x_{F_j}` where
- `F_i` and `F_j` are incomparable elements in the lattice of
- flats, and
- - `L_M` is the ideal generated by all linear forms
-
- .. MATH::
-
- \sum_{i_1 \in F} x_F - \sum_{i_2 \in F} x_F
+ .. SEEALSO::
- for all `i_1 \neq i_2 \in E`.
+ - :mod:`sage.matroids.chow_ring_ideal`
+ - :mod:`sage.matroids.chow_ring`
INPUT:
- - ``R`` -- (default: `\ZZ`) the base ring
+ - ``M`` -- matroid
+ - ``R`` -- commutative ring
+ - ``augmented`` -- boolean (default: ``False``); when ``True``, this
+ is the augmented Chow ring and if ``False``, this is the
+ non-augmented Chow ring
+ - ``presentation`` -- string; if ``augmented=True``, then this
+ must be one of the following (ignored if ``augmented=False``):
+
+ * ``"fy"`` - the Feitchner-Yuzvinsky presentation
+ * ``"atom-free"`` - the atom-free presentation
EXAMPLES::
sage: M = matroids.Wheel(2)
- sage: A = M.chow_ring(); A
- Chow ring of Wheel(2): Regular matroid of rank 2 on 4 elements
- with 5 bases over Integer Ring
- sage: A.gens() # needs sage.libs.singular
- (A23, A23, A23)
- sage: A23 = A.gen(0) # needs sage.libs.singular
- sage: A23*A23 # needs sage.libs.singular
+ sage: A = M.chow_ring(R=ZZ, augmented=False); A
+ Chow ring of Wheel(2): Regular matroid of rank 2 on 4 elements with
+ 5 bases over Integer Ring
+ sage: A.defining_ideal()._gens_constructor(A.defining_ideal().ring())
+ [A0*A1, A0*A23, A1*A23, A0 + A0123, A1 + A0123, A23 + A0123]
+ sage: A23 = A.gen(0)
+ sage: A23*A23
0
We construct a more interesting example using the Fano matroid::
sage: M = matroids.catalog.Fano()
sage: A = M.chow_ring(QQ); A
- Chow ring of Fano: Binary matroid of rank 3 on 7 elements,
- type (3, 0) over Rational Field
+ Chow ring of Fano: Binary matroid of rank 3 on 7 elements, type (3, 0)
+ over Rational Field
Next we get the non-trivial generators and do some computations::
sage: # needs sage.libs.singular sage.rings.finite_rings
- sage: G = A.gens()[6:]
- sage: Ag, Aabf, Aace, Aadg, Abcd, Abeg, Acfg, Adef = G
- sage: Ag * Ag
- 2*Adef^2
- sage: Ag * Abeg
- -Adef^2
+ sage: G = A.gens()[7:]; G
+ (Aabf, Aace, Aadg, Abcd, Abeg, Acfg, Adef, Aabcdefg)
+ sage: Aabf, Aace, Aadg, Abcd, Abeg, Acfg, Adef, Aabcdefg = G
+ sage: Aabf*Aabf
+ -Aabcdefg^2
+ sage: Aabf*Acfg
+ 0
sage: matrix([[x * y for x in G] for y in G])
- [2*Adef^2 0 0 -Adef^2 0 -Adef^2 -Adef^2 0]
- [ 0 Adef^2 0 0 0 0 0 0]
- [ 0 0 Adef^2 0 0 0 0 0]
- [ -Adef^2 0 0 Adef^2 0 0 0 0]
- [ 0 0 0 0 Adef^2 0 0 0]
- [ -Adef^2 0 0 0 0 Adef^2 0 0]
- [ -Adef^2 0 0 0 0 0 Adef^2 0]
- [ 0 0 0 0 0 0 0 Adef^2]
-
- REFERENCES:
+ [-Aabcdefg^2 0 0 0 0 0 0 0]
+ [ 0 -Aabcdefg^2 0 0 0 0 0 0]
+ [ 0 0 -Aabcdefg^2 0 0 0 0 0]
+ [ 0 0 0 -Aabcdefg^2 0 0 0 0]
+ [ 0 0 0 0 -Aabcdefg^2 0 0 0]
+ [ 0 0 0 0 0 -Aabcdefg^2 0 0]
+ [ 0 0 0 0 0 0 -Aabcdefg^2 0]
+ [ 0 0 0 0 0 0 0 Aabcdefg^2]
+
+ The augmented Chow ring can also be constructed with the
+ Feitchner-Yuzvinsky and atom-free presentation::
+
+ sage: M = matroids.Wheel(3)
+ sage: ch = M.chow_ring(QQ, augmented=True, presentation='fy'); ch
+ Augmented Chow ring of Wheel(3): Regular matroid of rank 3 on
+ 6 elements with 16 bases in Feitchner-Yuzvinsky presentation over
+ Rational Field
+ sage: M = matroids.Uniform(3, 6)
+ sage: ch = M.chow_ring(QQ, augmented=True, presentation='atom-free'); ch
+ Augmented Chow ring of U(3, 6): Matroid of rank 3 on 6 elements with circuit-closures
+ {3: {{0, 1, 2, 3, 4, 5}}} in atom-free presentation over Rational Field
+ """
+ from sage.matroids.chow_ring import ChowRing
+ return ChowRing(M=self, R=R, augmented=augmented, presentation=presentation)
- - [FY2004]_
- - [AHK2015]_
- """
- # Setup
- if R is None:
- R = ZZ
- # We only want proper flats
- flats = [X for i in range(1, self.rank())
- for X in self.flats(i)]
- E = list(self.groundset())
- flats_containing = {x: [] for x in E}
- for i,F in enumerate(flats):
- for x in F:
- flats_containing[x].append(i)
-
- # Create the ambient polynomial ring
- from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
- try:
- names = ['A{}'.format(''.join(str(x) for x in sorted(F, key=cmp_elements_key))) for F in flats]
- P = PolynomialRing(R, names)
- except ValueError: # variables are not proper names
- P = PolynomialRing(R, 'A', len(flats))
- names = P.variable_names()
- gens = P.gens()
- # Create the ideal of quadratic relations
- Q = [gens[i] * gens[i+j+1] for i,F in enumerate(flats)
- for j,G in enumerate(flats[i+1:]) if not (F < G or G < F)]
- # Create the ideal of linear relations
- L = [sum(gens[i] for i in flats_containing[x])
- - sum(gens[i] for i in flats_containing[y])
- for j,x in enumerate(E) for y in E[j+1:]]
- ret = P.quotient(Q + L, names=names)
- ret.rename("Chow ring of {} over {}".format(self, R))
- return ret
-
- cpdef plot(self, B=None, lineorders=None, pos_method=None,pos_dict=None,save_pos=False):
+ cpdef plot(self, B=None, lineorders=None, pos_method=None, pos_dict=None, save_pos=False):
"""
Return geometric representation as a sage graphics object.
diff --git a/src/sage/matroids/matroids_plot_helpers.py b/src/sage/matroids/matroids_plot_helpers.py
index 5f09905844b..8cfea95f12e 100644
--- a/src/sage/matroids/matroids_plot_helpers.py
+++ b/src/sage/matroids/matroids_plot_helpers.py
@@ -859,7 +859,6 @@ def geomrep(M1, B1=None, lineorders1=None, pd=None, sp=False):
pl = [list(x) for x in pts2.values()]
lims = tracklims([None, None, None, None], [pt[0] for pt in pl],
[pt[1] for pt in pl])
- j = 0
for ll in trilines:
if len(ll) >= 3:
ptsx, ptsy, x_i, y_i = createline(pts2, ll, lineorders1)
diff --git a/src/sage/meson.build b/src/sage/meson.build
index 687ac549c10..80b2a030518 100644
--- a/src/sage/meson.build
+++ b/src/sage/meson.build
@@ -6,7 +6,7 @@ conf_data = configuration_data()
conf_data.set('PACKAGE_VERSION', '1.2.3')
conf_data.set('SAGE_ROOT', meson.current_source_dir() / '..' / '..')
# We use Python's prefix here to make it work with conda
-prefix = py.get_variable('prefix', '')
+prefix = fs.as_posix(py.get_variable('prefix', ''))
conf_data.set('prefix', prefix)
datadir = fs.expanduser(get_option('datadir'))
if not fs.is_absolute(datadir)
@@ -56,7 +56,7 @@ ecm_bin = find_program(['ecm', 'gmp-ecm'], required: true)
conf_data.set('SAGE_ECMBIN', ecm_bin.full_path())
config_file = configure_file(
- input: '../../pkgs/sage-conf_conda/_sage_conf/_conf.py.in',
+ input: '../../pkgs/sage-conf/_sage_conf/_conf.py.in',
output: 'config.py',
install_dir: py.get_install_dir() / 'sage',
install: true,
@@ -86,7 +86,6 @@ foreach package : no_processing
endforeach
py.install_sources(
- config_file,
'all.py',
'all__sagemath_bliss.py',
'all__sagemath_categories.py',
diff --git a/src/sage/misc/binary_tree.pyx b/src/sage/misc/binary_tree.pyx
index 583e397a845..0756218e53c 100644
--- a/src/sage/misc/binary_tree.pyx
+++ b/src/sage/misc/binary_tree.pyx
@@ -491,7 +491,7 @@ class Test:
def random(self):
self.binary_tree()
- def binary_tree(self, values = 100, cycles = 100000):
+ def binary_tree(self, values=100, cycles=100000):
"""
Perform a sequence of random operations, given random inputs
to stress test the binary tree structure.
diff --git a/src/sage/misc/c3.pyx b/src/sage/misc/c3.pyx
index bd8057b361f..8dc7e9a9feb 100644
--- a/src/sage/misc/c3.pyx
+++ b/src/sage/misc/c3.pyx
@@ -177,7 +177,7 @@ cpdef list C3_algorithm(object start, str bases, str attribute, bint proper):
out = []
else:
out = [start]
- cdef list args = getattr(start,bases)
+ cdef list args = getattr(start, bases)
if not args:
return out
# Data structure / invariants:
diff --git a/src/sage/misc/c3_controlled.pyx b/src/sage/misc/c3_controlled.pyx
index 81f66f0c680..885dcf673f0 100644
--- a/src/sage/misc/c3_controlled.pyx
+++ b/src/sage/misc/c3_controlled.pyx
@@ -656,7 +656,7 @@ def C3_merge(list lists):
break
if not next_item_found:
# No head is available
- raise ValueError("Cannot merge the items %s."%', '.join(repr(head) for head in heads))
+ raise ValueError("Cannot merge the items %s." % ', '.join(repr(head) for head in heads))
return out
@@ -953,7 +953,7 @@ cpdef tuple C3_sorted_merge(list lists, key=identity):
last_list_non_empty = False
#check_state()
suggestion.update(holder.values())
- cdef list suggestion_list = sorted(suggestion, key = key, reverse=True)
+ cdef list suggestion_list = sorted(suggestion, key=key, reverse=True)
#assert C3_merge(lists[:-1]+[suggestion_list]) == out
return (out, suggestion_list)
@@ -1353,7 +1353,7 @@ class HierarchyElement(object, metaclass=ClasscallMetaclass):
super_classes = tuple(self._from_value(base).cls for base in self._bases_controlled)
if not super_classes:
super_classes = (object,)
- return dynamic_class("%s.cls"%self, super_classes)
+ return dynamic_class("%s.cls" % self, super_classes)
@cached_method
def all_bases(self):
diff --git a/src/sage/misc/cachefunc.pyx b/src/sage/misc/cachefunc.pyx
index f78b390e031..52c10174dca 100644
--- a/src/sage/misc/cachefunc.pyx
+++ b/src/sage/misc/cachefunc.pyx
@@ -69,7 +69,7 @@ be defined by simply using the decorator. However, an indirect
approach is still needed for cpdef methods::
sage: # needs sage.misc.cython
- sage: cython_code = ['cpdef test_meth(self,x):',
+ sage: cython_code = ['cpdef test_meth(self, x):',
....: ' "some doc for a wrapped cython method"',
....: ' return -x',
....: 'from sage.misc.cachefunc import cached_method',
@@ -154,7 +154,7 @@ hardly by used.
sage: cython_code = ["from sage.structure.element cimport Element, ElementWithCachedMethod", "from cpython.object cimport PyObject_RichCompare",
....: "cdef class MyBrokenElement(Element):",
....: " cdef public object x",
- ....: " def __init__(self,P,x):",
+ ....: " def __init__(self, P, x):",
....: " self.x=x",
....: " Element.__init__(self,P)",
....: " def __neg__(self):",
@@ -169,7 +169,7 @@ hardly by used.
....: " return -self",
....: "cdef class MyElement(ElementWithCachedMethod):",
....: " cdef public object x",
- ....: " def __init__(self,P,x):",
+ ....: " def __init__(self, P, x):",
....: " self.x=x",
....: " ElementWithCachedMethod.__init__(self,P)",
....: " def __neg__(self):",
@@ -267,7 +267,7 @@ Introspection works::
Some doc for direct method
sage: print(sage_getsource(O.wrapped_method))
- cpdef test_meth(self,x):
+ cpdef test_meth(self, x):
"some doc for a wrapped cython method"
return -x
sage: print(sage_getsource(O.direct_method))
@@ -312,7 +312,7 @@ latter is easy::
....: "cdef class MyClass:",
....: " cdef public dict _cached_methods",
....: " @cached_method",
- ....: " def f(self, a,b):",
+ ....: " def f(self, a, b):",
....: " return a*b"]
sage: cython(os.linesep.join(cython_code))
sage: P = MyClass()
@@ -333,7 +333,7 @@ enough in the following example::
....: " cdef dict D",
....: " def __init__(self):",
....: " self.D = {}",
- ....: " def __setattr__(self, n,v):",
+ ....: " def __setattr__(self, n, v):",
....: " self.D[n] = v",
....: " def __getattribute__(self, n):",
....: " try:",
@@ -342,7 +342,7 @@ enough in the following example::
....: " pass",
....: " return getattr(type(self),n).__get__(self)",
....: " @cached_method",
- ....: " def f(self, a,b):",
+ ....: " def f(self, a, b):",
....: " return a+b"]
sage: cython(os.linesep.join(cython_code))
sage: Q = MyOtherClass()
@@ -1607,7 +1607,7 @@ class CachedMethodPickle():
"""
return CachedMethodPickle,(self._instance,self._name,self._cache)
- def __call__(self,*args,**kwds):
+ def __call__(self, *args, **kwds):
"""
The purpose of this call method is to kill ``self`` and to
replace it by an actual :class:`CachedMethodCaller`. The last
@@ -1636,9 +1636,9 @@ class CachedMethodPickle():
else:
for k, v in self._cache:
CM.cache[k] = v
- return CM(*args,**kwds)
+ return CM(*args, **kwds)
- def __getattr__(self,s):
+ def __getattr__(self, s):
"""
TESTS::
@@ -1692,7 +1692,7 @@ cdef class CachedMethodCaller(CachedFunction):
sage: class A:
....: @cached_method
- ....: def bar(self,x):
+ ....: def bar(self, x):
....: return x^2
sage: a = A()
sage: a.bar
@@ -1718,7 +1718,7 @@ cdef class CachedMethodCaller(CachedFunction):
sage: class A:
....: @cached_method(do_pickle=True)
- ....: def bar(self,x):
+ ....: def bar(self, x):
....: return x^2
sage: __main__.A = A
@@ -1739,7 +1739,7 @@ cdef class CachedMethodCaller(CachedFunction):
....: def __init__(self, x):
....: self._x = x
....: @cached_method
- ....: def f(self,*args):
+ ....: def f(self, *args):
....: return self._x^2
sage: a = Foo(2)
sage: a.f.cache
@@ -1812,7 +1812,7 @@ cdef class CachedMethodCaller(CachedFunction):
....: def __init__(self, x):
....: self._x = x
....: @cached_method
- ....: def f(self,n=2):
+ ....: def f(self, n=2):
....: return self._x^n
sage: a = Foo(2)
sage: a.f()
@@ -1865,7 +1865,7 @@ cdef class CachedMethodCaller(CachedFunction):
sage: from sage.misc.superseded import deprecated_function_alias
sage: class Foo:
....: @cached_method
- ....: def f(self, x,y=1):
+ ....: def f(self, x, y=1):
....: return x+y
....: g = deprecated_function_alias(57, f)
sage: a = Foo()
@@ -2629,7 +2629,7 @@ cdef class CachedMethod():
....: def __init__(self, x):
....: self._x = x
....: @cached_method
- ....: def f(self,n):
+ ....: def f(self, n):
....: return self._x^n
....: @cached_method
....: def f0(self):
@@ -2708,7 +2708,7 @@ cdef class CachedMethod():
....: def __init__(self, x):
....: self._x = x
....: @cached_method
- ....: def f(self,n=2):
+ ....: def f(self, n=2):
....: return self._x^n
....: g = deprecated_function_alias(57, f)
sage: a = Foo(2)
@@ -2742,7 +2742,7 @@ cdef class CachedMethod():
....: def __init__(self, x):
....: self._x = x
....: @cached_method
- ....: def f(self,n=2):
+ ....: def f(self, n=2):
....: return self._x^n
sage: a = Foo(2)
sage: a.f()
@@ -2778,7 +2778,7 @@ cdef class CachedMethod():
....: def f(self):
....: return 1
....: @cached_method
- ....: def g(self, x,n=3):
+ ....: def g(self, x, n=3):
....: return x^n
sage: a = Foo()
sage: type(a.f)
@@ -3509,9 +3509,9 @@ class FileCache():
sage: print(N[len(dir):])
foo-1_2
"""
- a,k = key
- kwdstr = '_'.join(['%s-%s'%x for x in k])
- argstr = '_'.join(['%s'%x for x in a])
+ a, k = key
+ kwdstr = '_'.join('%s-%s' % x for x in k)
+ argstr = '_'.join('%s' % x for x in a)
if kwdstr and argstr:
keystr = kwdstr + '.' + argstr
else:
@@ -3685,7 +3685,7 @@ class disk_cached_function:
sage: foo(200)
1/200
"""
- def __init__(self, dir, memory_cache = False, key=None):
+ def __init__(self, dir, memory_cache=False, key=None):
"""
EXAMPLES::
diff --git a/src/sage/misc/constant_function.pyx b/src/sage/misc/constant_function.pyx
index 59cb785883d..2e9c3d9fe44 100644
--- a/src/sage/misc/constant_function.pyx
+++ b/src/sage/misc/constant_function.pyx
@@ -94,7 +94,7 @@ cdef class ConstantFunction(SageObject):
sage: ConstantFunction(1)
The constant function (...) -> 1
"""
- return "The constant function (...) -> %s"%self._value
+ return "The constant function (...) -> %s" % self._value
def __call__(self, *args):
"""
diff --git a/src/sage/misc/decorators.py b/src/sage/misc/decorators.py
index e91acf5b5a9..f93f1227448 100644
--- a/src/sage/misc/decorators.py
+++ b/src/sage/misc/decorators.py
@@ -319,19 +319,19 @@ def decorator_defaults(func):
sage: from sage.misc.decorators import decorator_defaults
sage: @decorator_defaults
- ....: def my_decorator(f,*args,**kwds):
+ ....: def my_decorator(f, *args, **kwds):
....: print(kwds)
....: print(args)
....: print(f.__name__)
sage: @my_decorator
- ....: def my_fun(a,b):
+ ....: def my_fun(a, b):
....: return a,b
{}
()
my_fun
sage: @my_decorator(3,4,c=1,d=2)
- ....: def my_fun(a,b):
+ ....: def my_fun(a, b):
....: return a,b
{'c': 1, 'd': 2}
(3, 4)
diff --git a/src/sage/misc/fpickle.pyx b/src/sage/misc/fpickle.pyx
index fd192f1bf02..7a45ecc4f75 100644
--- a/src/sage/misc/fpickle.pyx
+++ b/src/sage/misc/fpickle.pyx
@@ -17,7 +17,7 @@ def code_ctor(*args):
This indirectly tests this function. ::
- sage: def foo(a,b,c=10): return a+b+c
+ sage: def foo(a, b, c=10): return a+b+c
sage: sage.misc.fpickle.reduce_code(foo.__code__)
(, ...)
sage: unpickle_function(pickle_function(foo))
@@ -96,7 +96,7 @@ def unpickle_function(pickled):
EXAMPLES::
- sage: def f(N,M): return N*M
+ sage: def f(N, M): return N*M
...
sage: unpickle_function(pickle_function(f))(3,5)
15
diff --git a/src/sage/misc/function_mangling.pyx b/src/sage/misc/function_mangling.pyx
index 79e508f19b8..e410a49a900 100644
--- a/src/sage/misc/function_mangling.pyx
+++ b/src/sage/misc/function_mangling.pyx
@@ -47,7 +47,7 @@ cdef class ArgumentFixer:
watching the caller. For example,
::
- sage: def f(x = 10):
+ sage: def f(x=10):
....: return min(1,x)
the following calls are equivalent,
@@ -63,7 +63,7 @@ cdef class ArgumentFixer:
but from the perspective of a wrapper, they are different::
sage: def wrap(g):
- ....: def _g(*args,**kwargs):
+ ....: def _g(*args, **kwargs):
....: print("{} {}".format(args, kwargs))
....: return g(*args, **kwargs)
....: return _g
@@ -92,7 +92,7 @@ cdef class ArgumentFixer:
....: af = ArgumentFixer(g)
....: def _g(*args, **kwargs):
....: print(af.fix_to_pos())
- ....: return g(*args,**kwargs)
+ ....: return g(*args, **kwargs)
....: return _g
sage: h2 = wrap2(f)
sage: t = h2()
@@ -105,13 +105,13 @@ cdef class ArgumentFixer:
::
sage: class one:
- ....: def __init__(self, x = 1):
+ ....: def __init__(self, x=1):
....: self.x = x
sage: af = ArgumentFixer(one.__init__, classmethod=True)
sage: af.fix_to_pos(1,2,3,a=31,b=2,n=3)
((1, 2, 3), (('a', 31), ('b', 2), ('n', 3)))
"""
- def __init__(self, f, classmethod = False):
+ def __init__(self, f, classmethod=False):
try:
arg_names, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations = sage_getargspec(f)
except AttributeError:
@@ -157,9 +157,9 @@ cdef class ArgumentFixer:
sage: g = ArgumentFixer(number_of_partitions); g # needs sage.combinat
Argument Fixer of
"""
- return "Argument Fixer of %s"%self.f
+ return "Argument Fixer of %s" % self.f
- def fix_to_named(self, *args,**kwargs):
+ def fix_to_named(self, *args, **kwargs):
"""
Normalize the arguments with a preference for named arguments.
@@ -185,7 +185,7 @@ cdef class ArgumentFixer:
::
A,K = self.fix_to_pos(...)
- self.f(*A,**dict(K))`
+ self.f(*A, **dict(K))`
and
::
@@ -247,7 +247,7 @@ cdef class ArgumentFixer:
::
A,K = self.fix_to_pos(...)
- self.f(*A,**dict(K))
+ self.f(*A, **dict(K))
are equivalent to
::
diff --git a/src/sage/misc/gperftools.py b/src/sage/misc/gperftools.py
index 8e89dadef6d..056a09d6f97 100644
--- a/src/sage/misc/gperftools.py
+++ b/src/sage/misc/gperftools.py
@@ -100,28 +100,6 @@ def _repr_(self):
"""
return 'Profiler logging to {0}'.format(self.filename())
- def _libc(self):
- """
- Return libc.
-
- OUTPUT: a ctypes shared library handle
-
- EXAMPLES::
-
- sage: from sage.misc.gperftools import Profiler
- sage: Profiler()._libc()
-
- """
- global libc
- if libc is not None:
- return libc
- name = find_library('c')
- if name:
- libc = ctypes.CDLL(name)
- return libc
- else:
- raise ImportError('failed to open libc')
-
def _libprofiler(self):
"""
Return libprofiler.
@@ -159,10 +137,11 @@ def start(self):
PROFILE: interrupts/evictions/bytes = ...
"""
from signal import SIGPROF, SIG_DFL
- self._previous_sigprof_handler = self._libc().signal(SIGPROF, SIG_DFL)
+ from cysignals.pysignals import setossignal
+ self._previous_sigprof_handler = setossignal(SIGPROF, SIG_DFL)
profiler = self._libprofiler()
self._t_start = time.time()
- rc = profiler.ProfilerStart(self.filename())
+ rc = profiler.ProfilerStart(str.encode(self.filename()))
if rc < 0:
raise ValueError('profiler failed to start')
diff --git a/src/sage/misc/lazy_list.pyx b/src/sage/misc/lazy_list.pyx
index ca65a92fc88..65d397996fc 100644
--- a/src/sage/misc/lazy_list.pyx
+++ b/src/sage/misc/lazy_list.pyx
@@ -823,8 +823,8 @@ cdef class lazy_list_generic():
stop = self.start + stop * self.step
if stop > self.stop:
stop = self.stop
- if stop != PY_SSIZE_T_MAX and stop%step != start%step:
- stop = stop - (stop-start)%step + step
+ if stop != PY_SSIZE_T_MAX and stop % step != start % step:
+ stop = stop - (stop - start) % step + step
if stop <= start:
return empty_lazy_list
diff --git a/src/sage/misc/meson.build b/src/sage/misc/meson.build
index bd05d525252..f4ba17ef30a 100644
--- a/src/sage/misc/meson.build
+++ b/src/sage/misc/meson.build
@@ -124,13 +124,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, gmp]
+ if name == 'binary_tree'
+ deps += [cysignals]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/misc',
install: true,
include_directories: [inc_cpython, inc_rings],
- dependencies: [py_dep, cysignals, gmp],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/misc/parser.pyx b/src/sage/misc/parser.pyx
index 7a2c2cc99a4..522f5ebf55e 100644
--- a/src/sage/misc/parser.pyx
+++ b/src/sage/misc/parser.pyx
@@ -204,7 +204,7 @@ cdef class Tokenizer:
token = self.next()
return all
- cpdef reset(self, int pos = 0):
+ cpdef reset(self, int pos=0):
"""
Reset the tokenizer to a given position.
diff --git a/src/sage/misc/persist.pyx b/src/sage/misc/persist.pyx
index 55540dc27b7..7429388112e 100644
--- a/src/sage/misc/persist.pyx
+++ b/src/sage/misc/persist.pyx
@@ -456,14 +456,14 @@ def register_unpickle_override(module, name, callable, call_name=None):
::
sage: class A():
- ....: def __init__(self,value):
+ ....: def __init__(self, value):
....: self.original_attribute = value
....: def __repr__(self):
....: return 'A(%s)' % self.original_attribute
sage: class B():
- ....: def __init__(self,value):
+ ....: def __init__(self, value):
....: self.new_attribute = value
- ....: def __setstate__(self,state):
+ ....: def __setstate__(self, state):
....: try:
....: self.new_attribute = state['new_attribute']
....: except KeyError: # an old pickle
@@ -1232,7 +1232,7 @@ def db(name):
The database directory is ``$HOME/.sage/db``.
"""
from sage.misc.misc import SAGE_DB
- return load('%s/%s'%(SAGE_DB,name))
+ return load('%s/%s' % (SAGE_DB, name))
def db_save(x, name=None):
@@ -1245,4 +1245,4 @@ def db_save(x, name=None):
x.db(name)
except AttributeError:
from sage.misc.misc import SAGE_DB
- save(x, '%s/%s'%(SAGE_DB,name))
+ save(x, '%s/%s' % (SAGE_DB, name))
diff --git a/src/sage/misc/rest_index_of_methods.py b/src/sage/misc/rest_index_of_methods.py
index 0d1d46f63b7..e7d4ca448ff 100644
--- a/src/sage/misc/rest_index_of_methods.py
+++ b/src/sage/misc/rest_index_of_methods.py
@@ -275,7 +275,7 @@ def local_filter(f, name):
else:
return not any(hasattr(s, name) for s in superclasses)
else:
- return inspect.isclass(root) or not (f is gen_rest_table_index)
+ return inspect.isclass(root) or f is not gen_rest_table_index
def can_import(f):
# poke it to provoke a lazy import to resolve
diff --git a/src/sage/misc/sageinspect.py b/src/sage/misc/sageinspect.py
index 1f2a39d7c78..585112b5061 100644
--- a/src/sage/misc/sageinspect.py
+++ b/src/sage/misc/sageinspect.py
@@ -238,11 +238,11 @@ def _extract_embedded_position(docstring):
The following has been fixed in :issue:`13916`::
- sage: cython('''cpdef test_funct(x,y): return''') # needs sage.misc.cython
+ sage: cython('''cpdef test_funct(x, y): return''') # needs sage.misc.cython
sage: func_doc = inspect.getdoc(test_funct) # needs sage.misc.cython
sage: with open(_extract_embedded_position(func_doc)[1]) as f: # needs sage.misc.cython
....: print(f.read())
- cpdef test_funct(x,y): return
+ cpdef test_funct(x, y): return
Ensure that the embedded filename of the compiled function is
correct. In particular it should be relative to ``spyx_tmp()`` in
@@ -252,11 +252,11 @@ def _extract_embedded_position(docstring):
sage: from sage.env import DOT_SAGE
sage: from sage.misc.sage_ostools import restore_cwd
sage: with restore_cwd(DOT_SAGE): # needs sage.misc.cython
- ....: cython('''cpdef test_funct(x,y): return''')
+ ....: cython('''cpdef test_funct(x, y): return''')
sage: func_doc = inspect.getdoc(test_funct) # needs sage.misc.cython
sage: with open(_extract_embedded_position(func_doc)[1]) as f: # needs sage.misc.cython
....: print(f.read())
- cpdef test_funct(x,y): return
+ cpdef test_funct(x, y): return
"""
try:
res = __embedded_position_re.search(docstring)
@@ -1093,7 +1093,7 @@ def _sage_getargspec_cython(source):
Some malformed input is detected::
- sage: sgc('def f(x,y')
+ sage: sgc('def f(x, y')
Traceback (most recent call last):
...
SyntaxError: Unexpected EOF while parsing argument list
@@ -1484,7 +1484,7 @@ def sage_getargspec(obj):
....: 'cdef class MyClass:',
....: ' def _sage_src_(self):',
....: ' return "def foo(x, a=\\\')\\\"\\\', b={(2+1):\\\'bar\\\', not 1:3, 3<<4:5}): return\\n"',
- ....: ' def __call__(self, m,n): return "something"']
+ ....: ' def __call__(self, m, n): return "something"']
sage: cython('\n'.join(cython_code))
sage: O = MyClass()
sage: print(sage.misc.sageinspect.sage_getsource(O))
@@ -1525,11 +1525,11 @@ def foo(x, a='\')"', b={not (2+1==3):'bar'}): return
....: '''
....: class Foo:
....: @staticmethod
- ....: def join(categories, bint as_list = False, tuple ignore_axioms=(), tuple axioms=()): pass
+ ....: def join(categories, bint as_list=False, tuple ignore_axioms=(), tuple axioms=()): pass
....: cdef class Bar:
....: @staticmethod
- ....: def join(categories, bint as_list = False, tuple ignore_axioms=(), tuple axioms=()): pass
- ....: cpdef meet(categories, bint as_list = False, tuple ignore_axioms=(), tuple axioms=()): pass
+ ....: def join(categories, bint as_list=False, tuple ignore_axioms=(), tuple axioms=()): pass
+ ....: cpdef meet(categories, bint as_list=False, tuple ignore_axioms=(), tuple axioms=()): pass
....: ''')
sage: sage_getargspec(Foo.join)
FullArgSpec(args=['categories', 'as_list', 'ignore_axioms', 'axioms'], varargs=None, varkw=None,
@@ -1865,28 +1865,10 @@ def _sage_getdoc_unformatted(obj):
sage: _sage_getdoc_unformatted(isinstance.__class__)
''
- Construct an object raising an exception when accessing the
- ``__doc__`` attribute. This should not give an error in
- ``_sage_getdoc_unformatted``, see :issue:`19671`::
-
- sage: class NoSageDoc():
- ....: @property
- ....: def __doc__(self):
- ....: raise Exception("no doc here")
- sage: obj = NoSageDoc()
- sage: obj.__doc__
- Traceback (most recent call last):
- ...
- Exception: no doc here
- sage: _sage_getdoc_unformatted(obj)
- ''
"""
if obj is None:
return ''
- try:
- r = obj.__doc__
- except Exception:
- return ''
+ r = obj.__doc__
# Check if the __doc__ attribute was actually a string, and
# not a 'getset_descriptor' or similar.
@@ -2005,7 +1987,7 @@ def sage_getdoc(obj, obj_name='', embedded=False):
sage: from sage.misc.sageinspect import sage_getdoc
sage: sage_getdoc(identity_matrix)[87:124] # needs sage.modules
'Return the n x n identity matrix over'
- sage: def f(a,b,c,d=1): return a+b+c+d
+ sage: def f(a, b, c, d=1): return a+b+c+d
...
sage: import functools
sage: f1 = functools.partial(f, 1,c=2)
@@ -2244,9 +2226,9 @@ def sage_getsourcelines(obj):
TESTS::
sage: # needs sage.misc.cython
- sage: cython('''cpdef test_funct(x,y): return''')
+ sage: cython('''cpdef test_funct(x, y): return''')
sage: sage_getsourcelines(test_funct)
- (['cpdef test_funct(x,y): return\n'], 1)
+ (['cpdef test_funct(x, y): return\n'], 1)
The following tests that an instance of ``functools.partial`` is correctly
dealt with (see :issue:`9976`)::
diff --git a/src/sage/misc/viewer.py b/src/sage/misc/viewer.py
index badc70a963a..3be9d14609d 100644
--- a/src/sage/misc/viewer.py
+++ b/src/sage/misc/viewer.py
@@ -26,6 +26,7 @@
---------------------
"""
+import platform
from sage.structure.sage_object import SageObject
@@ -66,7 +67,7 @@ def default_viewer(viewer=None):
PDF_VIEWER = BROWSER
PNG_VIEWER = BROWSER
- elif os.uname()[0] == 'Darwin':
+ elif platform.system() == 'Darwin':
# Simple on OS X, since there is an open command that opens
# anything, using the user's preferences.
BROWSER = 'open -W'
diff --git a/src/sage/modular/abvar/abvar_ambient_jacobian.py b/src/sage/modular/abvar/abvar_ambient_jacobian.py
index 1a7c1e82370..7674b41807a 100644
--- a/src/sage/modular/abvar/abvar_ambient_jacobian.py
+++ b/src/sage/modular/abvar/abvar_ambient_jacobian.py
@@ -409,7 +409,7 @@ def newform_decomposition(self, names=None):
if self.dimension() == 0:
return []
G = self.group()
- if not (isinstance(G, Gamma0_class) or isinstance(G, Gamma1_class)):
+ if not isinstance(G, (Gamma0_class, Gamma1_class)):
return [S.newform(names=names) for S in self.decomposition()]
Gtype = G.parent()
N = G.level()
diff --git a/src/sage/modular/abvar/torsion_subgroup.py b/src/sage/modular/abvar/torsion_subgroup.py
index 99976718137..6ae7bff58c7 100644
--- a/src/sage/modular/abvar/torsion_subgroup.py
+++ b/src/sage/modular/abvar/torsion_subgroup.py
@@ -468,7 +468,7 @@ def multiple_of_order(self, maxp=None, proof=True):
return self._multiple_of_order_proof_false
# The Gamma0 and Gamma1 case
- if all(isinstance(G, Gamma0_class) or isinstance(G, Gamma1_class) for G in A.groups()):
+ if all(isinstance(G, (Gamma0_class, Gamma1_class)) for G in A.groups()):
self._multiple_of_order = self.multiple_of_order_using_frobp()
return self._multiple_of_order
@@ -566,13 +566,13 @@ def multiple_of_order_using_frobp(self, maxp=None):
pass
A = self.abelian_variety()
if A.dimension() == 0:
- T = ZZ(1)
+ T = ZZ.one()
self.__multiple_of_order_using_frobp = T
return T
- if not all(isinstance(G, Gamma0_class) or isinstance(G, Gamma1_class) for G in A.groups()):
+ if not all(isinstance(G, (Gamma0_class, Gamma1_class)) for G in A.groups()):
raise NotImplementedError("torsion multiple only implemented for Gamma0 and Gamma1")
- bnd = ZZ(0)
+ bnd = ZZ.zero()
N = A.level()
cnt = 0
if maxp is None:
diff --git a/src/sage/modular/arithgroup/arithgroup_perm.py b/src/sage/modular/arithgroup/arithgroup_perm.py
index 388cabfeed1..4238875048b 100644
--- a/src/sage/modular/arithgroup/arithgroup_perm.py
+++ b/src/sage/modular/arithgroup/arithgroup_perm.py
@@ -1019,7 +1019,7 @@ def _index_to_lr_cusp_width(self):
return (l_cycle_length, r_cycle_length)
- def _contains_sl2(self, a,b,c,d):
+ def _contains_sl2(self, a, b, c, d):
r"""
Test whether ``[a,b;c,d]`` is in the group or not.
@@ -1145,7 +1145,7 @@ def is_normal(self):
return False
return True
- def _conjugate(self,j0):
+ def _conjugate(self, j0):
r"""
Return the conjugate of ``self`` rooted at j0.
@@ -1654,7 +1654,7 @@ def is_even(self):
"""
return False
- def to_even_subgroup(self,relabel=True):
+ def to_even_subgroup(self, relabel=True):
r"""
Return the group with `-Id` added in it.
@@ -1784,7 +1784,7 @@ def nregcusps(self):
n += 1
return n//2
- def cusp_widths(self,exp=False):
+ def cusp_widths(self, exp=False):
r"""
Return the list of cusp widths.
@@ -2391,7 +2391,7 @@ def coset_reps(self):
"""
return self.todd_coxeter()[0]
- def cusp_widths(self,exp=False):
+ def cusp_widths(self, exp=False):
r"""
Return the list of cusp widths of the group.
@@ -2462,7 +2462,7 @@ def to_even_subgroup(self, relabel=True):
else:
return self
- def one_odd_subgroup(self,random=False):
+ def one_odd_subgroup(self, random=False):
r"""
Return an odd subgroup of index 2 in `\Gamma`, where `\Gamma` is this
subgroup. If the optional argument ``random`` is False (the default),
diff --git a/src/sage/modular/arithgroup/congroup_gamma.py b/src/sage/modular/arithgroup/congroup_gamma.py
index 78d878aaf9d..2860ad5ad0a 100644
--- a/src/sage/modular/arithgroup/congroup_gamma.py
+++ b/src/sage/modular/arithgroup/congroup_gamma.py
@@ -140,7 +140,7 @@ def index(self):
"""
return prod([p**(3*e-2)*(p*p-1) for (p,e) in self.level().factor()])
- def _contains_sl2(self, a,b,c,d):
+ def _contains_sl2(self, a, b, c, d):
r"""
EXAMPLES::
@@ -326,7 +326,7 @@ def is_Gamma(x):
return isinstance(x, Gamma_class)
-def _lift_pair(U,V,N):
+def _lift_pair(U, V, N):
r"""
Utility function. Given integers ``U, V, N``, with `N \ge 1` and `{\rm
gcd}(U, V, N) = 1`, return a pair `(u, v)` congruent to `(U, V) \bmod N`,
diff --git a/src/sage/modular/arithgroup/congroup_gamma0.py b/src/sage/modular/arithgroup/congroup_gamma0.py
index ca0d050fe6f..611b67afe03 100644
--- a/src/sage/modular/arithgroup/congroup_gamma0.py
+++ b/src/sage/modular/arithgroup/congroup_gamma0.py
@@ -414,7 +414,7 @@ def gamma_h_subgroups(self):
R = IntegerModRing(N)
return [GammaH(N, H) for H in R.multiplicative_subgroups()]
- def _contains_sl2(self, a,b,c,d):
+ def _contains_sl2(self, a, b, c, d):
r"""
Test whether x is an element of this group.
diff --git a/src/sage/modular/arithgroup/congroup_gamma1.py b/src/sage/modular/arithgroup/congroup_gamma1.py
index c450d98a783..b107686d7ad 100644
--- a/src/sage/modular/arithgroup/congroup_gamma1.py
+++ b/src/sage/modular/arithgroup/congroup_gamma1.py
@@ -238,7 +238,7 @@ def generators(self, algorithm='farey'):
else:
raise ValueError("Unknown algorithm '%s' (should be either 'farey' or 'todd-coxeter')" % algorithm)
- def _contains_sl2(self, a,b,c,d):
+ def _contains_sl2(self, a, b, c, d):
r"""
Test whether x is an element of this group.
diff --git a/src/sage/modular/arithgroup/congroup_generic.py b/src/sage/modular/arithgroup/congroup_generic.py
index 41a09602a88..b94568522f6 100644
--- a/src/sage/modular/arithgroup/congroup_generic.py
+++ b/src/sage/modular/arithgroup/congroup_generic.py
@@ -332,7 +332,7 @@ def __reduce__(self):
"""
return CongruenceSubgroup_constructor, (self.image_mod_n(),)
- def _contains_sl2(self, a,b,c,d):
+ def _contains_sl2(self, a, b, c, d):
r"""
Test whether ``[a,b;c,d]`` is an element of ``self``.
@@ -455,7 +455,7 @@ def image_mod_n(self):
"""
raise NotImplementedError
- def __init__(self,*args, **kwds):
+ def __init__(self, *args, **kwds):
r"""
Bypass the init function of the CongruenceSubgroupFromGroup class.
diff --git a/src/sage/modular/arithgroup/congroup_sl2z.py b/src/sage/modular/arithgroup/congroup_sl2z.py
index d95c9e18764..f7f6d47efed 100644
--- a/src/sage/modular/arithgroup/congroup_sl2z.py
+++ b/src/sage/modular/arithgroup/congroup_sl2z.py
@@ -118,7 +118,7 @@ def _element_constructor_(self, x, check=True):
"""
return ArithmeticSubgroupElement(self, x, check=check)
- def _contains_sl2(self,a,b,c,d):
+ def _contains_sl2(self, a, b, c, d):
r"""
Test whether [a,b,c,d] is an element of self, where a,b,c,d are integers with `ad-bc=1`. In other words, always return True.
diff --git a/src/sage/modular/btquotients/pautomorphicform.py b/src/sage/modular/btquotients/pautomorphicform.py
index 53a7d2ac6f6..3d49d59bdfc 100644
--- a/src/sage/modular/btquotients/pautomorphicform.py
+++ b/src/sage/modular/btquotients/pautomorphicform.py
@@ -870,14 +870,14 @@ def is_simple(self):
EXAMPLES::
- sage: X = BruhatTitsQuotient(3,29)
- sage: H = X.harmonic_cocycles(4,prec =10)
+ sage: X = BruhatTitsQuotient(3, 29)
+ sage: H = X.harmonic_cocycles(4, prec=10)
sage: H.rank()
14
sage: H.is_simple()
False
- sage: X = BruhatTitsQuotient(7,2)
- sage: H = X.harmonic_cocycles(2,prec=10)
+ sage: X = BruhatTitsQuotient(7, 2)
+ sage: H = X.harmonic_cocycles(2, prec=10)
sage: H.rank()
1
sage: H.is_simple()
diff --git a/src/sage/modular/dirichlet.py b/src/sage/modular/dirichlet.py
index 1f6a7a94444..c261a84e8de 100644
--- a/src/sage/modular/dirichlet.py
+++ b/src/sage/modular/dirichlet.py
@@ -1386,7 +1386,8 @@ def gauss_sum(self, a=1):
elif isinstance(K, sage.rings.abc.AlgebraicField):
L = K
zeta = L.zeta(m)
- elif isinstance(K, sage.rings.abc.NumberField_cyclotomic) or isinstance(K, RationalField):
+ elif isinstance(K, (sage.rings.abc.NumberField_cyclotomic,
+ RationalField)):
chi = chi.minimize_base_ring()
n = lcm(m, G.zeta_order())
L = CyclotomicField(n)
@@ -1467,7 +1468,8 @@ def phi(t):
from sage.rings.complex_mpfr import ComplexField
CC = ComplexField(prec)
phi = CC.coerce_map_from(K)
- elif isinstance(K, sage.rings.abc.NumberField_cyclotomic) or isinstance(K, RationalField):
+ elif isinstance(K, (sage.rings.abc.NumberField_cyclotomic,
+ RationalField)):
phi = K.complex_embedding(prec)
CC = phi.codomain()
else:
@@ -1688,8 +1690,9 @@ def kloosterman_sum_numerical(self, prec=53, a=1, b=0):
"""
G = self.parent()
K = G.base_ring()
- if not (isinstance(K, sage.rings.abc.NumberField_cyclotomic) or isinstance(K, RationalField)):
- raise NotImplementedError("Kloosterman sums only currently implemented when the base ring is a cyclotomic field or QQ.")
+ if not isinstance(K, (sage.rings.abc.NumberField_cyclotomic,
+ RationalField)):
+ raise NotImplementedError("Kloosterman sums only currently implemented when the base ring is a cyclotomic field or QQ")
phi = K.complex_embedding(prec)
CC = phi.codomain()
g = 0
diff --git a/src/sage/modular/drinfeld_modform/ring.py b/src/sage/modular/drinfeld_modform/ring.py
index c383cf94266..43c41058fe2 100644
--- a/src/sage/modular/drinfeld_modform/ring.py
+++ b/src/sage/modular/drinfeld_modform/ring.py
@@ -581,8 +581,6 @@ def coefficient_forms(self, a=None):
...
TypeError: unable to convert a to an element in Fq[T]
"""
- K = self._base_ring
- T = K.gen()
if a is None:
return [self._generator_coefficient_form(i)
for i in range(1, self.rank() + 1)]
diff --git a/src/sage/modular/hecke/module.py b/src/sage/modular/hecke/module.py
index e22ed609da6..bbc76fd1cbc 100644
--- a/src/sage/modular/hecke/module.py
+++ b/src/sage/modular/hecke/module.py
@@ -1695,7 +1695,7 @@ def system_of_eigenvalues(self, n, name='alpha'):
Next we define a function that does the above::
- sage: def b(N,k=2):
+ sage: def b(N, k=2):
....: S = ModularSymbols(N,k,sign=-1).cuspidal_submodule().new_submodule()
....: for A in S.decomposition():
....: print("{} {}".format(N, A.system_of_eigenvalues(5)))
diff --git a/src/sage/modular/local_comp/local_comp.py b/src/sage/modular/local_comp/local_comp.py
index 04d9123ab57..349c1e407e1 100644
--- a/src/sage/modular/local_comp/local_comp.py
+++ b/src/sage/modular/local_comp/local_comp.py
@@ -987,7 +987,7 @@ class ImprimitiveLocalComponent(LocalComponentBase):
component and a character to twist by.
"""
- def __init__(self,newform, prime, twist_factor, min_twist, chi):
+ def __init__(self, newform, prime, twist_factor, min_twist, chi):
r"""
EXAMPLES::
diff --git a/src/sage/modular/modform/ambient_R.py b/src/sage/modular/modform/ambient_R.py
index c07597e25dc..47b032176e6 100644
--- a/src/sage/modular/modform/ambient_R.py
+++ b/src/sage/modular/modform/ambient_R.py
@@ -39,7 +39,7 @@ def __init__(self, M, base_ring):
ambient.ModularFormsAmbient.__init__(self, M.group(), M.weight(), base_ring, M.character(), M._eis_only)
@cached_method(key=lambda self,sign: ZZ(sign)) # convert sign to an Integer before looking this up in the cache
- def modular_symbols(self,sign=0):
+ def modular_symbols(self, sign=0):
r"""
Return the space of modular symbols attached to this space, with the given sign (default 0).
diff --git a/src/sage/modular/modform/constructor.py b/src/sage/modular/modform/constructor.py
index ffe19d3d708..425015535c6 100644
--- a/src/sage/modular/modform/constructor.py
+++ b/src/sage/modular/modform/constructor.py
@@ -310,8 +310,8 @@ def ModularForms(group=1,
if base_ring is None:
base_ring = QQ
- if isinstance(group, dirichlet.DirichletCharacter) \
- or isinstance(group, arithgroup.CongruenceSubgroupBase):
+ if isinstance(group, (dirichlet.DirichletCharacter,
+ arithgroup.CongruenceSubgroupBase)):
level = group.level()
else:
level = group
diff --git a/src/sage/modular/modform/eis_series.py b/src/sage/modular/modform/eis_series.py
index 73ea6dcaf1c..5676bf0507a 100644
--- a/src/sage/modular/modform/eis_series.py
+++ b/src/sage/modular/modform/eis_series.py
@@ -384,11 +384,12 @@ def eisenstein_series_lseries(weight, prec=53,
max_imaginary_part=0,
max_asymp_coeffs=40):
r"""
- Return the `L`-series of the weight `2k` Eisenstein series
+ Return the `L`-series of the weight `2k` Eisenstein series `E_{2k}`
on `\SL_2(\ZZ)`.
This actually returns an interface to Tim Dokchitser's program
- for computing with the `L`-series of the Eisenstein series
+ for computing with the `L`-series of the Eisenstein series.
+ See :class:`~sage.lfunctions.dokchitser.Dokchitser`.
INPUT:
@@ -400,18 +401,22 @@ def eisenstein_series_lseries(weight, prec=53,
- ``max_asymp_coeffs`` -- integer
- OUTPUT: the `L`-series of the Eisenstein series
+ OUTPUT: the `L`-series of the Eisenstein series. This can be
+ evaluated at argument `s`, or have
+ :meth:`~sage.lfunctions.dokchitser.Dokchitser.derivative` called, etc.
EXAMPLES:
We compute with the `L`-series of `E_{16}` and then `E_{20}`::
- sage: L = eisenstein_series_lseries(16)
- sage: L(1)
- -0.291657724743874
- sage: L = eisenstein_series_lseries(20)
- sage: L(2)
- -5.02355351645998
+ sage: L = eisenstein_series_lseries(16)
+ sage: L(1)
+ -0.291657724743874
+ sage: L.derivative(1)
+ 0.0756072194360656
+ sage: L = eisenstein_series_lseries(20)
+ sage: L(2)
+ -5.02355351645998
Now with higher precision::
diff --git a/src/sage/modular/modform/hecke_operator_on_qexp.py b/src/sage/modular/modform/hecke_operator_on_qexp.py
index 346a073f20a..5133c7612c9 100644
--- a/src/sage/modular/modform/hecke_operator_on_qexp.py
+++ b/src/sage/modular/modform/hecke_operator_on_qexp.py
@@ -88,7 +88,7 @@ def hecke_operator_on_qexp(f, n, k, eps=None,
# ZZ can coerce to GF(p), but QQ can't.
eps = DirichletGroup(1, base_ring=ZZ)[0]
if check:
- if not (isinstance(f, PowerSeries) or isinstance(f, ModularFormElement)):
+ if not isinstance(f, (PowerSeries, ModularFormElement)):
raise TypeError("f (=%s) must be a power series or modular form" % f)
if not isinstance(eps, DirichletCharacter):
raise TypeError("eps (=%s) must be a Dirichlet character" % eps)
diff --git a/src/sage/modular/modform/l_series_gross_zagier.py b/src/sage/modular/modform/l_series_gross_zagier.py
index 7959c346a2e..96bc2b24959 100644
--- a/src/sage/modular/modform/l_series_gross_zagier.py
+++ b/src/sage/modular/modform/l_series_gross_zagier.py
@@ -73,7 +73,7 @@ def __call__(self, s, der=0):
- ``s`` -- complex number
- - ``der`` -- (default: 0)
+ - ``der`` -- order of derivative (default: 0)
EXAMPLES::
@@ -84,8 +84,10 @@ def __call__(self, s, der=0):
sage: G = GrossZagierLseries(e, A)
sage: G(3)
-0.272946890617590
+ sage: G(3, 1)
+ 0.212442670030741
"""
- return self._dokchister(s, der)
+ return self._dokchister.derivative(s, der)
def taylor_series(self, s=1, series_prec=6, var='z'):
r"""
diff --git a/src/sage/modular/modform_hecketriangle/abstract_space.py b/src/sage/modular/modform_hecketriangle/abstract_space.py
index 89c86ca41c2..79352b97ffe 100644
--- a/src/sage/modular/modform_hecketriangle/abstract_space.py
+++ b/src/sage/modular/modform_hecketriangle/abstract_space.py
@@ -263,14 +263,14 @@ def _element_constructor_(self, el):
return self.construct_quasi_form(el)
if isinstance(el, FreeModuleElement) and (self.module() is P or self.ambient_module() is P):
return self.element_from_ambient_coordinates(el)
- if (not self.is_ambient()) and (isinstance(el, list) or isinstance(el, tuple) or isinstance(el, FreeModuleElement)) and len(el) == self.rank():
+ if not self.is_ambient() and isinstance(el, (list, tuple, FreeModuleElement)) and len(el) == self.rank():
try:
return self.element_from_coordinates(el)
except (ArithmeticError, TypeError):
pass
if self.ambient_module() and self.ambient_module().has_coerce_map_from(P):
return self.element_from_ambient_coordinates(self.ambient_module()(el))
- if (isinstance(el,list) or isinstance(el, tuple)) and len(el) == self.degree():
+ if isinstance(el, (list, tuple)) and len(el) == self.degree():
try:
return self.element_from_ambient_coordinates(el)
except (ArithmeticError, TypeError):
diff --git a/src/sage/modular/modsym/manin_symbol.pyx b/src/sage/modular/modsym/manin_symbol.pyx
index 7a98b5d1a40..726f78c55a6 100644
--- a/src/sage/modular/modsym/manin_symbol.pyx
+++ b/src/sage/modular/modsym/manin_symbol.pyx
@@ -287,7 +287,7 @@ cdef class ManinSymbol(Element):
matrix[0]*self.u + matrix[2]*self.v,
matrix[1]*self.u + matrix[3]*self.v))
- def apply(self, a,b,c,d):
+ def apply(self, a, b, c, d):
"""
Return the image of ``self`` under the matrix `[a,b;c,d]`.
diff --git a/src/sage/modular/overconvergent/genus0.py b/src/sage/modular/overconvergent/genus0.py
index 2576c9ddc18..e1df5066186 100644
--- a/src/sage/modular/overconvergent/genus0.py
+++ b/src/sage/modular/overconvergent/genus0.py
@@ -278,7 +278,7 @@ def OverconvergentModularForms(prime, weight, radius, base_ring=QQ, prec=20, cha
Space of 3-adic 1/2-overconvergent modular forms
of weight-character (3, 3, [-1]) over Rational Field
"""
- if isinstance(prime, Gamma0_class) or isinstance(prime, Gamma1_class):
+ if isinstance(prime, (Gamma0_class, Gamma1_class)):
prime = prime.level()
else:
prime = ZZ(prime)
diff --git a/src/sage/modular/overconvergent/hecke_series.py b/src/sage/modular/overconvergent/hecke_series.py
index 0b1502d2d9a..f347da9a278 100644
--- a/src/sage/modular/overconvergent/hecke_series.py
+++ b/src/sage/modular/overconvergent/hecke_series.py
@@ -153,7 +153,7 @@ def low_weight_bases(N, p, m, NN, weightbound):
return generators
-def random_low_weight_bases(N,p,m,NN,weightbound):
+def random_low_weight_bases(N, p, m, NN, weightbound):
r"""
Return list of random integral bases of modular forms of level `N` and
(even) weight at most weightbound with coefficients reduced modulo
@@ -197,7 +197,7 @@ def random_low_weight_bases(N,p,m,NN,weightbound):
return RandomLWB
-def low_weight_generators(N,p,m,NN):
+def low_weight_generators(N, p, m, NN):
r"""
Return a list of lists of modular forms, and an even natural number.
@@ -248,7 +248,7 @@ def low_weight_generators(N,p,m,NN):
return generators, weightbound
-def random_solution(B,K):
+def random_solution(B, K):
r"""
Return a random solution in nonnegative integers to the equation `a_1 + 2
a_2 + 3 a_3 + ... + B a_B = K`, using a greedy algorithm.
@@ -1152,9 +1152,9 @@ def hecke_series(p, N, klist, m, modformsring=False, weightbound=6):
oneweight = False
# convert single weight to list
- if ((isinstance(klist, int)) or (isinstance(klist, Integer))):
+ if isinstance(klist, (int, Integer)):
klist = [klist]
- oneweight = True # input is single weight
+ oneweight = True # input is single weight
# algorithm may finish with false output unless:
is_valid_weight_list(klist, p)
diff --git a/src/sage/modular/pollack_stevens/modsym.py b/src/sage/modular/pollack_stevens/modsym.py
index 8df8655e5e9..ddb1f861f1b 100644
--- a/src/sage/modular/pollack_stevens/modsym.py
+++ b/src/sage/modular/pollack_stevens/modsym.py
@@ -1574,7 +1574,7 @@ def specialize(self, new_base_ring=None):
return self.__class__(self._map.specialize(new_base_ring),
self.parent()._specialize_parent_space(new_base_ring), construct=True)
- def padic_lseries(self,*args, **kwds):
+ def padic_lseries(self, *args, **kwds):
"""
Return the `p`-adic `L`-series of this modular symbol.
diff --git a/src/sage/modules/fp_graded/morphism.py b/src/sage/modules/fp_graded/morphism.py
index 890178110a6..5f3c9e461c6 100755
--- a/src/sage/modules/fp_graded/morphism.py
+++ b/src/sage/modules/fp_graded/morphism.py
@@ -1138,7 +1138,7 @@ def lift(self, f, verbose=False):
M = f.domain()
# It is an error to call this function with incompatible arguments.
- if not f.codomain() is N:
+ if f.codomain() is not N:
raise ValueError('the codomains of this homomorphism and the homomorphism '
'we are lifting over are different')
diff --git a/src/sage/modules/free_module_element.pyx b/src/sage/modules/free_module_element.pyx
index 3f397404988..f840143a073 100644
--- a/src/sage/modules/free_module_element.pyx
+++ b/src/sage/modules/free_module_element.pyx
@@ -2241,7 +2241,7 @@ cdef class FreeModuleElement(Vector): # abstract base class
sage: maple(v) # optional - maple
Vector[row](3, [x^2+2,2*x+1,-2*x^2+4*x])
"""
- return "Vector[row](%s)"%(str(self.list()))
+ return "Vector[row](%s)" % str(self.list())
def degree(self):
"""
@@ -2695,7 +2695,7 @@ cdef class FreeModuleElement(Vector): # abstract base class
return self._parent.coordinate_ring().zero()
return self._dot_product_(r)
if self._degree != r._degree:
- raise ArithmeticError("degrees (%s and %s) must be the same"%(self.degree(), right.degree()))
+ raise ArithmeticError("degrees (%s and %s) must be the same" % (self.degree(), right.degree()))
# Base rings are not equal => use dot product with coercion
return self._dot_product_coerce_(r)
@@ -4141,7 +4141,7 @@ cdef class FreeModuleElement(Vector): # abstract base class
(1/2, 1/3, -cos(1) + 1)
"""
from sage.misc.functional import integral
- return self.apply_map(lambda x: integral(x,*args, **kwds))
+ return self.apply_map(lambda x: integral(x, *args, **kwds))
integrate = integral
@@ -4179,11 +4179,11 @@ cdef class FreeModuleElement(Vector): # abstract base class
# return self.apply_map(lambda x: x.nintegral(*args, **kwds) for x in self)
if self.is_sparse():
- v = [(i,z.nintegral(*args,**kwds)) for i,z in self.dict(copy=False).items()]
+ v = [(i,z.nintegral(*args, **kwds)) for i,z in self.dict(copy=False).items()]
answers = dict([(i,a[0]) for i,a in v])
v=dict(v)
else:
- v = [z.nintegral(*args,**kwds) for z in self.list()]
+ v = [z.nintegral(*args, **kwds) for z in self.list()]
answers = [a[0] for a in v]
return (vector(answers,sparse=self.is_sparse()), v)
@@ -4850,7 +4850,7 @@ cdef class FreeModuleElement_generic_sparse(FreeModuleElement):
We can initialize with dicts, lists, tuples and derived types::
sage: from sage.modules.free_module_element import FreeModuleElement_generic_sparse
- sage: def S(R,n):
+ sage: def S(R, n):
....: return FreeModule(R, n, sparse=True)
sage: # needs sage.symbolic
diff --git a/src/sage/modules/vector_integer_dense.pyx b/src/sage/modules/vector_integer_dense.pyx
index 3605f4cf865..12b3cfead87 100644
--- a/src/sage/modules/vector_integer_dense.pyx
+++ b/src/sage/modules/vector_integer_dense.pyx
@@ -190,7 +190,7 @@ cdef class Vector_integer_dense(free_module_element.FreeModuleElement):
"""
mpz_set(self._entries[i], (value).value)
- def list(self,copy=True):
+ def list(self, copy=True):
"""
The list of entries of the vector.
@@ -325,7 +325,7 @@ cdef class Vector_integer_dense(free_module_element.FreeModuleElement):
name = singular._next_var_name()
values = str(self.list())[1:-1]
- singular.eval("intvec %s = %s"%(name, values))
+ singular.eval("intvec %s = %s" % (name, values))
from sage.interfaces.singular import SingularElement
return SingularElement(singular, 'foobar', name, True)
diff --git a/src/sage/modules/vector_mod2_dense.pyx b/src/sage/modules/vector_mod2_dense.pyx
index 35286c51457..ca14af9b313 100644
--- a/src/sage/modules/vector_mod2_dense.pyx
+++ b/src/sage/modules/vector_mod2_dense.pyx
@@ -201,13 +201,13 @@ cdef class Vector_mod2_dense(free_module_element.FreeModuleElement):
xi = x[i]
if isinstance(xi, (IntegerMod_int, int, Integer)):
# the if/else statement is because in some compilers, (-1)%2 is -1
- mzd_write_bit(self._entries, 0, i, 1 if xi%2 else 0)
+ mzd_write_bit(self._entries, 0, i, 1 if xi % 2 else 0)
elif isinstance(xi, Rational):
if not (xi.denominator() % 2):
raise ZeroDivisionError("inverse does not exist")
mzd_write_bit(self._entries, 0, i, 1 if (xi.numerator() % 2) else 0)
else:
- mzd_write_bit(self._entries, 0, i, xi%2)
+ mzd_write_bit(self._entries, 0, i, xi % 2)
elif x != 0:
raise TypeError("can't initialize vector from nonzero non-list")
elif self._degree:
@@ -502,8 +502,8 @@ def unpickle_v0(parent, entries, degree, is_immutable):
for i in range(degree):
if isinstance(entries[i], (IntegerMod_int, int, Integer)):
xi = entries[i]
- mzd_write_bit(v._entries, 0, i, xi%2)
+ mzd_write_bit(v._entries, 0, i, xi % 2)
else:
- mzd_write_bit(v._entries, 0, i, entries[i]%2)
+ mzd_write_bit(v._entries, 0, i, entries[i] % 2)
v._is_immutable = int(is_immutable)
return v
diff --git a/src/sage/modules/vector_modn_dense.pyx b/src/sage/modules/vector_modn_dense.pyx
index 79e27b5b3b9..f129632bd03 100644
--- a/src/sage/modules/vector_modn_dense.pyx
+++ b/src/sage/modules/vector_modn_dense.pyx
@@ -168,19 +168,34 @@ cdef class Vector_modn_dense(free_module_element.FreeModuleElement):
self._init(parent.degree(), parent, parent.base_ring().order())
def __init__(self, parent, x, coerce=True, copy=True):
+ """
+ Create an element.
+
+ TESTS:
+
+ Note that ``coerce=False`` is dangerous::
+
+ sage: V = VectorSpace(GF(7), 3)
+ sage: v = V([2, 9, -5], coerce=False)
+ sage: v[0] == v[1]
+ False
+ sage: v[0] + 1 == v[1] + 1
+ True
+ sage: v[0] == v[2]
+ False
+ """
cdef Py_ssize_t i
- cdef mod_int a, p
- if isinstance(x, xrange):
+ cdef mod_int a
+ if isinstance(x, range):
x = tuple(x)
if isinstance(x, (list, tuple)):
if len(x) != self._degree:
raise TypeError("x must be a list of the right length")
if coerce:
R = parent.base_ring()
- p = R.order()
for i from 0 <= i < self._degree:
a = int(R(x[i]))
- self._entries[i] = a % p
+ self._entries[i] = a
else:
for i from 0 <= i < self._degree:
self._entries[i] = x[i]
diff --git a/src/sage/modules/vector_modn_sparse.pyx b/src/sage/modules/vector_modn_sparse.pyx
index a6b59ae9ca5..58ccb2415d4 100644
--- a/src/sage/modules/vector_modn_sparse.pyx
+++ b/src/sage/modules/vector_modn_sparse.pyx
@@ -251,7 +251,7 @@ cdef int add_c_vector_modint_init(c_vector_modint* sum, c_vector_modint* v,
while i < v.num_nonzero or j < w.num_nonzero:
if i >= v.num_nonzero: # just copy w in
z.positions[k] = w.positions[j]
- z.entries[k] = (multiple*w.entries[j])%v.p
+ z.entries[k] = (multiple * w.entries[j]) % v.p
j = j + 1
k = k + 1
elif j >= w.num_nonzero: # just copy v in
@@ -265,7 +265,7 @@ cdef int add_c_vector_modint_init(c_vector_modint* sum, c_vector_modint* v,
i = i + 1
k = k + 1
elif v.positions[i] > w.positions[j]: # copy entry from w in
- s = (multiple*w.entries[j])%v.p
+ s = (multiple * w.entries[j]) % v.p
if s != 0:
z.positions[k] = w.positions[j]
z.entries[k] = s
diff --git a/src/sage/modules/vector_numpy_dense.pyx b/src/sage/modules/vector_numpy_dense.pyx
index b6e6d37473f..f04163d2e82 100644
--- a/src/sage/modules/vector_numpy_dense.pyx
+++ b/src/sage/modules/vector_numpy_dense.pyx
@@ -128,7 +128,7 @@ cdef class Vector_numpy_dense(FreeModuleElement):
from copy import copy
return self._new(copy(self._vector_numpy))
- def __init__(self, parent, entries, coerce = True, copy = True):
+ def __init__(self, parent, entries, coerce=True, copy=True):
"""
Fill the vector with entries.
diff --git a/src/sage/modules/vector_numpy_integer_dense.pyx b/src/sage/modules/vector_numpy_integer_dense.pyx
index ba3537436d5..58beac4636c 100644
--- a/src/sage/modules/vector_numpy_integer_dense.pyx
+++ b/src/sage/modules/vector_numpy_integer_dense.pyx
@@ -13,6 +13,13 @@ EXAMPLES::
sage: v.numpy()
array([ 0, 42, 0]) # 64-bit
array([ 0, 42, 0], dtype=int64) # 32-bit
+
+TESTS::
+
+ sage: Vector_numpy_integer_dense(FreeModule(GF(2), 3), [0, 0, 0])
+ Traceback (most recent call last):
+ ...
+ ValueError: parent must have base ring ZZ
"""
# ****************************************************************************
@@ -36,6 +43,8 @@ numpy.import_array()
cdef class Vector_numpy_integer_dense(Vector_numpy_dense):
def __cinit__(self, parent, entries, coerce=True, copy=True):
+ if parent.base_ring() is not ZZ:
+ raise ValueError("parent must have base ring ZZ")
self._numpy_dtype = numpy.dtype('int64')
self._numpy_dtypeint = numpy.NPY_INT64
self._python_dtype = int
diff --git a/src/sage/modules/vector_rational_sparse.pyx b/src/sage/modules/vector_rational_sparse.pyx
index fcdaf2b7cf8..f4a7d4b52f8 100644
--- a/src/sage/modules/vector_rational_sparse.pyx
+++ b/src/sage/modules/vector_rational_sparse.pyx
@@ -267,7 +267,7 @@ cdef int add_mpq_vector_init(mpq_vector* sum,
Initialize sum and set sum = v + multiple*w.
"""
if v.degree != w.degree:
- print("Can't add vectors of degree %s and %s"%(v.degree, w.degree))
+ print("Can't add vectors of degree %s and %s" % (v.degree, w.degree))
raise ArithmeticError("The vectors must have the same degree.")
cdef Py_ssize_t nz, i, j, k, do_multiply
diff --git a/src/sage/modules/with_basis/indexed_element.pyx b/src/sage/modules/with_basis/indexed_element.pyx
index 47e2fe1cc6f..73917208342 100644
--- a/src/sage/modules/with_basis/indexed_element.pyx
+++ b/src/sage/modules/with_basis/indexed_element.pyx
@@ -405,7 +405,7 @@ cdef class IndexedFreeModuleElement(ModuleElement):
pass
for monomial, c in terms:
- b = repr_monomial(monomial) # PCR
+ b = repr_monomial(monomial) # PCR
if c != 0:
break_points = []
coeff = coeff_repr(c, False)
@@ -416,17 +416,17 @@ cdef class IndexedFreeModuleElement(ModuleElement):
coeff = "-"
elif b._l > 0:
if one_basis is not None and len(coeff) > 0 and monomial == one_basis and strip_one:
- b = empty_ascii_art # ""
+ b = empty_ascii_art # ""
else:
b = AsciiArt([scalar_mult]) + b
if not first:
if len(coeff) > 0 and coeff[0] == "-":
- coeff = " - %s"%coeff[1:]
+ coeff = " - %s" % coeff[1:]
else:
- coeff = " + %s"%coeff
+ coeff = " + %s" % coeff
break_points = [2]
else:
- coeff = "%s"%coeff
+ coeff = "%s" % coeff
if coeff:
chunks.append(AsciiArt([coeff], break_points))
if b._l:
@@ -435,10 +435,9 @@ cdef class IndexedFreeModuleElement(ModuleElement):
s = ascii_art(*chunks)
if first:
return AsciiArt(["0"])
- elif s == empty_ascii_art:
+ if s == empty_ascii_art:
return AsciiArt(["1"])
- else:
- return s
+ return s
def _unicode_art_(self):
r"""
diff --git a/src/sage/modules/with_basis/invariant.py b/src/sage/modules/with_basis/invariant.py
index 5c4202419a5..b97539d5a27 100644
--- a/src/sage/modules/with_basis/invariant.py
+++ b/src/sage/modules/with_basis/invariant.py
@@ -170,7 +170,7 @@ class FiniteDimensionalInvariantModule(SubmoduleWithBasis):
sage: C = IntegerVectors(4, length=3, min_part=0) # representing degree-4 monomials
sage: M = CombinatorialFreeModule(QQ, C) # isomorphic to deg-4 homog. polynomials
sage: G = SymmetricGroup(3)
- sage: def perm_action(g,x): return M.monomial(C(g(list(x))))
+ sage: def perm_action(g, x): return M.monomial(C(g(list(x))))
sage: perm_action(G((1,2,3)), C([4,3,2]))
B[[3, 2, 4]]
sage: R = Representation(G, M, perm_action)
@@ -227,7 +227,7 @@ def __init__(self, M, S, action=operator.mul, side='left', *args, **kwargs):
sage: G = GroupExp()(QQ) # a group that is not finitely generated
sage: M = CombinatorialFreeModule(QQ, [1,2,3])
- sage: def on_basis(g,m): return M.monomial(m) # trivial rep'n
+ sage: def on_basis(g, m): return M.monomial(m) # trivial rep'n
sage: from sage.modules.with_basis.representation import Representation
sage: R = Representation(G, M, on_basis)
sage: R.invariant_module()
@@ -372,7 +372,7 @@ def semigroup(self):
sage: G = SymmetricGroup(3)
sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M')
- sage: def action(g,x): return M.monomial(g(x))
+ sage: def action(g, x): return M.monomial(g(x))
sage: I = M.invariant_module(G, action_on_basis=action)
sage: I.semigroup()
Symmetric group of order 3! as a permutation group
@@ -422,7 +422,7 @@ def _mul_(self, other):
sage: G = CyclicPermutationGroup(3); G.rename('G')
sage: M = algebras.Exterior(QQ, 'x', 3)
- sage: def on_basis(g,m): return M.prod([M.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
+ sage: def on_basis(g, m): return M.prod([M.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
sage: R = Representation(G, M, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional(), side='right')
sage: I = R.invariant_module(); I.rename('I')
sage: B = I.basis()
@@ -504,7 +504,7 @@ def _acted_upon_(self, scalar, self_on_left=False):
sage: E = algebras.Exterior(QQ, 'x', 3)
- sage: def on_basis(g,m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
+ sage: def on_basis(g, m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
sage: R = Representation(G, E, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional())
sage: I = R.invariant_module()
sage: B = I.basis()
@@ -552,7 +552,7 @@ def _acted_upon_(self, scalar, self_on_left=False):
sage: [b._acted_upon_(G((1,3,2)), self_on_left=True) for b in I.basis()]
[B[0]]
- sage: def on_basis(g,m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
+ sage: def on_basis(g, m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
sage: R = Representation(G, E, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional(), side='right')
sage: I = R.invariant_module()
sage: B = I.basis()
@@ -711,7 +711,7 @@ class FiniteDimensionalTwistedInvariantModule(SubmoduleWithBasis):
sage: G = SymmetricGroup(3); G.rename('S3')
sage: E = algebras.Exterior(QQ, 'x', 3); E.rename('E')
- sage: def action(g,m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m])
+ sage: def action(g, m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m])
sage: from sage.modules.with_basis.representation import Representation
sage: EA = Representation(G, E, action, category=Algebras(QQ).WithBasis().FiniteDimensional())
sage: T = EA.twisted_invariant_module([2,0,-1])
@@ -758,7 +758,7 @@ def __classcall_private__(cls, M, G, chi,
sage: M = CombinatorialFreeModule(QQ, [1,2,3])
sage: G = SymmetricGroup(3)
- sage: def action(g,x): return M.term(g(x))
+ sage: def action(g, x): return M.term(g(x))
sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
Check that it works for tuples::
@@ -844,7 +844,7 @@ def __init__(self, M, G, chi, action=operator.mul, side='left', **kwargs):
Conjugacy class of cycle type [3] in Symmetric group of order 3! as a permutation group]
sage: from sage.groups.class_function import ClassFunction
sage: chi = ClassFunction(G, [2,0,-1]) # the standard representation character values
- sage: def action(g,x): return M.term(g(x))
+ sage: def action(g, x): return M.term(g(x))
sage: import __main__
sage: __main__.action = action
sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
@@ -946,7 +946,7 @@ def project(self, x):
sage: M = CombinatorialFreeModule(QQ, [1,2,3]); M.rename('M')
sage: B = M.basis()
sage: G = SymmetricGroup(3); G.rename('S3')
- sage: def action(g,x): return M.term(g(x))
+ sage: def action(g, x): return M.term(g(x))
sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
sage: m = B[1] + B[2] + B[3]
sage: parent(m)
@@ -975,7 +975,7 @@ def project_ambient(self, x):
sage: M = CombinatorialFreeModule(QQ, [1,2,3]); M.rename('M')
sage: B = M.basis()
sage: G = SymmetricGroup(3); G.rename('S3')
- sage: def action(g,x): return M.term(g(x))
+ sage: def action(g, x): return M.term(g(x))
sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
To compare with ``self.project``, we can inspect the parents.
@@ -1017,7 +1017,7 @@ def projection_matrix(self):
EXAMPLES::
sage: M = CombinatorialFreeModule(QQ, [1,2,3])
- sage: def action(g,x): return(M.term(g(x)))
+ sage: def action(g, x): return(M.term(g(x)))
sage: G = SymmetricGroup(3)
If the matrix `A` has columns form a basis for
diff --git a/src/sage/modules/with_basis/morphism.py b/src/sage/modules/with_basis/morphism.py
index 68ad2521493..2359672a055 100644
--- a/src/sage/modules/with_basis/morphism.py
+++ b/src/sage/modules/with_basis/morphism.py
@@ -515,7 +515,7 @@ class TriangularModuleMorphism(ModuleMorphism):
A lower triangular (but not unitriangular) morphism::
sage: X = CombinatorialFreeModule(QQ, [1, 2, 3]); X.rename('X'); x = X.basis()
- sage: def lt(i): return sum(j*x[j] for j in range(i,4))
+ sage: def lt(i): return sum(j*x[j] for j in range(i, 4))
sage: phi = X.module_morphism(lt, triangular='lower', codomain=X)
sage: phi(x[2])
2*B[2] + 3*B[3]
@@ -635,7 +635,7 @@ def __init__(self, triangular='upper', unitriangular=False,
TESTS::
sage: X = CombinatorialFreeModule(QQ, [1, 2, 3]); X.rename('X'); x = X.basis()
- sage: def lt(i): return sum(j*x[j] for j in range(i,4))
+ sage: def lt(i): return sum(j*x[j] for j in range(i, 4))
sage: import __main__; __main__.lt = lt # Fake lt being defined in a python module
sage: phi = X.module_morphism(lt, triangular='lower', codomain=X)
sage: phi.__class__
@@ -1180,7 +1180,7 @@ def __init__(self, domain, on_basis, codomain=None, category=None, **keywords):
sage: X = CombinatorialFreeModule(QQ, ZZ)
sage: from sage.modules.with_basis.morphism import TriangularModuleMorphismByLinearity
- sage: def on_basis(i): return X.sum_of_monomials(range(i-2,i+1))
+ sage: def on_basis(i): return X.sum_of_monomials(range(i-2, i+1))
sage: import __main__; __main__.on_basis = on_basis # Fake on_basis being defined in a python module
sage: phi = TriangularModuleMorphismByLinearity(
....: X, on_basis=on_basis, codomain=X)
@@ -1198,7 +1198,7 @@ def _richcmp_(self, other, op):
sage: X = CombinatorialFreeModule(QQ, ZZ)
sage: from sage.modules.with_basis.morphism import TriangularModuleMorphismByLinearity
- sage: def on_basis(i): return X.sum_of_monomials(range(i-2,i+1))
+ sage: def on_basis(i): return X.sum_of_monomials(range(i-2, i+1))
sage: phi = TriangularModuleMorphismByLinearity(
....: X, on_basis=on_basis, codomain=X)
sage: phi == phi
diff --git a/src/sage/modules/with_basis/representation.py b/src/sage/modules/with_basis/representation.py
index 7e67d3ec750..5271c7a6b38 100644
--- a/src/sage/modules/with_basis/representation.py
+++ b/src/sage/modules/with_basis/representation.py
@@ -685,8 +685,8 @@ def subrepresentation(self, gens, check=True, already_echelonized=False,
5
"""
if not is_closed and gens:
- R = self.base_ring()
- repr_mats = [self.representation_matrix(g) for g in self._semigroup.gens()]
+ repr_mats = [self.representation_matrix(g)
+ for g in self._semigroup.gens()]
amb_dim = self.dimension()
SM = matrix([v._vector_() for v in gens])
SM.echelonize()
@@ -2892,7 +2892,6 @@ def __init__(self, V, shape):
keys = list(V.basis().keys())
ambient = tensor([V]*d)
- I = ambient.indices()
cla = SymmetricGroupAlgebra(R, SymmetricGroup(d)).young_symmetrizer(shape)
mc = cla.monomial_coefficients(copy=False)
gens = [ambient.sum_of_terms((tuple([k[i-1] for i in p.tuple()]), coeff)
diff --git a/src/sage/monoids/automatic_semigroup.py b/src/sage/monoids/automatic_semigroup.py
index c4926239f8d..fac295b2341 100644
--- a/src/sage/monoids/automatic_semigroup.py
+++ b/src/sage/monoids/automatic_semigroup.py
@@ -169,7 +169,7 @@ class AutomaticSemigroup(UniqueRepresentation, Parent):
sage: M2 = matrix([[0,0,0],[1,1,0],[0,0,1]])
sage: M1.set_immutable()
sage: M2.set_immutable()
- sage: def prod_m(x,y):
+ sage: def prod_m(x, y):
....: z=x*y
....: z.set_immutable()
....: return z
@@ -483,7 +483,7 @@ def ambient(self):
sage: M2 = matrix([[0,0,0],[1,1,0],[0,0,1]])
sage: M1.set_immutable()
sage: M2.set_immutable()
- sage: def prod_m(x,y):
+ sage: def prod_m(x, y):
....: z=x*y
....: z.set_immutable()
....: return z
diff --git a/src/sage/numerical/backends/cvxopt_backend.pyx b/src/sage/numerical/backends/cvxopt_backend.pyx
index 14c60dc3167..085340726fb 100644
--- a/src/sage/numerical/backends/cvxopt_backend.pyx
+++ b/src/sage/numerical/backends/cvxopt_backend.pyx
@@ -55,7 +55,7 @@ cdef class CVXOPTBackend(GenericBackend):
cdef dict answer
cdef dict param
- def __cinit__(self, maximization = True):
+ def __cinit__(self, maximization=True):
"""
Cython constructor.
@@ -276,7 +276,7 @@ cdef class CVXOPTBackend(GenericBackend):
else:
return self.objective_function[variable]
- cpdef set_objective(self, list coeff, d = 0.0):
+ cpdef set_objective(self, list coeff, d=0.0):
"""
Set the objective function.
@@ -915,7 +915,7 @@ cdef class CVXOPTBackend(GenericBackend):
return self.col_name_var[index]
return "x_" + repr(index)
- cpdef variable_upper_bound(self, int index, value = False):
+ cpdef variable_upper_bound(self, int index, value=False):
"""
Return or define the upper bound on a variable.
@@ -944,7 +944,7 @@ cdef class CVXOPTBackend(GenericBackend):
else:
return self.col_upper_bound[index]
- cpdef variable_lower_bound(self, int index, value = False):
+ cpdef variable_lower_bound(self, int index, value=False):
"""
Return or define the lower bound on a variable.
@@ -973,7 +973,7 @@ cdef class CVXOPTBackend(GenericBackend):
else:
return self.col_lower_bound[index]
- cpdef solver_parameter(self, name, value = None):
+ cpdef solver_parameter(self, name, value=None):
"""
Return or define a solver parameter.
diff --git a/src/sage/numerical/backends/glpk_backend.pyx b/src/sage/numerical/backends/glpk_backend.pyx
index dddde9a07b6..5e1f0dcdf82 100644
--- a/src/sage/numerical/backends/glpk_backend.pyx
+++ b/src/sage/numerical/backends/glpk_backend.pyx
@@ -37,7 +37,7 @@ cdef class GLPKBackend(GenericBackend):
MIP Backend that uses the GLPK solver.
"""
- def __cinit__(self, maximization = True):
+ def __cinit__(self, maximization=True):
"""
Constructor.
@@ -537,7 +537,7 @@ cdef class GLPKBackend(GenericBackend):
Removing fancy constraints does not make Sage crash::
- sage: MixedIntegerLinearProgram(solver= "GLPK").remove_constraints([0, -2])
+ sage: MixedIntegerLinearProgram(solver="GLPK").remove_constraints([0, -2])
Traceback (most recent call last):
...
ValueError: The constraint's index i must satisfy 0 <= i < number_of_constraints
diff --git a/src/sage/numerical/backends/glpk_exact_backend.pyx b/src/sage/numerical/backends/glpk_exact_backend.pyx
index a9289264a42..96f18df6fe8 100644
--- a/src/sage/numerical/backends/glpk_exact_backend.pyx
+++ b/src/sage/numerical/backends/glpk_exact_backend.pyx
@@ -28,7 +28,7 @@ cdef class GLPKExactBackend(GLPKBackend):
There is no support for integer variables.
"""
- def __cinit__(self, maximization = True):
+ def __cinit__(self, maximization=True):
"""
Constructor.
diff --git a/src/sage/numerical/backends/glpk_graph_backend.pxd b/src/sage/numerical/backends/glpk_graph_backend.pxd
index 2e4b29a25a9..f72ad9ba077 100644
--- a/src/sage/numerical/backends/glpk_graph_backend.pxd
+++ b/src/sage/numerical/backends/glpk_graph_backend.pxd
@@ -51,5 +51,5 @@ cdef class GLPKGraphBackend():
cdef int s
cdef int t
cpdef int write_maxflow(self, fname) except -1
- cpdef double maxflow_ffalg(self, u = ?, v = ?) except -1
+ cpdef double maxflow_ffalg(self, u=?, v=?) except -1
cpdef double cpp(self) noexcept
diff --git a/src/sage/numerical/backends/glpk_graph_backend.pyx b/src/sage/numerical/backends/glpk_graph_backend.pyx
index 2a89dfe0bd1..71dc49e46f5 100644
--- a/src/sage/numerical/backends/glpk_graph_backend.pyx
+++ b/src/sage/numerical/backends/glpk_graph_backend.pyx
@@ -183,7 +183,7 @@ cdef class GLPKGraphBackend():
3.0
"""
- def __cinit__(self, data = None, format = "plain"):
+ def __cinit__(self, data=None, format="plain"):
"""
Constructor.
@@ -840,7 +840,7 @@ cdef class GLPKGraphBackend():
cdef int i = self._find_vertex(vert)
if i < 0:
- raise RuntimeError("Vertex %s does not exist."%(vert))
+ raise RuntimeError("Vertex %s does not exist." % vert)
cdef int num[2]
num[1] = i + 1
@@ -880,7 +880,7 @@ cdef class GLPKGraphBackend():
verts_val = [self._find_vertex(v) for v in verts]
if -1 in verts_val:
i = verts_val.index(-1)
- raise RuntimeError("Vertex %s does not exist."%(verts[i]))
+ raise RuntimeError("Vertex %s does not exist." % verts[i])
cdef int * num = check_allocarray(len(verts_val) + 1, sizeof(int))
cdef int ndel = len(verts_val)
diff --git a/src/sage/numerical/backends/interactivelp_backend.pyx b/src/sage/numerical/backends/interactivelp_backend.pyx
index ea1a53aedce..3519303a817 100644
--- a/src/sage/numerical/backends/interactivelp_backend.pyx
+++ b/src/sage/numerical/backends/interactivelp_backend.pyx
@@ -41,7 +41,7 @@ cdef class InteractiveLPBackend:
sage: p = get_solver(solver = "InteractiveLP")
"""
- def __cinit__(self, maximization = True, base_ring = None):
+ def __cinit__(self, maximization=True, base_ring=None):
"""
Cython constructor.
diff --git a/src/sage/numerical/backends/ppl_backend.pyx b/src/sage/numerical/backends/ppl_backend.pyx
index 24b0c8e80ac..72074210054 100644
--- a/src/sage/numerical/backends/ppl_backend.pyx
+++ b/src/sage/numerical/backends/ppl_backend.pyx
@@ -49,7 +49,7 @@ cdef class PPLBackend(GenericBackend):
# Common denominator for objective function in self.mip (not for the constant term)
cdef Integer obj_denominator
- def __cinit__(self, maximization = True, base_ring = None):
+ def __cinit__(self, maximization=True, base_ring=None):
"""
Constructor.
diff --git a/src/sage/numerical/mip.pyx b/src/sage/numerical/mip.pyx
index 2395868b43d..78ac846d3df 100644
--- a/src/sage/numerical/mip.pyx
+++ b/src/sage/numerical/mip.pyx
@@ -670,7 +670,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
"""
return self._backend.base_ring()
- def set_problem_name(self,name):
+ def set_problem_name(self, name):
r"""
Set the name of the ``MixedIntegerLinearProgram``.
@@ -914,7 +914,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
"""
return self._backend.ncols()
- def constraints(self, indices = None):
+ def constraints(self, indices=None):
r"""
Return a list of constraints, as 3-tuples.
@@ -970,7 +970,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
solver used, we define a short function reordering it before it is
printed. The output would look the same without this function applied::
- sage: def reorder_constraint(lb,indcoef,ub):
+ sage: def reorder_constraint(lb, indcoef, ub):
....: ind, coef = indcoef
....: d = dict(zip(ind, coef))
....: ind.sort()
@@ -1310,7 +1310,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
lb if lb is not None else "-oo",
ub if ub is not None else "+oo"))
- def write_mps(self,filename,modern=True):
+ def write_mps(self, filename, modern=True):
r"""
Write the linear program as a MPS file.
@@ -1343,7 +1343,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
"""
self._backend.write_mps(filename, modern)
- def write_lp(self,filename):
+ def write_lp(self, filename):
r"""
Write the linear program as a LP file.
@@ -1782,7 +1782,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
else:
return val
- def set_objective(self,obj):
+ def set_objective(self, obj):
r"""
Set the objective of the ``MixedIntegerLinearProgram``.
@@ -2492,7 +2492,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
"""
return self._backend.is_variable_integer(self._variables[e])
- def set_real(self,ee):
+ def set_real(self, ee):
r"""
Set a variable or a ``MIPVariable`` as real.
@@ -2778,7 +2778,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
except TypeError:
return self._backend.variable_upper_bound(self._variables[v])
- def solver_parameter(self, name, value = None):
+ def solver_parameter(self, name, value=None):
"""
Return or define a solver parameter.
@@ -3026,7 +3026,7 @@ cdef class MixedIntegerLinearProgram(SageObject):
"""
return self._backend.get_relative_objective_gap()
- def interactive_lp_problem(self,form='standard'):
+ def interactive_lp_problem(self, form='standard'):
r"""
Return an InteractiveLPProblem and, if available, a basis.
diff --git a/src/sage/numerical/optimize.py b/src/sage/numerical/optimize.py
index 7b3d0456147..cdcd3a524b3 100644
--- a/src/sage/numerical/optimize.py
+++ b/src/sage/numerical/optimize.py
@@ -442,7 +442,7 @@ def minimize(func, x0, gradient=None, hessian=None, algorithm='default',
return vector(RDF, min)
-def minimize_constrained(func,cons,x0,gradient=None,algorithm='default', **args):
+def minimize_constrained(func, cons, x0, gradient=None, algorithm='default', **args):
r"""
Minimize a function with constraints.
@@ -577,7 +577,7 @@ def minimize_constrained(func,cons,x0,gradient=None,algorithm='default', **args)
min = optimize.fmin_tnc(f, x0, approx_grad=True, bounds=cons, messages=0, **args)[0]
elif isinstance(cons[0], (function_type, Expression)):
min = optimize.fmin_cobyla(f, x0, cons, **args)
- elif isinstance(cons, function_type) or isinstance(cons, Expression):
+ elif isinstance(cons, (function_type, Expression)):
min = optimize.fmin_cobyla(f, x0, cons, **args)
return vector(RDF, min)
diff --git a/src/sage/numerical/sdp.pyx b/src/sage/numerical/sdp.pyx
index 7c08ed08e10..6693b943806 100644
--- a/src/sage/numerical/sdp.pyx
+++ b/src/sage/numerical/sdp.pyx
@@ -459,7 +459,7 @@ cdef class SemidefiniteProgram(SageObject):
"""
return self._backend.base_ring()
- def set_problem_name(self,name):
+ def set_problem_name(self, name):
r"""
Set the name of the ``SemidefiniteProgram``.
@@ -1049,7 +1049,7 @@ cdef class SemidefiniteProgram(SageObject):
"""
return self._backend.slack(i, sparse=sparse)
- def solver_parameter(self, name, value = None):
+ def solver_parameter(self, name, value=None):
"""
Return or define a solver parameter.
diff --git a/src/sage/parallel/decorate.py b/src/sage/parallel/decorate.py
index a01d680bdcc..90ee3a5cc42 100644
--- a/src/sage/parallel/decorate.py
+++ b/src/sage/parallel/decorate.py
@@ -110,7 +110,7 @@ def __call__(self, f):
sage: P = sage.parallel.decorate.Parallel()
- sage: def g(n,m): return n+m
+ sage: def g(n, m): return n+m
sage: h = P(g) # indirect doctest
sage: list(h([(2,3)]))
[(((2, 3), {}), 5)]
@@ -358,7 +358,7 @@ def parallel(p_iter='fork', ncpus=None, **kwds):
when calling the parallel function::
sage: @parallel
- ....: def f(a,b): return a*b
+ ....: def f(a, b): return a*b
sage: for X, Y in sorted(list(f([(2,3),(3,5),(5,7)]))): print((X, Y))
(((2, 3), {}), 6)
(((3, 5), {}), 15)
@@ -456,7 +456,7 @@ def __call__(self, f):
EXAMPLES::
sage: F = sage.parallel.decorate.Fork(timeout=3)
- sage: def g(n,m): return n+m
+ sage: def g(n, m): return n+m
sage: h = F(g) # indirect doctest
sage: h(2,3)
5
diff --git a/src/sage/parallel/map_reduce.py b/src/sage/parallel/map_reduce.py
index 303f7405416..a182a136a2f 100644
--- a/src/sage/parallel/map_reduce.py
+++ b/src/sage/parallel/map_reduce.py
@@ -1133,18 +1133,16 @@ def start_workers(self):
TESTS::
+ sage: # long time
sage: from sage.parallel.map_reduce import RESetMapReduce
sage: def children(x):
....: print(f"Starting: {x}", flush=True)
....: return []
sage: S = RESetMapReduce(roots=[1, 2], children=children)
sage: S.setup_workers(2)
- sage: S.start_workers(); sleep(float(5)) # long time
+ sage: S.start_workers(); sleep(float(5))
Starting: ...
Starting: ...
-
- Cleanup::
-
sage: S.finish()
"""
if self._nprocess == 0:
diff --git a/src/sage/parallel/reference.py b/src/sage/parallel/reference.py
index 6a855874330..e5587022576 100644
--- a/src/sage/parallel/reference.py
+++ b/src/sage/parallel/reference.py
@@ -26,7 +26,7 @@ def parallel_iter(f, inputs):
EXAMPLES::
- sage: def f(N,M=10): return N*M
+ sage: def f(N, M=10): return N*M
sage: inputs = [((2,3),{}), (tuple(), {'M':5,'N':3}), ((2,),{})]
sage: set_random_seed(0)
sage: for a, val in sage.parallel.reference.parallel_iter(f, inputs):
diff --git a/src/sage/plot/animate.py b/src/sage/plot/animate.py
index 16672405c8e..c37a17531d8 100644
--- a/src/sage/plot/animate.py
+++ b/src/sage/plot/animate.py
@@ -432,7 +432,7 @@ def make_image(self, frame, filename, **kwds):
sage: class MyAnimation(Animation):
....: def make_image(self, frame, filename, **kwds):
....: P = parametric_plot(frame[0], frame[1], **frame[2])
- ....: P.save_image(filename,**kwds)
+ ....: P.save_image(filename, **kwds)
sage: t = SR.var("t")
sage: x = lambda t: cos(t)
diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
index 124209f257e..0552a51ff19 100644
--- a/src/sage/plot/complex_plot.pyx
+++ b/src/sage/plot/complex_plot.pyx
@@ -826,7 +826,7 @@ class ComplexPlot(GraphicPrimitive):
sage: isinstance(complex_plot(lambda z: z, (-1,1), (-1,1))[0]._repr_(), str)
True
"""
- return "ComplexPlot defined by a %s x %s data grid"%(self.x_count, self.y_count)
+ return "ComplexPlot defined by a %s x %s data grid" % (self.x_count, self.y_count)
def _render_on_subplot(self, subplot):
"""
diff --git a/src/sage/plot/contour_plot.py b/src/sage/plot/contour_plot.py
index 26874790ec5..a59397e8b23 100644
--- a/src/sage/plot/contour_plot.py
+++ b/src/sage/plot/contour_plot.py
@@ -415,7 +415,7 @@ def contour_plot(f, xrange, yrange, **options):
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2,2), (-2,2))
sphinx_plot(g)
@@ -427,7 +427,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2, 2), (-2, 2), contours=2, cmap=[(1,0,0), (0,1,0), (0,0,1)])
sphinx_plot(g)
@@ -440,7 +440,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2,2), (-2,2), contours=(0.1,1.0,1.2,1.4), cmap='hsv')
sphinx_plot(g)
@@ -452,7 +452,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2,2), (-2,2), contours=(1.0,), fill=False)
sphinx_plot(g)
@@ -475,7 +475,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2,2), (-2,2), fill=False, linewidths=10)
sphinx_plot(g)
@@ -488,7 +488,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2,2), (-2,2), fill=False, linestyles='dashdot')
sphinx_plot(g)
@@ -667,7 +667,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (-2,2), (-2,2), labels=True, label_colors='red')
sphinx_plot(g)
@@ -680,7 +680,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), colorbar=True)
sphinx_plot(g)
@@ -692,7 +692,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), colorbar=True, colorbar_orientation='horizontal')
sphinx_plot(g)
@@ -704,7 +704,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), contours=[-2,-1,4],
colorbar=True)
sphinx_plot(g)
@@ -718,7 +718,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), contours=[-2,-1,4],
colorbar=True, colorbar_spacing='uniform')
sphinx_plot(g)
@@ -732,7 +732,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), contours=[0,2,3,6],
colorbar=True, colorbar_format='%.3f')
sphinx_plot(g)
@@ -747,7 +747,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), labels=True,
label_colors='red', contours=[0,2,3,6],
colorbar=True)
@@ -762,7 +762,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 + y**2
+ def f(x, y): return x**2 + y**2
g = contour_plot(f, (x,-3,3), (y,-3,3), cmap='winter',
contours=20, fill=False, colorbar=True)
sphinx_plot(g)
@@ -793,7 +793,7 @@ def f(x,y): return x**2 + y**2
.. PLOT::
x,y = var('x,y')
- def f(x,y): return cos(x) + sin(y)
+ def f(x, y): return cos(x) + sin(y)
g = contour_plot(f, (0,pi), (0,pi), axes=True)
sphinx_plot(g)
@@ -819,7 +819,7 @@ def f(x,y): return cos(x) + sin(y)
.. PLOT::
x,y = var('x,y')
- def f(x,y): return cos(x) + sin(y)
+ def f(x, y): return cos(x) + sin(y)
g = contour_plot(f, (-pi,pi), (-pi,pi), fill=False, axes=True)
sphinx_plot(g)
@@ -1132,7 +1132,7 @@ def implicit_plot(f, xrange, yrange, **options):
.. PLOT::
- def f(x,y): return x**2 + y**2 - 2
+ def f(x, y): return x**2 + y**2 - 2
g = implicit_plot(f, (-3,3), (-3,3), fill=True, plot_points=500)
sphinx_plot(g)
@@ -1143,7 +1143,7 @@ def f(x,y): return x**2 + y**2 - 2
.. PLOT::
- def f(x,y): return x**2 + y**2 - 2
+ def f(x, y): return x**2 + y**2 - 2
g = implicit_plot(f, (-3,3), (-3,3), linewidth=6)
sphinx_plot(g)
@@ -1155,7 +1155,7 @@ def f(x,y): return x**2 + y**2 - 2
.. PLOT::
x, y =var("x y")
- def f(x,y): return x**2 + y**2 - 2
+ def f(x, y): return x**2 + y**2 - 2
g = implicit_plot(f, (-3,3), (-3,3), linestyle='dashdot')
sphinx_plot(g)
@@ -1168,7 +1168,7 @@ def f(x,y): return x**2 + y**2 - 2
.. PLOT::
- def f(x,y): return x**2 + y**2 - 2
+ def f(x, y): return x**2 + y**2 - 2
g = implicit_plot(f, (-3,3), (-3,3), color='red', fill=True, fillcolor='green',
plot_points=500)
sphinx_plot(g)
@@ -1237,7 +1237,7 @@ def f(x,y): return x**2 + y**2 - 2
....: z = 0
....: for i in range(n):
....: z = z*z + c
- ....: def f(x,y):
+ ....: def f(x, y):
....: val = z(CDF(x, y))
....: return val.norm() - 4
....: return f
@@ -1254,7 +1254,7 @@ def mandel(n):
z = 0
for i in range(n):
z = z*z + c
- def f(x,y):
+ def f(x, y):
val = z(CDF(x, y))
return val.norm() - 4
return f
@@ -1273,7 +1273,7 @@ def mandel(n):
z = 0
for i in range(n):
z = z*z + c
- def f(x,y):
+ def f(x, y):
val = z(CDF(x, y))
return val.norm() - 4
return f
@@ -1296,7 +1296,7 @@ def mandel(n):
z = 0
for i in range(n):
z = z*z + c
- def f(x,y):
+ def f(x, y):
val = z(CDF(x, y))
return val.norm() - 4
return f
diff --git a/src/sage/plot/density_plot.py b/src/sage/plot/density_plot.py
index 84d08518a0b..dbbeb767775 100644
--- a/src/sage/plot/density_plot.py
+++ b/src/sage/plot/density_plot.py
@@ -212,7 +212,7 @@ def density_plot(f, xrange, yrange, **options):
.. PLOT::
x,y = var('x,y')
- def f(x,y): return x**2 * cos(x*y)
+ def f(x, y): return x**2 * cos(x*y)
g = density_plot(f, (x,-10,5), (y,-5,5), interpolation='sinc', plot_points=100)
sphinx_plot(g)
@@ -296,7 +296,7 @@ def f(x,y): return x**2 * cos(x*y)
Check that :issue:`17684` is fixed, i.e., symbolic values can be plotted::
- sage: def f(x,y):
+ sage: def f(x, y):
....: return SR(x)
sage: density_plot(f, (0,1), (0,1))
Graphics object consisting of 1 graphics primitive
diff --git a/src/sage/plot/matrix_plot.py b/src/sage/plot/matrix_plot.py
index 900ac9989e0..aa8309b5bc0 100644
--- a/src/sage/plot/matrix_plot.py
+++ b/src/sage/plot/matrix_plot.py
@@ -234,7 +234,7 @@ def _render_on_subplot(self, subplot):
if options.get('colorbar', False):
colorbar_options = options['colorbar_options']
from matplotlib import colorbar
- cax,kwds = colorbar.make_axes_gridspec(subplot,**colorbar_options)
+ cax,kwds = colorbar.make_axes_gridspec(subplot, **colorbar_options)
colorbar.Colorbar(cax, image, **kwds)
if flip_y:
diff --git a/src/sage/plot/plot.py b/src/sage/plot/plot.py
index d1e21abe20a..c8f5a0fca96 100644
--- a/src/sage/plot/plot.py
+++ b/src/sage/plot/plot.py
@@ -641,7 +641,7 @@ def f(x): return (x-3)*(x-5)*(x-7)+40
# Currently not used - see comment above about
# figure.canvas.mpl_connect('draw_event', pad_for_tick_labels)
# TODO - figure out how to use this, add documentation
-# def adjust_figure_to_contain_bbox(fig, bbox,pad=1.1):
+# def adjust_figure_to_contain_bbox(fig, bbox, pad=1.1):
# """
# For each amount we are over (in axes coordinates), we adjust by over*pad
# to give ourselves a bit of padding.
@@ -2194,7 +2194,7 @@ def _plot(funcs, xrange, parametric=False,
# Check to see if funcs is a list of functions that will be all plotted together.
if isinstance(funcs, (list, tuple)) and not parametric:
- def golden_rainbow(i,lightness=0.4):
+ def golden_rainbow(i, lightness=0.4):
# note: sage's "blue" has hue-saturation-lightness values (2/3, 1, 1/2).
g = 0.61803398875
return Color((0.66666666666666 + i*g) % 1, 1, lightness, space='hsl')
diff --git a/src/sage/plot/plot3d/base.pyx b/src/sage/plot/plot3d/base.pyx
index 0f3cca16607..f1a9ac7c49b 100644
--- a/src/sage/plot/plot3d/base.pyx
+++ b/src/sage/plot/plot3d/base.pyx
@@ -975,7 +975,7 @@ cdef class Graphics3d(SageObject):
%s
-"""%(self.viewpoint().x3d_str(), self.x3d_str())
+""" % (self.viewpoint().x3d_str(), self.x3d_str())
################ TACHYON ################
@@ -1249,7 +1249,7 @@ end_scene""".format(
f.write('set labelOffset 0 0\n')
# Set the scene background color
- f.write('background [%s,%s,%s]\n'%tuple([int(a*255) for a in background]))
+ f.write('background [%s,%s,%s]\n' % tuple(int(a*255) for a in background))
if spin:
f.write('spin ON\n')
else:
@@ -2619,11 +2619,11 @@ class TransformGroup(Graphics3dGroup):
"""
s = "\n"
s += Graphics3dGroup.x3d_str(self)
s += "\n"
@@ -2886,7 +2886,7 @@ class Viewpoint(Graphics3d):
sage: sphere((0,0,0), 100).viewpoint().x3d_str()
""
"""
- return ""%self.pos
+ return "" % self.pos
cdef class PrimitiveObject(Graphics3d):
diff --git a/src/sage/plot/plot3d/index_face_set.pyx b/src/sage/plot/plot3d/index_face_set.pyx
index 04cd6866f8d..9fb52e59923 100644
--- a/src/sage/plot/plot3d/index_face_set.pyx
+++ b/src/sage/plot/plot3d/index_face_set.pyx
@@ -1012,7 +1012,7 @@ cdef class IndexFaceSet(PrimitiveObject):
sage: var('x,y,z') # needs sage.symbolic
(x, y, z)
sage: P = implicit_plot3d(z-x*y,(-2,2),(-2,2),(-2,2)) # needs sage.symbolic
- sage: def condi(x,y,z):
+ sage: def condi(x, y, z):
....: return bool(x*x+y*y+z*z <= Integer(1))
sage: R = P.add_condition(condi, 20); R # needs sage.symbolic
Graphics3d Object
@@ -1021,13 +1021,13 @@ cdef class IndexFaceSet(PrimitiveObject):
x,y,z = var('x,y,z')
P = implicit_plot3d(z-x*y,(-2,2),(-2,2),(-2,2))
- def condi(x,y,z):
+ def condi(x, y, z):
return bool(x*x+y*y+z*z <= Integer(1))
sphinx_plot(P.add_condition(condi,40))
An example with colors::
- sage: def condi(x,y,z):
+ sage: def condi(x, y, z):
....: return bool(x*x+y*y <= 1.1)
sage: cm = colormaps.hsv
sage: cf = lambda x,y,z: float(x+y) % 1
@@ -1039,7 +1039,7 @@ cdef class IndexFaceSet(PrimitiveObject):
.. PLOT::
x,y,z = var('x,y,z')
- def condi(x,y,z):
+ def condi(x, y, z):
return bool(x*x+y*y <= 1.1)
cm = colormaps.hsv
cf = lambda x,y,z: float(x+y) % 1
@@ -1050,7 +1050,7 @@ cdef class IndexFaceSet(PrimitiveObject):
sage: P = implicit_plot3d(x**4+y**4+z**2-4, (x,-2,2), (y,-2,2), (z,-2,2), # needs sage.symbolic
....: alpha=0.3)
- sage: def cut(a,b,c):
+ sage: def cut(a, b, c):
....: return a*a+c*c > 2
sage: Q = P.add_condition(cut,40); Q # needs sage.symbolic
Graphics3d Object
@@ -1059,7 +1059,7 @@ cdef class IndexFaceSet(PrimitiveObject):
x,y,z = var('x,y,z')
P = implicit_plot3d(x**4+y**4+z**2-4,(x,-2,2),(y,-2,2),(z,-2,2),alpha=0.3)
- def cut(a,b,c):
+ def cut(a, b, c):
return a*a+c*c > 2
sphinx_plot(P.add_condition(cut,40))
@@ -1067,7 +1067,7 @@ cdef class IndexFaceSet(PrimitiveObject):
sage: P = plot3d(-sin(2*x*x+2*y*y)*exp(-x*x-y*y), (x,-2,2), (y,-2,2), # needs sage.symbolic
....: color='gold')
- sage: def cut(x,y,z):
+ sage: def cut(x, y, z):
....: return x*x+y*y < 1
sage: Q = P.add_condition(cut);Q # needs sage.symbolic
Graphics3d Object
@@ -1076,7 +1076,7 @@ cdef class IndexFaceSet(PrimitiveObject):
x,y,z = var('x,y,z')
P = plot3d(-sin(2*x*x+2*y*y)*exp(-x*x-y*y),(x,-2,2),(y,-2,2),color='gold')
- def cut(x,y,z):
+ def cut(x, y, z):
return x*x+y*y < 1
sphinx_plot(P.add_condition(cut))
@@ -1087,7 +1087,7 @@ cdef class IndexFaceSet(PrimitiveObject):
sage: # needs sage.symbolic
sage: x,y,z = var('x,y,z')
sage: P = plot3d(cos(x*y),(x,-2,2),(y,-2,2),color='red',opacity=0.1)
- sage: def condi(x,y,z):
+ sage: def condi(x, y, z):
....: return not(x*x+y*y <= 1)
sage: Q = P.add_condition(condi, 40)
sage: L = Q.json_repr(Q.default_render_params())
@@ -1097,7 +1097,7 @@ cdef class IndexFaceSet(PrimitiveObject):
A test that this works with polygons::
sage: p = polygon3d([[2,0,0], [0,2,0], [0,0,3]])
- sage: def f(x,y,z):
+ sage: def f(x, y, z):
....: return bool(x*x+y*y+z*z<=5)
sage: cut = p.add_condition(f,60,1.0e-12); cut.face_list() # needs sage.symbolic
[[(0.556128491210302, 0.0, 2.165807263184547),
diff --git a/src/sage/plot/plot3d/parametric_plot3d.py b/src/sage/plot/plot3d/parametric_plot3d.py
index fa8a69a805e..6a3da2b830f 100644
--- a/src/sage/plot/plot3d/parametric_plot3d.py
+++ b/src/sage/plot/plot3d/parametric_plot3d.py
@@ -166,7 +166,7 @@ def parametric_plot3d(f, urange, vrange=None, plot_points='automatic',
values in the interval [0,1]. ::
sage: u,v = var('u,v')
- sage: def cf(u,v): return sin(u+v/2)**2
+ sage: def cf(u, v): return sin(u+v/2)**2
sage: P = parametric_plot3d((cos(u), sin(u)+cos(v), sin(v)),
....: (u,0,2*pi), (v,-pi,pi), color=(cf,colormaps.PiYG), plot_points=[60,60])
sage: P.show(viewer='tachyon')
@@ -174,7 +174,7 @@ def parametric_plot3d(f, urange, vrange=None, plot_points='automatic',
.. PLOT::
u,v = var('u,v')
- def cf(u,v): return sin(u+v/2)**2
+ def cf(u, v): return sin(u+v/2)**2
P = parametric_plot3d((cos(u), sin(u)+cos(v), sin(v)),
(u,0,2*pi), (v,-pi,pi), color=(cf,colormaps.PiYG), plot_points=[60,60])
sphinx_plot(P)
@@ -182,7 +182,7 @@ def cf(u,v): return sin(u+v/2)**2
Another example, a colored Möbius band::
sage: cm = colormaps.ocean
- sage: def c(x,y): return sin(x*y)**2
+ sage: def c(x, y): return sin(x*y)**2
sage: from sage.plot.plot3d.parametric_surface import MoebiusStrip
sage: MoebiusStrip(5, 1, plot_points=200, color=(c,cm))
Graphics3d Object
@@ -190,7 +190,7 @@ def cf(u,v): return sin(u+v/2)**2
.. PLOT::
cm = colormaps.ocean
- def c(x,y): return sin(x*y)**2
+ def c(x, y): return sin(x*y)**2
from sage.plot.plot3d.parametric_surface import MoebiusStrip
sphinx_plot(MoebiusStrip(5, 1, plot_points=200, color=(c,cm)))
@@ -198,8 +198,8 @@ def c(x,y): return sin(x*y)**2
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface
sage: cm = colormaps.autumn
- sage: def c(x,y): return sin(x*y)**2
- sage: def g(x,y): return x, y+sin(y), x**2 + y**2
+ sage: def c(x, y): return sin(x*y)**2
+ sage: def g(x, y): return x, y+sin(y), x**2 + y**2
sage: ParametricSurface(g, (srange(-10,10,0.1), srange(-5,5.0,0.1)), color=(c,cm))
Graphics3d Object
@@ -207,8 +207,8 @@ def c(x,y): return sin(x*y)**2
from sage.plot.plot3d.parametric_surface import ParametricSurface
cm = colormaps.autumn
- def c(x,y): return sin(x*y)**2
- def g(x,y): return x, y+sin(y), x**2 + y**2
+ def c(x, y): return sin(x*y)**2
+ def g(x, y): return x, y+sin(y), x**2 + y**2
sphinx_plot(ParametricSurface(g, (srange(-10,10,0.1), srange(-5,5.0,0.1)), color=(c,cm)))
We call the space curve function but with polynomials instead of
diff --git a/src/sage/plot/plot3d/parametric_surface.pyx b/src/sage/plot/plot3d/parametric_surface.pyx
index dab78e762a5..efff00af83b 100644
--- a/src/sage/plot/plot3d/parametric_surface.pyx
+++ b/src/sage/plot/plot3d/parametric_surface.pyx
@@ -18,14 +18,14 @@ AUTHORS:
EXAMPLES::
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface, MoebiusStrip
- sage: def f(x,y): return x+y, sin(x)*sin(y), x*y
+ sage: def f(x, y): return x+y, sin(x)*sin(y), x*y
sage: P = ParametricSurface(f, (srange(0,10,0.1), srange(-5,5.0,0.1)))
sage: show(P)
.. PLOT::
from sage.plot.plot3d.parametric_surface import ParametricSurface
- def f(x,y): return x+y, sin(x)*sin(y), x*y
+ def f(x, y): return x+y, sin(x)*sin(y), x*y
sphinx_plot(ParametricSurface(f, (srange(0,10,0.1), srange(-5,5.0,0.1))))
::
@@ -50,13 +50,13 @@ By default, the surface is colored with one single color. ::
.. PLOT::
from sage.plot.plot3d.parametric_surface import ParametricSurface
- def f(x,y): return x+y, sin(x)*sin(y), x*y
+ def f(x, y): return x+y, sin(x)*sin(y), x*y
sphinx_plot(ParametricSurface(f, (srange(0,10,0.1), srange(-5,5.0,0.1)), color='red'))
One can instead provide a coloring function and a colormap::
- sage: def f(x,y): return x+y, x-y, x*y
- sage: def c(x,y): return sin((x+y)/2)**2
+ sage: def f(x, y): return x+y, x-y, x*y
+ sage: def c(x, y): return sin((x+y)/2)**2
sage: cm = colormaps.RdYlGn
sage: P = ParametricSurface(f, (srange(-5,5,0.1), srange(-5,5.0,0.1)), color=(c,cm))
sage: P.show(viewer='tachyon')
@@ -64,8 +64,8 @@ One can instead provide a coloring function and a colormap::
.. PLOT::
from sage.plot.plot3d.parametric_surface import ParametricSurface
- def f(x,y): return x+y, x-y, x*y
- def c(x,y): return sin((x+y)/2)**2
+ def f(x, y): return x+y, x-y, x*y
+ def c(x, y): return sin((x+y)/2)**2
cm = colormaps.RdYlGn
sphinx_plot(ParametricSurface(f, (srange(-5,5,0.1), srange(-5,5.0,0.1)), color=(c,cm)))
@@ -75,7 +75,7 @@ This value is passed to the chosen colormap.
Another colored example::
sage: colm = colormaps.autumn
- sage: def g(x,y): return x, y, x**2 + y**2
+ sage: def g(x, y): return x, y, x**2 + y**2
sage: P = ParametricSurface(g, (srange(-10,10,0.1), srange(-5,5.0,0.1)), color=(c,colm))
sage: P.show(viewer='tachyon')
@@ -83,8 +83,8 @@ Another colored example::
from sage.plot.plot3d.parametric_surface import ParametricSurface
colm = colormaps.autumn
- def g(x,y): return x, y, x**2 + y**2
- def c(x,y): return sin((x+y)/2)**2
+ def g(x, y): return x, y, x**2 + y**2
+ def c(x, y): return sin((x+y)/2)**2
sphinx_plot(ParametricSurface(g, (srange(-10,10,0.1), srange(-5,5.0,0.1)), color=(c,colm)))
.. NOTE::
@@ -161,7 +161,7 @@ cdef class ParametricSurface(IndexFaceSet):
EXAMPLES::
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface
- sage: def f(x,y): return cos(x)*sin(y), sin(x)*sin(y), cos(y)+log(tan(y/2))+0.2*x
+ sage: def f(x, y): return cos(x)*sin(y), sin(x)*sin(y), cos(y)+log(tan(y/2))+0.2*x
sage: S = ParametricSurface(f, (srange(0,12.4,0.1), srange(0.1,2,0.1)))
sage: show(S)
@@ -171,14 +171,14 @@ cdef class ParametricSurface(IndexFaceSet):
.. PLOT::
from sage.plot.plot3d.parametric_surface import ParametricSurface
- def f(x,y): return cos(x)*sin(y), sin(x)*sin(y), cos(y)+log(tan(y/2))+0.2*x
+ def f(x, y): return cos(x)*sin(y), sin(x)*sin(y), cos(y)+log(tan(y/2))+0.2*x
sphinx_plot(ParametricSurface(f, (srange(0,12.4,0.1), srange(0.1,2,0.1))))
The Hessenberg surface:
::
- sage: def f(u,v):
+ sage: def f(u, v):
....: a = 1
....: from math import cos, sin, sinh, cosh
....: x = cos(a)*(cos(u)*sinh(v)-cos(3*u)*sinh(3*v)/3) + sin(a)*(
@@ -194,7 +194,7 @@ cdef class ParametricSurface(IndexFaceSet):
.. PLOT::
- def f(u,v):
+ def f(u, v):
a = 1
from math import cos, sin, sinh, cosh
x = cos(a)*(cos(u)*sinh(v)-cos(3*u)*sinh(3*v)/3) + sin(a)*(sin(u)*cosh(v)-sin(3*u)*cosh(3*v)/3)
@@ -207,8 +207,8 @@ cdef class ParametricSurface(IndexFaceSet):
A colored example using the ``color`` keyword::
- sage: def g(x,y): return x, y, - x**2 + y**2
- sage: def c(x,y): return sin((x-y/2)*y/4)**2
+ sage: def g(x, y): return x, y, - x**2 + y**2
+ sage: def c(x, y): return sin((x-y/2)*y/4)**2
sage: cm = colormaps.gist_rainbow
sage: P = ParametricSurface(g, (srange(-10,10,0.1),
....: srange(-5,5.0,0.1)),color=(c,cm))
@@ -217,8 +217,8 @@ cdef class ParametricSurface(IndexFaceSet):
.. PLOT::
from sage.plot.plot3d.parametric_surface import ParametricSurface
- def g(x,y): return x, y, - x**2 + y**2
- def c(x,y): return sin((x-y/2)*y/4)**2
+ def g(x, y): return x, y, - x**2 + y**2
+ def c(x, y): return sin((x-y/2)*y/4)**2
cm = colormaps.gist_rainbow
sphinx_plot(ParametricSurface(g, (srange(-10,10,0.1), srange(-5,5.0,0.1)),color=(c,cm)))
"""
@@ -231,7 +231,7 @@ cdef class ParametricSurface(IndexFaceSet):
EXAMPLES::
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface
- sage: def f(x,y): return x+y, sin(x)*sin(y), x*y
+ sage: def f(x, y): return x+y, sin(x)*sin(y), x*y
sage: S = ParametricSurface(f, (srange(0,12.4,0.1), srange(0.1,2,0.1)))
"""
if isinstance(f, list):
@@ -489,7 +489,7 @@ cdef class ParametricSurface(IndexFaceSet):
TESTS::
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface, MoebiusStrip
- sage: def f(x,y): return x+y, sin(x)*sin(y), x*y # indirect doctests
+ sage: def f(x, y): return x+y, sin(x)*sin(y), x*y # indirect doctests
sage: P = ParametricSurface(f, (srange(0,10,0.1), srange(-5,5.0,0.1))) # indirect doctests
sage: P.show() # indirect doctests
sage: S = MoebiusStrip(1, .2) # indirect doctests
@@ -638,7 +638,7 @@ cdef class ParametricSurface(IndexFaceSet):
TESTS::
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface
- sage: def f(x,y): return x+y,x-y,x*y
+ sage: def f(x, y): return x+y,x-y,x*y
sage: P = ParametricSurface(f)
sage: P.get_grid(.1)
Traceback (most recent call last):
@@ -763,7 +763,7 @@ cdef class ParametricSurface(IndexFaceSet):
TESTS::
sage: from sage.plot.plot3d.parametric_surface import ParametricSurface
- sage: def f(x,y): return x+y,x-y,x*y
+ sage: def f(x, y): return x+y,x-y,x*y
sage: P = ParametricSurface(f,(srange(0,1,0.1),srange(0,1,0.1)))
sage: P.eval(0,0)
Traceback (most recent call last):
diff --git a/src/sage/plot/plot3d/plot3d.py b/src/sage/plot/plot3d/plot3d.py
index 3b583082a9a..9f5b9a8d94d 100644
--- a/src/sage/plot/plot3d/plot3d.py
+++ b/src/sage/plot/plot3d/plot3d.py
@@ -19,7 +19,7 @@
::
- sage: def f(x,y):
+ sage: def f(x, y):
....: return math.sin(y^2 + x^2)/math.sqrt(x^2 + y^2 + 0.0001)
sage: P = plot3d(f, (-3, 3),(-3, 3), adaptive=True,
....: color=rainbow(60, 'rgbtuple'), max_bend=.1, max_depth=15)
@@ -27,13 +27,13 @@
.. PLOT::
- def f(x,y): return math.sin(y**2 + x**2)/math.sqrt(x**2 + y**2 + 0.0001)
+ def f(x, y): return math.sin(y**2 + x**2)/math.sqrt(x**2 + y**2 + 0.0001)
P = plot3d(f, (-3, 3), (-3, 3), adaptive=True, color=rainbow(60, 'rgbtuple'), max_bend=.1, max_depth=15)
sphinx_plot(P)
::
- sage: def f(x,y):
+ sage: def f(x, y):
....: return math.exp(x/5)*math.sin(y)
....:
sage: P = plot3d(f, (-5, 5), (-5, 5), adaptive=True, color=['red', 'yellow'])
@@ -43,7 +43,7 @@ def f(x,y): return math.sin(y**2 + x**2)/math.sqrt(x**2 + y**2 + 0.0001)
.. PLOT::
- def f(x,y): return math.exp(x/5)*math.sin(y)
+ def f(x, y): return math.exp(x/5)*math.sin(y)
P = plot3d(f, (-5, 5), (-5, 5), adaptive=True, color=['red', 'yellow'])
from sage.plot.plot3d.plot3d import axes
S = P + axes(6, color='black')
@@ -82,7 +82,7 @@ def c(x, y): return float((x + y + x*y)/15) % 1
sage: S += sphere((.45, .1, .15), size=.1, color='white')
sage: S += sphere((.51, .1,.17), size=.05, color='black')
sage: S += sphere((.5, 0, -.2), size=.1, color='yellow')
- sage: def f(x,y): return math.exp(x/5)*math.cos(y)
+ sage: def f(x, y): return math.exp(x/5)*math.cos(y)
sage: P = plot3d(f, (-5, 5), (-5, 5), adaptive=True,
....: color=['red','yellow'], max_depth=10)
sage: cape_man = P.scale(.2) + S.translate(1, 0, 0)
@@ -96,7 +96,7 @@ def c(x, y): return float((x + y + x*y)/15) % 1
S += sphere((.45, -.1, .15), size=.1, color='white') + sphere((.51,-.1,.17), size=.05, color='black')
S += sphere((.45, .1, .15), size=.1, color='white') + sphere((.51, .1,.17), size=.05, color='black')
S += sphere((.5, 0, -.2), size=.1, color='yellow')
- def f(x,y): return math.exp(x/5)*math.cos(y)
+ def f(x, y): return math.exp(x/5)*math.cos(y)
P = plot3d(f, (-5, 5), (-5, 5), adaptive=True, color=['red','yellow'], max_depth=10)
cape_man = P.scale(.2) + S.translate(1, 0, 0)
cape_man.aspect_ratio([1, 1, 1])
@@ -272,7 +272,7 @@ def to_cartesian(self, func, params=None):
FullArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=None,
kwonlyargs=[], kwonlydefaults=None, annotations={})
- sage: def g(a,b): return 2*a+b
+ sage: def g(a, b): return 2*a+b
sage: t1,t2,t3=T.to_cartesian(g)
sage: sage_getargspec(t1)
FullArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=None,
@@ -319,7 +319,9 @@ def to_cartesian(self, func, params=None):
from sage.structure.element import Expression
from sage.rings.real_mpfr import RealNumber
from sage.rings.integer import Integer
- if params is not None and (isinstance(func, Expression) or isinstance(func, RealNumber) or isinstance(func, Integer)):
+ if params is not None and isinstance(func, (Expression,
+ RealNumber,
+ Integer)):
return self.transform(**{
self.dep_var: func,
self.indep_vars[0]: params[0],
@@ -387,12 +389,12 @@ def _find_arguments_for_callable(func):
sage: from sage.plot.plot3d.plot3d import _find_arguments_for_callable
sage: _find_arguments_for_callable(lambda x,y: x+y)
['x', 'y']
- sage: def f(a,b,c): return a+b+c
+ sage: def f(a, b, c): return a+b+c
sage: _find_arguments_for_callable(f)
['a', 'b', 'c']
sage: _find_arguments_for_callable(lambda x,y,z=2: x+y+z)
['x', 'y']
- sage: def f(a,b,c,d=2,e=1): return a+b+c+d+e
+ sage: def f(a, b, c, d=2, e=1): return a+b+c+d+e
sage: _find_arguments_for_callable(f)
['a', 'b', 'c']
sage: g(w,r,t)=w+r+t
diff --git a/src/sage/plot/plot3d/revolution_plot3d.py b/src/sage/plot/plot3d/revolution_plot3d.py
index 6c16263d971..721573516a5 100644
--- a/src/sage/plot/plot3d/revolution_plot3d.py
+++ b/src/sage/plot/plot3d/revolution_plot3d.py
@@ -27,7 +27,7 @@
@rename_keyword(alpha='opacity')
-def revolution_plot3d(curve,trange,phirange=None,parallel_axis='z',axis=(0,0),print_vector=False,show_curve=False,**kwds):
+def revolution_plot3d(curve, trange, phirange=None, parallel_axis='z', axis=(0, 0), print_vector=False, show_curve=False, **kwds):
r"""
Return a plot of a revolved curve.
@@ -196,7 +196,7 @@ def revolution_plot3d(curve,trange,phirange=None,parallel_axis='z',axis=(0,0),pr
function must take values in the interval `[0,1]`. ::
sage: u, phi = var('u,phi')
- sage: def cf(u,phi): return sin(phi+u) ^ 2
+ sage: def cf(u, phi): return sin(phi+u) ^ 2
sage: curve = (1+u^2/4, 0, u)
sage: revolution_plot3d(curve, (u,-2,2), (0,2*pi), parallel_axis='z',
....: color=(cf, colormaps.PiYG)).show(aspect_ratio=(1,1,1))
diff --git a/src/sage/plot/plot3d/shapes.pyx b/src/sage/plot/plot3d/shapes.pyx
index 48369a64a07..4acab1a14eb 100644
--- a/src/sage/plot/plot3d/shapes.pyx
+++ b/src/sage/plot/plot3d/shapes.pyx
@@ -483,7 +483,7 @@ cdef class Cylinder(ParametricSurface):
Base %s %s %s
Apex %s %s %s
Rad %s
- %s """%(base[0], base[1], base[2], top[0], top[1], top[2], rad, self.texture.id)
+ %s """ % (base[0], base[1], base[2], top[0], top[1], top[2], rad, self.texture.id)
if self.closed:
normal = (0,0,1)
if transform is not None:
@@ -866,7 +866,7 @@ cdef class Sphere(ParametricSurface):
sage: Sphere(12).x3d_geometry()
""
"""
- return ""%(self.radius)
+ return "" % (self.radius)
def tachyon_repr(self, render_params):
r"""
@@ -1111,7 +1111,7 @@ class Text(PrimitiveObject):
sage: Text("Hi").x3d_geometry()
""
"""
- return ""%self.string
+ return "" % self.string
def obj_repr(self, render_params):
"""
diff --git a/src/sage/plot/plot3d/tachyon.py b/src/sage/plot/plot3d/tachyon.py
index 83315e33368..adb1d80b7be 100644
--- a/src/sage/plot/plot3d/tachyon.py
+++ b/src/sage/plot/plot3d/tachyon.py
@@ -559,7 +559,7 @@ def show(self, **kwds):
sage: h = Tachyon(xres=512, yres=512, camera_position=(4,-4,3),
....: viewdir=(-4,4,-3), raydepth=4)
sage: h.light((4.4,-4.4,4.4), 0.2, (1,1,1))
- sage: def f(x,y): return float(sin(x*y))
+ sage: def f(x, y): return float(sin(x*y))
sage: h.texture('t0', ambient=0.1, diffuse=0.9, specular=0.1,
....: opacity=1.0, color=(1.0,0,0))
sage: h.plot(f, (-4,4), (-4,4), "t0", max_depth=5, initial_depth=3, # needs sage.symbolic
@@ -577,7 +577,7 @@ def show(self, **kwds):
sage: s = Tachyon(xres=512, yres=512, camera_position=(4,-4,3),
....: viewdir=(-4,4,-3), raydepth=4)
sage: s.light((4.4,-4.4,4.4), 0.2, (1,1,1))
- sage: def f(x,y): return float(sin(x*y))
+ sage: def f(x, y): return float(sin(x*y))
sage: s.texture('t0', ambient=0.1, diffuse=0.9, specular=0.1,
....: opacity=1.0, color=(1.0,0,0))
sage: s.plot(f, (-4,4), (-4,4), "t0", max_depth=5, initial_depth=3, # needs sage.symbolic
@@ -600,7 +600,7 @@ def show(self, **kwds):
sage: d = Tachyon(xres=512, yres=512, camera_position=(4,-4,3),
....: viewdir=(-4,4,-3), raydepth=4)
sage: d.light((4.4,-4.4,4.4), 0.2, (1,1,1))
- sage: def f(x,y): return float(sin(x*y))
+ sage: def f(x, y): return float(sin(x*y))
sage: d.texture('t0', ambient=0.1, diffuse=0.9, specular=0.1,
....: opacity=1.0, color=(1.0,0,0))
sage: d.plot(f,(-4,4),(-4,4),"t0",max_depth=5,initial_depth=3, # needs sage.symbolic
@@ -1004,7 +1004,7 @@ def plot(self, f, xmin_xmax, ymin_ymax, texture, grad_f=None,
sage: t = Tachyon(xres=512, yres=512, camera_position=(4,-4,3),
....: viewdir=(-4,4,-3), raydepth=4)
sage: t.light((4.4,-4.4,4.4), 0.2, (1,1,1))
- sage: def f(x,y): return float(sin(x*y))
+ sage: def f(x, y): return float(sin(x*y))
sage: t.texture('t0', ambient=0.1, diffuse=0.9, specular=0.1,
....: opacity=1.0, color=(1.0,0,0))
sage: t.plot(f, (-4,4), (-4,4), "t0", max_depth=5, initial_depth=3, # needs sage.symbolic
@@ -1020,8 +1020,8 @@ def plot(self, f, xmin_xmax, ymin_ymax, texture, grad_f=None,
sage: t = Tachyon(xres=512, yres=512, camera_position=(4,-4,3),
....: viewdir=(-4,4,-3), raydepth=4)
sage: t.light((4.4,-4.4,4.4), 0.2, (1,1,1))
- sage: def f(x,y): return float(sin(x*y))
- sage: def g(x,y): return (float(y*cos(x*y)), float(x*cos(x*y)), 1)
+ sage: def f(x, y): return float(sin(x*y))
+ sage: def g(x, y): return (float(y*cos(x*y)), float(x*cos(x*y)), 1)
sage: t.texture('t0', ambient=0.1, diffuse=0.9, specular=0.1,
....: opacity=1.0, color=(1.0,0,0))
sage: t.plot(f, (-4,4), (-4,4), "t0", max_depth=5, initial_depth=3, # needs sage.symbolic
diff --git a/src/sage/plot/plot3d/tri_plot.py b/src/sage/plot/plot3d/tri_plot.py
index 4453d8c574c..a2e843778eb 100644
--- a/src/sage/plot/plot3d/tri_plot.py
+++ b/src/sage/plot/plot3d/tri_plot.py
@@ -30,7 +30,7 @@ class Triangle:
"""
A graphical triangle class.
"""
- def __init__(self,a,b,c,color=0):
+ def __init__(self, a, b, c, color=0):
"""
a, b, c : triples (x,y,z) representing corners on a triangle in 3-space.
@@ -101,7 +101,7 @@ class SmoothTriangle(Triangle):
"""
A class for smoothed triangles.
"""
- def __init__(self,a,b,c,da,db,dc,color=0):
+ def __init__(self, a, b, c, da, db, dc, color=0):
"""
a, b, c : triples (x,y,z) representing corners on a triangle in 3-space
da, db, dc : triples (dx,dy,dz) representing the normal vector at each point a,b,c
@@ -265,10 +265,10 @@ def __init__(self, triangle_factory, f, min_x__max_x, min_y__max_y, g=None,
raise ValueError('plot rectangle is really a line; make sure min_x != max_x and min_y != max_y')
self._num_colors = num_colors
if g is None:
- def fcn(x,y):
+ def fcn(x, y):
return [self._f(x,y)]
else:
- def fcn(x,y):
+ def fcn(x, y):
return [self._f(x,y), self._g(x,y)]
self._fcn = fcn
@@ -541,7 +541,7 @@ def extrema(self, list):
self._max = max(list+[self._max])
-def crossunit(u,v):
+def crossunit(u, v):
"""
This function computes triangle normal unit vectors by taking the
cross-products of the midpoint-to-corner vectors. It always goes
diff --git a/src/sage/quadratic_forms/quadratic_form.py b/src/sage/quadratic_forms/quadratic_form.py
index 88df6dfcb9c..e303b3292c3 100644
--- a/src/sage/quadratic_forms/quadratic_form.py
+++ b/src/sage/quadratic_forms/quadratic_form.py
@@ -1051,9 +1051,9 @@ def __call__(self, v):
Q2 = QuadraticForm(self.base_ring(), m)
return QFEvaluateMatrix(self, v, Q2)
- elif (isinstance(v, Vector) or isinstance(v, (list, tuple))):
+ elif isinstance(v, (Vector, list, tuple)):
# Check the vector/tuple/list has the correct length
- if not (len(v) == n):
+ if len(v) != n:
raise TypeError(f"your vector needs to have length {n}")
# TO DO: Check that the elements can be coerced into the base ring of Q -- on first elt.
diff --git a/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py b/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py
index 0e447f982dd..3922767e870 100644
--- a/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py
+++ b/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py
@@ -25,7 +25,7 @@
# TO DO -- Add second argument
-# def __call__(self,v,w=None):
+# def __call__(self, v, w=None):
# if w is None:
# return half(v * self._matrix_() * v)
# else:
diff --git a/src/sage/quadratic_forms/ternary_qf.py b/src/sage/quadratic_forms/ternary_qf.py
index 79436ff4f77..dbc73a90f34 100644
--- a/src/sage/quadratic_forms/ternary_qf.py
+++ b/src/sage/quadratic_forms/ternary_qf.py
@@ -234,7 +234,7 @@ def __call__(self, v):
M[1, 2], M[0, 2], M[0, 1]])
else:
return QuadraticForm(ZZ, v.transpose() * self.matrix() * v)
- elif (isinstance(v, Vector) or isinstance(v, (list, tuple))):
+ elif isinstance(v, (Vector, list, tuple)):
# Check that v has length 3
if len(v) != 3:
raise TypeError("your vector needs to have length 3")
diff --git a/src/sage/rings/asymptotic/growth_group.py b/src/sage/rings/asymptotic/growth_group.py
index cf9cf74ca70..ca2afc2b92c 100644
--- a/src/sage/rings/asymptotic/growth_group.py
+++ b/src/sage/rings/asymptotic/growth_group.py
@@ -3671,6 +3671,7 @@ def non_growth_group(self):
J = ImaginaryGroup(self.base())
return self._non_growth_group_class_(J, self._var_)
+
class MonomialGrowthGroupFunctor(AbstractGrowthGroupFunctor):
r"""
A :class:`construction functor `
diff --git a/src/sage/rings/asymptotic/growth_group_cartesian.py b/src/sage/rings/asymptotic/growth_group_cartesian.py
index 0bdb3d4a1eb..19bb7d975a6 100644
--- a/src/sage/rings/asymptotic/growth_group_cartesian.py
+++ b/src/sage/rings/asymptotic/growth_group_cartesian.py
@@ -253,6 +253,8 @@ def create_object(self, version, args, **kwds):
from sage.combinat.posets.cartesian_product import CartesianProductPoset
from .growth_group import GenericGrowthGroup
+
+
class GenericProduct(CartesianProductPoset, GenericGrowthGroup):
r"""
A Cartesian product of growth groups.
diff --git a/src/sage/rings/bernmm.pyx b/src/sage/rings/bernmm.pyx
index 492181f1f22..f3af4355bd0 100644
--- a/src/sage/rings/bernmm.pyx
+++ b/src/sage/rings/bernmm.pyx
@@ -39,7 +39,7 @@ cdef extern from "bernmm/bern_modp.h":
from sage.rings.rational cimport Rational
-def bernmm_bern_rat(long k, int num_threads = 1):
+def bernmm_bern_rat(long k, int num_threads=1):
r"""
Compute `k`-th Bernoulli number using a multimodular algorithm.
(Wrapper for bernmm library.)
diff --git a/src/sage/rings/complex_double.pyx b/src/sage/rings/complex_double.pyx
index d6e5a7d05b1..98477e0dd72 100644
--- a/src/sage/rings/complex_double.pyx
+++ b/src/sage/rings/complex_double.pyx
@@ -2601,7 +2601,7 @@ cdef class ComplexToCDF(Morphism):
cdef ComplexDoubleField_class _CDF
_CDF = ComplexDoubleField_class()
CDF = _CDF # external interface
-cdef ComplexDoubleElement I = ComplexDoubleElement(0,1)
+cdef ComplexDoubleElement I = ComplexDoubleElement(0, 1)
def ComplexDoubleField():
diff --git a/src/sage/rings/complex_interval.pyx b/src/sage/rings/complex_interval.pyx
index c9273384788..60bc5b5abff 100644
--- a/src/sage/rings/complex_interval.pyx
+++ b/src/sage/rings/complex_interval.pyx
@@ -250,14 +250,14 @@ cdef class ComplexIntervalFieldElement(FieldElement):
s = self.real().str(base=base, style=style)
if not self.imag().is_zero():
y = self.imag()
- if s!="":
+ if s:
if y < 0:
- s = s+" - "
+ s += " - "
y = -y
else:
- s = s+" + "
- s = s+"%s*I"%y.str(base=base, style=style)
- if len(s) == 0:
+ s += " + "
+ s += "%s*I" % y.str(base=base, style=style)
+ if not s:
s = "0"
return s
@@ -321,7 +321,7 @@ cdef class ComplexIntervalFieldElement(FieldElement):
g = polygon2d([(x0, y0), (x1, y0), (x1, y1), (x0, y1), (x0, y0)],
thickness=pointsize/4, **kwds)
# Nearly empty polygons don't show up.
- g += self.center().plot(pointsize= pointsize, **kwds)
+ g += self.center().plot(pointsize=pointsize, **kwds)
return g
def _latex_(self):
diff --git a/src/sage/rings/complex_interval_field.py b/src/sage/rings/complex_interval_field.py
index 0b6981cf07b..c090d6cdae2 100644
--- a/src/sage/rings/complex_interval_field.py
+++ b/src/sage/rings/complex_interval_field.py
@@ -49,6 +49,8 @@
from sage.structure.parent import Parent
cache = {}
+
+
def ComplexIntervalField(prec=53, names=None):
"""
Return the complex interval field with real and imaginary parts having
diff --git a/src/sage/rings/finite_rings/conway_polynomials.py b/src/sage/rings/finite_rings/conway_polynomials.py
index ff5873ee14b..70a851990ad 100644
--- a/src/sage/rings/finite_rings/conway_polynomials.py
+++ b/src/sage/rings/finite_rings/conway_polynomials.py
@@ -64,6 +64,7 @@ def conway_polynomial(p, n):
except KeyError:
raise RuntimeError("requested Conway polynomial not in database.")
+
def exists_conway_polynomial(p, n):
"""
Check whether the Conway polynomial of degree `n` over ``GF(p)``
@@ -99,6 +100,7 @@ def exists_conway_polynomial(p, n):
except ImportError:
return False
+
class PseudoConwayLattice(WithEqualityById, SageObject):
r"""
A pseudo-Conway lattice over a given finite prime field.
@@ -328,6 +330,7 @@ def _find_pow_of_frobenius(p, n, x, y):
raise RuntimeError("No appropriate power of Frobenius found")
return mod(i, n)
+
def _crt_non_coprime(running, a):
"""
Extension of the ``crt`` method of ``IntegerMod`` to the case of
@@ -361,6 +364,7 @@ def _crt_non_coprime(running, a):
a_modulus = a_val_unit[1]
return (running % running_modulus).crt(a % a_modulus)
+
def _frobenius_shift(K, generators, check_only=False):
"""
Given a field `K` of degree `n` over ``GF(p)`` and a dictionary
diff --git a/src/sage/rings/finite_rings/element_base.pyx b/src/sage/rings/finite_rings/element_base.pyx
index aa0a66b4748..6ac8470d4c9 100755
--- a/src/sage/rings/finite_rings/element_base.pyx
+++ b/src/sage/rings/finite_rings/element_base.pyx
@@ -22,7 +22,6 @@ from sage.structure.element cimport Element
from sage.structure.parent cimport Parent
from sage.rings.integer_ring import ZZ
from sage.rings.integer import Integer
-from sage.misc.superseded import deprecated_function_alias
def is_FiniteFieldElement(x):
@@ -202,7 +201,7 @@ cdef class FinitePolyExtElement(FiniteRingElement):
f = Cx([base_map(c) for c in f])
return codomain(f(im_gens[0]))
- def minpoly(self,var='x',algorithm='pari'):
+ def minpoly(self, var='x', algorithm='pari'):
"""
Return the minimal polynomial of this element
(over the corresponding prime subfield).
@@ -822,7 +821,7 @@ cdef class FinitePolyExtElement(FiniteRingElement):
"""
return self.square_root(extend=extend, all=all)
- def nth_root(self, n, extend = False, all = False, algorithm=None, cunningham=False):
+ def nth_root(self, n, extend=False, all=False, algorithm=None, cunningham=False):
r"""
Return an `n`-th root of ``self``.
@@ -941,7 +940,7 @@ cdef class FinitePolyExtElement(FiniteRingElement):
n = Integer(n)
return self._nth_root_common(n, all, algorithm, cunningham)
- def pth_power(self, int k = 1):
+ def pth_power(self, int k=1):
"""
Return the `(p^k)`-th power of self, where `p` is the
characteristic of the field.
@@ -975,7 +974,7 @@ cdef class FinitePolyExtElement(FiniteRingElement):
frobenius = pth_power
- def pth_root(self, int k = 1):
+ def pth_root(self, int k=1):
"""
Return the `(p^k)`-th root of self, where `p` is the characteristic
of the field.
@@ -1104,8 +1103,6 @@ cdef class FinitePolyExtElement(FiniteRingElement):
f = f.reverse(self.parent().degree() - 1)
return f(p)
- integer_representation = deprecated_function_alias(33941, to_integer)
-
def to_bytes(self, byteorder='big'):
r"""
Return an array of bytes representing an integer.
diff --git a/src/sage/rings/finite_rings/finite_field_base.pyx b/src/sage/rings/finite_rings/finite_field_base.pyx
index 085ce14ce87..c1d0c58a4d3 100644
--- a/src/sage/rings/finite_rings/finite_field_base.pyx
+++ b/src/sage/rings/finite_rings/finite_field_base.pyx
@@ -41,7 +41,6 @@ from sage.misc.cachefunc import cached_method
from sage.misc.prandom import randrange
from sage.rings.integer cimport Integer
import sage.rings.abc
-from sage.misc.superseded import deprecation_cython as deprecation, deprecated_function_alias
# Copied from sage.misc.fast_methods, used in __hash__() below.
cdef int SIZEOF_VOID_P_SHIFT = 8*sizeof(void *) - 4
@@ -457,8 +456,6 @@ cdef class FiniteField(Field):
r = r * g + self(d)
return r
- fetch_int = deprecated_function_alias(33941, from_integer)
-
def _is_valid_homomorphism_(self, codomain, im_gens, base_map=None):
"""
Return ``True`` if the map from ``self`` to codomain sending
@@ -846,7 +843,7 @@ cdef class FiniteField(Field):
"""
return 1
- def is_field(self, proof = True):
+ def is_field(self, proof=True):
"""
Return whether or not the finite field is a field, i.e.,
always returns ``True``.
diff --git a/src/sage/rings/finite_rings/finite_field_givaro.py b/src/sage/rings/finite_rings/finite_field_givaro.py
index ce61efb8edd..ea40970b276 100644
--- a/src/sage/rings/finite_rings/finite_field_givaro.py
+++ b/src/sage/rings/finite_rings/finite_field_givaro.py
@@ -23,7 +23,6 @@
from sage.rings.integer import Integer
from sage.rings.finite_rings.element_givaro import Cache_givaro
from sage.libs.pari.all import pari
-from sage.misc.superseded import deprecated_function_alias
class FiniteField_givaro(FiniteField):
@@ -488,8 +487,6 @@ def from_integer(self, n):
"""
return self._cache.fetch_int(n)
- fetch_int = deprecated_function_alias(33941, from_integer)
-
def _pari_modulus(self):
"""
Return the modulus of ``self`` in a format for PARI.
diff --git a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py
index 2bfda7690d3..92404849b4e 100644
--- a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py
+++ b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py
@@ -18,7 +18,6 @@
from sage.rings.finite_rings.finite_field_base import FiniteField
from sage.libs.pari.all import pari
from sage.rings.integer import Integer
-from sage.misc.superseded import deprecated_function_alias
def late_import():
@@ -289,8 +288,6 @@ def from_integer(self, number):
"""
return self._cache.fetch_int(number)
- fetch_int = deprecated_function_alias(33941, from_integer)
-
def _pari_modulus(self):
"""
Return PARI object which is equivalent to the
diff --git a/src/sage/rings/finite_rings/finite_field_pari_ffelt.py b/src/sage/rings/finite_rings/finite_field_pari_ffelt.py
index 9549dbc94b4..6bc637c94b3 100644
--- a/src/sage/rings/finite_rings/finite_field_pari_ffelt.py
+++ b/src/sage/rings/finite_rings/finite_field_pari_ffelt.py
@@ -21,6 +21,7 @@
from .finite_field_base import FiniteField
from .finite_field_constructor import GF
+
class FiniteField_pari_ffelt(FiniteField):
"""
Finite fields whose cardinality is a prime power (not a prime),
diff --git a/src/sage/rings/finite_rings/galois_group.py b/src/sage/rings/finite_rings/galois_group.py
index 32e23a40c44..880aea93c76 100644
--- a/src/sage/rings/finite_rings/galois_group.py
+++ b/src/sage/rings/finite_rings/galois_group.py
@@ -8,6 +8,7 @@
from sage.rings.integer_ring import ZZ
from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic, FrobeniusEndomorphism_finite_field
+
class GaloisGroup_GFElement(AbelianGroupElement):
def as_hom(self):
r"""
@@ -52,6 +53,7 @@ def fixed_field(self):
"""
return self.as_hom().fixed_field()
+
class GaloisGroup_GF(GaloisGroup_cyc):
r"""
The Galois group of a finite field.
@@ -140,7 +142,7 @@ def _element_constructor_(self, x, check=True):
else:
raise RuntimeError("Automorphism was not a power of Frobenius")
elif isinstance(x, FrobeniusEndomorphism_finite_field):
- if check and not x.domain() is k:
+ if check and x.domain() is not k:
raise ValueError("Not an automorphism of the correct finite field")
n = x.power()
elif isinstance(x, list) and len(x) == 1 and x[0] in ZZ:
diff --git a/src/sage/rings/finite_rings/homset.py b/src/sage/rings/finite_rings/homset.py
index 6c15d725f43..617f9da0086 100644
--- a/src/sage/rings/finite_rings/homset.py
+++ b/src/sage/rings/finite_rings/homset.py
@@ -43,6 +43,7 @@
from sage.rings.morphism import RingHomomorphism_im_gens
from sage.structure.sequence import Sequence
+
class FiniteFieldHomset(RingHomset_generic):
"""
Set of homomorphisms with domain a given finite field.
diff --git a/src/sage/rings/finite_rings/integer_mod.pyx b/src/sage/rings/finite_rings/integer_mod.pyx
index 0b220e81a1e..cf2d43ca59a 100644
--- a/src/sage/rings/finite_rings/integer_mod.pyx
+++ b/src/sage/rings/finite_rings/integer_mod.pyx
@@ -1350,7 +1350,7 @@ cdef class IntegerMod_abstract(FiniteRingElement):
square_root = sqrt
- def nth_root(self, n, extend = False, all = False, algorithm = None, cunningham = False):
+ def nth_root(self, n, extend=False, all=False, algorithm=None, cunningham=False):
r"""
Return an `n`-th root of ``self``.
diff --git a/src/sage/rings/finite_rings/integer_mod_ring.py b/src/sage/rings/finite_rings/integer_mod_ring.py
index 5117119dbf4..893fde4e929 100644
--- a/src/sage/rings/finite_rings/integer_mod_ring.py
+++ b/src/sage/rings/finite_rings/integer_mod_ring.py
@@ -47,6 +47,8 @@
- Simon King (2011-04-21): allow to prescribe a category
- Simon King (2013-09): Only allow to prescribe the category of fields
+
+- Kyle Hofmann (2024-02): New implementation of root-finding
"""
# ****************************************************************************
@@ -66,6 +68,8 @@
from sage.arith.misc import primitive_root
from sage.arith.misc import CRT_basis
from sage.rings.ring import Field, CommutativeRing
+from sage.misc.mrange import cartesian_product_iterator
+import sage.rings.ring as ring
import sage.rings.abc
from sage.rings.finite_rings import integer_mod
import sage.rings.integer as integer
@@ -1547,6 +1551,425 @@ def random_element(self, bound=None):
a = random.randint(0, self.order() - 1)
return self(a)
+ @staticmethod
+ def _lift_residue_field_root(p, e, f, fprime, root):
+ """Lifts a root of f
+
+ INPUT:
+
+ - ``p`` -- integer, a prime number
+ - ``e`` -- positive integer
+ - ``f`` -- polynomial with coefficients in ``IntegerModRing(p**e)``
+ - ``fprime`` -- derivative of ``f``
+ - ``root`` -- Element of ``IntegerModRing(p)`` with ``f(root) = 0``
+
+ OUTPUT: iterable of roots of ``f`` modulo ``p**e``. Each root is an
+ ``IntegerModRing(p**e)`` element.
+
+ TESTS::
+
+ sage: R = Zmod(2)
+ sage: S. = R[]
+ sage: R._lift_residue_field_root(2, 1, S.zero(), S.zero(), R(0))
+ (0,)
+
+ Lifting roots of the zero polynomial::
+
+ sage: R = Zmod(41)
+ sage: S. = R[]
+ sage: R._lift_residue_field_root(41, 1, S.zero(), S.zero(), R(12))
+ (12,)
+ sage: R = Zmod(5**2)
+ sage: S. = R[]
+ sage: R._lift_residue_field_root(5, 2, S.zero(), S.zero(), R(2))
+ [2, 7, 12, 17, 22]
+ sage: R = Zmod(2**3)
+ sage: S. = R[]
+ sage: R._lift_residue_field_root(2, 3, S.zero(), S.zero(), R(1))
+ [1, 5, 3, 7]
+
+ Trivial case where ``e == 1``::
+
+ sage: R = Zmod(41)
+ sage: S. = R[]
+ sage: f = x^2 - 2
+ sage: R._lift_residue_field_root(41, 1, f, f.derivative(), R(17))
+ (17,)
+
+ sage: R = Zmod(43)
+ sage: S. = R[]
+ sage: f = x^43 - 3
+ sage: R._lift_residue_field_root(43, 1, f, f.derivative(), R(3))
+ (3,)
+
+ Non-singular cases with one step of lifting::
+
+ sage: R = Zmod(2**2)
+ sage: S. = R[]
+ sage: f = x - 1
+ sage: R._lift_residue_field_root(2, 2, f, f.derivative(), R(1))
+ (1,)
+ sage: f = x - 3
+ sage: R._lift_residue_field_root(2, 2, f, f.derivative(), R(1))
+ (3,)
+
+ sage: R = Zmod(4001**2)
+ sage: S. = R[]
+ sage: f = x^3 - 2
+ sage: R._lift_residue_field_root(4001, 2, f, f.derivative(), R(3981))
+ (5309307,)
+ sage: f = x^3 - 3
+ sage: R._lift_residue_field_root(4001, 2, f, f.derivative(), R(1091))
+ (11035849,)
+
+ Non-singular cases with multiple steps of lifting::
+
+ sage: R = Zmod(2**10)
+ sage: S. = R[]
+ sage: f = x + 1
+ sage: R._lift_residue_field_root(2, 10, f, f.derivative(), Zmod(2)(1))
+ (1023,)
+
+ sage: R = Zmod(2**16)
+ sage: S. = R[]
+ sage: f = x + 1
+ sage: R._lift_residue_field_root(2, 16, f, f.derivative(), Zmod(2)(1))
+ (65535,)
+
+ sage: R = Zmod(7**4)
+ sage: S. = R[]
+ sage: f = x^4 - 2
+ sage: R._lift_residue_field_root(7, 4, f, f.derivative(), Zmod(7)(2))
+ (121,)
+
+ Singular cases::
+
+ sage: R = Zmod(2**3)
+ sage: S. = R[]
+ sage: f = x^2 - 1
+ sage: R._lift_residue_field_root(2, 3, f, f.derivative(), Zmod(2)(1))
+ [1, 5, 3, 7]
+ sage: f = 2*x
+ sage: R._lift_residue_field_root(2, 3, f, f.derivative(), Zmod(2)(0))
+ [0, 4]
+
+ sage: R = Zmod(11**2)
+ sage: S. = R[]
+ sage: f = x^2 + 13*x + 1
+ sage: R._lift_residue_field_root(11, 2, f, f.derivative(), Zmod(11)(10))
+ []
+
+ sage: R = Zmod(11**3)
+ sage: S. = R[]
+ sage: f = x^2 + 123*x + 1
+ sage: R._lift_residue_field_root(11, 3, f, f.derivative(), Zmod(11)(10))
+ [10, 131, 252, 373, 494, 615, 736, 857, 978, 1099, 1220, 109, 230, 351, 472, 593, 714, 835, 956, 1077, 1198, 1319]
+ """
+ if e == 1:
+ # Nothing to do
+ return (root,)
+ deriv = fprime(root)
+ if deriv:
+ # Unique lift, use Newton iteration
+ prec = 1
+ while True:
+ prec = min(2*prec, e)
+ Zp_prec = Zmod(p**prec)
+ root = Zp_prec(root.lift())
+ deriv = fprime(root)
+ step = f(root) / deriv
+ root -= step
+ if prec >= e:
+ return (root,)
+ else:
+ # Non-unique lift, go one power at a time
+ prec = 1
+ new_power = 1
+ new_mod = p
+ current_roots = (root,)
+ for _ in range(e - 1):
+ prec += 1
+ new_power = new_mod
+ new_mod *= p
+ new_roots = []
+ Zp_prec = Zmod(new_mod)
+ for rt in current_roots:
+ rt = Zp_prec(rt.lift())
+ if f(rt):
+ continue
+ new_roots.append(rt)
+ for _ in range(p - 1):
+ rt += new_power
+ new_roots.append(rt)
+ current_roots = new_roots
+
+ return current_roots
+
+ def _roots_univariate_polynomial(self, f, ring=None, multiplicities=True, algorithm=None):
+ r"""
+ Return the roots of ``f`` in the ring ``ring``.
+
+ INPUT:
+
+ - ``f`` - a polynomial defined over this ring
+
+ - ``ring`` - the ring to find roots in. Control flow elsewhere
+ ensures that the only cases we need to handle are ``self`` and
+ ``None``. Otherwise we raise ``NotImplementedError``.
+
+ - ``multiplicities`` - bool (default: ``True``). If ``True``, return
+ list of pairs `(r, n)`, where `r` is a root and `n` is its
+ multiplicity. If ``False``, just return the unique roots, with no
+ information about multiplicities. Multiplicities are only defined
+ over fields, and this method raises ``NotImplementedError`` if this
+ is ``True`` but the ring is not a field.
+
+ - ``algorithm`` - ignored
+
+ ALGORITHM:
+
+ The algorithm is adapted from [Gou2020]_, section 4.5, and [Coh1993]_,
+ section 3.5.3. It is a combination of the Chinese Remainder Theorem
+ and Hensel's lemma. As a base case, if `N` is prime, then we find
+ roots by factoring `f`. If `N` is a prime power `p^e`, then we find
+ roots modulo `p` and lift them. Finally, for general `N`, we first
+ factor the modulus `N` into prime powers, list all roots modulo those
+ prime powers, and combine the roots using the Chinese Remainder
+ Theorem.
+
+ Suppose that we are trying to find roots modulo `p^e` and that `r` is
+ a root of `f(x)` modulo `p`. The easy case is when `f'(r) \not\equiv
+ 0 \pmod{p}`, for then Hensel's lemma implies that there is a unique
+ `r_e \in \Zmod{p^e}` with `r_e \equiv r \pmod{p}`.
+ Moreover, this `r_e` can be found by applying Newton's method for
+ numerically approximating roots. Each iteration of Newton's method
+ doubles the precision to which the root is known.
+
+ But if `f'(r) \equiv 0 \pmod{p}`, then this is no longer true. In
+ fact, in this case roots modulo `p^e` are not the same as `p`-adic
+ roots, and finding all the latter does not guarantee that we have
+ found all the former. For example, if `f(x) = 2x` and `p = 2`, then
+ there is only one `p`-adic root, namely zero. But the solutions of
+ `2x \equiv 0 \pmod{2^k}` are `0` and `2^{k-1}`; the former lifts to
+ two roots modulo `2^{k+1}`, namely `0` and `2^k`, while the latter
+ does not lift at all. We handle this case by lifting one power at a
+ time. While we can no longer use Newton's method to solve for a lift,
+ the Taylor series it is based on still yields constraints on the roots
+ modulo `p^{k+1}`: If `r_k` is a root of `f` modulo `p^k`, then either
+ every lift of `r_k` to `\Zmod{p^{k + 1}}` is a root of `f`
+ modulo `p^{k+1}` or none of them are. Consequently we may find roots
+ modulo `p^e` by lifting one power at a time.
+
+ When `f'(r) \equiv 0 \pmod{p}`, an alternative approach is to change
+ variables, factor out the root, and then factor out powers of `p`.
+ This has the advantage that it will eventually reach a situation where
+ the lift converges quadratically, but it is not presently implemented.
+ A different form of Hensel's lemma applies once we are close enough to
+ a `p`-adic root (see [Gou2020]_, problem 120), but it seems delicate
+ to use it directly to find all roots modulo `p^e` (consider our
+ earlier example of `f(x) = 2x`), so we do not presently attempt to
+ apply Hensel's lemma in this way.
+
+ EXAMPLES::
+
+ sage: R. = Zmod(41)[]
+ sage: (x^3 + x).roots()
+ [(0, 1), (32, 1), (9, 1)]
+ sage: (x^3 + x).roots(multiplicities=False)
+ [0, 32, 9]
+ sage: (x^6 + x^5 + 9*x^4 + 20*x^3 + 3*x^2 + 18*x + 7).roots()
+ [(19, 1), (20, 2), (21, 3)]
+ sage: (x^6 + x^5 + 9*x^4 + 20*x^3 + 3*x^2 + 18*x + 7).roots(multiplicities=False)
+ [19, 20, 21]
+
+ We can find roots without multiplicities over a ring whose modulus is
+ a prime power, even a big power:
+
+ sage: R. = Zmod(7^3)[]
+ sage: (x^2 + x + 1).roots(multiplicities=False)
+ [18, 324]
+ sage: R. = Zmod(2^50)[]
+ sage: (x + 1).roots(multiplicities=False)
+ [1125899906842623]
+
+ We can also find roots without multiplicities over a ring whose modulus
+ is a product of primes or prime powers:
+
+ sage: R. = Zmod(60)[]
+ sage: (x^2 - 1).roots(multiplicities=False)
+ [29, 41, 49, 1, 59, 11, 19, 31]
+
+ We may also ask for roots modulo a quotient of the ring over which the
+ polynomial is defined:
+
+ sage: R. = Zmod(120)[]
+ sage: (x^2 - 1).roots(multiplicities=False)
+ [89, 41, 49, 1, 29, 101, 109, 61, 59, 11, 19, 91, 119, 71, 79, 31]
+ sage: (x^2 - 1).roots(Zmod(60), multiplicities=False)
+ [29, 41, 49, 1, 59, 11, 19, 31]
+
+ TESTS::
+
+ sage: R. = Zmod(2)[]
+ sage: x.roots()
+ [(0, 1)]
+
+ Test polynomials with content:
+
+ sage: R. = Zmod(4)[]
+ sage: (2*x).roots(multiplicities=False)
+ [0, 2]
+
+ sage: R. = Zmod(6)[]
+ sage: (3*x).roots(multiplicities=False)
+ [0, 4, 2]
+
+ Test polynomial with many roots:
+
+ sage: R. = Zmod(6)[]
+ sage: f = x * (x - 1) * (x - 2) * (x - 3) * (x - 4) * (x - 5)
+ sage: len(f.roots(multiplicities=False))
+ 6
+
+ Test finding roots over large prime powers:
+
+ sage: R. = Zmod(2**16)[]
+ sage: (x^3 + 5).roots(multiplicities=False)
+ [45475]
+ sage: (x^2 + 46*x + 1).roots(multiplicities=False)
+ [421, 33189, 16805, 49573, 8613, 41381, 24997, 57765, 7725, 40493, 24109, 56877, 15917, 48685, 32301, 65069]
+
+ sage: R. = Zmod(3**16)[]
+ sage: (x^2 + 2).roots(multiplicities=False)
+ [24620738, 18425983]
+ sage: (x^2 + 11*x + 1).roots(multiplicities=False)
+ [633836, 14982743, 29331650, 13715060, 28063967, 42412874]
+ sage: (x^3 + 8).roots(multiplicities=False)
+ [14348905, 28697812, 43046719]
+
+ Test some larger primes:
+
+ sage: R. = Zmod(41**4)[]
+ sage: (x^2 + 2).roots(multiplicities=False)
+ [2208905, 616856]
+ sage: R. = Zmod(43**4)[]
+ sage: (x^2 + 3).roots(multiplicities=False)
+ [3269879, 148922]
+
+ We can't find roots with multiplicities in non-fields:
+
+ sage: R. = Zmod(6)[]
+ sage: (x + 1).roots()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)
+ sage: R. = Zmod(8)[]
+ sage: (x + 1).roots()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)
+ sage: R. = Zmod(12)[]
+ sage: (x + 1).roots()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)
+
+ The zero polynomial has every residue class as a root, but we don't
+ support multiplicities even over fields (they would all be infinite).
+
+ sage: R. = Zmod(6)[]
+ sage: R.zero().roots()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)
+ sage: R.zero().roots(multiplicities=False)
+ [0, 1, 2, 3, 4, 5]
+
+ sage: R. = Zmod(7)[]
+ sage: R.zero().roots()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)
+ sage: R.zero().roots(multiplicities=False)
+ [0, 1, 2, 3, 4, 5, 6]
+
+ sage: R. = Zmod(8)[]
+ sage: R.zero().roots()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)
+ sage: R.zero().roots(multiplicities=False)
+ [0, 1, 2, 3, 4, 5, 6, 7]
+
+ This method doesn't support root-finding over rings that aren't Z/nZ:
+
+ sage: R. = Zmod(120)[]
+ sage: f = x^2 - 1
+ sage: f.base_ring()._roots_univariate_polynomial(f, ring=RR, multiplicities=False)
+ Traceback (most recent call last):
+ ...
+ NotImplementedError
+
+ Sage allows us to coerce polynomials from one modulus to another,
+ and that makes the following defined:
+
+ sage: R. = Zmod(100)[]
+ sage: (x^2 - 1).roots(Zmod(99), multiplicities=False) == (x^2 - 1).change_ring(Zmod(99)).roots(multiplicities=False)
+ True
+ """
+
+ # This function only supports roots in an IntegerModRing
+ if ring is not self and ring is not None:
+ raise NotImplementedError
+
+ deg = f.degree()
+
+ if multiplicities:
+ if deg < 0 or not self.is_field():
+ raise NotImplementedError(
+ "root finding with multiplicities for this polynomial not"
+ " implemented (try the multiplicities=False option)"
+ )
+ # Roots of non-zero polynomial over finite fields by factorization
+ return f._roots_from_factorization(f.factor(), multiplicities)
+
+ # Zero polynomial is a base case
+ if deg < 0:
+ # All residue classes are roots of the zero polynomial
+ return [*map(self, range(self.cardinality()))]
+
+ # Finite fields are a base case
+ if self.is_field():
+ return f._roots_from_factorization(f.factor(), False)
+
+ # Otherwise, find roots modulo each prime power
+ fac = self.factored_order()
+ prime_power_roots = []
+ for p, e in fac:
+ Zpe = Zmod(p**e)
+ fpe = f.change_ring(Zpe)
+ fpe_prime = fpe.derivative()
+ fp = fpe.change_ring(Zmod(p))
+
+ mod_p_roots = fp.roots(multiplicities=False)
+
+ this_prime_power = []
+ for root in mod_p_roots:
+ this_prime_power.extend(
+ self._lift_residue_field_root(p, e, fpe, fpe_prime, root)
+ )
+ prime_power_roots.append(this_prime_power)
+
+ # Combine using Chinese Remainder Theorem
+ ppwr_basis = CRT_basis([p**e for p, e in fac])
+ result = []
+ for res in cartesian_product_iterator(prime_power_roots):
+ root = self.zero()
+ for c, x in zip(ppwr_basis, res):
+ root += c*x.lift()
+ result.append(root)
+ return result
+
#######################################################
# Suppose for interfaces
#######################################################
diff --git a/src/sage/rings/finite_rings/maps_finite_field.py b/src/sage/rings/finite_rings/maps_finite_field.py
index e68bd5c7b94..dff8679dd1e 100644
--- a/src/sage/rings/finite_rings/maps_finite_field.py
+++ b/src/sage/rings/finite_rings/maps_finite_field.py
@@ -21,6 +21,7 @@
from sage.categories.morphism import Morphism
+
class FiniteFieldVectorSpaceIsomorphism(Morphism):
"""
Base class of the vector space isomorphism between a finite field
@@ -70,6 +71,7 @@ def is_surjective(self):
"""
return True
+
class MorphismVectorSpaceToFiniteField(FiniteFieldVectorSpaceIsomorphism):
"""
Isomorphisms from vector spaces to finite fields.
@@ -130,6 +132,7 @@ def _call_(self, v):
w[i*n:(i+1)*n] = v[i]._vector_()
return E(w * self._C)
+
class MorphismFiniteFieldToVectorSpace(FiniteFieldVectorSpaceIsomorphism):
"""
Isomorphisms from finite fields to vector spaces
diff --git a/src/sage/rings/finite_rings/meson.build b/src/sage/rings/finite_rings/meson.build
index 896d69651cf..7f7a5744a1f 100644
--- a/src/sage/rings/finite_rings/meson.build
+++ b/src/sage/rings/finite_rings/meson.build
@@ -39,6 +39,15 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name == 'element_pari_ffelt'
+ deps += [
+ cypari2,
+ pari, # Runtime dependency
+ ]
+ elif name == 'residue_field_pari_ffelt'
+ deps += [cypari2]
+ endif
py.extension_module(
name,
sources: pyx,
@@ -51,7 +60,7 @@ foreach name, pyx : extension_data
inc_rings,
inc_rings_finite,
],
- dependencies: [py_dep, cypari2, cysignals, givaro, gmp, m, ntl, pari],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/rings/finite_rings/residue_field.pyx b/src/sage/rings/finite_rings/residue_field.pyx
index 3146f7fd764..be83c5165f6 100644
--- a/src/sage/rings/finite_rings/residue_field.pyx
+++ b/src/sage/rings/finite_rings/residue_field.pyx
@@ -307,7 +307,7 @@ class ResidueFieldFactory(UniqueFactory):
sage: K.residue_field(K.ideal(3)) # needs sage.rings.number_field
Residue field of Fractional ideal (3)
"""
- def create_key_and_extra_args(self, p, names = None, check=True, impl=None, **kwds):
+ def create_key_and_extra_args(self, p, names=None, check=True, impl=None, **kwds):
"""
Return a tuple containing the key (uniquely defining data)
and any extra arguments.
diff --git a/src/sage/rings/fraction_field_element.pyx b/src/sage/rings/fraction_field_element.pyx
index 3d14ab66134..bd8718da968 100644
--- a/src/sage/rings/fraction_field_element.pyx
+++ b/src/sage/rings/fraction_field_element.pyx
@@ -263,7 +263,7 @@ cdef class FractionFieldElement(FieldElement):
"""
return self._denominator
- def is_square(self,root=False):
+ def is_square(self, root=False):
"""
Return whether or not ``self`` is a perfect square.
diff --git a/src/sage/rings/function_field/constructor.py b/src/sage/rings/function_field/constructor.py
index a316c384bd1..fa5a31cb683 100644
--- a/src/sage/rings/function_field/constructor.py
+++ b/src/sage/rings/function_field/constructor.py
@@ -39,6 +39,7 @@
from sage.structure.factory import UniqueFactory
+
class FunctionFieldFactory(UniqueFactory):
"""
Return the function field in one variable with constant field ``F``. The
@@ -88,7 +89,7 @@ def create_key(self, F, names):
names = (names,)
return (F, names)
- def create_object(self, version, key,**extra_args):
+ def create_object(self, version, key, **extra_args):
"""
Create the object from the key and extra arguments. This is only
called if the object was not found in the cache.
@@ -142,7 +143,7 @@ class FunctionFieldExtensionFactory(UniqueFactory):
sage: L is M # needs sage.rings.function_field
True
"""
- def create_key(self,polynomial,names):
+ def create_key(self, polynomial, names):
"""
Given the arguments and keywords, create a key that uniquely
determines this object.
@@ -174,7 +175,7 @@ def create_key(self,polynomial,names):
names = (names,)
return (polynomial,names,polynomial.base_ring())
- def create_object(self,version,key,**extra_args):
+ def create_object(self, version, key, **extra_args):
"""
Create the object from the key and extra arguments. This is only
called if the object was not found in the cache.
diff --git a/src/sage/rings/function_field/divisor.py b/src/sage/rings/function_field/divisor.py
index 13247abe3b0..94f3ff2bce3 100644
--- a/src/sage/rings/function_field/divisor.py
+++ b/src/sage/rings/function_field/divisor.py
@@ -74,6 +74,7 @@
from .place import PlaceSet
+
def divisor(field, data):
"""
Construct a divisor from the data.
@@ -98,6 +99,7 @@ def divisor(field, data):
divisor_group = field.divisor_group()
return divisor_group.element_class(divisor_group, data)
+
def prime_divisor(field, place, m=1):
"""
Construct a prime divisor from the place.
@@ -920,7 +922,7 @@ def pivot(v):
if e != 0:
return (i,e.numerator().degree() - e.denominator().degree())
- def greater(v,w): # v and w are not equal
+ def greater(v, w): # v and w are not equal
return v[0] < w[0] or v[0] == w[0] and v[1] > w[1]
# collate rows by their pivot position
diff --git a/src/sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py b/src/sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py
index d183848f296..6142ec2fa2d 100644
--- a/src/sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py
+++ b/src/sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py
@@ -31,6 +31,7 @@
lazy_import('sage.rings.lazy_series_ring', 'LazyPowerSeriesRing')
+
class DrinfeldModule_charzero(DrinfeldModule):
r"""
This class implements Drinfeld `\mathbb{F}_q[T]`-modules defined
@@ -317,7 +318,6 @@ def logarithm(self, name='z'):
True
"""
L = LazyPowerSeriesRing(self._base, name)
- zero = self._base.zero()
q = self._Fq.cardinality()
def coeff_log(k):
diff --git a/src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py b/src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py
index d225820ab18..e29626593b4 100644
--- a/src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py
+++ b/src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py
@@ -46,6 +46,7 @@
lazy_import('sage.rings.ring_extension', 'RingExtension_generic')
+
class DrinfeldModule(Parent, UniqueRepresentation):
r"""
This class implements Drinfeld `\mathbb{F}_q[T]`-modules.
@@ -1854,7 +1855,7 @@ def rank(self):
def velu(self, isog):
r"""
- Return a new Drinfeld module such that input is an
+ Return a new Drinfeld module such that ``isog`` defines an
isogeny to this module with domain ``self``; if no such isogeny
exists, raise an exception.
@@ -2017,11 +2018,19 @@ def hom(self, x, codomain=None):
Traceback (most recent call last):
...
ValueError: Ore polynomial does not define a morphism
+
+ Check that x = 0 (without specified codomain) gives the zero endomorphism::
+
+ sage: phi.hom(K.zero())
+ Endomorphism of Drinfeld module defined by ...
+ Defn: 0
"""
# When `x` is in the function ring (or something that coerces to it):
if self.function_ring().has_coerce_map_from(x.parent()):
return self.Hom(self)(x)
if codomain is None:
+ if x.is_zero():
+ return self.Hom(self)(0)
try:
codomain = self.velu(x)
except TypeError:
diff --git a/src/sage/rings/function_field/drinfeld_modules/morphism.py b/src/sage/rings/function_field/drinfeld_modules/morphism.py
index 82c1d7a0da1..26d90ae625a 100644
--- a/src/sage/rings/function_field/drinfeld_modules/morphism.py
+++ b/src/sage/rings/function_field/drinfeld_modules/morphism.py
@@ -536,9 +536,11 @@ def __invert__(self):
sage: K. = Fq.extension(3)
sage: coeffs = [z] + [K.random_element() for _ in range(10)]
sage: phi = DrinfeldModule(A, coeffs)
- sage: f = phi.hom(K.random_element())
+ sage: a = K.random_element()
+ sage: while a.is_zero():
+ ....: a = K.random_element()
+ sage: f = phi.hom(a)
sage: g = ~f
-
sage: (f*g).is_identity()
True
sage: (g*f).is_identity()
diff --git a/src/sage/rings/function_field/function_field_polymod.py b/src/sage/rings/function_field/function_field_polymod.py
index de6cbf47a6c..0fe4c84fafb 100644
--- a/src/sage/rings/function_field/function_field_polymod.py
+++ b/src/sage/rings/function_field/function_field_polymod.py
@@ -571,7 +571,21 @@ def _repr_(self):
sage: L._repr_()
'Function field in y defined by y^5 - 2*x*y + (-x^4 - 1)/x'
"""
- return "Function field in %s defined by %s" % (self.variable_name(), self._polynomial)
+ return f"Function field in {self.variable_name()} defined by {self._polynomial}"
+
+ def _latex_(self):
+ r"""
+ Return the LaTeX representation of the function field.
+
+ EXAMPLES::
+
+ sage: K. = FunctionField(QQ); R. = K[]
+ sage: L. = K.extension(y^5 - (x^3 + 2*x*y + 1/x))
+ sage: latex(L)
+ \text{Function field in } y \text{ defined by } y^{5} - 2 x y + \frac{-x^{4} - 1}{x}
+ """
+ return (fr"\text{{Function field in }} {self.variable_name()} "
+ fr"\text{{ defined by }} {self._polynomial._latex_()}")
def base_field(self):
"""
diff --git a/src/sage/rings/function_field/order_polymod.py b/src/sage/rings/function_field/order_polymod.py
index 16ff2d8f2ae..ed2223fcdab 100644
--- a/src/sage/rings/function_field/order_polymod.py
+++ b/src/sage/rings/function_field/order_polymod.py
@@ -1372,7 +1372,7 @@ def mul(Ib, Jb):
h = matrix(m).echelon_form()
return cut_last_zero_rows(h)
- def add(Ib,Jb):
+ def add(Ib, Jb):
m = block_matrix([[Ib], [Jb]])
h = m.echelon_form()
return cut_last_zero_rows(h)
diff --git a/src/sage/rings/function_field/valuation.py b/src/sage/rings/function_field/valuation.py
index a192a76beb6..e92600e55b6 100644
--- a/src/sage/rings/function_field/valuation.py
+++ b/src/sage/rings/function_field/valuation.py
@@ -157,6 +157,7 @@
from sage.rings.valuation.trivial_valuation import TrivialValuation
from sage.rings.valuation.mapped_valuation import FiniteExtensionFromLimitValuation, MappedValuation_base
+
class FunctionFieldValuationFactory(UniqueFactory):
r"""
Create a valuation on ``domain`` corresponding to ``prime``.
diff --git a/src/sage/rings/function_field/valuation_ring.py b/src/sage/rings/function_field/valuation_ring.py
index e1fe9751b0b..9269d21ea2d 100644
--- a/src/sage/rings/function_field/valuation_ring.py
+++ b/src/sage/rings/function_field/valuation_ring.py
@@ -72,6 +72,7 @@
from sage.categories.homset import Hom
from sage.categories.rings import Rings
+
class FunctionFieldValuationRing(UniqueRepresentation, Parent):
"""
Base class for valuation rings of function fields.
diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py
index 4208c63c55c..dc785891828 100644
--- a/src/sage/rings/ideal.py
+++ b/src/sage/rings/ideal.py
@@ -1457,6 +1457,7 @@ def divides(self, other):
return self.gen().divides(other.gen())
raise NotImplementedError
+
class Ideal_pid(Ideal_principal):
"""
An ideal of a principal ideal domain.
@@ -1694,6 +1695,7 @@ def residue_field(self):
return ZZ.residue_field(self, check=False)
raise NotImplementedError("residue_field() is only implemented for ZZ and rings of integers of number fields.")
+
class Ideal_fractional(Ideal_generic):
"""
Fractional ideal of a ring.
@@ -1717,6 +1719,7 @@ def _repr_(self):
# constructors for standard (benchmark) ideals, written uppercase as
# these are constructors
+
def Cyclic(R, n=None, homog=False, singular=None):
"""
Ideal of cyclic ``n``-roots from 1-st ``n`` variables of ``R`` if ``R`` is
@@ -1782,6 +1785,7 @@ def Cyclic(R, n=None, homog=False, singular=None):
I = singular.cyclic(n).homog(R2.gen(n-1))
return R2.ideal(I).change_ring(R)
+
def Katsura(R, n=None, homog=False, singular=None):
r"""
`n`-th katsura ideal of `R` if `R` is coercible to
@@ -1832,6 +1836,7 @@ def Katsura(R, n=None, homog=False, singular=None):
I = singular.katsura(n).homog(R2.gen(n-1))
return R2.ideal(I).change_ring(R)
+
def FieldIdeal(R):
r"""
Let ``q = R.base_ring().order()`` and `(x_0,...,x_n)` ``= R.gens()`` then
diff --git a/src/sage/rings/integer.pxd b/src/sage/rings/integer.pxd
index 1165895729e..c113d562835 100644
--- a/src/sage/rings/integer.pxd
+++ b/src/sage/rings/integer.pxd
@@ -23,8 +23,8 @@ cdef class Integer(EuclideanDomainElement):
cdef _or(Integer self, Integer other)
cdef _xor(Integer self, Integer other)
- cpdef size_t _exact_log_log2_iter(self,Integer m) noexcept
- cpdef size_t _exact_log_mpfi_log(self,m) noexcept
+ cpdef size_t _exact_log_log2_iter(self, Integer m) noexcept
+ cpdef size_t _exact_log_mpfi_log(self, m) noexcept
cpdef RingElement _valuation(Integer self, Integer p)
cdef object _val_unit(Integer self, Integer p)
cdef Integer _divide_knowing_divisible_by(Integer self, Integer right)
diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx
index 9616e7946bc..ffc5ee16e0f 100644
--- a/src/sage/rings/integer.pyx
+++ b/src/sage/rings/integer.pyx
@@ -215,7 +215,7 @@ cdef set_from_Integer(Integer self, Integer other):
mpz_set(self.value, other.value)
-cdef _digits_naive(mpz_t v,l,int offset,Integer base,digits):
+cdef _digits_naive(mpz_t v, l, int offset, Integer base, digits):
"""
This method fills in digit entries in the list, l, using the most
basic digit algorithm -- repeat division by base.
@@ -262,7 +262,7 @@ cdef _digits_naive(mpz_t v,l,int offset,Integer base,digits):
mpz_clear(mpz_value)
-cdef _digits_internal(mpz_t v,l,int offset,int power_index,power_list,digits):
+cdef _digits_internal(mpz_t v, l, int offset, int power_index, power_list, digits):
"""
INPUT:
@@ -1131,7 +1131,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
sage: "{0:#x}; {0:#b}; {0:+05d}".format(ZZ(17))
'0x11; 0b10001; +0017'
"""
- return int(self).__format__(*args,**kwargs)
+ return int(self).__format__(*args, **kwargs)
def ordinal_str(self):
"""
@@ -2439,7 +2439,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
raise ValueError("%s is not a %s power" % (self,
integer_ring.ZZ(n).ordinal_str()))
- cpdef size_t _exact_log_log2_iter(self,Integer m) noexcept:
+ cpdef size_t _exact_log_log2_iter(self, Integer m) noexcept:
r"""
This is only for internal use only. You should expect it to crash
and burn for negative or other malformed input. In particular, if
@@ -2517,7 +2517,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
sig_off()
return l_min
- cpdef size_t _exact_log_mpfi_log(self,m) noexcept:
+ cpdef size_t _exact_log_mpfi_log(self, m) noexcept:
"""
This is only for internal use only. You should expect it to crash
and burn for negative or other malformed input.
@@ -5993,7 +5993,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
if mpz_cmp_ui(self.value, 2) < 0:
return smallInteger(2)
- cdef mp_bitcnt_t bit_index = mpz_sizeinbase(self.value,2)
+ cdef mp_bitcnt_t bit_index = mpz_sizeinbase(self.value, 2)
cdef Integer n = PY_NEW(Integer)
mpz_add_ui(n.value, self.value, 1 if mpz_even_p(self.value) else 2)
@@ -6066,7 +6066,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
cdef Integer n = PY_NEW(Integer)
mpz_sub_ui(n.value, self.value, 1)
- cdef mp_bitcnt_t bit_index = mpz_sizeinbase(n.value,2)-1
+ cdef mp_bitcnt_t bit_index = mpz_sizeinbase(n.value, 2)-1
if mpz_even_p(n.value):
mpz_sub_ui(n.value, n.value, 1)
@@ -7755,9 +7755,9 @@ cdef double mpz_get_d_nearest(mpz_t x) except? -648555075988944.5:
# Check for overflow
if sx > 1024:
if resultsign < 0:
- return -1.0/0.0
+ return float('-inf')
else:
- return 1.0/0.0
+ return float('inf')
# General case
diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx
index 2b2ec33294c..346a67481e1 100644
--- a/src/sage/rings/integer_ring.pyx
+++ b/src/sage/rings/integer_ring.pyx
@@ -876,7 +876,7 @@ cdef class IntegerRing_class(CommutativeRing):
return True
return super()._repr_option(key)
- def is_field(self, proof = True):
+ def is_field(self, proof=True):
"""
Return ``False`` since the integers are not a field.
@@ -1158,7 +1158,7 @@ cdef class IntegerRing_class(CommutativeRing):
"""
return True
- def completion(self, p, prec, extras = {}):
+ def completion(self, p, prec, extras={}):
r"""
Return the metric completion of the integers at the prime `p`.
diff --git a/src/sage/rings/invariants/invariant_theory.py b/src/sage/rings/invariants/invariant_theory.py
index fb953f98813..300e3e9c2f5 100644
--- a/src/sage/rings/invariants/invariant_theory.py
+++ b/src/sage/rings/invariants/invariant_theory.py
@@ -286,7 +286,7 @@ def diff(j):
dg = g.form().derivative(x,h-j).derivative(y,j)
return (-1)**j * binomial(h,j) * df * dg
tv = scalar * sum([diff(j) for j in range(h+1)])
- if not tv.parent() is R:
+ if tv.parent() is not R:
S = tv.parent()
x = S(x)
y = S(y)
@@ -3498,7 +3498,7 @@ def syzygy(self, Delta, Theta, Theta_prime, Delta_prime, S, S_prime, F, J):
sage: R. = QQ[]
sage: monomials = [x^2, x*y, y^2, x*z, y*z, z^2]
- sage: def q_rnd(): return sum(randint(-1000,1000)*m for m in monomials)
+ sage: def q_rnd(): return sum(randint(-1000, 1000)*m for m in monomials)
sage: biquadratic = invariant_theory.ternary_biquadratic(q_rnd(), q_rnd(), [x,y,z])
sage: Delta = biquadratic.Delta_invariant()
sage: Theta = biquadratic.Theta_invariant()
@@ -3880,7 +3880,7 @@ def syzygy(self, Delta, Theta, Phi, Theta_prime, Delta_prime, U, V, T, T_prime,
sage: R. = QQ[]
sage: monomials = [x^2, x*y, y^2, x*z, y*z, z^2, x*w, y*w, z*w, w^2]
- sage: def q_rnd(): return sum(randint(-1000,1000)*m for m in monomials)
+ sage: def q_rnd(): return sum(randint(-1000, 1000)*m for m in monomials)
sage: biquadratic = invariant_theory.quaternary_biquadratic(q_rnd(), q_rnd())
sage: Delta = biquadratic.Delta_invariant()
sage: Theta = biquadratic.Theta_invariant()
diff --git a/src/sage/rings/lazy_series.py b/src/sage/rings/lazy_series.py
index 8520ad33f68..b48e0e6bc38 100644
--- a/src/sage/rings/lazy_series.py
+++ b/src/sage/rings/lazy_series.py
@@ -4866,6 +4866,7 @@ def _format_series(self, formatter, format_strings=False):
return strformat("O({})".format(formatter(z**m)))
return formatter(poly) + strformat(" + O({})".format(formatter(z**m)))
+
class LazyPowerSeries(LazyCauchyProductSeries):
r"""
A Taylor series where the coefficients are computed lazily.
@@ -6149,6 +6150,7 @@ def _floordiv_(self, other):
left._approximate_order += 1
return super()._floordiv_(other)
+
class LazyPowerSeries_gcd_mixin:
"""
A lazy power series that also implements the GCD algorithm.
@@ -6266,6 +6268,7 @@ def xgcd(self, f):
unit = ~unit
return (x**val, unit, unit)
+
class LazyCompletionGradedAlgebraElement(LazyCauchyProductSeries):
"""
An element of a completion of a graded algebra that is computed lazily.
diff --git a/src/sage/rings/lazy_series_ring.py b/src/sage/rings/lazy_series_ring.py
index ee3e463e988..a5900982a3a 100644
--- a/src/sage/rings/lazy_series_ring.py
+++ b/src/sage/rings/lazy_series_ring.py
@@ -93,6 +93,7 @@
from types import GeneratorType
+
class LazySeriesRing(UniqueRepresentation, Parent):
"""
Abstract base class for lazy series.
@@ -1233,6 +1234,7 @@ def _test_revert(self, **options):
# we want to test at least 2 elements
tester.assertGreater(count, 1, msg="only %s elements in %s.some_elements() have a compositional inverse" % (count, self))
+
class LazyLaurentSeriesRing(LazySeriesRing):
r"""
The ring of lazy Laurent series.
@@ -2612,7 +2614,6 @@ def taylor(self, f):
BR = R.base_ring()
args = f.arguments()
subs = {str(va): ZZ.zero() for va in args}
- gens = R.gens()
ell = len(subs)
from sage.combinat.integer_vector import integer_vectors_nk_fast_iter
from sage.arith.misc import factorial
@@ -3040,6 +3041,7 @@ def some_elements(self):
######################################################################
+
class LazySymmetricFunctions(LazyCompletionGradedAlgebra):
"""
The ring of lazy symmetric functions.
@@ -3417,6 +3419,7 @@ def _monomial(self, c, n):
except (ValueError, TypeError):
return '({})/{}^{}'.format(self.base_ring()(c), n, self.variable_name())
+
def _skip_leading_zeros(iterator):
"""
Return an iterator which discards all leading zeros.
diff --git a/src/sage/rings/localization.py b/src/sage/rings/localization.py
index be1fc217a8d..ab6916d36c8 100644
--- a/src/sage/rings/localization.py
+++ b/src/sage/rings/localization.py
@@ -685,9 +685,9 @@ def __init__(self, base_ring, extra_units, names=None, normalize=True, category=
sage: L = R.localization(x**2 + 1) # needs sage.libs.pari
sage: TestSuite(L).run()
"""
- if type(extra_units) is tuple:
+ if isinstance(extra_units, tuple):
extra_units = list(extra_units)
- if not type(extra_units) is list:
+ elif not isinstance(extra_units, list):
extra_units = [extra_units]
from sage.rings.polynomial.laurent_polynomial_ring_base import LaurentPolynomialRing_generic
diff --git a/src/sage/rings/meson.build b/src/sage/rings/meson.build
index 9aff2d7c8f3..14ed48a7c7a 100644
--- a/src/sage/rings/meson.build
+++ b/src/sage/rings/meson.build
@@ -1,5 +1,3 @@
-pthread = cc.find_library('pthread')
-
py.install_sources(
'abc.pxd',
'algebraic_closure_finite_field.py',
@@ -124,6 +122,43 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name == 'complex_arb'
+ deps += [
+ flint,
+ mpfi,
+ gsl, # Runtime dependency
+ ]
+ elif name == 'complex_conversion'
+ deps += [gsl, mpfr]
+ elif name == 'complex_double'
+ deps += [gmpy2, gsl]
+ elif name == 'complex_interval'
+ deps += [
+ mpfi,
+ flint, # Runtime dependency
+ ]
+ elif name == 'complex_mpc'
+ deps += [gmpy2, mpfr, mpc]
+ elif name == 'complex_mpfr'
+ deps += [gmpy2, mpfr]
+ elif name == 'factorint_flint'
+ deps += [flint]
+ elif name == 'integer'
+ deps += [gmpy2]
+ elif name == 'power_series_pari'
+ deps += [cypari2]
+ elif name == 'real_arb'
+ deps += [flint, mpfi]
+ elif name == 'real_double'
+ deps += [gmpy2]
+ elif name == 'real_double_element_gsl'
+ deps += [gsl]
+ elif name == 'real_mpfi'
+ deps += [mpfi]
+ elif name == 'real_mpfr'
+ deps += [gmpy2, mpfr]
+ endif
py.extension_module(
name,
sources: pyx,
@@ -138,22 +173,7 @@ foreach name, pyx : extension_data
inc_rings,
inc_rings_finite,
],
- dependencies: [
- py_dep,
- cypari2,
- cysignals,
- flint,
- gmp,
- gmpy2,
- gsl,
- m,
- mpc,
- mpfi,
- mpfr,
- ntl,
- pari,
- pthread,
- ],
+ dependencies: deps,
)
endforeach
@@ -170,6 +190,17 @@ extension_data_cpp = {
}
foreach name, pyx : extension_data_cpp
+ deps = [py_dep, cysignals, gmp]
+ if name == 'bernmm'
+ deps += [ntl]
+ elif name == 'bernoulli_mod_p'
+ deps += [ntl]
+ elif name == 'fraction_field_FpT'
+ deps += [flint]
+ elif name == 'rational'
+ deps += [gmpy2]
+ endif
+
py.extension_module(
name,
sources: pyx,
@@ -186,22 +217,7 @@ foreach name, pyx : extension_data_cpp
inc_rings,
inc_rings_finite,
],
- dependencies: [
- py_dep,
- cypari2,
- cysignals,
- flint,
- gmp,
- gmpy2,
- gsl,
- m,
- mpc,
- mpfi,
- mpfr,
- ntl,
- pari,
- pthread,
- ],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/rings/monomials.py b/src/sage/rings/monomials.py
index ed154ab8c06..b10d599b6b3 100644
--- a/src/sage/rings/monomials.py
+++ b/src/sage/rings/monomials.py
@@ -1,5 +1,6 @@
"Monomials"
+
def _monomials(gens, R, n, i):
"""
Given two lists ``gens`` and ``n`` of exactly the same length,
diff --git a/src/sage/rings/morphism.pyx b/src/sage/rings/morphism.pyx
index 594e2ff0a3e..3079bfa3974 100644
--- a/src/sage/rings/morphism.pyx
+++ b/src/sage/rings/morphism.pyx
@@ -2879,8 +2879,10 @@ cdef class FrobeniusEndomorphism_generic(RingHomomorphism):
over Finite Field of size 5
"""
from sage.rings.ring import CommutativeRing
+ from sage.categories.commutative_rings import CommutativeRings
from sage.categories.homset import Hom
- if not isinstance(domain, CommutativeRing):
+ if not (domain in CommutativeRings() or
+ isinstance(domain, CommutativeRing)): # TODO: remove this line
raise TypeError("The base ring must be a commutative ring")
self._p = domain.characteristic()
if not self._p.is_prime():
diff --git a/src/sage/rings/multi_power_series_ring.py b/src/sage/rings/multi_power_series_ring.py
index 35c4d4beb32..3a30b89b9e9 100644
--- a/src/sage/rings/multi_power_series_ring.py
+++ b/src/sage/rings/multi_power_series_ring.py
@@ -1047,7 +1047,7 @@ def prec_ideal(self):
"""
return self._poly_ring().ideal(self._poly_ring().gens())
- def bigoh(self,prec):
+ def bigoh(self, prec):
"""
Return big oh with precision ``prec``. The function ``O`` does the same thing.
@@ -1062,7 +1062,7 @@ def bigoh(self,prec):
"""
return self.zero().O(prec)
- def O(self,prec):
+ def O(self, prec):
"""
Return big oh with precision ``prec``. This function is an alias for ``bigoh``.
@@ -1077,7 +1077,7 @@ def O(self,prec):
"""
return self.bigoh(prec)
- def _send_to_bg(self,f):
+ def _send_to_bg(self, f):
"""
Send an element of the foreground polynomial ring to the background
power series ring.
@@ -1100,7 +1100,7 @@ def _send_to_bg(self,f):
raise TypeError("Cannot coerce input to polynomial ring.")
return self._bg_ps_ring(f.homogeneous_components())
- def _send_to_fg(self,f):
+ def _send_to_fg(self, f):
"""
Send an element of the background univariate power series ring to
the foreground multivariate polynomial ring.
diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py
index 8e1789d5672..9c27ba678bb 100644
--- a/src/sage/rings/multi_power_series_ring_element.py
+++ b/src/sage/rings/multi_power_series_ring_element.py
@@ -671,7 +671,7 @@ def _im_gens_(self, codomain, im_gens, base_map=None):
else:
return codomain(self._subs_formal(*im_gens, base_map=base_map))
- def __getitem__(self,n):
+ def __getitem__(self, n):
"""
Return summand of total degree ``n``.
@@ -2130,7 +2130,7 @@ class MO:
sage: w^2
1 + 2*a + O(a, b, c)^2
"""
- def __init__(self,x):
+ def __init__(self, x):
"""
Initialize ``self``.
diff --git a/src/sage/rings/number_field/meson.build b/src/sage/rings/number_field/meson.build
index 077c1d918e6..46162077eb8 100644
--- a/src/sage/rings/number_field/meson.build
+++ b/src/sage/rings/number_field/meson.build
@@ -37,13 +37,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name == 'totallyreal'
+ deps += [cypari2]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/rings/number_field',
install: true,
include_directories: [inc_cpython, inc_ext, inc_flint, inc_ntl, inc_rings],
- dependencies: [py_dep, cypari2, cysignals, flint, gmp, mpfi, mpfr, ntl],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py
index 767acd8ebc5..7128d40032e 100644
--- a/src/sage/rings/number_field/number_field.py
+++ b/src/sage/rings/number_field/number_field.py
@@ -3534,7 +3534,7 @@ def ideal(self, *gens, **kwds):
try:
return self.fractional_ideal(*gens, **kwds)
except ValueError:
- return Ring.ideal(self, gens, **kwds)
+ return self.zero_ideal()
def idealchinese(self, ideals, residues):
r"""
@@ -3600,9 +3600,10 @@ def idealchinese(self, ideals, residues):
def fractional_ideal(self, *gens, **kwds):
r"""
Return the ideal in `\mathcal{O}_K` generated by ``gens``.
+
This overrides the :class:`sage.rings.ring.Field` method to
use the :class:`sage.rings.ring.Ring` one instead, since
- we're not really concerned with ideals in a field but in its ring
+ we are not concerned with ideals in a field but in its ring
of integers.
INPUT:
@@ -10414,7 +10415,7 @@ def hilbert_symbol_negative_at_S(self, S, b, check=True):
from sage.groups.additive_abelian.additive_abelian_group import AdditiveAbelianGroup
# input checks
- if not type(S) is list:
+ if not isinstance(S, list):
raise TypeError("first argument must be a list")
if b not in self:
raise TypeError("second argument must be an element of this field")
diff --git a/src/sage/rings/number_field/order.py b/src/sage/rings/number_field/order.py
index 55db3bbbcbf..9dee6a8a481 100644
--- a/src/sage/rings/number_field/order.py
+++ b/src/sage/rings/number_field/order.py
@@ -77,8 +77,9 @@
# https://www.gnu.org/licenses/
# ****************************************************************************
+from sage.categories.integral_domains import IntegralDomains
from sage.misc.cachefunc import cached_method
-from sage.rings.ring import IntegralDomain
+from sage.structure.parent import Parent
from sage.structure.sequence import Sequence
from sage.rings.integer_ring import ZZ
import sage.rings.abc
@@ -426,7 +427,7 @@ def EquationOrder(f, names, **kwds):
return K.order(K.gens())
-class Order(IntegralDomain, sage.rings.abc.Order):
+class Order(Parent, sage.rings.abc.Order):
r"""
An order in a number field.
@@ -478,8 +479,8 @@ def __init__(self, K):
0.0535229072603327 + 1.20934552493846*I
"""
self._K = K
- IntegralDomain.__init__(self, ZZ, names=K.variable_names(),
- normalize=False)
+ Parent.__init__(self, base=ZZ, names=K.variable_names(),
+ normalize=False, category=IntegralDomains())
self._populate_coercion_lists_(embedding=self.number_field())
if self.absolute_degree() == 2:
self.is_maximal() # cache
@@ -665,7 +666,7 @@ def krull_dimension(self):
sage: O2.krull_dimension()
1
"""
- return ZZ(1)
+ return ZZ.one()
def integral_closure(self):
r"""
@@ -733,6 +734,20 @@ def ngens(self):
"""
return self.absolute_degree()
+ def gens(self) -> tuple:
+ """
+ Return the generators as a tuple.
+
+ EXAMPLES::
+
+ sage: x = polygen(ZZ, 'x')
+ sage: K. = NumberField(x^3 + x^2 - 2*x + 8)
+ sage: O = K.maximal_order()
+ sage: O.gens()
+ (1, 1/2*a^2 + 1/2*a, a^2)
+ """
+ return tuple(self.gen(i) for i in range(self.absolute_degree()))
+
def basis(self): # this must be defined in derived class
r"""
Return a basis over `\ZZ` of this order.
diff --git a/src/sage/rings/number_field/selmer_group.py b/src/sage/rings/number_field/selmer_group.py
index 5204cfc80b6..283db17c84e 100644
--- a/src/sage/rings/number_field/selmer_group.py
+++ b/src/sage/rings/number_field/selmer_group.py
@@ -133,7 +133,7 @@ def _coords_in_C_p(I, C, p):
raise ValueError("The {} power of {} is not principal".format(p.ordinal_str(),I))
-def _coords_in_C_mod_p(I,C,p):
+def _coords_in_C_mod_p(I, C, p):
r"""
Return coordinates of the ideal ``I`` with respect to a basis of
the `p`-cotorsion of the ideal class group ``C``.
diff --git a/src/sage/rings/padics/CA_template.pxi b/src/sage/rings/padics/CA_template.pxi
index 0e6a10b67d9..9a274d6d81e 100644
--- a/src/sage/rings/padics/CA_template.pxi
+++ b/src/sage/rings/padics/CA_template.pxi
@@ -684,7 +684,7 @@ cdef class CAElement(pAdicTemplateElement):
"""
return ciszero(self.value, self.prime_pow)
- def is_zero(self, absprec = None):
+ def is_zero(self, absprec=None):
r"""
Determine whether this element is zero modulo
`\pi^{\mbox{absprec}}`.
diff --git a/src/sage/rings/padics/CR_template.pxi b/src/sage/rings/padics/CR_template.pxi
index 853a3c3df79..f6f3bc8a632 100644
--- a/src/sage/rings/padics/CR_template.pxi
+++ b/src/sage/rings/padics/CR_template.pxi
@@ -992,7 +992,7 @@ cdef class CRElement(pAdicTemplateElement):
"""
return self.relprec == 0 and not exactzero(self.ordp)
- def is_zero(self, absprec = None):
+ def is_zero(self, absprec=None):
r"""
Determine whether this element is zero modulo
`\pi^{\mbox{absprec}}`.
diff --git a/src/sage/rings/padics/FM_template.pxi b/src/sage/rings/padics/FM_template.pxi
index c05930fb0af..07a091a9313 100644
--- a/src/sage/rings/padics/FM_template.pxi
+++ b/src/sage/rings/padics/FM_template.pxi
@@ -533,7 +533,7 @@ cdef class FMElement(pAdicTemplateElement):
"""
return ciszero(self.value, self.prime_pow)
- def is_zero(self, absprec = None):
+ def is_zero(self, absprec=None):
r"""
Return whether ``self`` is zero modulo `\pi^{\mbox{absprec}}`.
diff --git a/src/sage/rings/padics/FP_template.pxi b/src/sage/rings/padics/FP_template.pxi
index 654c3d6b6a3..69454eeb842 100644
--- a/src/sage/rings/padics/FP_template.pxi
+++ b/src/sage/rings/padics/FP_template.pxi
@@ -862,7 +862,7 @@ cdef class FPElement(pAdicTemplateElement):
"""
return very_pos_val(self.ordp)
- def is_zero(self, absprec = None):
+ def is_zero(self, absprec=None):
r"""
Return whether ``self`` is zero modulo `\pi^{\mbox{absprec}}`.
diff --git a/src/sage/rings/padics/local_generic_element.pyx b/src/sage/rings/padics/local_generic_element.pyx
index 84143902e86..e3f1db454ff 100644
--- a/src/sage/rings/padics/local_generic_element.pyx
+++ b/src/sage/rings/padics/local_generic_element.pyx
@@ -194,7 +194,7 @@ cdef class LocalGenericElement(CommutativeRingElement):
"""
raise TypeError("this local element is not iterable")
- def slice(self, i, j, k = 1, lift_mode='simple'):
+ def slice(self, i, j, k=1, lift_mode='simple'):
r"""
Return the sum of the `pi^{i + l \cdot k}` terms of the series
expansion of this element, where pi is the uniformizer,
@@ -815,7 +815,7 @@ cdef class LocalGenericElement(CommutativeRingElement):
"""
return self.square_root(extend, all)
- #def square_root(self, extend = True, all = False):
+ #def square_root(self, extend=True, all=False):
# raise NotImplementedError
#def unit_part(self):
diff --git a/src/sage/rings/padics/morphism.pyx b/src/sage/rings/padics/morphism.pyx
index d4684f9649d..6f0d501bc86 100644
--- a/src/sage/rings/padics/morphism.pyx
+++ b/src/sage/rings/padics/morphism.pyx
@@ -28,7 +28,7 @@ cdef class FrobeniusEndomorphism_padics(RingHomomorphism):
"""
A class implementing Frobenius endomorphisms on `p`-adic fields.
"""
- def __init__ (self,domain,n=1):
+ def __init__ (self, domain, n=1):
"""
INPUT:
@@ -218,7 +218,7 @@ cdef class FrobeniusEndomorphism_padics(RingHomomorphism):
"""
return self._power
- def __pow__(self,n,modulus):
+ def __pow__(self, n, modulus):
"""
Return the `n`-th iterate of this endomorphism.
diff --git a/src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx b/src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx
index 7efcfc5a047..0e826c40db8 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx
@@ -196,7 +196,7 @@ from sage.rings.infinity import infinity
cdef long maxordp = (1L << (sizeof(long) * 8 - 2)) -1
cdef class pAdicZZpXCAElement(pAdicZZpXElement):
- def __init__(self, parent, x, absprec = infinity, relprec = infinity, empty = False):
+ def __init__(self, parent, x, absprec=infinity, relprec=infinity, empty=False):
"""
Create an element of a capped absolute precision, unramified or
Eisenstein extension of Zp or Qp.
@@ -1769,7 +1769,7 @@ cdef class pAdicZZpXCAElement(pAdicZZpXElement):
"""
return ZZ_pX_ConstTerm(self.value)
- def is_equal_to(self, right, absprec = None):
+ def is_equal_to(self, right, absprec=None):
"""
Return whether ``self`` is equal to ``right`` modulo
``self.uniformizer()^absprec``.
@@ -1995,7 +1995,7 @@ cdef class pAdicZZpXCAElement(pAdicZZpXElement):
ZZ_pX_MulMod_pre(cur.x, cur.x, x, m[0])
return matrix(R, n, n, L)
-# def matrix(self, base = None):
+# def matrix(self, base=None):
# """
# If base is None, return the matrix of right multiplication by
# the element on the power basis `1, x, x^2, \ldots, x^{d-1}`
@@ -2034,7 +2034,7 @@ cdef class pAdicZZpXCAElement(pAdicZZpXElement):
# """
# raise NotImplementedError
- def teichmuller_expansion(self, n = None):
+ def teichmuller_expansion(self, n=None):
r"""
Return a list [`a_0`, `a_1`,..., `a_n`] such that:
@@ -2164,7 +2164,7 @@ cdef class pAdicZZpXCAElement(pAdicZZpXElement):
else:
self.prime_pow.teichmuller_set_c(&self.value, &self.value, self.absprec)
-# def padded_list(self, n, lift_mode = 'simple'):
+# def padded_list(self, n, lift_mode='simple'):
# """
# Returns a list of coefficients of pi starting with `pi^0` up to
# `pi^n` exclusive (padded with zeros if needed)
diff --git a/src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx b/src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx
index 82d04980363..5db54020fb2 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx
@@ -223,7 +223,7 @@ cdef inline int check_ordp(long a) except -1:
cdef class pAdicZZpXCRElement(pAdicZZpXElement):
- def __init__(self, parent, x, absprec = infinity, relprec = infinity, empty = False):
+ def __init__(self, parent, x, absprec=infinity, relprec=infinity, empty=False):
r"""
Create an element of a capped relative precision, unramified
or Eisenstein extension of `\ZZ_p` or `\QQ_p`.
@@ -2327,7 +2327,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
ZZ_to_mpz(ans.value, &tmp_z)
return ans
- def is_zero(self, absprec = None):
+ def is_zero(self, absprec=None):
r"""
Return whether the valuation of this element is at least
``absprec``. If ``absprec`` is ``None``, checks if this element
@@ -2585,7 +2585,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
"""
return ZZ_pX_ConstTerm((self).unit)
- def is_equal_to(self, right, absprec = None):
+ def is_equal_to(self, right, absprec=None):
"""
Return whether this element is equal to ``right`` modulo ``self.uniformizer()^absprec``.
@@ -2703,7 +2703,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
ZZ_pX_conv_modulus(ans.unit, self.unit, self.prime_pow.get_context_capdiv(rprec).x)
return ans
- def expansion(self, n = None, lift_mode = 'simple'):
+ def expansion(self, n=None, lift_mode='simple'):
"""
Return a list giving a series representation of ``self``.
@@ -2877,7 +2877,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
ZZ_pX_MulMod_pre(cur.x, cur.x, x, m[0])
return matrix(R, n, n, L)
-# def matrix(self, base = None):
+# def matrix(self, base=None):
# """
# If base is None, return the matrix of right multiplication by
# the element on the power basis `1, x, x^2, \ldots, x^{d-1}`
@@ -2915,7 +2915,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
# """
# raise NotImplementedError
- def teichmuller_expansion(self, n = None):
+ def teichmuller_expansion(self, n=None):
r"""
Return a list [`a_0`, `a_1`,..., `a_n`] such that:
@@ -3060,7 +3060,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
else:
self.prime_pow.teichmuller_set_c(&self.unit, &self.unit, self.relprec)
-# def padded_list(self, n, lift_mode = 'simple'):
+# def padded_list(self, n, lift_mode='simple'):
# """
# Return a list of coefficients of pi starting with `pi^0` up to
# `pi^n` exclusive (padded with zeros if needed)
@@ -3130,7 +3130,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXElement):
mpz_set_ui(ans.value, self.relprec)
return ans
-# def residue(self, n = 1):
+# def residue(self, n=1):
# """
# Reduces this element modulo pi^n.
# """
diff --git a/src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx b/src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx
index a3dcd42b3d6..de3df469423 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx
@@ -879,7 +879,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXElement):
ans.value = self.value # does this actually copy correctly
return ans
- def is_zero(self, absprec = None):
+ def is_zero(self, absprec=None):
"""
Return whether the valuation of ``self`` is at least
``absprec``; if ``absprec`` is ``None``, return whether
@@ -1038,7 +1038,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXElement):
ZZ_pX_MulMod_pre(cur.x, cur.x, x, m[0])
return matrix(R, n, n, L)
-# def matrix(self, base = None):
+# def matrix(self, base=None):
# """
# If base is None, return the matrix of right multiplication by
# the element on the power basis `1, x, x^2, \ldots, x^{d-1}`
@@ -1380,7 +1380,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXElement):
return zero
return [zero] * ordp + ulist
- def teichmuller_expansion(self, n = None):
+ def teichmuller_expansion(self, n=None):
r"""
Return a list `[a_0, a_1, \ldots, a_n]` such that.
@@ -1532,7 +1532,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXElement):
# """
# raise NotImplementedError
-# def padded_list(self, n, lift_mode = 'simple'):
+# def padded_list(self, n, lift_mode='simple'):
# """
# Returns a list of coefficients of pi starting with `pi^0` up to
# `pi^n` exclusive (padded with zeros if needed)
diff --git a/src/sage/rings/padics/padic_ZZ_pX_element.pyx b/src/sage/rings/padics/padic_ZZ_pX_element.pyx
index b2d6267503e..9e907b25899 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_element.pyx
@@ -291,7 +291,7 @@ cdef class pAdicZZpXElement(pAdicExtElement):
cdef ZZ_pX_c shifter = (self._ntl_rep()).x
#cdef ntl_ZZ_pContext_class cup = self.prime_pow.get_context(self.prime_pow.prec_cap + (self.prime_pow).low_length)
- #cdef ntl_ZZ_pX printer = ntl_ZZ_pX([],cup)
+ #cdef ntl_ZZ_pX printer = ntl_ZZ_pX([], cup)
#printer.x = ((self.prime_pow).low_shifter[0]).val()
#print(printer)
@@ -429,7 +429,7 @@ cdef class pAdicZZpXElement(pAdicExtElement):
norm_of_uniformizer = (-1)**self.parent().degree() * self.parent().defining_polynomial()[0]
return self.parent().ground_ring()(self.unit_part().matrix_mod_pn().det()) * norm_of_uniformizer**self.valuation()
- def trace(self, base = None):
+ def trace(self, base=None):
r"""
Return the absolute or relative trace of this element.
diff --git a/src/sage/rings/padics/padic_extension_generic.py b/src/sage/rings/padics/padic_extension_generic.py
index e3e97906be2..d3ca159a5fc 100644
--- a/src/sage/rings/padics/padic_extension_generic.py
+++ b/src/sage/rings/padics/padic_extension_generic.py
@@ -475,7 +475,7 @@ def polynomial_ring(self):
"""
return self._given_poly.parent()
- #def teichmuller(self, x, prec = None):
+ #def teichmuller(self, x, prec=None):
# if prec is None:
# prec = self.precision_cap()
# x = self(x, prec)
@@ -652,7 +652,7 @@ def free_module(self, base=None, basis=None, map=True):
#def principal_unit_group(self):
# raise NotImplementedError
- #def zeta(self, n = None):
+ #def zeta(self, n=None):
# raise NotImplementedError
#def zeta_order(self):
diff --git a/src/sage/rings/padics/padic_generic.py b/src/sage/rings/padics/padic_generic.py
index 3f041a5e146..39d1fb43006 100644
--- a/src/sage/rings/padics/padic_generic.py
+++ b/src/sage/rings/padics/padic_generic.py
@@ -198,7 +198,7 @@ def __richcmp__(self, other, op):
# def ngens(self):
# return 1
- # def gen(self, n = 0):
+ # def gen(self, n=0):
# if n != 0:
# raise IndexError, "only one generator"
# return self(self.prime())
diff --git a/src/sage/rings/padics/padic_generic_element.pyx b/src/sage/rings/padics/padic_generic_element.pyx
index ec3b1848416..073a3d98f5f 100644
--- a/src/sage/rings/padics/padic_generic_element.pyx
+++ b/src/sage/rings/padics/padic_generic_element.pyx
@@ -1877,7 +1877,7 @@ cdef class pAdicGenericElement(LocalGenericElement):
#def log_artin_hasse(self):
# raise NotImplementedError
- def multiplicative_order(self, prec = None):
+ def multiplicative_order(self, prec=None):
r"""
Return the multiplicative order of ``self``, where ``self`` is
considered to be one if it is one modulo `p^{\mbox{prec}}`.
@@ -1975,7 +1975,7 @@ cdef class pAdicGenericElement(LocalGenericElement):
return order
return infinity
- def valuation(self, p = None):
+ def valuation(self, p=None):
r"""
Return the valuation of this element.
@@ -2099,7 +2099,7 @@ cdef class pAdicGenericElement(LocalGenericElement):
"""
raise NotImplementedError
- def ordp(self, p = None):
+ def ordp(self, p=None):
r"""
Return the valuation of ``self``, normalized so that the valuation of `p` is 1.
@@ -4056,7 +4056,7 @@ cdef class pAdicGenericElement(LocalGenericElement):
"""
raise NotImplementedError
- def _polylog_res_1(self, n, p_branch = 0):
+ def _polylog_res_1(self, n, p_branch=0):
r"""
Return `Li_n(`self`)`, the `n`-th `p`-adic polylogarithm of ``self``,
assuming that ``self`` is congruent to `1 \pmod p`.
diff --git a/src/sage/rings/padics/padic_printing.pyx b/src/sage/rings/padics/padic_printing.pyx
index c0988388066..634e6d64115 100644
--- a/src/sage/rings/padics/padic_printing.pyx
+++ b/src/sage/rings/padics/padic_printing.pyx
@@ -76,7 +76,7 @@ class pAdicPrinterDefaults(SageObject):
"""
This class stores global defaults for `p`-adic printing.
"""
- def __init__(self, mode = 'series', pos = True, max_ram_terms = -1, max_unram_terms = -1, max_terse_terms = -1, sep = "|", alphabet = None):
+ def __init__(self, mode='series', pos=True, max_ram_terms=-1, max_unram_terms=-1, max_terse_terms=-1, sep="|", alphabet=None):
r"""
Instances of this class store global defaults used in
determining printing options during the creation of `p`-adic
@@ -150,7 +150,7 @@ class pAdicPrinterDefaults(SageObject):
else:
raise ValueError("invalid printing mode")
- def allow_negatives(self, neg = None):
+ def allow_negatives(self, neg=None):
r"""
Controls whether or not to display a balanced representation.
@@ -172,7 +172,7 @@ class pAdicPrinterDefaults(SageObject):
else:
self._pos = not neg
- def max_series_terms(self, max = None):
+ def max_series_terms(self, max=None):
r"""
Controls the maximum number of terms shown when printing in
``'series'``, ``'digits'`` or ``'bars'`` mode.
@@ -197,7 +197,7 @@ class pAdicPrinterDefaults(SageObject):
else:
self._max_ram_terms = int(max)
- def max_unram_terms(self, max = None):
+ def max_unram_terms(self, max=None):
r"""
For rings with non-prime residue fields, controls how many
terms appear in the coefficient of each ``pi^n`` when printing in
@@ -222,7 +222,7 @@ class pAdicPrinterDefaults(SageObject):
else:
self._max_unram_terms = int(max)
- def max_poly_terms(self, max = None):
+ def max_poly_terms(self, max=None):
r"""
Controls the number of terms appearing when printing
polynomial representations in ``'terse'`` or ``'val-unit'`` modes.
@@ -248,7 +248,7 @@ class pAdicPrinterDefaults(SageObject):
else:
self._max_terse_terms = int(max)
- def sep(self, sep = None):
+ def sep(self, sep=None):
r"""
Controls the separator used in ``'bars'`` mode.
@@ -271,7 +271,7 @@ class pAdicPrinterDefaults(SageObject):
else:
self._sep = str(sep)
- def alphabet(self, alphabet = None):
+ def alphabet(self, alphabet=None):
r"""
Controls the alphabet used to translate `p`-adic digits into
strings (so that no separator need be used in ``'digits'`` mode).
@@ -832,7 +832,7 @@ cdef class pAdicPrinter_class(SageObject):
else:
return trim_zeros(list(value.unit_part().expansion(lift_mode='smallest')))
- def repr_gen(self, elt, do_latex, pos = None, mode = None, ram_name = None):
+ def repr_gen(self, elt, do_latex, pos=None, mode=None, ram_name=None):
"""
The entry point for printing an element.
diff --git a/src/sage/rings/padics/padic_template_element.pxi b/src/sage/rings/padics/padic_template_element.pxi
index c842d9934cd..381887d6a5b 100644
--- a/src/sage/rings/padics/padic_template_element.pxi
+++ b/src/sage/rings/padics/padic_template_element.pxi
@@ -383,7 +383,7 @@ cdef class pAdicTemplateElement(pAdicGenericElement):
"""
raise NotImplementedError
- def expansion(self, n = None, lift_mode = 'simple', start_val = None):
+ def expansion(self, n=None, lift_mode='simple', start_val=None):
r"""
Return the coefficients in a `\pi`-adic expansion.
If this is a field element, start at
@@ -560,7 +560,7 @@ cdef class pAdicTemplateElement(pAdicGenericElement):
else:
return expansion[n]
- def teichmuller_expansion(self, n = None):
+ def teichmuller_expansion(self, n=None):
r"""
Return an iterator over coefficients `a_0, a_1, \dots, a_n` such that
diff --git a/src/sage/rings/padics/pow_computer.pyx b/src/sage/rings/padics/pow_computer.pyx
index 9719dfa1efe..cbd0118b455 100644
--- a/src/sage/rings/padics/pow_computer.pyx
+++ b/src/sage/rings/padics/pow_computer.pyx
@@ -638,7 +638,7 @@ cdef PowComputer_base PowComputer_c(Integer m, Integer cache_limit, Integer prec
# To speed up the creation of PowComputers with the same m, we might eventually want to copy over data from an existing PowComputer.
-def PowComputer(m, cache_limit, prec_cap, in_field = False, prec_type=None):
+def PowComputer(m, cache_limit, prec_cap, in_field=False, prec_type=None):
r"""
Return a ``PowComputer`` that caches the values `1, m, m^2, \ldots, m^{C}`,
where `C` is ``cache_limit``.
diff --git a/src/sage/rings/padics/pow_computer_ext.pyx b/src/sage/rings/padics/pow_computer_ext.pyx
index 389bd0bb20d..13d60f11f28 100644
--- a/src/sage/rings/padics/pow_computer_ext.pyx
+++ b/src/sage/rings/padics/pow_computer_ext.pyx
@@ -201,7 +201,7 @@ cdef int ZZ_pX_Eis_init(PowComputer_ZZ_pX prime_pow, ntl_ZZ_pX shift_seed) excep
#ZZ_div(a, ZZ_p_rep(ZZ_pX_ConstTerm(modup)), prime_pow.small_powers[1])
#ZZ_InvMod(a, a, prime_pow.pow_ZZ_tmp(prime_pow.prec_cap + low_length)[0])
#ZZ_negate(a, a)
- ##cdef ntl_ZZ_pX printer = ntl_ZZ_pX([],prime_pow.get_context(prime_pow.prec_cap))
+ ##cdef ntl_ZZ_pX printer = ntl_ZZ_pX([], prime_pow.get_context(prime_pow.prec_cap))
##printer.x = modup
# Note that we're losing one digit of precision here.
# This is correct because right shifting does not preserve precision.
@@ -728,7 +728,7 @@ cdef class PowComputer_ext(PowComputer_class):
return self.ram_prec_cap
cdef class PowComputer_ZZ_pX(PowComputer_ext):
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Initialization.
@@ -1221,7 +1221,7 @@ cdef class PowComputer_ZZ_pX_FM(PowComputer_ZZ_pX):
and unramified extensions of `\ZZ_p`.
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Caches a context and modulus for ``prime^prec_cap``.
@@ -1316,7 +1316,7 @@ cdef class PowComputer_ZZ_pX_FM_Eis(PowComputer_ZZ_pX_FM):
This class computes and stores ``low_shifter`` and ``high_shifter``, which aid in right shifting elements.
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Call ``Eis_init``, which initializes ``high_shifter`` and
``low_shifter``.
@@ -1545,7 +1545,7 @@ cdef class PowComputer_ZZ_pX_small(PowComputer_ZZ_pX):
extensions of the base `p`-adic fields.
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Caches contexts and moduli densely between 1 and cache_limit.
@@ -1745,7 +1745,7 @@ cdef class PowComputer_ZZ_pX_small_Eis(PowComputer_ZZ_pX_small):
This class computes and stores ``low_shifter`` and ``high_shifter``, which aid in right shifting elements.
These are only stored at maximal precision: in order to get lower precision versions just reduce mod p^n.
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Initialization.
@@ -1907,7 +1907,7 @@ cdef class PowComputer_ZZ_pX_big(PowComputer_ZZ_pX):
a dictionary of contexts and moduli of
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Caches contexts and moduli densely between 1 and cache_limit. Caches a context and modulus for prec_cap.
Also creates the dictionaries.
@@ -2178,7 +2178,7 @@ cdef class PowComputer_ZZ_pX_big_Eis(PowComputer_ZZ_pX_big):
These are only stored at maximal precision: in order to get lower precision
versions just reduce mod p^n.
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly, shift_seed=None):
"""
Initialization.
@@ -2335,7 +2335,7 @@ cdef class PowComputer_ZZ_pX_big_Eis(PowComputer_ZZ_pX_big):
return ZZ_pX_eis_shift_p(self, x, a, n, finalprec)
-def PowComputer_ext_maker(prime, cache_limit, prec_cap, ram_prec_cap, in_field, poly, prec_type = "small", ext_type = "u", shift_seed = None):
+def PowComputer_ext_maker(prime, cache_limit, prec_cap, ram_prec_cap, in_field, poly, prec_type="small", ext_type="u", shift_seed=None):
r"""
Return a ``PowComputer`` that caches the values `1, p, p^2, \ldots, p^C`,
where `C` is ``cache_limit``.
diff --git a/src/sage/rings/padics/pow_computer_flint.pyx b/src/sage/rings/padics/pow_computer_flint.pyx
index cac2d70d758..6f316b05e2a 100644
--- a/src/sage/rings/padics/pow_computer_flint.pyx
+++ b/src/sage/rings/padics/pow_computer_flint.pyx
@@ -33,7 +33,7 @@ cdef class PowComputer_flint(PowComputer_class):
sage: PowComputer_flint(5, 20, 20, 20, False)
FLINT PowComputer for 5
"""
- def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly=None, shift_seed = None):
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly=None, shift_seed=None):
"""
Memory initialization.
diff --git a/src/sage/rings/polynomial/complex_roots.py b/src/sage/rings/polynomial/complex_roots.py
index 0c94bac6035..42cf47cad86 100644
--- a/src/sage/rings/polynomial/complex_roots.py
+++ b/src/sage/rings/polynomial/complex_roots.py
@@ -90,6 +90,7 @@ def interval_roots(p, rts, prec):
return irts
+
def intervals_disjoint(intvs):
"""
Given a list of complex intervals, check whether they are pairwise
diff --git a/src/sage/rings/polynomial/ideal.py b/src/sage/rings/polynomial/ideal.py
index 9eba00860b5..bf575cb0339 100644
--- a/src/sage/rings/polynomial/ideal.py
+++ b/src/sage/rings/polynomial/ideal.py
@@ -19,6 +19,7 @@
from sage.rings.ideal import Ideal_pid
+
class Ideal_1poly_field(Ideal_pid):
"""
An ideal in a univariate polynomial ring over a field.
diff --git a/src/sage/rings/polynomial/laurent_polynomial_ideal.py b/src/sage/rings/polynomial/laurent_polynomial_ideal.py
index ae21901fee1..0403526ae15 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_ideal.py
+++ b/src/sage/rings/polynomial/laurent_polynomial_ideal.py
@@ -26,6 +26,7 @@
from sage.structure.richcmp import op_EQ, op_NE, op_LT, op_LE, op_GT, op_GE
from sage.arith.misc import GCD
+
class LaurentPolynomialIdeal( Ideal_generic ):
def __init__(self, ring, gens, coerce=True, hint=None):
r"""
diff --git a/src/sage/rings/polynomial/laurent_polynomial_ring.py b/src/sage/rings/polynomial/laurent_polynomial_ring.py
index 40b09bbfb6e..2e4cf5ce6ea 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_ring.py
+++ b/src/sage/rings/polynomial/laurent_polynomial_ring.py
@@ -77,6 +77,8 @@ def is_LaurentPolynomialRing(R):
_cache = {}
+
+
def LaurentPolynomialRing(base_ring, *args, **kwds):
r"""
Return the globally unique univariate or multivariate Laurent polynomial
@@ -251,6 +253,7 @@ def LaurentPolynomialRing(base_ring, *args, **kwds):
_cache[R] = P
return P
+
def _split_dict_(D, indices, group_by=None):
r"""
Split the dictionary ``D`` by ``indices`` and ``group_by``.
@@ -331,6 +334,7 @@ def extract(T, indices):
else:
return result
+
def _split_laurent_polynomial_dict_(P, M, d):
r"""
Helper function for splitting a multivariate Laurent polynomial
@@ -391,6 +395,7 @@ def value(d, R):
return sum(P({k: 1}) * value(v, P)
for k, v in D.items()).monomial_coefficients()
+
def from_fraction_field(L, x):
r"""
Helper function to construct a Laurent polynomial from an element of its
diff --git a/src/sage/rings/polynomial/laurent_polynomial_ring_base.py b/src/sage/rings/polynomial/laurent_polynomial_ring_base.py
index b4f4f13289e..d9984a656b1 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_ring_base.py
+++ b/src/sage/rings/polynomial/laurent_polynomial_ring_base.py
@@ -30,6 +30,7 @@
from sage.structure.parent import Parent
from sage.combinat.integer_vector import IntegerVectors
+
class LaurentPolynomialRing_generic(CommutativeRing, Parent):
"""
Laurent polynomial ring (base class).
diff --git a/src/sage/rings/polynomial/meson.build b/src/sage/rings/polynomial/meson.build
index c1625c5eb94..94a0a0c8b9a 100644
--- a/src/sage/rings/polynomial/meson.build
+++ b/src/sage/rings/polynomial/meson.build
@@ -92,6 +92,19 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name == 'evaluation_flint'
+ deps += [flint, mpfi]
+ elif name == 'polynomial_complex_arb'
+ deps += [flint, mpfi]
+ elif name == 'polynomial_real_mpfr_dense'
+ deps += [mpfr]
+ elif name == 'real_roots'
+ deps += [mpfi]
+ elif name == 'hilbert'
+ deps += [mpfi]
+ endif
+
py.extension_module(
name,
sources: pyx,
@@ -106,18 +119,7 @@ foreach name, pyx : extension_data
inc_rings,
inc_rings_finite,
],
- dependencies: [
- py_dep,
- cypari2,
- cysignals,
- flint,
- givaro,
- gmp,
- mpfi,
- mpfr,
- ntl,
- pari,
- ],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/rings/polynomial/msolve.py b/src/sage/rings/polynomial/msolve.py
index fb22236fba9..d261bfd70b9 100644
--- a/src/sage/rings/polynomial/msolve.py
+++ b/src/sage/rings/polynomial/msolve.py
@@ -33,6 +33,7 @@
from sage.rings.real_mpfi import RealIntervalField_class, RealIntervalField
from sage.structure.sequence import Sequence
+
def _run_msolve(ideal, options):
r"""
Internal utility function
@@ -63,6 +64,7 @@ def _run_msolve(ideal, options):
return msolve_out.stdout
+
def groebner_basis_degrevlex(ideal, proof=True):
r"""
Compute a degrevlex Gröbner basis using msolve
@@ -111,6 +113,7 @@ def groebner_basis_degrevlex(ideal, proof=True):
gbasis = sage_eval(msolve_out[:-2], locals=drlpolring.gens_dict())
return Sequence(gbasis)
+
def variety(ideal, ring, *, proof=True):
r"""
Compute the variety of a zero-dimensional ideal using msolve.
diff --git a/src/sage/rings/polynomial/multi_polynomial.pyx b/src/sage/rings/polynomial/multi_polynomial.pyx
index ca25adc23f0..1b54a1fd0aa 100644
--- a/src/sage/rings/polynomial/multi_polynomial.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial.pyx
@@ -11,14 +11,14 @@ Base class for elements of multivariate polynomial rings
# (at your option) any later version.
# https://www.gnu.org/licenses/
# ********************************************************************
+from itertools import chain
from sage.rings.integer cimport Integer
from sage.rings.integer_ring import ZZ
from sage.structure.coerce cimport coercion_model
from sage.misc.derivative import multi_derivative
-from itertools import chain
-
from sage.misc.misc_c import prod
+from sage.misc.superseded import deprecated_function_alias
def is_MPolynomial(x):
@@ -1284,28 +1284,39 @@ cdef class MPolynomial(CommutativePolynomial):
"""
return self.base_ring().ideal(self.coefficients())
- def is_generator(self):
+ def is_gen(self):
r"""
Return ``True`` if this polynomial is a generator of its parent.
EXAMPLES::
sage: R. = ZZ[]
- sage: x.is_generator()
+ sage: x.is_gen()
True
- sage: (x + y - y).is_generator()
+ sage: (x + y - y).is_gen()
True
- sage: (x*y).is_generator()
+ sage: (x*y).is_gen()
False
sage: R. = QQ[]
- sage: x.is_generator()
+ sage: x.is_gen()
True
- sage: (x + y - y).is_generator()
+ sage: (x + y - y).is_gen()
True
- sage: (x*y).is_generator()
+ sage: (x*y).is_gen()
False
+
+ TESTS::
+
+ sage: R. = ZZ[]
+ sage: x.is_generator()
+ doctest:warning...:
+ DeprecationWarning: is_generator is deprecated. Please use is_gen instead.
+ See https://github.com/sagemath/sage/issues/38942 for details.
+ True
"""
- return (self in self.parent().gens())
+ return self in self.parent().gens()
+
+ is_generator = deprecated_function_alias(38942, is_gen)
def map_coefficients(self, f, new_base_ring=None):
r"""
@@ -1391,7 +1402,7 @@ cdef class MPolynomial(CommutativePolynomial):
v = [self] + [self.map_coefficients(k.hom([k.gen()**(p**i)])) for i in range(1,e)]
return prod(v).change_ring(k.prime_subfield())
- def sylvester_matrix(self, right, variable = None):
+ def sylvester_matrix(self, right, variable=None):
r"""
Given two nonzero polynomials ``self`` and ``right``, return the Sylvester
matrix of the polynomials with respect to a given variable.
@@ -1545,7 +1556,7 @@ cdef class MPolynomial(CommutativePolynomial):
return M
- def discriminant(self,variable):
+ def discriminant(self, variable):
r"""
Return the discriminant of ``self`` with respect to the given variable.
diff --git a/src/sage/rings/polynomial/multi_polynomial_element.py b/src/sage/rings/polynomial/multi_polynomial_element.py
index 6c4ec02c1b1..3e00ef62991 100644
--- a/src/sage/rings/polynomial/multi_polynomial_element.py
+++ b/src/sage/rings/polynomial/multi_polynomial_element.py
@@ -70,7 +70,7 @@
from .multi_polynomial import MPolynomial, is_MPolynomial
from sage.categories.morphism import Morphism
from sage.misc.lazy_attribute import lazy_attribute
-
+from sage.misc.superseded import deprecated_function_alias
from sage.rings.rational_field import QQ
from sage.rings.fraction_field import FractionField
@@ -688,12 +688,12 @@ def degree(self, x=None, std_grading=False):
return Integer(self.element().degree(None))
return self.weighted_degree(self.parent().term_order().weights())
if isinstance(x, MPolynomial):
- if not x.parent() is self.parent():
+ if x.parent() is not self.parent():
try:
x = self.parent().coerce(x)
except TypeError:
raise TypeError("x must canonically coerce to parent")
- if not x.is_generator():
+ if not x.is_gen():
raise TypeError("x must be one of the generators of the parent")
else:
raise TypeError("x must be one of the generators of the parent")
@@ -1349,7 +1349,7 @@ def _homogenize(self, var):
R = self.parent()
return R(X)
- def is_generator(self):
+ def is_gen(self) -> bool:
"""
Return ``True`` if ``self`` is a generator of its parent.
@@ -1357,12 +1357,22 @@ def is_generator(self):
sage: # needs sage.rings.number_field
sage: R. = QQbar[]
- sage: x.is_generator()
+ sage: x.is_gen()
True
- sage: (x + y - y).is_generator()
+ sage: (x + y - y).is_gen()
True
- sage: (x*y).is_generator()
+ sage: (x*y).is_gen()
False
+
+ TESTS::
+
+ sage: # needs sage.rings.number_field
+ sage: R. = QQbar[]
+ sage: x.is_generator()
+ doctest:warning...:
+ DeprecationWarning: is_generator is deprecated. Please use is_gen instead.
+ See https://github.com/sagemath/sage/issues/38942 for details.
+ True
"""
elt = self.element()
if len(elt) == 1:
@@ -1370,6 +1380,8 @@ def is_generator(self):
return e.nonzero_values() == [1] and c.is_one()
return False
+ is_generator = deprecated_function_alias(38942, is_gen)
+
def is_monomial(self):
"""
Return ``True`` if ``self`` is a monomial, which we define to be a
@@ -1657,7 +1669,7 @@ def variables(self):
"""
return tuple([self.parent().gen(index) for index in self.degrees().nonzero_positions()])
- def variable(self,i):
+ def variable(self, i):
"""
Return the `i`-th variable occurring in this polynomial.
@@ -2200,7 +2212,7 @@ def factor(self, proof=None):
return F
@handle_AA_and_QQbar
- def lift(self,I):
+ def lift(self, I):
"""
Given an ideal `I = (f_1,...,f_r)` and some `g` (= ``self``) in `I`, find
`s_1,...,s_r` such that `g = s_1 f_1 + ... + s_r f_r`.
diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py
index 222da435df2..d06f07d722e 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ideal.py
+++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py
@@ -450,6 +450,7 @@ def _groebner_basis_magma(self, deg_bound=None, prot=False, magma=magma_default)
B = PolynomialSequence([R(e) for e in mgb], R, immutable=True)
return B
+
class MPolynomialIdeal_singular_base_repr:
@require_field
def syzygy_module(self):
@@ -637,7 +638,7 @@ def _singular_(self, singular=None):
try:
self.ring()._singular_(singular).set_ring()
I = self.__singular
- if not (I.parent() is singular):
+ if I.parent() is not singular:
raise ValueError
I._check_valid()
return I
@@ -3493,6 +3494,7 @@ def _reduce_using_macaulay2(self, f):
R = self.ring()
return R(k)
+
class NCPolynomialIdeal(MPolynomialIdeal_singular_repr, Ideal_nc):
def __init__(self, ring, gens, coerce=True, side='left'):
r"""
@@ -3724,7 +3726,7 @@ def _groebner_strategy(self):
from sage.libs.singular.groebner_strategy import NCGroebnerStrategy
return NCGroebnerStrategy(self.std())
- def reduce(self,p):
+ def reduce(self, p):
"""
Reduce an element modulo a Groebner basis for this ideal.
@@ -3759,7 +3761,7 @@ def reduce(self,p):
"""
return self._groebner_strategy().normal_form(p)
- def _contains_(self,p):
+ def _contains_(self, p):
"""
EXAMPLES:
@@ -4739,7 +4741,7 @@ def groebner_basis(self, algorithm='', deg_bound=None, mult_bound=None, prot=Fal
gb = self._groebner_basis_ginv(*args, **kwds)
elif ":" in algorithm:
ginv,alg = algorithm.split(":")
- gb = self._groebner_basis_ginv(algorithm=alg,*args, **kwds)
+ gb = self._groebner_basis_ginv(algorithm=alg, *args, **kwds)
else:
raise NameError("Algorithm '%s' unknown." % algorithm)
elif algorithm == 'giac:gbasis':
diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
index d05760d84cd..72b4aea43ce 100644
--- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
@@ -1702,7 +1702,7 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base):
sage: P.monomial_lcm(x,P(1))
x
"""
- cdef poly *m = p_ISet(1,self._ring)
+ cdef poly *m = p_ISet(1, self._ring)
if self is not f._parent:
f = self.coerce(f)
@@ -2700,7 +2700,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
x = self.parent().coerce(x)
except TypeError:
raise TypeError("argument is not coercible to the parent")
- if not x.is_generator():
+ if not x.is_gen():
raise TypeError("argument is not a generator")
return Integer(singular_polynomial_deg(p, x._poly, r))
@@ -2884,7 +2884,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
cdef poly *_degrees = 0
cdef poly *p = self._poly
cdef ring *r = self._parent_ring
- cdef poly *newp = p_ISet(0,r)
+ cdef poly *newp = p_ISet(0, r)
cdef poly *newptemp
cdef int i
cdef int flag
@@ -3146,7 +3146,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
return -2
return result
- def __getitem__(self,x):
+ def __getitem__(self, x):
"""
Same as ``self.monomial_coefficient`` but for exponent vectors.
@@ -4576,7 +4576,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
"""
global errorreported
- cdef ideal *fI = idInit(1,1)
+ cdef ideal *fI = idInit(1, 1)
cdef ideal *_I
cdef MPolynomialRing_libsingular parent = self._parent
cdef int i = 0
@@ -4888,7 +4888,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
if n_GetChar(_ring.cf) > 1<<29:
raise NotImplementedError("GCD of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.")
- cdef int count = singular_polynomial_length_bounded(self._poly,20) \
+ cdef int count = singular_polynomial_length_bounded(self._poly, 20) \
+ singular_polynomial_length_bounded(_right._poly,20)
if count >= 20:
sig_on()
@@ -4964,7 +4964,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
if n_GetChar(_ring.cf) > 1<<29:
raise NotImplementedError("LCM of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.")
- cdef int count = singular_polynomial_length_bounded(self._poly,20) \
+ cdef int count = singular_polynomial_length_bounded(self._poly, 20) \
+ singular_polynomial_length_bounded(_g._poly,20)
if count >= 20:
sig_on()
@@ -5044,7 +5044,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
if n_GetChar(r.cf) > 1<<29:
raise NotImplementedError("Division of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.")
- cdef int count = singular_polynomial_length_bounded(self._poly,15)
+ cdef int count = singular_polynomial_length_bounded(self._poly, 15)
if count >= 15: # note that _right._poly must be of shorter length than self._poly for us to care about this call
sig_on()
if r!=currRing: rChangeCurrRing(r) # singclap_pdivide
diff --git a/src/sage/rings/polynomial/multi_polynomial_ring.py b/src/sage/rings/polynomial/multi_polynomial_ring.py
index 41cc1fb7c87..43f1c0f6294 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ring.py
+++ b/src/sage/rings/polynomial/multi_polynomial_ring.py
@@ -949,31 +949,3 @@ def is_field(self, proof=True):
if self.ngens() == 0:
return self.base_ring().is_field(proof)
return False
-
- def ideal(self, *gens, **kwds):
- """
- Create an ideal in this polynomial ring.
- """
- do_coerce = False
- if len(gens) == 1:
- from sage.rings.ideal import Ideal_generic
- if isinstance(gens[0], Ideal_generic):
- if gens[0].ring() is self:
- return gens[0]
- gens = gens[0].gens()
- elif isinstance(gens[0], (list, tuple)):
- gens = gens[0]
- if not self._has_singular:
- # pass through
- MPolynomialRing_base.ideal(self, gens, **kwds)
-
- from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal
-
- if isinstance(gens, (sage.interfaces.abc.SingularElement, sage.interfaces.abc.Macaulay2Element)):
- gens = list(gens)
- do_coerce = True
- elif not isinstance(gens, (list, tuple)):
- gens = [gens]
- if ('coerce' in kwds and kwds['coerce']) or do_coerce:
- gens = [self(x) for x in gens] # this will even coerce from singular ideals correctly!
- return MPolynomialIdeal(self, gens, **kwds)
diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx
index 19c2ddac7b1..ac5e445908d 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx
@@ -392,21 +392,21 @@ cdef class MPolynomialRing_base(CommutativeRing):
EXAMPLES::
- sage: def F(a,b,c):
+ sage: def F(a, b, c):
....: return a^3*b + b + c^2 + 25
....:
sage: R. = PolynomialRing(QQ)
sage: R.interpolation(4, F) # needs sage.modules
x^3*y + z^2 + y + 25
- sage: def F(a,b,c):
+ sage: def F(a, b, c):
....: return a^3*b + b + c^2 + 25
....:
sage: R. = PolynomialRing(QQ)
sage: R.interpolation([3,1,2], F) # needs sage.modules
x^3*y + z^2 + y + 25
- sage: def F(a,b,c):
+ sage: def F(a, b, c):
....: return a^3*b + b + c^2 + 25
....:
sage: R. = PolynomialRing(QQ)
@@ -444,7 +444,7 @@ cdef class MPolynomialRing_base(CommutativeRing):
as well. So if you give wrong bounds, you will get a wrong answer
without any warning. ::
- sage: def F(a,b,c):
+ sage: def F(a, b, c):
....: return a^3*b + b + c^2 + 25
....:
sage: R. = PolynomialRing(QQ)
diff --git a/src/sage/rings/polynomial/multi_polynomial_sequence.py b/src/sage/rings/polynomial/multi_polynomial_sequence.py
index 37381c084ac..db276a75c25 100644
--- a/src/sage/rings/polynomial/multi_polynomial_sequence.py
+++ b/src/sage/rings/polynomial/multi_polynomial_sequence.py
@@ -377,6 +377,7 @@ def PolynomialSequence(arg1, arg2=None, immutable=False, cr=False, cr_str=None):
elif K.degree() > 1:
return PolynomialSequence_gf2e(parts, ring, immutable=immutable, cr=cr, cr_str=cr_str)
+
class PolynomialSequence_generic(Sequence_generic):
def __init__(self, parts, ring, immutable=False, cr=False, cr_str=None):
"""
@@ -856,7 +857,7 @@ def subs(self, *args, **kwargs):
sage: F = F.subs(s); F # needs sage.rings.polynomial.pbori
Polynomial Sequence with 40 Polynomials in 16 Variables
"""
- return PolynomialSequence(self._ring, [tuple([f.subs(*args,**kwargs) for f in r]) for r in self._parts])
+ return PolynomialSequence(self._ring, [tuple([f.subs(*args, **kwargs) for f in r]) for r in self._parts])
def _singular_(self):
"""
@@ -1257,6 +1258,7 @@ def is_groebner(self, singular=singular):
"""
return self.ideal().basis_is_groebner()
+
class PolynomialSequence_gf2(PolynomialSequence_generic):
r"""
Polynomial Sequences over `\GF{2}`.
diff --git a/src/sage/rings/polynomial/ore_function_element.py b/src/sage/rings/polynomial/ore_function_element.py
index fd871fa3b76..d858838f53c 100644
--- a/src/sage/rings/polynomial/ore_function_element.py
+++ b/src/sage/rings/polynomial/ore_function_element.py
@@ -715,6 +715,7 @@ def _call_(self, x):
return numerator.leading_coefficient() / denominator.leading_coefficient()
raise TypeError(f"{x} is not a constant function")
+
class OreFunctionBaseringInjection(Morphism):
r"""
Representation of the canonical homomorphism from a field `k` into a Ore
diff --git a/src/sage/rings/polynomial/pbori/nf.py b/src/sage/rings/polynomial/pbori/nf.py
index 004abef5243..09d985f9885 100644
--- a/src/sage/rings/polynomial/pbori/nf.py
+++ b/src/sage/rings/polynomial/pbori/nf.py
@@ -1,3 +1,6 @@
+from pathlib import Path
+from warnings import warn
+
from sage.rings.polynomial.pbori.pbori import mod_mon_set
from .pbori import (BooleSet, GroebnerStrategy, ReductionStrategy,
parallel_reduce, easy_linear_factors)
@@ -6,8 +9,6 @@
from .easy_polynomials import (easy_linear_polynomials as
easy_linear_polynomials_func)
from .statistics import used_vars_set
-from warnings import warn
-import os
class GeneratorLimitExceeded(Exception):
@@ -69,9 +70,8 @@ def build_and_print_matrices(v, strat):
assert j < cols
im.putpixel((j, i), 0)
- file_name = strat.matrix_prefix + str(mat_counter) + ".png"
- if os.path.exists(file_name):
- os.remove(file_name)
+ file_name = Path(strat.matrix_prefix + str(mat_counter) + ".png")
+ file_name.unlink(missing_ok=True)
im.save(file_name)
del im
@@ -84,8 +84,8 @@ def multiply_polynomials(l, ring):
TESTS::
sage: from sage.rings.polynomial.pbori import *
- sage: r=Ring(1000)
- sage: x=r.variable
+ sage: r = Ring(1000)
+ sage: x = r.variable
sage: from sage.rings.polynomial.pbori.nf import multiply_polynomials
sage: multiply_polynomials([x(3), x(2)+x(5)*x(6), x(0), x(0)+1], r)
0
@@ -149,9 +149,8 @@ def build_and_print_matrices_deg_colored(v, strat):
assert j < cols
hsl = str(270 - (270 * i2deg[j]) / max_deg)
im.putpixel((j, i), ImageColor.getrgb("hsl(" + hsl + ",100%,50%)"))
- file_name = strat.matrix_prefix + str(mat_counter) + ".png"
- if os.path.exists(file_name):
- os.remove(file_name)
+ file_name = Path(strat.matrix_prefix + str(mat_counter) + ".png")
+ file_name.unlink(missing_ok=True)
im.save(file_name)
del im
diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx
index 35de7feefe5..3dcfb16ce81 100644
--- a/src/sage/rings/polynomial/plural.pyx
+++ b/src/sage/rings/polynomial/plural.pyx
@@ -99,6 +99,16 @@ TESTS::
sage: TestSuite(P).run()
sage: loads(dumps(P)) is P
True
+
+ sage: A. = FreeAlgebra(QQ, 3)
+ sage: P = A.g_algebra(relations={y*x:-x*y}, order = 'lex')
+ sage: P.is_commutative()
+ False
+
+ sage: R. = FreeAlgebra(QQ, 3)
+ sage: P = R.g_algebra(relations={}, order='lex')
+ sage: P.is_commutative()
+ True
"""
from cysignals.memory cimport sig_malloc, sig_free
@@ -335,7 +345,7 @@ cdef class NCPolynomialRing_plural(Ring):
from sage.libs.singular.function import singular_function
ncalgebra = singular_function('nc_algebra')
- cdef RingWrap rw = ncalgebra(self._c, self._d, ring = P)
+ cdef RingWrap rw = ncalgebra(self._c, self._d, ring=P)
# rw._output()
self._ring = singular_ring_reference(rw._ring)
@@ -676,22 +686,7 @@ cdef class NCPolynomialRing_plural(Ring):
"""
return self._term_order
- def is_commutative(self):
- """
- Return ``False``.
-
- .. TODO:: Provide a mathematically correct answer.
-
- EXAMPLES::
-
- sage: A. = FreeAlgebra(QQ, 3)
- sage: P = A.g_algebra(relations={y*x:-x*y}, order = 'lex')
- sage: P.is_commutative()
- False
- """
- return False
-
- def is_field(self, *args, **kwargs):
+ def is_field(self, *args, **kwargs) -> bool:
"""
Return ``False``.
@@ -1184,7 +1179,7 @@ cdef class NCPolynomialRing_plural(Ring):
sage: P.monomial_lcm(x,P(1))
x
"""
- cdef poly *m = p_ISet(1,self._ring)
+ cdef poly *m = p_ISet(1, self._ring)
if self is not f._parent:
f = self.coerce(f)
@@ -2091,7 +2086,7 @@ cdef class NCPolynomial_plural(RingElement):
cdef poly *_degrees = 0
cdef poly *p = self._poly
cdef ring *r = (self._parent)._ring
- cdef poly *newp = p_ISet(0,r)
+ cdef poly *newp = p_ISet(0, r)
cdef poly *newptemp
cdef int i
cdef int flag
@@ -2353,7 +2348,7 @@ cdef class NCPolynomial_plural(RingElement):
return -2
return result
- def __getitem__(self,x):
+ def __getitem__(self, x):
"""
Same as :meth:`monomial_coefficient` but for exponent vectors.
@@ -3117,7 +3112,7 @@ def SCA(base_ring, names, alt_vars, order='degrevlex'):
return H.quotient(I)
-def ExteriorAlgebra(base_ring, names,order='degrevlex'):
+def ExteriorAlgebra(base_ring, names, order='degrevlex'):
"""
Return the exterior algebra on some generators.
diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx
index 53bb07c2fc4..feb0ef1b03b 100644
--- a/src/sage/rings/polynomial/polynomial_element.pyx
+++ b/src/sage/rings/polynomial/polynomial_element.pyx
@@ -208,7 +208,7 @@ cdef class Polynomial(CommutativePolynomial):
.. automethod:: _mul_trunc_
"""
- def __init__(self, parent, is_gen = False, construct=False):
+ def __init__(self, parent, is_gen=False, construct=False):
"""
The following examples illustrate creation of elements of
polynomial rings, and some basic arithmetic.
@@ -3528,7 +3528,7 @@ cdef class Polynomial(CommutativePolynomial):
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.overflowcheck(False)
- def _mul_karatsuba(self, right, K_threshold = None):
+ def _mul_karatsuba(self, right, K_threshold=None):
r"""
Compute the product of two polynomials using the Karatsuba divide
and conquer multiplication algorithm. This is only used over a
@@ -4323,7 +4323,7 @@ cdef class Polynomial(CommutativePolynomial):
"""
return [self.diff()]
- def integral(self,var=None):
+ def integral(self, var=None):
"""
Return the integral of this polynomial.
@@ -4872,7 +4872,7 @@ cdef class Polynomial(CommutativePolynomial):
-1 * 3^15 * 23 * 887 * 12583 * 6335047 * 371692813
Factoring over a number field over which we cannot factor the
- discriminant and over which `nffactor()` fails::
+ discriminant and over which ``nffactor()`` fails::
sage: # needs sage.libs.pari sage.rings.number_field
sage: p = next_prime(10^50); q = next_prime(10^51); n = p*q
@@ -4920,7 +4920,7 @@ cdef class Polynomial(CommutativePolynomial):
sage: (x1 - x2).factor() # needs sage.libs.singular
-x + x
- Check that :issue:`26421' is fixed::
+ Check that :issue:`26421` is fixed::
sage: R. = LaurentPolynomialRing(ZZ)
sage: P. = R[]
@@ -5314,7 +5314,7 @@ cdef class Polynomial(CommutativePolynomial):
raise NotImplementedError("splitting_field() is only implemented over number fields and finite fields")
- def pseudo_quo_rem(self,other):
+ def pseudo_quo_rem(self, other):
r"""
Compute the pseudo-division of two polynomials.
@@ -5831,7 +5831,7 @@ cdef class Polynomial(CommutativePolynomial):
return R.fraction_field()[self._parent.variable_name()].quotient(self, names)
- def sylvester_matrix(self, right, variable = None):
+ def sylvester_matrix(self, right, variable=None):
"""
Return the Sylvester matrix of ``self`` and ``right``.
@@ -8996,32 +8996,18 @@ cdef class Polynomial(CommutativePolynomial):
self = self//c
except (AttributeError, NotImplementedError, TypeError):
pass
- return self._roots_from_factorization(self.factor(), multiplicities)
+ try:
+ fac = self.factor()
+ except ArithmeticError:
+ raise NotImplementedError
+ else:
+ return self._roots_from_factorization(fac, multiplicities)
else:
raise NotImplementedError
except NotImplementedError:
if K.is_finite():
if multiplicities:
raise NotImplementedError("root finding with multiplicities for this polynomial not implemented (try the multiplicities=False option)")
- elif isinstance(K, sage.rings.abc.IntegerModRing):
- # handling via the chinese remainders theorem
- N = K.cardinality()
- primes = N.prime_divisors()
- residue_roots = []
- for p in primes:
- local_self = self.change_ring(GF(p))
- local_roots = local_self.roots(multiplicities=False)
- residue_roots.append([a.lift() for a in local_roots])
- result = []
- P = ZZ.prod(primes)
- for res in cartesian_product_iterator(residue_roots):
- lifted = crt(list(res), primes)
- candidate = lifted
- for k in range(N // P):
- if not self(candidate):
- result.append(K(candidate))
- candidate += P
- return result
else:
return [a for a in K if not self(a)]
@@ -11819,7 +11805,7 @@ cdef list do_karatsuba_different_size(list left, list right, Py_ssize_t K_thresh
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.overflowcheck(False)
-cdef list do_karatsuba(list left, list right, Py_ssize_t K_threshold,Py_ssize_t start_l, Py_ssize_t start_r,Py_ssize_t num_elts):
+cdef list do_karatsuba(list left, list right, Py_ssize_t K_threshold, Py_ssize_t start_l, Py_ssize_t start_r, Py_ssize_t num_elts):
"""
Core routine for Karatsuba multiplication. This function works for two
polynomials of the same degree.
@@ -13092,7 +13078,7 @@ cpdef bint polynomial_is_variable(x) noexcept:
.. SEEALSO::
- :meth:`sage.rings.polynomial.polynomial_element.Polynomial.is_gen`
- - :meth:`sage.rings.polynomial.multi_polynomial.MPolynomial.is_generator`
+ - :meth:`sage.rings.polynomial.multi_polynomial.MPolynomial.is_gen`
EXAMPLES::
@@ -13130,5 +13116,5 @@ cpdef bint polynomial_is_variable(x) noexcept:
return (x.is_gen()
or (x.degree() == 1 and x[0].is_zero() and x[1].is_one()))
if isinstance(x, MPolynomial):
- return x.is_generator()
+ return x.is_gen()
return False
diff --git a/src/sage/rings/polynomial/polynomial_element_generic.py b/src/sage/rings/polynomial/polynomial_element_generic.py
index c3df26200e2..7bbd4e611a9 100644
--- a/src/sage/rings/polynomial/polynomial_element_generic.py
+++ b/src/sage/rings/polynomial/polynomial_element_generic.py
@@ -1049,6 +1049,7 @@ def number_of_terms(self):
"""
return len(self.__coeffs)
+
class Polynomial_generic_domain(Polynomial, IntegralDomainElement):
def __init__(self, parent, is_gen=False, construct=False):
Polynomial.__init__(self, parent, is_gen=is_gen)
@@ -1082,6 +1083,7 @@ def is_unit(self):
return False
return self[0].is_unit()
+
class Polynomial_generic_field(Polynomial_singular_repr,
Polynomial_generic_domain,
EuclideanDomainElement):
@@ -1588,6 +1590,7 @@ def _roots(self, secure, minval, hint):
class Polynomial_generic_dense_cdv(Polynomial_generic_dense_inexact, Polynomial_generic_cdv):
pass
+
class Polynomial_generic_sparse_cdv(Polynomial_generic_sparse, Polynomial_generic_cdv):
pass
diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring.py b/src/sage/rings/polynomial/polynomial_quotient_ring.py
index e12977e8464..9851c477abf 100644
--- a/src/sage/rings/polynomial/polynomial_quotient_ring.py
+++ b/src/sage/rings/polynomial/polynomial_quotient_ring.py
@@ -216,7 +216,7 @@ def create_key(self, ring, polynomial, names=None):
raise TypeError("ring must be a polynomial ring")
if not isinstance(polynomial, polynomial_element.Polynomial):
raise TypeError("must be a polynomial")
- if not polynomial.parent() is ring:
+ if polynomial.parent() is not ring:
raise TypeError("polynomial must be in ring")
c = polynomial.leading_coefficient()
@@ -262,6 +262,7 @@ def create_object(self, version, key):
PolynomialQuotientRing = PolynomialQuotientRingFactory("PolynomialQuotientRing")
+
def is_PolynomialQuotientRing(x):
from sage.misc.superseded import deprecation
deprecation(38266,
diff --git a/src/sage/rings/polynomial/polynomial_rational_flint.pyx b/src/sage/rings/polynomial/polynomial_rational_flint.pyx
index ceaa9d7b2d5..c11592cf2d6 100644
--- a/src/sage/rings/polynomial/polynomial_rational_flint.pyx
+++ b/src/sage/rings/polynomial/polynomial_rational_flint.pyx
@@ -1495,7 +1495,7 @@ cdef class Polynomial_rational_flint(Polynomial):
fmpz_get_mpz(den.value, fmpq_poly_denref(self._poly))
return den
- def _derivative(self, var = None):
+ def _derivative(self, var=None):
"""
Return the derivative of this polynomial with respect to ``var``.
diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py
index 2bda9f6f9c3..0ab8074ec1e 100644
--- a/src/sage/rings/polynomial/polynomial_ring.py
+++ b/src/sage/rings/polynomial/polynomial_ring.py
@@ -149,7 +149,7 @@
from sage.categories.principal_ideal_domains import PrincipalIdealDomains
from sage.categories.rings import Rings
-from sage.rings.ring import (Ring, IntegralDomain, PrincipalIdealDomain)
+from sage.rings.ring import (Ring, IntegralDomain)
from sage.structure.element import RingElement
import sage.rings.rational_field as rational_field
from sage.rings.rational_field import QQ
@@ -2154,8 +2154,7 @@ def construction(self):
implementation=implementation), self.base_ring()
-class PolynomialRing_field(PolynomialRing_integral_domain,
- PrincipalIdealDomain):
+class PolynomialRing_field(PolynomialRing_integral_domain):
def __init__(self, base_ring, name='x', sparse=False, implementation=None,
element_class=None, category=None):
"""
@@ -2217,9 +2216,14 @@ def _element_class():
from sage.rings.polynomial.polynomial_element_generic import Polynomial_generic_dense_field
return Polynomial_generic_dense_field
+ if category is None:
+ cat = PrincipalIdealDomains()
+ else:
+ cat = category & PrincipalIdealDomains()
+
PolynomialRing_integral_domain.__init__(self, base_ring, name=name,
sparse=sparse, implementation=implementation,
- element_class=_element_class(), category=category)
+ element_class=_element_class(), category=cat)
def _ideal_class_(self, n=0):
"""
diff --git a/src/sage/rings/polynomial/real_roots.pyx b/src/sage/rings/polynomial/real_roots.pyx
index a91a95a1d55..bf294c3c398 100644
--- a/src/sage/rings/polynomial/real_roots.pyx
+++ b/src/sage/rings/polynomial/real_roots.pyx
@@ -1248,7 +1248,7 @@ def de_casteljau_intvec(Vector_integer_dense c, int c_bitsize, Rational x, int u
# An ULP is a "unit in the last place"; it is the (varying) unit for
# how much adjacent floating-point numbers differ from each other.
# A half-ULP is half this amount; it is the maximum rounding error
-# in the basic operations (+,-,*,/) in a correctly-operating IEEE
+# in the basic operations (+, -, *, /) in a correctly-operating IEEE
# floating-point unit.
# (Note that by default, the x86 does not use IEEE double precision;
# instead, it uses extra precision, which can (counterintuitively)
diff --git a/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx b/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx
index 0c8c660c18c..8193108d25a 100644
--- a/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx
+++ b/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx
@@ -842,7 +842,7 @@ cdef class SkewPolynomial_finite_field_dense(SkewPolynomial_finite_order_dense):
cdef list indices = sample(range(1, m+1), m)
cdef unit = self.leading_coefficient()
- cdef SkewPolynomial_finite_field_dense left = self._new_c(self._coeffs[:],skew_ring)
+ cdef SkewPolynomial_finite_field_dense left = self._new_c(self._coeffs[:], skew_ring)
left = left.right_monic()
cdef SkewPolynomial_finite_field_dense right = skew_ring.one()
cdef SkewPolynomial_finite_field_dense L, R
diff --git a/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx b/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx
index f90484cba62..e92cca63198 100644
--- a/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx
+++ b/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx
@@ -94,7 +94,7 @@ cdef class SkewPolynomial_finite_order_dense(SkewPolynomial_generic_dense):
else:
col = 0
exp = r
- cdef SkewPolynomial_finite_order_dense powx = self._new_c([zero,one], parent)
+ cdef SkewPolynomial_finite_order_dense powx = self._new_c([zero, one], parent)
cdef SkewPolynomial_finite_order_dense v
if (exp % 2 == 1):
v = self._new_c([zero,one], parent)
diff --git a/src/sage/rings/polynomial/term_order.py b/src/sage/rings/polynomial/term_order.py
index 1bed10ba867..a88568248ce 100644
--- a/src/sage/rings/polynomial/term_order.py
+++ b/src/sage/rings/polynomial/term_order.py
@@ -539,6 +539,7 @@
'block' : block_description,
}
+
class TermOrder(SageObject):
"""
A term order.
@@ -1210,7 +1211,7 @@ def sortkey_block(self, f):
n += len(block)
return key
- def greater_tuple_matrix(self,f,g):
+ def greater_tuple_matrix(self, f, g):
"""
Return the greater exponent tuple with respect to the matrix
term order.
@@ -1239,7 +1240,7 @@ def greater_tuple_matrix(self,f,g):
return g
return g
- def greater_tuple_lex(self,f,g):
+ def greater_tuple_lex(self, f, g):
"""
Return the greater exponent tuple with respect to the
lexicographical term order.
@@ -1261,7 +1262,7 @@ def greater_tuple_lex(self,f,g):
"""
return f > g and f or g
- def greater_tuple_invlex(self,f,g):
+ def greater_tuple_invlex(self, f, g):
"""
Return the greater exponent tuple with respect to the inversed
lexicographical term order.
@@ -1285,7 +1286,7 @@ def greater_tuple_invlex(self,f,g):
"""
return f.reversed() > g.reversed() and f or g
- def greater_tuple_deglex(self,f,g):
+ def greater_tuple_deglex(self, f, g):
"""
Return the greater exponent tuple with respect to the total degree
lexicographical term order.
@@ -1311,7 +1312,7 @@ def greater_tuple_deglex(self,f,g):
sg = sum(g.nonzero_values(sort=False))
return ( sf > sg or ( sf == sg and f > g )) and f or g
- def greater_tuple_degrevlex(self,f,g):
+ def greater_tuple_degrevlex(self, f, g):
"""
Return the greater exponent tuple with respect to the total degree
reversed lexicographical term order.
@@ -1337,7 +1338,7 @@ def greater_tuple_degrevlex(self,f,g):
sg = sum(g.nonzero_values(sort=False))
return ( sf > sg or ( sf == sg and f.reversed() < g.reversed() )) and f or g
- def greater_tuple_negdegrevlex(self,f,g):
+ def greater_tuple_negdegrevlex(self, f, g):
"""
Return the greater exponent tuple with respect to the negative
degree reverse lexicographical term order.
@@ -1366,7 +1367,7 @@ def greater_tuple_negdegrevlex(self,f,g):
sg = sum(g.nonzero_values(sort=False))
return ( sf < sg or ( sf == sg and f.reversed() < g.reversed() )) and f or g
- def greater_tuple_negdeglex(self,f,g):
+ def greater_tuple_negdeglex(self, f, g):
"""
Return the greater exponent tuple with respect to the negative
degree lexicographical term order.
@@ -1395,7 +1396,7 @@ def greater_tuple_negdeglex(self,f,g):
sg = sum(g.nonzero_values(sort=False))
return ( sf < sg or ( sf == sg and f > g )) and f or g
- def greater_tuple_degneglex(self,f,g):
+ def greater_tuple_degneglex(self, f, g):
"""
Return the greater exponent tuple with respect to the degree negative
lexicographical term order.
@@ -1421,7 +1422,7 @@ def greater_tuple_degneglex(self,f,g):
sg = sum(g.nonzero_values(sort=False))
return ( sf > sg or ( sf == sg and f < g )) and f or g
- def greater_tuple_neglex(self,f,g):
+ def greater_tuple_neglex(self, f, g):
"""
Return the greater exponent tuple with respect to the negative
lexicographical term order.
@@ -1446,7 +1447,7 @@ def greater_tuple_neglex(self,f,g):
"""
return (f < g) and f or g
- def greater_tuple_wdeglex(self,f,g):
+ def greater_tuple_wdeglex(self, f, g):
"""
Return the greater exponent tuple with respect to the weighted degree
lexicographical term order.
@@ -1473,7 +1474,7 @@ def greater_tuple_wdeglex(self,f,g):
sg = sum(l*r for (l,r) in zip(g,self._weights))
return (sf > sg or ( sf == sg and f > g )) and f or g
- def greater_tuple_wdegrevlex(self,f,g):
+ def greater_tuple_wdegrevlex(self, f, g):
"""
Return the greater exponent tuple with respect to the weighted degree
reverse lexicographical term order.
@@ -1500,7 +1501,7 @@ def greater_tuple_wdegrevlex(self,f,g):
sg = sum(l*r for (l,r) in zip(g,self._weights))
return (sf > sg or ( sf == sg and f.reversed() < g.reversed())) and f or g
- def greater_tuple_negwdeglex(self,f,g):
+ def greater_tuple_negwdeglex(self, f, g):
"""
Return the greater exponent tuple with respect to the negative
weighted degree lexicographical term order.
@@ -1530,7 +1531,7 @@ def greater_tuple_negwdeglex(self,f,g):
sg = sum(l*r for (l,r) in zip(g,self._weights))
return (sf < sg or ( sf == sg and f > g )) and f or g
- def greater_tuple_negwdegrevlex(self,f,g):
+ def greater_tuple_negwdegrevlex(self, f, g):
"""
Return the greater exponent tuple with respect to the negative
weighted degree reverse lexicographical term order.
@@ -1560,7 +1561,7 @@ def greater_tuple_negwdegrevlex(self,f,g):
sg = sum(l*r for (l,r) in zip(g,self._weights))
return (sf < sg or ( sf == sg and f.reversed() < g.reversed() )) and f or g
- def greater_tuple_block(self, f,g):
+ def greater_tuple_block(self, f, g):
"""
Return the greater exponent tuple with respect to the block
order as specified when constructing this element.
diff --git a/src/sage/rings/power_series_poly.pyx b/src/sage/rings/power_series_poly.pyx
index 309d72c8f6a..39b05cce069 100644
--- a/src/sage/rings/power_series_poly.pyx
+++ b/src/sage/rings/power_series_poly.pyx
@@ -874,7 +874,7 @@ cdef class PowerSeries_poly(PowerSeries):
return PowerSeries_poly(self._parent, self.__f._derivative(),
self.prec()-1, check=False)
- def integral(self,var=None):
+ def integral(self, var=None):
"""
Return the integral of this power series.
diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx
index b1ca6ea4ab1..1d24794eb37 100644
--- a/src/sage/rings/power_series_ring_element.pyx
+++ b/src/sage/rings/power_series_ring_element.pyx
@@ -839,7 +839,7 @@ cdef class PowerSeries(AlgebraElement):
v = [a[i] for i in range(min(prec, len(a)))]
return self._parent(v, prec)
- def __getitem__(self,n):
+ def __getitem__(self, n):
r"""
Return the coefficient of `t^n` in this power series, where
`t` is the indeterminate of the power series ring.
@@ -2317,7 +2317,7 @@ cdef class PowerSeries(AlgebraElement):
coeffs = self[:prec]
return self._parent(coeffs, prec)
- def solve_linear_de(self, prec = infinity, b = None, f0 = None):
+ def solve_linear_de(self, prec=infinity, b=None, f0=None):
r"""
Obtain a power series solution to an inhomogeneous linear
differential equation of the form:
diff --git a/src/sage/rings/qqbar.py b/src/sage/rings/qqbar.py
index 300d64b8279..72df892337b 100644
--- a/src/sage/rings/qqbar.py
+++ b/src/sage/rings/qqbar.py
@@ -2556,7 +2556,8 @@ def number_field_elements_from_algebraics(numbers, minimal=False,
- ``same_field`` -- boolean (default: ``False``); see below
- ``embedded`` -- boolean (default: ``False``); whether to make the
- NumberField embedded
+ NumberField embedded, note that this has no effect when the
+ resulting field is ``QQ`` because there is only one ``QQ`` instance
- ``name`` -- string (default: ``'a'``); name of the primitive element
@@ -2827,6 +2828,69 @@ def number_field_elements_from_algebraics(numbers, minimal=False,
To: Algebraic Real Field
Defn: 1 |--> 1)
+ Test ``embedded`` for quadratic and cyclotomic fields::
+
+ sage: v = number_field_elements_from_algebraics([QQbar((-1)^(2/3))], embedded=False, minimal=True); v
+ (Number Field in zeta6 with defining polynomial x^2 - x + 1,
+ [zeta6 - 1],
+ Ring morphism:
+ From: Number Field in zeta6 with defining polynomial x^2 - x + 1
+ To: Algebraic Field
+ Defn: zeta6 |--> 0.500000000000000? + 0.866025403784439?*I)
+ sage: v[0].coerce_embedding()
+ sage: v = number_field_elements_from_algebraics([QQbar((-1)^(2/3))], embedded=True, minimal=True); v
+ (Cyclotomic Field of order 6 and degree 2,
+ [zeta6 - 1],
+ Ring morphism:
+ From: Cyclotomic Field of order 6 and degree 2
+ To: Algebraic Field
+ Defn: zeta6 |--> 0.500000000000000? + 0.866025403784439?*I)
+ sage: v[0].coerce_embedding()
+ Generic morphism:
+ From: Cyclotomic Field of order 6 and degree 2
+ To: Complex Lazy Field
+ Defn: zeta6 -> 0.500000000000000? + 0.866025403784439?*I
+ sage: v = number_field_elements_from_algebraics([QQbar((-1)^(1/2))], embedded=False, minimal=True); v
+ (Number Field in I with defining polynomial x^2 + 1,
+ [I],
+ Ring morphism:
+ From: Number Field in I with defining polynomial x^2 + 1
+ To: Algebraic Field
+ Defn: I |--> 1*I)
+ sage: v[0].coerce_embedding()
+ sage: v = number_field_elements_from_algebraics([QQbar((-1)^(1/2))], embedded=True, minimal=True); v
+ (Number Field in I with defining polynomial x^2 + 1 with I = 1*I,
+ [I],
+ Ring morphism:
+ From: Number Field in I with defining polynomial x^2 + 1 with I = 1*I
+ To: Algebraic Field
+ Defn: I |--> 1*I)
+ sage: v[0].coerce_embedding()
+ Generic morphism:
+ From: Number Field in I with defining polynomial x^2 + 1 with I = 1*I
+ To: Complex Lazy Field
+ Defn: I -> 1*I
+ sage: v = number_field_elements_from_algebraics([QQbar((-1)^(1/5))], embedded=False, minimal=True); v
+ (Number Field in zeta10 with defining polynomial x^4 - x^3 + x^2 - x + 1,
+ [zeta10],
+ Ring morphism:
+ From: Number Field in zeta10 with defining polynomial x^4 - x^3 + x^2 - x + 1
+ To: Algebraic Field
+ Defn: zeta10 |--> 0.8090169943749474? + 0.5877852522924731?*I)
+ sage: v[0].coerce_embedding()
+ sage: v = number_field_elements_from_algebraics([QQbar((-1)^(1/5))], embedded=True, minimal=True); v
+ (Cyclotomic Field of order 10 and degree 4,
+ [zeta10],
+ Ring morphism:
+ From: Cyclotomic Field of order 10 and degree 4
+ To: Algebraic Field
+ Defn: zeta10 |--> 0.8090169943749474? + 0.5877852522924731?*I)
+ sage: v[0].coerce_embedding()
+ Generic morphism:
+ From: Cyclotomic Field of order 10 and degree 4
+ To: Complex Lazy Field
+ Defn: zeta10 -> 0.809016994374948? + 0.587785252292473?*I
+
Tests more complicated combinations::
sage: # needs sage.libs.gap sage.symbolic
@@ -2847,10 +2911,10 @@ def number_field_elements_from_algebraics(numbers, minimal=False,
sage: AA((-1)^(2/3))
1
sage: number_field_elements_from_algebraics([(-1)^(2/3)])
- (Cyclotomic Field of order 6 and degree 2,
+ (Number Field in zeta6 with defining polynomial x^2 - x + 1,
[zeta6 - 1],
Ring morphism:
- From: Cyclotomic Field of order 6 and degree 2
+ From: Number Field in zeta6 with defining polynomial x^2 - x + 1
To: Algebraic Field
Defn: zeta6 |--> 0.500000000000000? + 0.866025403784439?*I)
"""
@@ -2905,17 +2969,23 @@ def mk_algebraic(x):
exact_generator = gen.root_as_algebraic()
hom = fld.hom([exact_generator])
- if fld is not QQ and embedded:
- # creates the embedded field
- embedded_field = NumberField(fld.defining_polynomial(), fld.variable_name(), embedding=exact_generator)
-
- # embeds the numbers
- inter_hom = fld.hom([embedded_field.gen(0)])
- nums = [inter_hom(n) for n in nums]
-
- # get the field and homomorphism
- hom = embedded_field.hom([exact_generator])
- fld = embedded_field
+ if fld is not QQ:
+ # ignore the embedded parameter for QQ
+ # cyclotomic fields are embedded by default
+ # number fields are not embedded by default
+ # if the default embedding is different from what is expected then modify the field
+ if embedded != (fld.coerce_embedding() is not None):
+ # creates the modified field
+ modified_field = NumberField(fld.defining_polynomial(), fld.variable_name(),
+ embedding=exact_generator if embedded else None)
+
+ # embeds the numbers
+ inter_hom = fld.hom([modified_field.gen(0)])
+ nums = [inter_hom(n) for n in nums]
+
+ # get the field and homomorphism
+ hom = modified_field.hom([exact_generator])
+ fld = modified_field
if single_number:
nums = nums[0]
diff --git a/src/sage/rings/qqbar_decorators.py b/src/sage/rings/qqbar_decorators.py
index 7343a0b9b08..9abca887218 100644
--- a/src/sage/rings/qqbar_decorators.py
+++ b/src/sage/rings/qqbar_decorators.py
@@ -14,6 +14,7 @@
from sage.misc.decorators import decorator_keywords, sage_wraps
+
@decorator_keywords
def handle_AA_and_QQbar(func):
r"""
diff --git a/src/sage/rings/quotient_ring.py b/src/sage/rings/quotient_ring.py
index 4cf3979265f..c867ba41bbc 100644
--- a/src/sage/rings/quotient_ring.py
+++ b/src/sage/rings/quotient_ring.py
@@ -35,7 +35,7 @@
....: self._power = n
....: self._power = n
....: Ideal_nc.__init__(self, R, [R.prod(m) for m in product(R.gens(), repeat=n)])
- ....: def reduce(self,x):
+ ....: def reduce(self, x):
....: R = self.ring()
....: return add([c*R(m) for m,c in x if len(m) = FreeAlgebra(QQ, 3) # needs sage.combinat sage.modules
@@ -793,7 +793,7 @@ def lift(self, x=None):
return self.lifting_map()
return self.lifting_map()(x)
- def retract(self,x):
+ def retract(self, x):
"""
The image of an element of the cover ring under the quotient map.
@@ -1545,6 +1545,7 @@ def _contains_(self, other):
J = R.cover_ring().ideal(Igens)
return other.lift() in J
+
class QuotientRingIdeal_principal(ideal.Ideal_principal, QuotientRingIdeal_generic):
r"""
Specialized class for principal quotient-ring ideals.
diff --git a/src/sage/rings/rational.pyx b/src/sage/rings/rational.pyx
index 272650abeef..bc29e952b1a 100644
--- a/src/sage/rings/rational.pyx
+++ b/src/sage/rings/rational.pyx
@@ -3993,9 +3993,9 @@ cdef double mpq_get_d_nearest(mpq_t x) except? -648555075988944.5:
return 0.0
elif shift >= 971: # |d| > 2^1024
if resultsign < 0:
- return -1.0/0.0
+ return float('-inf')
else:
- return 1.0/0.0
+ return float('inf')
sig_on()
diff --git a/src/sage/rings/ring.pyx b/src/sage/rings/ring.pyx
index 17d0150357d..28f272a18f0 100644
--- a/src/sage/rings/ring.pyx
+++ b/src/sage/rings/ring.pyx
@@ -361,115 +361,6 @@ cdef class Ring(ParentWithGens):
# initialisation has finished.
return self._category or _Rings
- def ideal(self, *args, **kwds):
- """
- Return the ideal defined by ``x``, i.e., generated by ``x``.
-
- INPUT:
-
- - ``*x`` -- list or tuple of generators (or several input arguments)
-
- - ``coerce`` -- boolean (default: ``True``); this must be a keyword
- argument. Only set it to ``False`` if you are certain that each
- generator is already in the ring.
-
- - ``ideal_class`` -- callable (default: ``self._ideal_class_()``);
- this must be a keyword argument. A constructor for ideals, taking
- the ring as the first argument and then the generators.
- Usually a subclass of :class:`~sage.rings.ideal.Ideal_generic` or
- :class:`~sage.rings.noncommutative_ideals.Ideal_nc`.
-
- - Further named arguments (such as ``side`` in the case of
- non-commutative rings) are forwarded to the ideal class.
-
- EXAMPLES::
-
- sage: R. = QQ[]
- sage: R.ideal(x,y)
- Ideal (x, y) of Multivariate Polynomial Ring in x, y over Rational Field
- sage: R.ideal(x+y^2)
- Ideal (y^2 + x) of Multivariate Polynomial Ring in x, y over Rational Field
- sage: R.ideal( [x^3,y^3+x^3] )
- Ideal (x^3, x^3 + y^3) of Multivariate Polynomial Ring in x, y over Rational Field
-
- Here is an example over a non-commutative ring::
-
- sage: A = SteenrodAlgebra(2) # needs sage.combinat sage.modules
- sage: A.ideal(A.1, A.2^2) # needs sage.combinat sage.modules
- Twosided Ideal (Sq(2), Sq(2,2)) of mod 2 Steenrod algebra, milnor basis
- sage: A.ideal(A.1, A.2^2, side='left') # needs sage.combinat sage.modules
- Left Ideal (Sq(2), Sq(2,2)) of mod 2 Steenrod algebra, milnor basis
-
- TESTS:
-
- Make sure that :issue:`11139` is fixed::
-
- sage: R. = QQ[]
- sage: R.ideal([])
- Principal ideal (0) of Univariate Polynomial Ring in x over Rational Field
- sage: R.ideal(())
- Principal ideal (0) of Univariate Polynomial Ring in x over Rational Field
- sage: R.ideal()
- Principal ideal (0) of Univariate Polynomial Ring in x over Rational Field
- """
- if 'coerce' in kwds:
- coerce = kwds['coerce']
- del kwds['coerce']
- else:
- coerce = True
-
- from sage.rings.ideal import Ideal_generic
- from sage.structure.parent import Parent
- gens = args
- while isinstance(gens, (list, tuple)) and len(gens) == 1:
- first = gens[0]
- if isinstance(first, Ideal_generic):
- R = first.ring()
- m = self.convert_map_from(R)
- if m is not None:
- gens = [m(g) for g in first.gens()]
- coerce = False
- else:
- m = R.convert_map_from(self)
- if m is not None:
- raise NotImplementedError
- else:
- raise TypeError
- break
- elif isinstance(first, (list, tuple)):
- gens = first
- elif isinstance(first, Parent) and self.has_coerce_map_from(first):
- gens = first.gens() # we have a ring as argument
- else:
- break
-
- if len(gens) == 0:
- gens = [self.zero()]
-
- if coerce:
- gens = [self(g) for g in gens]
- if self in PrincipalIdealDomains():
- # Use GCD algorithm to obtain a principal ideal
- g = gens[0]
- if len(gens) == 1:
- try:
- # note: we set g = gcd(g, g) to "canonicalize" the generator: make polynomials monic, etc.
- g = g.gcd(g)
- except (AttributeError, NotImplementedError, IndexError):
- pass
- else:
- for h in gens[1:]:
- g = g.gcd(h)
- gens = [g]
- if 'ideal_class' in kwds:
- C = kwds['ideal_class']
- del kwds['ideal_class']
- else:
- C = self._ideal_class_(len(gens))
- if len(gens) == 1 and isinstance(gens[0], (list, tuple)):
- gens = gens[0]
- return C(self, gens, **kwds)
-
def __mul__(self, x):
"""
Return the ideal ``x*R`` generated by ``x``, where ``x`` is either an
@@ -652,76 +543,6 @@ cdef class Ring(ParentWithGens):
"""
return True
- def is_subring(self, other):
- """
- Return ``True`` if the canonical map from ``self`` to ``other`` is
- injective.
-
- Raises a :exc:`NotImplementedError` if not known.
-
- EXAMPLES::
-
- sage: ZZ.is_subring(QQ)
- True
- sage: ZZ.is_subring(GF(19))
- False
-
- TESTS::
-
- sage: QQ.is_subring(QQ['x'])
- True
- sage: QQ.is_subring(GF(7))
- False
- sage: QQ.is_subring(CyclotomicField(7)) # needs sage.rings.number_field
- True
- sage: QQ.is_subring(ZZ)
- False
-
- Every ring is a subring of itself, :issue:`17287`::
-
- sage: QQbar.is_subring(QQbar) # needs sage.rings.number_field
- True
- sage: RR.is_subring(RR)
- True
- sage: CC.is_subring(CC) # needs sage.rings.real_mpfr
- True
- sage: x = polygen(ZZ, 'x')
- sage: K. = NumberField(x^3 - x + 1/10) # needs sage.rings.number_field
- sage: K.is_subring(K) # needs sage.rings.number_field
- True
- sage: R. = RR[]
- sage: R.is_subring(R)
- True
- """
- if self is other:
- return True
- try:
- return self.Hom(other).natural_map().is_injective()
- except (TypeError, AttributeError):
- return False
-
- def is_prime_field(self):
- r"""
- Return ``True`` if this ring is one of the prime fields `\QQ` or
- `\GF{p}`.
-
- EXAMPLES::
-
- sage: QQ.is_prime_field()
- True
- sage: GF(3).is_prime_field()
- True
- sage: GF(9, 'a').is_prime_field() # needs sage.rings.finite_rings
- False
- sage: ZZ.is_prime_field()
- False
- sage: QQ['x'].is_prime_field()
- False
- sage: Qp(19).is_prime_field() # needs sage.rings.padics
- False
- """
- return False
-
def order(self):
"""
The number of elements of ``self``.
@@ -1382,26 +1203,6 @@ cdef class Field(CommutativeRing):
return y.is_zero()
return True
- def ideal(self, *gens, **kwds):
- """
- Return the ideal generated by gens.
-
- EXAMPLES::
-
- sage: QQ.ideal(2)
- Principal ideal (1) of Rational Field
- sage: QQ.ideal(0)
- Principal ideal (0) of Rational Field
- """
- if len(gens) == 1 and isinstance(gens[0], (list, tuple)):
- gens = gens[0]
- if not isinstance(gens, (list, tuple)):
- gens = [gens]
- for x in gens:
- if not self(x).is_zero():
- return self.unit_ideal()
- return self.zero_ideal()
-
def integral_closure(self):
"""
Return this field, since fields are integrally closed in their
@@ -1416,7 +1217,7 @@ cdef class Field(CommutativeRing):
"""
return self
- def is_field(self, proof = True):
+ def is_field(self, proof=True):
"""
Return ``True`` since this is a field.
diff --git a/src/sage/rings/ring_extension.pxd b/src/sage/rings/ring_extension.pxd
index 478bd6eef75..68c2dd0e974 100644
--- a/src/sage/rings/ring_extension.pxd
+++ b/src/sage/rings/ring_extension.pxd
@@ -1,8 +1,8 @@
from sage.categories.map cimport Map
-from sage.rings.ring cimport CommutativeRing
+from sage.structure.parent cimport Parent
-cdef class RingExtension_generic(CommutativeRing):
+cdef class RingExtension_generic(Parent):
cdef _type
cdef _backend
cdef _defining_morphism
@@ -15,10 +15,10 @@ cdef class RingExtension_generic(CommutativeRing):
cdef type _fraction_field_type
cpdef is_defined_over(self, base)
- cpdef CommutativeRing _check_base(self, CommutativeRing base)
- cpdef _degree_over(self, CommutativeRing base)
- cpdef _is_finite_over(self, CommutativeRing base)
- cpdef _is_free_over(self, CommutativeRing base)
+ cpdef Parent _check_base(self, Parent base)
+ cpdef _degree_over(self, Parent base)
+ cpdef _is_finite_over(self, Parent base)
+ cpdef _is_free_over(self, Parent base)
cdef Map _defining_morphism_fraction_field(self, bint extend_base)
@@ -31,10 +31,11 @@ cdef class RingExtensionWithBasis(RingExtension_generic):
cdef _basis_names
cdef _basis_latex_names
- cpdef _basis_over(self, CommutativeRing base)
- # cpdef _free_module(self, CommutativeRing base, bint map)
+ cpdef _basis_over(self, Parent base)
+ # cpdef _free_module(self, Parent base, bint map)
cdef class RingExtensionWithGen(RingExtensionWithBasis):
cdef _gen
cdef _name
+ cdef public object _latex_names
diff --git a/src/sage/rings/ring_extension.pyx b/src/sage/rings/ring_extension.pyx
index 174af6dd415..9d8a626094a 100644
--- a/src/sage/rings/ring_extension.pyx
+++ b/src/sage/rings/ring_extension.pyx
@@ -117,12 +117,12 @@ from sage.cpython.getattr import dir_with_other_class
from sage.misc.latex import latex, latex_variable_name
from sage.structure.factory import UniqueFactory
+from sage.structure.parent cimport Parent
from sage.structure.element cimport Element
from sage.structure.category_object import normalize_names
from sage.categories.map cimport Map
from sage.categories.commutative_rings import CommutativeRings
from sage.categories.fields import Fields
-from sage.rings.ring cimport CommutativeRing
from sage.rings.integer_ring import ZZ
from sage.rings.infinity import Infinity
@@ -497,7 +497,7 @@ RingExtension = RingExtensionFactory("sage.rings.ring_extension.RingExtension")
# General extensions
####################
-cdef class RingExtension_generic(CommutativeRing):
+cdef class RingExtension_generic(Parent):
r"""
A generic class for all ring extensions.
@@ -564,8 +564,8 @@ cdef class RingExtension_generic(CommutativeRing):
...
ValueError: exotic defining morphism between two rings in the tower; consider using another variable name
"""
- cdef CommutativeRing base, ring
- cdef CommutativeRing b, backend
+ cdef Parent base, ring
+ cdef Parent b, backend
cdef Map f
base = defining_morphism.domain()
@@ -575,7 +575,7 @@ cdef class RingExtension_generic(CommutativeRing):
# but CommutativeRings() seems safer, especially when dealing with
# morphisms which do not need to preserve the base
category = CommutativeRings()
- CommutativeRing.__init__(self, ZZ, category=category)
+ Parent.__init__(self, base=ZZ, category=category)
self._base = base
self._backend = ring
self._backend_defining_morphism = defining_morphism
@@ -1197,14 +1197,14 @@ cdef class RingExtension_generic(CommutativeRing):
:meth:`base`, :meth:`bases`, :meth:`absolute_base`
"""
- cdef CommutativeRing b
+ cdef Parent b
b = self
while isinstance(b, RingExtension_generic):
if b is base or (b)._backend is base: return True
b = (b)._base
return b is base
- cpdef CommutativeRing _check_base(self, CommutativeRing base):
+ cpdef Parent _check_base(self, Parent base):
r"""
Check if ``base`` is one of the successive bases of this
extension and, if it is, normalize it.
@@ -1243,7 +1243,7 @@ cdef class RingExtension_generic(CommutativeRing):
sage: L._check_base(None) is L.base() # needs sage.rings.finite_rings
True
"""
- cdef CommutativeRing b
+ cdef Parent b
if base is None:
return self._base
b = self
@@ -1450,7 +1450,7 @@ cdef class RingExtension_generic(CommutativeRing):
base = self._check_base(base)
return self._degree_over(base)
- cpdef _degree_over(self, CommutativeRing base):
+ cpdef _degree_over(self, Parent base):
r"""
Return the degree of this extension over ``base``.
@@ -1572,7 +1572,7 @@ cdef class RingExtension_generic(CommutativeRing):
sage: L.is_finite_over() # needs sage.rings.finite_rings
True
"""
- cdef CommutativeRing b
+ cdef Parent b
base = self._check_base(base)
if base is self:
return True
@@ -1590,7 +1590,7 @@ cdef class RingExtension_generic(CommutativeRing):
b = (b)._base
raise NotImplementedError
- cpdef _is_finite_over(self, CommutativeRing base):
+ cpdef _is_finite_over(self, Parent base):
r"""
Return whether or not this extension is finite over ``base``.
@@ -1635,7 +1635,7 @@ cdef class RingExtension_generic(CommutativeRing):
sage: L.is_free_over() # needs sage.rings.finite_rings
True
"""
- cdef CommutativeRing b
+ cdef Parent b
base = self._check_base(base)
if base is self or base.is_field():
return True
@@ -1653,7 +1653,7 @@ cdef class RingExtension_generic(CommutativeRing):
b = (b)._base
raise NotImplementedError
- cpdef _is_free_over(self, CommutativeRing base):
+ cpdef _is_free_over(self, Parent base):
r"""
Return whether or not this extension is finite over ``base``.
@@ -1952,7 +1952,7 @@ cdef class RingExtension_generic(CommutativeRing):
TESTS:
- Ensure issue :issue:`34692` is fixed::
+ Ensure issue :issue:`34692` is fixed::
sage: Fq = GF(11)
sage: FqX. = Fq[]
@@ -2191,7 +2191,7 @@ cdef class RingExtensionWithBasis(RingExtension_generic):
b = b.base_ring()
return base
- cpdef _degree_over(self, CommutativeRing base):
+ cpdef _degree_over(self, Parent base):
r"""
Return the degree of this extension over ``base``.
@@ -2218,7 +2218,7 @@ cdef class RingExtensionWithBasis(RingExtension_generic):
else:
return len(self._basis) * self._base._degree_over(base)
- cpdef _is_finite_over(self, CommutativeRing base):
+ cpdef _is_finite_over(self, Parent base):
r"""
Return whether or not this extension is finite over ``base``.
@@ -2237,7 +2237,7 @@ cdef class RingExtensionWithBasis(RingExtension_generic):
return True
return self._base._is_finite_over(base)
- cpdef _is_free_over(self, CommutativeRing base):
+ cpdef _is_free_over(self, Parent base):
r"""
Return whether or not this extension is free over ``base``.
@@ -2298,7 +2298,7 @@ cdef class RingExtensionWithBasis(RingExtension_generic):
base = self._check_base(base)
return self._basis_over(base)
- cpdef _basis_over(self, CommutativeRing base):
+ cpdef _basis_over(self, Parent base):
r"""
Return a basis of this extension over ``base``.
@@ -2588,7 +2588,6 @@ cdef class RingExtensionWithGen(RingExtensionWithBasis):
RingExtensionWithBasis.__init__(self, defining_morphism, basis, basis_names, check, **kwargs)
self._gen = self._backend(gen)
self._names = (self._name,)
- self._latex_names = (latex_variable_name(self._name),)
self._basis_latex_names = basis_latex_names
def _repr_topring(self, **options):
diff --git a/src/sage/rings/ring_extension_element.pxd b/src/sage/rings/ring_extension_element.pxd
index 6b62ad58c06..9bd662f3d0f 100644
--- a/src/sage/rings/ring_extension_element.pxd
+++ b/src/sage/rings/ring_extension_element.pxd
@@ -1,4 +1,4 @@
-from sage.rings.ring cimport CommutativeRing
+from sage.structure.parent cimport Parent
from sage.structure.element cimport Element
from sage.structure.element cimport CommutativeAlgebraElement
from sage.rings.ring_extension cimport RingExtension_generic
@@ -13,10 +13,10 @@ cdef class RingExtensionFractionFieldElement(RingExtensionElement):
pass
cdef class RingExtensionWithBasisElement(RingExtensionElement):
- cdef _vector(self, CommutativeRing base)
- cdef _matrix(self, CommutativeRing base)
- cdef _trace(self, CommutativeRing base)
- cdef _norm(self, CommutativeRing base)
+ cdef _vector(self, Parent base)
+ cdef _matrix(self, Parent base)
+ cdef _trace(self, Parent base)
+ cdef _norm(self, Parent base)
cpdef minpoly(self, base=*, var=*)
diff --git a/src/sage/rings/ring_extension_element.pyx b/src/sage/rings/ring_extension_element.pyx
index 67b6aa90879..600b1d1a62e 100644
--- a/src/sage/rings/ring_extension_element.pyx
+++ b/src/sage/rings/ring_extension_element.pyx
@@ -24,6 +24,7 @@ from sage.misc.latex import latex
from sage.structure.category_object import normalize_names
from sage.structure.element cimport CommutativeAlgebraElement
+from sage.structure.parent cimport Parent
from sage.rings.integer_ring import ZZ
from sage.categories.fields import Fields
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
@@ -328,7 +329,7 @@ cdef class RingExtensionElement(CommutativeAlgebraElement):
sage: g.parent()
Finite Field in z2 of size 5^2
- TESTS::
+ TESTS:
We check the case of a tower of extensions::
@@ -383,7 +384,7 @@ cdef class RingExtensionElement(CommutativeAlgebraElement):
"""
return left._backend._richcmp_(backend_element(right), op)
- cpdef _add_(self,other):
+ cpdef _add_(self, other):
r"""
Return the sum of this element and ``other``.
@@ -423,7 +424,7 @@ cdef class RingExtensionElement(CommutativeAlgebraElement):
ans._backend = -self._backend
return ans
- cpdef _sub_(self,other):
+ cpdef _sub_(self, other):
r"""
Return the difference of this element and ``other``.
@@ -443,7 +444,7 @@ cdef class RingExtensionElement(CommutativeAlgebraElement):
ans._backend = self._backend - (other)._backend
return ans
- cpdef _mul_(self,other):
+ cpdef _mul_(self, other):
r"""
Return the product of this element and ``other``.
@@ -463,7 +464,7 @@ cdef class RingExtensionElement(CommutativeAlgebraElement):
ans._backend = self._backend * (other)._backend
return ans
- cpdef _div_(self,other):
+ cpdef _div_(self, other):
r"""
Return the quotient of this element by ``other``,
considered as an element of the fraction field.
@@ -1033,7 +1034,7 @@ cdef class RingExtensionWithBasisElement(RingExtensionElement):
base = (self._parent)._check_base(base)
return self._vector(base)
- cdef _vector(self, CommutativeRing base):
+ cdef _vector(self, Parent base):
r"""
Return the vector of coordinates of this element over ``base``
(in the basis output by the method :meth:`basis_over`).
@@ -1198,7 +1199,7 @@ cdef class RingExtensionWithBasisElement(RingExtensionElement):
raise ValueError("the extension is not finite free")
return self._matrix(base)
- cdef _matrix(self, CommutativeRing base):
+ cdef _matrix(self, Parent base):
r"""
Return the matrix of the multiplication by this element (in
the basis output by :meth:`basis_over`).
@@ -1286,7 +1287,7 @@ cdef class RingExtensionWithBasisElement(RingExtensionElement):
raise ValueError("the extension is not finite free")
return self._trace(base)
- cdef _trace(self, CommutativeRing base):
+ cdef _trace(self, Parent base):
r"""
Return the trace of this element over ``base``.
@@ -1314,7 +1315,7 @@ cdef class RingExtensionWithBasisElement(RingExtensionElement):
....: assert((x+y).trace(base) == x.trace(base) + y.trace(base))
"""
cdef RingExtensionWithBasis parent = self._parent
- cdef CommutativeRing b
+ cdef Parent b
if base is parent:
return self
b = parent._base
@@ -1379,7 +1380,7 @@ cdef class RingExtensionWithBasisElement(RingExtensionElement):
raise ValueError("the extension is not finite free")
return self._norm(base)
- cdef _norm(self, CommutativeRing base):
+ cdef _norm(self, Parent base):
r"""
Return the norm of this element over ``base``.
@@ -1407,7 +1408,7 @@ cdef class RingExtensionWithBasisElement(RingExtensionElement):
....: assert((x*y).norm(base) == x.norm(base) * y.norm(base))
"""
cdef RingExtensionWithBasis parent = self._parent
- cdef CommutativeRing b
+ cdef Parent b
if base is parent:
return self
b = parent._base
diff --git a/src/sage/rings/ring_extension_homset.py b/src/sage/rings/ring_extension_homset.py
index d2c13a11f0e..1ba55906d9c 100644
--- a/src/sage/rings/ring_extension_homset.py
+++ b/src/sage/rings/ring_extension_homset.py
@@ -20,6 +20,7 @@
from sage.rings.homset import RingHomset_generic
from sage.rings.ring_extension_morphism import RingExtensionHomomorphism
+
class RingExtensionHomset(RingHomset_generic):
r"""
A generic class for homsets between ring extensions.
diff --git a/src/sage/rings/ring_extension_morphism.pyx b/src/sage/rings/ring_extension_morphism.pyx
index 2768bdac81c..d4aad7f8253 100644
--- a/src/sage/rings/ring_extension_morphism.pyx
+++ b/src/sage/rings/ring_extension_morphism.pyx
@@ -21,7 +21,7 @@ from sage.structure.richcmp import op_EQ, op_NE
from sage.structure.element cimport Element
from sage.categories.map import Map
-from sage.rings.ring cimport CommutativeRing
+from sage.structure.parent cimport Parent
from sage.rings.morphism cimport RingMap
from sage.rings.ring_extension cimport RingExtension_generic, RingExtensionWithBasis
from sage.rings.ring_extension_element cimport RingExtensionElement
@@ -57,7 +57,7 @@ cdef are_equal_morphisms(f, g):
sage: H(f^2) == H(g^2) # indirect doctest
True
"""
- cdef CommutativeRing b
+ cdef Parent b
cdef tuple gens
if f is None and g is None:
return True
@@ -821,7 +821,7 @@ cdef class MapRelativeRingToFreeModule(Map):
From: Field in z6 with defining polynomial x^2 + (10*z3^2 + z3 + 6)*x + z3 over its base
To: Vector space of dimension 2 over Finite Field in z3 of size 11^3
"""
- cdef CommutativeRing L, base
+ cdef Parent L, base
self._degree = (E)._degree_over(K)
self._basis = [ (x)._backend for x in E.basis_over(K) ]
diff --git a/src/sage/rings/semirings/tropical_mpolynomial.py b/src/sage/rings/semirings/tropical_mpolynomial.py
index d8df667530b..d8011d2b033 100644
--- a/src/sage/rings/semirings/tropical_mpolynomial.py
+++ b/src/sage/rings/semirings/tropical_mpolynomial.py
@@ -151,6 +151,23 @@ class TropicalMPolynomial(MPolynomial_polydict):
p1 = R(3)*a*b + a + R(-1)*b
sphinx_plot(p1.plot3d())
+ Another way to represent tropical curve is through dual subdivision,
+ which is a subdivision of Newton polytope of tropical polynomial::
+
+ sage: p1.newton_polytope()
+ A 2-dimensional polyhedron in ZZ^2 defined as the convex hull of 3 vertices
+ sage: p1.dual_subdivision()
+ Polyhedral complex with 1 maximal cell
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('a,b'))
+ a, b = R.gen(), R.gen(1)
+ p1 = R(3)*a*b + a + R(-1)*b
+ sphinx_plot(p1.dual_subdivision().plot())
+
TESTS:
There is no subtraction defined for tropical polynomials::
@@ -196,7 +213,7 @@ def subs(self, fixed=None, **kwds):
return self(tuple(variables))
def plot3d(self, color='random'):
- """
+ r"""
Return the 3d plot of ``self``.
Only implemented for tropical polynomial in two variables.
@@ -285,7 +302,7 @@ def plot3d(self, color='random'):
T = self.parent().base()
R = self.base_ring().base_ring()
- # Finding the point of curve that touch the edge of the axes
+ # Find the point of curve that touch the edge of the axes
for comp in tv.components():
if len(comp[1]) == 1:
valid_int = RealSet(comp[1][0])
@@ -359,7 +376,7 @@ def tropical_variety(self):
curve. For dimensions higher than two, it is referred to as a
tropical hypersurface.
- OUTPUT: a :class:`sage.rings.semirings.tropical_variety.TropicalVariety`
+ OUTPUT: :class:`sage.rings.semirings.tropical_variety.TropicalVariety`
EXAMPLES:
@@ -390,9 +407,250 @@ def tropical_variety(self):
return TropicalSurface(self)
return TropicalVariety(self)
+ def newton_polytope(self):
+ r"""
+ Return the Newton polytope of ``self``.
+
+ The Newton polytope is the convex hull of all the points
+ corresponding to the exponents of the monomials of tropical
+ polynomial.
+
+ OUTPUT: :func:`~sage.geometry.polyhedron.constructor.Polyhedron`
+
+ EXAMPLES:
+
+ A Newton polytope for a two-variable tropical polynomial::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = x + y
+ sage: p1.newton_polytope()
+ A 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
+ sage: p1.newton_polytope().Vrepresentation()
+ (A vertex at (0, 1), A vertex at (1, 0))
+ sage: p1.newton_polytope().Hrepresentation()
+ (An equation (1, 1) x - 1 == 0,
+ An inequality (0, -1) x + 1 >= 0,
+ An inequality (0, 1) x + 0 >= 0)
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p1 = x + y
+ sphinx_plot(p1.newton_polytope().plot())
+
+ A Newton polytope in three dimension::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = x^2 + x*y*z + x + y + z + R(0)
+ sage: p1.newton_polytope()
+ A 3-dimensional polyhedron in ZZ^3 defined as the convex hull of 5 vertices
+ sage: p1.newton_polytope().Vrepresentation()
+ (A vertex at (0, 0, 0),
+ A vertex at (0, 0, 1),
+ A vertex at (0, 1, 0),
+ A vertex at (2, 0, 0),
+ A vertex at (1, 1, 1))
+ sage: p1.newton_polytope().Hrepresentation()
+ (An inequality (0, 1, 0) x + 0 >= 0,
+ An inequality (0, 0, 1) x + 0 >= 0,
+ An inequality (1, 0, 0) x + 0 >= 0,
+ An inequality (1, -1, -1) x + 1 >= 0,
+ An inequality (-1, -2, 1) x + 2 >= 0,
+ An inequality (-1, 1, -2) x + 2 >= 0)
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ)
+ R = PolynomialRing(T, ('x,y,z'))
+ x, y, z = R.gen(), R.gen(1), R.gen(2)
+ p1 = x**2 + x*y*z + x + y + z + R(0)
+ sphinx_plot(p1.newton_polytope().plot())
+ """
+ from sage.geometry.polyhedron.constructor import Polyhedron
+
+ exponents = self.exponents()
+ return Polyhedron(exponents)
+
+ def dual_subdivision(self):
+ """
+ Return the dual subdivision of ``self``.
+
+ Dual subdivision refers to a specific decomposition of the
+ Newton polytope of a tropical polynomial. The term "dual" is
+ used in the sense that the combinatorial structure of the
+ tropical variety is reflected in the dual subdivision.
+ Specifically, vertices of the dual subdivision correspond to
+ the intersection of multiple components. Edges of the dual
+ subdivision correspond to the individual components.
+
+ OUTPUT: :class:`~sage.geometry.polyhedral_complex.PolyhedralComplex`
+
+ EXAMPLES:
+
+ Dual subdivision of a tropical curve::
+
+ sage: T = TropicalSemiring(QQ, use_min=False)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(3) + R(2)*x + R(2)*y + R(3)*x*y + x^2 + y^2
+ sage: pc = p1.dual_subdivision(); pc
+ Polyhedral complex with 4 maximal cells
+ sage: [p.Vrepresentation() for p in pc.maximal_cells_sorted()]
+ [(A vertex at (0, 0), A vertex at (0, 1), A vertex at (1, 1)),
+ (A vertex at (0, 0), A vertex at (1, 0), A vertex at (1, 1)),
+ (A vertex at (0, 1), A vertex at (0, 2), A vertex at (1, 1)),
+ (A vertex at (1, 0), A vertex at (1, 1), A vertex at (2, 0))]
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p1 = R(3) + R(2)*x + R(2)*y + R(3)*x*y + x**2 + y**2
+ sphinx_plot(p1.dual_subdivision().plot())
+
+ A subdivision of a pentagonal Newton polytope::
+
+ sage: p2 = R(3) + x^2 + R(-2)*y + R(1/2)*x^2*y + R(2)*x*y^3 + R(-1)*x^3*y^4
+ sage: pc = p2.dual_subdivision(); pc
+ Polyhedral complex with 5 maximal cells
+ sage: [p.Vrepresentation() for p in pc.maximal_cells_sorted()]
+ [(A vertex at (0, 0), A vertex at (0, 1), A vertex at (1, 3)),
+ (A vertex at (0, 0), A vertex at (1, 3), A vertex at (2, 1)),
+ (A vertex at (0, 0), A vertex at (2, 0), A vertex at (2, 1)),
+ (A vertex at (1, 3), A vertex at (2, 1), A vertex at (3, 4)),
+ (A vertex at (2, 0), A vertex at (2, 1), A vertex at (3, 4))]
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p2 = R(3) + x**2 + R(-2)*y + R(1/2)*x**2*y + R(2)*x*y**3 + R(-1)*x**3*y**4
+ sphinx_plot(p2.dual_subdivision().plot())
+
+ A subdivision with many faces, not all of which are triangles::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p3 = (R(8) + R(4)*x + R(2)*y + R(1)*x^2 + x*y + R(1)*y^2
+ ....: + R(2)*x^3 + x^2*y + x*y^2 + R(4)*y^3 + R(8)*x^4
+ ....: + R(4)*x^3*y + x^2*y^2 + R(2)*x*y^3 + y^4)
+ sage: pc = p3.dual_subdivision(); pc
+ Polyhedral complex with 10 maximal cells
+ sage: [p.Vrepresentation() for p in pc.maximal_cells_sorted()]
+ [(A vertex at (0, 0), A vertex at (0, 1), A vertex at (1, 0)),
+ (A vertex at (0, 1), A vertex at (0, 2), A vertex at (1, 1)),
+ (A vertex at (0, 1), A vertex at (1, 0), A vertex at (2, 0)),
+ (A vertex at (0, 1), A vertex at (1, 1), A vertex at (2, 0)),
+ (A vertex at (0, 2), A vertex at (0, 4), A vertex at (1, 1)),
+ (A vertex at (0, 4),
+ A vertex at (1, 1),
+ A vertex at (2, 1),
+ A vertex at (2, 2)),
+ (A vertex at (1, 1), A vertex at (2, 0), A vertex at (2, 1)),
+ (A vertex at (2, 0), A vertex at (2, 1), A vertex at (3, 0)),
+ (A vertex at (2, 1), A vertex at (2, 2), A vertex at (3, 0)),
+ (A vertex at (2, 2), A vertex at (3, 0), A vertex at (4, 0))]
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p3 = (R(8) + R(4)*x + R(2)*y + R(1)*x**2 + x*y + R(1)*y**2
+ + R(2)*x**3 + x**2*y + x*y**2 + R(4)*y**3 + R(8)*x**4
+ + R(4)*x**3*y + x**2*y**2 + R(2)*x*y**3 + y**4)
+ sphinx_plot(p3.dual_subdivision().plot())
+
+ Dual subdivision of a tropical surface::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = x + y + z + x^2 + R(1)
+ sage: pc = p1.dual_subdivision(); pc
+ Polyhedral complex with 7 maximal cells
+ sage: [p.Vrepresentation() for p in pc.maximal_cells_sorted()]
+ [(A vertex at (0, 0, 0), A vertex at (0, 0, 1), A vertex at (0, 1, 0)),
+ (A vertex at (0, 0, 0), A vertex at (0, 0, 1), A vertex at (1, 0, 0)),
+ (A vertex at (0, 0, 0), A vertex at (0, 1, 0), A vertex at (1, 0, 0)),
+ (A vertex at (0, 0, 1), A vertex at (0, 1, 0), A vertex at (1, 0, 0)),
+ (A vertex at (0, 0, 1), A vertex at (0, 1, 0), A vertex at (2, 0, 0)),
+ (A vertex at (0, 0, 1), A vertex at (1, 0, 0), A vertex at (2, 0, 0)),
+ (A vertex at (0, 1, 0), A vertex at (1, 0, 0), A vertex at (2, 0, 0))]
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('x,y,z'))
+ x, y, z = R.gen(), R.gen(1), R.gen(2)
+ p1 = x + y + z + x**2 + R(1)
+ sphinx_plot(p1.dual_subdivision().plot())
+
+ Dual subdivision of a tropical hypersurface::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(2)*a*b + R(3)*a*c + R(-1)*c^2 + R(-1/3)*a*d
+ sage: pc = p1.dual_subdivision(); pc
+ Polyhedral complex with 4 maximal cells
+ sage: [p.Vrepresentation() for p in pc.maximal_cells_sorted()]
+ [(A vertex at (0, 0, 2, 0),
+ A vertex at (1, 0, 0, 1),
+ A vertex at (1, 0, 1, 0)),
+ (A vertex at (0, 0, 2, 0),
+ A vertex at (1, 0, 0, 1),
+ A vertex at (1, 1, 0, 0)),
+ (A vertex at (0, 0, 2, 0),
+ A vertex at (1, 0, 1, 0),
+ A vertex at (1, 1, 0, 0)),
+ (A vertex at (1, 0, 0, 1),
+ A vertex at (1, 0, 1, 0),
+ A vertex at (1, 1, 0, 0))]
+ """
+ from sage.geometry.polyhedron.constructor import Polyhedron
+ from sage.geometry.polyhedral_complex import PolyhedralComplex
+
+ TV = self.tropical_variety()
+ cycles = []
+
+ if TV.dimension() == 2:
+ for indices in TV._vertices_components().values():
+ cycle = []
+ for index in indices:
+ vertices = TV._keys[index[0]]
+ for v in vertices:
+ cycle.append(v)
+ cycles.append(cycle)
+ else:
+ line_comps = TV.weight_vectors()[1]
+ for indices in line_comps.values():
+ cycle = []
+ for index in indices:
+ vertices = TV._keys[index]
+ for v in vertices:
+ cycle.append(v)
+ cycles.append(cycle)
+
+ polyhedron_lst = []
+ for cycle in cycles:
+ polyhedron = Polyhedron(vertices=cycle)
+ polyhedron_lst.append(polyhedron)
+ pc = PolyhedralComplex(polyhedron_lst)
+ return pc
+
def _repr_(self):
r"""
- Return string representation of ``self``.
+ Return a string representation of ``self``.
EXAMPLES::
@@ -413,7 +671,7 @@ def _repr_(self):
def _latex_(self):
r"""
- Return the latex representation of ``self``.
+ Return a latex representation of ``self``.
EXAMPLES::
@@ -595,7 +853,7 @@ def random_element(self, degree=2, terms=None, choose_degree=False,
r"""
Return a random multivariate tropical polynomial from ``self``.
- OUTPUT: a :class:`TropicalMPolynomial`
+ OUTPUT: :class:`TropicalMPolynomial`
.. SEEALSO::
diff --git a/src/sage/rings/semirings/tropical_polynomial.py b/src/sage/rings/semirings/tropical_polynomial.py
index c0dff405ac9..4e4e239edd2 100644
--- a/src/sage/rings/semirings/tropical_polynomial.py
+++ b/src/sage/rings/semirings/tropical_polynomial.py
@@ -15,6 +15,8 @@
3*x^3 + 3*x^2
sage: (x^2 + R(1)*x + R(-1))^2
0*x^4 + 1*x^3 + 2*x^2 + 0*x + (-2)
+ sage: (x^2 + x + R(0))^4
+ 0*x^8 + 0*x^7 + 0*x^6 + 0*x^5 + 0*x^4 + 0*x^3 + 0*x^2 + 0*x + 0
REFERENCES:
@@ -56,7 +58,7 @@ class TropicalPolynomial(Polynomial_generic_sparse):
EXAMPLES:
- First, we construct a tropical polynomial semiring by defining a base
+ We construct a tropical polynomial semiring by defining a base
tropical semiring and then inputting it to :class:`PolynomialRing`::
sage: T = TropicalSemiring(QQ, use_min=False)
@@ -294,7 +296,7 @@ def factor(self):
`x + x_0` is `x_0` and not `-x_0`. However, not every tropical
polynomial can be factored.
- OUTPUT: a :class:'Factorization'
+ OUTPUT: :class:'Factorization'
EXAMPLES::
@@ -346,7 +348,7 @@ def piecewise_function(self):
its corresponding linear function. Next, we must determine which
term achieves the minimum (maximum) at each interval.
- OUTPUT: A piecewise function
+ OUTPUT: a piecewise function
EXAMPLES::
@@ -471,7 +473,7 @@ def plot(self, xmin=None, xmax=None):
T = TropicalSemiring(QQ, use_min=False)
R = PolynomialRing(T, 'x')
- p1 = p1 = R([4,2,1,3])
+ p1 = R([4,2,1,3])
sphinx_plot(p1.plot())
A different result will be obtained if the tropical semiring employs
@@ -492,7 +494,7 @@ def plot(self, xmin=None, xmax=None):
T = TropicalSemiring(QQ, use_min=True)
R = PolynomialRing(T, 'x')
p1 = R([4,2,1,3])
- sphinx_plot(plot(p1, xmin=-4, xmax=4))
+ sphinx_plot(p1.plot())
TESTS:
@@ -800,7 +802,7 @@ def random_element(self, degree=(-1, 2), monic=False, *args, **kwds):
r"""
Return a random tropical polynomial of given degrees (bounds).
- OUTPUT: a :class:`TropicalPolynomial`
+ OUTPUT: :class:`TropicalPolynomial`
.. SEEALSO::
@@ -875,7 +877,7 @@ def interpolation(self, points):
- ``points`` -- a list of tuples ``(x, y)``
- OUTPUT: a :class:`TropicalPolynomial`
+ OUTPUT: :class:`TropicalPolynomial`
EXAMPLES::
diff --git a/src/sage/rings/semirings/tropical_variety.py b/src/sage/rings/semirings/tropical_variety.py
index 3eb04372d13..dbc1b85cd52 100644
--- a/src/sage/rings/semirings/tropical_variety.py
+++ b/src/sage/rings/semirings/tropical_variety.py
@@ -12,6 +12,7 @@
REFERENCES:
- [Bru2014]_
+- [Mac2015]_
- [Fil2017]_
"""
@@ -26,9 +27,10 @@
# ****************************************************************************
from sage.structure.sage_object import SageObject
-from sage.rings.infinity import infinity
from sage.structure.unique_representation import UniqueRepresentation
+from sage.rings.rational_field import QQ
+from sage.rings.infinity import infinity
class TropicalVariety(UniqueRepresentation, SageObject):
r"""
@@ -150,10 +152,10 @@ class TropicalVariety(UniqueRepresentation, SageObject):
a tropical hypersurface embedded in a real space `\RR^n`::
sage: T = TropicalSemiring(QQ)
- sage: R. = PolynomialRing(T)
- sage: p1 = x*y + R(-1/2)*x*z + R(4)*z^2 + a*x
+ sage: R. = PolynomialRing(T)
+ sage: p1 = x*y + R(-1/2)*x*z + R(4)*z^2 + w*x
sage: tv = p1.tropical_variety(); tv
- Tropical hypersurface of 0*a*x + 0*x*y + (-1/2)*x*z + 4*z^2
+ Tropical hypersurface of 0*w*x + 0*x*y + (-1/2)*x*z + 4*z^2
sage: tv.components()
[[(t1, t2, t3 - 1/2, t3), [t2 - 9/2 <= t3, t3 <= t1 + 1/2, t2 - 5 <= t1], 1],
[(t1, 2*t2 - t3 + 4, t3, t2), [t3 + 1/2 <= t2, t3 <= t1], 1],
@@ -261,7 +263,7 @@ def __init__(self, poly):
temp_order.append(order)
temp_keys.append(keys)
- # Changing all the operator symbol to be <= or >=
+ # Changing all the operator's symbol to <= or >=
self._keys = []
components = []
dim_param = 0
@@ -473,6 +475,7 @@ def update_result(result):
sol_param_sim.add(eqn.lhs() >= eqn.rhs())
else:
sol_param_sim.add(sol)
+
# Checking there are no conditions with the same variables
# that use the <= and >= operators simultaneously
unique_sol_param = set()
@@ -527,6 +530,209 @@ def update_result(result):
update_result(result)
return result
+ def weight_vectors(self):
+ r"""
+ Return the weight vectors for each unique intesection of
+ components of ``self``.
+
+ Weight vectors are a list of vectors associated with each
+ unique intersection of the components of tropical variety.
+ Each vector is a normal vector to a component with respect
+ to the unique intersection lying within that component.
+
+ Assume ``self`` is a `n`-dimensional tropical variety.
+ Suppose `L` is an intersection lying within the components
+ `S_1, \ldots, S_k` with respective weights `w_1, \ldots, w_k`.
+ This `L` is a linear structure in `\RR^{n-1}` and has `n-1`
+ direction vectors `d_1,d_2,\ldots, d_{n-1}`. Each component
+ `S_1, \ldots, S_k` has a normal vector `n_1, \ldots, n_k`.
+ Then, we scale each normal vector to an integer vector such
+ that the greatest common divisor of its elements is 1.
+
+ The weight vector of a component `S_i` with respect to `L`
+ can be found by calculating the cross product between direction
+ vectors of `L` and normal vector `n_i`.These vectors will
+ satisfy the balancing condition `\sum_{i=1}^k w_k v_k = 0`.
+
+ OUTPUT:
+
+ A tuple of three dictionaries. The first dictionary contains
+ equations representing the intersections. The second dictionary
+ contains indices of components that contains the intersection.
+ The third dictionary contains lists of vectors.
+
+ EXAMPLES:
+
+ Weight vectors of tropical surface::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p = x^2 + R(-1)*y + z + R(1)
+ sage: tv = p.tropical_variety()
+ sage: tv.weight_vectors()
+ ({0: ((1/2*u2, u2 + 1, u2), {u2 <= 1}),
+ 1: ((1/2, 2, u2), {1 <= u2}),
+ 2: ((1/2, u2, 1), {2 <= u2}),
+ 3: ((u1, 2, 1), {(1/2) <= u1})},
+ {0: [0, 1, 3], 1: [0, 2, 4], 2: [1, 2, 5], 3: [3, 4, 5]},
+ {0: [(1, 2, -5/2), (1, -5/2, 2), (-2, 1/2, 1/2)],
+ 1: [(-1, -2, 0), (0, 2, 0), (1, 0, 0)],
+ 2: [(1, 0, 2), (0, 0, -2), (-1, 0, 0)],
+ 3: [(0, 1, 1), (0, 0, -1), (0, -1, 0)]})
+
+ TESTS:
+
+ Checking the balance condition of weight vectors::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: f = R.random_element()
+ sage: vec = f.tropical_variety().weight_vectors()[2].values()
+ sage: all(a == vector([0,0,0,0]) for a in [sum(lst) for lst in vec])
+ True
+ """
+ from sage.symbolic.ring import SR
+ from sage.symbolic.relation import solve
+ from sage.calculus.functional import diff
+ from sage.arith.misc import gcd
+ from sage.matrix.constructor import matrix
+ from sage.modules.free_module_element import vector, zero_vector
+ from itertools import combinations
+
+ dim = self.dimension()
+ t = SR.var('t')
+ t_vars = [SR.var('t{}'.format(i)) for i in range(dim)]
+ u_vars = [SR.var('u{}'.format(i)) for i in range(dim)]
+ convert_tu = {ti: ui for ti, ui in zip(t_vars, u_vars)}
+ CI = self._components_intersection()
+ unique_line = set()
+ index_line = {}
+ line_comps = {}
+ index = 0
+
+ # Find the unique intersection between multiple components and
+ # the indices of the components containing this intersection.
+ for i, lines in CI.items():
+ for line in lines:
+ eqn = line[0]
+ is_unique = True
+ for uniq in unique_line:
+ subs_index = -1
+ for j in range(dim):
+ if eqn[j] != uniq[j]:
+ subs_index = j
+ break
+ if subs_index == -1:
+ new_line = eqn
+ is_unique = False
+ break
+ subs_dict = {}
+ while len(subs_dict) != dim-2 and subs_index < dim:
+ eq1 = eqn[subs_index].subs(subs_dict)
+ vib = None
+ for unk in eq1.variables():
+ if unk not in subs_dict:
+ if unk in t_vars:
+ vib = unk
+ break
+ if vib:
+ eq1 = eq1.subs(**{str(vib): t})
+ eq2 = uniq[subs_index]
+ temp_sol = solve(eq1 == eq2, t)
+ if temp_sol:
+ temp_sol = temp_sol[0].rhs()
+ if not temp_sol.is_numeric():
+ subs_dict[vib] = temp_sol
+ subs_index += 1
+ if subs_dict:
+ new_line = []
+ for l in eqn:
+ for key, value in subs_dict.items():
+ l = l.subs(key == value)
+ new_line.append(l)
+ if tuple(new_line) in unique_line:
+ is_unique = False
+ break
+ if is_unique:
+ new_eqn = tuple([eq.subs(convert_tu) for eq in eqn])
+ cdns = line[1]
+ new_cdn = set([cdn.subs(convert_tu) for cdn in cdns])
+ unique_line.add(new_eqn)
+ index_line[index] = tuple([new_eqn, new_cdn])
+ line_comps[index] = [i]
+ index += 1
+ else:
+ match_key = [k for k, v in index_line.items() if v[0] == tuple(new_line)][0]
+ line_comps[match_key].append(i)
+
+ WV = {i: [] for i in range(len(line_comps)) if len(line_comps[i]) > 1}
+ for k in WV:
+ # Calculate direction vector of the line
+ dir_vecs = []
+ line = index_line[k][0]
+ all_var = set()
+ for l in line:
+ for v in l.variables():
+ all_var.add(v)
+ for vpar in all_var:
+ par_drv = []
+ for l in line:
+ par_drv.append(QQ(diff(l, vpar)))
+ par_drv = vector(par_drv)
+ dir_vecs.append(par_drv)
+
+ # Calculate the outgoing normal vector of each surface in the
+ # direction of the line
+ for i in line_comps[k]:
+ surface = self._hypersurface[i][0]
+ drv_vectors = []
+ for vpar in self._vars:
+ temp_vec = []
+ for s in surface:
+ temp_vec.append(QQ(diff(s, vpar)))
+ temp_vec = vector(temp_vec)
+ drv_vectors.append(temp_vec)
+ temp = [t_vars]
+ for vec in drv_vectors:
+ temp.append(vec)
+ vec_matrix = matrix(SR, temp)
+ normal_vec = vec_matrix.det()
+ temp_nor = []
+ for tvar in t_vars:
+ temp_nor.append(QQ(diff(normal_vec, tvar)))
+ normal_vec = vector(temp_nor)
+ normal_vec *= 1/gcd(normal_vec)
+
+ # Calculate the weight vector
+ temp_final = [t_vars]
+ for v in dir_vecs:
+ temp_final.append(v)
+ temp_final.append(normal_vec)
+ vec_matrix = matrix(SR, temp_final)
+ weight_vec = vec_matrix.det()
+ temp_weight = []
+ for tvar in t_vars:
+ temp_weight.append(QQ(diff(weight_vec, tvar)))
+ weight_vec = vector(temp_weight)
+ order = self._hypersurface[i][2]
+ weight_vec *= order
+ WV[k].append(weight_vec)
+
+ balance = False
+ for i in range(1, len(WV[k])+1):
+ for j in combinations(range(len(WV[k])), i):
+ test_vectors = [v for v in WV[k]]
+ for idx in j:
+ test_vectors[idx] = -test_vectors[idx]
+ if sum(test_vectors) == zero_vector(QQ, dim):
+ WV[k] = test_vectors
+ balance = True
+ break
+ if balance:
+ break
+
+ return index_line, line_comps, WV
+
class TropicalSurface(TropicalVariety):
r"""
@@ -641,7 +847,7 @@ def _axes(self):
v_set = v_set.union(temp_v)
axes = [[min(u_set)-1, max(u_set)+1], [min(v_set)-1, max(v_set)+1]]
- # Finding the z-axis
+ # Calculate the z-axis
step = 10
du = (axes[0][1]-axes[0][0]) / step
dv = (axes[1][1]-axes[1][0]) / step
@@ -693,7 +899,7 @@ def _polygon_vertices(self):
sage: p2 = x^2 + x + y + z + R(1)
sage: tv2 = p2.tropical_variety()
- sage: tv2._polygon_vertices()
+ sage: tv2._polygon_vertices() # long time
{0: {(0, 0, 0), (0, 0, 2), (1, 1, 1), (2, 2, 2)},
1: {(0, 0, 0), (0, 2, 0), (1, 1, 1), (2, 2, 2)},
2: {(0, 0, 0), (0, 0, 2), (0, 2, 0), (0, 2, 2)},
@@ -704,9 +910,8 @@ def _polygon_vertices(self):
7: {(-1/2, -1, -1), (-1/2, 2, -1), (0, 0, 0), (0, 2, 0)},
8: {(1, 1, 1), (1, 2, 1), (2, 1, 1), (2, 2, 1)}}
"""
- from sage.sets.real_set import RealSet
from sage.symbolic.relation import solve
- from sage.rings.rational_field import QQ
+ from sage.sets.real_set import RealSet
poly_verts = {i: set() for i in range(self.number_of_components())}
axes = self._axes()
@@ -714,7 +919,7 @@ def _polygon_vertices(self):
vars = self._vars
comps_int = self._components_intersection()
- # Finding the inside vertices
+ # Find the inside vertices (intersection of components)
for index, lines in comps_int.items():
for line in lines:
v = list(line[1])[0].variables()[0]
@@ -793,7 +998,8 @@ def find_edge_vertices(i):
sol1 = solve(point >= axes[i][0], pv)
sol2 = solve(point <= axes[i][1], pv)
is_doublevar = True
- # Finding the edge vertices (those that touch the axes)
+
+ # Find the edge vertices (those that touch the axes)
find_edge_vertices(0) # t1 fixed
find_edge_vertices(1) # t2 fixed
return poly_verts
@@ -832,12 +1038,12 @@ def plot(self, color='random'):
p1 = x + z
sphinx_plot(p1.tropical_variety().plot())
- A tropical surface with multiple cell that exhibit complex and
+ A tropical surface with multiple cells that exhibit complex and
intriguing geometric structures::
sage: p2 = x^2 + x + y + z + R(1)
sage: tv = p2.tropical_variety()
- sage: tv.plot()
+ sage: tv.plot() # long time
Graphics3d Object
.. PLOT::
@@ -895,15 +1101,69 @@ class TropicalCurve(TropicalVariety):
condition ensures that the sum of the outgoing slopes at each vertex
is zero, reflecting the equilibrium.
- EXAMPLES::
+ EXAMPLES:
+
+ We define some tropical curves::
sage: T = TropicalSemiring(QQ, use_min=False)
sage: R. = PolynomialRing(T)
sage: p1 = x + y + R(0)
- sage: tv = p1.tropical_variety(); tv
+ sage: tv1 = p1.tropical_variety(); tv1
Tropical curve of 0*x + 0*y + 0
- sage: tv.components()
+ sage: tv1.components()
[[(t1, t1), [t1 >= 0], 1], [(0, t1), [t1 <= 0], 1], [(t1, 0), [t1 <= 0], 1]]
+ sage: tv1.plot()
+ Graphics object consisting of 3 graphics primitives
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p1 = x + y + R(0)
+ sphinx_plot(p1.tropical_variety().plot())
+
+ ::
+
+ sage: p2 = R(-2)*x^2 + R(-1)*x + R(1/2)*y + R(1/6)
+ sage: tv2 = p2.tropical_variety()
+ sage: tv2.components()
+ [[(1/2*t1 + 5/4, t1), [(-1/3) <= t1], 1],
+ [(13/12, t1), [t1 <= (-1/3)], 2],
+ [(t1, -1/3), [t1 <= (13/12)], 1]]
+ sage: tv2.plot()
+ Graphics object consisting of 4 graphics primitives
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p2 = R(-2)*x**2 + R(-1)*x + R(1/2)*y + R(1/6)
+ sphinx_plot(p2.tropical_variety().plot())
+
+ When two tropical polynomials are multiplied, the tropical curve of
+ the resulting polynomial is the union of the tropical curves of the
+ original polynomials::
+
+ sage: p3 = p1 * p2; p3
+ (-2)*x^3 + (-2)*x^2*y + (-1)*x^2 + 1/2*x*y + 1/2*y^2 + 1/6*x + 1/2*y + 1/6
+ sage: tv3 = p3.tropical_variety()
+ sage: tv3.plot()
+ Graphics object consisting of 11 graphics primitives
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ, use_min=False)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p1 = x + y + R(0)
+ p2 = R(-2)*x**2 + R(-1)*x + R(1/2)*y + R(1/6)
+ p3 = p1 * p2
+ sphinx_plot(p3.tropical_variety().plot())
"""
def _axes(self):
"""
@@ -968,7 +1228,7 @@ def vertices(self):
Return all vertices of ``self``, which is the point where three or
more edges intersect.
- OUTPUT: A set of `(x,y)` points
+ OUTPUT: a set of `(x,y)` points
EXAMPLES::
@@ -983,29 +1243,276 @@ def vertices(self):
"""
if len(self._hypersurface) < 3:
return set()
+ return set(self._vertices_components().keys())
- vertices = set()
- for i, component in enumerate(self._hypersurface):
- parametric_function = component[0]
- var = component[1][0].variables()[0]
- interval = self._parameter_intervals()[i]
- lower = interval[0].lower()
- upper = interval[0].upper()
- if lower != -infinity:
- x = parametric_function[0].subs(**{str(var): lower})
- y = parametric_function[1].subs(**{str(var): lower})
- vertices.add((x, y))
- if upper != infinity:
- x = parametric_function[0].subs(**{str(var): upper})
- y = parametric_function[1].subs(**{str(var): upper})
- vertices.add((x, y))
- return vertices
+ def _vertices_components(self):
+ """
+ Return the index of components adjacent to each vertex of ``self``.
+
+ OUTPUT:
+
+ A dictionary where the keys represent the vertices, and the
+ values are lists of tuples. Each tuple consists of the index
+ of an adjacent edge (component) `e_i` and a number indicating
+ the directionality of `e_i` relative to the vertex. The number
+ is either -1 or 1.
+
+ EXAMPLES::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(0) + x + y + x*y + x^2*y + x*y^2
+ sage: p1.tropical_variety()._vertices_components()
+ {(0, 0): [(0, 1), (1, 1), (2, 1), (3, -1), (4, -1)]}
+ sage: p2 = R(2)*x^2 + x*y + R(2)*y^2 + x + R(-1)*y + R(3)
+ sage: p2.tropical_variety()._vertices_components()
+ {(-2, 0): [(0, -1), (1, 1), (3, 1)],
+ (-1, -3): [(2, -1), (4, 1), (5, 1)],
+ (-1, 0): [(3, -1), (4, -1), (6, 1)],
+ (3, 4): [(6, -1), (7, 1), (8, 1)]}
+ """
+ comp_vert = {}
+ if len(self._hypersurface) >= 3:
+ for i, component in enumerate(self._hypersurface):
+ parametric_function = component[0]
+ v = component[1][0].variables()[0]
+ interval = self._parameter_intervals()[i]
+ lower = interval[0].lower()
+ upper = interval[0].upper()
+ if lower != -infinity:
+ x = parametric_function[0].subs(**{str(v): lower})
+ y = parametric_function[1].subs(**{str(v): lower})
+ if (x,y) not in comp_vert:
+ comp_vert[(x,y)] = [(i, 1)]
+ else:
+ comp_vert[(x,y)].append((i, 1))
+ if upper != infinity:
+ x = parametric_function[0].subs(**{str(v): upper})
+ y = parametric_function[1].subs(**{str(v): upper})
+ if (x,y) not in comp_vert:
+ comp_vert[(x,y)] = [(i, -1)]
+ else:
+ comp_vert[(x,y)].append((i, -1))
+ return comp_vert
+
+ def weight_vectors(self):
+ r"""
+ Return the weight vectors for all vertices of ``self``.
+
+ Weight vectors are a list of vectors associated with each vertex
+ of the curve. Each vector corresponds to an edge emanating from
+ that vertex and points in the direction of the edge.
+
+ Suppose `v` is a vertex adjacent to the edges `e_1, \ldots, e_k`
+ with respective weights `w_1, \ldots, w_k`. Every edge `e_i` is
+ contained in a line (component) defined by an equation. Therefore,
+ there exists a unique integer vector `v_i = (\alpha, \beta)` in
+ the direction of `e_i` such that `\gcd(\alpha, \beta)=1`. Then,
+ each vertex `v` yield the vectors `w_1 v_1, \ldots, w_k v_k`.
+ These vectors will satisfy the following balancing condition:
+ `\sum_{i=1}^k w_i v_i = 0`.
+
+ OUTPUT:
+
+ A dictionary where the keys represent the vertices, and the values
+ are lists of vectors.
+
+ EXAMPLES::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(-2)*x^2 + R(-1)*x + R(1/2)*y + R(1/6)
+ sage: p1.tropical_variety().weight_vectors()
+ {(1, -1/2): [(0, 1), (-1, -2), (1, 1)],
+ (7/6, -1/3): [(-1, -1), (0, 1), (1, 0)]}
+
+ sage: p2 = R(2)*x^2 + x*y + R(2)*y^2 + x + R(-1)*y + R(3)
+ sage: p2.tropical_variety().weight_vectors()
+ {(-2, 0): [(-1, -1), (0, 1), (1, 0)],
+ (-1, -3): [(-1, -1), (0, 1), (1, 0)],
+ (-1, 0): [(-1, 0), (0, -1), (1, 1)],
+ (3, 4): [(-1, -1), (0, 1), (1, 0)]}
+ """
+ from sage.calculus.functional import diff
+ from sage.modules.free_module_element import vector
+ from sage.arith.misc import gcd
+
+ if not self._vertices_components():
+ return {}
+
+ # Calculate the base vector in the direction of each edge
+ temp_vectors = []
+ par = self._hypersurface[0][1][0].variables()[0]
+ for comp in self._hypersurface:
+ dx = diff(comp[0][0], par)
+ dy = diff(comp[0][1], par)
+ multiplier = gcd(QQ(dx), QQ(dy))
+ temp_vectors.append(vector([dx/multiplier, dy/multiplier]))
+
+ # Calculate the weight vectors of each vertex
+ cov = self._vertices_components()
+ result = {}
+ for vertex in cov:
+ vectors = []
+ for comp in cov[vertex]:
+ weight = self._hypersurface[comp[0]][2]
+ vectors.append(weight*comp[1]*temp_vectors[comp[0]])
+ result[vertex] = vectors
+ return result
+
+ def is_smooth(self):
+ r"""
+ Return ``True`` if ``self`` is smooth and ``False`` otherwise.
+
+ Suppose `C` is a tropical curve of degree `d`. A tropical curve
+ `C` is smooth if the dual subdivision of `C` consists of `d^2`
+ triangles each having unit area `1/2`. This is equivalent with
+ `C` having `d^2` vertices. These vertices are necessarily
+ trivalent (has three adjacent edges).
+
+ EXAMPLES::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = x^2 + x + R(1)
+ sage: p1.tropical_variety().is_smooth()
+ False
+ sage: p2 = R(2)*x^2 + x*y + R(2)*y^2 + x + R(-1)*y + R(3)
+ sage: p2.tropical_variety().is_smooth()
+ True
+ """
+ return len(self.vertices()) == self._poly.degree() ** 2
+
+ def is_simple(self):
+ r"""
+ Return ``True`` if ``self`` is simple and ``False`` otherwise.
+
+ A tropical curve `C` is called simple if each vertex is either
+ trivalent or is locally the intersection of two line segments.
+ Equivalently, `C` is simple if the corresponding subdivision
+ consists only of triangles and parallelograms.
+
+ EXAMPLES::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(0) + x + y + x*y + x^2*y + x*y^2
+ sage: p1.tropical_variety().is_simple()
+ False
+ sage: p2 = R(2)*x^2 + x*y + R(2)*y^2 + x + R(-1)*y + R(3)
+ sage: p2.tropical_variety().is_simple()
+ True
+ """
+ vov = self.weight_vectors()
+ for vertex in self.vertices():
+ if len(vov[vertex]) > 4:
+ return False
+ if len(vov[vertex]) == 4:
+ if any(-v not in vov[vertex] for v in vov[vertex]):
+ return False
+ return True
+
+ def genus(self):
+ r"""
+ Return the genus of ``self``.
+
+ Let `t(C)` be the number of trivalent vertices, and let `r(C)` be
+ the number of unbounded edges of `C`. The genus of simple tropical
+ curve `C` is defined by the formula:
+
+ .. MATH::
+
+ g(C) = \frac{1}{2}t(C) - \frac{1}{2}r(C) + 1.
+
+ EXAMPLES::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = x^2 + y^2 + x*y
+ sage: p1.tropical_variety().genus()
+ 1
+ sage: p2 = R(2)*x^2 + x*y + R(2)*y^2 + x + R(-1)*y + R(3)
+ sage: p2.tropical_variety().genus()
+ 0
+
+ TESTS::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(0) + y + x^2*y + x*y^2
+ sage: p1.tropical_variety().genus()
+ Traceback (most recent call last):
+ ...
+ ValueError: Tropical curve of 0*x^2*y + 0*x*y^2 + 0*y + 0 is not simple
+ """
+ if not self.is_simple():
+ raise ValueError(f"{self} is not simple")
+ trivalent = 0 # number of trivalent vertices
+ for vectors in self.weight_vectors().values():
+ if len(vectors) == 3:
+ trivalent += 1
+ unbounded = 0 # number of unbounded edges
+ for component in self._hypersurface:
+ if len(component[1]) == 1:
+ unbounded += 1
+ return trivalent//2 - unbounded//2 + 1
+
+ def contribution(self):
+ r"""
+ Return the contribution of ``self``.
+
+ The contribution of a simple curve `C` is defined as the product
+ of the normalized areas of all triangles in the corresponding
+ dual subdivision. We just multiply positive integers attached to
+ the trivalent vertices. The contribution of a trivalent vertex
+ equals `w_1w_2|\det(v_1,v_2)|`, with `w_i` are the weights of
+ the adjacent edges and `v_i` are their weight vectors. That
+ formula is independent of the choice made because of the
+ balancing condition `w_1v_1+w_2v_2+w_3v_3=0`.
+
+ EXAMPLES::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(2)*x^2 + x*y + R(2)*y^2 + x + R(-1)*y + R(3)
+ sage: p1.tropical_variety().contribution()
+ 1
+ sage: p2 = R(-1/3)*x^2 + R(1)*x*y + R(1)*y^2 + R(-1/3)*x + R(1/3)
+ sage: p2.tropical_variety().contribution()
+ 16
+
+ TESTS::
+
+ sage: T = TropicalSemiring(QQ)
+ sage: R. = PolynomialRing(T)
+ sage: p1 = R(0) + x + x^2*y + x*y^2
+ sage: p1.tropical_variety().contribution()
+ Traceback (most recent call last):
+ ...
+ ValueError: Tropical curve of 0*x^2*y + 0*x*y^2 + 0*x + 0 is not simple
+ """
+ if not self.is_simple():
+ raise ValueError(f"{self} is not simple")
+ result = 1
+ voc = self._vertices_components()
+ vov = self.weight_vectors()
+ for vertex in vov:
+ if len(vov[vertex]) == 3:
+ u1 = vov[vertex][0]
+ u2 = vov[vertex][1]
+ index1 = voc[vertex][0][0]
+ index2 = voc[vertex][1][0]
+ w1 = self._hypersurface[index1][2]
+ w2 = self._hypersurface[index2][2]
+ det = u1[0]*u2[1] - u1[1]*u2[0]
+ result *= w1 * w2 * abs(det)
+ return result
def _parameter_intervals(self):
r"""
Return the intervals of each component's parameter of ``self``.
- OUTPUT: A list of ``RealSet``
+ OUTPUT: a list of ``RealSet``
EXAMPLES::
@@ -1092,9 +1599,10 @@ def plot(self):
Another tropical polynomial with numerous components, resulting
in a more intricate structure::
- sage: p2 = (x^6 + R(4)*x^4*y^2 + R(2)*x^3*y^3 + R(3)*x^2*y^4 + x*y^5
- ....: + R(7)*x^2 + R(5)*x*y + R(3)*y^2 + R(2)*x + y + R(10))
- sage: p2.tropical_variety().plot()
+ sage: p2 = (x^6 + R(4)*x^4*y^2 + R(2)*x^3*y^3 + R(3)*x^2*y^4
+ ....: + x*y^5 + R(7)*x^2 + R(5)*x*y + R(3)*y^2 + R(2)*x
+ ....: + y + R(10))
+ sage: p2.tropical_variety().plot() # long time
Graphics object consisting of 11 graphics primitives
.. PLOT::
@@ -1103,9 +1611,29 @@ def plot(self):
T = TropicalSemiring(QQ)
R = PolynomialRing(T, ('x,y'))
x, y = R.gen(), R.gen(1)
- p2 = x**6 + R(4)*x**4*y**2 + R(2)*x**3*y**3 + R(3)*x**2*y**4 + \
- x*y**5 + R(7)*x**2 + R(5)*x*y + R(3)*y**2 + R(2)*x + y + R(10)
+ p2 = (x**6 + R(4)*x**4*y**2 + R(2)*x**3*y**3 + R(3)*x**2*y**4
+ + x*y**5 + R(7)*x**2 + R(5)*x*y + R(3)*y**2 + R(2)*x
+ + y + R(10))
sphinx_plot(p2.tropical_variety().plot())
+
+ ::
+
+ sage: p3 = (R(8) + R(4)*x + R(2)*y + R(1)*x^2 + x*y + R(1)*y^2
+ ....: + R(2)*x^3 + x^2*y + x*y^2 + R(4)*y^3 + R(8)*x^4
+ ....: + R(4)*x^3*y + x^2*y^2 + R(2)*x*y^3 + y^4)
+ sage: p3.tropical_variety().plot() # long time
+ Graphics object consisting of 23 graphics primitives
+
+ .. PLOT::
+ :width: 300 px
+
+ T = TropicalSemiring(QQ)
+ R = PolynomialRing(T, ('x,y'))
+ x, y = R.gen(), R.gen(1)
+ p3 = (R(8) + R(4)*x + R(2)*y + R(1)*x**2 + x*y + R(1)*y**2
+ + R(2)*x**3 + x**2*y + x*y**2 + R(4)*y**3 + R(8)*x**4
+ + R(4)*x**3*y + x**2*y**2 + R(2)*x*y**3 + y**4)
+ sphinx_plot(p3.tropical_variety().plot())
"""
from sage.plot.plot import plot
from sage.plot.text import text
diff --git a/src/sage/rings/valuation/gauss_valuation.py b/src/sage/rings/valuation/gauss_valuation.py
index ca67b25274e..0e867e0a2f5 100644
--- a/src/sage/rings/valuation/gauss_valuation.py
+++ b/src/sage/rings/valuation/gauss_valuation.py
@@ -97,7 +97,7 @@ def create_key(self, domain, v=None):
if v is None:
v = domain.base_ring().valuation()
- if not v.domain() is domain.base_ring():
+ if v.domain() is not domain.base_ring():
raise ValueError("the domain of v must be the base ring of domain but %r is not defined over %r but over %r" % (v, domain.base_ring(), v.domain()))
if not v.is_discrete_valuation():
raise ValueError("v must be a discrete valuation but %r is not" % (v,))
diff --git a/src/sage/sat/solvers/dimacs.py b/src/sage/sat/solvers/dimacs.py
index 61d5460d432..09ec052b914 100644
--- a/src/sage/sat/solvers/dimacs.py
+++ b/src/sage/sat/solvers/dimacs.py
@@ -28,14 +28,14 @@
# https://www.gnu.org/licenses/
##############################################################################
-import os
+from pathlib import Path
import sys
import subprocess
import shlex
+from time import sleep
from sage.sat.solvers.satsolver import SatSolver
from sage.misc.temporary_file import tmp_filename
-from time import sleep
class DIMACS(SatSolver):
@@ -44,7 +44,7 @@ class DIMACS(SatSolver):
.. NOTE::
- Usually, users won't have to use this class directly but some
+ Usually, users will not have to use this class directly but some
class which inherits from this class.
.. automethod:: __init__
@@ -136,10 +136,9 @@ def __del__(self):
"""
if not self._tail.closed:
self._tail.close()
- if os.path.exists(self._tail.name):
- os.unlink(self._tail.name)
- if self._headname_file_created_during_init and os.path.exists(self._headname):
- os.unlink(self._headname)
+ Path(self._tail.name).unlink(missing_ok=True)
+ if self._headname_file_created_during_init:
+ Path(self._headname).unlink(missing_ok=True)
def var(self, decision=None):
"""
@@ -209,7 +208,7 @@ def add_clause(self, lits):
self.var()
l.append(str(lit))
l.append("0\n")
- self._tail.write(" ".join(l) )
+ self._tail.write(" ".join(l))
self._lit += 1
def write(self, filename=None):
@@ -246,19 +245,19 @@ def write(self, filename=None):
headname = self._headname if filename is None else filename
head = open(headname, "w")
head.truncate(0)
- head.write("p cnf %d %d\n" % (self._var,self._lit))
+ head.write("p cnf %d %d\n" % (self._var, self._lit))
head.close()
tail = self._tail
tail.close()
- head = open(headname,"a")
+ head = open(headname, "a")
tail = open(self._tail.name)
head.write(tail.read())
tail.close()
head.close()
- self._tail = open(self._tail.name,"a")
+ self._tail = open(self._tail.name, "a")
return headname
def clauses(self, filename=None):
@@ -313,7 +312,7 @@ def clauses(self, filename=None):
if lit == 0:
break
clause.append(lit)
- clauses.append( ( tuple(clause), False, None ) )
+ clauses.append((tuple(clause), False, None))
tail.close()
self._tail = open(self._tail.name, "a")
return clauses
@@ -362,20 +361,19 @@ def render_dimacs(clauses, filename, nlits):
1 2 -3 0
"""
- fh = open(filename, "w")
- fh.write("p cnf %d %d\n" % (nlits,len(clauses)))
- for clause in clauses:
- if len(clause) == 3 and clause[1] in (True, False) and clause[2] in (True,False,None):
- lits, is_xor, rhs = clause
- else:
- lits, is_xor, rhs = clause, False, None
-
- if is_xor:
- closing = lits[-1] if rhs else -lits[-1]
- fh.write("x" + " ".join(map(str, lits[:-1])) + " %d 0\n" % closing)
- else:
- fh.write(" ".join(map(str, lits)) + " 0\n")
- fh.close()
+ with open(filename, "w") as fh:
+ fh.write("p cnf %d %d\n" % (nlits, len(clauses)))
+ for clause in clauses:
+ if len(clause) == 3 and clause[1] in (True, False) and clause[2] in (True, False, None):
+ lits, is_xor, rhs = clause
+ else:
+ lits, is_xor, rhs = clause, False, None
+
+ if is_xor:
+ closing = lits[-1] if rhs else -lits[-1]
+ fh.write("x" + " ".join(map(str, lits[:-1])) + " %d 0\n" % closing)
+ else:
+ fh.write(" ".join(map(str, lits)) + " 0\n")
def _run(self):
r"""
diff --git a/src/sage/schemes/affine/affine_space.py b/src/sage/schemes/affine/affine_space.py
index b21ac4a7de6..42aeae0e2f9 100755
--- a/src/sage/schemes/affine/affine_space.py
+++ b/src/sage/schemes/affine/affine_space.py
@@ -109,7 +109,7 @@ def AffineSpace(n, R=None, names=None, ambient_projective_space=None,
...
NameError: variable names passed to AffineSpace conflict with names in ring
"""
- if (isinstance(n, MPolynomialRing_base) or isinstance(n, PolynomialRing_general)) and R is None:
+ if isinstance(n, (MPolynomialRing_base, PolynomialRing_general)) and R is None:
R = n
if names is not None:
# Check for the case that the user provided a variable name
diff --git a/src/sage/schemes/berkovich/berkovich_cp_element.py b/src/sage/schemes/berkovich/berkovich_cp_element.py
index cf232a02a71..8e9ee08d2f3 100755
--- a/src/sage/schemes/berkovich/berkovich_cp_element.py
+++ b/src/sage/schemes/berkovich/berkovich_cp_element.py
@@ -92,7 +92,7 @@ def __init__(self, parent, center, radius=None, power=None, prec=20, space_type=
# if radius is a list or a tuple, this is a type 4 point
if isinstance(radius, (list, tuple)):
if error_check:
- if not (isinstance(center, list) or isinstance(center, tuple)):
+ if not isinstance(center, (list, tuple)):
raise TypeError("center was passed a list but radius was not a list")
if len(radius) != len(center):
raise ValueError("the same number of centers and radii "
diff --git a/src/sage/schemes/curves/projective_curve.py b/src/sage/schemes/curves/projective_curve.py
index 77c94b61c04..0729c5a98ad 100755
--- a/src/sage/schemes/curves/projective_curve.py
+++ b/src/sage/schemes/curves/projective_curve.py
@@ -2521,7 +2521,6 @@ def _map_from_function_field(self):
sage: C.function(C._map_from_function_field(f)) == f
True
"""
- F = self._function_field
S = self.ambient_space().coordinate_ring()
phi = self._open_affine._nonsingular_model[2]
i = self._open_affine_index
diff --git a/src/sage/schemes/elliptic_curves/cm.py b/src/sage/schemes/elliptic_curves/cm.py
index 6760719e789..e02a117ee3c 100755
--- a/src/sage/schemes/elliptic_curves/cm.py
+++ b/src/sage/schemes/elliptic_curves/cm.py
@@ -288,7 +288,7 @@ def is_HCP(f, check_monic_irreducible=True):
return D if f == hilbert_class_polynomial(D) else zero
-def OrderClassNumber(D0,h0,f):
+def OrderClassNumber(D0, h0, f):
r"""
Return the class number h(f**2 * D0), given h(D0)=h0.
diff --git a/src/sage/schemes/elliptic_curves/constructor.py b/src/sage/schemes/elliptic_curves/constructor.py
index 831ee47e280..5a97d2eda9b 100755
--- a/src/sage/schemes/elliptic_curves/constructor.py
+++ b/src/sage/schemes/elliptic_curves/constructor.py
@@ -1271,7 +1271,7 @@ def EllipticCurve_from_cubic(F, P=None, morphism=True):
C, E, fwd_defining_poly, fwd_post, inv_defining_poly, inv_post)
-def tangent_at_smooth_point(C,P):
+def tangent_at_smooth_point(C, P):
r"""Return the tangent at the smooth point `P` of projective curve `C`.
INPUT:
diff --git a/src/sage/schemes/elliptic_curves/ec_database.py b/src/sage/schemes/elliptic_curves/ec_database.py
index 7d418feb437..263e4ba930c 100755
--- a/src/sage/schemes/elliptic_curves/ec_database.py
+++ b/src/sage/schemes/elliptic_curves/ec_database.py
@@ -67,7 +67,7 @@
which enable easy looping through the Cremona elliptic curve database.
"""
-import os
+from pathlib import Path
from ast import literal_eval
from .constructor import EllipticCurve
@@ -132,10 +132,9 @@ def rank(self, rank, tors=0, n=10, labels=False):
"""
from sage.features.databases import DatabaseEllcurves
db = DatabaseEllcurves()
- data = os.path.join(os.path.dirname(db.absolute_filename()),
- f'rank{rank}')
+ data = Path(db.absolute_filename()).parent / f'rank{rank}'
try:
- f = open(data)
+ f = data.open()
except OSError:
return []
v = []
diff --git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
index ba752e11c10..f25fbc20a7d 100755
--- a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
+++ b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
@@ -3580,10 +3580,6 @@ def compute_isogeny_stark(E1, E2, ell):
return qn
-from sage.misc.superseded import deprecated_function_alias
-compute_isogeny_starks = deprecated_function_alias(34871, compute_isogeny_stark)
-
-
def compute_isogeny_kernel_polynomial(E1, E2, ell, algorithm=None):
r"""
Return the kernel polynomial of a cyclic, separable, normalized
@@ -3650,11 +3646,6 @@ def compute_isogeny_kernel_polynomial(E1, E2, ell, algorithm=None):
sage: poly.factor()
(x + 10) * (x + 12) * (x + 16)
"""
- if algorithm == 'starks':
- from sage.misc.superseded import deprecation
- deprecation(34871, 'The "starks" algorithm is being renamed to "stark".')
- algorithm = 'stark'
-
if algorithm is None:
char = E1.base_ring().characteristic()
if char != 0 and char < 4*ell + 4:
diff --git a/src/sage/schemes/elliptic_curves/ell_field.py b/src/sage/schemes/elliptic_curves/ell_field.py
index a63dbf57809..4f694e0f252 100755
--- a/src/sage/schemes/elliptic_curves/ell_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_field.py
@@ -4,13 +4,13 @@
This module defines the class :class:`EllipticCurve_field`, based on
:class:`EllipticCurve_generic`, for elliptic curves over general fields.
"""
-#*****************************************************************************
+# *****************************************************************************
# Copyright (C) 2006 William Stein
#
# Distributed under the terms of the GNU General Public License (GPL)
#
# http://www.gnu.org/licenses/
-#*****************************************************************************
+# *****************************************************************************
import sage.rings.abc
from sage.categories.number_fields import NumberFields
@@ -1461,7 +1461,7 @@ def isogeny(self, kernel, codomain=None, degree=None, model=None, check=True, al
if kernel is not None:
# Check for multiple points or point of known order
- kernel_is_list = isinstance(kernel, list) or isinstance(kernel, tuple)
+ kernel_is_list = isinstance(kernel, (list, tuple))
if kernel_is_list and kernel[0] in self and len(kernel) > 1:
from sage.schemes.elliptic_curves.hom_composite import EllipticCurveHom_composite
return EllipticCurveHom_composite(self, kernel, codomain=codomain, model=model, velu_sqrt_bound=velu_sqrt_bound)
@@ -1733,9 +1733,9 @@ def kernel_polynomial_from_divisor(self, f, l, *, check=True):
def isogenies_prime_degree(self, l=None, max_l=31):
"""
- Return a list of all separable isogenies of given prime degree(s)
- with domain equal to ``self``, which are defined over the base
- field of ``self``.
+ Return a list of all separable isogenies (up to post-composition with
+ isomorphisms) of given prime degree(s) with domain equal to ``self``,
+ which are defined over the base field of ``self``.
INPUT:
@@ -2017,6 +2017,177 @@ def isogenies_prime_degree(self, l=None, max_l=31):
from .isogeny_small_degree import isogenies_prime_degree
return sum([isogenies_prime_degree(self, d) for d in L], [])
+ def isogenies_degree(self, n, *, _intermediate=False):
+ r"""
+ Return an iterator of all separable isogenies of given degree (up to
+ post-composition with isomorphisms) with domain equal to ``self``,
+ which are defined over the base field of ``self``.
+
+ ALGORITHM:
+
+ The prime factors `p` of `n` are processed one by one in decreasing
+ order, each time "branching" out by taking isogenies of degree `p`.
+
+ INPUT:
+
+ - ``n`` -- integer, or its
+ :class:`~sage.structure.factorization.Factorization`.
+
+ - ``_intermediate`` -- (bool, default: False): If set, the isogenies
+ from this curve to the curves traversed within the depth-first search
+ are returned. This is for internal use only.
+
+ EXAMPLES::
+
+ sage: E = EllipticCurve(GF(11), [1, 1])
+ sage: list(E.isogenies_degree(23 * 19))
+ [Composite morphism of degree 437 = 23*19:
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 11
+ To: Elliptic Curve defined by y^2 = x^3 + 8*x + 7 over Finite Field of size 11,
+ Composite morphism of degree 437 = 23*19:
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 11
+ To: Elliptic Curve defined by y^2 = x^3 + 6*x + 2 over Finite Field of size 11,
+ Composite morphism of degree 437 = 23*19:
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 11
+ To: Elliptic Curve defined by y^2 = x^3 + 2*x + 6 over Finite Field of size 11,
+ Composite morphism of degree 437 = 23*19:
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 11
+ To: Elliptic Curve defined by y^2 = x^3 + 7*x + 8 over Finite Field of size 11]
+
+ ::
+
+ sage: E = EllipticCurve(GF(next_prime(2^32)), j=1728)
+ sage: sorted([phi.codomain().j_invariant() for phi in E.isogenies_degree(11 * 17 * 19^2)])
+ [1348157279, 1348157279, 1713365879, 1713365879, 3153894341, 3153894341,
+ 3225140514, 3225140514, 3673460198, 3673460198, 3994312564, 3994312564]
+ sage: it = E.isogenies_degree(2^2); it
+
+ sage: all(phi.degree() == 2^2 for phi in it)
+ True
+
+ We verify that the isogenies outputted are distinct. Note that we do
+ not use a ``set`` or any hash-based data structure, as hashing
+ isogenies is slow::
+
+ sage: import itertools
+ sage: all_distinct = lambda arr: all(x != y for x, y in itertools.combinations(arr, 2))
+ sage: K. = GF((19, 2))
+ sage: E = EllipticCurve(K, [11*z+5, 14*z+3])
+ sage: S = list(E.isogenies_degree(5^2)); len(S), all_distinct(S)
+ (3, True)
+ sage: S = list(E.isogenies_degree(5^2*11)); len(S), all_distinct(S)
+ (6, True)
+ sage: S = list(E.isogenies_degree(5^2*11^4)); len(S), all_distinct(S) # long time (2s)
+ (15, True)
+
+ For curves over number fields, the number of distinct isogenies will usually be small::
+
+ sage: E = EllipticCurve(QQ, [0, 1, 0, -2, 0])
+ sage: len(list(E.isogenies_degree(2**1)))
+ 3
+ sage: len(list(E.isogenies_degree(2**5)))
+ 3
+ sage: len(list(E.isogenies_degree(2**8))) # long time (8s)
+ 1
+
+ ::
+
+ sage: pol = PolynomialRing(QQ, 'x')([529, 782, 1])
+ sage: L. = NumberField(pol)
+ sage: E = EllipticCurve(j=-7072/1127*a + 2016)
+ sage: len(list(E.isogenies_degree(2)))
+ 3
+ sage: len(list(E.isogenies_degree(2**5)))
+ 3
+
+ ::
+
+ sage: pol = PolynomialRing(QQ, 'x')([1, -3, 5, -5, 5, -3, 1])
+ sage: L. = NumberField(pol)
+ sage: js = hilbert_class_polynomial(-23).roots(L, multiplicities=False)
+ sage: E = EllipticCurve(j=choice(js))
+ sage: len(list(E.isogenies_degree(2^3))) # long time (9s)
+ 10
+
+ TESTS::
+
+ sage: E = EllipticCurve(GF(next_prime(2^32)), j=1728)
+ sage: list(E.isogenies_degree(2^2, _intermediate=True))
+ [Elliptic-curve endomorphism of Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 4294967311
+ Via: (u,r,s,t) = (1, 0, 0, 0),
+ Isogeny of degree 2 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 4294967311
+ to Elliptic Curve defined by y^2 = x^3 + 4294967307*x over Finite Field of size 4294967311,
+ Composite morphism of degree 4 = 2^2:
+ From: Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 4294967311
+ To: Elliptic Curve defined by y^2 = x^3 + 16*x over Finite Field of size 4294967311,
+ Composite morphism of degree 4 = 2^2:
+ From: Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 4294967311
+ To: Elliptic Curve defined by y^2 = x^3 + 4294967267*x + 4294967199 over Finite Field of size 4294967311,
+ Composite morphism of degree 4 = 2^2:
+ From: Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 4294967311
+ To: Elliptic Curve defined by y^2 = x^3 + 4294967267*x + 112 over Finite Field of size 4294967311]
+ sage: all(isog.domain() is E for isog in _)
+ True
+ sage: all(isog.domain() is E for isog in E.isogenies_degree(2^5, _intermediate=True))
+ True
+
+ The following curve has no degree-`53` isogenies, so the code is quick::
+
+ sage: E = EllipticCurve(GF(103), [3, 5])
+ sage: E.isogenies_prime_degree(53)
+ []
+ sage: list(E.isogenies_degree(product(prime_range(3, 53)) * 53))
+ []
+ """
+ def compute_key(phi):
+ """
+ Data used in ``hash(phi)`` excluding the expensive `.kernel_polynomial`.
+ """
+ return (phi.domain(), phi.codomain(), phi.degree(), phi.scaling_factor())
+
+ from sage.schemes.elliptic_curves.weierstrass_morphism import identity_morphism
+ from sage.structure.factorization import Factorization
+
+ if not isinstance(n, Factorization):
+ n = Integer(n).factor()
+
+ if n.value() == 1:
+ yield identity_morphism(self)
+ return
+
+ p = n[-1][0]
+ seen = {}
+
+ def insert_seen(phi) -> bool:
+ key = compute_key(phi)
+ if key not in seen:
+ seen[key] = [phi]
+ return True
+ for psi in seen[key]:
+ if psi == phi:
+ return False
+ seen[key].append(phi)
+ return True
+
+ if _intermediate:
+ yield identity_morphism(self)
+
+ # isog: self -> E1
+ for isog in self.isogenies_prime_degree(p):
+ if _intermediate:
+ if insert_seen(isog):
+ # self -> E1
+ yield isog
+
+ Eiso = isog.codomain()
+ # next_isog : E1 -> E2
+ for next_isog in Eiso.isogenies_degree(n / p, _intermediate=_intermediate):
+ # psi: self -> E2
+ psi = next_isog * isog
+ if insert_seen(psi):
+ # self -> E2
+ yield psi
+
def is_isogenous(self, other, field=None):
"""
Return whether or not ``self`` is isogenous to ``other``.
diff --git a/src/sage/schemes/elliptic_curves/ell_generic.py b/src/sage/schemes/elliptic_curves/ell_generic.py
index 6ca3f1fdb46..6f2532e2b3b 100755
--- a/src/sage/schemes/elliptic_curves/ell_generic.py
+++ b/src/sage/schemes/elliptic_curves/ell_generic.py
@@ -2511,121 +2511,58 @@ def multiplication_by_m(self, m, x_only=False):
return mx, my
- def multiplication_by_m_isogeny(self, m):
+ def scalar_multiplication(self, m):
r"""
- Return the ``EllipticCurveIsogeny`` object associated to the
- multiplication-by-`m` map on this elliptic curve.
-
- The resulting isogeny will
- have the associated rational maps (i.e., those returned by
- :meth:`multiplication_by_m`) already computed.
-
- NOTE: This function is currently *much* slower than the
- result of ``self.multiplication_by_m()``, because
- constructing an isogeny precomputes a significant amount
- of information. See :issue:`7368` and :issue:`8014` for the
- status of improving this situation.
-
- INPUT:
-
- - ``m`` -- nonzero integer
+ Return the scalar-multiplication map `[m]` on this elliptic
+ curve as a
+ :class:`sage.schemes.elliptic_curves.hom_scalar.EllipticCurveHom_scalar`
+ object.
- OUTPUT:
+ EXAMPLES::
- - An ``EllipticCurveIsogeny`` object associated to the
- multiplication-by-`m` map on this elliptic curve.
+ sage: E = EllipticCurve('77a1')
+ sage: m = E.scalar_multiplication(-7); m
+ Scalar-multiplication endomorphism [-7]
+ of Elliptic Curve defined by y^2 + y = x^3 + 2*x over Rational Field
+ sage: m.degree()
+ 49
+ sage: P = E(2,3)
+ sage: m(P)
+ (-26/225 : -2132/3375 : 1)
+ sage: m.rational_maps() == E.multiplication_by_m(-7)
+ True
- EXAMPLES::
+ ::
sage: E = EllipticCurve('11a1')
- sage: E.multiplication_by_m_isogeny(7)
- doctest:warning ... DeprecationWarning: ...
- Isogeny of degree 49
- from Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20
- over Rational Field
- to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20
- over Rational Field
+ sage: E.scalar_multiplication(7)
+ Scalar-multiplication endomorphism [7]
+ of Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field
TESTS:
Tests for :issue:`32490`::
sage: E = EllipticCurve(QQbar, [1,0]) # needs sage.rings.number_field
- sage: E.multiplication_by_m_isogeny(1).rational_maps() # needs sage.rings.number_field
+ sage: E.scalar_multiplication(1).rational_maps() # needs sage.rings.number_field
(x, y)
::
sage: E = EllipticCurve_from_j(GF(31337).random_element()) # needs sage.rings.finite_rings
sage: P = E.random_point() # needs sage.rings.finite_rings
- sage: [E.multiplication_by_m_isogeny(m)(P) == m*P for m in (1,2,3,5,7,9)] # needs sage.rings.finite_rings
+ sage: [E.scalar_multiplication(m)(P) == m*P for m in (1,2,3,5,7,9)] # needs sage.rings.finite_rings
[True, True, True, True, True, True]
::
sage: E = EllipticCurve('99.a1')
- sage: E.multiplication_by_m_isogeny(5)
- Isogeny of degree 25 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x^2 - 17*x + 30 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - x^2 - 17*x + 30 over Rational Field
- sage: E.multiplication_by_m_isogeny(2).rational_maps()
- ((1/4*x^4 + 33/4*x^2 - 121/2*x + 363/4)/(x^3 - 3/4*x^2 - 33/2*x + 121/4),
- (-1/256*x^7 + 1/128*x^6*y - 7/256*x^6 - 3/256*x^5*y - 105/256*x^5 - 165/256*x^4*y + 1255/256*x^4 + 605/128*x^3*y - 473/64*x^3 - 1815/128*x^2*y - 10527/256*x^2 + 2541/128*x*y + 4477/32*x - 1331/128*y - 30613/256)/(1/16*x^6 - 3/32*x^5 - 519/256*x^4 + 341/64*x^3 + 1815/128*x^2 - 3993/64*x + 14641/256))
-
- Test for :issue:`34727`::
-
- sage: E = EllipticCurve([5,5])
- sage: E.multiplication_by_m_isogeny(-1)
- Isogeny of degree 1
- from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Rational Field
- to Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Rational Field
- sage: E.multiplication_by_m_isogeny(-2)
- Isogeny of degree 4
- from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Rational Field
- to Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Rational Field
- sage: E.multiplication_by_m_isogeny(-3)
- Isogeny of degree 9
- from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Rational Field
- to Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Rational Field
- sage: mu = E.multiplication_by_m_isogeny
- sage: all(mu(-m) == -mu(m) for m in (1,2,3,5,7))
- True
- """
- from sage.misc.superseded import deprecation
- deprecation(32826, 'The .multiplication_by_m_isogeny() method is superseded by .scalar_multiplication().')
-
- mx, my = self.multiplication_by_m(m)
-
- torsion_poly = self.torsion_polynomial(abs(m)).monic()
- phi = self.isogeny(torsion_poly, codomain=self)
- phi._EllipticCurveIsogeny__initialize_rational_maps(precomputed_maps=(mx, my))
-
- # trac 32490: using codomain=self can give a wrong isomorphism
- for aut in self.automorphisms():
- psi = aut * phi
- if psi.rational_maps() == (mx, my):
- return psi
-
- assert False, 'bug in multiplication_by_m_isogeny()'
-
- def scalar_multiplication(self, m):
- r"""
- Return the scalar-multiplication map `[m]` on this elliptic
- curve as a
- :class:`sage.schemes.elliptic_curves.hom_scalar.EllipticCurveHom_scalar`
- object.
-
- EXAMPLES::
-
- sage: E = EllipticCurve('77a1')
- sage: m = E.scalar_multiplication(-7); m
- Scalar-multiplication endomorphism [-7]
- of Elliptic Curve defined by y^2 + y = x^3 + 2*x over Rational Field
- sage: m.degree()
- 49
- sage: P = E(2,3)
- sage: m(P)
- (-26/225 : -2132/3375 : 1)
- sage: m.rational_maps() == E.multiplication_by_m(-7)
- True
+ sage: E.scalar_multiplication(5)
+ Scalar-multiplication endomorphism [5]
+ of Elliptic Curve defined by y^2 + x*y + y = x^3 - x^2 - 17*x + 30 over Rational Field
+ sage: E.scalar_multiplication(2).rational_maps()
+ ((x^4 + 33*x^2 - 242*x + 363)/(4*x^3 - 3*x^2 - 66*x + 121),
+ (-4*x^7 + 8*x^6*y - 28*x^6 - 12*x^5*y - 420*x^5 - 660*x^4*y + 5020*x^4 + 4840*x^3*y - 7568*x^3 - 14520*x^2*y - 42108*x^2 + 20328*x*y + 143264*x - 10648*y - 122452)/(64*x^6 - 96*x^5 - 2076*x^4 + 5456*x^3 + 14520*x^2 - 63888*x + 58564))
"""
from sage.schemes.elliptic_curves.hom_scalar import EllipticCurveHom_scalar
return EllipticCurveHom_scalar(self, m)
diff --git a/src/sage/schemes/elliptic_curves/ell_number_field.py b/src/sage/schemes/elliptic_curves/ell_number_field.py
index eea2e5cc243..8af221880b6 100755
--- a/src/sage/schemes/elliptic_curves/ell_number_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_number_field.py
@@ -541,7 +541,7 @@ def is_local_integral_model(self, *P):
return all(self.is_local_integral_model(x) for x in P)
return all(x.valuation(P) >= 0 for x in self.ainvs())
- def local_integral_model(self,*P):
+ def local_integral_model(self, *P):
r"""
Return a model of ``self`` which is integral at the prime ideal `P`.
@@ -1898,7 +1898,7 @@ def global_minimal_model(self, proof=None, semi_global=False):
raise ValueError("%s has no global minimal model! For a semi-global minimal model use semi_global=True" % self)
- def reduction(self,place):
+ def reduction(self, place):
r"""
Return the reduction of the elliptic curve at a place of good reduction.
diff --git a/src/sage/schemes/elliptic_curves/ell_point.py b/src/sage/schemes/elliptic_curves/ell_point.py
index d9b7189552e..6aa63fc6370 100755
--- a/src/sage/schemes/elliptic_curves/ell_point.py
+++ b/src/sage/schemes/elliptic_curves/ell_point.py
@@ -142,7 +142,6 @@
try:
from sage.libs.pari.all import pari, PariError
- from cypari2.pari_instance import prec_words_to_bits
except ImportError:
PariError = ()
@@ -2558,6 +2557,101 @@ def has_infinite_order(self):
return False
return self.order() == oo
+ def _has_order_at_least(self, bound, *, attempts=999):
+ r"""
+ Return ``True`` if this point definitely has order at least ``bound``
+ on the elliptic curve, ``False`` if the point has smaller order, and
+ ``None`` if the result of this test is inconclusive.
+
+ This method can be much faster than calling :meth:`has_infinite_order`
+ if all that is needed is a lower bound on the order.
+
+ ALGORITHM: Compute the order of the point modulo various small primes
+ and combine that information using CRT.
+
+ EXAMPLES::
+
+ sage: E = EllipticCurve('11a3')
+ sage: P = next(filter(bool, E.torsion_points()))
+ sage: P._has_order_at_least(5)
+ True
+ sage: P._has_order_at_least(6)
+ sage: P.order()
+ 5
+ sage: Q = E.lift_x(10^42, extend=True)
+ sage: Q._has_order_at_least(10^100)
+ True
+
+ ::
+
+ sage: x = polygen(ZZ)
+ sage: K. = NumberField(x^2 - x + 2)
+ sage: E = EllipticCurve([1, a-1, a+1, -2*a-2, -5*a+7]) # 2.0.7.1-268.3-b1
+ sage: P = next(filter(bool, E.torsion_points()))
+ sage: P._has_order_at_least(11)
+ True
+ sage: P._has_order_at_least(12)
+ False
+ sage: P.order()
+ 11
+ sage: Q = E.lift_x(123*a + 456, extend=True)
+ sage: Q._has_order_at_least(10^100)
+ True
+ """
+ n = getattr(self, '_order', None)
+ if n is not None:
+ return n >= bound
+
+ from sage.sets.primes import Primes
+ from sage.rings.finite_rings.finite_field_constructor import GF
+ field_deg = self.curve().base_field().absolute_degree()
+ if field_deg > 1:
+ K = self.curve().base_field().absolute_field('T')
+ _, iso = K.structure()
+ E = self.curve().change_ring(iso)
+ P = self.change_ring(iso)
+ poly = lambda elt: elt.polynomial()
+ if field_deg == 2:
+ # Kamienny-Kenku-Momose
+ bound = min(bound, 18 + 1)
+ else:
+ K, E, P = QQ, self.curve(), self
+ poly = lambda elt: QQ['x'](elt)
+ # Mazur / Ogg's torsion conjecture
+ # Torsion points can only have order <= 12, so order of > 12 -> infinite order
+ bound = min(bound, 12 + 1)
+ assert P.curve() is E
+
+ n = ZZ.one()
+ no_progress = 0
+ for p in Primes():
+ try:
+ f,_ = K.defining_polynomial().change_ring(GF(p)).factor()[0]
+ except ZeroDivisionError:
+ continue
+ F = GF(p).extension(f,'t')
+ red = lambda elt: F(f.parent()(poly(elt)).change_ring(GF(p)) % f)
+
+ try:
+ Ered = E.change_ring(red)
+ Pred = Ered(*map(red, P))
+ except (ZeroDivisionError, ArithmeticError):
+ continue
+
+ o = Pred.order()
+ if not o.divides(n):
+ n = n.lcm(o)
+ no_progress = 0
+ else:
+ no_progress += 1
+
+ if n >= bound:
+ return True
+ if no_progress >= attempts:
+ return
+
+ assert False # unreachable unless there are only finitely many primes
+
def is_on_identity_component(self, embedding=None):
r"""
Return ``True`` iff this point is on the identity component of
@@ -3712,7 +3806,7 @@ def elliptic_logarithm(self, embedding=None, precision=100,
E_pari = E_work.pari_curve()
log_pari = E_pari.ellpointtoz(pt_pari, precision=working_prec)
- while prec_words_to_bits(log_pari.precision()) < precision:
+ while log_pari.bitprecision() < precision:
# result is not precise enough, re-compute with double
# precision. if the base field is not QQ, this
# requires modifying the precision of the embedding,
@@ -4169,7 +4263,7 @@ def discrete_log(self, Q):
' methods in Sage uniform. Please update your code.')
return Q.log(self)
- def padic_elliptic_logarithm(self,Q, p):
+ def padic_elliptic_logarithm(self, Q, p):
r"""
Return the discrete logarithm of `Q` to base `P` = ``self``,
that is, an integer `x` such that `xP = Q` only for anomalous curves.
diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py
index d00187d49a2..2f2868d37ca 100755
--- a/src/sage/schemes/elliptic_curves/ell_rational_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py
@@ -203,6 +203,9 @@ def __init__(self, ainvs, **kwds):
self.__regulator = (kwds.pop('regulator'), True)
if 'torsion_order' in kwds:
self._set_torsion_order(kwds.pop('torsion_order'))
+ if 'db_extra' in kwds:
+ # optional data provided by database_cremona_ellcurve
+ self.db_extra = kwds.pop('db_extra')
if kwds:
raise TypeError(f"unexpected keyword arguments: {kwds}")
@@ -4116,7 +4119,7 @@ def cremona_label(self, space=False):
label = cremona_label
- def reduction(self,p):
+ def reduction(self, p):
r"""
Return the reduction of the elliptic curve at a prime of good
reduction.
@@ -5945,7 +5948,7 @@ def antilogarithm(self, z, max_denominator=None):
except TypeError:
raise ValueError("approximated point not on the curve")
- def integral_x_coords_in_interval(self,xmin,xmax):
+ def integral_x_coords_in_interval(self, xmin, xmax):
r"""
Return the set of integers `x` with `xmin\le x\le xmax` which are
`x`-coordinates of rational points on this curve.
@@ -6136,7 +6139,7 @@ def integral_points(self, mw_base='auto', both_signs=False, verbose=False):
# INTERNAL FUNCTIONS ################################################
############################## begin ################################
- def point_preprocessing(free,tor):
+ def point_preprocessing(free, tor):
r"""
Transform the mw_basis ``free`` into a `\ZZ`-basis for
`E(\QQ)\cap E^0(`\RR)`. If there is a torsion point on the
diff --git a/src/sage/schemes/elliptic_curves/ell_wp.py b/src/sage/schemes/elliptic_curves/ell_wp.py
index 5c8e7930830..622f8fed5f3 100755
--- a/src/sage/schemes/elliptic_curves/ell_wp.py
+++ b/src/sage/schemes/elliptic_curves/ell_wp.py
@@ -167,7 +167,7 @@ def weierstrass_p(E, prec=20, algorithm=None):
return wp(z*u) * u**2
-def compute_wp_pari(E,prec):
+def compute_wp_pari(E, prec):
r"""
Compute the Weierstrass `\wp`-function with the ``ellwp`` function
from PARI.
diff --git a/src/sage/schemes/elliptic_curves/gal_reps.py b/src/sage/schemes/elliptic_curves/gal_reps.py
index b9360acdf56..8f0e0ed9a60 100755
--- a/src/sage/schemes/elliptic_curves/gal_reps.py
+++ b/src/sage/schemes/elliptic_curves/gal_reps.py
@@ -203,7 +203,7 @@ def __repr__(self):
"""
return "Compatible family of Galois representations associated to the " + repr(self._E)
- def __eq__(self,other):
+ def __eq__(self, other):
r"""
Compare two Galois representations.
We define tho compatible families of representations
@@ -1081,7 +1081,7 @@ def image_type(self, p):
self.__image_type[p] = "The image could not be determined. Sorry."
return self.__image_type[p]
- def image_classes(self,p,bound=10000):
+ def image_classes(self, p, bound=10000):
r"""
This function returns, given the representation `\rho`
a list of `p` values that add up to 1, representing the
@@ -1228,7 +1228,7 @@ def image_classes(self,p,bound=10000):
# ell-adic reps
- def is_unramified(self,p,ell):
+ def is_unramified(self, p, ell):
r"""
Return true if the Galois representation to `GL_2(\ZZ_p)` is unramified at `\ell`, i.e.
if the inertia group at a place above `\ell` in `\text{Gal}(\bar\QQ/\QQ)` has trivial image in
@@ -1262,7 +1262,7 @@ def is_unramified(self,p,ell):
raise ValueError('ell (=%s) must be prime' % ell)
return (ell != p) and self._E.has_good_reduction(ell)
- def is_unipotent(self,p,ell):
+ def is_unipotent(self, p, ell):
r"""
Return true if the Galois representation to `GL_2(\ZZ_p)` is unipotent at `\ell\neq p`, i.e.
if the inertia group at a place above `\ell` in `\text{Gal}(\bar\QQ/\QQ)` maps into a Borel subgroup.
@@ -1301,7 +1301,7 @@ def is_unipotent(self,p,ell):
raise ValueError("unipotent is not defined for l = p, use semistable instead.")
return not self._E.has_additive_reduction(ell)
- def is_quasi_unipotent(self,p,ell):
+ def is_quasi_unipotent(self, p, ell):
r"""
Return true if the Galois representation to `GL_2(\ZZ_p)` is quasi-unipotent at `\ell\neq p`, i.e. if there is a finite extension `K/\QQ` such that the inertia group at a place above `\ell` in `\text{Gal}(\bar\QQ/K)` maps into a Borel subgroup.
@@ -1330,7 +1330,7 @@ def is_quasi_unipotent(self,p,ell):
# p-adic reps
- def is_ordinary(self,p):
+ def is_ordinary(self, p):
r"""
Return true if the `p`-adic Galois representation to `GL_2(\ZZ_p)` is ordinary, i.e.
if the image of the decomposition group in `\text{Gal}(\bar\QQ/\QQ)` above he prime `p` maps into
@@ -1360,7 +1360,7 @@ def is_ordinary(self,p):
raise NotImplementedError('is_ordinary is only implemented for semi-stable representations')
return self._E.has_multiplicative_reduction(p) or (self._E.has_good_reduction(p) and self._E.ap(p) % p != 0)
- def is_crystalline(self,p):
+ def is_crystalline(self, p):
r"""
Return true is the `p`-adic Galois representation to `GL_2(\ZZ_p)` is crystalline.
@@ -1384,7 +1384,7 @@ def is_crystalline(self,p):
raise ValueError('p (=%s) must be prime' % p)
return self._E.has_good_reduction(p)
- def is_potentially_crystalline(self,p):
+ def is_potentially_crystalline(self, p):
r"""
Return true is the `p`-adic Galois representation to `GL_2(\ZZ_p)` is potentially crystalline, i.e.
if there is a finite extension `K/\QQ_p` such that the `p`-adic representation becomes crystalline.
@@ -1409,7 +1409,7 @@ def is_potentially_crystalline(self,p):
raise ValueError('p (=%s) must be prime' % p)
return self._E.j_invariant().valuation(p) >= 0
- def is_semistable(self,p):
+ def is_semistable(self, p):
r"""
Return true if the `p`-adic Galois representation to `GL_2(\ZZ_p)` is semistable.
@@ -1435,7 +1435,7 @@ def is_semistable(self,p):
raise ValueError('p (=%s) must be prime' % p)
return not self._E.has_additive_reduction(p)
- def is_potentially_semistable(self,p):
+ def is_potentially_semistable(self, p):
r"""
Return true if the `p`-adic Galois representation to `GL_2(\ZZ_p)` is potentially semistable.
diff --git a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py
index a4eb66a6df7..7824893b05f 100755
--- a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py
+++ b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py
@@ -132,7 +132,7 @@ def __repr__(self):
else:
return "Compatible family of Galois representations associated to the " + repr(self.E)
- def __eq__(self,other):
+ def __eq__(self, other):
r"""
Compare two Galois representations.
@@ -1191,7 +1191,7 @@ def Billerey_P_l(E, l):
return P
-def Billerey_B_l(E,l,B=0):
+def Billerey_B_l(E, l, B=0):
r"""
Return Billerey's `B_l`, adapted from the definition in [Bil2011]_, after (9).
diff --git a/src/sage/schemes/elliptic_curves/heegner.py b/src/sage/schemes/elliptic_curves/heegner.py
index 1bff085023c..f0a7087d7ea 100755
--- a/src/sage/schemes/elliptic_curves/heegner.py
+++ b/src/sage/schemes/elliptic_curves/heegner.py
@@ -1177,7 +1177,7 @@ def __getitem__(self, i):
"""
EXAMPLES::
- sage: E = EllipticCurve('389a'); F= E.heegner_point(-7,5).ring_class_field()
+ sage: E = EllipticCurve('389a'); F = E.heegner_point(-7,5).ring_class_field()
sage: G = F.galois_group(F.quadratic_field())
sage: G[0]
Class field automorphism defined by x^2 + x*y + 44*y^2
@@ -1666,7 +1666,7 @@ def ideal(self):
EXAMPLES::
- sage: E = EllipticCurve('389a'); F= E.heegner_point(-20,3).ring_class_field()
+ sage: E = EllipticCurve('389a'); F = E.heegner_point(-20,3).ring_class_field()
sage: G = F.galois_group(F.quadratic_field())
sage: G[1].ideal()
Fractional ideal (2, 1/2*sqrt_minus_20 + 1)
@@ -4283,7 +4283,7 @@ def plot(self, prec=53, *args, **kwds):
if not P:
# point at infinity
return Graphics()
- return point((P[0].real(), P[1].real()),*args, **kwds)
+ return point((P[0].real(), P[1].real()), *args, **kwds)
else:
raise NotImplementedError
diff --git a/src/sage/schemes/elliptic_curves/hom.py b/src/sage/schemes/elliptic_curves/hom.py
index 722dac306c7..01112bc8bb2 100755
--- a/src/sage/schemes/elliptic_curves/hom.py
+++ b/src/sage/schemes/elliptic_curves/hom.py
@@ -238,12 +238,10 @@ def _richcmp_(self, other, op):
sage: wE = identity_morphism(E)
sage: wF = identity_morphism(F)
sage: mE = E.scalar_multiplication(1)
- sage: mF = F.multiplication_by_m_isogeny(1)
- doctest:warning ... DeprecationWarning: ...
- sage: [mE == wE, mF == wF]
- [True, True]
- sage: [a == b for a in (wE,mE) for b in (wF,mF)]
- [False, False, False, False]
+ sage: mE == wE
+ True
+ sage: [a == wF for a in (wE,mE)]
+ [False, False]
.. SEEALSO::
@@ -1180,6 +1178,7 @@ def compare_via_evaluation(left, right):
E = left.domain()
F = E.base_ring()
+ d = left.degree()
if isinstance(F, finite_field_base.FiniteField):
# check at a random rational point first
P = E.random_point()
@@ -1188,7 +1187,6 @@ def compare_via_evaluation(left, right):
# then extend to a field with enough points to conclude
q = F.cardinality()
- d = left.degree()
e = integer_floor(1 + 2 * (2*d.sqrt() + 1).log(q)) # from Hasse bound
e = next(i for i, n in enumerate(E.count_points(e+1), 1) if n > 4*d)
EE = E.base_extend(F.extension(e, 'U')) # named extension is faster
@@ -1198,10 +1196,11 @@ def compare_via_evaluation(left, right):
elif isinstance(F, number_field_base.NumberField):
for _ in range(100):
P = E.lift_x(F.random_element(), extend=True)
- if not P.has_finite_order():
+ if P._has_order_at_least(4*d + 1, attempts=50):
+ # if P.height(precision=250) == 0: # slow sometimes
return left._eval(P) == right._eval(P)
else:
- assert False, "couldn't find a point of infinite order"
+ assert False, "couldn't find a point of large enough order"
else:
raise NotImplementedError('not implemented for this base field')
diff --git a/src/sage/schemes/elliptic_curves/hom_composite.py b/src/sage/schemes/elliptic_curves/hom_composite.py
index 6952f2a0e11..0ebfe6261fa 100755
--- a/src/sage/schemes/elliptic_curves/hom_composite.py
+++ b/src/sage/schemes/elliptic_curves/hom_composite.py
@@ -190,7 +190,7 @@ def _compute_factored_isogeny_prime_power(P, l, n, split=.8, velu_sqrt_bound=Non
sage: P, = E.gens()
sage: (l,n), = P.order().factor()
sage: phis = hom_composite._compute_factored_isogeny_prime_power(P,l,n)
- sage: phis == hom_composite._compute_factored_isogeny_prime_power(P,l,n, split=0)
+ sage: phis == hom_composite._compute_factored_isogeny_prime_power(P,l,n, split=0) # long time -- about 10s
True
sage: phis == hom_composite._compute_factored_isogeny_prime_power(P,l,n, split=0.1)
True
diff --git a/src/sage/schemes/elliptic_curves/hom_scalar.py b/src/sage/schemes/elliptic_curves/hom_scalar.py
index de3a02c9b9d..04e50d8ee5c 100644
--- a/src/sage/schemes/elliptic_curves/hom_scalar.py
+++ b/src/sage/schemes/elliptic_curves/hom_scalar.py
@@ -396,8 +396,7 @@ def scaling_factor(self):
sage: u = phi.scaling_factor()
sage: u == phi.formal()[1]
True
- sage: u == E.multiplication_by_m_isogeny(5).scaling_factor()
- doctest:warning ... DeprecationWarning: ...
+ sage: u == 5
True
The scaling factor lives in the base ring::
diff --git a/src/sage/schemes/elliptic_curves/kraus.py b/src/sage/schemes/elliptic_curves/kraus.py
index 49dff06b493..5e749a0448d 100755
--- a/src/sage/schemes/elliptic_curves/kraus.py
+++ b/src/sage/schemes/elliptic_curves/kraus.py
@@ -798,7 +798,7 @@ def check_Kraus_global(c4, c6, assume_nonsingular=False, debug=False):
sage: E = EllipticCurve([a, 0, 1, 2*a^2 + 5*a + 3, -a^2 - 3*a - 2])
sage: assert E.conductor().norm() == 8
sage: G = K.galois_group(names='b')
- sage: def conj_curve(E,sigma): return EllipticCurve([sigma(a) for a in E.ainvs()])
+ sage: def conj_curve(E, sigma): return EllipticCurve([sigma(a) for a in E.ainvs()])
sage: EL = conj_curve(E,G[0])
sage: L = EL.base_field()
sage: assert L.class_number() == 2
diff --git a/src/sage/schemes/elliptic_curves/padic_lseries.py b/src/sage/schemes/elliptic_curves/padic_lseries.py
index 1fcc30764b2..6cb54115933 100755
--- a/src/sage/schemes/elliptic_curves/padic_lseries.py
+++ b/src/sage/schemes/elliptic_curves/padic_lseries.py
@@ -1640,7 +1640,7 @@ def bernardi_sigma_function(self, prec=20):
return sigma_of_z
- def Dp_valued_height(self,prec=20):
+ def Dp_valued_height(self, prec=20):
r"""
Return the canonical `p`-adic height with values in the Dieudonné module `D_p(E)`.
@@ -1674,7 +1674,7 @@ def Dp_valued_height(self,prec=20):
n = _multiple_to_make_good_reduction(E)
n = LCM(n, E.Np(p)) # allowed here because E has good reduction at p
- def height(P,check=True):
+ def height(P, check=True):
if P.is_finite_order():
return Qp(p,prec)(0)
if check:
@@ -1755,7 +1755,7 @@ def regv(vec):
return M.determinant()
- def Dp_pairing(vec1,vec2):
+ def Dp_pairing(vec1, vec2):
return (vec1[0]*vec2[1]-vec1[1]*vec2[0])
omega_vec = vector([K(1),K(0)])
diff --git a/src/sage/schemes/generic/algebraic_scheme.py b/src/sage/schemes/generic/algebraic_scheme.py
index 9a0afa5fb93..a0257a065fd 100755
--- a/src/sage/schemes/generic/algebraic_scheme.py
+++ b/src/sage/schemes/generic/algebraic_scheme.py
@@ -934,9 +934,9 @@ def __init__(self, A, polynomials, category=None):
if isinstance(polynomials, Ideal_generic):
I = polynomials
polynomials = I.gens()
- if I.ring() is R: # Otherwise we will recompute I later after
+ if I.ring() is R: # Otherwise we will recompute I later after
self.__I = I # converting generators to the correct ring
- if isinstance(polynomials, tuple) or isinstance(polynomials, PolynomialSequence_generic) or is_iterator(polynomials):
+ if isinstance(polynomials, (tuple, PolynomialSequence_generic)) or is_iterator(polynomials):
polynomials = list(polynomials)
elif not isinstance(polynomials, list):
# Looks like we got a single polynomial
diff --git a/src/sage/schemes/generic/divisor.py b/src/sage/schemes/generic/divisor.py
index 441efbf36e7..0099a74b86c 100755
--- a/src/sage/schemes/generic/divisor.py
+++ b/src/sage/schemes/generic/divisor.py
@@ -53,7 +53,7 @@
lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism')
-def CurvePointToIdeal(C,P):
+def CurvePointToIdeal(C, P):
r"""
Return the vanishing ideal of a point on a curve.
diff --git a/src/sage/schemes/generic/morphism.py b/src/sage/schemes/generic/morphism.py
index 56bfb8da197..51906d804eb 100755
--- a/src/sage/schemes/generic/morphism.py
+++ b/src/sage/schemes/generic/morphism.py
@@ -246,7 +246,7 @@ def __call__(self, x, *args, **kwds):
converter = D._internal_coerce_map_from(P)
if converter is None:
try:
- return self.pushforward(x,*args,**kwds)
+ return self.pushforward(x, *args, **kwds)
except (AttributeError, TypeError, NotImplementedError):
pass # raise TypeError, "%s must be coercible into %s"%(x, self.domain())
# Here, we would like to do
diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py b/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py
index c0cbccd84ea..8194f25f45c 100755
--- a/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py
+++ b/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py
@@ -211,7 +211,7 @@ def cantor_reduction(a, b, f, h, genus):
return (a, b)
-def cantor_composition_simple(D1,D2,f,genus):
+def cantor_composition_simple(D1, D2, f, genus):
r"""
Given `D_1` and `D_2` two reduced Mumford
divisors on the Jacobian of the curve `y^2 = f(x)`,
@@ -270,7 +270,7 @@ def cantor_composition_simple(D1,D2,f,genus):
return (a, b)
-def cantor_composition(D1,D2,f,h,genus):
+def cantor_composition(D1, D2, f, h, genus):
r"""
EXAMPLES::
@@ -808,7 +808,7 @@ def __neg__(self):
D = (polys[0],-polys[1]-(h+polys[0]) % (polys[0]))
return JacobianMorphism_divisor_class_field(X, D, check=False)
- def _add_(self,other):
+ def _add_(self, other):
r"""
Return a Mumford representative of the divisor ``self + other``.
diff --git a/src/sage/schemes/plane_conics/constructor.py b/src/sage/schemes/plane_conics/constructor.py
index 38652c9c555..a08089522c2 100755
--- a/src/sage/schemes/plane_conics/constructor.py
+++ b/src/sage/schemes/plane_conics/constructor.py
@@ -240,7 +240,7 @@ def Conic(base_field, F=None, names=None, unique=True):
return ProjectiveConic_rational_field(P2, F)
if isinstance(base_field, NumberField):
return ProjectiveConic_number_field(P2, F)
- if isinstance(base_field, FractionField_generic) and (isinstance(base_field.ring(), PolynomialRing_general) or isinstance(base_field.ring(), MPolynomialRing_base)):
+ if isinstance(base_field, FractionField_generic) and isinstance(base_field.ring(), (PolynomialRing_general, MPolynomialRing_base)):
return ProjectiveConic_rational_function_field(P2, F)
return ProjectiveConic_field(P2, F)
diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py
index 7f941ec6726..c5d6b02c05a 100755
--- a/src/sage/schemes/projective/projective_point.py
+++ b/src/sage/schemes/projective/projective_point.py
@@ -625,7 +625,7 @@ def normalize_coordinates(self):
self.scale_by(-ZZ.one())
self._normalized = True
- def dehomogenize(self,n):
+ def dehomogenize(self, n):
r"""
Dehomogenizes at the `n`-th coordinate.
diff --git a/src/sage/schemes/projective/projective_space.py b/src/sage/schemes/projective/projective_space.py
index 9f010391eec..89d4f28f48b 100755
--- a/src/sage/schemes/projective/projective_space.py
+++ b/src/sage/schemes/projective/projective_space.py
@@ -248,7 +248,7 @@ def ProjectiveSpace(n, R=None, names=None):
sage: P.gens() == R.gens()
True
"""
- if (isinstance(n, MPolynomialRing_base) or isinstance(n, PolynomialRing_general)) and R is None:
+ if isinstance(n, (MPolynomialRing_base, PolynomialRing_general)) and R is None:
if names is not None:
# Check for the case that the user provided a variable name
# That does not match what we wanted to use from R
diff --git a/src/sage/schemes/toric/divisor.py b/src/sage/schemes/toric/divisor.py
index 1da707e0cb6..fe043e5dbb0 100755
--- a/src/sage/schemes/toric/divisor.py
+++ b/src/sage/schemes/toric/divisor.py
@@ -954,7 +954,7 @@ def is_ample(self):
sage: fan = Fan(cones=[(0,1), (1,2), (2,3), (3,0)],
....: rays=[(-1,2), (0,1), (1,0), (0,-1)])
sage: F2 = ToricVariety(fan,'u1, u2, u3, u4')
- sage: def D(a,b): return a*F2.divisor(2) + b*F2.divisor(3)
+ sage: def D(a, b): return a*F2.divisor(2) + b*F2.divisor(3)
sage: [ (a,b) for a,b in product(range(-3,3), repeat=2)
....: if D(a,b).is_ample() ]
[(1, 1), (1, 2), (2, 1), (2, 2)]
@@ -1031,7 +1031,7 @@ def is_nef(self):
sage: fan = Fan(cones=[(0,1), (1,2), (2,3), (3,0)],
....: rays=[(-1,2), (0,1), (1,0), (0,-1)])
sage: F2 = ToricVariety(fan,'u1, u2, u3, u4')
- sage: def D(a,b): return a*F2.divisor(2) + b*F2.divisor(3)
+ sage: def D(a, b): return a*F2.divisor(2) + b*F2.divisor(3)
sage: [ (a,b) for a,b in product(range(-3,3), repeat=2)
....: if D(a,b).is_ample() ]
[(1, 1), (1, 2), (2, 1), (2, 2)]
diff --git a/src/sage/schemes/toric/fano_variety.py b/src/sage/schemes/toric/fano_variety.py
index 113399a9c38..fcf5d03d476 100755
--- a/src/sage/schemes/toric/fano_variety.py
+++ b/src/sage/schemes/toric/fano_variety.py
@@ -1583,7 +1583,7 @@ def add_variables(field, variables):
if isinstance(field, FractionField_generic):
# Q(a) ---> Q(a, b) rather than Q(a)(b)
R = field.ring()
- if isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base):
+ if isinstance(R, (PolynomialRing_general, MPolynomialRing_base)):
new_variables = list(R.variable_names())
for v in variables:
if v not in new_variables:
diff --git a/src/sage/sets/disjoint_set.pxd b/src/sage/sets/disjoint_set.pxd
index 4d981718568..98f02ad4897 100644
--- a/src/sage/sets/disjoint_set.pxd
+++ b/src/sage/sets/disjoint_set.pxd
@@ -29,7 +29,7 @@ cdef class DisjointSet_of_hashables(DisjointSet_class):
cdef list _int_to_el
cdef dict _el_to_int
cpdef find(self, e)
- cpdef void union(self, e, f) noexcept
+ cpdef void union(self, e, f) except *
cpdef root_to_elements_dict(self)
cpdef element_to_root_dict(self)
cpdef to_digraph(self)
diff --git a/src/sage/sets/disjoint_set.pyx b/src/sage/sets/disjoint_set.pyx
index ddd9a95a310..c2cce67037f 100644
--- a/src/sage/sets/disjoint_set.pyx
+++ b/src/sage/sets/disjoint_set.pyx
@@ -833,7 +833,7 @@ cdef class DisjointSet_of_hashables(DisjointSet_class):
cdef int r = OP_find(self._nodes, i)
return self._int_to_el[r]
- cpdef void union(self, e, f) noexcept:
+ cpdef void union(self, e, f) except *:
r"""
Combine the set of ``e`` and the set of ``f`` into one.
@@ -861,8 +861,9 @@ cdef class DisjointSet_of_hashables(DisjointSet_class):
sage: e
{{'a', 'b', 'c', 'e'}, {'d'}}
sage: e.union('a', 2**10)
- KeyError: 1024
+ Traceback (most recent call last):
...
+ KeyError: 1024
"""
cdef int i = self._el_to_int[e]
cdef int j = self._el_to_int[f]
diff --git a/src/sage/sets/finite_set_map_cy.pyx b/src/sage/sets/finite_set_map_cy.pyx
index 335e4cfb5e7..f41450d5842 100644
--- a/src/sage/sets/finite_set_map_cy.pyx
+++ b/src/sage/sets/finite_set_map_cy.pyx
@@ -355,7 +355,7 @@ cdef class FiniteSetMap_MN(ClonableIntArray):
n = self._parent._n
assert self._len == m, "Wrong number of values"
for i in range(m):
- assert 0 <= self._list[i] < n, "Wrong value self(%i) = %i"%(i, self._list[i])
+ assert 0 <= self._list[i] < n, "Wrong value self(%i) = %i" % (i, self._list[i])
if hasattr(self._parent, 'check_element'):
self._parent.check_element(self)
diff --git a/src/sage/sets/set.py b/src/sage/sets/set.py
index 5bda2d79169..123c4366af0 100644
--- a/src/sage/sets/set.py
+++ b/src/sage/sets/set.py
@@ -492,7 +492,7 @@ def __init__(self, X, category=None):
and 'Integer Ring'
"""
from sage.rings.integer import Integer
- if isinstance(X, int) or isinstance(X, Integer):
+ if isinstance(X, (int, Integer)):
# The coercion model will try to call Set_object(0)
raise ValueError('underlying object cannot be an integer')
diff --git a/src/sage/sets/set_from_iterator.py b/src/sage/sets/set_from_iterator.py
index 6f68f1245b8..19d11c7ad85 100644
--- a/src/sage/sets/set_from_iterator.py
+++ b/src/sage/sets/set_from_iterator.py
@@ -39,7 +39,7 @@
sage: from sage.sets.set_from_iterator import set_from_method
sage: class A:
....: @set_from_method
- ....: def f(self,n):
+ ....: def f(self, n):
....: return xsrange(n)
sage: a = A()
sage: a.f(3)
@@ -776,7 +776,7 @@ def __call__(self, *args, **kwds):
sage: from sage.sets.set_from_iterator import set_from_method
sage: class A:
....: @set_from_method(name = lambda self,n: str(self)*n)
- ....: def f(self,n):
+ ....: def f(self, n):
....: return xsrange(n)
....: def __repr__(self):
....: return "A"
diff --git a/src/sage/stats/time_series.pyx b/src/sage/stats/time_series.pyx
index e4845126012..28318238a25 100644
--- a/src/sage/stats/time_series.pyx
+++ b/src/sage/stats/time_series.pyx
@@ -307,10 +307,10 @@ cdef class TimeSeries:
if len(self) > max_print:
v0 = self[:max_print//2]
v1 = self[-max_print//2:]
- return '[' + ', '.join(format%x for x in v0) + ' ... ' + \
- ', '.join(format%x for x in v1) + ']'
+ return '[' + ', '.join(format % x for x in v0) + ' ... ' + \
+ ', '.join(format % x for x in v1) + ']'
else:
- return '[' + ', '.join(format%x for x in self) + ']'
+ return '[' + ', '.join(format % x for x in self) + ']'
def __len__(self):
r"""
@@ -557,7 +557,7 @@ cdef class TimeSeries:
memcpy(v._values + i*T._length, T._values, sizeof(double)*T._length)
return v
- def autoregressive_fit(self,M):
+ def autoregressive_fit(self, M):
r"""
This method fits the time series to an autoregressive process
of order ``M``. That is, we assume the process is given by
@@ -782,7 +782,7 @@ cdef class TimeSeries:
t._values[i] = self._values[i] if self._values[i] >= 0 else -self._values[i]
return t
- def diffs(self, Py_ssize_t k = 1):
+ def diffs(self, Py_ssize_t k=1):
r"""
Return the new time series got by taking the differences of
successive terms in the time series. So if ``self`` is the time
diff --git a/src/sage/structure/category_object.pyx b/src/sage/structure/category_object.pyx
index a72d3fcd887..e0c217a0e3b 100644
--- a/src/sage/structure/category_object.pyx
+++ b/src/sage/structure/category_object.pyx
@@ -78,7 +78,7 @@ cdef class CategoryObject(SageObject):
"""
An object in some category.
"""
- def __init__(self, category = None, base = None):
+ def __init__(self, category=None, base=None):
"""
Initialize an object in a category.
@@ -722,7 +722,7 @@ cdef class CategoryObject(SageObject):
return d
- def __setstate__(self,d):
+ def __setstate__(self, d):
try:
version = d['_pickle_version']
except KeyError:
diff --git a/src/sage/structure/coerce.pyx b/src/sage/structure/coerce.pyx
index 7ee41f74a04..cc2f1124cb4 100644
--- a/src/sage/structure/coerce.pyx
+++ b/src/sage/structure/coerce.pyx
@@ -1271,7 +1271,7 @@ cdef class CoercionModel:
if not isinstance(y, Element):
op_name = op.__name__
- mul_method = getattr(y, '__r%s__'%op_name, None)
+ mul_method = getattr(y, '__r%s__' % op_name, None)
if mul_method is not None:
res = mul_method(x)
if res is not None and res is not NotImplemented:
@@ -1425,7 +1425,7 @@ cdef class CoercionModel:
except Exception:
self._record_exception()
- raise TypeError("no common canonical parent for objects with parents: '%s' and '%s'"%(xp, yp))
+ raise TypeError("no common canonical parent for objects with parents: '%s' and '%s'" % (xp, yp))
cpdef coercion_maps(self, R, S):
r"""
diff --git a/src/sage/structure/coerce_actions.pyx b/src/sage/structure/coerce_actions.pyx
index b25abdf328a..17bbd397c98 100644
--- a/src/sage/structure/coerce_actions.pyx
+++ b/src/sage/structure/coerce_actions.pyx
@@ -370,18 +370,18 @@ cdef class ModuleAction(Action):
# At this point, we can assert it is safe to call _Xmul_
the_ring = G if self.connecting is None else self.connecting.codomain()
the_set = S if self.extended_base is None else self.extended_base
- assert the_ring is the_set.base(), "BUG in coercion model\n Apparently there are two versions of\n %s\n in the cache."%the_ring
+ assert the_ring is the_set.base(), "BUG in coercion model\n Apparently there are two versions of\n %s\n in the cache." % the_ring
if not check:
return
if g is None:
g = G.an_element()
if parent(g) is not G:
- raise CoercionException("The parent of %s is not %s but %s"%(g,G,parent(g)))
+ raise CoercionException("The parent of %s is not %s but %s" % (g, G, parent(g)))
if a is None:
a = S.an_element()
if parent(a) is not S:
- raise CoercionException("The parent of %s is not %s but %s"%(a,S,parent(a)))
+ raise CoercionException("The parent of %s is not %s but %s" % (a, S, parent(a)))
if not isinstance(g, Element) or not isinstance(a, ModuleElement):
raise CoercionException("not an Element acting on a ModuleElement")
res = self.act(g, a)
diff --git a/src/sage/structure/element.pyx b/src/sage/structure/element.pyx
index 18a58f46103..14cae09d6f0 100644
--- a/src/sage/structure/element.pyx
+++ b/src/sage/structure/element.pyx
@@ -4699,7 +4699,7 @@ def coerce_binop(method):
sage: from sage.structure.element import coerce_binop
sage: class MyRational(Rational):
- ....: def __init__(self,value):
+ ....: def __init__(self, value):
....: self.v = value
....: @coerce_binop
....: def test_add(self, other, keyword='z'):
diff --git a/src/sage/structure/meson.build b/src/sage/structure/meson.build
index 6f4c75d58a4..9d0076ef53d 100644
--- a/src/sage/structure/meson.build
+++ b/src/sage/structure/meson.build
@@ -60,13 +60,18 @@ extension_data = {
}
foreach name, pyx : extension_data
+ deps = [py_dep, cysignals, gmp]
+ if name == 'coerce'
+ deps += [gmpy2]
+ endif
+
py.extension_module(
name,
sources: pyx,
subdir: 'sage/structure',
install: true,
include_directories: [inc_cpython, inc_ext, inc_rings],
- dependencies: [py_dep, cysignals, gmp, gmpy2, mpc, mpfr],
+ dependencies: deps,
)
endforeach
diff --git a/src/sage/structure/parent_base.pyx b/src/sage/structure/parent_base.pyx
index 7cef8f692c5..a9c5e80a1a9 100644
--- a/src/sage/structure/parent_base.pyx
+++ b/src/sage/structure/parent_base.pyx
@@ -28,7 +28,7 @@ cdef class ParentWithBase(Parent_old):
Parent_old.__init__(self, *args, **kwds)
self._base = base
- cdef _coerce_c_impl(self,x):
+ cdef _coerce_c_impl(self, x):
check_old_coerce(self)
from sage.misc.superseded import deprecation
deprecation(33497, "_coerce_c_impl is deprecated, use coerce instead")
diff --git a/src/sage/structure/unique_representation.py b/src/sage/structure/unique_representation.py
index c7bb3783658..d5208beb1ea 100644
--- a/src/sage/structure/unique_representation.py
+++ b/src/sage/structure/unique_representation.py
@@ -763,7 +763,7 @@ class CachedRepresentation(WithPicklingByInitArgs):
implementation does not work::
sage: class MyClass3(CachedRepresentation):
- ....: def __init__(self, value = 3):
+ ....: def __init__(self, value=3):
....: self.value = value
sage: MyClass3(3) is MyClass3()
False
@@ -772,7 +772,7 @@ class CachedRepresentation(WithPicklingByInitArgs):
sage: class MyClass3(UniqueRepresentation):
....: @staticmethod
- ....: def __classcall__(cls, value = 3):
+ ....: def __classcall__(cls, value=3):
....: return super().__classcall__(cls, value)
....:
....: def __init__(self, value):
@@ -1130,7 +1130,7 @@ def _clear_cache_(cls):
sage: class B(A):
....: @staticmethod
....: def __classcall__(cls, *args, **kwds):
- ....: return super().__classcall__(cls,*args,**kwds)
+ ....: return super().__classcall__(cls, *args, **kwds)
sage: class C(B): pass
sage: a = A(1)
sage: b = B(2)
@@ -1163,7 +1163,7 @@ def _clear_cache_(cls):
....: @staticmethod
....: def __classcall_private__(cls, *args, **kwds):
....: print("Private B")
- ....: return super().__classcall__(cls,*args,**kwds)
+ ....: return super().__classcall__(cls, *args, **kwds)
sage: class C(B): pass
sage: a = A(1)
sage: b = B(2)
diff --git a/src/sage/symbolic/benchmark.py b/src/sage/symbolic/benchmark.py
index 89a62a422c6..b8b98948c04 100644
--- a/src/sage/symbolic/benchmark.py
+++ b/src/sage/symbolic/benchmark.py
@@ -19,7 +19,7 @@
Problem R2::
- sage: def hermite(n,y):
+ sage: def hermite(n, y):
....: if n == 1: return 2*y
....: if n == 0: return 1
....: return expand(2*y*hermite(n-1,y) - 2*(n-1)*hermite(n-2,y))
@@ -37,7 +37,7 @@
Problem R5::
- sage: def blowup(L,n):
+ sage: def blowup(L, n):
....: for i in [0..n]:
....: L.append( (L[i] + L[i+1]) * L[i+2] )
sage: L = list(var('x,y,z'))
diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx
index f221fd64de0..52da8232dc6 100644
--- a/src/sage/symbolic/expression.pyx
+++ b/src/sage/symbolic/expression.pyx
@@ -10010,7 +10010,7 @@ cdef class Expression(Expression_abc):
sig_off()
return new_Expression_from_GEx(self._parent, r)
- def numerator(self, bint normalize = True):
+ def numerator(self, bint normalize=True):
"""
Return the numerator of this symbolic expression.
@@ -11018,7 +11018,7 @@ cdef class Expression(Expression_abc):
trig_simplify = simplify_trig
- def simplify_rational(self,algorithm='full', map=False):
+ def simplify_rational(self, algorithm='full', map=False):
r"""
Simplify rational expressions.
@@ -11604,7 +11604,7 @@ cdef class Expression(Expression_abc):
log_simplify = simplify_log
- def expand_log(self,algorithm='products'):
+ def expand_log(self, algorithm='products'):
r"""
Simplify symbolic expression, which can contain logs.
diff --git a/src/sage/symbolic/function.pyx b/src/sage/symbolic/function.pyx
index 362d01ea297..86860237d5b 100644
--- a/src/sage/symbolic/function.pyx
+++ b/src/sage/symbolic/function.pyx
@@ -1294,7 +1294,7 @@ cdef class SymbolicFunction(Function):
sage: t(x, y)
foo(x, y)
- sage: def ev(self, x,y): return 2*x
+ sage: def ev(self, x, y): return 2*x
sage: foo = function("foo", nargs=2, eval_func=ev) # needs sage.symbolic
sage: foo.__getstate__() # needs sage.symbolic
(2, 'foo', 2, None, {}, True,
diff --git a/src/sage/symbolic/function_factory.py b/src/sage/symbolic/function_factory.py
index 057d1e07811..1918e166443 100644
--- a/src/sage/symbolic/function_factory.py
+++ b/src/sage/symbolic/function_factory.py
@@ -270,7 +270,7 @@ def function(s, **kwds) -> SymbolicFunction | list[SymbolicFunction]:
sage: foo(x).conjugate()
2*x
- sage: def deriv(self, *args,**kwds):
+ sage: def deriv(self, *args, **kwds):
....: print("{} {}".format(args, kwds))
....: return args[kwds['diff_param']]^2
sage: foo = function("foo", nargs=2, derivative_func=deriv)
diff --git a/src/sage/symbolic/ginac/archive.cpp b/src/sage/symbolic/ginac/archive.cpp
index bd078895da0..0362d397ec1 100644
--- a/src/sage/symbolic/ginac/archive.cpp
+++ b/src/sage/symbolic/ginac/archive.cpp
@@ -581,7 +581,7 @@ void archive::clear()
/** Delete cached unarchived expressions in all archive_nodes (mainly for debugging). */
void archive::forget()
{
- for_each(nodes.begin(), nodes.end(), std::mem_fun_ref(&archive_node::forget));
+ std::for_each(nodes.begin(), nodes.end(), [](archive_node &node) { node.forget(); });
}
/** Delete cached unarchived expressions from node (for debugging). */
diff --git a/src/sage/symbolic/ginac/constant.cpp b/src/sage/symbolic/ginac/constant.cpp
index 64e225f0213..f768e021c4e 100644
--- a/src/sage/symbolic/ginac/constant.cpp
+++ b/src/sage/symbolic/ginac/constant.cpp
@@ -20,7 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define register
#include
#include "py_funcs.h"
#include "constant.h"
diff --git a/src/sage/symbolic/ginac/ex.cpp b/src/sage/symbolic/ginac/ex.cpp
index a4783ab0c8b..d4f077153dc 100644
--- a/src/sage/symbolic/ginac/ex.cpp
+++ b/src/sage/symbolic/ginac/ex.cpp
@@ -20,7 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define register
#include
#include "ex.h"
#include "ex_utils.h"
diff --git a/src/sage/symbolic/ginac/fderivative.cpp b/src/sage/symbolic/ginac/fderivative.cpp
index a47db8823f3..8621ba598a8 100644
--- a/src/sage/symbolic/ginac/fderivative.cpp
+++ b/src/sage/symbolic/ginac/fderivative.cpp
@@ -20,7 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define register
#include
#include "py_funcs.h"
#include "fderivative.h"
diff --git a/src/sage/symbolic/ginac/function.cpp b/src/sage/symbolic/ginac/function.cpp
index 67d608c6240..62824b46946 100644
--- a/src/sage/symbolic/ginac/function.cpp
+++ b/src/sage/symbolic/ginac/function.cpp
@@ -20,7 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define register
#define PY_SSIZE_T_CLEAN
#include
#include "py_funcs.h"
diff --git a/src/sage/symbolic/ginac/inifcns_hyperg.cpp b/src/sage/symbolic/ginac/inifcns_hyperg.cpp
index 1ad2ff785b1..a1c037fc96d 100644
--- a/src/sage/symbolic/ginac/inifcns_hyperg.cpp
+++ b/src/sage/symbolic/ginac/inifcns_hyperg.cpp
@@ -23,7 +23,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define register
#include
#include "py_funcs.h"
#include "inifcns.h"
diff --git a/src/sage/symbolic/ginac/numeric.cpp b/src/sage/symbolic/ginac/numeric.cpp
index a9bbfba9e15..e973390ffa2 100644
--- a/src/sage/symbolic/ginac/numeric.cpp
+++ b/src/sage/symbolic/ginac/numeric.cpp
@@ -49,7 +49,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define register
#define PY_SSIZE_T_CLEAN
#include
#include "flint/fmpz.h"
diff --git a/src/sage/symbolic/ginac/upoly-ginac.cpp b/src/sage/symbolic/ginac/upoly-ginac.cpp
index b51ec3be8f8..3c45c686e82 100644
--- a/src/sage/symbolic/ginac/upoly-ginac.cpp
+++ b/src/sage/symbolic/ginac/upoly-ginac.cpp
@@ -216,12 +216,12 @@ std::pair quo_rem(const ex &a, const ex &b, const ex &x, bool check_args)
}
for (size_t i=0; i(i)));
if (avec.size() > bdeg)
avec.resize(bdeg);
for (size_t i=0; i(i)));
return std::make_pair(add(qvec), add(avec));
}
@@ -565,7 +565,7 @@ ex parfrac(const ex & a, const ex & x)
return a;
size_t expo = ex_to(ee).to_int();
for (size_t j=1; j<=expo; ++j) {
- ex eee = power(e.op(0), numeric(j));
+ ex eee = power(e.op(0), numeric(static_cast(j)));
factor.push_back(eee);
cofac.push_back((facmul/eee).expand());
}
@@ -582,7 +582,7 @@ ex parfrac(const ex & a, const ex & x)
return a;
size_t expo = ex_to(facmul.op(1)).to_int();
for (size_t j=1; j<=expo; ++j) {
- ex ee = power(facmul.op(0), numeric(j));
+ ex ee = power(facmul.op(0), numeric(static_cast(j)));
factor.push_back(ee);
cofac.push_back((facmul/ee).expand());
}
diff --git a/src/sage/symbolic/meson.build b/src/sage/symbolic/meson.build
index a9ca57ebf43..0ba39cb4d45 100644
--- a/src/sage/symbolic/meson.build
+++ b/src/sage/symbolic/meson.build
@@ -47,17 +47,7 @@ foreach name, pyx : extension_data
inc_pynac,
inc_rings,
],
- dependencies: [
- py_dep,
- cypari2,
- cysignals,
- flint,
- gmp,
- gsl,
- mpfr,
- pari,
- singular,
- ],
+ dependencies: [py_dep, cysignals, gmp],
)
endforeach
@@ -134,18 +124,7 @@ foreach name, pyx : extension_data_cpp
inc_rings,
include_directories('../libs/gmp'),
],
- dependencies: [
- py_dep,
- cypari2,
- cysignals,
- gmp,
- flint,
- gsl,
- m,
- mpfr,
- pari,
- singular,
- ],
+ dependencies: [py_dep, cysignals, gmp, gsl, singular],
)
endforeach
diff --git a/src/sage/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx
index 32afe8d3a62..65fccee5324 100644
--- a/src/sage/symbolic/ring.pyx
+++ b/src/sage/symbolic/ring.pyx
@@ -675,7 +675,7 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing):
Simple definition of a functional derivative::
- sage: def functional_derivative(expr,f,x):
+ sage: def functional_derivative(expr, f, x):
....: with SR.temp_var() as a:
....: return expr.subs({f(x):a}).diff(a).subs({a:f(x)})
sage: f = function('f')
@@ -686,7 +686,7 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing):
Contrast this to a similar implementation using SR.var(),
which gives a wrong result in our example::
- sage: def functional_derivative(expr,f,x):
+ sage: def functional_derivative(expr, f, x):
....: a = SR.var('a')
....: return expr.subs({f(x):a}).diff(a).subs({a:f(x)})
sage: f = function('f')
diff --git a/src/sage/tensor/modules/tensor_with_indices.py b/src/sage/tensor/modules/tensor_with_indices.py
index e65277935a7..be7c88a859c 100644
--- a/src/sage/tensor/modules/tensor_with_indices.py
+++ b/src/sage/tensor/modules/tensor_with_indices.py
@@ -937,7 +937,7 @@ def permute_indices(self, permutation):
swap_params = list(combinations(range(self._tensor.tensor_rank()+1), 3))
# The associated permutation is as follows
- def swap(param,N):
+ def swap(param, N):
i,j,k = param
L = list(range(1,N+1))
L = L[:i] + L[j:k] + L[i:j] + L[k:]
diff --git a/src/sage/tests/book_schilling_zabrocki_kschur_primer.py b/src/sage/tests/book_schilling_zabrocki_kschur_primer.py
index 69f1e2a1dca..2358c98039d 100644
--- a/src/sage/tests/book_schilling_zabrocki_kschur_primer.py
+++ b/src/sage/tests/book_schilling_zabrocki_kschur_primer.py
@@ -384,9 +384,9 @@
Sage example in ./kschurnotes/notes-mike-anne.tex, line 2487::
sage: Sym = SymmetricFunctions(QQ)
- sage: ks = Sym.kschur(3,t=1)
+ sage: ks = Sym.kschur(3, t=1)
sage: h = Sym.homogeneous()
- sage: for mu in Partitions(7, max_part =3):
+ sage: for mu in Partitions(7, max_part=3):
....: print(h(ks(mu)))
h[3, 3, 1]
h[3, 2, 2] - h[3, 3, 1]
diff --git a/src/sage/tests/book_stein_ent.py b/src/sage/tests/book_stein_ent.py
index a4b7632705f..970b377e962 100644
--- a/src/sage/tests/book_stein_ent.py
+++ b/src/sage/tests/book_stein_ent.py
@@ -206,9 +206,9 @@
....: if gcd(e,phi_n) == 1: break
....: d = lift(Mod(e,phi_n)^(-1))
....: return e, d, n
-sage: def encrypt(m,e,n):
+sage: def encrypt(m, e, n):
....: return lift(Mod(m,n)^e)
-sage: def decrypt(c,d,n):
+sage: def decrypt(c, d, n):
....: return lift(Mod(c,n)^d)
sage: e,d,n = rsa(20)
sage: c = encrypt(123, e, n)
@@ -348,7 +348,7 @@
1
sage: 1/zeta
-zeta^3 - zeta^2 - zeta - 1
-sage: def gauss_sum(a,p):
+sage: def gauss_sum(a, p):
....: K.