diff --git a/.devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-minimal/devcontainer.json b/.devcontainer/portability-fedora-40-minimal/devcontainer.json
similarity index 84%
rename from .devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-minimal/devcontainer.json
rename to .devcontainer/portability-fedora-40-minimal/devcontainer.json
index 7a250c6ba02..dd037154fe3 100644
--- a/.devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-minimal/devcontainer.json
+++ b/.devcontainer/portability-fedora-40-minimal/devcontainer.json
@@ -3,12 +3,12 @@
// from .devcontainer/portability-devcontainer.json.in
// See https://aka.ms/devcontainer.json for format details.
{
- "name": "ubuntu-trusty-toolchain-gcc_9-minimal (≥ 8-core)",
+ "name": "fedora-40-minimal (≥ 8-core)",
"build": {
"dockerfile": "portability-Dockerfile",
// See tox.ini for definitions
"args": {
- "SYSTEM_FACTOR": "ubuntu-trusty-toolchain-gcc_9",
+ "SYSTEM_FACTOR": "fedora-40",
"PACKAGE_FACTOR": "minimal",
"DOCKER_TARGET": "with-targets",
"DOCKER_TAG": "dev"
diff --git a/.devcontainer/portability-opensuse-15.3-gcc_11-python3.9-minimal/portability-Dockerfile b/.devcontainer/portability-fedora-40-minimal/portability-Dockerfile
similarity index 100%
rename from .devcontainer/portability-opensuse-15.3-gcc_11-python3.9-minimal/portability-Dockerfile
rename to .devcontainer/portability-fedora-40-minimal/portability-Dockerfile
diff --git a/.devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-standard/devcontainer.json b/.devcontainer/portability-fedora-40-standard/devcontainer.json
similarity index 84%
rename from .devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-standard/devcontainer.json
rename to .devcontainer/portability-fedora-40-standard/devcontainer.json
index 41d1582c950..1f9d4a5e378 100644
--- a/.devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-standard/devcontainer.json
+++ b/.devcontainer/portability-fedora-40-standard/devcontainer.json
@@ -3,12 +3,12 @@
// from .devcontainer/portability-devcontainer.json.in
// See https://aka.ms/devcontainer.json for format details.
{
- "name": "ubuntu-trusty-toolchain-gcc_9-standard (≥ 8-core)",
+ "name": "fedora-40-standard (≥ 8-core)",
"build": {
"dockerfile": "portability-Dockerfile",
// See tox.ini for definitions
"args": {
- "SYSTEM_FACTOR": "ubuntu-trusty-toolchain-gcc_9",
+ "SYSTEM_FACTOR": "fedora-40",
"PACKAGE_FACTOR": "standard",
"DOCKER_TARGET": "with-targets",
"DOCKER_TAG": "dev"
diff --git a/.devcontainer/portability-opensuse-15.3-gcc_11-python3.9-standard/portability-Dockerfile b/.devcontainer/portability-fedora-40-standard/portability-Dockerfile
similarity index 100%
rename from .devcontainer/portability-opensuse-15.3-gcc_11-python3.9-standard/portability-Dockerfile
rename to .devcontainer/portability-fedora-40-standard/portability-Dockerfile
diff --git a/.devcontainer/portability-opensuse-15.3-gcc_11-python3.9-minimal/devcontainer.json b/.devcontainer/portability-gentoo-python3.12-minimal/devcontainer.json
similarity index 84%
rename from .devcontainer/portability-opensuse-15.3-gcc_11-python3.9-minimal/devcontainer.json
rename to .devcontainer/portability-gentoo-python3.12-minimal/devcontainer.json
index f00b6b66a91..41250ac5e74 100644
--- a/.devcontainer/portability-opensuse-15.3-gcc_11-python3.9-minimal/devcontainer.json
+++ b/.devcontainer/portability-gentoo-python3.12-minimal/devcontainer.json
@@ -3,12 +3,12 @@
// from .devcontainer/portability-devcontainer.json.in
// See https://aka.ms/devcontainer.json for format details.
{
- "name": "opensuse-15.3-gcc_11-python3.9-minimal (≥ 8-core)",
+ "name": "gentoo-python3.12-minimal (≥ 8-core)",
"build": {
"dockerfile": "portability-Dockerfile",
// See tox.ini for definitions
"args": {
- "SYSTEM_FACTOR": "opensuse-15.3-gcc_11-python3.9",
+ "SYSTEM_FACTOR": "gentoo-python3.12",
"PACKAGE_FACTOR": "minimal",
"DOCKER_TARGET": "with-targets",
"DOCKER_TAG": "dev"
diff --git a/.devcontainer/portability-opensuse-15.4-gcc_11-python3.10-minimal/portability-Dockerfile b/.devcontainer/portability-gentoo-python3.12-minimal/portability-Dockerfile
similarity index 100%
rename from .devcontainer/portability-opensuse-15.4-gcc_11-python3.10-minimal/portability-Dockerfile
rename to .devcontainer/portability-gentoo-python3.12-minimal/portability-Dockerfile
diff --git a/.devcontainer/portability-opensuse-15.3-gcc_11-python3.9-standard/devcontainer.json b/.devcontainer/portability-gentoo-python3.12-standard/devcontainer.json
similarity index 84%
rename from .devcontainer/portability-opensuse-15.3-gcc_11-python3.9-standard/devcontainer.json
rename to .devcontainer/portability-gentoo-python3.12-standard/devcontainer.json
index 2444967bdad..3193910dd6a 100644
--- a/.devcontainer/portability-opensuse-15.3-gcc_11-python3.9-standard/devcontainer.json
+++ b/.devcontainer/portability-gentoo-python3.12-standard/devcontainer.json
@@ -3,12 +3,12 @@
// from .devcontainer/portability-devcontainer.json.in
// See https://aka.ms/devcontainer.json for format details.
{
- "name": "opensuse-15.3-gcc_11-python3.9-standard (≥ 8-core)",
+ "name": "gentoo-python3.12-standard (≥ 8-core)",
"build": {
"dockerfile": "portability-Dockerfile",
// See tox.ini for definitions
"args": {
- "SYSTEM_FACTOR": "opensuse-15.3-gcc_11-python3.9",
+ "SYSTEM_FACTOR": "gentoo-python3.12",
"PACKAGE_FACTOR": "standard",
"DOCKER_TARGET": "with-targets",
"DOCKER_TAG": "dev"
diff --git a/.devcontainer/portability-opensuse-15.4-gcc_11-python3.10-standard/portability-Dockerfile b/.devcontainer/portability-gentoo-python3.12-standard/portability-Dockerfile
similarity index 100%
rename from .devcontainer/portability-opensuse-15.4-gcc_11-python3.10-standard/portability-Dockerfile
rename to .devcontainer/portability-gentoo-python3.12-standard/portability-Dockerfile
diff --git a/.devcontainer/portability-opensuse-15.4-gcc_11-python3.10-minimal/devcontainer.json b/.devcontainer/portability-linuxmint-21.3-minimal/devcontainer.json
similarity index 84%
rename from .devcontainer/portability-opensuse-15.4-gcc_11-python3.10-minimal/devcontainer.json
rename to .devcontainer/portability-linuxmint-21.3-minimal/devcontainer.json
index aa8549b345d..6350569173d 100644
--- a/.devcontainer/portability-opensuse-15.4-gcc_11-python3.10-minimal/devcontainer.json
+++ b/.devcontainer/portability-linuxmint-21.3-minimal/devcontainer.json
@@ -3,12 +3,12 @@
// from .devcontainer/portability-devcontainer.json.in
// See https://aka.ms/devcontainer.json for format details.
{
- "name": "opensuse-15.4-gcc_11-python3.10-minimal (≥ 8-core)",
+ "name": "linuxmint-21.3-minimal (≥ 8-core)",
"build": {
"dockerfile": "portability-Dockerfile",
// See tox.ini for definitions
"args": {
- "SYSTEM_FACTOR": "opensuse-15.4-gcc_11-python3.10",
+ "SYSTEM_FACTOR": "linuxmint-21.3",
"PACKAGE_FACTOR": "minimal",
"DOCKER_TARGET": "with-targets",
"DOCKER_TAG": "dev"
diff --git a/.devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-minimal/portability-Dockerfile b/.devcontainer/portability-linuxmint-21.3-minimal/portability-Dockerfile
similarity index 100%
rename from .devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-minimal/portability-Dockerfile
rename to .devcontainer/portability-linuxmint-21.3-minimal/portability-Dockerfile
diff --git a/.devcontainer/portability-opensuse-15.4-gcc_11-python3.10-standard/devcontainer.json b/.devcontainer/portability-linuxmint-21.3-standard/devcontainer.json
similarity index 84%
rename from .devcontainer/portability-opensuse-15.4-gcc_11-python3.10-standard/devcontainer.json
rename to .devcontainer/portability-linuxmint-21.3-standard/devcontainer.json
index 5278ae20eac..245fee17201 100644
--- a/.devcontainer/portability-opensuse-15.4-gcc_11-python3.10-standard/devcontainer.json
+++ b/.devcontainer/portability-linuxmint-21.3-standard/devcontainer.json
@@ -3,12 +3,12 @@
// from .devcontainer/portability-devcontainer.json.in
// See https://aka.ms/devcontainer.json for format details.
{
- "name": "opensuse-15.4-gcc_11-python3.10-standard (≥ 8-core)",
+ "name": "linuxmint-21.3-standard (≥ 8-core)",
"build": {
"dockerfile": "portability-Dockerfile",
// See tox.ini for definitions
"args": {
- "SYSTEM_FACTOR": "opensuse-15.4-gcc_11-python3.10",
+ "SYSTEM_FACTOR": "linuxmint-21.3",
"PACKAGE_FACTOR": "standard",
"DOCKER_TARGET": "with-targets",
"DOCKER_TAG": "dev"
diff --git a/.devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-standard/portability-Dockerfile b/.devcontainer/portability-linuxmint-21.3-standard/portability-Dockerfile
similarity index 100%
rename from .devcontainer/portability-ubuntu-trusty-toolchain-gcc_9-standard/portability-Dockerfile
rename to .devcontainer/portability-linuxmint-21.3-standard/portability-Dockerfile
diff --git a/.devcontainer/portability-ubuntu-noble-minimal/devcontainer.json b/.devcontainer/portability-ubuntu-noble-minimal/devcontainer.json
new file mode 100644
index 00000000000..f22b6775f74
--- /dev/null
+++ b/.devcontainer/portability-ubuntu-noble-minimal/devcontainer.json
@@ -0,0 +1,25 @@
+// The command "tox -e update_docker_platforms"
+// creates .devcontainer/portability-*-*/devcontainer.json
+// from .devcontainer/portability-devcontainer.json.in
+// See https://aka.ms/devcontainer.json for format details.
+{
+ "name": "ubuntu-noble-minimal (≥ 8-core)",
+ "build": {
+ "dockerfile": "portability-Dockerfile",
+ // See tox.ini for definitions
+ "args": {
+ "SYSTEM_FACTOR": "ubuntu-noble",
+ "PACKAGE_FACTOR": "minimal",
+ "DOCKER_TARGET": "with-targets",
+ "DOCKER_TAG": "dev"
+ }
+ },
+ "containerEnv": {
+ "MAKE": "make -j4"
+ },
+ "onCreateCommand": ".devcontainer/onCreate.sh",
+ "updateContentCommand": ".devcontainer/portability-updateContent.sh",
+ "extensions": [
+ "ms-python.python"
+ ]
+}
diff --git a/.devcontainer/portability-ubuntu-noble-minimal/portability-Dockerfile b/.devcontainer/portability-ubuntu-noble-minimal/portability-Dockerfile
new file mode 120000
index 00000000000..692e2a79d64
--- /dev/null
+++ b/.devcontainer/portability-ubuntu-noble-minimal/portability-Dockerfile
@@ -0,0 +1 @@
+../portability-Dockerfile
\ No newline at end of file
diff --git a/.devcontainer/portability-ubuntu-noble-standard/devcontainer.json b/.devcontainer/portability-ubuntu-noble-standard/devcontainer.json
new file mode 100644
index 00000000000..7acec1e29ac
--- /dev/null
+++ b/.devcontainer/portability-ubuntu-noble-standard/devcontainer.json
@@ -0,0 +1,25 @@
+// The command "tox -e update_docker_platforms"
+// creates .devcontainer/portability-*-*/devcontainer.json
+// from .devcontainer/portability-devcontainer.json.in
+// See https://aka.ms/devcontainer.json for format details.
+{
+ "name": "ubuntu-noble-standard (≥ 8-core)",
+ "build": {
+ "dockerfile": "portability-Dockerfile",
+ // See tox.ini for definitions
+ "args": {
+ "SYSTEM_FACTOR": "ubuntu-noble",
+ "PACKAGE_FACTOR": "standard",
+ "DOCKER_TARGET": "with-targets",
+ "DOCKER_TAG": "dev"
+ }
+ },
+ "containerEnv": {
+ "MAKE": "make -j4"
+ },
+ "onCreateCommand": ".devcontainer/onCreate.sh",
+ "updateContentCommand": ".devcontainer/portability-updateContent.sh",
+ "extensions": [
+ "ms-python.python"
+ ]
+}
diff --git a/.devcontainer/portability-ubuntu-noble-standard/portability-Dockerfile b/.devcontainer/portability-ubuntu-noble-standard/portability-Dockerfile
new file mode 120000
index 00000000000..692e2a79d64
--- /dev/null
+++ b/.devcontainer/portability-ubuntu-noble-standard/portability-Dockerfile
@@ -0,0 +1 @@
+../portability-Dockerfile
\ No newline at end of file
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 35bc0b32282..4afd959f108 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -15,7 +15,7 @@
- [ ] The description explains in detail what this PR is about.
- [ ] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
-- [ ] I have updated the documentation accordingly.
+- [ ] I have updated the documentation and checked the documentation preview.
### :hourglass: Dependencies
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 5944e32a19d..3eecd1a4666 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -15,7 +15,7 @@ on:
platform:
description: 'Platform'
required: true
- default: 'ubuntu-focal-standard'
+ default: 'ubuntu-jammy-standard'
docker_tag:
description: 'Docker tag'
required: true
@@ -52,7 +52,7 @@ jobs:
build:
runs-on: ubuntu-latest
- container: ghcr.io/sagemath/sage/sage-${{ github.event.inputs.platform || 'ubuntu-focal-standard' }}-with-targets:${{ github.event.inputs.docker_tag || 'dev'}}
+ container: ghcr.io/sagemath/sage/sage-${{ github.event.inputs.platform || 'ubuntu-jammy-standard' }}-with-targets:${{ github.event.inputs.docker_tag || 'dev'}}
needs: [get_ci_fixes]
steps:
- name: Checkout
@@ -93,16 +93,16 @@ jobs:
./bootstrap && make build
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Build modularized distributions
if: (success() || failure()) && steps.worktree.outcome == 'success'
run: make V=0 tox && make SAGE_CHECK=no pypi-wheels
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Static code check with pyright
if: (success() || failure()) && steps.worktree.outcome == 'success'
@@ -137,8 +137,8 @@ jobs:
./bootstrap && make doc-clean doc-uninstall sagelib-clean && git clean -fx src/sage && ./config.status
working-directory: ./worktree-image
env:
- MAKE: make -j2
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4
+ SAGE_NUM_THREADS: 4
- name: Build
# This step is needed because building the modularized distributions installs some optional packages,
@@ -149,8 +149,8 @@ jobs:
make build
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
# Testing
@@ -161,16 +161,16 @@ jobs:
./sage -t --new -p2
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Test modularized distributions
if: (success() || failure()) && steps.build.outcome == 'success'
run: make V=0 tox && make pypi-wheels-check
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Check that all modules can be imported
run: |
diff --git a/.github/workflows/ci-conda.yml b/.github/workflows/ci-conda.yml
index 1bb08637099..a0f3c021643 100644
--- a/.github/workflows/ci-conda.yml
+++ b/.github/workflows/ci-conda.yml
@@ -35,12 +35,12 @@ jobs:
# environment: [environment, environment-optional]
conda-env: [environment]
# On pull requests, only test two jobs:
- # Ubuntu with Python 3.9, macOS with Python 3.10.
- # Build & Test currently uses Python 3.11 (on ubuntu-focal).
+ # Ubuntu with Python 3.9, macOS with Python 3.11.
+ # Build & Test currently uses Python 3.10 (on ubuntu-jammy).
# Together, they cover the supported minor Python versions.
include: >-
${{ github.event_name == 'pull_request'
- && fromJson('[{"os": "macos", "python": "3.10", "conda-env": "environment"}]')
+ && fromJson('[{"os": "macos", "python": "3.11", "conda-env": "environment"}]')
|| fromJson('[]') }}
steps:
diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml
index 7e86f010b42..6860bd6e460 100644
--- a/.github/workflows/ci-linux.yml
+++ b/.github/workflows/ci-linux.yml
@@ -46,7 +46,7 @@ jobs:
targets: build doc-html
targets_optional: ptest
tox_system_factors: >-
- ["ubuntu-focal"]
+ ["ubuntu-jammy"]
tox_packages_factors: >-
["standard"]
docker_push_repository: ghcr.io/${{ github.repository }}/
@@ -111,18 +111,11 @@ jobs:
["ubuntu-jammy",
"ubuntu-lunar",
"ubuntu-mantic",
- "debian-bullseye",
"debian-bookworm",
"debian-trixie",
"debian-sid",
- "linuxmint-21",
"linuxmint-21.1",
"linuxmint-21.2",
- "fedora-33",
- "fedora-34",
- "fedora-35",
- "fedora-36",
- "fedora-37",
"fedora-38",
"fedora-39",
"centos-stream-8-python3.9",
@@ -131,11 +124,9 @@ jobs:
"gentoo-python3.10",
"gentoo-python3.11",
"archlinux-latest",
- "opensuse-15.4-gcc_11-python3.10",
"opensuse-15.5-gcc_11-python3.11",
"opensuse-tumbleweed-python3.10",
- "opensuse-tumbleweed",
- "debian-bullseye-i386"]
+ "opensuse-tumbleweed"]
docker_push_repository: ghcr.io/${{ github.repository }}/
max_parallel: 8
diff --git a/.github/workflows/doc-build-pdf.yml b/.github/workflows/doc-build-pdf.yml
index 6e6e8776062..ee90f3a42fc 100644
--- a/.github/workflows/doc-build-pdf.yml
+++ b/.github/workflows/doc-build-pdf.yml
@@ -9,7 +9,7 @@ on:
platform:
description: 'Platform'
required: true
- default: 'ubuntu-focal-standard'
+ default: 'ubuntu-jammy-standard'
docker_tag:
description: 'Docker tag'
required: true
@@ -46,7 +46,7 @@ jobs:
build-docs-pdf:
runs-on: ubuntu-latest
- container: ghcr.io/sagemath/sage/sage-${{ github.event.inputs.platform || 'ubuntu-focal-standard' }}-with-targets:${{ github.event.inputs.docker_tag || 'dev'}}
+ container: ghcr.io/sagemath/sage/sage-${{ github.event.inputs.platform || 'ubuntu-jammy-standard' }}-with-targets:${{ github.event.inputs.docker_tag || 'dev'}}
needs: [get_ci_fixes]
steps:
- name: Checkout
@@ -87,8 +87,8 @@ jobs:
./bootstrap && make build
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Build (fallback to non-incremental)
id: build
@@ -98,8 +98,8 @@ jobs:
make sagelib-clean && git clean -fx src/sage && ./config.status && make build
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Build docs (PDF)
id: docbuild
@@ -108,8 +108,8 @@ jobs:
make doc-clean doc-uninstall; make sagemath_doc_html-build-deps sagemath_doc_pdf-no-deps
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Copy docs
id: copy
diff --git a/.github/workflows/doc-build.yml b/.github/workflows/doc-build.yml
index 21e19e3859a..b3c275d8e0a 100644
--- a/.github/workflows/doc-build.yml
+++ b/.github/workflows/doc-build.yml
@@ -41,7 +41,7 @@ jobs:
build-docs:
runs-on: ubuntu-latest
- container: ghcr.io/sagemath/sage/sage-ubuntu-focal-standard-with-targets:dev
+ container: ghcr.io/sagemath/sage/sage-ubuntu-jammy-standard-with-targets:dev
needs: [get_ci_fixes]
steps:
- name: Checkout
@@ -95,8 +95,8 @@ jobs:
./bootstrap && make sagemath_doc_html-build-deps
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Build (fallback to non-incremental)
id: build
@@ -106,8 +106,8 @@ jobs:
make sagelib-clean && git clean -fx src/sage && ./config.status && make sagemath_doc_html-build-deps
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Build docs
id: docbuild
@@ -124,8 +124,8 @@ jobs:
./config.status && make sagemath_doc_html-no-deps
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Copy docs
id: copy
@@ -169,8 +169,8 @@ jobs:
./config.status && make sagemath_doc_html-no-deps sagemath_doc_pdf-no-deps
working-directory: ./worktree-image
env:
- MAKE: make -j2 --output-sync=recurse
- SAGE_NUM_THREADS: 2
+ MAKE: make -j4 --output-sync=recurse
+ SAGE_NUM_THREADS: 4
- name: Copy live doc
id: copylivedoc
diff --git a/.github/workflows/doc-publish.yml b/.github/workflows/doc-publish.yml
index 361dafb22e0..f893f49c2ea 100644
--- a/.github/workflows/doc-publish.yml
+++ b/.github/workflows/doc-publish.yml
@@ -70,12 +70,13 @@ jobs:
with:
number: ${{ steps.source-run-info.outputs.pullRequestNumber }}
header: preview-comment
- recreate: true
+ recreate: false
message: |
[Documentation preview for this PR](${{ steps.deploy-netlify.outputs.NETLIFY_URL }}/html/en) (built with commit ${{ steps.source-run-info.outputs.sourceHeadSha }}; [changes](${{ steps.deploy-netlify.outputs.NETLIFY_URL }}/CHANGES.html)) is ready! :tada:
+ This preview will update shortly after each push to this PR.
- name: Update deployment status PR check
- uses: myrotvorets/set-commit-status-action@v2.0.0
+ uses: myrotvorets/set-commit-status-action@v2.0.1
if: ${{ always() }}
env:
DEPLOY_SUCCESS: Successfully deployed preview.
@@ -134,4 +135,3 @@ jobs:
- name: Report deployment url
run: |
echo "::notice::The live documentation has been deployed - ${{ steps.deploy-netlify.outputs.NETLIFY_URL }}"
-
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 18910ca50a6..ccc2b07a02f 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -18,13 +18,13 @@ on:
# 'tox -e update_docker_platforms' updates below
default: >-
[
- "ubuntu-trusty-toolchain-gcc_9",
"ubuntu-xenial-toolchain-gcc_9",
"ubuntu-bionic-gcc_8",
"ubuntu-focal",
"ubuntu-jammy",
"ubuntu-lunar",
"ubuntu-mantic",
+ "ubuntu-noble",
"debian-buster-gcc_spkg",
"debian-bullseye",
"debian-bookworm",
@@ -36,6 +36,7 @@ on:
"linuxmint-21",
"linuxmint-21.1",
"linuxmint-21.2",
+ "linuxmint-21.3",
"fedora-30",
"fedora-31",
"fedora-32",
@@ -46,6 +47,7 @@ on:
"fedora-37",
"fedora-38",
"fedora-39",
+ "fedora-40",
"centos-7-devtoolset-gcc_11",
"centos-stream-8-python3.9",
"centos-stream-9-python3.9",
@@ -53,9 +55,8 @@ on:
"almalinux-9-python3.11",
"gentoo-python3.10",
"gentoo-python3.11",
+ "gentoo-python3.12",
"archlinux-latest",
- "opensuse-15.3-gcc_11-python3.9",
- "opensuse-15.4-gcc_11-python3.10",
"opensuse-15.5-gcc_11-python3.11",
"opensuse-tumbleweed-python3.10",
"opensuse-tumbleweed",
@@ -244,7 +245,7 @@ jobs:
# configuration on many platforms.
run: |
(sleep ${{ inputs.timeout }}; for id in $(docker ps -q); do docker exec $id find /proc -maxdepth 2 -name cmdline -exec bash -c "grep -l [m][a][k][e] {} | cut -d/ -f3 | xargs --no-run-if-empty kill" \;; done) &
- set -o pipefail; EXTRA_DOCKER_BUILD_ARGS="--build-arg NUMPROC=4 --build-arg USE_MAKEFLAGS=\"-k V=0 SAGE_NUM_THREADS=3\"" tox -e $TOX_ENV -- $TARGETS 2>&1 | sed "/^configure: notice:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: warning:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: error:/s|^|::error file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;"
+ set -o pipefail; EXTRA_DOCKER_BUILD_ARGS="--build-arg NUMPROC=9 --build-arg USE_MAKEFLAGS=\"-k V=0 SAGE_NUM_THREADS=5\"" tox -e $TOX_ENV -- $TARGETS 2>&1 | sed "/^configure: notice:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: warning:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: error:/s|^|::error file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;"
- name: Copy logs from the Docker image or build container
run: |
mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"
diff --git a/CITATION.cff b/CITATION.cff
index 9e0beb8bcc1..78059fdc091 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.4.beta2
+version: 10.4.beta3
doi: 10.5281/zenodo.593563
-date-released: 2024-04-08
+date-released: 2024-04-12
repository-code: "https://github.com/sagemath/sage"
url: "https://www.sagemath.org/"
diff --git a/VERSION.txt b/VERSION.txt
index 2a439e4ca37..fa9d32fec7a 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-SageMath version 10.4.beta2, Release Date: 2024-04-08
+SageMath version 10.4.beta3, Release Date: 2024-04-12
diff --git a/bootstrap b/bootstrap
index 14eb56c9981..f7776186f37 100755
--- a/bootstrap
+++ b/bootstrap
@@ -232,8 +232,7 @@ save () {
src/environment-optional-3.[89].yml src/environment-optional-3.1[0-9].yml \
src/Pipfile \
src/pyproject.toml \
- src/requirements.txt \
- src/setup.cfg
+ src/requirements.txt
# Update version
echo "$NEWCONFVERSION" >$PKG/package-version.txt
diff --git a/build/bin/write-dockerfile.sh b/build/bin/write-dockerfile.sh
index 3c62d6082e4..36cf4862626 100755
--- a/build/bin/write-dockerfile.sh
+++ b/build/bin/write-dockerfile.sh
@@ -236,7 +236,7 @@ $ADD Makefile VERSION.txt COPYING.txt condarc.yml README.md bootstrap bootstrap-
$ADD config/config.rpath config/config.rpath
$ADD src/doc/bootstrap src/doc/bootstrap
$ADD src/bin src/bin
-$ADD src/Pipfile.m4 src/pyproject.toml.m4 src/requirements.txt.m4 src/setup.cfg.m4 src/VERSION.txt src/
+$ADD src/Pipfile.m4 src/pyproject.toml.m4 src/requirements.txt.m4 src/VERSION.txt src/
$ADD m4 ./m4
$ADD pkgs pkgs
$ADD build ./build
diff --git a/build/pkgs/appnope/spkg-configure.m4 b/build/pkgs/appnope/spkg-configure.m4
index 059e63eb4fd..86ae64da07b 100644
--- a/build/pkgs/appnope/spkg-configure.m4
+++ b/build/pkgs/appnope/spkg-configure.m4
@@ -1,3 +1,7 @@
SAGE_SPKG_CONFIGURE([appnope], [
SAGE_PYTHON_PACKAGE_CHECK([appnope])
+], [dnl REQUIRED-CHECK
+ dnl Only required on macOS
+ sage_require_appnope=no
+ AS_CASE([$host], [*-*-darwin*], [sage_require_appnope=yes])
])
diff --git a/build/pkgs/configure/checksums.ini b/build/pkgs/configure/checksums.ini
index 2dd257e6307..872b435c579 100644
--- a/build/pkgs/configure/checksums.ini
+++ b/build/pkgs/configure/checksums.ini
@@ -1,4 +1,4 @@
tarball=configure-VERSION.tar.gz
-sha1=a8f26f365284ca719e583e703c5b8eeb656b35ab
-md5=612ba76c797d5fc92e272a59b1b7b2e6
-cksum=2444442853
+sha1=b9d9a4bb2d949d8f6fffe63c77ff069d59ca6e8c
+md5=95f8a1d22f684e3f61019ae82111e639
+cksum=3352815196
diff --git a/build/pkgs/configure/package-version.txt b/build/pkgs/configure/package-version.txt
index e6ac4c1dd9e..a4012527648 100644
--- a/build/pkgs/configure/package-version.txt
+++ b/build/pkgs/configure/package-version.txt
@@ -1 +1 @@
-6d187b153b5b5c3e29fe07d9efe925e34bf5baa5
+4dd66116b58babf05bb8e4b30282638e2c0b82c3
diff --git a/build/pkgs/cypari/checksums.ini b/build/pkgs/cypari/checksums.ini
index 3f87b3fabb8..27a680da968 100644
--- a/build/pkgs/cypari/checksums.ini
+++ b/build/pkgs/cypari/checksums.ini
@@ -1,5 +1,5 @@
tarball=cypari2-VERSION.tar.gz
-sha1=0af00b66e3f1b77e932ad9cade6e4e9dc6f21eaa
-md5=34c919aedb0a470c8b4e4b0c0ec788e3
-cksum=2760761148
-upstream_url=https://github.com/sagemath/cypari2/releases/download/VERSION/cypari2-VERSION.tar.gz
+sha1=4cb5fc43899852b7fc0c0175e610318c38f0caac
+md5=e9940034c6707a3faeb416f207444e81
+cksum=361739172
+upstream_url=https://pypi.io/packages/source/c/cypari2/cypari2-VERSION.tar.gz
diff --git a/build/pkgs/cypari/package-version.txt b/build/pkgs/cypari/package-version.txt
index 7d2ed7c7020..cd57a8b95d6 100644
--- a/build/pkgs/cypari/package-version.txt
+++ b/build/pkgs/cypari/package-version.txt
@@ -1 +1 @@
-2.1.4
+2.1.5
diff --git a/build/pkgs/debugpy/distros/gentoo.txt b/build/pkgs/debugpy/distros/gentoo.txt
deleted file mode 100644
index 8b797ce715f..00000000000
--- a/build/pkgs/debugpy/distros/gentoo.txt
+++ /dev/null
@@ -1 +0,0 @@
-dev-python/debugpy
diff --git a/build/pkgs/debugpy/spkg-configure.m4 b/build/pkgs/debugpy/spkg-configure.m4
index db605ff03c8..4ff24d41057 100644
--- a/build/pkgs/debugpy/spkg-configure.m4
+++ b/build/pkgs/debugpy/spkg-configure.m4
@@ -1 +1,14 @@
-SAGE_SPKG_CONFIGURE([debugpy], [SAGE_PYTHON_PACKAGE_CHECK([debugpy])])
+SAGE_SPKG_CONFIGURE([debugpy], [
+ SAGE_PYTHON_PACKAGE_CHECK([debugpy])
+], [
+ dnl REQUIRED-CHECK
+ dnl
+ dnl Skip debugpy if ipykernel from the system will be used.
+ dnl This allows downstream packagers to treat debugpy (a
+ dnl somewhat problematic package) as optional.
+ AC_REQUIRE([SAGE_SPKG_CONFIGURE_IPYKERNEL])
+ sage_require_debugpy=yes
+ AS_VAR_IF([sage_spkg_install_ipykernel], [no], [
+ sage_require_debugpy=no
+ ])
+])
diff --git a/build/pkgs/exceptiongroup/spkg-configure.m4 b/build/pkgs/exceptiongroup/spkg-configure.m4
new file mode 100644
index 00000000000..22383688321
--- /dev/null
+++ b/build/pkgs/exceptiongroup/spkg-configure.m4
@@ -0,0 +1,3 @@
+SAGE_SPKG_CONFIGURE([exceptiongroup],[
+ SAGE_PYTHON_PACKAGE_CHECK([exceptiongroup])
+])
diff --git a/build/pkgs/exceptiongroup/version_requirements.txt b/build/pkgs/exceptiongroup/version_requirements.txt
index 341183a94c9..2fffd03311e 100644
--- a/build/pkgs/exceptiongroup/version_requirements.txt
+++ b/build/pkgs/exceptiongroup/version_requirements.txt
@@ -1 +1 @@
-exceptiongroup
+exceptiongroup; python_version<"3.11"
diff --git a/build/pkgs/memory_allocator/checksums.ini b/build/pkgs/memory_allocator/checksums.ini
index c907031eac5..76e62a79758 100644
--- a/build/pkgs/memory_allocator/checksums.ini
+++ b/build/pkgs/memory_allocator/checksums.ini
@@ -1,5 +1,5 @@
tarball=memory_allocator-VERSION.tar.gz
-sha1=1a874de2674a1948797de109adfd1f56193e153a
-md5=c3a5d0f5acf896eec84266964a8aec0e
-cksum=3431157422
+sha1=21661580dd3f41aac0f2090033d8804e6ff495d9
+md5=2a5e087c686b04996ccb88ce56cad9f0
+cksum=3481909016
upstream_url=https://pypi.io/packages/source/m/memory_allocator/memory_allocator-VERSION.tar.gz
diff --git a/build/pkgs/memory_allocator/package-version.txt b/build/pkgs/memory_allocator/package-version.txt
index b1e80bb2480..845639eef26 100644
--- a/build/pkgs/memory_allocator/package-version.txt
+++ b/build/pkgs/memory_allocator/package-version.txt
@@ -1 +1 @@
-0.1.3
+0.1.4
diff --git a/build/pkgs/sage_conf/version_requirements.txt b/build/pkgs/sage_conf/version_requirements.txt
index b2352d17cd7..a9fc6b33c1e 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.4b2
+sage-conf ~= 10.4b3
diff --git a/build/pkgs/sage_docbuild/version_requirements.txt b/build/pkgs/sage_docbuild/version_requirements.txt
index 5fe49b28bc6..6392017efee 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.4b2
+sage-docbuild ~= 10.4b3
diff --git a/build/pkgs/sage_setup/version_requirements.txt b/build/pkgs/sage_setup/version_requirements.txt
index ebca92ad49d..fa79fc9374b 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.4b2
+sage-setup ~= 10.4b3
diff --git a/build/pkgs/sage_sws2rst/version_requirements.txt b/build/pkgs/sage_sws2rst/version_requirements.txt
index 9956ef5ccfb..012366aac27 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.4b2
+sage-sws2rst ~= 10.4b3
diff --git a/build/pkgs/sagelib/version_requirements.txt b/build/pkgs/sagelib/version_requirements.txt
index 4d5da1cfa32..958d7998ec8 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.4b2
+sagemath-standard ~= 10.4b3
diff --git a/build/pkgs/sagemath_bliss/version_requirements.txt b/build/pkgs/sagemath_bliss/version_requirements.txt
index 0e6bc0c0cbd..f140cad57dd 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.4b2
+sagemath-bliss ~= 10.4b3
diff --git a/build/pkgs/sagemath_categories/version_requirements.txt b/build/pkgs/sagemath_categories/version_requirements.txt
index 6e24614039e..15b52d809bf 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.4b2
+sagemath-categories ~= 10.4b3
diff --git a/build/pkgs/sagemath_coxeter3/version_requirements.txt b/build/pkgs/sagemath_coxeter3/version_requirements.txt
index 3949915c19a..db035aacdca 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.4b2
+sagemath-coxeter3 ~= 10.4b3
diff --git a/build/pkgs/sagemath_environment/version_requirements.txt b/build/pkgs/sagemath_environment/version_requirements.txt
index e0afddbcc32..80fd875a7e4 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.4b2
+sagemath-environment ~= 10.4b3
diff --git a/build/pkgs/sagemath_mcqd/version_requirements.txt b/build/pkgs/sagemath_mcqd/version_requirements.txt
index 228e1ac3b7f..58a3e31ff65 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.4b2
+sagemath-mcqd ~= 10.4b3
diff --git a/build/pkgs/sagemath_meataxe/version_requirements.txt b/build/pkgs/sagemath_meataxe/version_requirements.txt
index e4cbc453d92..b46a8c93c1e 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.4b2
+sagemath-meataxe ~= 10.4b3
diff --git a/build/pkgs/sagemath_objects/version_requirements.txt b/build/pkgs/sagemath_objects/version_requirements.txt
index 722c2a6bf92..56948780fe6 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.4b2
+sagemath-objects ~= 10.4b3
diff --git a/build/pkgs/sagemath_repl/version_requirements.txt b/build/pkgs/sagemath_repl/version_requirements.txt
index 7f3c89386bf..230c8f95374 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.4b2
+sagemath-repl ~= 10.4b3
diff --git a/build/pkgs/sagemath_sirocco/version_requirements.txt b/build/pkgs/sagemath_sirocco/version_requirements.txt
index 757e0e89c19..d04d2ab48b0 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.4b2
+sagemath-sirocco ~= 10.4b3
diff --git a/build/pkgs/sagemath_tdlib/version_requirements.txt b/build/pkgs/sagemath_tdlib/version_requirements.txt
index 4445572b5fd..53da30e01ec 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.4b2
+sagemath-tdlib ~= 10.4b3
diff --git a/build/pkgs/typing_extensions/version_requirements.txt b/build/pkgs/typing_extensions/version_requirements.txt
index e1a912109ed..d10f4dffbd3 100644
--- a/build/pkgs/typing_extensions/version_requirements.txt
+++ b/build/pkgs/typing_extensions/version_requirements.txt
@@ -1,3 +1,3 @@
# According to https://github.com/python/typing_extensions/blob/main/CHANGELOG.md,
# version 4.4.0 adds another Python 3.11 typing backport
-typing_extensions >= 4.4.0; python_version<'3.11'
+typing_extensions >= 4.4.0; python_version<"3.11"
diff --git a/configure.ac b/configure.ac
index 96cb9926ff0..7816aca796e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -418,7 +418,7 @@ AC_ARG_ENABLE([cvxopt],
AC_ARG_ENABLE([notebook],
AS_HELP_STRING([--disable-notebook],
[disable build of the Jupyter notebook and related packages]), [
- for pkg in notebook nbconvert beautifulsoup4 sagenb_export nbformat nbclient terminado send2trash prometheus_client mistune pandocfilters bleach defusedxml jsonschema jupyter_jsmol argon2_cffi argon2_cffi_bindings webencodings tinycss2 ipympl soupsieve fastjsonschema anyio arrow async_lru fqdn isoduration json5 jsonpointer jsonschema_specifications jupyter_events jupyter_lsp jupyter_server jupyter_server_terminals jupyterlab jupyterlab_mathjax2 notebook_shim overrides python_json_logger pyyaml referencing rfc3339_validator rfc3986_validator sniffio types_python_dateutil uri_template webcolors websocket_client; do
+ for pkg in notebook nbconvert beautifulsoup4 sagenb_export nbformat nbclient terminado send2trash prometheus_client mistune pandocfilters bleach defusedxml jsonschema jupyter_jsmol argon2_cffi argon2_cffi_bindings webencodings tinycss2 ipympl soupsieve fastjsonschema anyio arrow async_lru fqdn isoduration json5 jsonpointer jsonschema_specifications jupyter_events jupyter_lsp jupyter_server jupyter_server_terminals jupyterlab jupyterlab_server jupyterlab_pygments jupyterlab_mathjax2 notebook_shim overrides python_json_logger pyyaml referencing rfc3339_validator rfc3986_validator sniffio types_python_dateutil uri_template webcolors websocket_client; do
AS_VAR_SET([SAGE_ENABLE_$pkg], [$enableval])
done
])
@@ -426,7 +426,7 @@ AC_ARG_ENABLE([notebook],
AC_ARG_ENABLE([r],
AS_HELP_STRING([--disable-r],
[disable build of the R package and related packages]), [
- for pkg in r rpy2 r_jupyter tzlocal pytz_deprecation_shim; do
+ for pkg in r rpy2 r_jupyter tzlocal pytz_deprecation_shim tzdata; do
AS_VAR_SET([SAGE_ENABLE_$pkg], [$enableval])
done
])
diff --git a/pkgs/sage-conf/VERSION.txt b/pkgs/sage-conf/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sage-conf/VERSION.txt
+++ b/pkgs/sage-conf/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sage-conf_conda/VERSION.txt b/pkgs/sage-conf_conda/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sage-conf_conda/VERSION.txt
+++ b/pkgs/sage-conf_conda/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sage-conf_pypi/VERSION.txt b/pkgs/sage-conf_pypi/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sage-conf_pypi/VERSION.txt
+++ b/pkgs/sage-conf_pypi/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sage-docbuild/VERSION.txt b/pkgs/sage-docbuild/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sage-docbuild/VERSION.txt
+++ b/pkgs/sage-docbuild/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sage-setup/VERSION.txt b/pkgs/sage-setup/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sage-setup/VERSION.txt
+++ b/pkgs/sage-setup/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sage-sws2rst/VERSION.txt b/pkgs/sage-sws2rst/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sage-sws2rst/VERSION.txt
+++ b/pkgs/sage-sws2rst/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-bliss/VERSION.txt b/pkgs/sagemath-bliss/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-bliss/VERSION.txt
+++ b/pkgs/sagemath-bliss/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-categories/VERSION.txt b/pkgs/sagemath-categories/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-categories/VERSION.txt
+++ b/pkgs/sagemath-categories/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-categories/known-test-failures.json b/pkgs/sagemath-categories/known-test-failures.json
index ddae185a7d9..3f7973d7fee 100644
--- a/pkgs/sagemath-categories/known-test-failures.json
+++ b/pkgs/sagemath-categories/known-test-failures.json
@@ -26,7 +26,7 @@
"ntests": 28
},
"sage.categories.affine_weyl_groups": {
- "ntests": 14
+ "ntests": 15
},
"sage.categories.algebra_ideals": {
"failed": true,
@@ -148,7 +148,7 @@
},
"sage.categories.coxeter_groups": {
"failed": true,
- "ntests": 362
+ "ntests": 363
},
"sage.categories.cw_complexes": {
"failed": true,
@@ -301,7 +301,7 @@
},
"sage.categories.finite_complex_reflection_groups": {
"failed": true,
- "ntests": 178
+ "ntests": 199
},
"sage.categories.finite_coxeter_groups": {
"ntests": 6
@@ -493,10 +493,6 @@
"failed": true,
"ntests": 13
},
- "sage.categories.inner_product_spaces": {
- "failed": true,
- "ntests": 9
- },
"sage.categories.integral_domains": {
"failed": true,
"ntests": 22
@@ -783,7 +779,7 @@
},
"sage.cpython.debug": {
"failed": true,
- "ntests": 14
+ "ntests": 13
},
"sage.cpython.dict_del_by_value": {
"failed": true,
@@ -826,7 +822,6 @@
"ntests": 321
},
"sage.doctest.reporting": {
- "failed": true,
"ntests": 124
},
"sage.doctest.sources": {
@@ -1091,7 +1086,7 @@
},
"sage.misc.sageinspect": {
"failed": true,
- "ntests": 329
+ "ntests": 332
},
"sage.misc.superseded": {
"failed": true,
@@ -1124,6 +1119,7 @@
"ntests": 128
},
"sage.repl.configuration": {
+ "failed": true,
"ntests": 22
},
"sage.repl.display.fancy_repr": {
@@ -1149,6 +1145,7 @@
"ntests": 42
},
"sage.repl.inputhook": {
+ "failed": true,
"ntests": 7
},
"sage.repl.interface_magic": {
@@ -1157,7 +1154,7 @@
},
"sage.repl.interpreter": {
"failed": true,
- "ntests": 118
+ "ntests": 114
},
"sage.repl.ipython_extension": {
"failed": true,
@@ -1188,7 +1185,7 @@
},
"sage.repl.load": {
"failed": true,
- "ntests": 42
+ "ntests": 38
},
"sage.repl.preparse": {
"failed": true,
@@ -1315,9 +1312,6 @@
"sage.structure.global_options": {
"ntests": 145
},
- "sage.structure.graphics_file": {
- "ntests": 8
- },
"sage.structure.indexed_generators": {
"failed": true,
"ntests": 90
diff --git a/pkgs/sagemath-coxeter3/VERSION.txt b/pkgs/sagemath-coxeter3/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-coxeter3/VERSION.txt
+++ b/pkgs/sagemath-coxeter3/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-environment/VERSION.txt b/pkgs/sagemath-environment/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-environment/VERSION.txt
+++ b/pkgs/sagemath-environment/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-mcqd/VERSION.txt b/pkgs/sagemath-mcqd/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-mcqd/VERSION.txt
+++ b/pkgs/sagemath-mcqd/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-meataxe/VERSION.txt b/pkgs/sagemath-meataxe/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-meataxe/VERSION.txt
+++ b/pkgs/sagemath-meataxe/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-objects/VERSION.txt b/pkgs/sagemath-objects/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-objects/VERSION.txt
+++ b/pkgs/sagemath-objects/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-repl/VERSION.txt b/pkgs/sagemath-repl/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-repl/VERSION.txt
+++ b/pkgs/sagemath-repl/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-sirocco/VERSION.txt b/pkgs/sagemath-sirocco/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-sirocco/VERSION.txt
+++ b/pkgs/sagemath-sirocco/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/pkgs/sagemath-standard/setup.cfg b/pkgs/sagemath-standard/setup.cfg
deleted file mode 120000
index ba9b315730a..00000000000
--- a/pkgs/sagemath-standard/setup.cfg
+++ /dev/null
@@ -1 +0,0 @@
-../../src/setup.cfg
\ No newline at end of file
diff --git a/pkgs/sagemath-standard/setup.cfg.m4 b/pkgs/sagemath-standard/setup.cfg.m4
deleted file mode 120000
index 8934d7b5955..00000000000
--- a/pkgs/sagemath-standard/setup.cfg.m4
+++ /dev/null
@@ -1 +0,0 @@
-../../src/setup.cfg.m4
\ No newline at end of file
diff --git a/pkgs/sagemath-standard/setup.py b/pkgs/sagemath-standard/setup.py
index 29c8744f910..4f9c4370746 100755
--- a/pkgs/sagemath-standard/setup.py
+++ b/pkgs/sagemath-standard/setup.py
@@ -69,25 +69,60 @@
from sage_setup.autogen import autogen_all
autogen_all()
-# TODO: This should be quiet by default
-print("Discovering Python/Cython source code....")
-t = time.time()
-from sage.misc.package import is_package_installed_and_updated
-distributions = ['']
-optional_packages_with_extensions = os.environ.get('SAGE_OPTIONAL_PACKAGES_WITH_EXTENSIONS', '').split(',')
-distributions += ['sagemath-{}'.format(pkg)
- for pkg in optional_packages_with_extensions
- if is_package_installed_and_updated(pkg)]
-log.warn('distributions = {0}'.format(distributions))
-from sage_setup.find import find_python_sources
-python_packages, python_modules, cython_modules = find_python_sources(
- SAGE_SRC, ['sage'], distributions=distributions)
-
-log.debug('python_packages = {0}'.format(python_packages))
-log.debug('python_modules = {0}'.format(python_modules))
-log.debug('cython_modules = {0}'.format(cython_modules))
-
-print("Discovered Python/Cython sources, time: %.2f seconds." % (time.time() - t))
+ # TODO: This should be quiet by default
+ print("Discovering Python/Cython source code....")
+ t = time.time()
+ from sage.misc.package import is_package_installed_and_updated
+
+ distributions = [
+ '',
+ "sagemath-brial",
+ "sagemath-categories",
+ "sagemath-combinat",
+ "sagemath-eclib",
+ "sagemath-environment",
+ "sagemath-flint",
+ "sagemath-gap",
+ "sagemath-giac",
+ "sagemath-glpk",
+ "sagemath-graphs",
+ "sagemath-groups",
+ "sagemath-homfly",
+ "sagemath-lcalc",
+ "sagemath-libbraiding",
+ "sagemath-libecm",
+ "sagemath-linbox",
+ "sagemath-modules",
+ "sagemath-mpmath",
+ "sagemath-ntl",
+ "sagemath-objects",
+ "sagemath-pari",
+ "sagemath-plot",
+ "sagemath-polyhedra",
+ "sagemath-repl",
+ "sagemath-schemes",
+ "sagemath-singular",
+ "sagemath-symbolics",
+ ]
+
+ optional_packages_with_extensions = os.environ.get('SAGE_OPTIONAL_PACKAGES_WITH_EXTENSIONS', '').split(',')
+ distributions += ['sagemath-{}'.format(pkg)
+ for pkg in optional_packages_with_extensions
+ if is_package_installed_and_updated(pkg)]
+ log.warn('distributions = {0}'.format(distributions))
+ from sage_setup.find import find_python_sources
+ python_packages, python_modules, cython_modules = find_python_sources(
+ SAGE_SRC, ['sage'], distributions=distributions)
+
+ log.debug('python_packages = {0}'.format(python_packages))
+ log.debug('python_modules = {0}'.format(python_modules))
+ log.debug('cython_modules = {0}'.format(cython_modules))
+
+ print("Discovered Python/Cython sources, time: %.2f seconds." % (time.time() - t))
+else:
+ # sdist, egg_info, dist_info
+ python_packages = []
+ cython_modules = []
#########################################################
### Distutils
diff --git a/pkgs/sagemath-standard/tox.ini b/pkgs/sagemath-standard/tox.ini
index 6aae1ef1bfa..fcd32d0764b 100644
--- a/pkgs/sagemath-standard/tox.ini
+++ b/pkgs/sagemath-standard/tox.ini
@@ -17,7 +17,7 @@
[tox]
envlist =
# Build and test without using the concrete dependencies specified by requirements.txt,
- # using the dependencies declared in pyproject.toml and setup.cfg (install-requires) only:
+ # using the dependencies declared in pyproject.toml (build-system requires, dependencies) only:
# Still use ONLY the wheels built and stored by the Sage distribution (no PyPI).
#
# ./sage -sh -c '(cd pkgs/sagemath-standard && tox -v -v -v -e sagepython-sagewheels-nopypi-norequirements)'
@@ -45,7 +45,7 @@ envlist =
#
# ./sage -sh -c '(cd pkgs/sagemath-standard && tox -v -v -v -e sagepython-sagewheels-pipenv-dist)'
#
- # Build using the dependencies declared in pyproject.toml and setup.cfg (install-requires) only.
+ # Build using the dependencies declared in pyproject.toml (build-system requires, dependencies) only:
# Use the wheels built and stored by the Sage distribution,
# and additionally allow packages from PyPI.
#
diff --git a/pkgs/sagemath-tdlib/VERSION.txt b/pkgs/sagemath-tdlib/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/pkgs/sagemath-tdlib/VERSION.txt
+++ b/pkgs/sagemath-tdlib/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/src/Pipfile.m4 b/src/Pipfile.m4
index feca57f7de9..d03a2a12814 100644
--- a/src/Pipfile.m4
+++ b/src/Pipfile.m4
@@ -6,8 +6,8 @@ url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
-## We do not list packages that are already declared as install_requires
-## in setup.cfg
+## We do not list packages that are already declared as dependencies (install_requires)
+## in pyproject.toml
pycodestyle = "*"
tox = "*"
pytest = "*"
@@ -15,8 +15,8 @@ rope = "*"
six = "*"
[packages]
-## We do not list packages that are already declared as install_requires
-## in setup.cfg
+## We do not list packages that are already declared as dependencies (install_requires)
+## in pyproject.toml
[packages.e1839a8]
path = "."
diff --git a/src/VERSION.txt b/src/VERSION.txt
index 770c88a80e6..af343da123a 100644
--- a/src/VERSION.txt
+++ b/src/VERSION.txt
@@ -1 +1 @@
-10.4.beta2
+10.4.beta3
diff --git a/src/bin/sage-version.sh b/src/bin/sage-version.sh
index b15410a73db..ec030052a09 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.4.beta2'
-SAGE_RELEASE_DATE='2024-04-08'
-SAGE_VERSION_BANNER='SageMath version 10.4.beta2, Release Date: 2024-04-08'
+SAGE_VERSION='10.4.beta3'
+SAGE_RELEASE_DATE='2024-04-12'
+SAGE_VERSION_BANNER='SageMath version 10.4.beta3, Release Date: 2024-04-12'
diff --git a/src/doc/en/developer/coding_basics.rst b/src/doc/en/developer/coding_basics.rst
index c586b030ed8..b87654b8306 100644
--- a/src/doc/en/developer/coding_basics.rst
+++ b/src/doc/en/developer/coding_basics.rst
@@ -193,8 +193,8 @@ included in one of the following places:
This practice is deprecated, see :issue:`33037`.
In all cases, the files must be listed (explicitly or via wildcards) in
-the section ``options.package_data`` of the file
-:sage_root:`pkgs/sagemath-standard/setup.cfg.m4` (or the corresponding
+the section ``[tool.setuptools.package-data]`` of the file
+:sage_root:`SAGE_ROOT/pkgs/sagemath-standard/pyproject.toml.m4` (or the corresponding
file of another distribution).
Large data files should not be added to the Sage source tree. Instead, it
diff --git a/src/doc/en/developer/coding_in_python.rst b/src/doc/en/developer/coding_in_python.rst
index 37552e5bcfe..9a325f01e52 100644
--- a/src/doc/en/developer/coding_in_python.rst
+++ b/src/doc/en/developer/coding_in_python.rst
@@ -14,8 +14,9 @@ Python language standard
Sage library code needs to be compatible with all versions of Python
that Sage supports. The information regarding the supported versions
-can be found in the files ``build/pkgs/python3/spkg-configure.m4`` and
-``src/setup.cfg.m4``.
+can be found in the files ``build/pkgs/python3/spkg-configure.m4``
+(for the Sage distribution), ``m4/pyproject_toml_metadata.m4`` (for
+the Sage library and most other distribution packages in ``pkgs/``).
Python 3.9 is the oldest supported version. Hence,
all language and library features that are available in Python 3.9 can
diff --git a/src/doc/en/developer/packaging_sage_library.rst b/src/doc/en/developer/packaging_sage_library.rst
index 9fbb4271727..a88e33b93ca 100644
--- a/src/doc/en/developer/packaging_sage_library.rst
+++ b/src/doc/en/developer/packaging_sage_library.rst
@@ -174,8 +174,7 @@ The source directory of a distribution package, such as
$ ./sage --fixdistributions --set all --from-egg-info
-- `pyproject.toml `_,
- `setup.cfg `_,
+- `pyproject.toml `_
and `requirements.txt `_ --
standard Python packaging metadata, declaring the distribution name, dependencies,
etc.
@@ -288,8 +287,9 @@ modules must be part of the distribution, or provided by another
distribution -- which then must be declared as a run-time dependency.
*Declaring run-time dependencies:* These dependencies are declared in
-``setup.cfg`` (generated from ``setup.cfg.m4``) as
-`install_requires `_.
+``pyproject.toml`` (generated from ``pyproject.toml.m4``) as
+`[project] dependencies `_ (in the older terminology of ``setup.cfg`` and ``setup.py``,
+these dependencies were known as ``install_requires``).
*Reducing module-level run-time dependencies:*
@@ -467,14 +467,17 @@ features, which will only be working if the user also has installed
**sagemath-symbolics**.
*Declaring optional run-time dependencies:* It is possible to declare
-such optional dependencies as `extras_require `_ in ``setup.cfg``
-(generated from ``setup.cfg.m4``). This is a very limited mechanism
+such dependencies as `[project.optional-dependencies] `_ in ``pyproject.toml``
+(generated from ``pyproject.toml.m4``).
+(In the older terminology of ``setup.cfg`` and ``setup.py``,
+these optional dependencies were known as ``extras_require``.)
+This is a very limited mechanism
-- in particular it does not affect the build phase of the
distribution in any way. It basically only provides a way to give a
nickname to a distribution that can be installed as an add-on.
-In our example, we could declare an ``extras_require`` so that users
-could use ``pip install sagemath-coding[symbolics]``.
+In our example, we could declare an optional dependency so that users
+could use ``pip install "sagemath-coding[symbolics]"``.
Doctest-only dependencies
@@ -516,7 +519,7 @@ The version information for dependencies comes from the files
``build/pkgs/*/package-version.txt``. We use the
`m4 `_
macro processor to insert the version information in the generated files
-``pyproject.toml``, ``setup.cfg``, ``requirements.txt``.
+``pyproject.toml`` and ``requirements.txt``.
Hierarchy of distribution packages
@@ -546,8 +549,8 @@ Hierarchy of distribution packages
sphinx_plot(g, figsize=(8, 4), axes=False)
-Solid arrows indicate ``install_requires``, i.e., a declared runtime dependency.
-Dashed arrows indicate ``extras_require``, i.e., a declared optional runtime dependency.
+Solid arrows indicate declared runtime dependencies (``install_requires``).
+Dashed arrows indicate declared optional runtime dependencies (``extras_require``).
Not shown in the diagram are build dependencies and optional dependencies for testing.
- `sage_conf `_ is a configuration
diff --git a/src/doc/en/developer/portability_platform_table.rst b/src/doc/en/developer/portability_platform_table.rst
index d024671c9d8..bf843b0a353 100644
--- a/src/doc/en/developer/portability_platform_table.rst
+++ b/src/doc/en/developer/portability_platform_table.rst
@@ -1,57 +1,3 @@
-.. |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-system-packages
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-configured
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-pre
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-optional
-
-.. |codespace-ubuntu-trusty-toolchain-gcc_9-minimal| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-trusty-toolchain-gcc_9-minimal%2Fdevcontainer.json
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-system-packages
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-configured
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-pre
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-targets
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-optional
-
-.. |codespace-ubuntu-trusty-toolchain-gcc_9-standard| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-trusty-toolchain-gcc_9-standard%2Fdevcontainer.json
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-system-packages
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-configured
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-pre
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets
-
-.. |image-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
- :target: https://ghcr.io/sagemath/sage/sage-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-optional
-
-.. |codespace-ubuntu-trusty-toolchain-gcc_9-maximal| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-trusty-toolchain-gcc_9-maximal%2Fdevcontainer.json
-
.. |image-ubuntu-xenial-toolchain-gcc_9-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-xenial-toolchain-gcc_9-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
:target: https://ghcr.io/sagemath/sage/sage-ubuntu-xenial-toolchain-gcc_9-minimal-with-system-packages
@@ -376,6 +322,60 @@
.. |codespace-ubuntu-mantic-maximal| image:: https://github.com/codespaces/badge.svg
:target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-mantic-maximal%2Fdevcontainer.json
+.. |image-ubuntu-noble-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-minimal-with-system-packages
+
+.. |image-ubuntu-noble-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-minimal-configured
+
+.. |image-ubuntu-noble-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-minimal-with-targets-pre
+
+.. |image-ubuntu-noble-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-minimal-with-targets
+
+.. |image-ubuntu-noble-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-minimal-with-targets-optional
+
+.. |codespace-ubuntu-noble-minimal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-noble-minimal%2Fdevcontainer.json
+
+.. |image-ubuntu-noble-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-standard-with-system-packages
+
+.. |image-ubuntu-noble-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-standard-configured
+
+.. |image-ubuntu-noble-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-standard-with-targets-pre
+
+.. |image-ubuntu-noble-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-standard-with-targets
+
+.. |image-ubuntu-noble-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-standard-with-targets-optional
+
+.. |codespace-ubuntu-noble-standard| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-noble-standard%2Fdevcontainer.json
+
+.. |image-ubuntu-noble-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-maximal-with-system-packages
+
+.. |image-ubuntu-noble-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-maximal-configured
+
+.. |image-ubuntu-noble-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-maximal-with-targets-pre
+
+.. |image-ubuntu-noble-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-maximal-with-targets
+
+.. |image-ubuntu-noble-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-ubuntu-noble-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
+ :target: https://ghcr.io/sagemath/sage/sage-ubuntu-noble-maximal-with-targets-optional
+
+.. |codespace-ubuntu-noble-maximal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-ubuntu-noble-maximal%2Fdevcontainer.json
+
.. |image-debian-buster-gcc_spkg-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-debian-buster-gcc_spkg-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
:target: https://ghcr.io/sagemath/sage/sage-debian-buster-gcc_spkg-minimal-with-system-packages
@@ -970,6 +970,60 @@
.. |codespace-linuxmint-21.2-maximal| image:: https://github.com/codespaces/badge.svg
:target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-linuxmint-21.2-maximal%2Fdevcontainer.json
+.. |image-linuxmint-21.3-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-minimal-with-system-packages
+
+.. |image-linuxmint-21.3-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-minimal-configured
+
+.. |image-linuxmint-21.3-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-minimal-with-targets-pre
+
+.. |image-linuxmint-21.3-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-minimal-with-targets
+
+.. |image-linuxmint-21.3-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-minimal-with-targets-optional
+
+.. |codespace-linuxmint-21.3-minimal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-linuxmint-21.3-minimal%2Fdevcontainer.json
+
+.. |image-linuxmint-21.3-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-standard-with-system-packages
+
+.. |image-linuxmint-21.3-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-standard-configured
+
+.. |image-linuxmint-21.3-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-standard-with-targets-pre
+
+.. |image-linuxmint-21.3-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-standard-with-targets
+
+.. |image-linuxmint-21.3-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-standard-with-targets-optional
+
+.. |codespace-linuxmint-21.3-standard| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-linuxmint-21.3-standard%2Fdevcontainer.json
+
+.. |image-linuxmint-21.3-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-maximal-with-system-packages
+
+.. |image-linuxmint-21.3-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-maximal-configured
+
+.. |image-linuxmint-21.3-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-maximal-with-targets-pre
+
+.. |image-linuxmint-21.3-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-maximal-with-targets
+
+.. |image-linuxmint-21.3-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-linuxmint-21.3-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
+ :target: https://ghcr.io/sagemath/sage/sage-linuxmint-21.3-maximal-with-targets-optional
+
+.. |codespace-linuxmint-21.3-maximal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-linuxmint-21.3-maximal%2Fdevcontainer.json
+
.. |image-fedora-30-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-30-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
:target: https://ghcr.io/sagemath/sage/sage-fedora-30-minimal-with-system-packages
@@ -1510,6 +1564,60 @@
.. |codespace-fedora-39-maximal| image:: https://github.com/codespaces/badge.svg
:target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-fedora-39-maximal%2Fdevcontainer.json
+.. |image-fedora-40-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-minimal-with-system-packages
+
+.. |image-fedora-40-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-minimal-configured
+
+.. |image-fedora-40-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-minimal-with-targets-pre
+
+.. |image-fedora-40-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-minimal-with-targets
+
+.. |image-fedora-40-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-minimal-with-targets-optional
+
+.. |codespace-fedora-40-minimal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-fedora-40-minimal%2Fdevcontainer.json
+
+.. |image-fedora-40-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-standard-with-system-packages
+
+.. |image-fedora-40-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-standard-configured
+
+.. |image-fedora-40-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-standard-with-targets-pre
+
+.. |image-fedora-40-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-standard-with-targets
+
+.. |image-fedora-40-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-standard-with-targets-optional
+
+.. |codespace-fedora-40-standard| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-fedora-40-standard%2Fdevcontainer.json
+
+.. |image-fedora-40-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-maximal-with-system-packages
+
+.. |image-fedora-40-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-maximal-configured
+
+.. |image-fedora-40-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-maximal-with-targets-pre
+
+.. |image-fedora-40-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-maximal-with-targets
+
+.. |image-fedora-40-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-fedora-40-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
+ :target: https://ghcr.io/sagemath/sage/sage-fedora-40-maximal-with-targets-optional
+
+.. |codespace-fedora-40-maximal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-fedora-40-maximal%2Fdevcontainer.json
+
.. |image-centos-7-devtoolset-gcc_11-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-centos-7-devtoolset-gcc_11-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
:target: https://ghcr.io/sagemath/sage/sage-centos-7-devtoolset-gcc_11-minimal-with-system-packages
@@ -1888,6 +1996,60 @@
.. |codespace-gentoo-python3.11-maximal| image:: https://github.com/codespaces/badge.svg
:target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-gentoo-python3.11-maximal%2Fdevcontainer.json
+.. |image-gentoo-python3.12-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-minimal-with-system-packages
+
+.. |image-gentoo-python3.12-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-minimal-configured
+
+.. |image-gentoo-python3.12-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-minimal-with-targets-pre
+
+.. |image-gentoo-python3.12-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-minimal-with-targets
+
+.. |image-gentoo-python3.12-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-minimal-with-targets-optional
+
+.. |codespace-gentoo-python3.12-minimal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-gentoo-python3.12-minimal%2Fdevcontainer.json
+
+.. |image-gentoo-python3.12-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-standard-with-system-packages
+
+.. |image-gentoo-python3.12-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-standard-configured
+
+.. |image-gentoo-python3.12-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-standard-with-targets-pre
+
+.. |image-gentoo-python3.12-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-standard-with-targets
+
+.. |image-gentoo-python3.12-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-standard-with-targets-optional
+
+.. |codespace-gentoo-python3.12-standard| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-gentoo-python3.12-standard%2Fdevcontainer.json
+
+.. |image-gentoo-python3.12-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-maximal-with-system-packages
+
+.. |image-gentoo-python3.12-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-maximal-configured
+
+.. |image-gentoo-python3.12-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-maximal-with-targets-pre
+
+.. |image-gentoo-python3.12-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-maximal-with-targets
+
+.. |image-gentoo-python3.12-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-gentoo-python3.12-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
+ :target: https://ghcr.io/sagemath/sage/sage-gentoo-python3.12-maximal-with-targets-optional
+
+.. |codespace-gentoo-python3.12-maximal| image:: https://github.com/codespaces/badge.svg
+ :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-gentoo-python3.12-maximal%2Fdevcontainer.json
+
.. |image-archlinux-latest-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-archlinux-latest-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
:target: https://ghcr.io/sagemath/sage/sage-archlinux-latest-minimal-with-system-packages
@@ -1942,114 +2104,6 @@
.. |codespace-archlinux-latest-maximal| image:: https://github.com/codespaces/badge.svg
:target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-archlinux-latest-maximal%2Fdevcontainer.json
-.. |image-opensuse-15.3-gcc_11-python3.9-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-system-packages
-
-.. |image-opensuse-15.3-gcc_11-python3.9-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-configured
-
-.. |image-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-pre
-
-.. |image-opensuse-15.3-gcc_11-python3.9-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-targets
-
-.. |image-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-optional
-
-.. |codespace-opensuse-15.3-gcc_11-python3.9-minimal| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-opensuse-15.3-gcc_11-python3.9-minimal%2Fdevcontainer.json
-
-.. |image-opensuse-15.3-gcc_11-python3.9-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-system-packages
-
-.. |image-opensuse-15.3-gcc_11-python3.9-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-configured
-
-.. |image-opensuse-15.3-gcc_11-python3.9-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-targets-pre
-
-.. |image-opensuse-15.3-gcc_11-python3.9-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-targets
-
-.. |image-opensuse-15.3-gcc_11-python3.9-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-standard-with-targets-optional
-
-.. |codespace-opensuse-15.3-gcc_11-python3.9-standard| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-opensuse-15.3-gcc_11-python3.9-standard%2Fdevcontainer.json
-
-.. |image-opensuse-15.3-gcc_11-python3.9-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-system-packages
-
-.. |image-opensuse-15.3-gcc_11-python3.9-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-configured
-
-.. |image-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-pre
-
-.. |image-opensuse-15.3-gcc_11-python3.9-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-targets
-
-.. |image-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-optional
-
-.. |codespace-opensuse-15.3-gcc_11-python3.9-maximal| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-opensuse-15.3-gcc_11-python3.9-maximal%2Fdevcontainer.json
-
-.. |image-opensuse-15.4-gcc_11-python3.10-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-system-packages
-
-.. |image-opensuse-15.4-gcc_11-python3.10-minimal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-configured
-
-.. |image-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%23677895
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-pre
-
-.. |image-opensuse-15.4-gcc_11-python3.10-minimal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%236686c1
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-targets
-
-.. |image-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%236495ed
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-optional
-
-.. |codespace-opensuse-15.4-gcc_11-python3.10-minimal| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-opensuse-15.4-gcc_11-python3.10-minimal%2Fdevcontainer.json
-
-.. |image-opensuse-15.4-gcc_11-python3.10-standard-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-system-packages
-
-.. |image-opensuse-15.4-gcc_11-python3.10-standard-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-configured
-
-.. |image-opensuse-15.4-gcc_11-python3.10-standard-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%235d8a4c
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-targets-pre
-
-.. |image-opensuse-15.4-gcc_11-python3.10-standard-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%2350ab2e
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-targets
-
-.. |image-opensuse-15.4-gcc_11-python3.10-standard-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%2344cc11
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-standard-with-targets-optional
-
-.. |codespace-opensuse-15.4-gcc_11-python3.10-standard| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-opensuse-15.4-gcc_11-python3.10-standard%2Fdevcontainer.json
-
-.. |image-opensuse-15.4-gcc_11-python3.10-maximal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-system-packages
-
-.. |image-opensuse-15.4-gcc_11-python3.10-maximal-configured| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-configured/latest_tag?ignore=latest,dev,*-failed&label=configured&color=%23696969
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-configured
-
-.. |image-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-pre| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-pre/latest_tag?ignore=latest,dev,*-failed&label=with-targets-pre&color=%238f6b8d
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-pre
-
-.. |image-opensuse-15.4-gcc_11-python3.10-maximal-with-targets| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-targets/latest_tag?ignore=latest,dev,*-failed&label=with-targets&color=%23b46eb2
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-targets
-
-.. |image-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-optional| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-optional/latest_tag?ignore=latest,dev,*-failed&label=with-targets-optional&color=%23da70d6
- :target: https://ghcr.io/sagemath/sage/sage-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-optional
-
-.. |codespace-opensuse-15.4-gcc_11-python3.10-maximal| image:: https://github.com/codespaces/badge.svg
- :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-opensuse-15.4-gcc_11-python3.10-maximal%2Fdevcontainer.json
-
.. |image-opensuse-15.5-gcc_11-python3.11-minimal-with-system-packages| image:: https://ghcr-badge.egpl.dev/sagemath/sage/sage-opensuse-15.5-gcc_11-python3.11-minimal-with-system-packages/size?tag=dev&label=with-system-packages&color=%23696969
:target: https://ghcr.io/sagemath/sage/sage-opensuse-15.5-gcc_11-python3.11-minimal-with-system-packages
@@ -2382,17 +2436,6 @@
* - Platform
- Images
-
- * - **ubuntu**-trusty-toolchain-gcc_9
-
- ‑*minimal*
- - |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-system-packages| |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-pre| |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets| |image-ubuntu-trusty-toolchain-gcc_9-minimal-with-targets-optional|
- - |codespace-ubuntu-trusty-toolchain-gcc_9-minimal|
- * - ‑*standard*
- - |image-ubuntu-trusty-toolchain-gcc_9-standard-with-system-packages| |image-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-pre| |image-ubuntu-trusty-toolchain-gcc_9-standard-with-targets| |image-ubuntu-trusty-toolchain-gcc_9-standard-with-targets-optional|
- - |codespace-ubuntu-trusty-toolchain-gcc_9-standard|
- * - ‑*maximal*
- - |image-ubuntu-trusty-toolchain-gcc_9-maximal-with-system-packages| |image-ubuntu-trusty-toolchain-gcc_9-maximal-with-targets-pre|
- -
* - **ubuntu**-xenial-toolchain-gcc_9
‑*minimal*
@@ -2459,6 +2502,17 @@
* - ‑*maximal*
- |image-ubuntu-mantic-maximal-with-system-packages| |image-ubuntu-mantic-maximal-with-targets-pre|
-
+ * - **ubuntu**-noble
+
+ ‑*minimal*
+ - |image-ubuntu-noble-minimal-with-system-packages| |image-ubuntu-noble-minimal-with-targets-pre| |image-ubuntu-noble-minimal-with-targets| |image-ubuntu-noble-minimal-with-targets-optional|
+ - |codespace-ubuntu-noble-minimal|
+ * - ‑*standard*
+ - |image-ubuntu-noble-standard-with-system-packages| |image-ubuntu-noble-standard-with-targets-pre| |image-ubuntu-noble-standard-with-targets| |image-ubuntu-noble-standard-with-targets-optional|
+ - |codespace-ubuntu-noble-standard|
+ * - ‑*maximal*
+ - |image-ubuntu-noble-maximal-with-system-packages| |image-ubuntu-noble-maximal-with-targets-pre|
+ -
* - **debian**-buster-gcc_spkg
‑*minimal*
@@ -2580,6 +2634,17 @@
* - ‑*maximal*
- |image-linuxmint-21.2-maximal-with-system-packages| |image-linuxmint-21.2-maximal-with-targets-pre|
-
+ * - **linuxmint**-21.3
+
+ ‑*minimal*
+ - |image-linuxmint-21.3-minimal-with-system-packages| |image-linuxmint-21.3-minimal-with-targets-pre| |image-linuxmint-21.3-minimal-with-targets| |image-linuxmint-21.3-minimal-with-targets-optional|
+ - |codespace-linuxmint-21.3-minimal|
+ * - ‑*standard*
+ - |image-linuxmint-21.3-standard-with-system-packages| |image-linuxmint-21.3-standard-with-targets-pre| |image-linuxmint-21.3-standard-with-targets| |image-linuxmint-21.3-standard-with-targets-optional|
+ - |codespace-linuxmint-21.3-standard|
+ * - ‑*maximal*
+ - |image-linuxmint-21.3-maximal-with-system-packages| |image-linuxmint-21.3-maximal-with-targets-pre|
+ -
* - **fedora**-30
‑*minimal*
@@ -2690,6 +2755,17 @@
* - ‑*maximal*
- |image-fedora-39-maximal-with-system-packages| |image-fedora-39-maximal-with-targets-pre|
-
+ * - **fedora**-40
+
+ ‑*minimal*
+ - |image-fedora-40-minimal-with-system-packages| |image-fedora-40-minimal-with-targets-pre| |image-fedora-40-minimal-with-targets| |image-fedora-40-minimal-with-targets-optional|
+ - |codespace-fedora-40-minimal|
+ * - ‑*standard*
+ - |image-fedora-40-standard-with-system-packages| |image-fedora-40-standard-with-targets-pre| |image-fedora-40-standard-with-targets| |image-fedora-40-standard-with-targets-optional|
+ - |codespace-fedora-40-standard|
+ * - ‑*maximal*
+ - |image-fedora-40-maximal-with-system-packages| |image-fedora-40-maximal-with-targets-pre|
+ -
* - **centos**-7-devtoolset-gcc_11
‑*minimal*
@@ -2767,6 +2843,17 @@
* - ‑*maximal*
- |image-gentoo-python3.11-maximal-with-system-packages| |image-gentoo-python3.11-maximal-with-targets-pre|
-
+ * - **gentoo**-python3.12
+
+ ‑*minimal*
+ - |image-gentoo-python3.12-minimal-with-system-packages| |image-gentoo-python3.12-minimal-with-targets-pre| |image-gentoo-python3.12-minimal-with-targets| |image-gentoo-python3.12-minimal-with-targets-optional|
+ - |codespace-gentoo-python3.12-minimal|
+ * - ‑*standard*
+ - |image-gentoo-python3.12-standard-with-system-packages| |image-gentoo-python3.12-standard-with-targets-pre| |image-gentoo-python3.12-standard-with-targets| |image-gentoo-python3.12-standard-with-targets-optional|
+ - |codespace-gentoo-python3.12-standard|
+ * - ‑*maximal*
+ - |image-gentoo-python3.12-maximal-with-system-packages| |image-gentoo-python3.12-maximal-with-targets-pre|
+ -
* - **archlinux**-latest
‑*minimal*
@@ -2778,28 +2865,6 @@
* - ‑*maximal*
- |image-archlinux-latest-maximal-with-system-packages| |image-archlinux-latest-maximal-with-targets-pre|
-
- * - **opensuse**-15.3-gcc_11-python3.9
-
- ‑*minimal*
- - |image-opensuse-15.3-gcc_11-python3.9-minimal-with-system-packages| |image-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-pre| |image-opensuse-15.3-gcc_11-python3.9-minimal-with-targets| |image-opensuse-15.3-gcc_11-python3.9-minimal-with-targets-optional|
- - |codespace-opensuse-15.3-gcc_11-python3.9-minimal|
- * - ‑*standard*
- - |image-opensuse-15.3-gcc_11-python3.9-standard-with-system-packages| |image-opensuse-15.3-gcc_11-python3.9-standard-with-targets-pre| |image-opensuse-15.3-gcc_11-python3.9-standard-with-targets| |image-opensuse-15.3-gcc_11-python3.9-standard-with-targets-optional|
- - |codespace-opensuse-15.3-gcc_11-python3.9-standard|
- * - ‑*maximal*
- - |image-opensuse-15.3-gcc_11-python3.9-maximal-with-system-packages| |image-opensuse-15.3-gcc_11-python3.9-maximal-with-targets-pre|
- -
- * - **opensuse**-15.4-gcc_11-python3.10
-
- ‑*minimal*
- - |image-opensuse-15.4-gcc_11-python3.10-minimal-with-system-packages| |image-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-pre| |image-opensuse-15.4-gcc_11-python3.10-minimal-with-targets| |image-opensuse-15.4-gcc_11-python3.10-minimal-with-targets-optional|
- - |codespace-opensuse-15.4-gcc_11-python3.10-minimal|
- * - ‑*standard*
- - |image-opensuse-15.4-gcc_11-python3.10-standard-with-system-packages| |image-opensuse-15.4-gcc_11-python3.10-standard-with-targets-pre| |image-opensuse-15.4-gcc_11-python3.10-standard-with-targets| |image-opensuse-15.4-gcc_11-python3.10-standard-with-targets-optional|
- - |codespace-opensuse-15.4-gcc_11-python3.10-standard|
- * - ‑*maximal*
- - |image-opensuse-15.4-gcc_11-python3.10-maximal-with-system-packages| |image-opensuse-15.4-gcc_11-python3.10-maximal-with-targets-pre|
- -
* - **opensuse**-15.5-gcc_11-python3.11
‑*minimal*
diff --git a/src/doc/en/reference/calculus/index.rst b/src/doc/en/reference/calculus/index.rst
index c9a5158e522..0f451a50613 100644
--- a/src/doc/en/reference/calculus/index.rst
+++ b/src/doc/en/reference/calculus/index.rst
@@ -23,6 +23,7 @@ Using calculus
- :doc:`More about symbolic variables and functions `
- :doc:`Main operations on symbolic expressions `
+- :doc:`sage/calculus/expr`
- :doc:`Assumptions about symbols and functions `
- :doc:`sage/symbolic/relation`
- :doc:`sage/symbolic/integration/integral`
@@ -65,6 +66,7 @@ Internal functionality supporting calculus
sage/symbolic/expression
sage/symbolic/callable
+ sage/calculus/expr
sage/symbolic/assumptions
sage/symbolic/relation
sage/calculus/calculus
diff --git a/src/doc/en/reference/references/index.rst b/src/doc/en/reference/references/index.rst
index 3d2aec45320..4c2d05b1ec7 100644
--- a/src/doc/en/reference/references/index.rst
+++ b/src/doc/en/reference/references/index.rst
@@ -695,6 +695,11 @@ REFERENCES:
*Finite hypergeometric functions*,
:arxiv:`1505.02900`
+.. [BEdG2009] Dietrich Burde, Bettina Eick, and Willem de Graaf.
+ *Computing faithful representations for nilpotent Lie algebras*.
+ J. Algebra, **322** no. 3 (2009) pp. 602-612.
+ doi:`10.1016/j.jalgebra.2009.04.041`, arxiv:`0807.2345`.
+
.. [Bee] Robert A. Beezer, *A First Course in Linear Algebra*,
http://linear.ups.edu/. Accessed 15 July 2010.
@@ -5556,6 +5561,10 @@ REFERENCES:
imaginary quadratic fields. Invent. Math. 103 (1991),
no. 1, 25--68.
+.. [RS2010] RUBIN, K., & SILVERBERG, A. (2010). CHOOSING THE CORRECT ELLIPTIC
+ CURVE IN THE CM METHOD. Mathematics of Computation, 79(269),
+ 545–561. :doi:`10.1090/S0025-5718-09-02266-2`
+
.. [Rud1958] \M. E. Rudin. *An unshellable triangulation of a
tetrahedron*. Bull. Amer. Math. Soc. 64 (1958), 90-91.
diff --git a/src/pyproject.toml.m4 b/src/pyproject.toml.m4
index 7065ba1468c..65e486244cb 100644
--- a/src/pyproject.toml.m4
+++ b/src/pyproject.toml.m4
@@ -1,3 +1,4 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
[build-system]
# Minimum requirements for the build system to execute.
requires = [
@@ -5,25 +6,156 @@ requires = [
# Some version of sage-conf is required.
# Note that PEP517/518 have no notion of optional sage_spkg dependencies:
# https://github.com/pypa/pip/issues/6144
- esyscmd(`sage-get-system-packages install-requires-toml \
- sage_conf \
- setuptools \
- wheel \
- sage_setup \
- cypari \
- cysignals \
- cython \
- gmpy2 \
- jinja2 \
- jupyter_core \
- numpy \
- pkgconfig \
- pplpy \
- memory_allocator \
- ')]
+ SPKG_INSTALL_REQUIRES_sage_conf
+ SPKG_INSTALL_REQUIRES_setuptools
+ SPKG_INSTALL_REQUIRES_wheel
+ SPKG_INSTALL_REQUIRES_sage_setup
+ SPKG_INSTALL_REQUIRES_cypari
+ SPKG_INSTALL_REQUIRES_cysignals
+ SPKG_INSTALL_REQUIRES_cython
+ SPKG_INSTALL_REQUIRES_gmpy2
+ SPKG_INSTALL_REQUIRES_jupyter_core
+ SPKG_INSTALL_REQUIRES_memory_allocator
+ SPKG_INSTALL_REQUIRES_numpy
+ SPKG_INSTALL_REQUIRES_pkgconfig
+ SPKG_INSTALL_REQUIRES_pplpy
+]
build-backend = "setuptools.build_meta"
+[project]
+name = "sagemath-standard"
+description = "Sage: Open Source Mathematics Software: Standard Python Library"
+dependencies = [
+ SPKG_INSTALL_REQUIRES_sage_conf
+ SPKG_INSTALL_REQUIRES_six
+dnl From build/pkgs/sagelib/dependencies
+ SPKG_INSTALL_REQUIRES_conway_polynomials
+ SPKG_INSTALL_REQUIRES_cypari
+ SPKG_INSTALL_REQUIRES_cysignals
+ SPKG_INSTALL_REQUIRES_cython
+ SPKG_INSTALL_REQUIRES_gmpy2
+ SPKG_INSTALL_REQUIRES_importlib_metadata
+ SPKG_INSTALL_REQUIRES_importlib_resources
+ SPKG_INSTALL_REQUIRES_jupyter_core
+ SPKG_INSTALL_REQUIRES_lrcalc_python
+ SPKG_INSTALL_REQUIRES_memory_allocator
+ SPKG_INSTALL_REQUIRES_numpy
+ SPKG_INSTALL_REQUIRES_pkgconfig
+ SPKG_INSTALL_REQUIRES_pplpy
+ SPKG_INSTALL_REQUIRES_primecountpy
+ SPKG_INSTALL_REQUIRES_requests
+ SPKG_INSTALL_REQUIRES_typing_extensions
+dnl From Makefile.in: SAGERUNTIME
+ SPKG_INSTALL_REQUIRES_ipython
+ SPKG_INSTALL_REQUIRES_pexpect
+dnl From Makefile.in: DOC_DEPENDENCIES
+ SPKG_INSTALL_REQUIRES_sphinx
+ SPKG_INSTALL_REQUIRES_networkx
+ SPKG_INSTALL_REQUIRES_scipy
+ SPKG_INSTALL_REQUIRES_sympy
+ SPKG_INSTALL_REQUIRES_matplotlib
+ SPKG_INSTALL_REQUIRES_pillow
+ SPKG_INSTALL_REQUIRES_mpmath
+ SPKG_INSTALL_REQUIRES_ipykernel
+ SPKG_INSTALL_REQUIRES_jupyter_client
+ SPKG_INSTALL_REQUIRES_ipywidgets
+ SPKG_INSTALL_REQUIRES_fpylll
+dnl pycryptosat # Sage distribution installs it as part of cryptominisat. According to its README on https://pypi.org/project/pycryptosat/: "The pycryptosat python package compiles while compiling CryptoMiniSat. It cannot be compiled on its own, it must be compiled at the same time as CryptoMiniSat."
+dnl Packages with important upper version bounds
+ SPKG_INSTALL_REQUIRES_ptyprocess
+]
+dynamic = ["version"]
+include(`pyproject_toml_metadata.m4')dnl'
+
+[project.optional-dependencies]
+R = [
+ SPKG_INSTALL_REQUIRES_rpy2
+]
+
+[project.readme]
+file = "README.rst"
+content-type = "text/x-rst"
+
[tool.conda-lock]
platforms = [
'osx-64', 'linux-64', 'linux-aarch64', 'osx-arm64'
]
+
+[tool.setuptools]
+script-files = [
+ # The sage script
+ "bin/sage",
+ # Other scripts that should be in the path also for OS packaging of sage:
+ "bin/sage-eval",
+ # Included because it is useful for doctesting/coverage testing user scripts too:
+ "bin/sage-runtests",
+ "bin/sage-fixdoctests",
+ "bin/sage-coverage",
+ # The following is deprecated but might still be used in user package install scripts
+ "bin/sage-cython",
+ # Helper scripts invoked by sage script
+ # (they would actually belong to something like libexec)
+ "bin/sage-cachegrind",
+ "bin/sage-callgrind",
+ "bin/sage-massif",
+ "bin/sage-omega",
+ "bin/sage-valgrind",
+ "bin/sage-venv-config",
+ "bin/sage-version.sh",
+ "bin/sage-cleaner",
+ # Only makes sense in sage-the-distribution. TODO: Move to another installation script.
+ "bin/sage-list-packages",
+ # Uncategorized scripts in alphabetical order
+ "bin/math-readline",
+ "bin/sage-env",
+ # sage-env-config -- installed by sage_conf
+ # sage-env-config.in -- not to be installed
+ "bin/sage-grep",
+ "bin/sage-grepdoc",
+ "bin/sage-inline-fortran",
+ "bin/sage-ipynb2rst",
+ "bin/sage-ipython",
+ "bin/sage-notebook",
+ "bin/sage-num-threads.py",
+ "bin/sage-preparse",
+ "bin/sage-python",
+ "bin/sage-run",
+ "bin/sage-run-cython",
+ "bin/sage-startuptime.py",
+ "bin/sage-update-version",
+]
+license-files = ["LICENSE.txt"]
+include-package-data = false
+
+[tool.setuptools.package-data]
+"sage.libs.gap" = ["sage.gaprc"]
+"sage.interfaces" = ["sage-maxima.lisp"]
+"sage.doctest" = ["tests/*"]
+"sage.repl.rich_output" = ["example*"]
+sage = [
+ "ext_data/*",
+ "ext_data/kenzo/*",
+ "ext_data/singular/*",
+ "ext_data/singular/function_field/*",
+ "ext_data/images/*",
+ "ext_data/doctest/*",
+ "ext_data/doctest/invalid/*",
+ "ext_data/gap/*",
+ "ext_data/gap/joyner/*",
+ "ext_data/mwrank/*",
+ "ext_data/notebook-ipython/*",
+ "ext_data/nbconvert/*",
+ "ext_data/graphs/*",
+ "ext_data/pari/*",
+ "ext_data/pari/dokchitser/*",
+ "ext_data/pari/buzzard/*",
+ "ext_data/pari/simon/*",
+ "ext_data/magma/*",
+ "ext_data/magma/latex/*",
+ "ext_data/magma/sage/*",
+ "ext_data/valgrind/*",
+ "ext_data/threejs/*",
+]
+
+[tool.setuptools.dynamic]
+version = {file = ["VERSION.txt"]}
diff --git a/src/sage/algebras/affine_nil_temperley_lieb.py b/src/sage/algebras/affine_nil_temperley_lieb.py
index ae3e8e87464..e40b0b24969 100644
--- a/src/sage/algebras/affine_nil_temperley_lieb.py
+++ b/src/sage/algebras/affine_nil_temperley_lieb.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Affine nilTemperley Lieb Algebra of type A
diff --git a/src/sage/algebras/algebra.py b/src/sage/algebras/algebra.py
index a63aae4e217..c2e8f37cd25 100644
--- a/src/sage/algebras/algebra.py
+++ b/src/sage/algebras/algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.modules
"""
Abstract base class for algebras
diff --git a/src/sage/algebras/all.py b/src/sage/algebras/all.py
index a98f5284eca..2fc072c5aaf 100644
--- a/src/sage/algebras/all.py
+++ b/src/sage/algebras/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Algebras
"""
@@ -14,56 +15,12 @@
# The full text of the GPL is available at:
#
# https://www.gnu.org/licenses/
-# ****************************************************************************
-from sage.misc.lazy_import import lazy_import
-
-# old-style class for associative algebras, use Parent instead
-from sage.rings.ring import Algebra
-
-import sage.algebras.catalog as algebras
-
-from .quatalg.all import *
-from .steenrod.all import *
-from .fusion_rings.all import *
-from .lie_algebras.all import *
-from .quantum_groups.all import *
-from .lie_conformal_algebras.all import *
-
-# Algebra base classes
-from .free_algebra import FreeAlgebra
-from .free_algebra_quotient import FreeAlgebraQuotient
-
-from .finite_dimensional_algebras.all import FiniteDimensionalAlgebra
-
-lazy_import('sage.algebras.group_algebra', 'GroupAlgebra')
-
-lazy_import('sage.algebras.iwahori_hecke_algebra', 'IwahoriHeckeAlgebra')
-lazy_import('sage.algebras.affine_nil_temperley_lieb',
- 'AffineNilTemperleyLiebTypeA')
-lazy_import('sage.algebras.nil_coxeter_algebra', 'NilCoxeterAlgebra')
-lazy_import('sage.algebras.schur_algebra', ['SchurAlgebra',
- 'SchurTensorModule'])
-
-lazy_import('sage.algebras.hall_algebra', 'HallAlgebra')
-
-lazy_import('sage.algebras.jordan_algebra', 'JordanAlgebra')
-
-lazy_import('sage.algebras.octonion_algebra', 'OctonionAlgebra')
-
-lazy_import('sage.algebras.shuffle_algebra', 'ShuffleAlgebra')
-
-from .clifford_algebra import CliffordAlgebra, ExteriorAlgebra
-from .weyl_algebra import DifferentialWeylAlgebra
-
-lazy_import('sage.algebras.commutative_dga', 'GradedCommutativeAlgebra')
-
-lazy_import('sage.algebras.rational_cherednik_algebra',
- 'RationalCherednikAlgebra')
-
-lazy_import('sage.algebras.tensor_algebra', 'TensorAlgebra')
-
-lazy_import('sage.algebras.q_system', 'QSystem')
+# *****************************************************************************
-lazy_import('sage.algebras.cluster_algebra', 'ClusterAlgebra')
+from sage.algebras.all__sagemath_modules import *
+from sage.algebras.all__sagemath_combinat import *
-lazy_import('sage.algebras.yangian', 'Yangian')
+from sage.algebras.quatalg.all import *
+from sage.algebras.fusion_rings.all import *
+from sage.algebras.lie_algebras.all import *
+from sage.algebras.lie_conformal_algebras.all import *
diff --git a/src/sage/algebras/all__sagemath_combinat.py b/src/sage/algebras/all__sagemath_combinat.py
new file mode 100644
index 00000000000..eb86573ec54
--- /dev/null
+++ b/src/sage/algebras/all__sagemath_combinat.py
@@ -0,0 +1,37 @@
+from sage.misc.lazy_import import lazy_import
+
+
+# Algebra base classes
+from sage.algebras.free_algebra import FreeAlgebra
+from sage.algebras.free_algebra_quotient import FreeAlgebraQuotient
+
+from sage.algebras.steenrod.all import *
+from sage.algebras.quantum_groups.all import *
+
+lazy_import('sage.algebras.iwahori_hecke_algebra', 'IwahoriHeckeAlgebra')
+lazy_import('sage.algebras.affine_nil_temperley_lieb',
+ 'AffineNilTemperleyLiebTypeA')
+lazy_import('sage.algebras.nil_coxeter_algebra', 'NilCoxeterAlgebra')
+lazy_import('sage.algebras.schur_algebra', ['SchurAlgebra',
+ 'SchurTensorModule'])
+
+lazy_import('sage.algebras.hall_algebra', 'HallAlgebra')
+
+lazy_import('sage.algebras.jordan_algebra', 'JordanAlgebra')
+
+lazy_import('sage.algebras.shuffle_algebra', 'ShuffleAlgebra')
+
+lazy_import('sage.algebras.commutative_dga', 'GradedCommutativeAlgebra')
+
+lazy_import('sage.algebras.rational_cherednik_algebra',
+ 'RationalCherednikAlgebra')
+
+lazy_import('sage.algebras.tensor_algebra', 'TensorAlgebra')
+
+lazy_import('sage.algebras.q_system', 'QSystem')
+
+lazy_import('sage.algebras.cluster_algebra', 'ClusterAlgebra')
+
+lazy_import('sage.algebras.yangian', 'Yangian')
+
+del lazy_import
diff --git a/src/sage/algebras/all__sagemath_modules.py b/src/sage/algebras/all__sagemath_modules.py
new file mode 100644
index 00000000000..fc74dabe241
--- /dev/null
+++ b/src/sage/algebras/all__sagemath_modules.py
@@ -0,0 +1,14 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.algebras.group_algebra', 'GroupAlgebra')
+
+# old-style class for associative algebras, use Parent instead
+from sage.rings.ring import Algebra
+
+from sage.algebras.finite_dimensional_algebras.all import FiniteDimensionalAlgebra
+from sage.algebras.clifford_algebra import CliffordAlgebra, ExteriorAlgebra
+from sage.algebras.weyl_algebra import DifferentialWeylAlgebra
+lazy_import('sage.algebras.octonion_algebra', 'OctonionAlgebra')
+
+import sage.algebras.catalog as algebras
+del lazy_import
diff --git a/src/sage/algebras/all__sagemath_singular.py b/src/sage/algebras/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/algebras/askey_wilson.py b/src/sage/algebras/askey_wilson.py
index 4943c73b36d..1624ecdd8e2 100644
--- a/src/sage/algebras/askey_wilson.py
+++ b/src/sage/algebras/askey_wilson.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Askey-Wilson Algebras
diff --git a/src/sage/algebras/associated_graded.py b/src/sage/algebras/associated_graded.py
index 5dd01321114..1831e6fcf52 100644
--- a/src/sage/algebras/associated_graded.py
+++ b/src/sage/algebras/associated_graded.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
r"""
Associated Graded Algebras To Filtered Algebras
diff --git a/src/sage/algebras/catalog.py b/src/sage/algebras/catalog.py
index afa5db12e8e..51490d1378c 100644
--- a/src/sage/algebras/catalog.py
+++ b/src/sage/algebras/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Catalog of Algebras
diff --git a/src/sage/algebras/cellular_basis.py b/src/sage/algebras/cellular_basis.py
index 8c474420378..5d82b9e280d 100644
--- a/src/sage/algebras/cellular_basis.py
+++ b/src/sage/algebras/cellular_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Cellular Basis
diff --git a/src/sage/algebras/clifford_algebra.py b/src/sage/algebras/clifford_algebra.py
index f87d52c94ce..dcca9556d99 100644
--- a/src/sage/algebras/clifford_algebra.py
+++ b/src/sage/algebras/clifford_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
r"""
Clifford Algebras
diff --git a/src/sage/algebras/clifford_algebra_element.pxd b/src/sage/algebras/clifford_algebra_element.pxd
index 14d5a7a625c..1f298519605 100644
--- a/src/sage/algebras/clifford_algebra_element.pxd
+++ b/src/sage/algebras/clifford_algebra_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Clifford algebra elements
"""
diff --git a/src/sage/algebras/clifford_algebra_element.pyx b/src/sage/algebras/clifford_algebra_element.pyx
index 52b994f48af..afb70566a78 100644
--- a/src/sage/algebras/clifford_algebra_element.pyx
+++ b/src/sage/algebras/clifford_algebra_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
"""
Clifford algebra elements
diff --git a/src/sage/algebras/cluster_algebra.py b/src/sage/algebras/cluster_algebra.py
index 17bc36b1661..ecec679d7a8 100644
--- a/src/sage/algebras/cluster_algebra.py
+++ b/src/sage/algebras/cluster_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.graphs sage.modules
r"""
Cluster algebras
diff --git a/src/sage/algebras/commutative_dga.py b/src/sage/algebras/commutative_dga.py
index 13565314140..19daa46eb78 100644
--- a/src/sage/algebras/commutative_dga.py
+++ b/src/sage/algebras/commutative_dga.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Commutative Differential Graded Algebras
diff --git a/src/sage/algebras/down_up_algebra.py b/src/sage/algebras/down_up_algebra.py
index 088e7ac30ad..a40ac03ab06 100644
--- a/src/sage/algebras/down_up_algebra.py
+++ b/src/sage/algebras/down_up_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
r"""
Down-Up Algebras
diff --git a/src/sage/algebras/exterior_algebra_groebner.pxd b/src/sage/algebras/exterior_algebra_groebner.pxd
index 2f2a0ff5cd8..517fd43c65e 100644
--- a/src/sage/algebras/exterior_algebra_groebner.pxd
+++ b/src/sage/algebras/exterior_algebra_groebner.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Exterior algebras Gröbner bases
"""
diff --git a/src/sage/algebras/exterior_algebra_groebner.pyx b/src/sage/algebras/exterior_algebra_groebner.pyx
index d296bae64f3..c57284fd01f 100644
--- a/src/sage/algebras/exterior_algebra_groebner.pyx
+++ b/src/sage/algebras/exterior_algebra_groebner.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
r"""
Exterior algebras Gröbner bases
diff --git a/src/sage/algebras/finite_dimensional_algebras/all.py b/src/sage/algebras/finite_dimensional_algebras/all.py
index add5ff8ecd6..ff747bdec4d 100644
--- a/src/sage/algebras/finite_dimensional_algebras/all.py
+++ b/src/sage/algebras/finite_dimensional_algebras/all.py
@@ -1 +1,2 @@
-from .finite_dimensional_algebra import FiniteDimensionalAlgebra
+# sage_setup: distribution = sagemath-modules
+from sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra import FiniteDimensionalAlgebra
diff --git a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py
index a3b8742b4e0..fb513c7a371 100644
--- a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py
+++ b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Finite-Dimensional Algebras
"""
diff --git a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd
index c13b8dbab07..77a504b0258 100644
--- a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd
+++ b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport AlgebraElement, Element, Vector
from sage.matrix.matrix cimport Matrix
diff --git a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx
index 08feb228e5e..ca7d3b552ed 100644
--- a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx
+++ b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Elements of Finite Algebras
"""
diff --git a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py
index 15f0881bb8b..46b9141cd0b 100644
--- a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py
+++ b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.finite_rings (because all doctests use GF)
"""
Ideals of Finite Algebras
diff --git a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py
index d2114511ae6..3dff53425c6 100644
--- a/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py
+++ b/src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Morphisms Between Finite Algebras
"""
diff --git a/src/sage/algebras/finite_gca.py b/src/sage/algebras/finite_gca.py
index 4fb15147900..0110373ec92 100644
--- a/src/sage/algebras/finite_gca.py
+++ b/src/sage/algebras/finite_gca.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
r"""
Finite dimensional graded commutative algebras
diff --git a/src/sage/algebras/free_algebra.py b/src/sage/algebras/free_algebra.py
index e84a6b03f24..2c58a1c2157 100644
--- a/src/sage/algebras/free_algebra.py
+++ b/src/sage/algebras/free_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Free algebras
diff --git a/src/sage/algebras/free_algebra_element.py b/src/sage/algebras/free_algebra_element.py
index 9fe2dcfb554..fd86d48b7c8 100644
--- a/src/sage/algebras/free_algebra_element.py
+++ b/src/sage/algebras/free_algebra_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Free algebra elements
diff --git a/src/sage/algebras/free_algebra_quotient.py b/src/sage/algebras/free_algebra_quotient.py
index 94be310a0b1..2fe8554eb62 100644
--- a/src/sage/algebras/free_algebra_quotient.py
+++ b/src/sage/algebras/free_algebra_quotient.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Finite dimensional free algebra quotients
diff --git a/src/sage/algebras/free_algebra_quotient_element.py b/src/sage/algebras/free_algebra_quotient_element.py
index 559d4246ac0..4e78802996e 100644
--- a/src/sage/algebras/free_algebra_quotient_element.py
+++ b/src/sage/algebras/free_algebra_quotient_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Free algebra quotient elements
diff --git a/src/sage/algebras/free_zinbiel_algebra.py b/src/sage/algebras/free_zinbiel_algebra.py
index 720ee803d9b..99e830664ed 100644
--- a/src/sage/algebras/free_zinbiel_algebra.py
+++ b/src/sage/algebras/free_zinbiel_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Free Zinbiel Algebras
diff --git a/src/sage/algebras/fusion_rings/all.py b/src/sage/algebras/fusion_rings/all.py
index bf9c016510f..78410e74818 100644
--- a/src/sage/algebras/fusion_rings/all.py
+++ b/src/sage/algebras/fusion_rings/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Fusion Rings
"""
@@ -15,3 +16,4 @@
lazy_import('sage.algebras.fusion_rings.fusion_ring', ['FusionRing'])
lazy_import('sage.algebras.fusion_rings.fusion_double', ['FusionDouble'])
+del lazy_import
diff --git a/src/sage/algebras/fusion_rings/f_matrix.py b/src/sage/algebras/fusion_rings/f_matrix.py
index 47f5976cf03..950eb94f121 100644
--- a/src/sage/algebras/fusion_rings/f_matrix.py
+++ b/src/sage/algebras/fusion_rings/f_matrix.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
r"""
The F-Matrix of a Fusion Ring
"""
diff --git a/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd b/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd
index e0908ab5884..65a159a3e54 100644
--- a/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd
+++ b/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
cdef _fmat(fvars, Nk_ij, one, a, b, c, d, x, y)
cpdef _backward_subs(factory, bint flatten=*)
cpdef executor(tuple params)
diff --git a/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx b/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx
index a9b7eb50fab..23eadf9559d 100644
--- a/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx
+++ b/src/sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Fast F-Matrix Methods
"""
diff --git a/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd b/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd
index a992f0339a4..8a32ad1bc2e 100644
--- a/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd
+++ b/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd
@@ -1,2 +1,4 @@
+# sage_setup: distribution = sagemath-singular
+
cpdef _unflatten_entries(factory, list entries)
cpdef executor(tuple params)
diff --git a/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx b/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx
index ad6e8a1621e..881a2ac6e29 100644
--- a/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx
+++ b/src/sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Fast Fusion Ring Methods for Computing Braid Group Representations
"""
diff --git a/src/sage/algebras/fusion_rings/fusion_double.py b/src/sage/algebras/fusion_rings/fusion_double.py
index d87a7a782a7..d4238db749e 100644
--- a/src/sage/algebras/fusion_rings/fusion_double.py
+++ b/src/sage/algebras/fusion_rings/fusion_double.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
The Fusion Ring of the Drinfeld Double of a Finite Group
"""
diff --git a/src/sage/algebras/fusion_rings/fusion_ring.py b/src/sage/algebras/fusion_rings/fusion_ring.py
index 72bc0f8600c..31bba004e55 100644
--- a/src/sage/algebras/fusion_rings/fusion_ring.py
+++ b/src/sage/algebras/fusion_rings/fusion_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Fusion Rings
"""
diff --git a/src/sage/algebras/fusion_rings/poly_tup_engine.pxd b/src/sage/algebras/fusion_rings/poly_tup_engine.pxd
index 50493691f29..88048320646 100644
--- a/src/sage/algebras/fusion_rings/poly_tup_engine.pxd
+++ b/src/sage/algebras/fusion_rings/poly_tup_engine.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.algebras.fusion_rings.shm_managers cimport KSHandler
from sage.rings.number_field.number_field_element cimport NumberFieldElement_absolute
from sage.rings.polynomial.multi_polynomial_libsingular cimport MPolynomial_libsingular, MPolynomialRing_libsingular
diff --git a/src/sage/algebras/fusion_rings/poly_tup_engine.pyx b/src/sage/algebras/fusion_rings/poly_tup_engine.pyx
index e44fb68b836..38b2f28efc3 100644
--- a/src/sage/algebras/fusion_rings/poly_tup_engine.pyx
+++ b/src/sage/algebras/fusion_rings/poly_tup_engine.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Arithmetic Engine for Polynomials as Tuples
"""
diff --git a/src/sage/algebras/fusion_rings/shm_managers.pxd b/src/sage/algebras/fusion_rings/shm_managers.pxd
index 5b1576bb677..0ef39036de0 100644
--- a/src/sage/algebras/fusion_rings/shm_managers.pxd
+++ b/src/sage/algebras/fusion_rings/shm_managers.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
cimport numpy as np
from sage.rings.number_field.number_field_base cimport NumberField
from sage.rings.number_field.number_field_element cimport NumberFieldElement_absolute
diff --git a/src/sage/algebras/fusion_rings/shm_managers.pyx b/src/sage/algebras/fusion_rings/shm_managers.pyx
index 40d2eb9c805..de1fad2f0e7 100644
--- a/src/sage/algebras/fusion_rings/shm_managers.pyx
+++ b/src/sage/algebras/fusion_rings/shm_managers.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
r"""
Shared Memory Managers for F-Symbol Attributes
diff --git a/src/sage/algebras/group_algebra.py b/src/sage/algebras/group_algebra.py
index 5d9f56cd6d1..a0e3ac01aab 100644
--- a/src/sage/algebras/group_algebra.py
+++ b/src/sage/algebras/group_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.groups sage.modules
r"""
Group algebras
diff --git a/src/sage/algebras/hall_algebra.py b/src/sage/algebras/hall_algebra.py
index aef0df7ce5a..a24aa1e0873 100644
--- a/src/sage/algebras/hall_algebra.py
+++ b/src/sage/algebras/hall_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Hall Algebras
diff --git a/src/sage/algebras/hecke_algebras/all.py b/src/sage/algebras/hecke_algebras/all.py
index 20f53ea58fe..cade22cbaea 100644
--- a/src/sage/algebras/hecke_algebras/all.py
+++ b/src/sage/algebras/hecke_algebras/all.py
@@ -1,4 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Hecke Algebras
"""
-#from sage.misc.lazy_import import lazy_import
diff --git a/src/sage/algebras/hecke_algebras/ariki_koike_algebra.py b/src/sage/algebras/hecke_algebras/ariki_koike_algebra.py
index f34beb5a1f8..de54fe413d8 100644
--- a/src/sage/algebras/hecke_algebras/ariki_koike_algebra.py
+++ b/src/sage/algebras/hecke_algebras/ariki_koike_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Ariki-Koike Algebras
diff --git a/src/sage/algebras/hecke_algebras/cubic_hecke_algebra.py b/src/sage/algebras/hecke_algebras/cubic_hecke_algebra.py
index 4f2a604aa8b..1d4dbf530fe 100644
--- a/src/sage/algebras/hecke_algebras/cubic_hecke_algebra.py
+++ b/src/sage/algebras/hecke_algebras/cubic_hecke_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups sage.modules
r"""
Cubic Hecke Algebras
diff --git a/src/sage/algebras/hecke_algebras/cubic_hecke_base_ring.py b/src/sage/algebras/hecke_algebras/cubic_hecke_base_ring.py
index 90d6657d309..5cc0920512b 100644
--- a/src/sage/algebras/hecke_algebras/cubic_hecke_base_ring.py
+++ b/src/sage/algebras/hecke_algebras/cubic_hecke_base_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.libs.pari (for factorization)
r"""
Cubic Hecke Base Rings
diff --git a/src/sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py b/src/sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py
index c0587117753..d232c974a95 100644
--- a/src/sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py
+++ b/src/sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
r"""
Cubic Hecke matrix representations
diff --git a/src/sage/algebras/iwahori_hecke_algebra.py b/src/sage/algebras/iwahori_hecke_algebra.py
index 31f15e50c1a..aff140d2a6d 100644
--- a/src/sage/algebras/iwahori_hecke_algebra.py
+++ b/src/sage/algebras/iwahori_hecke_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Iwahori-Hecke Algebras
diff --git a/src/sage/algebras/jordan_algebra.py b/src/sage/algebras/jordan_algebra.py
index f783dc890c8..986f892093a 100644
--- a/src/sage/algebras/jordan_algebra.py
+++ b/src/sage/algebras/jordan_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Jordan Algebras
diff --git a/src/sage/algebras/letterplace/all.py b/src/sage/algebras/letterplace/all.py
index e69de29bb2d..84ec2b51067 100644
--- a/src/sage/algebras/letterplace/all.py
+++ b/src/sage/algebras/letterplace/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-singular
diff --git a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pxd b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pxd
index d22fe4e9a40..d10eeec0317 100644
--- a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pxd
+++ b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
###############################################################################
#
# Copyright (C) 2011 Simon King
diff --git a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
index 0e23ed2feea..f9c33e8c531 100644
--- a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
+++ b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Weighted homogeneous elements of free algebras, in letterplace implementation
diff --git a/src/sage/algebras/letterplace/free_algebra_letterplace.pxd b/src/sage/algebras/letterplace/free_algebra_letterplace.pxd
index 47a7275aba0..766f1e2c569 100644
--- a/src/sage/algebras/letterplace/free_algebra_letterplace.pxd
+++ b/src/sage/algebras/letterplace/free_algebra_letterplace.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
###############################################################################
#
# Copyright (C) 2011 Simon King
diff --git a/src/sage/algebras/letterplace/free_algebra_letterplace.pyx b/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
index 278596cc177..b9b202f7f63 100644
--- a/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
+++ b/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
###############################################################################
#
# Copyright (C) 2011 Simon King
diff --git a/src/sage/algebras/letterplace/letterplace_ideal.pyx b/src/sage/algebras/letterplace/letterplace_ideal.pyx
index eeebf4422a4..30f86256afa 100644
--- a/src/sage/algebras/letterplace/letterplace_ideal.pyx
+++ b/src/sage/algebras/letterplace/letterplace_ideal.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Homogeneous ideals of free algebras
diff --git a/src/sage/algebras/lie_algebras/all.py b/src/sage/algebras/lie_algebras/all.py
index 73ea8361ff1..cf2fd88ac76 100644
--- a/src/sage/algebras/lie_algebras/all.py
+++ b/src/sage/algebras/lie_algebras/all.py
@@ -2,7 +2,7 @@
Lie Algebras
"""
-#*****************************************************************************
+# *****************************************************************************
# Copyright (C) 2013 Travis Scrimshaw
#
# Distributed under the terms of the GNU General Public License (GPL)
@@ -14,10 +14,11 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
from sage.misc.lazy_import import lazy_import
lazy_import('sage.algebras.lie_algebras.lie_algebra', 'LieAlgebra')
-#from kac_moody import KacMoodyAlgebra
+# from kac_moody import KacMoodyAlgebra
lazy_import('sage.algebras.lie_algebras', 'examples', 'lie_algebras')
+del lazy_import
diff --git a/src/sage/algebras/lie_algebras/all__sagemath_modules.py b/src/sage/algebras/lie_algebras/all__sagemath_modules.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/algebras/lie_algebras/lie_algebra_element.pxd b/src/sage/algebras/lie_algebras/lie_algebra_element.pxd
index 3677eb29587..12e3c4f467c 100644
--- a/src/sage/algebras/lie_algebras/lie_algebra_element.pxd
+++ b/src/sage/algebras/lie_algebras/lie_algebra_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport Element
from sage.structure.element_wrapper cimport ElementWrapper
from sage.structure.sage_object cimport SageObject
diff --git a/src/sage/algebras/lie_algebras/lie_algebra_element.pyx b/src/sage/algebras/lie_algebras/lie_algebra_element.pyx
index 635b30c49da..814f17a8e6b 100644
--- a/src/sage/algebras/lie_algebras/lie_algebra_element.pyx
+++ b/src/sage/algebras/lie_algebras/lie_algebra_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
"""
Lie Algebra Elements
diff --git a/src/sage/algebras/lie_algebras/representation.py b/src/sage/algebras/lie_algebras/representation.py
index 9d96c42c6fc..c6bd62dd0cc 100644
--- a/src/sage/algebras/lie_algebras/representation.py
+++ b/src/sage/algebras/lie_algebras/representation.py
@@ -16,7 +16,10 @@
# https://www.gnu.org/licenses/
# ****************************************************************************
+from sage.misc.lazy_attribute import lazy_attribute
+from sage.misc.cachefunc import cached_method
from sage.sets.family import Family, AbstractFamily
+from sage.matrix.constructor import matrix
from sage.combinat.free_module import CombinatorialFreeModule
from sage.categories.modules import Modules
from copy import copy
@@ -94,6 +97,44 @@ def _test_representation(self, **options):
for v in S:
tester.assertEqual(x.bracket(y) * v, x * (y * v) - y * (x * v))
+ def representation_matrix(self, elt):
+ """
+ Return the matrix for the action of ``elt`` on ``self``.
+
+ EXAMPLES::
+
+ sage: H1 = lie_algebras.Heisenberg(QQ, 1)
+ sage: F = H1.faithful_representation(algorithm="minimal")
+ sage: P1 = F.representation_matrix(H1.gen(0)); P1
+ [0 0 0]
+ [0 0 0]
+ [1 0 0]
+ sage: Q1 = F.representation_matrix(H1.gen(1)); Q1
+ [ 0 0 0]
+ [ 0 0 -1]
+ [ 0 0 0]
+ sage: Z = P1.commutator(Q1); Z
+ [0 0 0]
+ [1 0 0]
+ [0 0 0]
+ sage: P1.commutator(Z) == Q1.commutator(Z) == 0
+ True
+ sage: (H1.gen(0) * F.an_element()).to_vector()
+ (0, 0, 2)
+ sage: P1 * F.an_element().to_vector()
+ (0, 0, 2)
+ sage: (H1.gen(1) * F.an_element()).to_vector()
+ (0, -3, 0)
+ sage: Q1 * F.an_element().to_vector()
+ (0, -3, 0)
+ sage: (H1.basis()['z'] * F.an_element()).to_vector()
+ (0, 2, 0)
+ sage: Z * F.an_element().to_vector()
+ (0, 2, 0)
+ """
+ B = self.basis()
+ return matrix([(elt * B[k]).to_vector() for k in self.get_order()]).transpose()
+
class RepresentationByMorphism(CombinatorialFreeModule, Representation_abstract):
r"""
@@ -433,3 +474,320 @@ def _acted_upon_(self, scalar, self_on_left=False):
return None
return P.zero()
return super()._acted_upon_(scalar, self_on_left)
+
+
+class FaithfulRepresentationNilpotentPBW(CombinatorialFreeModule, Representation_abstract):
+ r"""
+ Return a faithful reprensetation of a nilpotent Lie algebra
+ constructed using the PBW basis.
+
+ Let `L` be a `k`-step nilpotent Lie algebra. Define a weight function
+ on elements in `L` by the lower central series of `L`. Then a faithful
+ representation of `L` is `U(L) / U(L)^{k+1}`, where `U(L)^{k+1}`
+ is the (twosided) ideal of `U(L)` generated by all monomials
+ of weight at least `k + 1`.
+
+ We can also expand the ideal keeping the property that `I \cap Z(L) = 0`.
+ The resulting quotient `U(L) / I` remains faithful and is a minimal
+ faithful representation of `L` in the sense that it has no faithful
+ submodules or quotients. (Note: this is not necessarily the smallest
+ dimensional faithful representation of `L`.)
+
+ We consider an example of the rank 2 Heisenberg Lie algebra,
+ but with a non-standard basis given by `a = p_1 + z`, `b = q_1`,
+ and `c = q_1 + z`::
+
+ sage: scoeffs = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: TestSuite(L).run(elements=list(L.basis()))
+ sage: L.is_nilpotent()
+ True
+ sage: L.derived_series()
+ (Lie algebra on 3 generators (a, b, c) over Rational Field,
+ Ideal (b - c) of Lie algebra on 3 generators (a, b, c) over Rational Field,
+ Ideal () of Lie algebra on 3 generators (a, b, c) over Rational Field)
+ sage: F = L.faithful_representation()
+ sage: L.an_element() * F.an_element()
+ 2*F[1, 0, 0] + 8*F[1, 1, 0] + 3*F[2, 0, 0] + 4*F[0, 1, 0]
+ + 4*F[0, 2, 0] + 4*F[0, 0, 1]
+
+ sage: MF = L.faithful_representation(algorithm="minimal")
+ sage: MF.dimension()
+ 3
+ sage: [MF.representation_matrix(be) for be in L.basis()]
+ [
+ [0 0 0] [ 0 0 0] [ 0 0 0]
+ [0 0 0] [ 0 0 -1] [ 1 0 -1]
+ [1 0 0], [ 0 0 0], [ 0 0 0]
+ ]
+
+ An example with ``minimal=True`` for `H_2 \oplus A_1`, where `A_1` is
+ a `1`-dimensional Abelian Lie algebra::
+
+ sage: scoeffs = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: F = L.faithful_representation(); F
+ Faithful 11 dimensional representation of Lie algebra on 4
+ generators (a, b, c, d) over Rational Field
+ sage: MF = L.faithful_representation(algorithm="minimal"); MF
+ Minimal faithful representation of Lie algebra on 4
+ generators (a, b, c, d) over Rational Field
+ sage: MF.dimension()
+ 4
+
+ INPUT:
+
+ - ``minimal`` -- boolean (default: ``False``); whether to construct
+ the minimal basis or not
+
+ REFERENCES:
+
+ - [BEdG2009]_
+ """
+ def __init__(self, L, minimal=False):
+ r"""
+ Initialize ``self``.
+
+ EXAMPLES::
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: F = H2.faithful_representation()
+ sage: TestSuite(F).run(elements=list(F.basis()))
+ sage: MF = H2.faithful_representation(algorithm="minimal")
+ sage: TestSuite(MF).run(elements=list(MF.basis()))
+
+ sage: sc = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
+ sage: L. = LieAlgebra(QQ, sc)
+ sage: F = L.faithful_representation()
+ sage: TestSuite(F).run(elements=list(F.basis()))
+ sage: MF = L.faithful_representation(algorithm="minimal")
+ sage: TestSuite(MF).run(elements=list(MF.basis()))
+ """
+ LCS = L.lower_central_series()
+ if LCS[-1].dimension() != 0:
+ raise ValueError("the Lie algebra must be nilpotent")
+ # construct an appropriate basis of L
+ basis_by_deg = {}
+ self._step = len(LCS) - 1
+ self._minimal = minimal
+ if self._minimal:
+ Z = L.center()
+ ZB = [L(b) for b in Z.basis()]
+ prev = LCS[-1]
+ for D in reversed(LCS[:-1]):
+ cur = []
+ for ind in range(len(ZB) - 1, -1, -1):
+ z = ZB[ind]
+ if z in D:
+ ZB.pop(ind)
+ cur.append(z)
+ k = self._step - len(basis_by_deg)
+ basis_by_deg[k] = cur
+ temp = [bred for b in D.basis() if (bred := Z.reduce(prev.reduce(L(b))))]
+ basis_by_deg[k].extend(L.echelon_form(temp))
+ prev = D
+ else:
+ prev = LCS[-1]
+ for D in reversed(LCS[:-1]):
+ temp = [L(bred) for b in D.basis() if (bred := prev.reduce(L(b)))]
+ basis_by_deg[self._step-len(basis_by_deg)] = L.echelon_form(temp)
+ prev = D
+
+ L_basis = sum((basis_by_deg[deg] for deg in sorted(basis_by_deg)), [])
+
+ if all(len(b.support()) == 1 for b in L_basis):
+ self._Lp = L
+ else:
+ cob = matrix([b._vector_() for b in L_basis]).transpose()
+ self._invcob = cob.inverse()
+ scoeffs = {}
+ for i, b in enumerate(L_basis):
+ for j, bp in enumerate(L_basis[i+1:], start=i+1):
+ scoeffs[i, j] = (self._invcob * b.bracket(bp)._vector_()).dict()
+ index_set = tuple(range(L.dimension()))
+ from sage.algebras.lie_algebras.lie_algebra import LieAlgebra
+ self._Lp = LieAlgebra(L.base_ring(), scoeffs, index_set=index_set)
+
+ self._pbw = self._Lp.pbw_basis()
+ self._degrees = tuple(sum(([deg] * len(B) for deg, B in sorted(basis_by_deg.items())), []))
+
+ from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
+ from sage.combinat.integer_vector_weighted import WeightedIntegerVectors
+ indices = DisjointUnionEnumeratedSets([WeightedIntegerVectors(n, self._degrees)
+ for n in range(self._step+1)])
+
+ if self._minimal:
+ X = set([tuple(index) for index in indices])
+ monoid = self._pbw._indices
+ I = monoid._indices
+ one = L.base_ring().one()
+ pbw_gens = self._pbw.algebra_generators()
+ ZB = frozenset([L(b) for b in Z.basis()])
+ Zind = [i for i, b in enumerate(L_basis) if b in ZB]
+ Ztup = set()
+ for i in Zind:
+ vec = [0] * L.dimension()
+ vec[i] = 1
+ Ztup.add(tuple(vec))
+
+ def as_exp(s):
+ sm = s._monomial
+ return tuple([sm[i] if i in sm else 0 for i in I])
+
+ def test_ideal(m, X):
+ elt = self._pbw.element_class(self._pbw, {monoid(list(zip(I, m))): one})
+ for g in pbw_gens:
+ gelt = g * elt
+ if any(as_exp(s) in X for s in gelt.support()):
+ return False
+ return True
+
+ to_remove = set([None])
+ while to_remove:
+ X -= to_remove
+ to_remove = set()
+ for m in X:
+ m = tuple(m)
+ if m in Ztup or not test_ideal(m, X):
+ continue
+ to_remove.add(m)
+ indices = sorted(X)
+
+ Representation_abstract.__init__(self, L)
+ CombinatorialFreeModule.__init__(self, L.base_ring(), indices, prefix='F', bracket=False)
+
+ def _repr_(self):
+ r"""
+ Return a string representation of ``self``.
+
+ EXAMPLES::
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: H2.faithful_representation()
+ Faithful 16 dimensional representation of Heisenberg algebra
+ of rank 2 over Rational Field
+ """
+ if self._minimal:
+ return "Minimal faithful representation of {}".format(self._lie_algebra)
+ return "Faithful {} dimensional representation of {}".format(self.dimension(), self._lie_algebra)
+
+ def _latex_(self):
+ r"""
+ Return a string representation of ``self``.
+
+ EXAMPLES::
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: latex(H2.faithful_representation())
+ U(\text{\texttt{Heisenberg...}}) / U(\text{\texttt{Heisenberg...}})^{3}
+ """
+ from sage.misc.latex import latex
+ g = latex(self._lie_algebra)
+ ret = "U({0}) / U({0})^{{{1}}}".format(g, self._step+1)
+ if self._minimal:
+ return "\\min " + ret
+ return ret
+
+ def _project(self, elt):
+ r"""
+ The projection to ``self`` from the PBW basis.
+
+ EXAMPLES::
+
+ sage: sc = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
+ sage: L. = LieAlgebra(QQ, sc)
+ sage: F = L.faithful_representation()
+ sage: elt = F._to_pbw(a + b + c)^2; elt
+ PBW[0]^2 + 4*PBW[0]*PBW[1] - 2*PBW[0]*PBW[2] + 4*PBW[1]^2
+ - 4*PBW[1]*PBW[2] + PBW[2]^2 + 2*PBW[2]
+ sage: F._project(elt)
+ 2*F[0, 0, 1] + 4*F[0, 2, 0] + 4*F[1, 1, 0] + F[2, 0, 0]
+ sage: F._project(F._to_pbw(a + b + c)^3)
+ 0
+ """
+ ret = {}
+ I = self._pbw._indices._indices
+ if self._minimal:
+ for m, c in elt._monomial_coefficients.items():
+ mm = m._monomial
+ vec = tuple([mm[i] if i in mm else 0 for i in I])
+ if vec in self._indices:
+ ret[self._indices(vec)] = c
+ else:
+ for m, c in elt._monomial_coefficients.items():
+ mm = m._monomial
+ vec = [mm[i] if i in mm else 0 for i in I]
+ if sum(e * d for e, d in zip(vec, self._degrees)) <= self._step:
+ ret[self._indices(vec)] = c
+ return self.element_class(self, ret)
+
+ def _to_pbw(self, elt):
+ """
+ Return the PBW element corresponding to ``elt``.
+
+ EXAMPLES::
+
+ sage: sc = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
+ sage: L. = LieAlgebra(QQ, sc)
+ sage: F = L.faithful_representation()
+ sage: F._to_pbw(a)
+ PBW[0]
+ sage: F._to_pbw(b)
+ PBW[1]
+ sage: F._to_pbw(c)
+ PBW[1] - PBW[2]
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: F = H2.faithful_representation()
+ sage: F._to_pbw(sum(H2.basis()))
+ PBW['p1'] + PBW['p2'] + PBW['q1'] + PBW['q2'] + PBW['z']
+ """
+ if self._Lp is self._lie_algebra:
+ return self._pbw(elt)
+ return self._pbw(self._Lp.from_vector(self._invcob * elt._vector_()))
+
+ class Element(CombinatorialFreeModule.Element):
+ def _lift_pbw(self):
+ """
+ Return ``self`` as an element of the PBW basis.
+
+ EXAMPLES::
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: F = H2.faithful_representation()
+ sage: F.an_element()._lift_pbw()
+ 3*PBW['q1'] + 2*PBW['q2'] + 2
+ """
+ P = self.parent()
+ monoid = P._pbw._indices
+ I = monoid._indices
+ return P._pbw.element_class(P._pbw, {monoid(list(zip(I, m))): coeff
+ for m, coeff in self._monomial_coefficients.items()})
+
+ def _acted_upon_(self, scalar, self_on_left=False):
+ r"""
+ Return the action of ``scalar`` on ``self``.
+
+ EXAMPLES::
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: F = H2.faithful_representation()
+ sage: H2.an_element()
+ p1
+ sage: F.an_element()
+ 2*F[0, 0, 0, 0, 0] + 2*F[0, 0, 0, 1, 0] + 3*F[0, 0, 1, 0, 0]
+ sage: H2.an_element() * F.an_element()
+ 2*F[1, 0, 0, 0, 0] + 2*F[1, 0, 0, 1, 0] + 3*F[1, 0, 1, 0, 0]
+ sage: 5 * F.an_element()
+ 10*F[0, 0, 0, 0, 0] + 10*F[0, 0, 0, 1, 0] + 15*F[0, 0, 1, 0, 0]
+ """
+ P = self.parent()
+ if scalar in P._lie_algebra:
+ if self_on_left:
+ return None
+ if not self: # we are (already) the zero vector
+ return self
+ scalar = P._lie_algebra(scalar)
+ return P._project(P._to_pbw(scalar) * self._lift_pbw())
+
+ return super()._acted_upon_(scalar, self_on_left)
diff --git a/src/sage/algebras/lie_algebras/structure_coefficients.py b/src/sage/algebras/lie_algebras/structure_coefficients.py
index 6c3eedd0a21..6ef1accb83b 100644
--- a/src/sage/algebras/lie_algebras/structure_coefficients.py
+++ b/src/sage/algebras/lie_algebras/structure_coefficients.py
@@ -133,7 +133,7 @@ def __classcall_private__(cls, R, s_coeff, names=None, index_set=None, **kwds):
from sage.algebras.lie_algebras.abelian import AbelianLieAlgebra
return AbelianLieAlgebra(R, names, index_set, **kwds)
- if (names is None and len(index_set) <= 1) or len(names) <= 1:
+ if (names is None and len(index_set) <= 1) or (names is not None and len(names) <= 1):
from sage.algebras.lie_algebras.abelian import AbelianLieAlgebra
return AbelianLieAlgebra(R, names, index_set, **kwds)
diff --git a/src/sage/algebras/lie_algebras/subalgebra.py b/src/sage/algebras/lie_algebras/subalgebra.py
index 441b55a9fad..aee197edbbb 100644
--- a/src/sage/algebras/lie_algebras/subalgebra.py
+++ b/src/sage/algebras/lie_algebras/subalgebra.py
@@ -163,7 +163,6 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
sage: J.reduce(I(Z) + I(W))
W
"""
-
@staticmethod
def __classcall_private__(cls, ambient, gens, ideal=False,
order=None, category=None):
@@ -193,10 +192,42 @@ def __classcall_private__(cls, ambient, gens, ideal=False,
sage: T3 = L.subalgebra([0, 0])
sage: T1 is T2 and T2 is T3
True
+
+ Subalgebras generated by a subalgebra returns the same subalgebra::
+
+ sage: S1 = L.subalgebra(X)
+ sage: S2 = L.subalgebra(S1)
+ sage: S1 is S2
+ True
+
+ We can have subalgebras generated by subalgebras::
+
+ sage: scoeffs = {('a','d'): {'a':1}, ('a','e'): {'b':-1},
+ ....: ('b','d'): {'b':1}, ('b','e'): {'a':1},
+ ....: ('d','e'): {'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: S1 = L.subalgebra(a)
+ sage: S2 = L.subalgebra([b, e])
+ sage: S = L.subalgebra([S1, S2])
+ sage: S
+ Subalgebra generated by (a, a, b, e) of Lie algebra on
+ 5 generators (a, b, c, d, e) over Rational Field
+ sage: S.basis()
+ Family (a, b, e)
"""
+ if isinstance(gens, LieSubalgebra_finite_dimensional_with_basis):
+ if not ideal or gens._is_ideal:
+ return gens
+ gens = gens.lie_algebra_generators()
if not isinstance(gens, (list, tuple)):
gens = [gens]
- gens = tuple(ambient(gen) for gen in gens if not gen.is_zero())
+ new_gens = []
+ for gen in gens:
+ if isinstance(gen, LieSubalgebra_finite_dimensional_with_basis):
+ new_gens.extend(ambient(b) for b in gen.basis())
+ elif not gen.is_zero():
+ new_gens.append(ambient(gen))
+ gens = tuple(new_gens)
if not ideal and isinstance(ambient,
LieSubalgebra_finite_dimensional_with_basis):
@@ -281,8 +312,8 @@ def __contains__(self, x):
True
"""
- if x in self.ambient():
- x = self.ambient()(x)
+ if x in self._ambient:
+ x = self._ambient(x)
return x.to_vector() in self.module()
return super().__contains__(x)
@@ -398,7 +429,7 @@ def _element_constructor_(self, x):
P = x.parent()
if P is self:
return x
- if P == self.ambient():
+ if P == self._ambient:
return self.retract(x)
except AttributeError:
pass
@@ -448,7 +479,7 @@ def _to_m(self, X):
(2, 3, 1)
"""
mc = X.monomial_coefficients()
- M = self.ambient().module()
+ M = self._ambient.module()
R = M.base_ring()
B = M.basis()
return M.sum(R(mc[self._reversed_indices[i]]) * B[i]
@@ -767,8 +798,8 @@ def from_vector(self, v, order=None, coerce=False):
sage: el.parent() == S
True
"""
- if len(v) == self.ambient().dimension():
- return self.retract(self.ambient().from_vector(v))
+ if len(v) == self._ambient.dimension():
+ return self.retract(self._ambient.from_vector(v))
return super().from_vector(v)
def basis_matrix(self):
@@ -811,9 +842,9 @@ def module(self, sparse=False):
[0 0 3]
"""
try:
- m = self.ambient().module(sparse=sparse)
+ m = self._ambient.module(sparse=sparse)
except TypeError:
- m = self.ambient().module()
+ m = self._ambient.module()
ambientbasis = [self.lift(X).to_vector() for X in self.basis()]
return m.submodule_with_basis(ambientbasis)
@@ -853,7 +884,7 @@ def is_ideal(self, A):
sage: L.is_ideal(I)
False
"""
- if A == self.ambient() and self._is_ideal:
+ if A == self._ambient and self._is_ideal:
return True
return super().is_ideal(A)
diff --git a/src/sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py
index 80df46c57d3..e6ce883a81c 100644
--- a/src/sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Abelian Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py
index f5d39cacbf2..fe68daf6072 100644
--- a/src/sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Affine Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/all.py b/src/sage/algebras/lie_conformal_algebras/all.py
index 7d78e0a260c..24a6e4efeee 100644
--- a/src/sage/algebras/lie_conformal_algebras/all.py
+++ b/src/sage/algebras/lie_conformal_algebras/all.py
@@ -1,14 +1,18 @@
-#******************************************************************************
+# sage_setup: distribution = sagemath-combinat
+# ******************************************************************************
# Copyright (C) 2020 Reimundo Heluani
#
# 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.
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
from sage.misc.lazy_import import lazy_import
-lazy_import('sage.algebras.lie_conformal_algebras.lie_conformal_algebra','LieConformalAlgebra')
-lazy_import('sage.algebras.lie_conformal_algebras', 'examples', 'lie_conformal_algebras')
+lazy_import('sage.algebras.lie_conformal_algebras.lie_conformal_algebra',
+ 'LieConformalAlgebra')
+lazy_import('sage.algebras.lie_conformal_algebras',
+ 'examples', 'lie_conformal_algebras')
+del lazy_import
diff --git a/src/sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py
index 0b0b61b4e25..f320fc173a7 100644
--- a/src/sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bosonic Ghosts Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/examples.py b/src/sage/algebras/lie_conformal_algebras/examples.py
index 3d520e449db..317f349006c 100644
--- a/src/sage/algebras/lie_conformal_algebras/examples.py
+++ b/src/sage/algebras/lie_conformal_algebras/examples.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Examples of Lie Conformal Algebras
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 098644908e6..bab3c118065 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
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Fermionic Ghosts Super Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py b/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py
index 8aefdd9d3a6..62e4805ad92 100644
--- a/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py
+++ b/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Finitely and Freely Generated Lie Conformal Algebras.
diff --git a/src/sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py
index 0787226252d..23c6f67e015 100644
--- a/src/sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Free Bosons Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py
index 1e7525ae1d3..ae1da4cdb00 100644
--- a/src/sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Free Fermions Super Lie Conformal Algebra.
diff --git a/src/sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py
index 9a6a74a62bb..2eea86a4a14 100644
--- a/src/sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Freely Generated Lie Conformal Algebras
diff --git a/src/sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py
index c335daf98f7..dbf3536a5f1 100644
--- a/src/sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Graded Lie Conformal Algebras
diff --git a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py
index 5ca0c8f6d07..34c3508d2ca 100644
--- a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py
index 09fb63a0a4c..82f70ff4819 100644
--- a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py
+++ b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Lie Conformal Algebra Element
diff --git a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py
index 4fef0fcf2e6..77fa9eec482 100644
--- a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py
+++ b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Lie Conformal Algebras With Basis
diff --git a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py
index 9f4d129ba36..4b7f2291e5d 100644
--- a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py
+++ b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Lie Conformal Algebras With Structure Coefficients
diff --git a/src/sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py
index baf7a896144..6b9139e5f7c 100644
--- a/src/sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules sage.rings.number_field
r"""
N=2 Super Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py
index 5542b9fc097..3a531d47a28 100644
--- a/src/sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Neveu-Schwarz Super Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py
index 0db2d545290..3f92b8691a0 100644
--- a/src/sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Virasoro Lie Conformal Algebra
diff --git a/src/sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py b/src/sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py
index 3c319db7ca3..bf71e8364e9 100644
--- a/src/sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py
+++ b/src/sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Weyl Lie Conformal Algebra
diff --git a/src/sage/algebras/nil_coxeter_algebra.py b/src/sage/algebras/nil_coxeter_algebra.py
index b5dbd2d62c8..ee30bf6272a 100644
--- a/src/sage/algebras/nil_coxeter_algebra.py
+++ b/src/sage/algebras/nil_coxeter_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Nil-Coxeter Algebra
diff --git a/src/sage/algebras/octonion_algebra.pxd b/src/sage/algebras/octonion_algebra.pxd
index 78500729bdc..cf790a0b99f 100644
--- a/src/sage/algebras/octonion_algebra.pxd
+++ b/src/sage/algebras/octonion_algebra.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Octonions
"""
diff --git a/src/sage/algebras/octonion_algebra.pyx b/src/sage/algebras/octonion_algebra.pyx
index 3c1d28c2106..ebe6909f801 100644
--- a/src/sage/algebras/octonion_algebra.pyx
+++ b/src/sage/algebras/octonion_algebra.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
"""
Octonion Algebras
diff --git a/src/sage/algebras/orlik_solomon.py b/src/sage/algebras/orlik_solomon.py
index caea1a60d37..16737723b12 100644
--- a/src/sage/algebras/orlik_solomon.py
+++ b/src/sage/algebras/orlik_solomon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
r"""
Orlik-Solomon Algebras
diff --git a/src/sage/algebras/orlik_terao.py b/src/sage/algebras/orlik_terao.py
index d1f3fb38af7..afd7f2f1db4 100644
--- a/src/sage/algebras/orlik_terao.py
+++ b/src/sage/algebras/orlik_terao.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
r"""
Orlik-Terao Algebras
diff --git a/src/sage/algebras/q_commuting_polynomials.py b/src/sage/algebras/q_commuting_polynomials.py
index 10f5f55a987..c00cb1de9df 100644
--- a/src/sage/algebras/q_commuting_polynomials.py
+++ b/src/sage/algebras/q_commuting_polynomials.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups sage.modules
r"""
`q`-Commuting Polynomials
diff --git a/src/sage/algebras/q_system.py b/src/sage/algebras/q_system.py
index 8099f98aa8c..9b20b2df965 100644
--- a/src/sage/algebras/q_system.py
+++ b/src/sage/algebras/q_system.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Q-Systems
diff --git a/src/sage/algebras/quantum_clifford.py b/src/sage/algebras/quantum_clifford.py
index dc61084f2f8..c8e76f68cc7 100644
--- a/src/sage/algebras/quantum_clifford.py
+++ b/src/sage/algebras/quantum_clifford.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
r"""
Quantum Clifford Algebras
diff --git a/src/sage/algebras/quantum_groups/ace_quantum_onsager.py b/src/sage/algebras/quantum_groups/ace_quantum_onsager.py
index 9d983529c73..3eae5a80ce3 100644
--- a/src/sage/algebras/quantum_groups/ace_quantum_onsager.py
+++ b/src/sage/algebras/quantum_groups/ace_quantum_onsager.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Alternating Central Extension Quantum Onsager Algebra
diff --git a/src/sage/algebras/quantum_groups/all.py b/src/sage/algebras/quantum_groups/all.py
index 9d249f02100..d9003faed40 100644
--- a/src/sage/algebras/quantum_groups/all.py
+++ b/src/sage/algebras/quantum_groups/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Quantum Groups
"""
@@ -5,3 +6,4 @@
from sage.misc.lazy_import import lazy_import
lazy_import('sage.algebras.quantum_groups.fock_space', 'FockSpace')
lazy_import('sage.algebras.quantum_groups.quantum_group_gap', 'QuantumGroup')
+del lazy_import
diff --git a/src/sage/algebras/quantum_groups/fock_space.py b/src/sage/algebras/quantum_groups/fock_space.py
index d31af4593e1..a76240439ec 100644
--- a/src/sage/algebras/quantum_groups/fock_space.py
+++ b/src/sage/algebras/quantum_groups/fock_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Fock Space
diff --git a/src/sage/algebras/quantum_groups/q_numbers.py b/src/sage/algebras/quantum_groups/q_numbers.py
index 243846bf13c..d69ac9e0aef 100644
--- a/src/sage/algebras/quantum_groups/q_numbers.py
+++ b/src/sage/algebras/quantum_groups/q_numbers.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
`q`-Numbers
diff --git a/src/sage/algebras/quantum_groups/quantum_group_gap.py b/src/sage/algebras/quantum_groups/quantum_group_gap.py
index 997fe0f3b04..aa180c18bba 100644
--- a/src/sage/algebras/quantum_groups/quantum_group_gap.py
+++ b/src/sage/algebras/quantum_groups/quantum_group_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: optional - gap_package_quagroup sage.combinat sage.libs.gap sage.modules
"""
Quantum Groups Using GAP's QuaGroup Package
diff --git a/src/sage/algebras/quantum_groups/representations.py b/src/sage/algebras/quantum_groups/representations.py
index cea110137db..754f339ffdf 100644
--- a/src/sage/algebras/quantum_groups/representations.py
+++ b/src/sage/algebras/quantum_groups/representations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Quantum Group Representations
diff --git a/src/sage/algebras/quantum_matrix_coordinate_algebra.py b/src/sage/algebras/quantum_matrix_coordinate_algebra.py
index c9f7e312788..ec79a2d731c 100644
--- a/src/sage/algebras/quantum_matrix_coordinate_algebra.py
+++ b/src/sage/algebras/quantum_matrix_coordinate_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Quantum Matrix Coordinate Algebras
diff --git a/src/sage/algebras/quatalg/all.py b/src/sage/algebras/quatalg/all.py
index 0f0d45c0217..8e90f44fe2a 100644
--- a/src/sage/algebras/quatalg/all.py
+++ b/src/sage/algebras/quatalg/all.py
@@ -1 +1,2 @@
-from .quaternion_algebra import QuaternionAlgebra
+# sage_setup: distribution = sagemath-singular
+from sage.algebras.quatalg.quaternion_algebra import QuaternionAlgebra
diff --git a/src/sage/algebras/quatalg/quaternion_algebra.py b/src/sage/algebras/quatalg/quaternion_algebra.py
index 02d0ccf0326..40f695bbd6d 100644
--- a/src/sage/algebras/quatalg/quaternion_algebra.py
+++ b/src/sage/algebras/quatalg/quaternion_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Quaternion Algebras
@@ -756,8 +757,7 @@ def maximal_order(self, take_shortcuts=True):
sage: for d in ( m for m in range(1, 750) if is_squarefree(m) ): # long time (3s)
....: A = QuaternionAlgebra(d)
- ....: R = A.maximal_order(take_shortcuts=False)
- ....: assert A.discriminant() == R.discriminant()
+ ....: assert A.maximal_order(take_shortcuts=False).is_maximal()
We do not support number fields other than the rationals yet::
@@ -767,9 +767,24 @@ def maximal_order(self, take_shortcuts=True):
...
NotImplementedError: maximal order only implemented
for rational quaternion algebras
+
+ TESTS:
+
+ Check that :issue:`37417` and the first part of :issue:`37217` are fixed::
+
+ sage: invars = [(-4, -28), (-292, -732), (-48, -564), (-436, -768),
+ ....: (-752, -708), (885, 545), (411, -710), (-411, 593),
+ ....: (805, -591), (-921, 353), (409, 96), (394, 873),
+ ....: (353, -722), (730, 830), (-466, -427), (-213, -630),
+ ....: (-511, 608), (493, 880), (105, -709), (-213, 530),
+ ....: (97, 745)]
+ sage: all(QuaternionAlgebra(a, b).maximal_order().is_maximal()
+ ....: for (a, b) in invars)
+ True
"""
if self.base_ring() != QQ:
- raise NotImplementedError("maximal order only implemented for rational quaternion algebras")
+ raise NotImplementedError("maximal order only implemented for "
+ "rational quaternion algebras")
d_A = self.discriminant()
@@ -812,15 +827,17 @@ def maximal_order(self, take_shortcuts=True):
# The following code should always work (over QQ)
# Start with <1,i,j,k>
- R = self.quaternion_order((1,) + self.gens())
+ order_basis = (self.one(),) + self.gens()
+ R = self.quaternion_order(order_basis)
d_R = R.discriminant()
e_new_gens = []
# For each prime at which R is not yet maximal, make it bigger
for p, _ in d_R.factor():
- e = R.basis()
- while self.quaternion_order(e).discriminant().valuation(p) > d_A.valuation(p):
+ e = order_basis
+ disc = d_R
+ while disc.valuation(p) > d_A.valuation(p):
# Compute a normalized basis at p
f = normalize_basis_at_p(list(e), p)
@@ -893,13 +910,18 @@ def maximal_order(self, take_shortcuts=True):
e_n = basis_for_quaternion_lattice(list(e) + e_n[1:], reverse=True)
# e_n now contains elements that locally at p give a bigger order,
- # but the basis may be messed up at other primes (it might not even
- # be an order). We will join them all together at the end
+ # but the basis may be messed up at other primes (it might not
+ # even be an order). We will join them all together at the end
e = e_n
+ # Since e might not define an order at this point, we need to
+ # manually calculate the updated discriminant
+ L = [[x.pair(y) for y in e] for x in e]
+ disc = matrix(QQ, 4, 4, L).determinant().sqrt()
+
e_new_gens.extend(e[1:])
- e_new = basis_for_quaternion_lattice(list(R.basis()) + e_new_gens, reverse=True)
+ e_new = basis_for_quaternion_lattice(list(order_basis) + e_new_gens, reverse=True)
return self.quaternion_order(e_new)
def order_with_level(self, level):
@@ -1190,9 +1212,12 @@ def ramified_primes(self):
if not is_RationalField(self.base_ring()):
raise ValueError("base field must be the rational numbers")
- return sorted([p for p in set([2]).union(prime_divisors(self._a.numerator()),
- prime_divisors(self._a.denominator()), prime_divisors(self._b.numerator()),
- prime_divisors(self._b.denominator())) if hilbert_symbol(self._a, self._b, p) == -1])
+ a, b = self._a, self._b
+ return sorted(p for p in {2}.union(prime_divisors(a.numerator()),
+ prime_divisors(a.denominator()),
+ prime_divisors(b.numerator()),
+ prime_divisors(b.denominator()))
+ if hilbert_symbol(self._a, self._b, p) == -1)
def is_isomorphic(self, A) -> bool:
"""
@@ -1894,8 +1919,9 @@ def discriminant(self):
sage: type(S.discriminant())
<... 'sage.rings.rational.Rational'>
"""
- L = [[d.pair(e) for e in self.basis()] for d in self.basis()]
- return (MatrixSpace(QQ, 4, 4)(L)).determinant().sqrt()
+ e = self.basis()
+ L = [[x.pair(y) for y in e] for x in e]
+ return matrix(QQ, 4, 4, L).determinant().sqrt()
def is_maximal(self) -> bool:
r"""
@@ -3909,7 +3935,18 @@ def normalize_basis_at_p(e, p, B=QuaternionAlgebraElement_abstract.pair):
sage: e = [A(1), k, j, 1/2 + 1/2*i + 1/2*j + 1/2*k]
sage: normalize_basis_at_p(e, 2)
[(1, 0), (1/2 + 1/2*i + 1/2*j + 1/2*k, 0), (-34/105*i - 463/735*j + 71/105*k, 1),
- (-34/105*i - 463/735*j + 71/105*k, 1)]
+ (1/7*i - 8/49*j + 1/7*k, 1)]
+
+ TESTS:
+
+ We check that the second part of :issue:`37217` is fixed::
+
+ sage: A. = QuaternionAlgebra(-1,-7)
+ sage: e = [A(1), k, j, 1/2 + 1/2*i + 1/2*j + 1/2*k]
+ sage: e_norm = normalize_basis_at_p(e, 2)
+ sage: V = QQ**4
+ sage: V.span([V(x.coefficient_tuple()) for (x,_) in e_norm]).dimension()
+ 4
"""
N = len(e)
@@ -3957,8 +3994,7 @@ def normalize_basis_at_p(e, p, B=QuaternionAlgebraElement_abstract.pair):
# Ensures that (B(f0,f0)/2).valuation(p) <= B(f0,f1).valuation(p)
if B(f0, f1).valuation(p) + 1 < B(f0, f0).valuation(p):
- f0 += f1
- f1 = f0
+ f0, f1 = f0 + f1, f0
# Make remaining vectors orthogonal to span of f0, f1
e[min_m] = e[0]
@@ -3971,7 +4007,7 @@ def normalize_basis_at_p(e, p, B=QuaternionAlgebraElement_abstract.pair):
tu = [(B01 * B(f1, e[l]) - B11 * B(f0, e[l]),
B01 * B(f0, e[l]) - B00 * B(f1, e[l])) for l in range(2, N)]
- e[2:n] = [e[l] + tu[l-2][0]/d * f0 + tu[l-2][1]/d * f1 for l in range(2, N)]
+ e[2:N] = [e[l] + tu[l-2][0]/d * f0 + tu[l-2][1]/d * f1 for l in range(2, N)]
# Recursively normalize remaining vectors
f = normalize_basis_at_p(e[2:N], p)
diff --git a/src/sage/algebras/quatalg/quaternion_algebra_cython.pyx b/src/sage/algebras/quatalg/quaternion_algebra_cython.pyx
index 130c9f5d43a..c757d6ada7f 100644
--- a/src/sage/algebras/quatalg/quaternion_algebra_cython.pyx
+++ b/src/sage/algebras/quatalg/quaternion_algebra_cython.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# distutils: language = c++
# distutils: libraries = gmp m NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/algebras/quatalg/quaternion_algebra_element.pxd b/src/sage/algebras/quatalg/quaternion_algebra_element.pxd
index 93c98b3e045..53f5802bf91 100644
--- a/src/sage/algebras/quatalg/quaternion_algebra_element.pxd
+++ b/src/sage/algebras/quatalg/quaternion_algebra_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.libs.gmp.types cimport mpz_t
from sage.libs.flint.types cimport fmpz_poly_t
diff --git a/src/sage/algebras/quatalg/quaternion_algebra_element.pyx b/src/sage/algebras/quatalg/quaternion_algebra_element.pyx
index d17566c8c22..1b2df20594d 100644
--- a/src/sage/algebras/quatalg/quaternion_algebra_element.pyx
+++ b/src/sage/algebras/quatalg/quaternion_algebra_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# distutils: language = c++
# distutils: libraries = gmp m NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/algebras/quaternion_algebra.py b/src/sage/algebras/quaternion_algebra.py
index 4e92b73de69..0694175bf13 100644
--- a/src/sage/algebras/quaternion_algebra.py
+++ b/src/sage/algebras/quaternion_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
############################################################
diff --git a/src/sage/algebras/quaternion_algebra_element.py b/src/sage/algebras/quaternion_algebra_element.py
index ed0baaf0152..809f551d2a2 100644
--- a/src/sage/algebras/quaternion_algebra_element.py
+++ b/src/sage/algebras/quaternion_algebra_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
#######################################################################
diff --git a/src/sage/algebras/rational_cherednik_algebra.py b/src/sage/algebras/rational_cherednik_algebra.py
index 58b3ce5441d..0333e4b55df 100644
--- a/src/sage/algebras/rational_cherednik_algebra.py
+++ b/src/sage/algebras/rational_cherednik_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Rational Cherednik Algebras
diff --git a/src/sage/algebras/schur_algebra.py b/src/sage/algebras/schur_algebra.py
index 6e0b6ad8583..389bd86a2d4 100644
--- a/src/sage/algebras/schur_algebra.py
+++ b/src/sage/algebras/schur_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups sage.modules
r"""
Schur algebras for `GL_n`
diff --git a/src/sage/algebras/shuffle_algebra.py b/src/sage/algebras/shuffle_algebra.py
index 2db55513d66..0926f180ade 100644
--- a/src/sage/algebras/shuffle_algebra.py
+++ b/src/sage/algebras/shuffle_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Shuffle algebras
diff --git a/src/sage/algebras/splitting_algebra.py b/src/sage/algebras/splitting_algebra.py
index 991d6240a09..57c809ba2f4 100644
--- a/src/sage/algebras/splitting_algebra.py
+++ b/src/sage/algebras/splitting_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.libs.pari sage.modules
r"""
Splitting Algebras
diff --git a/src/sage/algebras/steenrod/all.py b/src/sage/algebras/steenrod/all.py
index 134b2b032cf..f10017c5d3a 100644
--- a/src/sage/algebras/steenrod/all.py
+++ b/src/sage/algebras/steenrod/all.py
@@ -1,8 +1,10 @@
+# sage_setup: distribution = sagemath-combinat
"""
The Steenrod algebra
"""
-from .steenrod_algebra import SteenrodAlgebra, Sq
from sage.misc.lazy_import import lazy_import
+lazy_import('sage.algebras.steenrod.steenrod_algebra', ['SteenrodAlgebra', 'Sq'])
lazy_import('sage.algebras.steenrod.steenrod_algebra_bases',
'steenrod_algebra_basis',
deprecation=(32647, 'removed from namespace'))
+del lazy_import
diff --git a/src/sage/algebras/steenrod/steenrod_algebra.py b/src/sage/algebras/steenrod/steenrod_algebra.py
index 3f9153cf962..49745df290d 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
The Steenrod algebra
diff --git a/src/sage/algebras/steenrod/steenrod_algebra_bases.py b/src/sage/algebras/steenrod/steenrod_algebra_bases.py
index f439827ff69..fcbba639c03 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra_bases.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra_bases.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Steenrod algebra bases
diff --git a/src/sage/algebras/steenrod/steenrod_algebra_misc.py b/src/sage/algebras/steenrod/steenrod_algebra_misc.py
index c2cb488ab4a..5984f6b9e84 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra_misc.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra_misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Miscellaneous functions for the Steenrod algebra and its elements
diff --git a/src/sage/algebras/steenrod/steenrod_algebra_mult.py b/src/sage/algebras/steenrod/steenrod_algebra_mult.py
index 5672755f3fa..73a65f3849a 100644
--- a/src/sage/algebras/steenrod/steenrod_algebra_mult.py
+++ b/src/sage/algebras/steenrod/steenrod_algebra_mult.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.rings.finite_rings
r"""
Multiplication for elements of the Steenrod algebra
diff --git a/src/sage/algebras/tensor_algebra.py b/src/sage/algebras/tensor_algebra.py
index a14ab916336..ceeba471da2 100644
--- a/src/sage/algebras/tensor_algebra.py
+++ b/src/sage/algebras/tensor_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Tensor Algebras
diff --git a/src/sage/algebras/weyl_algebra.py b/src/sage/algebras/weyl_algebra.py
index e439f3c3217..505b5766fcc 100644
--- a/src/sage/algebras/weyl_algebra.py
+++ b/src/sage/algebras/weyl_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.modules
r"""
Weyl Algebras
diff --git a/src/sage/algebras/yangian.py b/src/sage/algebras/yangian.py
index 8e19b92ba07..62ac37bbeef 100644
--- a/src/sage/algebras/yangian.py
+++ b/src/sage/algebras/yangian.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Yangians
diff --git a/src/sage/algebras/yokonuma_hecke_algebra.py b/src/sage/algebras/yokonuma_hecke_algebra.py
index 747169d7abb..55e87f833bf 100644
--- a/src/sage/algebras/yokonuma_hecke_algebra.py
+++ b/src/sage/algebras/yokonuma_hecke_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
"""
Yokonuma-Hecke Algebras
diff --git a/src/sage/all.py b/src/sage/all.py
index b1f35e3a738..2bf07cdfb79 100644
--- a/src/sage/all.py
+++ b/src/sage/all.py
@@ -57,98 +57,95 @@
import operator
import math
-################ end setup warnings ###############################
-
-from .all__sagemath_repl import * # includes .all__sagemath_objects, .all__sagemath_environment
-
-###################################################################
+# includes .all__sagemath_objects, .all__sagemath_environment
+from sage.all__sagemath_repl import *
# This import also sets up the interrupt handler
from cysignals.signals import (AlarmInterrupt, SignalError,
- sig_on_reset as sig_on_count)
+ sig_on_reset as sig_on_count)
-from time import sleep
+from time import sleep
from functools import reduce # in order to keep reduce in python3
import sage.misc.lazy_import
-from sage.misc.all import * # takes a while
-from sage.typeset.all import *
+from sage.misc.all import * # takes a while
+from sage.typeset.all import *
from sage.misc.sh import sh
-from sage.libs.all import *
+from sage.libs.all import *
from sage.data_structures.all import *
-from sage.structure.all import *
-from sage.rings.all import *
-from sage.arith.all import *
-from sage.matrix.all import *
-
-from sage.symbolic.all import *
-from sage.modules.all import *
-from sage.monoids.all import *
-from sage.algebras.all import *
-from sage.modular.all import *
-from sage.sat.all import *
-from sage.schemes.all import *
-from sage.graphs.all import *
-from sage.groups.all import *
-from sage.arith.power import generic_power as power
-from sage.databases.all import *
+from sage.structure.all import *
+from sage.rings.all import *
+from sage.arith.all import *
+from sage.matrix.all import *
+
+from sage.symbolic.all import *
+from sage.modules.all import *
+from sage.monoids.all import *
+from sage.algebras.all import *
+from sage.modular.all import *
+from sage.sat.all import *
+from sage.schemes.all import *
+from sage.graphs.all import *
+from sage.groups.all import *
+from sage.arith.power import generic_power as power
+from sage.databases.all import *
from sage.categories.all import *
-from sage.sets.all import *
+from sage.sets.all import *
from sage.probability.all import *
from sage.interfaces.all import *
-from sage.functions.all import *
-from sage.calculus.all import *
+from sage.functions.all import *
+from sage.calculus.all import *
lazy_import('sage.tests', 'all', as_='tests', deprecation=27337)
-from sage.cpython.all import *
+from sage.cpython.all import *
-from sage.crypto.all import *
+from sage.crypto.all import *
import sage.crypto.mq as mq
-from sage.plot.all import *
-from sage.plot.plot3d.all import *
+from sage.plot.all import *
+from sage.plot.plot3d.all import *
-from sage.coding.all import *
-from sage.combinat.all import *
+from sage.coding.all import *
+from sage.combinat.all import *
from sage.lfunctions.all import *
-from sage.geometry.all import *
-from sage.geometry.triangulation.all import *
-from sage.geometry.riemannian_manifolds.all import *
+from sage.geometry.all import *
+from sage.geometry.triangulation.all import *
+from sage.geometry.riemannian_manifolds.all import *
-from sage.dynamics.all import *
+from sage.dynamics.all import *
-from sage.homology.all import *
+from sage.homology.all import *
-from sage.topology.all import *
+from sage.topology.all import *
from sage.quadratic_forms.all import *
-from sage.games.all import *
+from sage.games.all import *
-from sage.logic.all import *
+from sage.logic.all import *
-from sage.numerical.all import *
+from sage.numerical.all import *
-from sage.stats.all import *
+from sage.stats.all import *
import sage.stats.all as stats
-from sage.parallel.all import *
+from sage.parallel.all import *
-from sage.ext.fast_callable import fast_callable
-from sage.ext.fast_eval import fast_float
+from sage.ext.fast_callable import fast_callable
+from sage.ext.fast_eval import fast_float
from sage.sandpiles.all import *
-from sage.tensor.all import *
+from sage.tensor.all import *
-from sage.matroids.all import *
+from sage.matroids.all import *
from sage.game_theory.all import *
@@ -168,7 +165,7 @@
_init_qqbar()
###########################################################
-#### WARNING:
+# WARNING:
# DO *not* import numpy / matplotlib / networkx here!!
# Each takes a surprisingly long time to initialize,
# and that initialization should be done more on-the-fly
@@ -190,31 +187,37 @@
copying = license
copyright = license
+
def quit_sage(verbose=True):
"""
Does nothing. Code that needs cleanup should register its own
handler using the atexit module.
"""
from sage.misc.superseded import deprecation
- deprecation(8784, 'quit_sage is deprecated and now does nothing; please simply delete it')
+ deprecation(
+ 8784, 'quit_sage is deprecated and now does nothing; please simply delete it')
from sage.misc.persist import register_unpickle_override
register_unpickle_override('sage.categories.category', 'Sets', Sets)
-register_unpickle_override('sage.categories.category_types', 'HeckeModules', HeckeModules)
+register_unpickle_override('sage.categories.category_types',
+ 'HeckeModules', HeckeModules)
register_unpickle_override('sage.categories.category_types', 'Objects', Objects)
register_unpickle_override('sage.categories.category_types', 'Rings', Rings)
register_unpickle_override('sage.categories.category_types', 'Fields', Fields)
-register_unpickle_override('sage.categories.category_types', 'VectorSpaces', VectorSpaces)
-register_unpickle_override('sage.categories.category_types', 'Schemes_over_base', sage.categories.schemes.Schemes_over_base)
-register_unpickle_override('sage.categories.category_types', 'ModularAbelianVarieties', ModularAbelianVarieties)
+register_unpickle_override('sage.categories.category_types',
+ 'VectorSpaces', VectorSpaces)
+register_unpickle_override('sage.categories.category_types',
+ 'Schemes_over_base', sage.categories.schemes.Schemes_over_base)
+register_unpickle_override('sage.categories.category_types',
+ 'ModularAbelianVarieties', ModularAbelianVarieties)
register_unpickle_override('sage.libs.pari.gen_py', 'pari', pari)
# Cache the contents of star imports.
sage.misc.lazy_import.save_cache_file()
-### Debugging for Singular, see trac #10903
+# Debugging for Singular, see trac #10903
# from sage.libs.singular.ring import poison_currRing
# sys.settrace(poison_currRing)
@@ -241,7 +244,7 @@ def quit_sage(verbose=True):
sage.misc.lazy_import.finish_startup()
-### Python broke large ints; see trac #34506
+# Python broke large ints; see trac #34506
if hasattr(sys, "set_int_max_str_digits"):
sys.set_int_max_str_digits(0)
diff --git a/src/sage/all__sagemath_bliss.py b/src/sage/all__sagemath_bliss.py
index e69de29bb2d..00e01e7dfe7 100644
--- a/src/sage/all__sagemath_bliss.py
+++ b/src/sage/all__sagemath_bliss.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-bliss
diff --git a/src/sage/all__sagemath_categories.py b/src/sage/all__sagemath_categories.py
index 4f438a77cbe..cb37b0baf2f 100644
--- a/src/sage/all__sagemath_categories.py
+++ b/src/sage/all__sagemath_categories.py
@@ -1,4 +1,5 @@
-from .all__sagemath_objects import *
+# sage_setup: distribution = sagemath-categories
+from sage.all__sagemath_objects import *
from sage.categories.all import *
diff --git a/src/sage/all__sagemath_coxeter3.py b/src/sage/all__sagemath_coxeter3.py
index e69de29bb2d..61138b7bc1a 100644
--- a/src/sage/all__sagemath_coxeter3.py
+++ b/src/sage/all__sagemath_coxeter3.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-coxeter3
diff --git a/src/sage/all__sagemath_environment.py b/src/sage/all__sagemath_environment.py
index f68c74ab115..4baf97bae83 100644
--- a/src/sage/all__sagemath_environment.py
+++ b/src/sage/all__sagemath_environment.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
from sage.env import SAGE_ROOT, SAGE_SRC, SAGE_DOC_SRC, SAGE_LOCAL, DOT_SAGE, SAGE_ENV
from sage.misc.all__sagemath_environment import *
diff --git a/src/sage/all__sagemath_mcqd.py b/src/sage/all__sagemath_mcqd.py
index e69de29bb2d..9d46f0ff6ba 100644
--- a/src/sage/all__sagemath_mcqd.py
+++ b/src/sage/all__sagemath_mcqd.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-mcqd
diff --git a/src/sage/all__sagemath_meataxe.py b/src/sage/all__sagemath_meataxe.py
index e69de29bb2d..fd1e327ee2f 100644
--- a/src/sage/all__sagemath_meataxe.py
+++ b/src/sage/all__sagemath_meataxe.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-meataxe
diff --git a/src/sage/all__sagemath_objects.py b/src/sage/all__sagemath_objects.py
index 7780f245aae..e5861c865a4 100644
--- a/src/sage/all__sagemath_objects.py
+++ b/src/sage/all__sagemath_objects.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
import os
import sys
import operator
@@ -9,16 +10,16 @@
# This import also sets up the interrupt handler
from cysignals.signals import (AlarmInterrupt, SignalError,
- sig_on_reset as sig_on_count)
+ sig_on_reset as sig_on_count)
-from time import sleep
+from time import sleep
-from sage.misc.all__sagemath_objects import *
-from sage.structure.all import *
-from sage.arith.power import generic_power as power
+from sage.misc.all__sagemath_objects import *
+from sage.structure.all import *
+from sage.arith.power import generic_power as power
from sage.categories.all__sagemath_objects import *
-from sage.cpython.all import *
+from sage.cpython.all import *
from cysignals.alarm import alarm, cancel_alarm
diff --git a/src/sage/all__sagemath_repl.py b/src/sage/all__sagemath_repl.py
index d77919bc8bd..2bbf2476a74 100644
--- a/src/sage/all__sagemath_repl.py
+++ b/src/sage/all__sagemath_repl.py
@@ -1,8 +1,12 @@
-############ setup warning filters before importing Sage stuff ####
+# sage_setup: distribution = sagemath-repl
+
+# Set up warning filters before importing Sage stuff
+
import sys
import warnings
-__with_pydebug = hasattr(sys, 'gettotalrefcount') # This is a Python debug build (--with-pydebug)
+# This is a Python debug build (--with-pydebug)
+__with_pydebug = hasattr(sys, 'gettotalrefcount')
if __with_pydebug:
# a debug build does not install the default warning filters. Sadly, this breaks doctests so we
# have to re-add them:
@@ -16,38 +20,38 @@
# Ignore all deprecations from IPython etc.
warnings.filterwarnings('ignore', category=DeprecationWarning,
- module='(IPython|ipykernel|jupyter_client|jupyter_core|nbformat|notebook|ipywidgets|storemagic|jedi)')
+ module='(IPython|ipykernel|jupyter_client|jupyter_core|nbformat|notebook|ipywidgets|storemagic|jedi)')
# scipy 1.18 introduced reprecation warnings on a number of things they are moving to
# numpy, e.g. DeprecationWarning: scipy.array is deprecated
# and will be removed in SciPy 2.0.0, use numpy.array instead
# This affects networkx 2.2 up and including 2.4 (cf. :issue:29766)
warnings.filterwarnings('ignore', category=DeprecationWarning,
- module='(scipy|networkx)')
+ module='(scipy|networkx)')
# However, be sure to keep OUR deprecation warnings
warnings.filterwarnings('default', category=DeprecationWarning,
- message=r'[\s\S]*See https?://trac\.sagemath\.org/[0-9]* for details.')
+ message=r'[\s\S]*See https?://trac\.sagemath\.org/[0-9]* for details.')
# Ignore Python 3.9 deprecation warnings
warnings.filterwarnings('ignore', category=DeprecationWarning,
- module='ast')
+ module='ast')
# Ignore packaging 20.5 deprecation warnings
warnings.filterwarnings('ignore', category=DeprecationWarning,
- module='(.*[.]_vendor[.])?packaging')
+ module='(.*[.]_vendor[.])?packaging')
# Ignore a few warnings triggered by pythran 0.12.1
warnings.filterwarnings('ignore', category=DeprecationWarning,
- message='\n\n `numpy.distutils` is deprecated since NumPy 1.23.0',
- module='pythran.dist')
+ message='\n\n `numpy.distutils` is deprecated since NumPy 1.23.0',
+ module='pythran.dist')
warnings.filterwarnings('ignore', category=DeprecationWarning,
- message='pkg_resources is deprecated as an API|'
- 'Deprecated call to `pkg_resources.declare_namespace(.*)`',
- module='pkg_resources|setuptools.sandbox')
+ message='pkg_resources is deprecated as an API|'
+ 'Deprecated call to `pkg_resources.declare_namespace(.*)`',
+ module='pkg_resources|setuptools.sandbox')
warnings.filterwarnings('ignore', category=DeprecationWarning,
- message='msvccompiler is deprecated and slated to be removed',
- module='distutils.msvccompiler')
+ message='msvccompiler is deprecated and slated to be removed',
+ module='distutils.msvccompiler')
warnings.filterwarnings('ignore', category=DeprecationWarning,
message='The distutils(.sysconfig module| package) is deprecated',
@@ -97,11 +101,11 @@
r"removed from itertools in Python 3.14.")
-from .all__sagemath_objects import *
-from .all__sagemath_environment import *
+from sage.all__sagemath_objects import *
+from sage.all__sagemath_environment import *
-from sage.doctest.all import *
-from sage.repl.all import *
+from sage.doctest.all import *
+from sage.repl.all import *
from sage.misc.all__sagemath_repl import *
# For doctesting. These are overwritten later
diff --git a/src/sage/all__sagemath_sirocco.py b/src/sage/all__sagemath_sirocco.py
index e69de29bb2d..44db2511e89 100644
--- a/src/sage/all__sagemath_sirocco.py
+++ b/src/sage/all__sagemath_sirocco.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-sirocco
diff --git a/src/sage/all__sagemath_tdlib.py b/src/sage/all__sagemath_tdlib.py
index e69de29bb2d..e26612c8409 100644
--- a/src/sage/all__sagemath_tdlib.py
+++ b/src/sage/all__sagemath_tdlib.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-tdlib
diff --git a/src/sage/all_cmdline.py b/src/sage/all_cmdline.py
index 197d34ebc90..33d0712c996 100644
--- a/src/sage/all_cmdline.py
+++ b/src/sage/all_cmdline.py
@@ -19,7 +19,7 @@
from sage.misc.lazy_import import lazy_import
-for pkg in ['axiom', 'fricas', 'gap' , 'gap3', 'giac', 'gp',
+for pkg in ['axiom', 'fricas', 'gap', 'gap3', 'giac', 'gp',
'gnuplot', 'kash', 'magma', 'macaulay2', 'maple',
'mathematica', 'mathics', 'matlab',
'mupad', 'mwrank', 'octave', 'qepcad', 'singular',
diff --git a/src/sage/arith/all.py b/src/sage/arith/all.py
index 3446336de68..705fb82ed52 100644
--- a/src/sage/arith/all.py
+++ b/src/sage/arith/all.py
@@ -1,96 +1,37 @@
+# sage_setup: distribution = sagemath-categories
from sage.misc.lazy_import import lazy_import
-from sage.arith.misc import (
- algdep,
- bernoulli,
- is_prime,
- is_prime_power,
- is_pseudoprime,
- is_pseudoprime_power,
- prime_powers,
- primes_first_n,
- eratosthenes,
- primes,
- next_prime_power,
- next_probable_prime,
- next_prime,
- previous_prime,
- previous_prime_power,
- random_prime,
- divisors,
- sigma,
- gcd,
- GCD,
- xlcm,
- xgcd,
- xkcd,
- inverse_mod,
- get_gcd,
- get_inverse_mod,
- power_mod,
- rational_reconstruction,
- mqrr_rational_reconstruction,
- trial_division,
- factor,
- prime_divisors,
- odd_part,
- prime_to_m_part,
- is_square,
- is_squarefree,
- euler_phi,
- carmichael_lambda,
- crt,
- CRT,
- CRT_list,
- CRT_basis,
- CRT_vectors,
- multinomial,
- multinomial_coefficients,
- binomial,
- factorial,
- kronecker_symbol,
- kronecker,
- legendre_symbol,
- primitive_root,
- nth_prime,
- quadratic_residues,
- moebius,
- continuant,
- number_of_divisors,
- hilbert_symbol,
- hilbert_conductor,
- hilbert_conductor_inverse,
- falling_factorial,
- rising_factorial,
- integer_ceil,
- integer_floor,
- two_squares,
- three_squares,
- four_squares,
- sum_of_k_squares,
- subfactorial,
- is_power_of_two,
- differences,
- sort_complex_numbers_for_display,
- fundamental_discriminant,
- squarefree_divisors,
- radical,
- binomial_coefficients,
- jacobi_symbol,
- dedekind_sum,
- prime_factors,
- prime_range,
- valuation,
-)
+from sage.arith.misc import (algdep, bernoulli, is_prime, is_prime_power,
+ is_pseudoprime, is_pseudoprime_power,
+ prime_powers, primes_first_n, eratosthenes, primes,
+ next_prime_power, next_probable_prime, next_prime,
+ previous_prime, previous_prime_power, random_prime,
+ divisors, sigma, gcd, GCD, xlcm, xgcd, xkcd,
+ inverse_mod, get_gcd, get_inverse_mod, power_mod,
+ rational_reconstruction, mqrr_rational_reconstruction,
+ trial_division, factor, prime_divisors, odd_part, prime_to_m_part,
+ is_square, is_squarefree, euler_phi, carmichael_lambda, crt, CRT,
+ CRT_list, CRT_basis, CRT_vectors, multinomial, multinomial_coefficients,
+ binomial, factorial, kronecker_symbol, kronecker, legendre_symbol,
+ primitive_root, nth_prime, quadratic_residues, moebius,
+ continuant, number_of_divisors, hilbert_symbol, hilbert_conductor,
+ hilbert_conductor_inverse, falling_factorial, rising_factorial,
+ integer_ceil, integer_floor,
+ two_squares, three_squares, four_squares, sum_of_k_squares,
+ subfactorial, is_power_of_two, differences,
+ sort_complex_numbers_for_display,
+ fundamental_discriminant, squarefree_divisors,
+ radical, binomial_coefficients, jacobi_symbol,
+ dedekind_sum,
+ prime_factors, prime_range, valuation)
lazy_import("sage.arith.misc", ("Sigma", "Moebius", "Euler_Phi"), deprecation=30322)
from sage.arith.functions import lcm
-
LCM = lcm
from sage.arith.srange import xsrange, srange, ellipsis_iter, ellipsis_range
-
sxrange = xsrange
σ = sigma
+del lazy_import
diff --git a/src/sage/arith/all__sagemath_objects.py b/src/sage/arith/all__sagemath_objects.py
index 38e44245ad3..31d80d17daa 100644
--- a/src/sage/arith/all__sagemath_objects.py
+++ b/src/sage/arith/all__sagemath_objects.py
@@ -1,2 +1,5 @@
+# sage_setup: distribution = sagemath-objects
# The presence of this file ensures that sage_setup for sagemath-objects
# considers this directory as a namespace package
+
+from sage.arith.power import generic_power as power
diff --git a/src/sage/arith/constants.pxd b/src/sage/arith/constants.pxd
index 371960ec3bc..b588791fd66 100644
--- a/src/sage/arith/constants.pxd
+++ b/src/sage/arith/constants.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#
# Various mathematical constants, represented as double precision hex
# float. We use these instead of decimal constants like 3.1415...
diff --git a/src/sage/arith/functions.pxd b/src/sage/arith/functions.pxd
index 9ddfc38b38b..af3c4e6afc3 100644
--- a/src/sage/arith/functions.pxd
+++ b/src/sage/arith/functions.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-categories
+
cpdef LCM_list(v)
cdef LCM_generic(itr, ret)
diff --git a/src/sage/arith/functions.pyx b/src/sage/arith/functions.pyx
index f0c7c03220e..5d9b1c81f82 100644
--- a/src/sage/arith/functions.pyx
+++ b/src/sage/arith/functions.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Fast Arithmetic Functions
"""
@@ -30,7 +31,7 @@ def lcm(a, b=None):
- ``a,b`` -- two elements of a ring with lcm or
- - ``a`` -- a list or tuple of elements of a ring with lcm
+ - ``a`` -- a list, tuple or iterable of elements of a ring with lcm
OUTPUT:
@@ -135,7 +136,7 @@ cpdef LCM_list(v):
INPUT:
- - ``v`` -- an iterable
+ - ``v`` -- an iterable
OUTPUT: integer
diff --git a/src/sage/arith/long.pxd b/src/sage/arith/long.pxd
index 76c7d7f015d..44923f802da 100644
--- a/src/sage/arith/long.pxd
+++ b/src/sage/arith/long.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# sage.doctest: needs sage.misc.cython
r"""
Fast conversion of Python objects to C long
diff --git a/src/sage/arith/misc.py b/src/sage/arith/misc.py
index 6d11707f785..20fbb3fcf78 100644
--- a/src/sage/arith/misc.py
+++ b/src/sage/arith/misc.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Miscellaneous arithmetic functions
diff --git a/src/sage/arith/multi_modular.pxd b/src/sage/arith/multi_modular.pxd
index 300bbf29008..3409268b33f 100644
--- a/src/sage/arith/multi_modular.pxd
+++ b/src/sage/arith/multi_modular.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.ext.mod_int cimport *
from sage.libs.gmp.types cimport mpz_t
diff --git a/src/sage/arith/multi_modular.pyx b/src/sage/arith/multi_modular.pyx
index f9252624eec..566466da805 100644
--- a/src/sage/arith/multi_modular.pyx
+++ b/src/sage/arith/multi_modular.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: optional - primecountpy
"""
Utility classes for multi-modular algorithms
diff --git a/src/sage/arith/numerical_approx.pxd b/src/sage/arith/numerical_approx.pxd
index 85f92eca336..794e443e449 100644
--- a/src/sage/arith/numerical_approx.pxd
+++ b/src/sage/arith/numerical_approx.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# sage.doctest: needs sage.rings.real_mpfr
cpdef inline long digits_to_bits(d) except -1:
diff --git a/src/sage/arith/numerical_approx.pyx b/src/sage/arith/numerical_approx.pyx
index 6698a0ec317..642b9418646 100644
--- a/src/sage/arith/numerical_approx.pyx
+++ b/src/sage/arith/numerical_approx.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# sage.doctest: needs sage.rings.real_mpfr
r"""
Generic numerical approximation function
diff --git a/src/sage/arith/power.pxd b/src/sage/arith/power.pxd
index 7651245d2eb..8fe386ad09d 100644
--- a/src/sage/arith/power.pxd
+++ b/src/sage/arith/power.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from cpython.number cimport PyNumber_TrueDivide
from sage.structure.element cimport Element
diff --git a/src/sage/arith/power.pyx b/src/sage/arith/power.pyx
index e9a1f7972eb..85096b6c703 100644
--- a/src/sage/arith/power.pyx
+++ b/src/sage/arith/power.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Generic implementation of powering
diff --git a/src/sage/arith/rational_reconstruction.pxd b/src/sage/arith/rational_reconstruction.pxd
index 6bbd246c2df..cf1182c58a2 100644
--- a/src/sage/arith/rational_reconstruction.pxd
+++ b/src/sage/arith/rational_reconstruction.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.libs.gmp.types cimport mpz_t, mpq_t
cdef int mpq_rational_reconstruction(mpq_t answer, mpz_t a, mpz_t m) except -1
diff --git a/src/sage/arith/rational_reconstruction.pyx b/src/sage/arith/rational_reconstruction.pyx
index bd07977411a..47991a9862b 100644
--- a/src/sage/arith/rational_reconstruction.pyx
+++ b/src/sage/arith/rational_reconstruction.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Rational reconstruction
diff --git a/src/sage/arith/srange.pyx b/src/sage/arith/srange.pyx
index d4815ae60b7..fed04106ddb 100644
--- a/src/sage/arith/srange.pyx
+++ b/src/sage/arith/srange.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Ranges and the ``[1,2,..,n]`` notation
diff --git a/src/sage/calculus/all.py b/src/sage/calculus/all.py
index c83a97f6eb4..90a2f2f8d7a 100644
--- a/src/sage/calculus/all.py
+++ b/src/sage/calculus/all.py
@@ -1,233 +1,15 @@
+# sage_setup: distribution = sagemath-symbolics
-from .calculus import maxima as maxima_calculus
-from .calculus import (laplace, inverse_laplace,
- limit, lim)
+from sage.calculus.all__sagemath_modules import *
-from .integration import numerical_integral, monte_carlo_integral
-integral_numerical = numerical_integral
+from sage.calculus import desolvers
+from sage.calculus.calculus import maxima as maxima_calculus
+from sage.calculus.calculus import (laplace, inverse_laplace,
+ limit, lim)
-from .interpolation import spline, Spline
-
-from .functional import (diff, derivative,
- expand,
- taylor, simplify)
-
-from .functions import (wronskian, jacobian)
-
-from .ode import ode_solver, ode_system
-
-from .desolvers import (desolve, desolve_laplace, desolve_system,
- eulers_method, eulers_method_2x2,
- eulers_method_2x2_plot, desolve_rk4, desolve_system_rk4,
- desolve_odeint, desolve_mintides, desolve_tides_mpfr)
-
-from .var import (var, function, clear_vars)
-
-from .transforms.all import *
-
-# We lazy_import the following modules since they import numpy which slows down sage startup
-from sage.misc.lazy_import import lazy_import
-lazy_import("sage.calculus.riemann", ["Riemann_Map"])
-lazy_import("sage.calculus.interpolators", ["polygon_spline", "complex_cubic_spline"])
-
-from sage.modules.free_module_element import vector
-from sage.matrix.constructor import matrix
-
-
-def symbolic_expression(x):
- """
- Create a symbolic expression or vector of symbolic expressions from x.
-
- INPUT:
-
- - ``x`` - an object
-
- OUTPUT:
-
- - a symbolic expression.
-
- EXAMPLES::
-
- sage: a = symbolic_expression(3/2); a
- 3/2
- sage: type(a)
-
- sage: R. = QQ[]; type(x)
-
- sage: a = symbolic_expression(2*x^2 + 3); a
- 2*x^2 + 3
- sage: type(a)
-
- sage: from sage.structure.element import Expression
- sage: isinstance(a, Expression)
- True
- sage: a in SR
- True
- sage: a.parent()
- Symbolic Ring
-
- Note that equations exist in the symbolic ring::
-
- sage: E = EllipticCurve('15a'); E
- Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field
- sage: symbolic_expression(E)
- x*y + y^2 + y == x^3 + x^2 - 10*x - 10
- sage: symbolic_expression(E) in SR
- True
-
- If ``x`` is a list or tuple, create a vector of symbolic expressions::
-
- sage: v = symbolic_expression([x,1]); v
- (x, 1)
- sage: v.base_ring()
- Symbolic Ring
- sage: v = symbolic_expression((x,1)); v
- (x, 1)
- sage: v.base_ring()
- Symbolic Ring
- sage: v = symbolic_expression((3,1)); v
- (3, 1)
- sage: v.base_ring()
- Symbolic Ring
- sage: E = EllipticCurve('15a'); E
- Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field
- sage: v = symbolic_expression([E,E]); v
- (x*y + y^2 + y == x^3 + x^2 - 10*x - 10, x*y + y^2 + y == x^3 + x^2 - 10*x - 10)
- sage: v.base_ring()
- Symbolic Ring
-
- Likewise, if ``x`` is a vector, create a vector of symbolic expressions::
-
- sage: u = vector([1, 2, 3])
- sage: v = symbolic_expression(u); v
- (1, 2, 3)
- sage: v.parent()
- Vector space of dimension 3 over Symbolic Ring
-
- If ``x`` is a list or tuple of lists/tuples/vectors, create a matrix of symbolic expressions::
-
- sage: M = symbolic_expression([[1, x, x^2], (x, x^2, x^3), vector([x^2, x^3, x^4])]); M
- [ 1 x x^2]
- [ x x^2 x^3]
- [x^2 x^3 x^4]
- sage: M.parent()
- Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring
-
- If ``x`` is a matrix, create a matrix of symbolic expressions::
-
- sage: A = matrix([[1, 2, 3], [4, 5, 6]])
- sage: B = symbolic_expression(A); B
- [1 2 3]
- [4 5 6]
- sage: B.parent()
- Full MatrixSpace of 2 by 3 dense matrices over Symbolic Ring
-
- If ``x`` is a function, for example defined by a ``lambda`` expression, create a
- symbolic function::
-
- sage: f = symbolic_expression(lambda z: z^2 + 1); f
- z |--> z^2 + 1
- sage: f.parent()
- Callable function ring with argument z
- sage: f(7)
- 50
-
- If ``x`` is a list or tuple of functions, or if ``x`` is a function that returns a list
- or tuple, create a callable symbolic vector::
-
- sage: symbolic_expression([lambda mu, nu: mu^2 + nu^2, lambda mu, nu: mu^2 - nu^2])
- (mu, nu) |--> (mu^2 + nu^2, mu^2 - nu^2)
- sage: f = symbolic_expression(lambda uwu: [1, uwu, uwu^2]); f
- uwu |--> (1, uwu, uwu^2)
- sage: f.parent()
- Vector space of dimension 3 over Callable function ring with argument uwu
- sage: f(5)
- (1, 5, 25)
- sage: f(5).parent()
- Vector space of dimension 3 over Symbolic Ring
-
- TESTS:
-
- Lists, tuples, and vectors of length 0 become vectors over a symbolic ring::
-
- sage: symbolic_expression([]).parent()
- Vector space of dimension 0 over Symbolic Ring
- sage: symbolic_expression(()).parent()
- Vector space of dimension 0 over Symbolic Ring
- sage: symbolic_expression(vector(QQ, 0)).parent()
- Vector space of dimension 0 over Symbolic Ring
-
- If a matrix has dimension 0, the result is still a matrix over a symbolic ring::
-
- sage: symbolic_expression(matrix(QQ, 2, 0)).parent()
- Full MatrixSpace of 2 by 0 dense matrices over Symbolic Ring
- sage: symbolic_expression(matrix(QQ, 0, 3)).parent()
- Full MatrixSpace of 0 by 3 dense matrices over Symbolic Ring
-
- Also functions defined using ``def`` can be used, but we do not advertise it as a use case::
-
- sage: def sos(x, y):
- ....: return x^2 + y^2
- sage: symbolic_expression(sos)
- (x, y) |--> x^2 + y^2
-
- Functions that take a varying number of arguments or keyword-only arguments are not accepted::
-
- sage: def variadic(x, *y):
- ....: return x
- sage: symbolic_expression(variadic)
- Traceback (most recent call last):
- ...
- TypeError: unable to convert to a symbolic expression
-
- sage: def function_with_keyword_only_arg(x, *, sign=1):
- ....: return sign * x
- sage: symbolic_expression(function_with_keyword_only_arg)
- Traceback (most recent call last):
- ...
- TypeError: unable to convert
- to a symbolic expression
- """
- from sage.symbolic.expression import Expression
- from sage.symbolic.ring import SR
- from sage.modules.free_module_element import is_FreeModuleElement
- from sage.structure.element import is_Matrix
-
- if isinstance(x, Expression):
- return x
- elif hasattr(x, '_symbolic_'):
- return x._symbolic_(SR)
- elif isinstance(x, (tuple, list)) or is_FreeModuleElement(x):
- expressions = [symbolic_expression(item) for item in x]
- if not expressions:
- # Make sure it is symbolic also when length is 0
- return vector(SR, 0)
- if is_FreeModuleElement(expressions[0]):
- return matrix(expressions)
- return vector(expressions)
- elif is_Matrix(x):
- if not x.nrows() or not x.ncols():
- # Make sure it is symbolic and of correct dimensions
- # also when a matrix dimension is 0
- return matrix(SR, x.nrows(), x.ncols())
- rows = [symbolic_expression(row) for row in x.rows()]
- return matrix(rows)
- elif callable(x):
- from inspect import signature, Parameter
- try:
- s = signature(x)
- except ValueError:
- pass
- else:
- if all(param.kind in (Parameter.POSITIONAL_ONLY, Parameter.POSITIONAL_OR_KEYWORD)
- for param in s.parameters.values()):
- vars = [SR.var(name) for name in s.parameters.keys()]
- result = x(*vars)
- if isinstance(result, (tuple, list)):
- return vector(SR, result).function(*vars)
- else:
- return SR(result).function(*vars)
- return SR(x)
-
-
-from . import desolvers
+from sage.calculus.desolvers import (desolve, desolve_laplace, desolve_system,
+ eulers_method, eulers_method_2x2,
+ eulers_method_2x2_plot, desolve_rk4, desolve_system_rk4,
+ desolve_odeint, desolve_mintides, desolve_tides_mpfr)
+from sage.calculus.expr import symbolic_expression
+from sage.calculus.var import (var, function, clear_vars)
diff --git a/src/sage/calculus/all__sagemath_categories.py b/src/sage/calculus/all__sagemath_categories.py
new file mode 100644
index 00000000000..cf9a7fbd0b2
--- /dev/null
+++ b/src/sage/calculus/all__sagemath_categories.py
@@ -0,0 +1 @@
+from sage.calculus.functional import diff, derivative, expand, simplify, taylor
diff --git a/src/sage/calculus/all__sagemath_modules.py b/src/sage/calculus/all__sagemath_modules.py
new file mode 100644
index 00000000000..f12d63a3b7f
--- /dev/null
+++ b/src/sage/calculus/all__sagemath_modules.py
@@ -0,0 +1,18 @@
+from sage.calculus.all__sagemath_categories import *
+
+from sage.calculus.integration import numerical_integral, monte_carlo_integral
+integral_numerical = numerical_integral
+
+from sage.calculus.interpolation import spline, Spline
+
+from sage.calculus.functions import wronskian, jacobian
+
+from sage.calculus.ode import ode_solver, ode_system
+
+# We lazy_import the following modules since they import numpy which slows down sage startup
+from sage.misc.lazy_import import lazy_import
+lazy_import("sage.calculus.riemann", ["Riemann_Map"])
+lazy_import("sage.calculus.interpolators", ["polygon_spline", "complex_cubic_spline"])
+
+from sage.calculus.transforms.all import *
+del lazy_import
diff --git a/src/sage/calculus/calculus.py b/src/sage/calculus/calculus.py
index 5bf4c0eec49..0f71699bc2f 100644
--- a/src/sage/calculus/calculus.py
+++ b/src/sage/calculus/calculus.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Symbolic Computation
diff --git a/src/sage/calculus/desolvers.py b/src/sage/calculus/desolvers.py
index afeee69ce89..c601c605642 100644
--- a/src/sage/calculus/desolvers.py
+++ b/src/sage/calculus/desolvers.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Solving ordinary differential equations
diff --git a/src/sage/calculus/expr.py b/src/sage/calculus/expr.py
new file mode 100644
index 00000000000..0aa62851d24
--- /dev/null
+++ b/src/sage/calculus/expr.py
@@ -0,0 +1,203 @@
+r"""
+Constructor for symbolic expressions
+"""
+
+from sage.misc.lazy_import import lazy_import
+from sage.structure.element import is_Matrix
+from sage.symbolic.expression import Expression
+from sage.symbolic.ring import SR
+
+lazy_import('sage.modules.free_module_element', ['vector', 'FreeModuleElement'])
+lazy_import('sage.matrix.constructor', 'matrix')
+
+
+def symbolic_expression(x):
+ """
+ Create a symbolic expression or vector of symbolic expressions from x.
+
+ INPUT:
+
+ - ``x`` - an object
+
+ OUTPUT:
+
+ - a symbolic expression.
+
+ EXAMPLES::
+
+ sage: a = symbolic_expression(3/2); a
+ 3/2
+ sage: type(a)
+
+ sage: R. = QQ[]; type(x)
+
+ sage: a = symbolic_expression(2*x^2 + 3); a
+ 2*x^2 + 3
+ sage: type(a)
+
+ sage: from sage.structure.element import Expression
+ sage: isinstance(a, Expression)
+ True
+ sage: a in SR
+ True
+ sage: a.parent()
+ Symbolic Ring
+
+ Note that equations exist in the symbolic ring::
+
+ sage: # needs sage.schemes
+ sage: E = EllipticCurve('15a'); E
+ Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field
+ sage: symbolic_expression(E)
+ x*y + y^2 + y == x^3 + x^2 - 10*x - 10
+ sage: symbolic_expression(E) in SR
+ True
+
+ If ``x`` is a list or tuple, create a vector of symbolic expressions::
+
+ sage: v = symbolic_expression([x,1]); v
+ (x, 1)
+ sage: v.base_ring()
+ Symbolic Ring
+ sage: v = symbolic_expression((x,1)); v
+ (x, 1)
+ sage: v.base_ring()
+ Symbolic Ring
+ sage: v = symbolic_expression((3,1)); v
+ (3, 1)
+ sage: v.base_ring()
+ Symbolic Ring
+ sage: E = EllipticCurve('15a'); E
+ Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field
+ sage: v = symbolic_expression([E,E]); v
+ (x*y + y^2 + y == x^3 + x^2 - 10*x - 10, x*y + y^2 + y == x^3 + x^2 - 10*x - 10)
+ sage: v.base_ring()
+ Symbolic Ring
+
+ Likewise, if ``x`` is a vector, create a vector of symbolic expressions::
+
+ sage: u = vector([1, 2, 3])
+ sage: v = symbolic_expression(u); v
+ (1, 2, 3)
+ sage: v.parent()
+ Vector space of dimension 3 over Symbolic Ring
+
+ If ``x`` is a list or tuple of lists/tuples/vectors, create a matrix of symbolic expressions::
+
+ sage: M = symbolic_expression([[1, x, x^2], (x, x^2, x^3), vector([x^2, x^3, x^4])]); M
+ [ 1 x x^2]
+ [ x x^2 x^3]
+ [x^2 x^3 x^4]
+ sage: M.parent()
+ Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring
+
+ If ``x`` is a matrix, create a matrix of symbolic expressions::
+
+ sage: A = matrix([[1, 2, 3], [4, 5, 6]])
+ sage: B = symbolic_expression(A); B
+ [1 2 3]
+ [4 5 6]
+ sage: B.parent()
+ Full MatrixSpace of 2 by 3 dense matrices over Symbolic Ring
+
+ If ``x`` is a function, for example defined by a ``lambda`` expression, create a
+ symbolic function::
+
+ sage: f = symbolic_expression(lambda z: z^2 + 1); f
+ z |--> z^2 + 1
+ sage: f.parent()
+ Callable function ring with argument z
+ sage: f(7)
+ 50
+
+ If ``x`` is a list or tuple of functions, or if ``x`` is a function that returns a list
+ or tuple, create a callable symbolic vector::
+
+ sage: symbolic_expression([lambda mu, nu: mu^2 + nu^2, lambda mu, nu: mu^2 - nu^2])
+ (mu, nu) |--> (mu^2 + nu^2, mu^2 - nu^2)
+ sage: f = symbolic_expression(lambda uwu: [1, uwu, uwu^2]); f
+ uwu |--> (1, uwu, uwu^2)
+ sage: f.parent()
+ Vector space of dimension 3 over Callable function ring with argument uwu
+ sage: f(5)
+ (1, 5, 25)
+ sage: f(5).parent()
+ Vector space of dimension 3 over Symbolic Ring
+
+ TESTS:
+
+ Lists, tuples, and vectors of length 0 become vectors over a symbolic ring::
+
+ sage: symbolic_expression([]).parent()
+ Vector space of dimension 0 over Symbolic Ring
+ sage: symbolic_expression(()).parent()
+ Vector space of dimension 0 over Symbolic Ring
+ sage: symbolic_expression(vector(QQ, 0)).parent()
+ Vector space of dimension 0 over Symbolic Ring
+
+ If a matrix has dimension 0, the result is still a matrix over a symbolic ring::
+
+ sage: symbolic_expression(matrix(QQ, 2, 0)).parent()
+ Full MatrixSpace of 2 by 0 dense matrices over Symbolic Ring
+ sage: symbolic_expression(matrix(QQ, 0, 3)).parent()
+ Full MatrixSpace of 0 by 3 dense matrices over Symbolic Ring
+
+ Also functions defined using ``def`` can be used, but we do not advertise it as a use case::
+
+ sage: def sos(x, y):
+ ....: return x^2 + y^2
+ sage: symbolic_expression(sos)
+ (x, y) |--> x^2 + y^2
+
+ Functions that take a varying number of arguments or keyword-only arguments are not accepted::
+
+ sage: def variadic(x, *y):
+ ....: return x
+ sage: symbolic_expression(variadic)
+ Traceback (most recent call last):
+ ...
+ TypeError: unable to convert to a symbolic expression
+
+ sage: def function_with_keyword_only_arg(x, *, sign=1):
+ ....: return sign * x
+ sage: symbolic_expression(function_with_keyword_only_arg)
+ Traceback (most recent call last):
+ ...
+ TypeError: unable to convert
+ to a symbolic expression
+ """
+ if isinstance(x, Expression):
+ return x
+ elif hasattr(x, '_symbolic_'):
+ return x._symbolic_(SR)
+ elif isinstance(x, (tuple, list, FreeModuleElement)):
+ expressions = [symbolic_expression(item) for item in x]
+ if not expressions:
+ # Make sure it is symbolic also when length is 0
+ return vector(SR, 0)
+ if isinstance(expressions[0], FreeModuleElement):
+ return matrix(expressions)
+ return vector(expressions)
+ elif is_Matrix(x):
+ if not x.nrows() or not x.ncols():
+ # Make sure it is symbolic and of correct dimensions
+ # also when a matrix dimension is 0
+ return matrix(SR, x.nrows(), x.ncols())
+ rows = [symbolic_expression(row) for row in x.rows()]
+ return matrix(rows)
+ elif callable(x):
+ from inspect import signature, Parameter
+ try:
+ s = signature(x)
+ except ValueError:
+ pass
+ else:
+ if all(param.kind in (Parameter.POSITIONAL_ONLY, Parameter.POSITIONAL_OR_KEYWORD)
+ for param in s.parameters.values()):
+ vars = [SR.var(name) for name in s.parameters.keys()]
+ result = x(*vars)
+ if isinstance(result, (tuple, list)):
+ return vector(SR, result).function(*vars)
+ else:
+ return SR(result).function(*vars)
+ return SR(x)
diff --git a/src/sage/calculus/functional.py b/src/sage/calculus/functional.py
index 109de21a5d9..1d1ae4791b7 100644
--- a/src/sage/calculus/functional.py
+++ b/src/sage/calculus/functional.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.symbolic
"""
Functional notation support for common calculus methods
diff --git a/src/sage/calculus/functions.py b/src/sage/calculus/functions.py
index 11a23aac323..77eaba98343 100644
--- a/src/sage/calculus/functions.py
+++ b/src/sage/calculus/functions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.symbolic
r"""
Calculus functions
diff --git a/src/sage/calculus/integration.pyx b/src/sage/calculus/integration.pyx
index f0cd3a9f1ca..8faaf040e3b 100644
--- a/src/sage/calculus/integration.pyx
+++ b/src/sage/calculus/integration.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.symbolic
"""
Numerical Integration
diff --git a/src/sage/calculus/interpolation.pxd b/src/sage/calculus/interpolation.pxd
index 9d60459a03b..d5d5b0c983a 100644
--- a/src/sage/calculus/interpolation.pxd
+++ b/src/sage/calculus/interpolation.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gsl.interp cimport *
cdef class Spline:
diff --git a/src/sage/calculus/interpolation.pyx b/src/sage/calculus/interpolation.pyx
index c2acab64fd9..bb5d2144990 100644
--- a/src/sage/calculus/interpolation.pyx
+++ b/src/sage/calculus/interpolation.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Real Interpolation using GSL
"""
diff --git a/src/sage/calculus/interpolators.pyx b/src/sage/calculus/interpolators.pyx
index 0e1f5fc7209..bf2b1b759da 100644
--- a/src/sage/calculus/interpolators.pyx
+++ b/src/sage/calculus/interpolators.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs numpy
"""
Complex Interpolation
diff --git a/src/sage/calculus/ode.pxd b/src/sage/calculus/ode.pxd
index 2de37b91764..6be7660f5f7 100644
--- a/src/sage/calculus/ode.pxd
+++ b/src/sage/calculus/ode.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cdef class ode_system:
cdef int c_j(self,double , double *, double *,double *) noexcept
diff --git a/src/sage/calculus/ode.pyx b/src/sage/calculus/ode.pyx
index 081b4f6bd83..1a58e0ef1dc 100644
--- a/src/sage/calculus/ode.pyx
+++ b/src/sage/calculus/ode.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Solving ODE numerically by GSL
diff --git a/src/sage/calculus/predefined.py b/src/sage/calculus/predefined.py
index 8e7f499b1ae..fcfb0b17208 100644
--- a/src/sage/calculus/predefined.py
+++ b/src/sage/calculus/predefined.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.symbolic.ring import var as _var
a = _var('a')
diff --git a/src/sage/calculus/riemann.pyx b/src/sage/calculus/riemann.pyx
index a4f9545bffb..b6c88377430 100644
--- a/src/sage/calculus/riemann.pyx
+++ b/src/sage/calculus/riemann.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs numpy sage.symbolic
"""
Riemann Mapping
diff --git a/src/sage/calculus/test_sympy.py b/src/sage/calculus/test_sympy.py
index 20736fcf6a6..ba9853bb356 100644
--- a/src/sage/calculus/test_sympy.py
+++ b/src/sage/calculus/test_sympy.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.symbolic
r"""
A Sample Session using SymPy
diff --git a/src/sage/calculus/tests.py b/src/sage/calculus/tests.py
index ac76b5e4f70..32b13c0dd3f 100644
--- a/src/sage/calculus/tests.py
+++ b/src/sage/calculus/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Calculus Tests and Examples
diff --git a/src/sage/calculus/transforms/all.py b/src/sage/calculus/transforms/all.py
index 379b3b69c37..6ade15d66c0 100644
--- a/src/sage/calculus/transforms/all.py
+++ b/src/sage/calculus/transforms/all.py
@@ -1,5 +1,7 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import("sage.calculus.transforms.fft", ["FastFourierTransform", "FFT"])
lazy_import("sage.calculus.transforms.dwt", ["WaveletTransform", "DWT"])
-from .dft import IndexedSequence
+from sage.calculus.transforms.dft import IndexedSequence
+del lazy_import
diff --git a/src/sage/calculus/transforms/dft.py b/src/sage/calculus/transforms/dft.py
index 1b165fa6503..3a6d6f18db0 100644
--- a/src/sage/calculus/transforms/dft.py
+++ b/src/sage/calculus/transforms/dft.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Discrete Fourier Transforms
diff --git a/src/sage/calculus/transforms/dwt.pxd b/src/sage/calculus/transforms/dwt.pxd
index c4087a7f7e0..eaa49e2d9d5 100644
--- a/src/sage/calculus/transforms/dwt.pxd
+++ b/src/sage/calculus/transforms/dwt.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gsl.wavelet cimport *
from sage.libs.gsl.array cimport GSLDoubleArray
diff --git a/src/sage/calculus/transforms/dwt.pyx b/src/sage/calculus/transforms/dwt.pyx
index 1330f6ac063..15cd94445b1 100644
--- a/src/sage/calculus/transforms/dwt.pyx
+++ b/src/sage/calculus/transforms/dwt.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Discrete Wavelet Transform
diff --git a/src/sage/calculus/transforms/fft.pxd b/src/sage/calculus/transforms/fft.pxd
index 780483318f1..67d416159dd 100644
--- a/src/sage/calculus/transforms/fft.pxd
+++ b/src/sage/calculus/transforms/fft.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gsl.fft cimport *
cdef class FastFourierTransform_base:
diff --git a/src/sage/calculus/transforms/fft.pyx b/src/sage/calculus/transforms/fft.pyx
index 363fa65a836..0afa7432442 100644
--- a/src/sage/calculus/transforms/fft.pyx
+++ b/src/sage/calculus/transforms/fft.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Fast Fourier Transforms Using GSL
diff --git a/src/sage/calculus/var.pyx b/src/sage/calculus/var.pyx
index 12958b0970a..2ebaf1583ca 100644
--- a/src/sage/calculus/var.pyx
+++ b/src/sage/calculus/var.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# cython: old_style_globals=True
"""
Symbolic variables
diff --git a/src/sage/calculus/wester.py b/src/sage/calculus/wester.py
index e33409a49ac..95b35e0bb0b 100644
--- a/src/sage/calculus/wester.py
+++ b/src/sage/calculus/wester.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.symbolic
r"""
Further examples from Wester's paper
diff --git a/src/sage/categories/action.pxd b/src/sage/categories/action.pxd
index 5883adebc97..0cedf7be6b5 100644
--- a/src/sage/categories/action.pxd
+++ b/src/sage/categories/action.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.element cimport Element
from sage.categories.morphism cimport Morphism
from sage.categories.map cimport Map
diff --git a/src/sage/categories/action.pyx b/src/sage/categories/action.pyx
index 27cf3e0b26c..5379dbda101 100644
--- a/src/sage/categories/action.pyx
+++ b/src/sage/categories/action.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Group, ring, etc. actions on objects
diff --git a/src/sage/categories/additive_groups.py b/src/sage/categories/additive_groups.py
index 25623d0eeb3..cf079c79406 100644
--- a/src/sage/categories/additive_groups.py
+++ b/src/sage/categories/additive_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Additive groups
"""
diff --git a/src/sage/categories/additive_magmas.py b/src/sage/categories/additive_magmas.py
index cfd518fa32b..ce01324c6b0 100644
--- a/src/sage/categories/additive_magmas.py
+++ b/src/sage/categories/additive_magmas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Additive magmas
"""
diff --git a/src/sage/categories/additive_monoids.py b/src/sage/categories/additive_monoids.py
index c0576cd8616..3d76c87113b 100644
--- a/src/sage/categories/additive_monoids.py
+++ b/src/sage/categories/additive_monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Additive monoids
"""
diff --git a/src/sage/categories/additive_semigroups.py b/src/sage/categories/additive_semigroups.py
index 038221fe5be..2df1cb6e997 100644
--- a/src/sage/categories/additive_semigroups.py
+++ b/src/sage/categories/additive_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Additive semigroups
"""
diff --git a/src/sage/categories/affine_weyl_groups.py b/src/sage/categories/affine_weyl_groups.py
index 7ae931201a9..9a26f8c5590 100644
--- a/src/sage/categories/affine_weyl_groups.py
+++ b/src/sage/categories/affine_weyl_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Affine Weyl groups
"""
diff --git a/src/sage/categories/algebra_functor.py b/src/sage/categories/algebra_functor.py
index 051374fa43c..005e0f3669f 100644
--- a/src/sage/categories/algebra_functor.py
+++ b/src/sage/categories/algebra_functor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# sage.doctest: needs sage.groups
r"""
Group algebras and beyond: the Algebra functorial construction
diff --git a/src/sage/categories/algebra_ideals.py b/src/sage/categories/algebra_ideals.py
index c33fa0ef7b0..c973743adc1 100644
--- a/src/sage/categories/algebra_ideals.py
+++ b/src/sage/categories/algebra_ideals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Algebra ideals
"""
diff --git a/src/sage/categories/algebra_modules.py b/src/sage/categories/algebra_modules.py
index e827cc7130d..8a84fa109d7 100644
--- a/src/sage/categories/algebra_modules.py
+++ b/src/sage/categories/algebra_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Algebra modules
"""
diff --git a/src/sage/categories/algebras.py b/src/sage/categories/algebras.py
index e4c54abf7c1..7dcf02467ff 100644
--- a/src/sage/categories/algebras.py
+++ b/src/sage/categories/algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Algebras
diff --git a/src/sage/categories/algebras_with_basis.py b/src/sage/categories/algebras_with_basis.py
index 0d1f72eb17c..ac7bc6f8040 100644
--- a/src/sage/categories/algebras_with_basis.py
+++ b/src/sage/categories/algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Algebras With Basis
"""
diff --git a/src/sage/categories/all.py b/src/sage/categories/all.py
index a344ed2a296..0be0369ef76 100644
--- a/src/sage/categories/all.py
+++ b/src/sage/categories/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Sage categories quickref
@@ -109,31 +110,31 @@
# * with basis
from sage.categories.modules_with_basis import ModulesWithBasis
FreeModules = ModulesWithBasis
-from sage.categories.hecke_modules import HeckeModules
-from sage.categories.algebras_with_basis import AlgebrasWithBasis
-from sage.categories.coalgebras_with_basis import CoalgebrasWithBasis
-from sage.categories.bialgebras_with_basis import BialgebrasWithBasis
+from sage.categories.hecke_modules import HeckeModules
+from sage.categories.algebras_with_basis import AlgebrasWithBasis
+from sage.categories.coalgebras_with_basis import CoalgebrasWithBasis
+from sage.categories.bialgebras_with_basis import BialgebrasWithBasis
from sage.categories.hopf_algebras_with_basis import HopfAlgebrasWithBasis
# finite dimensional * with basis
-from sage.categories.finite_dimensional_modules_with_basis import FiniteDimensionalModulesWithBasis
-from sage.categories.finite_dimensional_algebras_with_basis import FiniteDimensionalAlgebrasWithBasis
-from sage.categories.finite_dimensional_coalgebras_with_basis import FiniteDimensionalCoalgebrasWithBasis
-from sage.categories.finite_dimensional_bialgebras_with_basis import FiniteDimensionalBialgebrasWithBasis
+from sage.categories.finite_dimensional_modules_with_basis import FiniteDimensionalModulesWithBasis
+from sage.categories.finite_dimensional_algebras_with_basis import FiniteDimensionalAlgebrasWithBasis
+from sage.categories.finite_dimensional_coalgebras_with_basis import FiniteDimensionalCoalgebrasWithBasis
+from sage.categories.finite_dimensional_bialgebras_with_basis import FiniteDimensionalBialgebrasWithBasis
from sage.categories.finite_dimensional_hopf_algebras_with_basis import FiniteDimensionalHopfAlgebrasWithBasis
# graded *
-from sage.categories.graded_modules import GradedModules
-from sage.categories.graded_algebras import GradedAlgebras
-from sage.categories.graded_coalgebras import GradedCoalgebras
-from sage.categories.graded_bialgebras import GradedBialgebras
+from sage.categories.graded_modules import GradedModules
+from sage.categories.graded_algebras import GradedAlgebras
+from sage.categories.graded_coalgebras import GradedCoalgebras
+from sage.categories.graded_bialgebras import GradedBialgebras
from sage.categories.graded_hopf_algebras import GradedHopfAlgebras
# graded * with basis
-from sage.categories.graded_modules_with_basis import GradedModulesWithBasis
-from sage.categories.graded_algebras_with_basis import GradedAlgebrasWithBasis
-from sage.categories.graded_coalgebras_with_basis import GradedCoalgebrasWithBasis
-from sage.categories.graded_bialgebras_with_basis import GradedBialgebrasWithBasis
+from sage.categories.graded_modules_with_basis import GradedModulesWithBasis
+from sage.categories.graded_algebras_with_basis import GradedAlgebrasWithBasis
+from sage.categories.graded_coalgebras_with_basis import GradedCoalgebrasWithBasis
+from sage.categories.graded_bialgebras_with_basis import GradedBialgebrasWithBasis
from sage.categories.graded_hopf_algebras_with_basis import GradedHopfAlgebrasWithBasis
# Coxeter groups
@@ -155,3 +156,5 @@
# lie conformal algebras
lazy_import('sage.categories.lie_conformal_algebras', 'LieConformalAlgebras')
+del lazy_import
+del install_doc
diff --git a/src/sage/categories/all__sagemath_objects.py b/src/sage/categories/all__sagemath_objects.py
index d87b4a1d20e..42d003d22e1 100644
--- a/src/sage/categories/all__sagemath_objects.py
+++ b/src/sage/categories/all__sagemath_objects.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# Subset of sage.categories.all that is made available by the sage-objects distribution
from sage.misc.lazy_import import lazy_import
@@ -17,12 +18,16 @@
from sage.categories.cartesian_product import cartesian_product
-from sage.categories.functor import ForgetfulFunctor, IdentityFunctor
+from sage.categories.functor import (ForgetfulFunctor,
+ IdentityFunctor)
-from sage.categories.homset import Hom, hom, End, end, Homset, HomsetWithBase
+from sage.categories.homset import (Hom, hom,
+ End, end,
+ Homset, HomsetWithBase)
from sage.categories.morphism import Morphism
from sage.categories.realizations import Realizations
from sage.categories.sets_with_partial_maps import SetsWithPartialMaps
+del lazy_import
diff --git a/src/sage/categories/aperiodic_semigroups.py b/src/sage/categories/aperiodic_semigroups.py
index 474930f2525..b7ecff10622 100644
--- a/src/sage/categories/aperiodic_semigroups.py
+++ b/src/sage/categories/aperiodic_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Aperiodic semigroups
"""
diff --git a/src/sage/categories/associative_algebras.py b/src/sage/categories/associative_algebras.py
index 268c9054e97..f478602d5d4 100644
--- a/src/sage/categories/associative_algebras.py
+++ b/src/sage/categories/associative_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Associative algebras
"""
diff --git a/src/sage/categories/basic.py b/src/sage/categories/basic.py
index 568c9b7c114..cfc385513cb 100644
--- a/src/sage/categories/basic.py
+++ b/src/sage/categories/basic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
A subset of sage.categories.all with just the basic categories needed
for sage startup (i.e. to define ZZ, QQ, ...).
diff --git a/src/sage/categories/bialgebras.py b/src/sage/categories/bialgebras.py
index b927766568b..92df3723ad1 100644
--- a/src/sage/categories/bialgebras.py
+++ b/src/sage/categories/bialgebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat
r"""
Bialgebras
diff --git a/src/sage/categories/bialgebras_with_basis.py b/src/sage/categories/bialgebras_with_basis.py
index ced37464419..ece28d15f06 100644
--- a/src/sage/categories/bialgebras_with_basis.py
+++ b/src/sage/categories/bialgebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Bialgebras with basis
"""
diff --git a/src/sage/categories/bimodules.py b/src/sage/categories/bimodules.py
index 4e92f890cd0..ec5c6fc21ea 100644
--- a/src/sage/categories/bimodules.py
+++ b/src/sage/categories/bimodules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Bimodules
"""
diff --git a/src/sage/categories/cartesian_product.py b/src/sage/categories/cartesian_product.py
index bfedd135b2e..f4d5f0a630f 100644
--- a/src/sage/categories/cartesian_product.py
+++ b/src/sage/categories/cartesian_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Cartesian Product Functorial Construction
diff --git a/src/sage/categories/category.py b/src/sage/categories/category.py
index 84ba7163bd8..18ac6c211f4 100644
--- a/src/sage/categories/category.py
+++ b/src/sage/categories/category.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Categories
diff --git a/src/sage/categories/category_cy_helper.pxd b/src/sage/categories/category_cy_helper.pxd
index f50ce4e8226..3883df6685e 100644
--- a/src/sage/categories/category_cy_helper.pxd
+++ b/src/sage/categories/category_cy_helper.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-objects
+
cpdef tuple _sort_uniq(categories)
cdef class AxiomContainer(dict):
pass
diff --git a/src/sage/categories/category_cy_helper.pyx b/src/sage/categories/category_cy_helper.pyx
index d3859221c13..dc5cf578daa 100644
--- a/src/sage/categories/category_cy_helper.pyx
+++ b/src/sage/categories/category_cy_helper.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Fast functions for the category framework
diff --git a/src/sage/categories/category_singleton.pxd b/src/sage/categories/category_singleton.pxd
index b9b4a703b8d..b001228a042 100644
--- a/src/sage/categories/category_singleton.pxd
+++ b/src/sage/categories/category_singleton.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
cdef class Category_contains_method_by_parent_class:
cdef type _parent_class_of_category
diff --git a/src/sage/categories/category_singleton.pyx b/src/sage/categories/category_singleton.pyx
index 543ce0375f7..446c3f5ee33 100644
--- a/src/sage/categories/category_singleton.pyx
+++ b/src/sage/categories/category_singleton.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Singleton categories
"""
diff --git a/src/sage/categories/category_types.py b/src/sage/categories/category_types.py
index d80f5aa7bac..aba27e4dade 100644
--- a/src/sage/categories/category_types.py
+++ b/src/sage/categories/category_types.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Specific category classes
diff --git a/src/sage/categories/category_with_axiom.py b/src/sage/categories/category_with_axiom.py
index 005e86d7b87..30d306d77bb 100644
--- a/src/sage/categories/category_with_axiom.py
+++ b/src/sage/categories/category_with_axiom.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Axioms
diff --git a/src/sage/categories/chain_complexes.py b/src/sage/categories/chain_complexes.py
index 9616aa608c4..c2cd0e92c38 100644
--- a/src/sage/categories/chain_complexes.py
+++ b/src/sage/categories/chain_complexes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Category of chain complexes
"""
diff --git a/src/sage/categories/classical_crystals.py b/src/sage/categories/classical_crystals.py
index fb5d2c7cde8..777eb16dddc 100644
--- a/src/sage/categories/classical_crystals.py
+++ b/src/sage/categories/classical_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.graphs sage.combinat
r"""
Classical Crystals
diff --git a/src/sage/categories/coalgebras.py b/src/sage/categories/coalgebras.py
index 07b18882d49..2b79d9d3fc6 100644
--- a/src/sage/categories/coalgebras.py
+++ b/src/sage/categories/coalgebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat
r"""
Coalgebras
diff --git a/src/sage/categories/coalgebras_with_basis.py b/src/sage/categories/coalgebras_with_basis.py
index 1a3ecfe8302..03e6fd2a5cd 100644
--- a/src/sage/categories/coalgebras_with_basis.py
+++ b/src/sage/categories/coalgebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Coalgebras with basis
"""
diff --git a/src/sage/categories/coercion_methods.pyx b/src/sage/categories/coercion_methods.pyx
index 830bd238c66..0084b39d5eb 100644
--- a/src/sage/categories/coercion_methods.pyx
+++ b/src/sage/categories/coercion_methods.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Coercion methods for categories
diff --git a/src/sage/categories/commutative_additive_groups.py b/src/sage/categories/commutative_additive_groups.py
index ce1dfc5186a..b4ef4794212 100644
--- a/src/sage/categories/commutative_additive_groups.py
+++ b/src/sage/categories/commutative_additive_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative additive groups
"""
diff --git a/src/sage/categories/commutative_additive_monoids.py b/src/sage/categories/commutative_additive_monoids.py
index ac0bceaf43b..1b38ab845a2 100644
--- a/src/sage/categories/commutative_additive_monoids.py
+++ b/src/sage/categories/commutative_additive_monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative additive monoids
"""
diff --git a/src/sage/categories/commutative_additive_semigroups.py b/src/sage/categories/commutative_additive_semigroups.py
index 93c0f2eab5c..db28e51221b 100644
--- a/src/sage/categories/commutative_additive_semigroups.py
+++ b/src/sage/categories/commutative_additive_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative additive semigroups
"""
diff --git a/src/sage/categories/commutative_algebra_ideals.py b/src/sage/categories/commutative_algebra_ideals.py
index e47e1c4f87e..3df812635e8 100644
--- a/src/sage/categories/commutative_algebra_ideals.py
+++ b/src/sage/categories/commutative_algebra_ideals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative algebra ideals
"""
diff --git a/src/sage/categories/commutative_algebras.py b/src/sage/categories/commutative_algebras.py
index 986a45db3e3..f7dded587dc 100644
--- a/src/sage/categories/commutative_algebras.py
+++ b/src/sage/categories/commutative_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative algebras
"""
diff --git a/src/sage/categories/commutative_ring_ideals.py b/src/sage/categories/commutative_ring_ideals.py
index 8659b0c793b..630070dd526 100644
--- a/src/sage/categories/commutative_ring_ideals.py
+++ b/src/sage/categories/commutative_ring_ideals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative ring ideals
"""
diff --git a/src/sage/categories/commutative_rings.py b/src/sage/categories/commutative_rings.py
index 4e63eb8b594..9296f27d10a 100644
--- a/src/sage/categories/commutative_rings.py
+++ b/src/sage/categories/commutative_rings.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Commutative rings
"""
diff --git a/src/sage/categories/complete_discrete_valuation.py b/src/sage/categories/complete_discrete_valuation.py
index 7376d947530..ac3fddcf460 100644
--- a/src/sage/categories/complete_discrete_valuation.py
+++ b/src/sage/categories/complete_discrete_valuation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Complete Discrete Valuation Rings (CDVR) and Fields (CDVF)
"""
diff --git a/src/sage/categories/complex_reflection_groups.py b/src/sage/categories/complex_reflection_groups.py
index d9d30d41e40..d94d928216d 100644
--- a/src/sage/categories/complex_reflection_groups.py
+++ b/src/sage/categories/complex_reflection_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Complex reflection groups
"""
diff --git a/src/sage/categories/complex_reflection_or_generalized_coxeter_groups.py b/src/sage/categories/complex_reflection_or_generalized_coxeter_groups.py
index ca2f1e09235..b3ccdbc7195 100644
--- a/src/sage/categories/complex_reflection_or_generalized_coxeter_groups.py
+++ b/src/sage/categories/complex_reflection_or_generalized_coxeter_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups
r"""
Common category for Generalized Coxeter Groups or Complex Reflection Groups
diff --git a/src/sage/categories/covariant_functorial_construction.py b/src/sage/categories/covariant_functorial_construction.py
index c38fe295dbf..039b31b736e 100644
--- a/src/sage/categories/covariant_functorial_construction.py
+++ b/src/sage/categories/covariant_functorial_construction.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Covariant Functorial Constructions
diff --git a/src/sage/categories/coxeter_group_algebras.py b/src/sage/categories/coxeter_group_algebras.py
index 5cececc3fef..97ae4942578 100644
--- a/src/sage/categories/coxeter_group_algebras.py
+++ b/src/sage/categories/coxeter_group_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.groups
r"""
Coxeter Group Algebras
diff --git a/src/sage/categories/coxeter_groups.py b/src/sage/categories/coxeter_groups.py
index 7bbb286778d..d80c9aa0287 100644
--- a/src/sage/categories/coxeter_groups.py
+++ b/src/sage/categories/coxeter_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Coxeter Groups
"""
diff --git a/src/sage/categories/crystals.py b/src/sage/categories/crystals.py
index 5bf8f46d201..138b77bd3b4 100644
--- a/src/sage/categories/crystals.py
+++ b/src/sage/categories/crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.graphs sage.combinat
r"""
Crystals
diff --git a/src/sage/categories/cw_complexes.py b/src/sage/categories/cw_complexes.py
index 69faafeeb83..c0c4e178da9 100644
--- a/src/sage/categories/cw_complexes.py
+++ b/src/sage/categories/cw_complexes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
CW Complexes
"""
diff --git a/src/sage/categories/discrete_valuation.py b/src/sage/categories/discrete_valuation.py
index 24b15bca488..830c148c95b 100644
--- a/src/sage/categories/discrete_valuation.py
+++ b/src/sage/categories/discrete_valuation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Discrete Valuation Rings (DVR) and Fields (DVF)
"""
diff --git a/src/sage/categories/distributive_magmas_and_additive_magmas.py b/src/sage/categories/distributive_magmas_and_additive_magmas.py
index 6d1c7511c11..830c6c77c8c 100644
--- a/src/sage/categories/distributive_magmas_and_additive_magmas.py
+++ b/src/sage/categories/distributive_magmas_and_additive_magmas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Distributive Magmas and Additive Magmas
"""
diff --git a/src/sage/categories/division_rings.py b/src/sage/categories/division_rings.py
index cd26f46acae..ff6cee76ed6 100644
--- a/src/sage/categories/division_rings.py
+++ b/src/sage/categories/division_rings.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Division rings
"""
diff --git a/src/sage/categories/domains.py b/src/sage/categories/domains.py
index 18e2907b8ef..4902bb89897 100644
--- a/src/sage/categories/domains.py
+++ b/src/sage/categories/domains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Domains
"""
diff --git a/src/sage/categories/drinfeld_modules.py b/src/sage/categories/drinfeld_modules.py
index 380318c37ff..56264109214 100644
--- a/src/sage/categories/drinfeld_modules.py
+++ b/src/sage/categories/drinfeld_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
r"""
Drinfeld modules over a base
diff --git a/src/sage/categories/dual.py b/src/sage/categories/dual.py
index 2b21f81cbda..60503a8e83a 100644
--- a/src/sage/categories/dual.py
+++ b/src/sage/categories/dual.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Dual functorial construction
diff --git a/src/sage/categories/enumerated_sets.py b/src/sage/categories/enumerated_sets.py
index 08150e61360..9a8ff91ef1e 100644
--- a/src/sage/categories/enumerated_sets.py
+++ b/src/sage/categories/enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumerated sets
"""
diff --git a/src/sage/categories/euclidean_domains.py b/src/sage/categories/euclidean_domains.py
index eb02736f6e1..8ba23dcb876 100644
--- a/src/sage/categories/euclidean_domains.py
+++ b/src/sage/categories/euclidean_domains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Euclidean domains
diff --git a/src/sage/categories/examples/algebras_with_basis.py b/src/sage/categories/examples/algebras_with_basis.py
index e19d74ff3c9..1540bb50c6d 100644
--- a/src/sage/categories/examples/algebras_with_basis.py
+++ b/src/sage/categories/examples/algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat
r"""
Examples of algebras with basis
diff --git a/src/sage/categories/examples/all.py b/src/sage/categories/examples/all.py
index e69de29bb2d..b230a6a2ad9 100644
--- a/src/sage/categories/examples/all.py
+++ b/src/sage/categories/examples/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-categories
diff --git a/src/sage/categories/examples/commutative_additive_monoids.py b/src/sage/categories/examples/commutative_additive_monoids.py
index 20728722d9f..c805471fa52 100644
--- a/src/sage/categories/examples/commutative_additive_monoids.py
+++ b/src/sage/categories/examples/commutative_additive_monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of commutative additive monoids
"""
diff --git a/src/sage/categories/examples/commutative_additive_semigroups.py b/src/sage/categories/examples/commutative_additive_semigroups.py
index 0b3cb314e74..f30288675fe 100644
--- a/src/sage/categories/examples/commutative_additive_semigroups.py
+++ b/src/sage/categories/examples/commutative_additive_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of commutative additive semigroups
"""
diff --git a/src/sage/categories/examples/coxeter_groups.py b/src/sage/categories/examples/coxeter_groups.py
index ac76a708bec..f2791ac09ca 100644
--- a/src/sage/categories/examples/coxeter_groups.py
+++ b/src/sage/categories/examples/coxeter_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of Coxeter groups
"""
diff --git a/src/sage/categories/examples/crystals.py b/src/sage/categories/examples/crystals.py
index 520b97c34d5..4786a4ed6fd 100644
--- a/src/sage/categories/examples/crystals.py
+++ b/src/sage/categories/examples/crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.graphs
r"""
Example of a crystal
diff --git a/src/sage/categories/examples/cw_complexes.py b/src/sage/categories/examples/cw_complexes.py
index 0fefb254c20..89262cd6b43 100644
--- a/src/sage/categories/examples/cw_complexes.py
+++ b/src/sage/categories/examples/cw_complexes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of CW complexes
"""
diff --git a/src/sage/categories/examples/facade_sets.py b/src/sage/categories/examples/facade_sets.py
index bff442e2c5c..f088ca106c6 100644
--- a/src/sage/categories/examples/facade_sets.py
+++ b/src/sage/categories/examples/facade_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Example of facade set
"""
diff --git a/src/sage/categories/examples/filtered_algebras_with_basis.py b/src/sage/categories/examples/filtered_algebras_with_basis.py
index 57d106e4555..fd3e6b67968 100644
--- a/src/sage/categories/examples/filtered_algebras_with_basis.py
+++ b/src/sage/categories/examples/filtered_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of filtered algebra with basis
"""
diff --git a/src/sage/categories/examples/filtered_modules_with_basis.py b/src/sage/categories/examples/filtered_modules_with_basis.py
index a76726099bc..d62c3d906ff 100644
--- a/src/sage/categories/examples/filtered_modules_with_basis.py
+++ b/src/sage/categories/examples/filtered_modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat
r"""
Examples of filtered modules with basis
diff --git a/src/sage/categories/examples/finite_coxeter_groups.py b/src/sage/categories/examples/finite_coxeter_groups.py
index 84e4c1f95b4..9abf9304929 100644
--- a/src/sage/categories/examples/finite_coxeter_groups.py
+++ b/src/sage/categories/examples/finite_coxeter_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.groups
r"""
Examples of finite Coxeter groups
diff --git a/src/sage/categories/examples/finite_dimensional_algebras_with_basis.py b/src/sage/categories/examples/finite_dimensional_algebras_with_basis.py
index df8957dbaf7..9fb25719a25 100644
--- a/src/sage/categories/examples/finite_dimensional_algebras_with_basis.py
+++ b/src/sage/categories/examples/finite_dimensional_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules
r"""
Example of a finite dimensional algebra with basis
diff --git a/src/sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py b/src/sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py
index e8db64d11a9..7a88557d47a 100644
--- a/src/sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py
+++ b/src/sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules
r"""
Examples of a finite dimensional Lie algebra with basis
diff --git a/src/sage/categories/examples/finite_enumerated_sets.py b/src/sage/categories/examples/finite_enumerated_sets.py
index 6a606f7b9e3..264b9bc13ba 100644
--- a/src/sage/categories/examples/finite_enumerated_sets.py
+++ b/src/sage/categories/examples/finite_enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of finite enumerated sets
"""
diff --git a/src/sage/categories/examples/finite_monoids.py b/src/sage/categories/examples/finite_monoids.py
index 0a4c1374893..20119abac66 100644
--- a/src/sage/categories/examples/finite_monoids.py
+++ b/src/sage/categories/examples/finite_monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of finite monoids
"""
diff --git a/src/sage/categories/examples/finite_semigroups.py b/src/sage/categories/examples/finite_semigroups.py
index 13712de76fe..d019e6895e4 100644
--- a/src/sage/categories/examples/finite_semigroups.py
+++ b/src/sage/categories/examples/finite_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of finite semigroups
"""
diff --git a/src/sage/categories/examples/finite_weyl_groups.py b/src/sage/categories/examples/finite_weyl_groups.py
index 10fef899c94..b3321bdb58b 100644
--- a/src/sage/categories/examples/finite_weyl_groups.py
+++ b/src/sage/categories/examples/finite_weyl_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of finite Weyl groups
"""
diff --git a/src/sage/categories/examples/graded_connected_hopf_algebras_with_basis.py b/src/sage/categories/examples/graded_connected_hopf_algebras_with_basis.py
index 2290419adb3..28699e17256 100644
--- a/src/sage/categories/examples/graded_connected_hopf_algebras_with_basis.py
+++ b/src/sage/categories/examples/graded_connected_hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules
r"""
Examples of graded connected Hopf algebras with basis
diff --git a/src/sage/categories/examples/graded_modules_with_basis.py b/src/sage/categories/examples/graded_modules_with_basis.py
index 8ddfb7eed04..348bc5b9568 100644
--- a/src/sage/categories/examples/graded_modules_with_basis.py
+++ b/src/sage/categories/examples/graded_modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat
r"""
Examples of graded modules with basis
diff --git a/src/sage/categories/examples/graphs.py b/src/sage/categories/examples/graphs.py
index 063eeff1427..f67427d311b 100644
--- a/src/sage/categories/examples/graphs.py
+++ b/src/sage/categories/examples/graphs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of graphs
"""
diff --git a/src/sage/categories/examples/hopf_algebras_with_basis.py b/src/sage/categories/examples/hopf_algebras_with_basis.py
index 7f05827c28a..ea876abcbcf 100644
--- a/src/sage/categories/examples/hopf_algebras_with_basis.py
+++ b/src/sage/categories/examples/hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups sage.modules
r"""
Examples of Hopf algebras with basis
diff --git a/src/sage/categories/examples/infinite_enumerated_sets.py b/src/sage/categories/examples/infinite_enumerated_sets.py
index df4151f21c2..8f23d276988 100644
--- a/src/sage/categories/examples/infinite_enumerated_sets.py
+++ b/src/sage/categories/examples/infinite_enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of infinite enumerated sets
"""
diff --git a/src/sage/categories/examples/lie_algebras.py b/src/sage/categories/examples/lie_algebras.py
index 135c122efa2..23deb1c7a7c 100644
--- a/src/sage/categories/examples/lie_algebras.py
+++ b/src/sage/categories/examples/lie_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules
r"""
Examples of a Lie algebra
diff --git a/src/sage/categories/examples/lie_algebras_with_basis.py b/src/sage/categories/examples/lie_algebras_with_basis.py
index ca711e1cdb4..8366503691a 100644
--- a/src/sage/categories/examples/lie_algebras_with_basis.py
+++ b/src/sage/categories/examples/lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.modules
r"""
Examples of a Lie algebra with basis
diff --git a/src/sage/categories/examples/magmas.py b/src/sage/categories/examples/magmas.py
index a4858bc2606..538929c70a0 100644
--- a/src/sage/categories/examples/magmas.py
+++ b/src/sage/categories/examples/magmas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of magmas
"""
diff --git a/src/sage/categories/examples/manifolds.py b/src/sage/categories/examples/manifolds.py
index 6a748884eec..ce433618dc2 100644
--- a/src/sage/categories/examples/manifolds.py
+++ b/src/sage/categories/examples/manifolds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of manifolds
"""
diff --git a/src/sage/categories/examples/monoids.py b/src/sage/categories/examples/monoids.py
index 1d2b87279d2..fe0646eab6c 100644
--- a/src/sage/categories/examples/monoids.py
+++ b/src/sage/categories/examples/monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of monoids
"""
diff --git a/src/sage/categories/examples/posets.py b/src/sage/categories/examples/posets.py
index 20f461860c9..6cd523ceb96 100644
--- a/src/sage/categories/examples/posets.py
+++ b/src/sage/categories/examples/posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Examples of posets
"""
diff --git a/src/sage/categories/examples/semigroups.py b/src/sage/categories/examples/semigroups.py
index 797fd1b4b03..7e45dd8434e 100644
--- a/src/sage/categories/examples/semigroups.py
+++ b/src/sage/categories/examples/semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of semigroups
"""
diff --git a/src/sage/categories/examples/semigroups_cython.pyx b/src/sage/categories/examples/semigroups_cython.pyx
index b456c2868f8..4f7a6990586 100644
--- a/src/sage/categories/examples/semigroups_cython.pyx
+++ b/src/sage/categories/examples/semigroups_cython.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of semigroups in cython
"""
diff --git a/src/sage/categories/examples/sets_cat.py b/src/sage/categories/examples/sets_cat.py
index fbadb9ca405..2c91d652726 100644
--- a/src/sage/categories/examples/sets_cat.py
+++ b/src/sage/categories/examples/sets_cat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.pari
"""
Examples of sets
diff --git a/src/sage/categories/examples/sets_with_grading.py b/src/sage/categories/examples/sets_with_grading.py
index 9968d83942b..487c5100578 100644
--- a/src/sage/categories/examples/sets_with_grading.py
+++ b/src/sage/categories/examples/sets_with_grading.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Example of a set with grading
"""
diff --git a/src/sage/categories/examples/with_realizations.py b/src/sage/categories/examples/with_realizations.py
index 85b4b86daa0..2ff92851892 100644
--- a/src/sage/categories/examples/with_realizations.py
+++ b/src/sage/categories/examples/with_realizations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.modules
r"""
Examples of parents endowed with multiple realizations
diff --git a/src/sage/categories/facade_sets.py b/src/sage/categories/facade_sets.py
index 3f7fcf98abb..4719c9b9ec3 100644
--- a/src/sage/categories/facade_sets.py
+++ b/src/sage/categories/facade_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Facade Sets
diff --git a/src/sage/categories/fields.py b/src/sage/categories/fields.py
index 7407632a93f..3c3db094252 100644
--- a/src/sage/categories/fields.py
+++ b/src/sage/categories/fields.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Fields
"""
diff --git a/src/sage/categories/filtered_algebras.py b/src/sage/categories/filtered_algebras.py
index d0db31a98eb..bb16bc0374b 100644
--- a/src/sage/categories/filtered_algebras.py
+++ b/src/sage/categories/filtered_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Filtered Algebras
"""
diff --git a/src/sage/categories/filtered_algebras_with_basis.py b/src/sage/categories/filtered_algebras_with_basis.py
index 1abddc81a18..dd8074ab474 100644
--- a/src/sage/categories/filtered_algebras_with_basis.py
+++ b/src/sage/categories/filtered_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Filtered Algebras With Basis
diff --git a/src/sage/categories/filtered_hopf_algebras_with_basis.py b/src/sage/categories/filtered_hopf_algebras_with_basis.py
index dadd10dd70e..5efd48c6f02 100644
--- a/src/sage/categories/filtered_hopf_algebras_with_basis.py
+++ b/src/sage/categories/filtered_hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Filtered Hopf algebras with basis
"""
diff --git a/src/sage/categories/filtered_modules.py b/src/sage/categories/filtered_modules.py
index 780ef974956..e6ad7e0d918 100644
--- a/src/sage/categories/filtered_modules.py
+++ b/src/sage/categories/filtered_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Filtered Modules
diff --git a/src/sage/categories/filtered_modules_with_basis.py b/src/sage/categories/filtered_modules_with_basis.py
index 2705c2c3d55..4da72b5b762 100644
--- a/src/sage/categories/filtered_modules_with_basis.py
+++ b/src/sage/categories/filtered_modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Filtered Modules With Basis
diff --git a/src/sage/categories/finite_complex_reflection_groups.py b/src/sage/categories/finite_complex_reflection_groups.py
index 2fdc9912f89..f77ca9058a7 100644
--- a/src/sage/categories/finite_complex_reflection_groups.py
+++ b/src/sage/categories/finite_complex_reflection_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite Complex Reflection Groups
"""
diff --git a/src/sage/categories/finite_coxeter_groups.py b/src/sage/categories/finite_coxeter_groups.py
index afc4ca43a40..ceadffa942a 100644
--- a/src/sage/categories/finite_coxeter_groups.py
+++ b/src/sage/categories/finite_coxeter_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.groups
r"""
Finite Coxeter Groups
diff --git a/src/sage/categories/finite_crystals.py b/src/sage/categories/finite_crystals.py
index 4d5fdda550d..b934c692375 100644
--- a/src/sage/categories/finite_crystals.py
+++ b/src/sage/categories/finite_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.graphs
r"""
Finite Crystals
diff --git a/src/sage/categories/finite_dimensional_algebras_with_basis.py b/src/sage/categories/finite_dimensional_algebras_with_basis.py
index e1df9318ec3..58516af5b96 100644
--- a/src/sage/categories/finite_dimensional_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite dimensional algebras with basis
diff --git a/src/sage/categories/finite_dimensional_bialgebras_with_basis.py b/src/sage/categories/finite_dimensional_bialgebras_with_basis.py
index 02f1005e0de..54a7479fd0b 100644
--- a/src/sage/categories/finite_dimensional_bialgebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_bialgebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite dimensional bialgebras with basis
"""
diff --git a/src/sage/categories/finite_dimensional_coalgebras_with_basis.py b/src/sage/categories/finite_dimensional_coalgebras_with_basis.py
index 60b135080da..69cede64fd1 100644
--- a/src/sage/categories/finite_dimensional_coalgebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_coalgebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite dimensional coalgebras with basis
"""
diff --git a/src/sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py b/src/sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py
index bb0cb5db92d..6eb17b4ad0a 100644
--- a/src/sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite Dimensional Graded Lie Algebras With Basis
diff --git a/src/sage/categories/finite_dimensional_hopf_algebras_with_basis.py b/src/sage/categories/finite_dimensional_hopf_algebras_with_basis.py
index da3f1365584..f90e1dfd1c7 100644
--- a/src/sage/categories/finite_dimensional_hopf_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite dimensional Hopf algebras with basis
"""
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 6cb7badd99a..70268b73041 100644
--- a/src/sage/categories/finite_dimensional_lie_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite Dimensional Lie Algebras With Basis
@@ -445,7 +446,7 @@ def centralizer_basis(self, S):
sage: H.centralizer_basis(H)
[z]
- sage: # needs sage.combinat sage.groupssage.modules
+ sage: # needs sage.combinat sage.groups sage.modules
sage: D = DescentAlgebra(QQ, 4).D()
sage: L = LieAlgebra(associative=D)
sage: L.centralizer_basis(L)
@@ -456,6 +457,15 @@ def centralizer_basis(self, S):
(D{},
D{1} + D{1, 2} + D{2, 3} + D{3},
D{1, 2, 3} + D{1, 3} + D{2})
+
+ sage: scoeffs = {('a','d'): {'a':1}, ('a','e'): {'b':-1},
+ ....: ('b','d'): {'b':1}, ('b','e'): {'a':1},
+ ....: ('d','e'): {'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: L.centralizer_basis([a, c])
+ [a, b, c]
+ sage: L.centralizer_basis([a, e])
+ [c]
"""
from sage.matrix.constructor import matrix
@@ -481,7 +491,7 @@ def centralizer_basis(self, S):
[[sum(m[i,j] * sc[x,xp][k] for j,xp in enumerate(X)
if (x, xp) in sc)
for x in X]
- for i in range(d) for k in range(d)])
+ for i in range(m.nrows()) for k in range(d)])
C = c_mat.right_kernel().basis_matrix()
return [self.from_vector(c) for c in C]
@@ -531,6 +541,99 @@ def center(self):
"""
return self.centralizer(self)
+ def normalizer_basis(self, S):
+ r"""
+ Return a basis of the normalizer of ``S`` in ``self``.
+
+ INPUT:
+
+ - ``S`` -- a subalgebra of ``self`` or a list of elements that
+ represent generators for a subalgebra
+
+ .. SEEALSO::
+
+ :meth:`normalizer`
+
+ EXAMPLES::
+
+ sage: scoeffs = {('a','d'): {'a':1}, ('a','e'): {'b':-1},
+ ....: ('b','d'): {'b':1}, ('b','e'): {'a':1},
+ ....: ('d','e'): {'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: L.normalizer_basis([a, e])
+ [b, c]
+
+ sage: S = L.subalgebra([a, e])
+ sage: L.normalizer_basis(S)
+ [a, b, c, e]
+
+ When the subalgebra is the ambient Lie algebra, we return the
+ basis of the ambient Lie algebra::
+
+ sage: L.normalizer_basis(L)
+ Finite family {'a': a, 'b': b, 'c': c, 'd': d, 'e': e}
+ sage: L.normalizer_basis([a, b, c, a, d + e, a + e])
+ Finite family {'a': a, 'b': b, 'c': c, 'd': d, 'e': e}
+ """
+ from sage.matrix.constructor import matrix
+
+ if S is self:
+ return self.basis()
+ if isinstance(S, (list, tuple)):
+ m = matrix([v.to_vector() for v in self.echelon_form(S)])
+ else:
+ m = self.subalgebra(S).basis_matrix()
+
+ if m.nrows() == self.dimension():
+ return self.basis()
+
+ S = self.structure_coefficients()
+ sc = {}
+ for k in S.keys():
+ v = S[k].to_vector()
+ sc[k] = v
+ 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)
+ for x in X]
+ + [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]
+
+ def normalizer(self, S):
+ r"""
+ Return the normalizer of ``S`` in ``self``.
+
+ INPUT:
+
+ - ``S`` -- a subalgebra of ``self`` or a list of elements that
+ represent generators for a subalgebra
+
+ .. SEEALSO::
+
+ :meth:`normalizer_basis`
+
+ EXAMPLES::
+
+ sage: scoeffs = {('a','d'): {'a':1}, ('a','e'): {'b':-1},
+ ....: ('b','d'): {'b':1}, ('b','e'): {'a':1},
+ ....: ('d','e'): {'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: L.normalizer([a, e])
+ Subalgebra generated by (b, c) of Lie algebra on
+ 5 generators (a, b, c, d, e) over Rational Field
+ sage: L.normalizer([a, c, e])
+ Subalgebra generated by (b, c, d) of Lie algebra on
+ 5 generators (a, b, c, d, e) over Rational Field
+ """
+ return self.subalgebra(self.normalizer_basis(S))
+
@cached_method
def derivations_basis(self):
r"""
@@ -1927,6 +2030,90 @@ def to_prod(vec, index):
return [UEA.sum(to_prod(vec, index) for index in vec.support())
for vec in tens]
+ def faithful_representation(self, algorithm=None):
+ r"""
+ Return a faithful representation of ``self``.
+
+ By Ado's and Iwasawa's theorems, every finite dimensional
+ Lie algebra has a faithful finite dimensional representation.
+
+ INPUT:
+
+ - ``algorithm`` -- one of the following depending on the
+ classification of the Lie algebra:
+
+ Nilpotent Lie algebras:
+
+ * ``'regular'`` -- use the universal enveloping algebra quotient
+ :class:`~sage.algebras.lie_algebras.representation.FaithfulRepresentationNilpotentPBW`
+ * ``'minimal'`` -- construct the minimal representation (for
+ precise details, see the documentation of
+ :class:`~sage.algebras.lie_algebras.representation.FaithfulRepresentationNilpotentPBW`)
+
+ Solvable but not nilpotent:
+
+ * Not implemented
+
+ Semisimple:
+
+ * Not implemented
+
+ General case
+
+ * Not implemented
+
+ EXAMPLES::
+
+ sage: H2 = lie_algebras.Heisenberg(QQ, 2)
+ sage: H2.is_nilpotent()
+ True
+ sage: F = H2.faithful_representation(); F
+ Faithful 16 dimensional representation of
+ Heisenberg algebra of rank 2 over Rational Field
+ sage: M = H2.faithful_representation(algorithm="minimal"); M
+ Minimal faithful representation of
+ Heisenberg algebra of rank 2 over Rational Field
+ sage: M.dimension()
+ 4
+ sage: H2.faithful_representation(algorithm="invalid")
+ Traceback (most recent call last):
+ ...
+ ValueError: invalid algorithm 'invalid'
+
+ sage: scoeffs = {('a','d'): {'a':1}, ('a','e'): {'b':-1},
+ ....: ('b','d'): {'b':1}, ('b','e'): {'a':1},
+ ....: ('d','e'): {'c':1}}
+ sage: L. = LieAlgebra(QQ, scoeffs)
+ sage: L.is_nilpotent()
+ False
+ sage: L.is_solvable()
+ True
+ sage: L.faithful_representation()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: only implemented for nilpotent Lie algebras
+
+ sage: sl3 = LieAlgebra(QQ, cartan_type=['A', 2])
+ sage: sl3.is_semisimple()
+ True
+ sage: sl3.faithful_representation()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: only implemented for nilpotent Lie algebras
+ """
+ if self.is_nilpotent():
+ if algorithm is None:
+ algorithm = "regular"
+ if algorithm == "regular":
+ from sage.algebras.lie_algebras.representation import FaithfulRepresentationNilpotentPBW
+ return FaithfulRepresentationNilpotentPBW(self, minimal=False)
+ if algorithm == "minimal":
+ from sage.algebras.lie_algebras.representation import FaithfulRepresentationNilpotentPBW
+ return FaithfulRepresentationNilpotentPBW(self, minimal=True)
+ else:
+ raise NotImplementedError("only implemented for nilpotent Lie algebras")
+ raise ValueError("invalid algorithm '{}'".format(algorithm))
+
class ElementMethods:
def adjoint_matrix(self, sparse=False): # In #11111 (more or less) by using matrix of a morphism
"""
diff --git a/src/sage/categories/finite_dimensional_modules_with_basis.py b/src/sage/categories/finite_dimensional_modules_with_basis.py
index ab22cd355d5..7cf24baa57d 100644
--- a/src/sage/categories/finite_dimensional_modules_with_basis.py
+++ b/src/sage/categories/finite_dimensional_modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite dimensional modules with basis
"""
diff --git a/src/sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py b/src/sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py
index 78d801a5ef4..ae3a38d9dda 100644
--- a/src/sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite Dimensional Nilpotent Lie Algebras With Basis
diff --git a/src/sage/categories/finite_dimensional_semisimple_algebras_with_basis.py b/src/sage/categories/finite_dimensional_semisimple_algebras_with_basis.py
index da4b297ddde..2cbcc8aac61 100644
--- a/src/sage/categories/finite_dimensional_semisimple_algebras_with_basis.py
+++ b/src/sage/categories/finite_dimensional_semisimple_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite dimensional semisimple algebras with basis
"""
diff --git a/src/sage/categories/finite_enumerated_sets.py b/src/sage/categories/finite_enumerated_sets.py
index 38958d8d024..b3b9ede2deb 100644
--- a/src/sage/categories/finite_enumerated_sets.py
+++ b/src/sage/categories/finite_enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite Enumerated Sets
"""
diff --git a/src/sage/categories/finite_fields.py b/src/sage/categories/finite_fields.py
index d9333c80707..6219c8dc357 100644
--- a/src/sage/categories/finite_fields.py
+++ b/src/sage/categories/finite_fields.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite fields
"""
diff --git a/src/sage/categories/finite_groups.py b/src/sage/categories/finite_groups.py
index 70cc029e389..a88a56e96cf 100644
--- a/src/sage/categories/finite_groups.py
+++ b/src/sage/categories/finite_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups
r"""
Finite groups
diff --git a/src/sage/categories/finite_lattice_posets.py b/src/sage/categories/finite_lattice_posets.py
index 96f2385404c..773d8c4914d 100644
--- a/src/sage/categories/finite_lattice_posets.py
+++ b/src/sage/categories/finite_lattice_posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite lattice posets
"""
diff --git a/src/sage/categories/finite_monoids.py b/src/sage/categories/finite_monoids.py
index b446dc925cb..9b26acb459c 100644
--- a/src/sage/categories/finite_monoids.py
+++ b/src/sage/categories/finite_monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite monoids
"""
diff --git a/src/sage/categories/finite_permutation_groups.py b/src/sage/categories/finite_permutation_groups.py
index a8c008ac170..dcc4bfa66db 100644
--- a/src/sage/categories/finite_permutation_groups.py
+++ b/src/sage/categories/finite_permutation_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups
r"""
Finite Permutation Groups
diff --git a/src/sage/categories/finite_posets.py b/src/sage/categories/finite_posets.py
index 68317bbb4c3..c1f9a4e6f76 100644
--- a/src/sage/categories/finite_posets.py
+++ b/src/sage/categories/finite_posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.graphs
r"""
Finite posets
diff --git a/src/sage/categories/finite_semigroups.py b/src/sage/categories/finite_semigroups.py
index ad384fc2b79..b699e33c9ab 100644
--- a/src/sage/categories/finite_semigroups.py
+++ b/src/sage/categories/finite_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite semigroups
"""
diff --git a/src/sage/categories/finite_sets.py b/src/sage/categories/finite_sets.py
index 494ec2cdc6c..0f464e2cb9c 100644
--- a/src/sage/categories/finite_sets.py
+++ b/src/sage/categories/finite_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite sets
"""
diff --git a/src/sage/categories/finite_weyl_groups.py b/src/sage/categories/finite_weyl_groups.py
index 8e0346eb5ab..3e790d78965 100644
--- a/src/sage/categories/finite_weyl_groups.py
+++ b/src/sage/categories/finite_weyl_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite Weyl Groups
"""
diff --git a/src/sage/categories/finitely_generated_lambda_bracket_algebras.py b/src/sage/categories/finitely_generated_lambda_bracket_algebras.py
index 5ff1634ca43..ac1e775b90a 100644
--- a/src/sage/categories/finitely_generated_lambda_bracket_algebras.py
+++ b/src/sage/categories/finitely_generated_lambda_bracket_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Finitely Generated Lambda bracket Algebras
diff --git a/src/sage/categories/finitely_generated_lie_conformal_algebras.py b/src/sage/categories/finitely_generated_lie_conformal_algebras.py
index 90b18df668f..11066c7d160 100644
--- a/src/sage/categories/finitely_generated_lie_conformal_algebras.py
+++ b/src/sage/categories/finitely_generated_lie_conformal_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Finitely Generated Lie Conformal Algebras
diff --git a/src/sage/categories/finitely_generated_magmas.py b/src/sage/categories/finitely_generated_magmas.py
index fe845e8b92a..d89f2477045 100644
--- a/src/sage/categories/finitely_generated_magmas.py
+++ b/src/sage/categories/finitely_generated_magmas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finitely generated magmas
"""
diff --git a/src/sage/categories/finitely_generated_semigroups.py b/src/sage/categories/finitely_generated_semigroups.py
index 369e6375a16..b3e2a46f3a4 100644
--- a/src/sage/categories/finitely_generated_semigroups.py
+++ b/src/sage/categories/finitely_generated_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finitely generated semigroups
"""
diff --git a/src/sage/categories/function_fields.py b/src/sage/categories/function_fields.py
index 6c949b6197a..02ba3021741 100644
--- a/src/sage/categories/function_fields.py
+++ b/src/sage/categories/function_fields.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Function fields
"""
diff --git a/src/sage/categories/functor.pxd b/src/sage/categories/functor.pxd
index 22eec36f7ad..76fa0fe1c6e 100644
--- a/src/sage/categories/functor.pxd
+++ b/src/sage/categories/functor.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.sage_object cimport SageObject
cdef class Functor(SageObject):
diff --git a/src/sage/categories/functor.pyx b/src/sage/categories/functor.pyx
index 889de1d7e7d..8d6af8b7639 100644
--- a/src/sage/categories/functor.pyx
+++ b/src/sage/categories/functor.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Functors
diff --git a/src/sage/categories/g_sets.py b/src/sage/categories/g_sets.py
index 5967fcf7d5f..d49f790a9e0 100644
--- a/src/sage/categories/g_sets.py
+++ b/src/sage/categories/g_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
G-Sets
"""
diff --git a/src/sage/categories/gcd_domains.py b/src/sage/categories/gcd_domains.py
index e946db6fa29..6ffb6456625 100644
--- a/src/sage/categories/gcd_domains.py
+++ b/src/sage/categories/gcd_domains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Gcd domains
"""
diff --git a/src/sage/categories/generalized_coxeter_groups.py b/src/sage/categories/generalized_coxeter_groups.py
index 844472ba6be..5e0641ed37e 100644
--- a/src/sage/categories/generalized_coxeter_groups.py
+++ b/src/sage/categories/generalized_coxeter_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Generalized Coxeter Groups
"""
diff --git a/src/sage/categories/graded_algebras.py b/src/sage/categories/graded_algebras.py
index 190355b59c5..dc48ad19d54 100644
--- a/src/sage/categories/graded_algebras.py
+++ b/src/sage/categories/graded_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded Algebras
"""
diff --git a/src/sage/categories/graded_algebras_with_basis.py b/src/sage/categories/graded_algebras_with_basis.py
index 62d4816b208..9b44bc9567b 100644
--- a/src/sage/categories/graded_algebras_with_basis.py
+++ b/src/sage/categories/graded_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded algebras with basis
"""
diff --git a/src/sage/categories/graded_bialgebras.py b/src/sage/categories/graded_bialgebras.py
index eff325b320e..ceb0c7fe26e 100644
--- a/src/sage/categories/graded_bialgebras.py
+++ b/src/sage/categories/graded_bialgebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded bialgebras
"""
diff --git a/src/sage/categories/graded_bialgebras_with_basis.py b/src/sage/categories/graded_bialgebras_with_basis.py
index d1727c0f40c..f97855196e7 100644
--- a/src/sage/categories/graded_bialgebras_with_basis.py
+++ b/src/sage/categories/graded_bialgebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded bialgebras with basis
"""
diff --git a/src/sage/categories/graded_coalgebras.py b/src/sage/categories/graded_coalgebras.py
index 1b3a3c1d154..12d07b0f679 100644
--- a/src/sage/categories/graded_coalgebras.py
+++ b/src/sage/categories/graded_coalgebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded Coalgebras
"""
diff --git a/src/sage/categories/graded_coalgebras_with_basis.py b/src/sage/categories/graded_coalgebras_with_basis.py
index 9efb1854780..bb4a44c676b 100644
--- a/src/sage/categories/graded_coalgebras_with_basis.py
+++ b/src/sage/categories/graded_coalgebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded coalgebras with basis
"""
diff --git a/src/sage/categories/graded_hopf_algebras.py b/src/sage/categories/graded_hopf_algebras.py
index 60d5befd6f5..97daf47ebfc 100644
--- a/src/sage/categories/graded_hopf_algebras.py
+++ b/src/sage/categories/graded_hopf_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded Hopf algebras
"""
diff --git a/src/sage/categories/graded_hopf_algebras_with_basis.py b/src/sage/categories/graded_hopf_algebras_with_basis.py
index 60cf4977eae..3c0458c0e03 100644
--- a/src/sage/categories/graded_hopf_algebras_with_basis.py
+++ b/src/sage/categories/graded_hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded Hopf algebras with basis
"""
diff --git a/src/sage/categories/graded_lie_algebras.py b/src/sage/categories/graded_lie_algebras.py
index fac1436c428..ee8ab5df338 100644
--- a/src/sage/categories/graded_lie_algebras.py
+++ b/src/sage/categories/graded_lie_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded Lie Algebras
diff --git a/src/sage/categories/graded_lie_algebras_with_basis.py b/src/sage/categories/graded_lie_algebras_with_basis.py
index 8552218e074..ddf5d8616a2 100644
--- a/src/sage/categories/graded_lie_algebras_with_basis.py
+++ b/src/sage/categories/graded_lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded Lie Algebras With Basis
"""
diff --git a/src/sage/categories/graded_lie_conformal_algebras.py b/src/sage/categories/graded_lie_conformal_algebras.py
index a17c067ae4e..75924494963 100644
--- a/src/sage/categories/graded_lie_conformal_algebras.py
+++ b/src/sage/categories/graded_lie_conformal_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Graded Lie Conformal Algebras
diff --git a/src/sage/categories/graded_modules.py b/src/sage/categories/graded_modules.py
index ff66b885913..b24f210ad31 100644
--- a/src/sage/categories/graded_modules.py
+++ b/src/sage/categories/graded_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded modules
"""
diff --git a/src/sage/categories/graded_modules_with_basis.py b/src/sage/categories/graded_modules_with_basis.py
index adb16235761..057f1e793f5 100644
--- a/src/sage/categories/graded_modules_with_basis.py
+++ b/src/sage/categories/graded_modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Graded modules with basis
"""
diff --git a/src/sage/categories/graphs.py b/src/sage/categories/graphs.py
index 7142081516e..572156be286 100644
--- a/src/sage/categories/graphs.py
+++ b/src/sage/categories/graphs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Graphs
"""
diff --git a/src/sage/categories/group_algebras.py b/src/sage/categories/group_algebras.py
index c5cceb53633..6329899f2d7 100644
--- a/src/sage/categories/group_algebras.py
+++ b/src/sage/categories/group_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Group Algebras
diff --git a/src/sage/categories/groupoid.py b/src/sage/categories/groupoid.py
index 95af5df164c..0f67bd47608 100644
--- a/src/sage/categories/groupoid.py
+++ b/src/sage/categories/groupoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups
r"""
Groupoid
diff --git a/src/sage/categories/groups.py b/src/sage/categories/groups.py
index 54c23ae3176..332185e5b7a 100644
--- a/src/sage/categories/groups.py
+++ b/src/sage/categories/groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Groups
"""
diff --git a/src/sage/categories/h_trivial_semigroups.py b/src/sage/categories/h_trivial_semigroups.py
index 5630068d671..9b1f0ab57b0 100644
--- a/src/sage/categories/h_trivial_semigroups.py
+++ b/src/sage/categories/h_trivial_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
H-trivial semigroups
"""
diff --git a/src/sage/categories/hecke_modules.py b/src/sage/categories/hecke_modules.py
index 6a575fd17d6..ba767c3b74c 100644
--- a/src/sage/categories/hecke_modules.py
+++ b/src/sage/categories/hecke_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Hecke modules
"""
diff --git a/src/sage/categories/highest_weight_crystals.py b/src/sage/categories/highest_weight_crystals.py
index 32cbf77c87a..8a4afe675d1 100644
--- a/src/sage/categories/highest_weight_crystals.py
+++ b/src/sage/categories/highest_weight_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.graphs
r"""
Highest Weight Crystals
diff --git a/src/sage/categories/homset.py b/src/sage/categories/homset.py
index deb489a9042..e20a5faaf99 100644
--- a/src/sage/categories/homset.py
+++ b/src/sage/categories/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Homsets
diff --git a/src/sage/categories/homsets.py b/src/sage/categories/homsets.py
index b915dbb12fe..bdf8c482cc0 100644
--- a/src/sage/categories/homsets.py
+++ b/src/sage/categories/homsets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Homset categories
"""
diff --git a/src/sage/categories/hopf_algebras.py b/src/sage/categories/hopf_algebras.py
index 49091b3de60..acc85774aff 100644
--- a/src/sage/categories/hopf_algebras.py
+++ b/src/sage/categories/hopf_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Hopf algebras
"""
diff --git a/src/sage/categories/hopf_algebras_with_basis.py b/src/sage/categories/hopf_algebras_with_basis.py
index d56adc36eb1..f4bbb6af51d 100644
--- a/src/sage/categories/hopf_algebras_with_basis.py
+++ b/src/sage/categories/hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Hopf algebras with basis
"""
diff --git a/src/sage/categories/infinite_enumerated_sets.py b/src/sage/categories/infinite_enumerated_sets.py
index e65bf944b87..c5f5df3ffd9 100644
--- a/src/sage/categories/infinite_enumerated_sets.py
+++ b/src/sage/categories/infinite_enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Infinite Enumerated Sets
diff --git a/src/sage/categories/integral_domains.py b/src/sage/categories/integral_domains.py
index b6e6f59a196..ae47e5205f6 100644
--- a/src/sage/categories/integral_domains.py
+++ b/src/sage/categories/integral_domains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Integral domains
"""
diff --git a/src/sage/categories/isomorphic_objects.py b/src/sage/categories/isomorphic_objects.py
index f1473997c14..658402aea09 100644
--- a/src/sage/categories/isomorphic_objects.py
+++ b/src/sage/categories/isomorphic_objects.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Isomorphic Objects Functorial Construction
diff --git a/src/sage/categories/j_trivial_semigroups.py b/src/sage/categories/j_trivial_semigroups.py
index 8ca78c83a1e..c09e1cea144 100644
--- a/src/sage/categories/j_trivial_semigroups.py
+++ b/src/sage/categories/j_trivial_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
J-trivial semigroups
"""
diff --git a/src/sage/categories/kac_moody_algebras.py b/src/sage/categories/kac_moody_algebras.py
index 52f738243b8..ed2ba241bdf 100644
--- a/src/sage/categories/kac_moody_algebras.py
+++ b/src/sage/categories/kac_moody_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Kac-Moody Algebras
diff --git a/src/sage/categories/l_trivial_semigroups.py b/src/sage/categories/l_trivial_semigroups.py
index ef4a8c41016..478003e0e48 100644
--- a/src/sage/categories/l_trivial_semigroups.py
+++ b/src/sage/categories/l_trivial_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
L-trivial semigroups
"""
diff --git a/src/sage/categories/lambda_bracket_algebras.py b/src/sage/categories/lambda_bracket_algebras.py
index 56818bf4d04..9c93d417489 100644
--- a/src/sage/categories/lambda_bracket_algebras.py
+++ b/src/sage/categories/lambda_bracket_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Lambda Bracket Algebras
diff --git a/src/sage/categories/lambda_bracket_algebras_with_basis.py b/src/sage/categories/lambda_bracket_algebras_with_basis.py
index 62fe41f3336..c79d1cc8c8a 100644
--- a/src/sage/categories/lambda_bracket_algebras_with_basis.py
+++ b/src/sage/categories/lambda_bracket_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Lambda Bracket Algebras With Basis
diff --git a/src/sage/categories/lattice_posets.py b/src/sage/categories/lattice_posets.py
index f14fa364415..29b1738c6ac 100644
--- a/src/sage/categories/lattice_posets.py
+++ b/src/sage/categories/lattice_posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Lattice posets
"""
diff --git a/src/sage/categories/left_modules.py b/src/sage/categories/left_modules.py
index 51de3497a53..a6394582d4d 100644
--- a/src/sage/categories/left_modules.py
+++ b/src/sage/categories/left_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Left modules
"""
diff --git a/src/sage/categories/lie_algebras.py b/src/sage/categories/lie_algebras.py
index d0958f12d89..c0b80226c9a 100644
--- a/src/sage/categories/lie_algebras.py
+++ b/src/sage/categories/lie_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Lie Algebras
diff --git a/src/sage/categories/lie_algebras_with_basis.py b/src/sage/categories/lie_algebras_with_basis.py
index 67570b611b3..7cdf3fd7bca 100644
--- a/src/sage/categories/lie_algebras_with_basis.py
+++ b/src/sage/categories/lie_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Lie Algebras With Basis
diff --git a/src/sage/categories/lie_conformal_algebras.py b/src/sage/categories/lie_conformal_algebras.py
index d1e77c3c56b..561d9e1e693 100644
--- a/src/sage/categories/lie_conformal_algebras.py
+++ b/src/sage/categories/lie_conformal_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Lie Conformal Algebras
diff --git a/src/sage/categories/lie_conformal_algebras_with_basis.py b/src/sage/categories/lie_conformal_algebras_with_basis.py
index bedf8934fc4..d0bac7f4087 100644
--- a/src/sage/categories/lie_conformal_algebras_with_basis.py
+++ b/src/sage/categories/lie_conformal_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Lie Conformal Algebras With Basis
diff --git a/src/sage/categories/lie_groups.py b/src/sage/categories/lie_groups.py
index 2d32a158fa3..fe64f6f1a97 100644
--- a/src/sage/categories/lie_groups.py
+++ b/src/sage/categories/lie_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Lie Groups
"""
diff --git a/src/sage/categories/loop_crystals.py b/src/sage/categories/loop_crystals.py
index ad5f913cabc..76e4e1adba7 100644
--- a/src/sage/categories/loop_crystals.py
+++ b/src/sage/categories/loop_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.graphs sage.combinat
r"""
Loop Crystals
diff --git a/src/sage/categories/magmas.py b/src/sage/categories/magmas.py
index 247603d3d31..882cb4d1052 100644
--- a/src/sage/categories/magmas.py
+++ b/src/sage/categories/magmas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Magmas
"""
diff --git a/src/sage/categories/magmas_and_additive_magmas.py b/src/sage/categories/magmas_and_additive_magmas.py
index 784cf625ec6..5b7796ecbfa 100644
--- a/src/sage/categories/magmas_and_additive_magmas.py
+++ b/src/sage/categories/magmas_and_additive_magmas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Magmas and Additive Magmas
"""
diff --git a/src/sage/categories/magmatic_algebras.py b/src/sage/categories/magmatic_algebras.py
index 763f5aab764..049645af1ce 100644
--- a/src/sage/categories/magmatic_algebras.py
+++ b/src/sage/categories/magmatic_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Non-unital non-associative algebras
"""
diff --git a/src/sage/categories/manifolds.py b/src/sage/categories/manifolds.py
index f8dc1da4de0..554e7053f8c 100644
--- a/src/sage/categories/manifolds.py
+++ b/src/sage/categories/manifolds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Manifolds
"""
diff --git a/src/sage/categories/map.pxd b/src/sage/categories/map.pxd
index 0467b872353..6f3b3bb8a91 100644
--- a/src/sage/categories/map.pxd
+++ b/src/sage/categories/map.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.parent cimport Parent
from sage.structure.element cimport Element
diff --git a/src/sage/categories/map.pyx b/src/sage/categories/map.pyx
index b41b7538c59..c814bd2d8ff 100644
--- a/src/sage/categories/map.pyx
+++ b/src/sage/categories/map.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Base class for maps
diff --git a/src/sage/categories/matrix_algebras.py b/src/sage/categories/matrix_algebras.py
index 08b102d7451..57953f5af2e 100644
--- a/src/sage/categories/matrix_algebras.py
+++ b/src/sage/categories/matrix_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Matrix algebras
"""
diff --git a/src/sage/categories/metric_spaces.py b/src/sage/categories/metric_spaces.py
index 205e8746363..ecf43e9c361 100644
--- a/src/sage/categories/metric_spaces.py
+++ b/src/sage/categories/metric_spaces.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Metric Spaces
"""
diff --git a/src/sage/categories/modular_abelian_varieties.py b/src/sage/categories/modular_abelian_varieties.py
index 804361a7f99..4fd64663291 100644
--- a/src/sage/categories/modular_abelian_varieties.py
+++ b/src/sage/categories/modular_abelian_varieties.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Modular abelian varieties
"""
diff --git a/src/sage/categories/modules.py b/src/sage/categories/modules.py
index c5b1aa2afb5..0fd23631072 100644
--- a/src/sage/categories/modules.py
+++ b/src/sage/categories/modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Modules
"""
diff --git a/src/sage/categories/modules_with_basis.py b/src/sage/categories/modules_with_basis.py
index e1fa796ba3b..2a1fe2dd117 100644
--- a/src/sage/categories/modules_with_basis.py
+++ b/src/sage/categories/modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Modules With Basis
diff --git a/src/sage/categories/monoid_algebras.py b/src/sage/categories/monoid_algebras.py
index a387d7f74f4..70bf7b9f881 100644
--- a/src/sage/categories/monoid_algebras.py
+++ b/src/sage/categories/monoid_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Monoid algebras
"""
diff --git a/src/sage/categories/monoids.py b/src/sage/categories/monoids.py
index 7d763bb59b7..dad363c876b 100644
--- a/src/sage/categories/monoids.py
+++ b/src/sage/categories/monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Monoids
"""
diff --git a/src/sage/categories/morphism.pxd b/src/sage/categories/morphism.pxd
index e5befc8207e..88cda6baf93 100644
--- a/src/sage/categories/morphism.pxd
+++ b/src/sage/categories/morphism.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.element cimport Element
from sage.categories.map cimport Map
diff --git a/src/sage/categories/morphism.pyx b/src/sage/categories/morphism.pyx
index 0e4805ef1b4..24e36f1295c 100644
--- a/src/sage/categories/morphism.pyx
+++ b/src/sage/categories/morphism.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Morphisms
diff --git a/src/sage/categories/number_fields.py b/src/sage/categories/number_fields.py
index 6f9829cd499..8c6ed11d4c3 100644
--- a/src/sage/categories/number_fields.py
+++ b/src/sage/categories/number_fields.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Number fields
"""
diff --git a/src/sage/categories/objects.py b/src/sage/categories/objects.py
index 0b72e0f5d6f..742be48099f 100644
--- a/src/sage/categories/objects.py
+++ b/src/sage/categories/objects.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Objects
"""
diff --git a/src/sage/categories/partially_ordered_monoids.py b/src/sage/categories/partially_ordered_monoids.py
index 0f41b6c330f..81c9b58734b 100644
--- a/src/sage/categories/partially_ordered_monoids.py
+++ b/src/sage/categories/partially_ordered_monoids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Partially ordered monoids
"""
diff --git a/src/sage/categories/permutation_groups.py b/src/sage/categories/permutation_groups.py
index 7e71ad4d857..59dfaaeaaf8 100644
--- a/src/sage/categories/permutation_groups.py
+++ b/src/sage/categories/permutation_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Permutation groups
"""
diff --git a/src/sage/categories/pointed_sets.py b/src/sage/categories/pointed_sets.py
index 27376140dbe..3a16a61988d 100644
--- a/src/sage/categories/pointed_sets.py
+++ b/src/sage/categories/pointed_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Pointed sets
"""
diff --git a/src/sage/categories/polyhedra.py b/src/sage/categories/polyhedra.py
index 256eb99498d..9b65b40bcd9 100644
--- a/src/sage/categories/polyhedra.py
+++ b/src/sage/categories/polyhedra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Polyhedral subsets of free ZZ, QQ or RR-modules.
"""
diff --git a/src/sage/categories/poor_man_map.py b/src/sage/categories/poor_man_map.py
index 6fc55a02104..b20aa7977c5 100644
--- a/src/sage/categories/poor_man_map.py
+++ b/src/sage/categories/poor_man_map.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Poor Man's map
"""
diff --git a/src/sage/categories/posets.py b/src/sage/categories/posets.py
index cd08f65ad45..0d846648e6f 100644
--- a/src/sage/categories/posets.py
+++ b/src/sage/categories/posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.graphs, sage.combinat
r"""
Posets
diff --git a/src/sage/categories/primer.py b/src/sage/categories/primer.py
index c7339b712e3..3e1a5aee832 100644
--- a/src/sage/categories/primer.py
+++ b/src/sage/categories/primer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Elements, parents, and categories in Sage: a primer
diff --git a/src/sage/categories/principal_ideal_domains.py b/src/sage/categories/principal_ideal_domains.py
index f020cfb383d..4155dc764a5 100644
--- a/src/sage/categories/principal_ideal_domains.py
+++ b/src/sage/categories/principal_ideal_domains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Principal ideal domains
"""
diff --git a/src/sage/categories/pushout.py b/src/sage/categories/pushout.py
index e8eee82998d..f1e4674a790 100644
--- a/src/sage/categories/pushout.py
+++ b/src/sage/categories/pushout.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Coercion via construction functors
"""
diff --git a/src/sage/categories/quantum_group_representations.py b/src/sage/categories/quantum_group_representations.py
index fc8a4697941..6b79ca4ea08 100644
--- a/src/sage/categories/quantum_group_representations.py
+++ b/src/sage/categories/quantum_group_representations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Quantum Group Representations
diff --git a/src/sage/categories/quotient_fields.py b/src/sage/categories/quotient_fields.py
index e33a48d4ceb..9ab5393c976 100644
--- a/src/sage/categories/quotient_fields.py
+++ b/src/sage/categories/quotient_fields.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Quotient fields
"""
diff --git a/src/sage/categories/quotients.py b/src/sage/categories/quotients.py
index bda06208d80..97b6243d7b1 100644
--- a/src/sage/categories/quotients.py
+++ b/src/sage/categories/quotients.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Quotients Functorial Construction
diff --git a/src/sage/categories/r_trivial_semigroups.py b/src/sage/categories/r_trivial_semigroups.py
index a73f28931eb..840970e97c8 100644
--- a/src/sage/categories/r_trivial_semigroups.py
+++ b/src/sage/categories/r_trivial_semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
R-trivial semigroups
"""
diff --git a/src/sage/categories/realizations.py b/src/sage/categories/realizations.py
index d22b6f6a80a..f73652b8357 100644
--- a/src/sage/categories/realizations.py
+++ b/src/sage/categories/realizations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Realizations Covariant Functorial Construction
diff --git a/src/sage/categories/regular_crystals.py b/src/sage/categories/regular_crystals.py
index 5a0ac6291b5..3af41941d42 100644
--- a/src/sage/categories/regular_crystals.py
+++ b/src/sage/categories/regular_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.graphs
r"""
Regular Crystals
diff --git a/src/sage/categories/regular_supercrystals.py b/src/sage/categories/regular_supercrystals.py
index 044f556a1f7..f7f6f3fa80e 100644
--- a/src/sage/categories/regular_supercrystals.py
+++ b/src/sage/categories/regular_supercrystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.graphs
r"""
Regular Supercrystals
diff --git a/src/sage/categories/right_modules.py b/src/sage/categories/right_modules.py
index 47a8081d2a9..aa6582f2400 100644
--- a/src/sage/categories/right_modules.py
+++ b/src/sage/categories/right_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Right modules
"""
diff --git a/src/sage/categories/ring_ideals.py b/src/sage/categories/ring_ideals.py
index fd634f1caef..2b28d4c0e2f 100644
--- a/src/sage/categories/ring_ideals.py
+++ b/src/sage/categories/ring_ideals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ring ideals
"""
diff --git a/src/sage/categories/rings.py b/src/sage/categories/rings.py
index 9685fb80dd4..e3e2fba3190 100644
--- a/src/sage/categories/rings.py
+++ b/src/sage/categories/rings.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Rings
"""
diff --git a/src/sage/categories/rngs.py b/src/sage/categories/rngs.py
index 1841b45d1d5..e1a04c939c8 100644
--- a/src/sage/categories/rngs.py
+++ b/src/sage/categories/rngs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Rngs
"""
diff --git a/src/sage/categories/schemes.py b/src/sage/categories/schemes.py
index cf78a901209..5b6d1939a54 100644
--- a/src/sage/categories/schemes.py
+++ b/src/sage/categories/schemes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Schemes
"""
diff --git a/src/sage/categories/semigroups.py b/src/sage/categories/semigroups.py
index 7c894a03112..fe34b5e9b22 100644
--- a/src/sage/categories/semigroups.py
+++ b/src/sage/categories/semigroups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Semigroups
"""
diff --git a/src/sage/categories/semirings.py b/src/sage/categories/semirings.py
index 62e6f7d918f..624a867608a 100644
--- a/src/sage/categories/semirings.py
+++ b/src/sage/categories/semirings.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Semirngs
"""
diff --git a/src/sage/categories/semisimple_algebras.py b/src/sage/categories/semisimple_algebras.py
index 453b854b7e7..7837a140608 100644
--- a/src/sage/categories/semisimple_algebras.py
+++ b/src/sage/categories/semisimple_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Semisimple Algebras
"""
diff --git a/src/sage/categories/sets_cat.py b/src/sage/categories/sets_cat.py
index 0a523f00903..60b42e527d5 100644
--- a/src/sage/categories/sets_cat.py
+++ b/src/sage/categories/sets_cat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Sets
"""
diff --git a/src/sage/categories/sets_with_grading.py b/src/sage/categories/sets_with_grading.py
index a29d8c9c59c..9f9037e94b5 100644
--- a/src/sage/categories/sets_with_grading.py
+++ b/src/sage/categories/sets_with_grading.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Sets With a Grading
"""
diff --git a/src/sage/categories/sets_with_partial_maps.py b/src/sage/categories/sets_with_partial_maps.py
index 4210548b0fd..01993c2fb82 100644
--- a/src/sage/categories/sets_with_partial_maps.py
+++ b/src/sage/categories/sets_with_partial_maps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
SetsWithPartialMaps
"""
diff --git a/src/sage/categories/shephard_groups.py b/src/sage/categories/shephard_groups.py
index 945274bcd84..2b68f4d37d8 100644
--- a/src/sage/categories/shephard_groups.py
+++ b/src/sage/categories/shephard_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Shephard Groups
"""
diff --git a/src/sage/categories/signed_tensor.py b/src/sage/categories/signed_tensor.py
index c5281b7275a..f11c9a9f2bb 100644
--- a/src/sage/categories/signed_tensor.py
+++ b/src/sage/categories/signed_tensor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Signed Tensor Product Functorial Construction
diff --git a/src/sage/categories/simplicial_complexes.py b/src/sage/categories/simplicial_complexes.py
index 9750dcab686..6cd81a778cb 100644
--- a/src/sage/categories/simplicial_complexes.py
+++ b/src/sage/categories/simplicial_complexes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Simplicial Complexes
"""
diff --git a/src/sage/categories/simplicial_sets.py b/src/sage/categories/simplicial_sets.py
index 7b7bbf827af..6d5ac1823a3 100644
--- a/src/sage/categories/simplicial_sets.py
+++ b/src/sage/categories/simplicial_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Simplicial Sets
"""
diff --git a/src/sage/categories/subobjects.py b/src/sage/categories/subobjects.py
index 53ad660d75a..367b599d05a 100644
--- a/src/sage/categories/subobjects.py
+++ b/src/sage/categories/subobjects.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Subobjects Functorial Construction
diff --git a/src/sage/categories/subquotients.py b/src/sage/categories/subquotients.py
index ede07cadec1..d4ced65976d 100644
--- a/src/sage/categories/subquotients.py
+++ b/src/sage/categories/subquotients.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Subquotient Functorial Construction
diff --git a/src/sage/categories/super_algebras.py b/src/sage/categories/super_algebras.py
index 329ebebe420..abb2d404002 100644
--- a/src/sage/categories/super_algebras.py
+++ b/src/sage/categories/super_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Super Algebras
"""
diff --git a/src/sage/categories/super_algebras_with_basis.py b/src/sage/categories/super_algebras_with_basis.py
index 014fe6e563e..46731a1609f 100644
--- a/src/sage/categories/super_algebras_with_basis.py
+++ b/src/sage/categories/super_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Super algebras with basis
"""
diff --git a/src/sage/categories/super_hopf_algebras_with_basis.py b/src/sage/categories/super_hopf_algebras_with_basis.py
index b3b86d0973d..f66ada295e7 100644
--- a/src/sage/categories/super_hopf_algebras_with_basis.py
+++ b/src/sage/categories/super_hopf_algebras_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Super Hopf algebras with basis
"""
diff --git a/src/sage/categories/super_lie_conformal_algebras.py b/src/sage/categories/super_lie_conformal_algebras.py
index 9e38c4aa3e1..8e6c0865cfb 100644
--- a/src/sage/categories/super_lie_conformal_algebras.py
+++ b/src/sage/categories/super_lie_conformal_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Super Lie Conformal Algebras
diff --git a/src/sage/categories/super_modules.py b/src/sage/categories/super_modules.py
index a6d17ea32b0..9dd6cc0675c 100644
--- a/src/sage/categories/super_modules.py
+++ b/src/sage/categories/super_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Super modules
"""
diff --git a/src/sage/categories/super_modules_with_basis.py b/src/sage/categories/super_modules_with_basis.py
index ef4bbc048e8..3992deb600e 100644
--- a/src/sage/categories/super_modules_with_basis.py
+++ b/src/sage/categories/super_modules_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Super modules with basis
"""
diff --git a/src/sage/categories/supercommutative_algebras.py b/src/sage/categories/supercommutative_algebras.py
index 1928c7057dc..2b35e4de93c 100644
--- a/src/sage/categories/supercommutative_algebras.py
+++ b/src/sage/categories/supercommutative_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Supercommutative Algebras
"""
diff --git a/src/sage/categories/supercrystals.py b/src/sage/categories/supercrystals.py
index 239aa8c0a86..0f3fc9702e4 100644
--- a/src/sage/categories/supercrystals.py
+++ b/src/sage/categories/supercrystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.graphs sage.combinat
r"""
Supercrystals
diff --git a/src/sage/categories/tensor.py b/src/sage/categories/tensor.py
index 01208e6217e..11e470e378f 100644
--- a/src/sage/categories/tensor.py
+++ b/src/sage/categories/tensor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Tensor Product Functorial Construction
diff --git a/src/sage/categories/topological_spaces.py b/src/sage/categories/topological_spaces.py
index 7ab806e6a2b..5a4d0affb51 100644
--- a/src/sage/categories/topological_spaces.py
+++ b/src/sage/categories/topological_spaces.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Topological Spaces
"""
diff --git a/src/sage/categories/triangular_kac_moody_algebras.py b/src/sage/categories/triangular_kac_moody_algebras.py
index f5730707d36..0a7988282d3 100644
--- a/src/sage/categories/triangular_kac_moody_algebras.py
+++ b/src/sage/categories/triangular_kac_moody_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Kac-Moody Algebras With Triangular Decomposition Basis
diff --git a/src/sage/categories/tutorial.py b/src/sage/categories/tutorial.py
index fc2e2abe6f9..2c4ae1b2447 100644
--- a/src/sage/categories/tutorial.py
+++ b/src/sage/categories/tutorial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Implementing a new parent: a tutorial
diff --git a/src/sage/categories/unique_factorization_domains.py b/src/sage/categories/unique_factorization_domains.py
index 3f5467b0a16..a4a66111f4b 100644
--- a/src/sage/categories/unique_factorization_domains.py
+++ b/src/sage/categories/unique_factorization_domains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Unique factorization domains
"""
diff --git a/src/sage/categories/unital_algebras.py b/src/sage/categories/unital_algebras.py
index 0f4fa24600d..2b90b404f26 100644
--- a/src/sage/categories/unital_algebras.py
+++ b/src/sage/categories/unital_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Unital algebras
"""
diff --git a/src/sage/categories/vector_bundles.py b/src/sage/categories/vector_bundles.py
index 3f3bed1f2d0..7f190a3ed81 100644
--- a/src/sage/categories/vector_bundles.py
+++ b/src/sage/categories/vector_bundles.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.symbolic
r"""
Vector Bundles
diff --git a/src/sage/categories/vector_spaces.py b/src/sage/categories/vector_spaces.py
index 570fe58254b..1cae70f1d45 100644
--- a/src/sage/categories/vector_spaces.py
+++ b/src/sage/categories/vector_spaces.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Vector Spaces
"""
diff --git a/src/sage/categories/weyl_groups.py b/src/sage/categories/weyl_groups.py
index 9d5d6f28daa..9779d6b4a93 100644
--- a/src/sage/categories/weyl_groups.py
+++ b/src/sage/categories/weyl_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.combinat sage.groups
r"""
Weyl Groups
diff --git a/src/sage/categories/with_realizations.py b/src/sage/categories/with_realizations.py
index eaabcdaf04a..b747bdbedeb 100644
--- a/src/sage/categories/with_realizations.py
+++ b/src/sage/categories/with_realizations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
With Realizations Covariant Functorial Construction
diff --git a/src/sage/coding/abstract_code.py b/src/sage/coding/abstract_code.py
index 0b2031a74f2..e1d8a8922da 100644
--- a/src/sage/coding/abstract_code.py
+++ b/src/sage/coding/abstract_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Codes
diff --git a/src/sage/coding/ag_code.py b/src/sage/coding/ag_code.py
index 0f189bb69a0..32832f0550d 100644
--- a/src/sage/coding/ag_code.py
+++ b/src/sage/coding/ag_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.rings.finite_rings sage.schemes
"""
AG codes
diff --git a/src/sage/coding/ag_code_decoders.pyx b/src/sage/coding/ag_code_decoders.pyx
index 9ce2aa2f8ce..555f42c90f1 100644
--- a/src/sage/coding/ag_code_decoders.pyx
+++ b/src/sage/coding/ag_code_decoders.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.rings.finite_rings sage.schemes
r"""
Decoders for AG codes
diff --git a/src/sage/coding/all.py b/src/sage/coding/all.py
index e5ff88308b7..ea26cb7ecaf 100644
--- a/src/sage/coding/all.py
+++ b/src/sage/coding/all.py
@@ -1,12 +1,15 @@
+# sage_setup: distribution = sagemath-modules
-from sage.misc.lazy_import import lazy_import as _lazy_import
+from sage.misc.lazy_import import lazy_import
-_lazy_import("sage.coding.code_constructions", ["permutation_action",
- "walsh_matrix"])
+lazy_import("sage.coding.code_constructions", ["permutation_action",
+ "walsh_matrix"])
-_lazy_import("sage.coding.linear_code", "LinearCode")
+lazy_import("sage.coding.linear_code", "LinearCode")
# Functions removed from the global namespace
-_lazy_import('sage.coding', 'codes_catalog', 'codes')
-_lazy_import('sage.coding', 'channels_catalog', 'channels')
+lazy_import('sage.coding', 'codes_catalog', 'codes')
+lazy_import('sage.coding', 'channels_catalog', 'channels')
+
+del lazy_import
diff --git a/src/sage/coding/all__sagemath_gap.py b/src/sage/coding/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/coding/bch_code.py b/src/sage/coding/bch_code.py
index 40fa088354a..2532f189e92 100644
--- a/src/sage/coding/bch_code.py
+++ b/src/sage/coding/bch_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
BCH code
diff --git a/src/sage/coding/binary_code.pxd b/src/sage/coding/binary_code.pxd
index 38be220c731..1a1f0f95220 100644
--- a/src/sage/coding/binary_code.pxd
+++ b/src/sage/coding/binary_code.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cdef int *hamming_weights() noexcept
ctypedef unsigned int codeword
diff --git a/src/sage/coding/binary_code.pyx b/src/sage/coding/binary_code.pyx
index 81065a7dbd3..ace250d3e2c 100644
--- a/src/sage/coding/binary_code.pyx
+++ b/src/sage/coding/binary_code.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Optimized low-level binary code representation
diff --git a/src/sage/coding/bounds_catalog.py b/src/sage/coding/bounds_catalog.py
index aa4c2dd9996..ef354485820 100644
--- a/src/sage/coding/bounds_catalog.py
+++ b/src/sage/coding/bounds_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Index of bounds on the parameters of codes
diff --git a/src/sage/coding/channel.py b/src/sage/coding/channel.py
index 353c540575c..0a8be025e2d 100644
--- a/src/sage/coding/channel.py
+++ b/src/sage/coding/channel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Channels
diff --git a/src/sage/coding/channels_catalog.py b/src/sage/coding/channels_catalog.py
index b121fe847d8..464c06c1906 100644
--- a/src/sage/coding/channels_catalog.py
+++ b/src/sage/coding/channels_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Index of channels
diff --git a/src/sage/coding/code_bounds.py b/src/sage/coding/code_bounds.py
index 7b80eec172a..3c6b5234fcd 100644
--- a/src/sage/coding/code_bounds.py
+++ b/src/sage/coding/code_bounds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Bounds for parameters of codes
diff --git a/src/sage/coding/code_constructions.py b/src/sage/coding/code_constructions.py
index 6870c28ec87..0c1fa8eceff 100644
--- a/src/sage/coding/code_constructions.py
+++ b/src/sage/coding/code_constructions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Linear code constructors that do not preserve the structural information
diff --git a/src/sage/coding/codecan/all.py b/src/sage/coding/codecan/all.py
index e69de29bb2d..dd59a6da735 100644
--- a/src/sage/coding/codecan/all.py
+++ b/src/sage/coding/codecan/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-gap
diff --git a/src/sage/coding/codecan/all__sagemath_gap.py b/src/sage/coding/codecan/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/coding/codecan/autgroup_can_label.pyx b/src/sage/coding/codecan/autgroup_can_label.pyx
index f656771e179..21a6b4dfaa5 100644
--- a/src/sage/coding/codecan/autgroup_can_label.pyx
+++ b/src/sage/coding/codecan/autgroup_can_label.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.libs.pari
r"""
Canonical forms and automorphisms for linear codes over finite fields
diff --git a/src/sage/coding/codecan/codecan.pxd b/src/sage/coding/codecan/codecan.pxd
index 279688d2333..fc6d8e0844b 100644
--- a/src/sage/coding/codecan/codecan.pxd
+++ b/src/sage/coding/codecan/codecan.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.groups.perm_gps.permgroup_element cimport PermutationGroupElement
from sage.groups.semimonomial_transformations.semimonomial_transformation cimport SemimonomialTransformation
from sage.modules.free_module_element cimport FreeModuleElement
diff --git a/src/sage/coding/codecan/codecan.pyx b/src/sage/coding/codecan/codecan.pyx
index 89a04d61433..f110fb8c7d6 100644
--- a/src/sage/coding/codecan/codecan.pyx
+++ b/src/sage/coding/codecan/codecan.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Canonical forms and automorphism group computation for linear codes over finite fields
diff --git a/src/sage/coding/codes_catalog.py b/src/sage/coding/codes_catalog.py
index 96021d5fdd3..b8b855ef5d6 100644
--- a/src/sage/coding/codes_catalog.py
+++ b/src/sage/coding/codes_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Index of code constructions
diff --git a/src/sage/coding/cyclic_code.py b/src/sage/coding/cyclic_code.py
index 8cab59c2504..fb0905c0f9b 100644
--- a/src/sage/coding/cyclic_code.py
+++ b/src/sage/coding/cyclic_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Cyclic code
diff --git a/src/sage/coding/databases.py b/src/sage/coding/databases.py
index 989d67e89d8..3e0b19e7485 100644
--- a/src/sage/coding/databases.py
+++ b/src/sage/coding/databases.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Access functions to online databases for coding theory
diff --git a/src/sage/coding/decoder.py b/src/sage/coding/decoder.py
index 503c31a3b39..865effc82a4 100644
--- a/src/sage/coding/decoder.py
+++ b/src/sage/coding/decoder.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Decoders
diff --git a/src/sage/coding/decoders_catalog.py b/src/sage/coding/decoders_catalog.py
index a9f2417880e..0db103c8b09 100644
--- a/src/sage/coding/decoders_catalog.py
+++ b/src/sage/coding/decoders_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Index of decoders
diff --git a/src/sage/coding/delsarte_bounds.py b/src/sage/coding/delsarte_bounds.py
index 0f8fa305a08..0af010a4242 100644
--- a/src/sage/coding/delsarte_bounds.py
+++ b/src/sage/coding/delsarte_bounds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Delsarte (or linear programming) bounds
diff --git a/src/sage/coding/encoder.py b/src/sage/coding/encoder.py
index f603f337008..61179556be5 100644
--- a/src/sage/coding/encoder.py
+++ b/src/sage/coding/encoder.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Encoders
diff --git a/src/sage/coding/encoders_catalog.py b/src/sage/coding/encoders_catalog.py
index e6ac68267fd..a22a897c8da 100644
--- a/src/sage/coding/encoders_catalog.py
+++ b/src/sage/coding/encoders_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Index of encoders
diff --git a/src/sage/coding/extended_code.py b/src/sage/coding/extended_code.py
index c27acc58066..0082156c89f 100644
--- a/src/sage/coding/extended_code.py
+++ b/src/sage/coding/extended_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Extended code
diff --git a/src/sage/coding/gabidulin_code.py b/src/sage/coding/gabidulin_code.py
index 0ba1d13ec41..513cad4a82a 100644
--- a/src/sage/coding/gabidulin_code.py
+++ b/src/sage/coding/gabidulin_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Gabidulin Code
diff --git a/src/sage/coding/golay_code.py b/src/sage/coding/golay_code.py
index e698605825e..69ef064b766 100644
--- a/src/sage/coding/golay_code.py
+++ b/src/sage/coding/golay_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Golay code
diff --git a/src/sage/coding/goppa_code.py b/src/sage/coding/goppa_code.py
index a642fb86049..6de6742ad11 100644
--- a/src/sage/coding/goppa_code.py
+++ b/src/sage/coding/goppa_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Goppa code
diff --git a/src/sage/coding/grs_code.py b/src/sage/coding/grs_code.py
index 7a39d548c44..8b46bde5c34 100644
--- a/src/sage/coding/grs_code.py
+++ b/src/sage/coding/grs_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Reed-Solomon codes and Generalized Reed-Solomon codes
diff --git a/src/sage/coding/guava.py b/src/sage/coding/guava.py
index 92e2dc80451..6916d5ae290 100644
--- a/src/sage/coding/guava.py
+++ b/src/sage/coding/guava.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.libs.gap sage.modules sage.rings.finite_rings
r"""
Constructions of generator matrices using the GUAVA package for GAP
diff --git a/src/sage/coding/guruswami_sudan/all.py b/src/sage/coding/guruswami_sudan/all.py
index e69de29bb2d..6f6ab52d0f2 100644
--- a/src/sage/coding/guruswami_sudan/all.py
+++ b/src/sage/coding/guruswami_sudan/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-modules
diff --git a/src/sage/coding/guruswami_sudan/gs_decoder.py b/src/sage/coding/guruswami_sudan/gs_decoder.py
index d992a881c04..48fa955258c 100644
--- a/src/sage/coding/guruswami_sudan/gs_decoder.py
+++ b/src/sage/coding/guruswami_sudan/gs_decoder.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
Guruswami-Sudan decoder for (Generalized) Reed-Solomon codes
diff --git a/src/sage/coding/guruswami_sudan/interpolation.py b/src/sage/coding/guruswami_sudan/interpolation.py
index 62ed9f3a8f1..b5723a43eeb 100644
--- a/src/sage/coding/guruswami_sudan/interpolation.py
+++ b/src/sage/coding/guruswami_sudan/interpolation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
"""
Interpolation algorithms for the Guruswami-Sudan decoder
diff --git a/src/sage/coding/guruswami_sudan/utils.py b/src/sage/coding/guruswami_sudan/utils.py
index d899bd0e12e..23b0ed0112c 100644
--- a/src/sage/coding/guruswami_sudan/utils.py
+++ b/src/sage/coding/guruswami_sudan/utils.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Guruswami-Sudan utility methods
diff --git a/src/sage/coding/hamming_code.py b/src/sage/coding/hamming_code.py
index 5209a0c3754..a15a0c1cd63 100644
--- a/src/sage/coding/hamming_code.py
+++ b/src/sage/coding/hamming_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Hamming codes
diff --git a/src/sage/coding/information_set_decoder.py b/src/sage/coding/information_set_decoder.py
index dad1f2b06f3..013fc579fd4 100644
--- a/src/sage/coding/information_set_decoder.py
+++ b/src/sage/coding/information_set_decoder.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Information-set decoding for linear codes
diff --git a/src/sage/coding/kasami_codes.pyx b/src/sage/coding/kasami_codes.pyx
index 4c35ed34e33..ffc137a8fb1 100644
--- a/src/sage/coding/kasami_codes.pyx
+++ b/src/sage/coding/kasami_codes.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Kasami code
diff --git a/src/sage/coding/linear_code.py b/src/sage/coding/linear_code.py
index 1a0f037ddad..7cb4bd974b8 100644
--- a/src/sage/coding/linear_code.py
+++ b/src/sage/coding/linear_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Generic structures for linear codes over the Hamming metric
diff --git a/src/sage/coding/linear_code_no_metric.py b/src/sage/coding/linear_code_no_metric.py
index 95963d8a2a1..5ef951d5cd8 100644
--- a/src/sage/coding/linear_code_no_metric.py
+++ b/src/sage/coding/linear_code_no_metric.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Generic structures for linear codes of any metric
diff --git a/src/sage/coding/linear_rank_metric.py b/src/sage/coding/linear_rank_metric.py
index 6a7cd14cb62..c65d79b03e4 100644
--- a/src/sage/coding/linear_rank_metric.py
+++ b/src/sage/coding/linear_rank_metric.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Generic structures for linear codes over the rank metric
diff --git a/src/sage/coding/parity_check_code.py b/src/sage/coding/parity_check_code.py
index 0adafbbba57..6ba44d2d4a7 100644
--- a/src/sage/coding/parity_check_code.py
+++ b/src/sage/coding/parity_check_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Parity-check code
diff --git a/src/sage/coding/punctured_code.py b/src/sage/coding/punctured_code.py
index 3caab922b1b..06b6408b65d 100644
--- a/src/sage/coding/punctured_code.py
+++ b/src/sage/coding/punctured_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Punctured code
diff --git a/src/sage/coding/reed_muller_code.py b/src/sage/coding/reed_muller_code.py
index 1d55ba6fa38..0dd83061609 100644
--- a/src/sage/coding/reed_muller_code.py
+++ b/src/sage/coding/reed_muller_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Reed-Muller code
diff --git a/src/sage/coding/self_dual_codes.py b/src/sage/coding/self_dual_codes.py
index d60d161d28d..14f2989d9bd 100644
--- a/src/sage/coding/self_dual_codes.py
+++ b/src/sage/coding/self_dual_codes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.groups sage.modules
r"""
Enumerating binary self-dual codes
diff --git a/src/sage/coding/source_coding/all.py b/src/sage/coding/source_coding/all.py
index dc95b1fb9f3..756fb6c6df0 100644
--- a/src/sage/coding/source_coding/all.py
+++ b/src/sage/coding/source_coding/all.py
@@ -1 +1,3 @@
-from .huffman import Huffman
+# sage_setup: distribution = sagemath-modules
+
+from sage.coding.source_coding.huffman import Huffman
diff --git a/src/sage/coding/source_coding/huffman.py b/src/sage/coding/source_coding/huffman.py
index 1d41f84d77f..f8f2f4367c8 100644
--- a/src/sage/coding/source_coding/huffman.py
+++ b/src/sage/coding/source_coding/huffman.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Huffman encoding
diff --git a/src/sage/coding/subfield_subcode.py b/src/sage/coding/subfield_subcode.py
index c876ef73e63..f74356a4939 100644
--- a/src/sage/coding/subfield_subcode.py
+++ b/src/sage/coding/subfield_subcode.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Subfield subcode
diff --git a/src/sage/coding/two_weight_db.py b/src/sage/coding/two_weight_db.py
index 1ad3d584310..e42edbf39f7 100644
--- a/src/sage/coding/two_weight_db.py
+++ b/src/sage/coding/two_weight_db.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
r"""
Database of two-weight codes
diff --git a/src/sage/combinat/abstract_tree.py b/src/sage/combinat/abstract_tree.py
index 126185b4eb4..aa213eee58e 100644
--- a/src/sage/combinat/abstract_tree.py
+++ b/src/sage/combinat/abstract_tree.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Abstract Recursive Trees
diff --git a/src/sage/combinat/affine_permutation.py b/src/sage/combinat/affine_permutation.py
index 193d1f1c966..e6cd7b42bf2 100644
--- a/src/sage/combinat/affine_permutation.py
+++ b/src/sage/combinat/affine_permutation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups
r"""
Affine Permutations
diff --git a/src/sage/combinat/algebraic_combinatorics.py b/src/sage/combinat/algebraic_combinatorics.py
index 3dd16bf7799..16cbd1de52a 100644
--- a/src/sage/combinat/algebraic_combinatorics.py
+++ b/src/sage/combinat/algebraic_combinatorics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Algebraic combinatorics
diff --git a/src/sage/combinat/all.py b/src/sage/combinat/all.py
index d1f391013e2..2b7d906d02f 100644
--- a/src/sage/combinat/all.py
+++ b/src/sage/combinat/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Combinatorics
@@ -50,256 +51,15 @@
install_doc(__package__, __doc__)
# install modules quickref and tutorial to the containing package
-from . import quickref, tutorial
+from sage.combinat import quickref, tutorial
install_dict(__package__, {'quickref': quickref, 'tutorial': tutorial})
del quickref, tutorial
from sage.misc.lazy_import import lazy_import
-from .combinat import (CombinatorialClass, CombinatorialObject,
- MapCombinatorialClass,
- bell_number, bell_polynomial, bernoulli_polynomial,
- catalan_number, euler_number,
- fibonacci, fibonacci_sequence, fibonacci_xrange,
- lucas_number1, lucas_number2,
- number_of_tuples, number_of_unordered_tuples,
- polygonal_number, stirling_number1, stirling_number2,
- tuples, unordered_tuples)
-
-lazy_import('sage.combinat.combinat',
- ('InfiniteAbstractCombinatorialClass', 'UnionCombinatorialClass',
- 'FilteredCombinatorialClass'),
- deprecation=(31545, 'this class is deprecated, do not use'))
-
-
-from .expnums import expnums
-
-from sage.combinat.chas.all import *
-from sage.combinat.crystals.all import *
-from .rigged_configurations.all import *
-
-from sage.combinat.dlx import DLXMatrix, AllExactCovers, OneExactCover
-
-# block designs, etc
-from sage.combinat.designs.all import *
-
-# Free modules and friends
-from .free_module import CombinatorialFreeModule
-from .debruijn_sequence import DeBruijnSequences
-
-from .schubert_polynomial import SchubertPolynomialRing
-lazy_import('sage.combinat.key_polynomial', 'KeyPolynomialBasis', as_='KeyPolynomials')
-from .symmetric_group_algebra import SymmetricGroupAlgebra, HeckeAlgebraSymmetricGroupT
-from .symmetric_group_representations import SymmetricGroupRepresentation, SymmetricGroupRepresentations
-from .yang_baxter_graph import YangBaxterGraph
-
-# Permutations
-from .permutation import Permutation, Permutations, Arrangements, CyclicPermutations, CyclicPermutationsOfPartition
-from .affine_permutation import AffinePermutationGroup
-lazy_import('sage.combinat.colored_permutations', ['ColoredPermutations',
- 'SignedPermutation',
- 'SignedPermutations'])
-from .derangements import Derangements
-lazy_import('sage.combinat.baxter_permutations', ['BaxterPermutations'])
-
-# RSK
-from .rsk import RSK, RSK_inverse, robinson_schensted_knuth, robinson_schensted_knuth_inverse, InsertionRules
-
-# HillmanGrassl
-lazy_import("sage.combinat.hillman_grassl", ["WeakReversePlanePartition", "WeakReversePlanePartitions"])
-
-# PerfectMatchings
-from .perfect_matching import PerfectMatching, PerfectMatchings
-
-# Integer lists
-from .integer_lists import IntegerListsLex
-
-# Compositions
-from .composition import Composition, Compositions
-from .composition_signed import SignedCompositions
-
-# Partitions
-from .partition import (Partition, Partitions, PartitionsInBox,
- OrderedPartitions, PartitionsGreatestLE,
- PartitionsGreatestEQ, number_of_partitions)
-
-lazy_import('sage.combinat.partition_tuple', ['PartitionTuple', 'PartitionTuples'])
-lazy_import('sage.combinat.partition_kleshchev', ['KleshchevPartitions'])
-lazy_import('sage.combinat.skew_partition', ['SkewPartition', 'SkewPartitions'])
-
-# Partition algebra
-from .partition_algebra import SetPartitionsAk, SetPartitionsPk, SetPartitionsTk, SetPartitionsIk, SetPartitionsBk, SetPartitionsSk, SetPartitionsRk, SetPartitionsPRk
-
-# Raising operators
-lazy_import('sage.combinat.partition_shifting_algebras', 'ShiftingOperatorAlgebra')
-
-# Diagram algebra
-from .diagram_algebras import PartitionAlgebra, BrauerAlgebra, TemperleyLiebAlgebra, PlanarAlgebra, PropagatingIdeal
-
-# Descent algebra
-lazy_import('sage.combinat.descent_algebra', 'DescentAlgebra')
-
-# Vector Partitions
-lazy_import('sage.combinat.vector_partition',
- ['VectorPartition', 'VectorPartitions'])
-
-# Similarity class types
-from .similarity_class_type import PrimarySimilarityClassType, PrimarySimilarityClassTypes, SimilarityClassType, SimilarityClassTypes
-
-# Cores
-from .core import Core, Cores
-
-# Tableaux
-lazy_import('sage.combinat.tableau',
- ["Tableau", "SemistandardTableau", "StandardTableau", "RowStandardTableau", "IncreasingTableau",
- "Tableaux", "SemistandardTableaux", "StandardTableaux", "RowStandardTableaux", "IncreasingTableaux"])
-from .skew_tableau import SkewTableau, SkewTableaux, StandardSkewTableaux, SemistandardSkewTableaux
-from .ribbon_shaped_tableau import RibbonShapedTableau, RibbonShapedTableaux, StandardRibbonShapedTableaux
-from .ribbon_tableau import RibbonTableaux, RibbonTableau, MultiSkewTableaux, MultiSkewTableau, SemistandardMultiSkewTableaux
-from .composition_tableau import CompositionTableau, CompositionTableaux
-
-lazy_import('sage.combinat.tableau_tuple',
- ['TableauTuple', 'StandardTableauTuple', 'RowStandardTableauTuple',
- 'TableauTuples', 'StandardTableauTuples', 'RowStandardTableauTuples'])
-from .k_tableau import WeakTableau, WeakTableaux, StrongTableau, StrongTableaux
-lazy_import('sage.combinat.lr_tableau', ['LittlewoodRichardsonTableau',
- 'LittlewoodRichardsonTableaux'])
-lazy_import('sage.combinat.shifted_primed_tableau', ['ShiftedPrimedTableaux',
- 'ShiftedPrimedTableau'])
-
-# SuperTableaux
-lazy_import('sage.combinat.super_tableau',
- ["StandardSuperTableau", "SemistandardSuperTableau", "StandardSuperTableaux", "SemistandardSuperTableaux"])
-
-# Words
-from .words.all import *
-
-lazy_import('sage.combinat.subword', 'Subwords')
-
-from .graph_path import GraphPaths
-
-# Tuples
-from .tuple import Tuples, UnorderedTuples
-
-# Alternating sign matrices
-lazy_import('sage.combinat.alternating_sign_matrix', ('AlternatingSignMatrix',
- 'AlternatingSignMatrices',
- 'MonotoneTriangles',
- 'ContreTableaux',
- 'TruncatedStaircases'))
-
-# Decorated Permutations
-lazy_import('sage.combinat.decorated_permutation', ('DecoratedPermutation',
- 'DecoratedPermutations'))
-
-# Plane Partitions
-lazy_import('sage.combinat.plane_partition', ('PlanePartition',
- 'PlanePartitions'))
-
-# Parking Functions
-lazy_import('sage.combinat.non_decreasing_parking_function',
- ['NonDecreasingParkingFunctions', 'NonDecreasingParkingFunction'])
-lazy_import('sage.combinat.parking_functions',
- ['ParkingFunctions', 'ParkingFunction'])
-
-# Trees and Tamari interval posets
-from .ordered_tree import (OrderedTree, OrderedTrees,
- LabelledOrderedTree, LabelledOrderedTrees)
-from .binary_tree import (BinaryTree, BinaryTrees,
- LabelledBinaryTree, LabelledBinaryTrees)
-lazy_import('sage.combinat.interval_posets', ['TamariIntervalPoset', 'TamariIntervalPosets'])
-lazy_import('sage.combinat.rooted_tree', ('RootedTree', 'RootedTrees',
- 'LabelledRootedTree', 'LabelledRootedTrees'))
-
-from .combination import Combinations
-
-from .set_partition import SetPartition, SetPartitions
-from .set_partition_ordered import OrderedSetPartition, OrderedSetPartitions
-lazy_import('sage.combinat.multiset_partition_into_sets_ordered',
- ['OrderedMultisetPartitionIntoSets',
- 'OrderedMultisetPartitionsIntoSets'])
-from .subset import Subsets, subsets, powerset, uniq
-from .necklace import Necklaces
-lazy_import('sage.combinat.dyck_word', ('DyckWords', 'DyckWord'))
-lazy_import('sage.combinat.nu_dyck_word', ('NuDyckWords', 'NuDyckWord'))
-from .sloane_functions import sloane
-lazy_import('sage.combinat.superpartition', ('SuperPartition',
- 'SuperPartitions'))
-
-lazy_import('sage.combinat.parallelogram_polyomino',
- ['ParallelogramPolyomino', 'ParallelogramPolyominoes'])
-
-from .root_system.all import *
-from .sf.all import *
-from .ncsf_qsym.all import *
-from .ncsym.all import *
-lazy_import('sage.combinat.fqsym', 'FreeQuasisymmetricFunctions')
-from .matrices.all import *
-# Posets
-from .posets.all import *
-
-# Cluster Algebras and Quivers
-from .cluster_algebra_quiver.all import *
-
-from . import ranker
-
-from .integer_vector import IntegerVectors
-from .integer_vector_weighted import WeightedIntegerVectors
-from .integer_vectors_mod_permgroup import IntegerVectorsModPermutationGroup
-
-lazy_import('sage.combinat.q_analogues', ['gaussian_binomial', 'q_binomial', 'number_of_irreducible_polynomials'])
-
-from .species.all import *
-
-lazy_import('sage.combinat.kazhdan_lusztig', 'KazhdanLusztigPolynomial')
-
-lazy_import('sage.combinat.degree_sequences', 'DegreeSequences')
-
-lazy_import('sage.combinat.cyclic_sieving_phenomenon',
- ['CyclicSievingPolynomial', 'CyclicSievingCheck'])
-
-lazy_import('sage.combinat.sidon_sets', 'sidon_sets')
-
-# Puzzles
-lazy_import('sage.combinat.knutson_tao_puzzles', 'KnutsonTaoPuzzleSolver')
-
-# Gelfand-Tsetlin patterns
-lazy_import('sage.combinat.gelfand_tsetlin_patterns',
- ['GelfandTsetlinPattern', 'GelfandTsetlinPatterns'])
-
-# Finite State Machines (Automaton, Transducer)
-lazy_import('sage.combinat.finite_state_machine',
- ['Automaton', 'Transducer', 'FiniteStateMachine'])
-lazy_import('sage.combinat.finite_state_machine_generators',
- ['automata', 'transducers'])
-
-# Sequences
-lazy_import('sage.combinat.binary_recurrence_sequences',
- 'BinaryRecurrenceSequence')
-lazy_import('sage.combinat.recognizable_series', 'RecognizableSeriesSpace')
-lazy_import('sage.combinat.regular_sequence', 'RegularSequenceRing')
-
-# Six Vertex Model
-lazy_import('sage.combinat.six_vertex_model', 'SixVertexModel')
-
-# sine-Gordon Y-systems
-lazy_import('sage.combinat.sine_gordon', 'SineGordonYsystem')
-
-# Fully Packed Loop
-lazy_import('sage.combinat.fully_packed_loop', ['FullyPackedLoop', 'FullyPackedLoops'])
-
-# Subword complex and cluster complex
-lazy_import('sage.combinat.subword_complex', 'SubwordComplex')
-lazy_import("sage.combinat.cluster_complex", "ClusterComplex")
-
-# Constellations
-lazy_import('sage.combinat.constellation', ['Constellation', 'Constellations'])
-
-# Growth diagrams
-lazy_import('sage.combinat.growth', 'GrowthDiagram')
-
-# Path Tableaux
-lazy_import('sage.combinat.path_tableaux', 'catalog', as_='path_tableaux')
-
-# Bijectionist
-lazy_import('sage.combinat.bijectionist', 'Bijectionist')
+from sage.combinat.all__sagemath_combinat import *
+from sage.combinat.all__sagemath_modules import *
+from sage.combinat.all__sagemath_graphs import *
+del lazy_import
+del install_dict
+del install_doc
diff --git a/src/sage/combinat/all__sagemath_categories.py b/src/sage/combinat/all__sagemath_categories.py
new file mode 100644
index 00000000000..854cf866f40
--- /dev/null
+++ b/src/sage/combinat/all__sagemath_categories.py
@@ -0,0 +1,33 @@
+from sage.combinat.matrices.all__sagemath_categories import *
+
+from sage.misc.lazy_import import lazy_import
+
+# Integer lists
+from sage.combinat.integer_lists import IntegerListsLex
+from sage.combinat.integer_vector import IntegerVectors
+
+from sage.combinat.combinat import (CombinatorialClass, CombinatorialObject,
+ MapCombinatorialClass,
+ bell_number, bell_polynomial, bernoulli_polynomial,
+ catalan_number, euler_number,
+ fibonacci, fibonacci_sequence, fibonacci_xrange,
+ lucas_number1, lucas_number2,
+ number_of_tuples, number_of_unordered_tuples,
+ polygonal_number, stirling_number1, stirling_number2,
+ tuples, unordered_tuples)
+
+lazy_import('sage.combinat.combinat',
+ ('InfiniteAbstractCombinatorialClass', 'UnionCombinatorialClass',
+ 'FilteredCombinatorialClass'),
+ deprecation=(31545, 'this class is deprecated, do not use'))
+
+from sage.combinat.combination import Combinations
+from sage.combinat.composition import Composition, Compositions
+from sage.combinat.permutation import Permutation, Permutations, Arrangements, CyclicPermutations, CyclicPermutationsOfPartition
+from sage.combinat.subset import Subsets, subsets, powerset, uniq
+from sage.combinat.tuple import Tuples, UnorderedTuples
+
+
+from sage.combinat.dlx import DLXMatrix, AllExactCovers, OneExactCover
+
+del lazy_import
diff --git a/src/sage/combinat/all__sagemath_combinat.py b/src/sage/combinat/all__sagemath_combinat.py
new file mode 100644
index 00000000000..7968f3fde4a
--- /dev/null
+++ b/src/sage/combinat/all__sagemath_combinat.py
@@ -0,0 +1,201 @@
+from sage.combinat.all__sagemath_categories import *
+
+from sage.misc.lazy_import import lazy_import
+
+from sage.combinat.expnums import expnums
+
+from sage.combinat.chas.all import *
+from sage.combinat.crystals.all import *
+from sage.combinat.rigged_configurations.all import *
+
+# Free modules and friends
+from sage.combinat.debruijn_sequence import DeBruijnSequences
+
+lazy_import('sage.combinat.schubert_polynomial', 'SchubertPolynomialRing')
+lazy_import('sage.combinat.key_polynomial', 'KeyPolynomialBasis', as_='KeyPolynomials')
+lazy_import('sage.combinat.symmetric_group_algebra', [
+ 'SymmetricGroupAlgebra', 'HeckeAlgebraSymmetricGroupT'])
+lazy_import('sage.combinat.symmetric_group_representations', [
+ 'SymmetricGroupRepresentation', 'SymmetricGroupRepresentations'])
+
+# Permutations
+lazy_import('sage.combinat.affine_permutation', 'AffinePermutationGroup')
+lazy_import('sage.combinat.colored_permutations', ['ColoredPermutations',
+ 'SignedPermutation',
+ 'SignedPermutations'])
+from sage.combinat.derangements import Derangements
+lazy_import('sage.combinat.baxter_permutations', ['BaxterPermutations'])
+
+# RSK
+from sage.combinat.rsk import RSK, RSK_inverse, robinson_schensted_knuth, robinson_schensted_knuth_inverse, InsertionRules
+
+# HillmanGrassl
+lazy_import("sage.combinat.hillman_grassl", [
+ "WeakReversePlanePartition", "WeakReversePlanePartitions"])
+
+# PerfectMatchings
+from sage.combinat.perfect_matching import PerfectMatching, PerfectMatchings
+
+# Compositions
+from sage.combinat.composition_signed import SignedCompositions
+
+# Partitions
+from sage.combinat.partition import (Partition, Partitions, PartitionsInBox,
+ OrderedPartitions, PartitionsGreatestLE,
+ PartitionsGreatestEQ, number_of_partitions)
+
+lazy_import('sage.combinat.partition_tuple', ['PartitionTuple', 'PartitionTuples'])
+lazy_import('sage.combinat.partition_kleshchev', ['KleshchevPartitions'])
+lazy_import('sage.combinat.skew_partition', ['SkewPartition', 'SkewPartitions'])
+
+# Partition algebra
+from sage.combinat.partition_algebra import (SetPartitionsAk, SetPartitionsPk,
+ SetPartitionsTk, SetPartitionsIk,
+ SetPartitionsBk, SetPartitionsSk,
+ SetPartitionsRk, SetPartitionsPRk)
+
+# Raising operators
+lazy_import('sage.combinat.partition_shifting_algebras', 'ShiftingOperatorAlgebra')
+
+# Diagram algebra
+lazy_import('sage.combinat.diagram_algebras', ['PartitionAlgebra', 'BrauerAlgebra', 'TemperleyLiebAlgebra',
+ 'PlanarAlgebra', 'PropagatingIdeal'])
+
+# Descent algebra
+lazy_import('sage.combinat.descent_algebra', 'DescentAlgebra')
+
+# Vector Partitions
+lazy_import('sage.combinat.vector_partition',
+ ['VectorPartition', 'VectorPartitions'])
+
+# Similarity class types
+lazy_import('sage.combinat.similarity_class_type', ['PrimarySimilarityClassType', 'PrimarySimilarityClassTypes',
+ 'SimilarityClassType', 'SimilarityClassTypes'])
+
+# Cores
+from sage.combinat.core import Core, Cores
+
+# Tableaux
+lazy_import('sage.combinat.tableau',
+ ["Tableau", "SemistandardTableau", "StandardTableau", "RowStandardTableau", "IncreasingTableau",
+ "Tableaux", "SemistandardTableaux", "StandardTableaux", "RowStandardTableaux", "IncreasingTableaux"])
+from sage.combinat.skew_tableau import SkewTableau, SkewTableaux, StandardSkewTableaux, SemistandardSkewTableaux
+from sage.combinat.ribbon_shaped_tableau import RibbonShapedTableau, RibbonShapedTableaux, StandardRibbonShapedTableaux
+from sage.combinat.ribbon_tableau import RibbonTableaux, RibbonTableau, MultiSkewTableaux, MultiSkewTableau, SemistandardMultiSkewTableaux
+from sage.combinat.composition_tableau import CompositionTableau, CompositionTableaux
+
+lazy_import('sage.combinat.tableau_tuple',
+ ['TableauTuple', 'StandardTableauTuple', 'RowStandardTableauTuple',
+ 'TableauTuples', 'StandardTableauTuples', 'RowStandardTableauTuples'])
+from sage.combinat.k_tableau import WeakTableau, WeakTableaux, StrongTableau, StrongTableaux
+lazy_import('sage.combinat.lr_tableau', ['LittlewoodRichardsonTableau',
+ 'LittlewoodRichardsonTableaux'])
+lazy_import('sage.combinat.shifted_primed_tableau', ['ShiftedPrimedTableaux',
+ 'ShiftedPrimedTableau'])
+
+# SuperTableaux
+lazy_import('sage.combinat.super_tableau',
+ ["StandardSuperTableau", "SemistandardSuperTableau", "StandardSuperTableaux", "SemistandardSuperTableaux"])
+
+# Words
+from sage.combinat.words.all import *
+
+lazy_import('sage.combinat.subword', 'Subwords')
+
+# Alternating sign matrices
+lazy_import('sage.combinat.alternating_sign_matrix', ('AlternatingSignMatrix',
+ 'AlternatingSignMatrices',
+ 'MonotoneTriangles',
+ 'ContreTableaux',
+ 'TruncatedStaircases'))
+
+# Decorated Permutations
+lazy_import('sage.combinat.decorated_permutation', ('DecoratedPermutation',
+ 'DecoratedPermutations'))
+
+# Plane Partitions
+lazy_import('sage.combinat.plane_partition', ('PlanePartition',
+ 'PlanePartitions'))
+
+# Parking Functions
+lazy_import('sage.combinat.non_decreasing_parking_function',
+ ['NonDecreasingParkingFunctions', 'NonDecreasingParkingFunction'])
+lazy_import('sage.combinat.parking_functions',
+ ['ParkingFunctions', 'ParkingFunction'])
+
+from sage.combinat.set_partition import SetPartition, SetPartitions
+from sage.combinat.set_partition_ordered import OrderedSetPartition, OrderedSetPartitions
+lazy_import('sage.combinat.multiset_partition_into_sets_ordered',
+ ['OrderedMultisetPartitionIntoSets',
+ 'OrderedMultisetPartitionsIntoSets'])
+from sage.combinat.necklace import Necklaces
+lazy_import('sage.combinat.dyck_word', ('DyckWords', 'DyckWord'))
+lazy_import('sage.combinat.nu_dyck_word', ('NuDyckWords', 'NuDyckWord'))
+from sage.combinat.sloane_functions import sloane
+lazy_import('sage.combinat.superpartition', ('SuperPartition',
+ 'SuperPartitions'))
+
+lazy_import('sage.combinat.parallelogram_polyomino',
+ ['ParallelogramPolyomino', 'ParallelogramPolyominoes'])
+
+from sage.combinat.sf.all import *
+from sage.combinat.ncsf_qsym.all import *
+from sage.combinat.ncsym.all import *
+lazy_import('sage.combinat.fqsym', 'FreeQuasisymmetricFunctions')
+from sage.combinat.matrices.all import *
+
+lazy_import('sage.combinat.integer_vector_weighted', 'WeightedIntegerVectors')
+lazy_import('sage.combinat.integer_vectors_mod_permgroup',
+ 'IntegerVectorsModPermutationGroup')
+
+lazy_import('sage.combinat.q_analogues', ['gaussian_binomial', 'q_binomial', 'number_of_irreducible_polynomials'])
+
+from sage.combinat.species.all import *
+
+lazy_import('sage.combinat.kazhdan_lusztig', 'KazhdanLusztigPolynomial')
+
+lazy_import('sage.combinat.degree_sequences', 'DegreeSequences')
+
+lazy_import('sage.combinat.cyclic_sieving_phenomenon',
+ ['CyclicSievingPolynomial', 'CyclicSievingCheck'])
+
+lazy_import('sage.combinat.sidon_sets', 'sidon_sets')
+
+# Puzzles
+lazy_import('sage.combinat.knutson_tao_puzzles', 'KnutsonTaoPuzzleSolver')
+
+# Gelfand-Tsetlin patterns
+lazy_import('sage.combinat.gelfand_tsetlin_patterns',
+ ['GelfandTsetlinPattern', 'GelfandTsetlinPatterns'])
+
+# Sequences
+lazy_import('sage.combinat.binary_recurrence_sequences',
+ 'BinaryRecurrenceSequence')
+lazy_import('sage.combinat.recognizable_series', 'RecognizableSeriesSpace')
+lazy_import('sage.combinat.regular_sequence', 'RegularSequenceRing')
+
+# Six Vertex Model
+lazy_import('sage.combinat.six_vertex_model', 'SixVertexModel')
+
+# sine-Gordon Y-systems
+lazy_import('sage.combinat.sine_gordon', 'SineGordonYsystem')
+
+# Fully Packed Loop
+lazy_import('sage.combinat.fully_packed_loop', ['FullyPackedLoop', 'FullyPackedLoops'])
+
+# Subword complex and cluster complex
+lazy_import('sage.combinat.subword_complex', 'SubwordComplex')
+lazy_import("sage.combinat.cluster_complex", "ClusterComplex")
+
+# Constellations
+lazy_import('sage.combinat.constellation', ['Constellation', 'Constellations'])
+
+# Growth diagrams
+lazy_import('sage.combinat.growth', 'GrowthDiagram')
+
+# Path Tableaux
+lazy_import('sage.combinat.path_tableaux', 'catalog', as_='path_tableaux')
+
+# Bijectionist
+lazy_import('sage.combinat.bijectionist', 'Bijectionist')
+del lazy_import
diff --git a/src/sage/combinat/all__sagemath_flint.py b/src/sage/combinat/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/combinat/all__sagemath_gap.py b/src/sage/combinat/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/combinat/all__sagemath_graphs.py b/src/sage/combinat/all__sagemath_graphs.py
new file mode 100644
index 00000000000..d789b89078b
--- /dev/null
+++ b/src/sage/combinat/all__sagemath_graphs.py
@@ -0,0 +1,33 @@
+from sage.combinat.all__sagemath_categories import *
+
+from sage.misc.lazy_import import lazy_import
+
+# Posets
+from sage.combinat.posets.all import *
+
+# Trees and Tamari interval posets
+from sage.combinat.ordered_tree import (OrderedTree, OrderedTrees,
+ LabelledOrderedTree, LabelledOrderedTrees)
+from sage.combinat.binary_tree import (BinaryTree, BinaryTrees,
+ LabelledBinaryTree, LabelledBinaryTrees)
+lazy_import('sage.combinat.rooted_tree', ('RootedTree', 'RootedTrees',
+ 'LabelledRootedTree', 'LabelledRootedTrees'))
+lazy_import('sage.combinat.interval_posets', [
+ 'TamariIntervalPoset', 'TamariIntervalPosets'])
+
+from sage.combinat.graph_path import GraphPaths
+
+from sage.combinat.yang_baxter_graph import YangBaxterGraph
+
+# block designs, etc
+from sage.combinat.designs.all import *
+
+# Cluster Algebras and Quivers
+from sage.combinat.cluster_algebra_quiver.all import *
+
+# Finite State Machines (Automaton, Transducer)
+lazy_import('sage.combinat.finite_state_machine',
+ ['Automaton', 'Transducer', 'FiniteStateMachine'])
+lazy_import('sage.combinat.finite_state_machine_generators',
+ ['automata', 'transducers'])
+del lazy_import
diff --git a/src/sage/combinat/all__sagemath_modules.py b/src/sage/combinat/all__sagemath_modules.py
new file mode 100644
index 00000000000..a2459fcafc0
--- /dev/null
+++ b/src/sage/combinat/all__sagemath_modules.py
@@ -0,0 +1,6 @@
+from sage.combinat.all__sagemath_categories import *
+
+from sage.combinat.free_module import CombinatorialFreeModule
+from sage.combinat import ranker
+
+from sage.combinat.root_system.all import *
diff --git a/src/sage/combinat/alternating_sign_matrix.py b/src/sage/combinat/alternating_sign_matrix.py
index d327d84ae1d..64b119553cf 100644
--- a/src/sage/combinat/alternating_sign_matrix.py
+++ b/src/sage/combinat/alternating_sign_matrix.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Alternating Sign Matrices
diff --git a/src/sage/combinat/backtrack.py b/src/sage/combinat/backtrack.py
index ab9c35bc23c..6e473a7f8fa 100644
--- a/src/sage/combinat/backtrack.py
+++ b/src/sage/combinat/backtrack.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Backtracking
diff --git a/src/sage/combinat/baxter_permutations.py b/src/sage/combinat/baxter_permutations.py
index 648ce9c6a26..0b8bd1c3a10 100644
--- a/src/sage/combinat/baxter_permutations.py
+++ b/src/sage/combinat/baxter_permutations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Baxter permutations
"""
diff --git a/src/sage/combinat/bijectionist.py b/src/sage/combinat/bijectionist.py
index 6f34e76b883..7cfe72e3246 100644
--- a/src/sage/combinat/bijectionist.py
+++ b/src/sage/combinat/bijectionist.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.numerical.mip
r"""
A bijectionist's toolkit
diff --git a/src/sage/combinat/binary_recurrence_sequences.py b/src/sage/combinat/binary_recurrence_sequences.py
index 9c1b9bdf931..b993cda3b1b 100644
--- a/src/sage/combinat/binary_recurrence_sequences.py
+++ b/src/sage/combinat/binary_recurrence_sequences.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Binary Recurrence Sequences
diff --git a/src/sage/combinat/binary_tree.py b/src/sage/combinat/binary_tree.py
index 26e459e13e3..c736e7a36d6 100644
--- a/src/sage/combinat/binary_tree.py
+++ b/src/sage/combinat/binary_tree.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Binary Trees
diff --git a/src/sage/combinat/blob_algebra.py b/src/sage/combinat/blob_algebra.py
index 595063a69fd..10a5d171569 100644
--- a/src/sage/combinat/blob_algebra.py
+++ b/src/sage/combinat/blob_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Blob Algebras
diff --git a/src/sage/combinat/cartesian_product.py b/src/sage/combinat/cartesian_product.py
index c5a16d3f8ee..83e329c1ed2 100644
--- a/src/sage/combinat/cartesian_product.py
+++ b/src/sage/combinat/cartesian_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Cartesian Products
"""
diff --git a/src/sage/combinat/catalog_partitions.py b/src/sage/combinat/catalog_partitions.py
index 302e8f112d6..14cdccd8592 100644
--- a/src/sage/combinat/catalog_partitions.py
+++ b/src/sage/combinat/catalog_partitions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Enumerated sets of partitions, tableaux, ...
diff --git a/src/sage/combinat/chas/all.py b/src/sage/combinat/chas/all.py
index 5833abbe49c..14146102882 100644
--- a/src/sage/combinat/chas/all.py
+++ b/src/sage/combinat/chas/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Combinatorial Hopf algebras
@@ -18,3 +19,5 @@
lazy_import('sage.combinat.chas.fsym', ['FreeSymmetricFunctions'])
lazy_import('sage.combinat.chas.wqsym', ['WordQuasiSymmetricFunctions'])
+del lazy_import
+del install_doc
diff --git a/src/sage/combinat/chas/fsym.py b/src/sage/combinat/chas/fsym.py
index 10210028932..d671bb7f68c 100644
--- a/src/sage/combinat/chas/fsym.py
+++ b/src/sage/combinat/chas/fsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Poirier-Reutenauer Hopf algebra of standard tableaux
diff --git a/src/sage/combinat/chas/wqsym.py b/src/sage/combinat/chas/wqsym.py
index 567e1f1b9f5..1e4df78da9e 100644
--- a/src/sage/combinat/chas/wqsym.py
+++ b/src/sage/combinat/chas/wqsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Word Quasi-symmetric functions
diff --git a/src/sage/combinat/cluster_algebra_quiver/all.py b/src/sage/combinat/cluster_algebra_quiver/all.py
index 5b28d09d1c6..4a7344218aa 100644
--- a/src/sage/combinat/cluster_algebra_quiver/all.py
+++ b/src/sage/combinat/cluster_algebra_quiver/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Cluster algebras and quivers
@@ -12,7 +13,8 @@
install_doc(__package__, __doc__)
from sage.misc.lazy_import import lazy_import
-lazy_import("sage.combinat.cluster_algebra_quiver.quiver_mutation_type", "QuiverMutationType")
+lazy_import("sage.combinat.cluster_algebra_quiver.quiver_mutation_type",
+ "QuiverMutationType")
lazy_import("sage.combinat.cluster_algebra_quiver.quiver", "ClusterQuiver")
lazy_import("sage.combinat.cluster_algebra_quiver.cluster_seed", "ClusterSeed")
diff --git a/src/sage/combinat/cluster_algebra_quiver/cluster_seed.py b/src/sage/combinat/cluster_algebra_quiver/cluster_seed.py
index 8656b47152c..6531fcabeef 100644
--- a/src/sage/combinat/cluster_algebra_quiver/cluster_seed.py
+++ b/src/sage/combinat/cluster_algebra_quiver/cluster_seed.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs sage.modules
r"""
ClusterSeed
diff --git a/src/sage/combinat/cluster_algebra_quiver/interact.py b/src/sage/combinat/cluster_algebra_quiver/interact.py
index 695e3d1d449..c054ab64a89 100644
--- a/src/sage/combinat/cluster_algebra_quiver/interact.py
+++ b/src/sage/combinat/cluster_algebra_quiver/interact.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
import ipywidgets as widgets
from sage.misc.latex import latex
from sage.repl.rich_output.pretty_print import pretty_print
diff --git a/src/sage/combinat/cluster_algebra_quiver/mutation_class.py b/src/sage/combinat/cluster_algebra_quiver/mutation_class.py
index 1278cd159ab..5792be84044 100644
--- a/src/sage/combinat/cluster_algebra_quiver/mutation_class.py
+++ b/src/sage/combinat/cluster_algebra_quiver/mutation_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
mutation_class
diff --git a/src/sage/combinat/cluster_algebra_quiver/mutation_type.py b/src/sage/combinat/cluster_algebra_quiver/mutation_type.py
index 6c5edc6aa3f..6bba2f1a452 100644
--- a/src/sage/combinat/cluster_algebra_quiver/mutation_type.py
+++ b/src/sage/combinat/cluster_algebra_quiver/mutation_type.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Helper functions for mutation types of quivers
diff --git a/src/sage/combinat/cluster_algebra_quiver/quiver.py b/src/sage/combinat/cluster_algebra_quiver/quiver.py
index 3fc3499ef67..d77059af6b6 100644
--- a/src/sage/combinat/cluster_algebra_quiver/quiver.py
+++ b/src/sage/combinat/cluster_algebra_quiver/quiver.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs sage.modules
r"""
Quiver
diff --git a/src/sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py b/src/sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py
index d4b99fc9c23..f39ea4216c7 100644
--- a/src/sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py
+++ b/src/sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Quiver mutation types
diff --git a/src/sage/combinat/cluster_complex.py b/src/sage/combinat/cluster_complex.py
index a1f7489f1ad..f63c7a6b9f3 100644
--- a/src/sage/combinat/cluster_complex.py
+++ b/src/sage/combinat/cluster_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs
r"""
Cluster complex (or generalized dual associahedron)
diff --git a/src/sage/combinat/colored_permutations.py b/src/sage/combinat/colored_permutations.py
index 44950aada12..1617a7f5db4 100644
--- a/src/sage/combinat/colored_permutations.py
+++ b/src/sage/combinat/colored_permutations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Colored Permutations
diff --git a/src/sage/combinat/combinat.py b/src/sage/combinat/combinat.py
index bd5e7102d66..e9efdc3ea6e 100644
--- a/src/sage/combinat/combinat.py
+++ b/src/sage/combinat/combinat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Combinatorial Functions
diff --git a/src/sage/combinat/combinat_cython.pxd b/src/sage/combinat/combinat_cython.pxd
index 40cae00a781..01be51d4a3d 100644
--- a/src/sage/combinat/combinat_cython.pxd
+++ b/src/sage/combinat/combinat_cython.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.libs.gmp.all cimport mpz_t
cdef mpz_stirling_s2(mpz_t s, unsigned long n, unsigned long k)
diff --git a/src/sage/combinat/combinat_cython.pyx b/src/sage/combinat/combinat_cython.pyx
index 421994394c2..223cf6ce01a 100644
--- a/src/sage/combinat/combinat_cython.pyx
+++ b/src/sage/combinat/combinat_cython.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# cython: binding=True
"""
Fast computation of combinatorial functions (Cython + mpz)
diff --git a/src/sage/combinat/combination.py b/src/sage/combinat/combination.py
index 916ca836c6b..51407c49aac 100644
--- a/src/sage/combinat/combination.py
+++ b/src/sage/combinat/combination.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Combinations
diff --git a/src/sage/combinat/combinatorial_map.py b/src/sage/combinat/combinatorial_map.py
index 84876e52f56..aff4782781b 100644
--- a/src/sage/combinat/combinatorial_map.py
+++ b/src/sage/combinat/combinatorial_map.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Combinatorial maps
diff --git a/src/sage/combinat/composition.py b/src/sage/combinat/composition.py
index e528aea368b..862d81f58bd 100644
--- a/src/sage/combinat/composition.py
+++ b/src/sage/combinat/composition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Integer compositions
diff --git a/src/sage/combinat/composition_signed.py b/src/sage/combinat/composition_signed.py
index 03e9acfe31e..09a790bf88c 100644
--- a/src/sage/combinat/composition_signed.py
+++ b/src/sage/combinat/composition_signed.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Signed Compositions
"""
diff --git a/src/sage/combinat/composition_tableau.py b/src/sage/combinat/composition_tableau.py
index 8ee363fb275..cff29fdb772 100644
--- a/src/sage/combinat/composition_tableau.py
+++ b/src/sage/combinat/composition_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Composition Tableaux
diff --git a/src/sage/combinat/constellation.py b/src/sage/combinat/constellation.py
index 0ad3151925e..73499121b19 100644
--- a/src/sage/combinat/constellation.py
+++ b/src/sage/combinat/constellation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups
r"""
Constellations
diff --git a/src/sage/combinat/core.py b/src/sage/combinat/core.py
index 41265d793db..7fbe02f7e16 100644
--- a/src/sage/combinat/core.py
+++ b/src/sage/combinat/core.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Cores
diff --git a/src/sage/combinat/counting.py b/src/sage/combinat/counting.py
index a067d781dec..a77803c1e46 100644
--- a/src/sage/combinat/counting.py
+++ b/src/sage/combinat/counting.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Counting
diff --git a/src/sage/combinat/crystals/affine.py b/src/sage/combinat/crystals/affine.py
index 186d2ea373e..81ee3e29fd5 100644
--- a/src/sage/combinat/crystals/affine.py
+++ b/src/sage/combinat/crystals/affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Affine Crystals
diff --git a/src/sage/combinat/crystals/affine_factorization.py b/src/sage/combinat/crystals/affine_factorization.py
index b1d820032af..ee8d8343799 100644
--- a/src/sage/combinat/crystals/affine_factorization.py
+++ b/src/sage/combinat/crystals/affine_factorization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Affine factorization crystal of type `A`
diff --git a/src/sage/combinat/crystals/affinization.py b/src/sage/combinat/crystals/affinization.py
index d849e407c3f..4b7a81c5f4b 100644
--- a/src/sage/combinat/crystals/affinization.py
+++ b/src/sage/combinat/crystals/affinization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Affinization Crystals
diff --git a/src/sage/combinat/crystals/alcove_path.py b/src/sage/combinat/crystals/alcove_path.py
index 2bec96841a2..ef39ccb164f 100644
--- a/src/sage/combinat/crystals/alcove_path.py
+++ b/src/sage/combinat/crystals/alcove_path.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Alcove paths
diff --git a/src/sage/combinat/crystals/all.py b/src/sage/combinat/crystals/all.py
index 397639405c9..5fc1f5f4d71 100644
--- a/src/sage/combinat/crystals/all.py
+++ b/src/sage/combinat/crystals/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Crystals
@@ -28,3 +29,5 @@
from sage.misc.lazy_import import lazy_import
lazy_import('sage.combinat.crystals', 'catalog', 'crystals')
+del lazy_import
+del install_doc
diff --git a/src/sage/combinat/crystals/bkk_crystals.py b/src/sage/combinat/crystals/bkk_crystals.py
index b3658fd28a4..2163195aacb 100644
--- a/src/sage/combinat/crystals/bkk_crystals.py
+++ b/src/sage/combinat/crystals/bkk_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Benkart-Kang-Kashiwara crystals for the general-linear Lie superalgebra
diff --git a/src/sage/combinat/crystals/catalog.py b/src/sage/combinat/crystals/catalog.py
index 0c884314255..79744ccd7bc 100644
--- a/src/sage/combinat/crystals/catalog.py
+++ b/src/sage/combinat/crystals/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Catalog Of Crystals
diff --git a/src/sage/combinat/crystals/catalog_elementary_crystals.py b/src/sage/combinat/crystals/catalog_elementary_crystals.py
index 51db8aa065a..02c97006d5a 100644
--- a/src/sage/combinat/crystals/catalog_elementary_crystals.py
+++ b/src/sage/combinat/crystals/catalog_elementary_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Catalog Of Elementary Crystals
diff --git a/src/sage/combinat/crystals/catalog_infinity_crystals.py b/src/sage/combinat/crystals/catalog_infinity_crystals.py
index 7f09b0f04f8..cbec9d97205 100644
--- a/src/sage/combinat/crystals/catalog_infinity_crystals.py
+++ b/src/sage/combinat/crystals/catalog_infinity_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Catalog Of Crystal Models For `B(\infty)`
diff --git a/src/sage/combinat/crystals/catalog_kirillov_reshetikhin.py b/src/sage/combinat/crystals/catalog_kirillov_reshetikhin.py
index 62b196e4ed6..cfd82ccd9b4 100644
--- a/src/sage/combinat/crystals/catalog_kirillov_reshetikhin.py
+++ b/src/sage/combinat/crystals/catalog_kirillov_reshetikhin.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Catalog Of Crystal Models For Kirillov-Reshetikhin Crystals
diff --git a/src/sage/combinat/crystals/crystals.py b/src/sage/combinat/crystals/crystals.py
index fb8f150e479..12efae47147 100644
--- a/src/sage/combinat/crystals/crystals.py
+++ b/src/sage/combinat/crystals/crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
An introduction to crystals
diff --git a/src/sage/combinat/crystals/direct_sum.py b/src/sage/combinat/crystals/direct_sum.py
index 190a3279513..92474bfe3c1 100644
--- a/src/sage/combinat/crystals/direct_sum.py
+++ b/src/sage/combinat/crystals/direct_sum.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Direct Sum of Crystals
diff --git a/src/sage/combinat/crystals/elementary_crystals.py b/src/sage/combinat/crystals/elementary_crystals.py
index c89dd7504fd..27b18fcd2a1 100644
--- a/src/sage/combinat/crystals/elementary_crystals.py
+++ b/src/sage/combinat/crystals/elementary_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Elementary Crystals
diff --git a/src/sage/combinat/crystals/fast_crystals.py b/src/sage/combinat/crystals/fast_crystals.py
index aebc499e9fb..d8c205bf228 100644
--- a/src/sage/combinat/crystals/fast_crystals.py
+++ b/src/sage/combinat/crystals/fast_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Fast Rank Two Crystals
diff --git a/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py b/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py
index e63e1a4a3ce..92c19eb2c52 100644
--- a/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py
+++ b/src/sage/combinat/crystals/fully_commutative_stable_grothendieck.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Fully commutative stable Grothendieck crystal
diff --git a/src/sage/combinat/crystals/generalized_young_walls.py b/src/sage/combinat/crystals/generalized_young_walls.py
index 12ab091f6cd..6986d2a5cc8 100644
--- a/src/sage/combinat/crystals/generalized_young_walls.py
+++ b/src/sage/combinat/crystals/generalized_young_walls.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Crystals of Generalized Young Walls
diff --git a/src/sage/combinat/crystals/highest_weight_crystals.py b/src/sage/combinat/crystals/highest_weight_crystals.py
index 96d7377c029..1272c24f027 100644
--- a/src/sage/combinat/crystals/highest_weight_crystals.py
+++ b/src/sage/combinat/crystals/highest_weight_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Highest weight crystals
diff --git a/src/sage/combinat/crystals/induced_structure.py b/src/sage/combinat/crystals/induced_structure.py
index 95ed85bf5f8..1d308b0b9b2 100644
--- a/src/sage/combinat/crystals/induced_structure.py
+++ b/src/sage/combinat/crystals/induced_structure.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Induced Crystals
diff --git a/src/sage/combinat/crystals/infinity_crystals.py b/src/sage/combinat/crystals/infinity_crystals.py
index 6219da38391..bc2d3d892ff 100644
--- a/src/sage/combinat/crystals/infinity_crystals.py
+++ b/src/sage/combinat/crystals/infinity_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
`\mathcal{B}(\infty)` Crystals of Tableaux in Nonexceptional Types and `G_2`
diff --git a/src/sage/combinat/crystals/kac_modules.py b/src/sage/combinat/crystals/kac_modules.py
index 23ed28b90c2..ddcd8492af1 100644
--- a/src/sage/combinat/crystals/kac_modules.py
+++ b/src/sage/combinat/crystals/kac_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Crystals of Kac modules of the general-linear Lie superalgebra
diff --git a/src/sage/combinat/crystals/kirillov_reshetikhin.py b/src/sage/combinat/crystals/kirillov_reshetikhin.py
index 1e58c8ead35..dac5a48f7a9 100644
--- a/src/sage/combinat/crystals/kirillov_reshetikhin.py
+++ b/src/sage/combinat/crystals/kirillov_reshetikhin.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Kirillov-Reshetikhin Crystals
diff --git a/src/sage/combinat/crystals/kyoto_path_model.py b/src/sage/combinat/crystals/kyoto_path_model.py
index e7ae0b47275..06589da80f3 100644
--- a/src/sage/combinat/crystals/kyoto_path_model.py
+++ b/src/sage/combinat/crystals/kyoto_path_model.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Kyoto Path Model for Affine Highest Weight Crystals
diff --git a/src/sage/combinat/crystals/letters.pxd b/src/sage/combinat/crystals/letters.pxd
index 4f8e25da411..da06502c59c 100644
--- a/src/sage/combinat/crystals/letters.pxd
+++ b/src/sage/combinat/crystals/letters.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.structure.element cimport Element
cdef class Letter(Element):
diff --git a/src/sage/combinat/crystals/letters.pyx b/src/sage/combinat/crystals/letters.pyx
index f54a4705047..ffdf8d0d519 100644
--- a/src/sage/combinat/crystals/letters.pyx
+++ b/src/sage/combinat/crystals/letters.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Crystals of letters
diff --git a/src/sage/combinat/crystals/littelmann_path.py b/src/sage/combinat/crystals/littelmann_path.py
index c2d8397f737..c26f801f0bb 100644
--- a/src/sage/combinat/crystals/littelmann_path.py
+++ b/src/sage/combinat/crystals/littelmann_path.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Littelmann paths
diff --git a/src/sage/combinat/crystals/monomial_crystals.py b/src/sage/combinat/crystals/monomial_crystals.py
index 7ba4b52bb51..8ebf0124876 100644
--- a/src/sage/combinat/crystals/monomial_crystals.py
+++ b/src/sage/combinat/crystals/monomial_crystals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Crystals of Modified Nakajima Monomials
diff --git a/src/sage/combinat/crystals/multisegments.py b/src/sage/combinat/crystals/multisegments.py
index 92de6809f4f..bb0a0bc3ccf 100644
--- a/src/sage/combinat/crystals/multisegments.py
+++ b/src/sage/combinat/crystals/multisegments.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Crystal of Bernstein-Zelevinsky Multisegments
diff --git a/src/sage/combinat/crystals/mv_polytopes.py b/src/sage/combinat/crystals/mv_polytopes.py
index 341ad417443..6d78a4e3ce3 100644
--- a/src/sage/combinat/crystals/mv_polytopes.py
+++ b/src/sage/combinat/crystals/mv_polytopes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Crystal Of Mirković-Vilonen (MV) Polytopes
diff --git a/src/sage/combinat/crystals/pbw_crystal.py b/src/sage/combinat/crystals/pbw_crystal.py
index 9859438ae58..6db2bf4d99a 100644
--- a/src/sage/combinat/crystals/pbw_crystal.py
+++ b/src/sage/combinat/crystals/pbw_crystal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
`\mathcal{B}(\infty)` Crystal Of PBW Monomials
diff --git a/src/sage/combinat/crystals/pbw_datum.pxd b/src/sage/combinat/crystals/pbw_datum.pxd
index 9c3aab083df..643d297b9df 100644
--- a/src/sage/combinat/crystals/pbw_datum.pxd
+++ b/src/sage/combinat/crystals/pbw_datum.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-combinat
+
cpdef tuple compute_new_lusztig_datum(list enhanced_braid_chain, initial_lusztig_datum)
cpdef tuple tropical_plucker_relation(tuple a, lusztig_datum)
cpdef list enhance_braid_move_chain(braid_move_chain, cartan_type)
diff --git a/src/sage/combinat/crystals/pbw_datum.pyx b/src/sage/combinat/crystals/pbw_datum.pyx
index 2adcb09d902..429c58640ca 100644
--- a/src/sage/combinat/crystals/pbw_datum.pyx
+++ b/src/sage/combinat/crystals/pbw_datum.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
PBW Data
diff --git a/src/sage/combinat/crystals/polyhedral_realization.py b/src/sage/combinat/crystals/polyhedral_realization.py
index c4193b44655..a9007307d32 100644
--- a/src/sage/combinat/crystals/polyhedral_realization.py
+++ b/src/sage/combinat/crystals/polyhedral_realization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Polyhedral Realization of `B(\infty)`
diff --git a/src/sage/combinat/crystals/spins.pxd b/src/sage/combinat/crystals/spins.pxd
index 3ef5e0b7c5f..715c44ba815 100644
--- a/src/sage/combinat/crystals/spins.pxd
+++ b/src/sage/combinat/crystals/spins.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.structure.element cimport Element
cdef class Spin(Element):
diff --git a/src/sage/combinat/crystals/spins.pyx b/src/sage/combinat/crystals/spins.pyx
index 62299a434f5..d3d66730179 100644
--- a/src/sage/combinat/crystals/spins.pyx
+++ b/src/sage/combinat/crystals/spins.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Spin Crystals
diff --git a/src/sage/combinat/crystals/star_crystal.py b/src/sage/combinat/crystals/star_crystal.py
index 02427149ed4..45bffe85726 100644
--- a/src/sage/combinat/crystals/star_crystal.py
+++ b/src/sage/combinat/crystals/star_crystal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Star-Crystal Structure On `B(\infty)`
diff --git a/src/sage/combinat/crystals/subcrystal.py b/src/sage/combinat/crystals/subcrystal.py
index b9caabafd72..7e227aa96a6 100644
--- a/src/sage/combinat/crystals/subcrystal.py
+++ b/src/sage/combinat/crystals/subcrystal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Subcrystals
diff --git a/src/sage/combinat/crystals/tensor_product.py b/src/sage/combinat/crystals/tensor_product.py
index 726c974e781..09382e5834a 100644
--- a/src/sage/combinat/crystals/tensor_product.py
+++ b/src/sage/combinat/crystals/tensor_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Tensor Products of Crystals
diff --git a/src/sage/combinat/crystals/tensor_product_element.pxd b/src/sage/combinat/crystals/tensor_product_element.pxd
index 792d6d3351e..e05c1cf4d59 100644
--- a/src/sage/combinat/crystals/tensor_product_element.pxd
+++ b/src/sage/combinat/crystals/tensor_product_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.structure.list_clone cimport ClonableArray
cdef class ImmutableListWithParent(ClonableArray):
diff --git a/src/sage/combinat/crystals/tensor_product_element.pyx b/src/sage/combinat/crystals/tensor_product_element.pyx
index 42a7f271092..226942ea7c8 100644
--- a/src/sage/combinat/crystals/tensor_product_element.pyx
+++ b/src/sage/combinat/crystals/tensor_product_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Tensor Products of Crystal Elements
diff --git a/src/sage/combinat/crystals/virtual_crystal.py b/src/sage/combinat/crystals/virtual_crystal.py
index e7286e58c01..7bdf411852a 100644
--- a/src/sage/combinat/crystals/virtual_crystal.py
+++ b/src/sage/combinat/crystals/virtual_crystal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Virtual Crystals
diff --git a/src/sage/combinat/cyclic_sieving_phenomenon.py b/src/sage/combinat/cyclic_sieving_phenomenon.py
index 8ad3bfc1f0c..fe52a18d788 100644
--- a/src/sage/combinat/cyclic_sieving_phenomenon.py
+++ b/src/sage/combinat/cyclic_sieving_phenomenon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Cyclic sieving phenomenon
diff --git a/src/sage/combinat/debruijn_sequence.pyx b/src/sage/combinat/debruijn_sequence.pyx
index 02e224283c2..a2962c3d174 100644
--- a/src/sage/combinat/debruijn_sequence.pyx
+++ b/src/sage/combinat/debruijn_sequence.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-combinat
r"""
De Bruijn sequences
diff --git a/src/sage/combinat/decorated_permutation.py b/src/sage/combinat/decorated_permutation.py
index f687818ef25..e427b16becc 100644
--- a/src/sage/combinat/decorated_permutation.py
+++ b/src/sage/combinat/decorated_permutation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Decorated permutations
diff --git a/src/sage/combinat/degree_sequences.pyx b/src/sage/combinat/degree_sequences.pyx
index 6a0b070a44e..4bd259945bb 100644
--- a/src/sage/combinat/degree_sequences.pyx
+++ b/src/sage/combinat/degree_sequences.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Degree sequences
diff --git a/src/sage/combinat/derangements.py b/src/sage/combinat/derangements.py
index e9e1de647e8..0bc68e99bf5 100644
--- a/src/sage/combinat/derangements.py
+++ b/src/sage/combinat/derangements.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Derangements
diff --git a/src/sage/combinat/descent_algebra.py b/src/sage/combinat/descent_algebra.py
index bb7db9e326e..39893e43f6a 100644
--- a/src/sage/combinat/descent_algebra.py
+++ b/src/sage/combinat/descent_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Descent Algebras
diff --git a/src/sage/combinat/designs/all.py b/src/sage/combinat/designs/all.py
index 0948c6fa281..32d2aa35bac 100644
--- a/src/sage/combinat/designs/all.py
+++ b/src/sage/combinat/designs/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Combinatorial designs and incidence structures
@@ -43,7 +44,8 @@
lazy_import('sage.combinat.designs.incidence_structures', 'IncidenceStructure')
-lazy_import('sage.combinat.designs.incidence_structures', 'IncidenceStructure', 'BlockDesign')
+lazy_import('sage.combinat.designs.incidence_structures',
+ 'IncidenceStructure', 'BlockDesign')
lazy_import('sage.combinat.designs.incidence_structures',
'IncidenceStructure', as_='Hypergraph')
@@ -51,4 +53,6 @@
lazy_import('sage.combinat.designs.covering_design',
['CoveringDesign', 'schonheim', 'trivial_covering_design'])
-from . import design_catalog as designs
+from sage.combinat.designs import design_catalog as designs
+del lazy_import
+del install_doc
diff --git a/src/sage/combinat/designs/bibd.py b/src/sage/combinat/designs/bibd.py
index d17c325bdc0..4d1050c174a 100644
--- a/src/sage/combinat/designs/bibd.py
+++ b/src/sage/combinat/designs/bibd.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Balanced Incomplete Block Designs (BIBD)
diff --git a/src/sage/combinat/designs/block_design.py b/src/sage/combinat/designs/block_design.py
index 08a92c6fe54..22c5466a31d 100644
--- a/src/sage/combinat/designs/block_design.py
+++ b/src/sage/combinat/designs/block_design.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings
r"""
Block designs
diff --git a/src/sage/combinat/designs/covering_array.py b/src/sage/combinat/designs/covering_array.py
index 1596c708152..7053c66a048 100644
--- a/src/sage/combinat/designs/covering_array.py
+++ b/src/sage/combinat/designs/covering_array.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Covering Arrays (CA)
diff --git a/src/sage/combinat/designs/covering_design.py b/src/sage/combinat/designs/covering_design.py
index a855dc601dc..8cb182f31b8 100644
--- a/src/sage/combinat/designs/covering_design.py
+++ b/src/sage/combinat/designs/covering_design.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Covering designs: coverings of `t`-element subsets of a `v`-set by `k`-sets
diff --git a/src/sage/combinat/designs/database.py b/src/sage/combinat/designs/database.py
index e4d80442f3c..c3200a07adf 100644
--- a/src/sage/combinat/designs/database.py
+++ b/src/sage/combinat/designs/database.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Database of small combinatorial designs
diff --git a/src/sage/combinat/designs/design_catalog.py b/src/sage/combinat/designs/design_catalog.py
index 8bf7f14fd0b..4f77341f9f1 100644
--- a/src/sage/combinat/designs/design_catalog.py
+++ b/src/sage/combinat/designs/design_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Catalog of designs
diff --git a/src/sage/combinat/designs/designs_pyx.pxd b/src/sage/combinat/designs/designs_pyx.pxd
index 345a41f2945..fef0692369c 100644
--- a/src/sage/combinat/designs/designs_pyx.pxd
+++ b/src/sage/combinat/designs/designs_pyx.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# Cached informations about OA(k,n)
#
# - max_true: max k such that OA(k,n,existence=True) previously returned True
diff --git a/src/sage/combinat/designs/designs_pyx.pyx b/src/sage/combinat/designs/designs_pyx.pyx
index 4a237ec82b3..11c9c5abe9d 100644
--- a/src/sage/combinat/designs/designs_pyx.pyx
+++ b/src/sage/combinat/designs/designs_pyx.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Cython functions for combinatorial designs
diff --git a/src/sage/combinat/designs/difference_family.py b/src/sage/combinat/designs/difference_family.py
index 8c2b2b0b01c..f3c228ffca3 100644
--- a/src/sage/combinat/designs/difference_family.py
+++ b/src/sage/combinat/designs/difference_family.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Difference families
diff --git a/src/sage/combinat/designs/difference_matrices.py b/src/sage/combinat/designs/difference_matrices.py
index 25986ca2c79..7e1a53f99e2 100644
--- a/src/sage/combinat/designs/difference_matrices.py
+++ b/src/sage/combinat/designs/difference_matrices.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings
r"""
Difference Matrices
diff --git a/src/sage/combinat/designs/evenly_distributed_sets.pyx b/src/sage/combinat/designs/evenly_distributed_sets.pyx
index 013288872e4..566c4973cda 100644
--- a/src/sage/combinat/designs/evenly_distributed_sets.pyx
+++ b/src/sage/combinat/designs/evenly_distributed_sets.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings
r"""
Evenly distributed sets in finite fields
diff --git a/src/sage/combinat/designs/ext_rep.py b/src/sage/combinat/designs/ext_rep.py
index 2227a1e9f63..b12fd7d9846 100644
--- a/src/sage/combinat/designs/ext_rep.py
+++ b/src/sage/combinat/designs/ext_rep.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
External Representations of Block Designs
diff --git a/src/sage/combinat/designs/gen_quadrangles_with_spread.pyx b/src/sage/combinat/designs/gen_quadrangles_with_spread.pyx
index 72baf1a5d28..d7d0e956954 100644
--- a/src/sage/combinat/designs/gen_quadrangles_with_spread.pyx
+++ b/src/sage/combinat/designs/gen_quadrangles_with_spread.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.libs.gap
r"""
Database of generalised quadrangles with spread
diff --git a/src/sage/combinat/designs/group_divisible_designs.py b/src/sage/combinat/designs/group_divisible_designs.py
index aee3bcc96cf..6342049e2e4 100644
--- a/src/sage/combinat/designs/group_divisible_designs.py
+++ b/src/sage/combinat/designs/group_divisible_designs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings
r"""
Group-Divisible Designs (GDD)
diff --git a/src/sage/combinat/designs/incidence_structures.py b/src/sage/combinat/designs/incidence_structures.py
index 79c95d2c4fb..97dcf4f366b 100644
--- a/src/sage/combinat/designs/incidence_structures.py
+++ b/src/sage/combinat/designs/incidence_structures.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Incidence structures (i.e. hypergraphs, i.e. set systems)
diff --git a/src/sage/combinat/designs/latin_squares.py b/src/sage/combinat/designs/latin_squares.py
index 58662fbeb88..6dc87323a47 100644
--- a/src/sage/combinat/designs/latin_squares.py
+++ b/src/sage/combinat/designs/latin_squares.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.modules
r"""
Mutually Orthogonal Latin Squares (MOLS)
diff --git a/src/sage/combinat/designs/orthogonal_arrays.py b/src/sage/combinat/designs/orthogonal_arrays.py
index b4a14b0e7b6..f621b51a54c 100644
--- a/src/sage/combinat/designs/orthogonal_arrays.py
+++ b/src/sage/combinat/designs/orthogonal_arrays.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings sage.schemes
r"""
Orthogonal arrays (OA)
diff --git a/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py b/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py
index 56f7cbc3bac..021bab7e2c4 100644
--- a/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py
+++ b/src/sage/combinat/designs/orthogonal_arrays_build_recursive.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings
r"""
Orthogonal arrays (build recursive constructions)
diff --git a/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx b/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx
index 7e80ab00034..bb172b96e3a 100644
--- a/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx
+++ b/src/sage/combinat/designs/orthogonal_arrays_find_recursive.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings sage.schemes
# cython: cdivision=True
r"""
diff --git a/src/sage/combinat/designs/resolvable_bibd.py b/src/sage/combinat/designs/resolvable_bibd.py
index e79e996dcb5..0efc8d163bf 100644
--- a/src/sage/combinat/designs/resolvable_bibd.py
+++ b/src/sage/combinat/designs/resolvable_bibd.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.rings.finite_rings
r"""
Resolvable Balanced Incomplete Block Design (RBIBD)
diff --git a/src/sage/combinat/designs/steiner_quadruple_systems.py b/src/sage/combinat/designs/steiner_quadruple_systems.py
index 7c7819c4138..aa09e6582de 100644
--- a/src/sage/combinat/designs/steiner_quadruple_systems.py
+++ b/src/sage/combinat/designs/steiner_quadruple_systems.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Steiner Quadruple Systems
diff --git a/src/sage/combinat/designs/subhypergraph_search.pyx b/src/sage/combinat/designs/subhypergraph_search.pyx
index 968159b9012..12ad945fdc4 100644
--- a/src/sage/combinat/designs/subhypergraph_search.pyx
+++ b/src/sage/combinat/designs/subhypergraph_search.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Hypergraph isomorphic copy search
diff --git a/src/sage/combinat/designs/twographs.py b/src/sage/combinat/designs/twographs.py
index 8ba2bc12681..dca9ea623ff 100644
--- a/src/sage/combinat/designs/twographs.py
+++ b/src/sage/combinat/designs/twographs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Two-graphs
diff --git a/src/sage/combinat/diagram.py b/src/sage/combinat/diagram.py
index 00b94920726..b8561c0f28d 100644
--- a/src/sage/combinat/diagram.py
+++ b/src/sage/combinat/diagram.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Combinatorial diagrams
diff --git a/src/sage/combinat/diagram_algebras.py b/src/sage/combinat/diagram_algebras.py
index a5c1045028a..7311e10257a 100644
--- a/src/sage/combinat/diagram_algebras.py
+++ b/src/sage/combinat/diagram_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Diagram and Partition Algebras
@@ -3898,6 +3899,245 @@ def convertI(x):
return self._from_dict(d, remove_zeros=True)
+class HalfTemperleyLiebDiagrams(UniqueRepresentation, Parent):
+ r"""
+ Half diagrams for the Temperley-Lieb algebra cell modules.
+ """
+ def __init__(self, order, defects):
+ r"""
+ Initialize ``self``.
+
+ TESTS::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: TestSuite(htld).run()
+ """
+ Parent.__init__(self, category=FiniteEnumeratedSets())
+ self._order = ZZ(order)
+ self._defects = ZZ(defects)
+ if (self._order - self._defects) % 2:
+ raise ValueError("the number of non-defects must be even")
+
+ def _repr_(self):
+ r"""
+ TESTS::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: da.HalfTemperleyLiebDiagrams(7, 5)
+ Half Temperley-Lieb diagrams of order 7 with 5 defects
+ """
+ return "Half Temperley-Lieb diagrams of order {} with {} defects".format(self._order, self._defects)
+
+ def __iter__(self):
+ r"""
+ TESTS::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: list(da.HalfTemperleyLiebDiagrams(5, 3))
+ [{{1, 2}}, {{2, 3}}, {{3, 4}}, {{4, 5}}]
+ """
+ n = self._order
+ k = self._defects
+ b = (n - k) // 2
+ from sage.combinat.dyck_word import DyckWords
+ for dw in DyckWords(b+k, b):
+ ret = []
+ offset = 0
+ for D in dw.catalan_factorization():
+ ret.extend((offset+a+1, offset+b) for (a, b) in D.tunnels())
+ offset += len(D) + 1
+ yield self.element_class(self, ret)
+
+ def __contains__(self, obj):
+ r"""
+ Check containment.
+
+ TESTS::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: htld.an_element() in htld
+ True
+ """
+ return isinstance(obj, self.Element) and obj.parent() is self
+
+ def cardinality(self):
+ r"""
+ Return the cardinality of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: htld.cardinality()
+ 14
+ """
+ from sage.functions.other import binomial
+ n = self._order
+ k = self._defects
+ b = (n - k) // 2
+ return (k + 1) * binomial(n, b) // (b + k + 1)
+
+ def _element_constructor_(self, d):
+ r"""
+ Construct an element of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: htld([[1, 4], [2, 3]])
+ {{1, 4}, {2, 3}}
+ """
+ return self.element_class(self, d)
+
+ class Element(AbstractPartitionDiagram):
+ def _latex_(self):
+ r"""
+ Return a latex representation of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: d = htld([[1, 2], [4, 5]])
+ sage: latex(d)
+ \begin{tikzpicture}[scale = 0.5,thick, baseline={(0,-1ex/2)}]
+ \tikzstyle{vertex} = [shape = circle, minimum size = 7pt, inner sep = 1pt]
+ \node[vertex] (G--7) at (9.0, -1) [shape = circle, draw] {};
+ \node[vertex] (G--7) at (9.0, -1) [shape = circle, draw] {};
+ \node[vertex] (G--6) at (7.5, -1) [shape = circle, draw] {};
+ \node[vertex] (G--6) at (7.5, -1) [shape = circle, draw] {};
+ \node[vertex] (G--5) at (6.0, -1) [shape = circle, draw] {};
+ \node[vertex] (G--4) at (4.5, -1) [shape = circle, draw] {};
+ \node[vertex] (G--3) at (3.0, -1) [shape = circle, draw] {};
+ \node[vertex] (G--3) at (3.0, -1) [shape = circle, draw] {};
+ \node[vertex] (G--2) at (1.5, -1) [shape = circle, draw] {};
+ \node[vertex] (G--1) at (0.0, -1) [shape = circle, draw] {};
+ \draw[] (G--7) .. controls +(0.0, 0.4) and +(-0.0, 0.4) .. (G--7);
+ \draw[] (G--6) .. controls +(0.0, 0.4) and +(-0.0, 0.4) .. (G--6);
+ \draw[] (G--5) .. controls +(-0.5, 0.5) and +(0.5, 0.5) .. (G--4);
+ \draw[] (G--3) .. controls +(0.0, 0.4) and +(-0.0, 0.4) .. (G--3);
+ \draw[] (G--2) .. controls +(-0.5, 0.5) and +(0.5, 0.5) .. (G--1);
+ \end{tikzpicture}
+ """
+ defects = self.defects()
+ temp = [[-b, -a] for (a, b) in self] + [[-d, -d] for d in defects]
+ temp.sort()
+ return diagram_latex(temp)
+
+ def _ascii_art_(self):
+ r"""
+ Return an ascii art representation of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: d = htld([[1, 2], [4, 5]])
+ sage: ascii_art(d)
+ .-. | .-. | |
+ o o o o o o o
+ sage: htld = da.HalfTemperleyLiebDiagrams(8, 0)
+ sage: d = htld([[1, 6], [2, 3], [4, 5], [7, 8]])
+ sage: ascii_art(d)
+ .---------.
+ | .-. .-. | .-.
+ o o o o o o o o
+ """
+ defects = self.defects()
+ temp = [[-b, -a] for (a, b) in self] + [[-d, d] for d in defects]
+ rank = self.parent()._order
+ temp.append([rank, rank])
+ temp.sort()
+ ret = TL_diagram_ascii_art(temp)
+ from sage.typeset.ascii_art import AsciiArt
+ return AsciiArt(ret[2:])
+
+ def _unicode_art_(self):
+ r"""
+ Return an ascii art representation of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: d = htld([[1, 2], [4, 5]])
+ sage: unicode_art(d)
+ ╭─╮ │ ╭─╮ │ │
+ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬
+ sage: htld = da.HalfTemperleyLiebDiagrams(8, 0)
+ sage: d = htld([[1, 6], [2, 3], [4, 5], [7, 8]])
+ sage: unicode_art(d)
+ ╭─────────╮
+ │ ╭─╮ ╭─╮ │ ╭─╮
+ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬
+ """
+ defects = self.defects()
+ temp = [[-b, -a] for (a, b) in self] + [[-d, d] for d in defects]
+ rank = self.parent()._order
+ temp.append([rank, rank])
+ temp.sort()
+ ret = TL_diagram_ascii_art(temp, use_unicode=True)
+ from sage.typeset.unicode_art import UnicodeArt
+ return UnicodeArt(ret[2:])
+
+ def defects(self):
+ r"""
+ Return the defects of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: d = htld([[1, 2], [4, 5]])
+ sage: d.defects()
+ frozenset({3, 6, 7})
+ """
+ order = self.parent()._order
+ return frozenset(range(1, order+1)) - frozenset(e for B in self for e in B)
+
+ def check(self):
+ r"""
+ Check the validity of the input of ``self``.
+
+ EXAMPLES::
+
+ sage: import sage.combinat.diagram_algebras as da
+ sage: htld = da.HalfTemperleyLiebDiagrams(7, 3)
+ sage: htld([[1,2], [3,4]]) # indirect doctest
+ {{1, 2}, {3, 4}}
+ sage: htld([[1,2], [-1, -2]]) # indirect doctest
+ Traceback (most recent call last):
+ ...
+ ValueError: {{-2, -1}, {1, 2}} does not represent a half TL diagram of order 7
+ sage: htld([[1,2,3], [4,5]]) # indirect doctest
+ Traceback (most recent call last):
+ ...
+ ValueError: all blocks of {{1, 2, 3}, {4, 5}} must be of size 2
+ sage: htld([[1,2], [3,4], [5,6]]) # indirect doctest
+ Traceback (most recent call last):
+ ...
+ ValueError: {{1, 2}, {3, 4}, {5, 6}} does not have 3 defects
+ sage: htld([[1,3], [2,4]]) # indirect doctest
+ Traceback (most recent call last):
+ ...
+ ValueError: {{1, 3}, {2, 4}} is not planar
+ """
+ tst = frozenset(e for B in self._base_diagram for e in B)
+ P = self.parent()
+ if not (tst <= frozenset(range(1, P._order+1))):
+ raise ValueError("{} does not represent a half TL diagram of order {}".format(
+ self, self.parent()._order))
+ if any(len(block) != 2 for block in self):
+ raise ValueError("all blocks of {} must be of size 2".format(self))
+ if len(tst) != P._order - P._defects:
+ raise ValueError("{} does not have {} defects".format(self, P._defects))
+ if not self.is_planar():
+ raise ValueError("{} is not planar".format(self))
+
+
class TemperleyLiebAlgebra(SubPartitionAlgebra, UnitDiagramMixin):
r"""
A Temperley--Lieb algebra.
@@ -3948,6 +4188,60 @@ class TemperleyLiebAlgebra(SubPartitionAlgebra, UnitDiagramMixin):
True
sage: b[0]^5 == x^4*b[0]
True
+
+ The Temperley-Lieb algebra is a cellular algebra, and we verify that
+ the dimensions of the simple modules at `q = 0` is given by
+ :oeis:`A050166`::
+
+ sage: for k in range(1,5):
+ ....: TL = TemperleyLiebAlgebra(2*k, 0, QQ)
+ ....: print("".join("{:3}".format(TL.cell_module(la).simple_module().dimension())
+ ....: for la in reversed(TL.cell_poset()) if la != 0))
+ 1
+ 1 2
+ 1 4 5
+ 1 6 14 14
+ sage: for k in range(1,4):
+ ....: TL = TemperleyLiebAlgebra(2*k+1, 0, QQ)
+ ....: print("".join("{:3}".format(TL.cell_module(la).simple_module().dimension())
+ ....: for la in reversed(TL.cell_poset()) if la != 0))
+ 1 2
+ 1 4 5
+ 1 6 14 14
+
+ Additional examples when the Temperley-Lieb algebra is not semisimple::
+
+ sage: TL = TemperleyLiebAlgebra(8, -1, QQ)
+ sage: for la in TL.cell_poset():
+ ....: CM = TL.cell_module(la)
+ ....: if not CM.nonzero_bilinear_form():
+ ....: continue
+ ....: print(la, CM.dimension(), CM.simple_module().dimension())
+ ....:
+ 0 14 1
+ 2 28 28
+ 4 20 13
+ 6 7 7
+ 8 1 1
+ sage: for k in range(1,5):
+ ....: TL = TemperleyLiebAlgebra(2*k, -1, QQ)
+ ....: print("".join("{:3}".format(TL.cell_module(la).simple_module().dimension())
+ ....: for la in reversed(TL.cell_poset())
+ ....: if TL.cell_module(la).nonzero_bilinear_form()))
+ 1 1
+ 1 3 1
+ 1 4 9 1
+ 1 7 13 28 1
+ sage: C5. = CyclotomicField(5)
+ sage: for k in range(1,5):
+ ....: TL = TemperleyLiebAlgebra(2*k, z5+~z5, C5)
+ ....: print("".join("{:3}".format(TL.cell_module(la).simple_module().dimension())
+ ....: for la in reversed(TL.cell_poset())
+ ....: if TL.cell_module(la).nonzero_bilinear_form()))
+ 1 1
+ 1 3 2
+ 1 5 8 5
+ 1 7 20 21 13
"""
@staticmethod
def __classcall_private__(cls, k, q, base_ring=None, prefix="T"):
@@ -3976,8 +4270,12 @@ def __init__(self, k, q, base_ring, prefix):
sage: R. = QQ[]
sage: TL = TemperleyLiebAlgebra(2, q, R)
sage: TestSuite(TL).run()
+
+ sage: TL = TemperleyLiebAlgebra(3, 0, QQ)
+ sage: TestSuite(TL).run()
"""
- SubPartitionAlgebra.__init__(self, k, q, base_ring, prefix, TemperleyLiebDiagrams(k))
+ cat = AssociativeAlgebras(base_ring.category()).Unital().FiniteDimensional().WithBasis().Cellular()
+ SubPartitionAlgebra.__init__(self, k, q, base_ring, prefix, TemperleyLiebDiagrams(k), category=cat)
def _repr_(self):
"""
@@ -4059,6 +4357,153 @@ def _unicode_art_term(self, diagram):
"""
return TL_diagram_ascii_art(diagram, use_unicode=True)
+ @cached_method
+ def cell_poset(self):
+ """
+ Return the cell poset of ``self``.
+
+ EXAMPLES::
+
+ sage: R. = QQ[]
+ sage: TL = TemperleyLiebAlgebra(7, q, R)
+ sage: TL.cell_poset().cover_relations()
+ [[1, 3], [3, 5], [5, 7]]
+
+ sage: TL = TemperleyLiebAlgebra(8, q, R)
+ sage: TL.cell_poset().cover_relations()
+ [[0, 2], [2, 4], [4, 6], [6, 8]]
+ """
+ from sage.combinat.posets.posets import Poset
+ return Poset({k-2: [k] for k in range(self._k, 1, -2)})
+
+ def cell_module_indices(self, la):
+ r"""
+ Return the indices of the cell module of ``self``
+ indexed by ``la`` .
+
+ This is the finite set `M(\lambda)`.
+
+ EXAMPLES::
+
+ sage: R. = QQ[]
+ sage: TL = TemperleyLiebAlgebra(8, q, R)
+ sage: TL.cell_module_indices(4)
+ Half Temperley-Lieb diagrams of order 8 with 4 defects
+ """
+ return HalfTemperleyLiebDiagrams(self._k, la)
+
+ def _to_cellular_element(self, d):
+ r"""
+ Return the image in the cellular basis of the basis element
+ of ``self`` indexed by ``d``.
+
+ EXAMPLES::
+
+ sage: R. = QQ[]
+ sage: TL = TemperleyLiebAlgebra(3, q, R)
+ sage: for d in TL.basis().keys():
+ ....: print(d)
+ ....: print(TL._to_cellular_element(d))
+ {{-3, 3}, {-2, -1}, {1, 2}}
+ C(1, {{1, 2}}, {{1, 2}})
+ {{-3, 1}, {-2, -1}, {2, 3}}
+ C(1, {{2, 3}}, {{1, 2}})
+ {{-3, -2}, {-1, 1}, {2, 3}}
+ C(1, {{2, 3}}, {{2, 3}})
+ {{-3, -2}, {-1, 3}, {1, 2}}
+ C(1, {{1, 2}}, {{2, 3}})
+ {{-3, 3}, {-2, 2}, {-1, 1}}
+ C(3, {}, {})
+ """
+ C = self.cellular_basis()
+ top = []
+ bottom = []
+ defects = ZZ.zero()
+ for (a, b) in d:
+ if b < 0:
+ bottom.append((-b, -a))
+ elif a > 0:
+ top.append((a, b))
+ else:
+ defects += ZZ.one()
+ CMI = self.cell_module_indices(defects)
+ tup = (defects, CMI(top), CMI(bottom))
+ return C.monomial(C._indices(tup))
+
+ def _from_cellular_index(self, x):
+ r"""
+ Return the image in ``self`` from the index of the
+ cellular basis ``x``.
+
+ EXAMPLES::
+
+ sage: R. = QQ[]
+ sage: TL = TemperleyLiebAlgebra(3, q, R)
+ sage: C = TL.cellular_basis()
+ sage: for i in C.basis().keys():
+ ....: print(i)
+ ....: print(TL._from_cellular_index(i))
+ (1, {{1, 2}}, {{1, 2}})
+ T{{-3, 3}, {-2, -1}, {1, 2}}
+ (1, {{1, 2}}, {{2, 3}})
+ T{{-3, -2}, {-1, 3}, {1, 2}}
+ (1, {{2, 3}}, {{1, 2}})
+ T{{-3, 1}, {-2, -1}, {2, 3}}
+ (1, {{2, 3}}, {{2, 3}})
+ T{{-3, -2}, {-1, 1}, {2, 3}}
+ (3, {}, {})
+ T{{-3, 3}, {-2, 2}, {-1, 1}}
+
+ sage: TL = TemperleyLiebAlgebra(4, QQ.zero(), QQ)
+ sage: C = TL.cellular_basis()
+ sage: [TL._from_cellular_index(i) for i in C.basis().keys()]
+ [T{{-4, -3}, {-2, -1}, {1, 2}, {3, 4}},
+ T{{-4, -1}, {-3, -2}, {1, 2}, {3, 4}},
+ T{{-4, -3}, {-2, -1}, {1, 4}, {2, 3}},
+ T{{-4, -1}, {-3, -2}, {1, 4}, {2, 3}},
+ T{{-4, 4}, {-3, 3}, {-2, -1}, {1, 2}},
+ T{{-4, 4}, {-3, -2}, {-1, 3}, {1, 2}},
+ T{{-4, -3}, {-2, 4}, {-1, 3}, {1, 2}},
+ T{{-4, 4}, {-3, 1}, {-2, -1}, {2, 3}},
+ T{{-4, 4}, {-3, -2}, {-1, 1}, {2, 3}},
+ T{{-4, -3}, {-2, 4}, {-1, 1}, {2, 3}},
+ T{{-4, 2}, {-3, 1}, {-2, -1}, {3, 4}},
+ T{{-4, 2}, {-3, -2}, {-1, 1}, {3, 4}},
+ T{{-4, -3}, {-2, 2}, {-1, 1}, {3, 4}},
+ T{{-4, 4}, {-3, 3}, {-2, 2}, {-1, 1}}]
+ """
+ _, top, bottom = x
+ bottom = [[-b, -a] for (a, b) in bottom]
+ tmiss = frozenset(range(1, self._k+1)) - frozenset(e for B in top for e in B)
+ bmiss = frozenset(range(-1, -self._k-1, -1)) - frozenset(e for B in bottom for e in B)
+ prop = list(zip(sorted(tmiss, reverse=True), sorted(bmiss)))
+ return self.monomial(self._indices(bottom + prop + list(top)))
+
+ def cellular_involution(self, x):
+ r"""
+ Return the cellular involution of ``x`` in ``self``.
+
+ EXAMPLES::
+
+ sage: TL = TemperleyLiebAlgebra(4, QQ.zero(), QQ)
+ sage: ascii_art(TL.an_element())
+ o o o o o o o o
+ o o o o | `-` | | `-` |
+ 2* `-` `-` + 2* `-----` + 3* `---. |
+ .-. .-. .-. .-. .-. | |
+ o o o o o o o o o o o o
+ sage: ascii_art(TL.cellular_involution(TL.an_element()))
+ o o o o o o o o
+ o o o o `-` `-` `-` | |
+ 2* `-` `-` + 2* .-----. + 3* .---` |
+ .-. .-. | .-. | | .-. |
+ o o o o o o o o o o o o
+ """
+ M = x.monomial_coefficients(copy=False)
+ I = self._indices
+ return self._from_dict({d.dual(): c for d, c in M.items()},
+ remove_zeros=False)
+
class PlanarAlgebra(SubPartitionAlgebra, UnitDiagramMixin):
r"""
diff --git a/src/sage/combinat/dlx.py b/src/sage/combinat/dlx.py
index 58bb1bc624f..df63635e961 100644
--- a/src/sage/combinat/dlx.py
+++ b/src/sage/combinat/dlx.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Exact Cover Problem via Dancing Links
"""
diff --git a/src/sage/combinat/dyck_word.py b/src/sage/combinat/dyck_word.py
index 6316e1f9ba6..5061b08f483 100644
--- a/src/sage/combinat/dyck_word.py
+++ b/src/sage/combinat/dyck_word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Dyck Words
diff --git a/src/sage/combinat/e_one_star.py b/src/sage/combinat/e_one_star.py
index 2d04619f393..85c0c5a02a1 100644
--- a/src/sage/combinat/e_one_star.py
+++ b/src/sage/combinat/e_one_star.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Substitutions over unit cube faces (Rauzy fractals)
diff --git a/src/sage/combinat/enumerated_sets.py b/src/sage/combinat/enumerated_sets.py
index f529886da82..1554a2c5786 100644
--- a/src/sage/combinat/enumerated_sets.py
+++ b/src/sage/combinat/enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Enumerated sets and combinatorial objects
diff --git a/src/sage/combinat/enumeration_mod_permgroup.pxd b/src/sage/combinat/enumeration_mod_permgroup.pxd
index 24a0e15217c..aace492701b 100644
--- a/src/sage/combinat/enumeration_mod_permgroup.pxd
+++ b/src/sage/combinat/enumeration_mod_permgroup.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.structure.list_clone cimport ClonableIntArray
cpdef list all_children(ClonableIntArray v, int max_part)
diff --git a/src/sage/combinat/enumeration_mod_permgroup.pyx b/src/sage/combinat/enumeration_mod_permgroup.pyx
index 70b05c6276b..9ea12608ec9 100644
--- a/src/sage/combinat/enumeration_mod_permgroup.pyx
+++ b/src/sage/combinat/enumeration_mod_permgroup.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.combinat
r"""
Tools for enumeration modulo the action of a permutation group
diff --git a/src/sage/combinat/expnums.pyx b/src/sage/combinat/expnums.pyx
index 216850b43f1..4b03dfa0957 100644
--- a/src/sage/combinat/expnums.pyx
+++ b/src/sage/combinat/expnums.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Compute Bell and Uppuluri-Carpenter numbers
diff --git a/src/sage/combinat/family.py b/src/sage/combinat/family.py
index a7b2c592b3e..359dcc80e47 100644
--- a/src/sage/combinat/family.py
+++ b/src/sage/combinat/family.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Families
diff --git a/src/sage/combinat/fast_vector_partitions.pyx b/src/sage/combinat/fast_vector_partitions.pyx
index fe937b75ee7..84550e3e222 100644
--- a/src/sage/combinat/fast_vector_partitions.pyx
+++ b/src/sage/combinat/fast_vector_partitions.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-combinat
r"""
Brent Yorgey's fast algorithm for integer vector (multiset) partitions.
diff --git a/src/sage/combinat/finite_state_machine.py b/src/sage/combinat/finite_state_machine.py
index 2955d037769..7f64dc181b9 100644
--- a/src/sage/combinat/finite_state_machine.py
+++ b/src/sage/combinat/finite_state_machine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs sage.modules
r"""
Finite state machines, automata, transducers
diff --git a/src/sage/combinat/finite_state_machine_generators.py b/src/sage/combinat/finite_state_machine_generators.py
index 86307f490f9..90ee5aa0b15 100644
--- a/src/sage/combinat/finite_state_machine_generators.py
+++ b/src/sage/combinat/finite_state_machine_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs sage.modules
r"""
Common Automata and Transducers (Finite State Machines Generators)
diff --git a/src/sage/combinat/fqsym.py b/src/sage/combinat/fqsym.py
index fbfbf7b54bc..98595ccfad5 100644
--- a/src/sage/combinat/fqsym.py
+++ b/src/sage/combinat/fqsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Free Quasi-symmetric functions
diff --git a/src/sage/combinat/free_dendriform_algebra.py b/src/sage/combinat/free_dendriform_algebra.py
index 900b9a7ca5d..0a1c4cd2e2b 100644
--- a/src/sage/combinat/free_dendriform_algebra.py
+++ b/src/sage/combinat/free_dendriform_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Free Dendriform Algebras
diff --git a/src/sage/combinat/free_module.py b/src/sage/combinat/free_module.py
index 19cec377fc8..306d56f0a32 100644
--- a/src/sage/combinat/free_module.py
+++ b/src/sage/combinat/free_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Free modules
"""
@@ -498,15 +499,35 @@ def change_ring(self, R):
Free module generated by {'a', 'b', 'c'} over Rational Field
sage: F_QQ.change_ring(ZZ) == F
True
+
+ sage: T = F.tensor(F); T
+ Free module generated by {'a', 'b', 'c'} over Integer Ring
+ # Free module generated by {'a', 'b', 'c'} over Integer Ring
+ sage: T.change_ring(QQ)
+ Free module generated by {'a', 'b', 'c'} over Rational Field
+ # Free module generated by {'a', 'b', 'c'} over Rational Field
+
+ sage: G = CombinatorialFreeModule(ZZ, ['x','y']); G
+ Free module generated by {'x', 'y'} over Integer Ring
+ sage: T = F.cartesian_product(G); T
+ Free module generated by {'a', 'b', 'c'} over Integer Ring
+ (+) Free module generated by {'x', 'y'} over Integer Ring
+ sage: T.change_ring(QQ)
+ Free module generated by {'a', 'b', 'c'} over Rational Field
+ (+) Free module generated by {'x', 'y'} over Rational Field
"""
if R is self.base_ring():
return self
construction = self.construction()
if construction is not None:
- functor, _ = construction
+ functor, args = construction
from sage.categories.pushout import VectorFunctor
if isinstance(functor, VectorFunctor):
return functor(R)
+ from sage.categories.tensor import TensorProductFunctor
+ from sage.categories.cartesian_product import CartesianProductFunctor
+ if isinstance(functor, (TensorProductFunctor, CartesianProductFunctor)):
+ return functor([f.change_ring(R) for f in args])
raise NotImplementedError('the method change_ring() has not yet been implemented')
# For backwards compatibility
@@ -1003,10 +1024,10 @@ def from_vector(self, vector, order=None, coerce=True):
if order is None:
order = self.get_order()
if not coerce or vector.base_ring() is self.base_ring():
- return self._from_dict({order[i]: c for i,c in vector.items()},
+ return self._from_dict({order[i]: c for i, c in vector.items()},
coerce=False)
R = self.base_ring()
- return self._from_dict({order[i]: R(c) for i,c in vector.items() if R(c)},
+ return self._from_dict({order[i]: R(c) for i, c in vector.items() if R(c)},
coerce=False, remove_zeros=False)
def sum(self, iter_of_elements):
@@ -1243,430 +1264,434 @@ def _from_dict(self, d, coerce=False, remove_zeros=True):
class CombinatorialFreeModule_Tensor(CombinatorialFreeModule):
- """
- Tensor Product of Free Modules
+ """
+ Tensor Product of Free Modules
- EXAMPLES:
+ EXAMPLES:
- We construct two free modules, assign them short names, and construct their tensor product::
+ We construct two free modules, assign them short names, and construct their tensor product::
- sage: F = CombinatorialFreeModule(ZZ, [1,2]); F.rename("F")
- sage: G = CombinatorialFreeModule(ZZ, [3,4]); G.rename("G")
- sage: T = tensor([F, G]); T
- F # G
+ sage: F = CombinatorialFreeModule(ZZ, [1,2]); F.rename("F")
+ sage: G = CombinatorialFreeModule(ZZ, [3,4]); G.rename("G")
+ sage: T = tensor([F, G]); T
+ F # G
- sage: T.category()
- Category of tensor products of
- finite dimensional modules with basis over Integer Ring
+ sage: T.category()
+ Category of tensor products of
+ finite dimensional modules with basis over Integer Ring
- sage: T.construction() # todo: not implemented
- [tensor, ]
+ sage: T.construction() # todo: not implemented
+ [tensor, ]
- T is a free module, with same base ring as F and G::
+ T is a free module, with same base ring as F and G::
- sage: T.base_ring()
- Integer Ring
+ sage: T.base_ring()
+ Integer Ring
- The basis of T is indexed by tuples of basis indices of F and G::
+ The basis of T is indexed by tuples of basis indices of F and G::
- sage: T.basis().keys()
- Image of Cartesian product of {1, 2}, {3, 4}
- by The map from Cartesian product of {1, 2}, {3, 4}
- sage: T.basis().keys().list()
- [(1, 3), (1, 4), (2, 3), (2, 4)]
+ sage: T.basis().keys()
+ Image of Cartesian product of {1, 2}, {3, 4}
+ by The map from Cartesian product of {1, 2}, {3, 4}
+ sage: T.basis().keys().list()
+ [(1, 3), (1, 4), (2, 3), (2, 4)]
- FIXME: Should elements of a CartesianProduct be tuples (making them hashable)?
+ FIXME: Should elements of a CartesianProduct be tuples (making them hashable)?
- Here are the basis elements themselves::
+ Here are the basis elements themselves::
- sage: T.basis().cardinality()
- 4
- sage: list(T.basis())
- [B[1] # B[3], B[1] # B[4], B[2] # B[3], B[2] # B[4]]
+ sage: T.basis().cardinality()
+ 4
+ sage: list(T.basis())
+ [B[1] # B[3], B[1] # B[4], B[2] # B[3], B[2] # B[4]]
- The tensor product is associative and flattens sub tensor products::
+ The tensor product is associative and flattens sub tensor products::
- sage: H = CombinatorialFreeModule(ZZ, [5,6]); H.rename("H")
- sage: tensor([F, tensor([G, H])])
- F # G # H
- sage: tensor([tensor([F, G]), H])
- F # G # H
- sage: tensor([F, G, H])
- F # G # H
+ sage: H = CombinatorialFreeModule(ZZ, [5,6]); H.rename("H")
+ sage: tensor([F, tensor([G, H])])
+ F # G # H
+ sage: tensor([tensor([F, G]), H])
+ F # G # H
+ sage: tensor([F, G, H])
+ F # G # H
- We now compute the tensor product of elements of free modules::
+ We now compute the tensor product of elements of free modules::
- sage: f = F.monomial(1) + 2 * F.monomial(2)
- sage: g = 2*G.monomial(3) + G.monomial(4)
- sage: h = H.monomial(5) + H.monomial(6)
- sage: tensor([f, g])
- 2*B[1] # B[3] + B[1] # B[4] + 4*B[2] # B[3] + 2*B[2] # B[4]
+ sage: f = F.monomial(1) + 2 * F.monomial(2)
+ sage: g = 2*G.monomial(3) + G.monomial(4)
+ sage: h = H.monomial(5) + H.monomial(6)
+ sage: tensor([f, g])
+ 2*B[1] # B[3] + B[1] # B[4] + 4*B[2] # B[3] + 2*B[2] # B[4]
- Again, the tensor product is associative on elements::
+ Again, the tensor product is associative on elements::
- sage: tensor([f, tensor([g, h])]) == tensor([f, g, h])
- True
- sage: tensor([tensor([f, g]), h]) == tensor([f, g, h])
- True
+ sage: tensor([f, tensor([g, h])]) == tensor([f, g, h])
+ True
+ sage: tensor([tensor([f, g]), h]) == tensor([f, g, h])
+ True
- Note further that the tensor product spaces need not preexist::
+ Note further that the tensor product spaces need not preexist::
- sage: t = tensor([f, g, h])
- sage: t.parent()
- F # G # H
+ sage: t = tensor([f, g, h])
+ sage: t.parent()
+ F # G # H
+ TESTS::
+
+ sage: tensor([tensor([F, G]), H]) == tensor([F, G, H])
+ True
+ sage: tensor([F, tensor([G, H])]) == tensor([F, G, H])
+ True
+ """
+ @staticmethod
+ def __classcall_private__(cls, modules, **options):
+ """
TESTS::
+ sage: F = CombinatorialFreeModule(ZZ, [1,2])
+ sage: G = CombinatorialFreeModule(ZZ, [3,4])
+ sage: H = CombinatorialFreeModule(ZZ, [4])
sage: tensor([tensor([F, G]), H]) == tensor([F, G, H])
True
sage: tensor([F, tensor([G, H])]) == tensor([F, G, H])
True
+
+ Check that :issue:`19608` is fixed::
+
+ sage: T = tensor([F, G, H])
+ sage: T in Modules(ZZ).FiniteDimensional()
+ True
"""
- @staticmethod
- def __classcall_private__(cls, modules, **options):
- """
- TESTS::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2])
- sage: G = CombinatorialFreeModule(ZZ, [3,4])
- sage: H = CombinatorialFreeModule(ZZ, [4])
- sage: tensor([tensor([F, G]), H]) == tensor([F, G, H])
- True
- sage: tensor([F, tensor([G, H])]) == tensor([F, G, H])
- True
-
- Check that :issue:`19608` is fixed::
-
- sage: T = tensor([F, G, H])
- sage: T in Modules(ZZ).FiniteDimensional()
- True
- """
- assert (len(modules) > 0)
- R = modules[0].base_ring()
- assert (all(module in ModulesWithBasis(R)) for module in modules)
- # should check the base ring
- # flatten the list of modules so that tensor(A, tensor(B,C)) gets rewritten into tensor(A, B, C)
- modules = sum([module._sets if isinstance(module, CombinatorialFreeModule_Tensor) else (module,) for module in modules], ())
- if all('FiniteDimensional' in M.category().axioms() for M in modules):
- options['category'] = options['category'].FiniteDimensional()
- return super(CombinatorialFreeModule.Tensor, cls).__classcall__(cls, modules, **options)
-
- def __init__(self, modules, **options):
- """
- TESTS::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2]); F
- F
- """
- self._sets = modules
- indices = CartesianProduct_iters(*[module.basis().keys()
- for module in modules]).map(tuple)
- CombinatorialFreeModule.__init__(self, modules[0].base_ring(), indices, **options)
- # the following is not the best option, but it's better than nothing.
- if 'tensor_symbol' in options:
- self._print_options['tensor_symbol'] = options['tensor_symbol']
-
- def _repr_(self):
- r"""
- This is customizable by setting
- ``self.print_options('tensor_symbol'=...)``.
-
- TESTS::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2,3])
- sage: G = CombinatorialFreeModule(ZZ, [1,2,3,8])
- sage: F.rename("F")
- sage: G.rename("G")
- sage: T = tensor([F, G])
- sage: T # indirect doctest
- F # G
- sage: T.print_options(tensor_symbol=' @ ') # note the spaces
- sage: T # indirect doctest
- F @ G
-
- To avoid a side\--effect on another doctest, we revert the change::
-
- sage: T.print_options(tensor_symbol=' # ')
- """
- from sage.categories.tensor import tensor
- if hasattr(self, "_print_options"):
- symb = self._print_options['tensor_symbol']
- if symb is None:
- symb = tensor.symbol
- else:
+ assert (len(modules) > 0)
+ R = modules[0].base_ring()
+ assert (all(module in ModulesWithBasis(R)) for module in modules)
+ # should check the base ring
+ # flatten the list of modules so that tensor(A, tensor(B,C)) gets rewritten into tensor(A, B, C)
+ modules = sum([module._sets if isinstance(module, CombinatorialFreeModule_Tensor) else (module,) for module in modules], ())
+ if all('FiniteDimensional' in M.category().axioms() for M in modules):
+ options['category'] = options['category'].FiniteDimensional()
+ return super(CombinatorialFreeModule.Tensor, cls).__classcall__(cls, modules, **options)
+
+ def __init__(self, modules, **options):
+ """
+ TESTS::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2]); F
+ F
+ """
+ self._sets = modules
+ indices = CartesianProduct_iters(*[module.basis().keys()
+ for module in modules]).map(tuple)
+ CombinatorialFreeModule.__init__(self, modules[0].base_ring(), indices, **options)
+ # the following is not the best option, but it's better than nothing.
+ if 'tensor_symbol' in options:
+ self._print_options['tensor_symbol'] = options['tensor_symbol']
+
+ def _repr_(self):
+ r"""
+ This is customizable by setting
+ ``self.print_options('tensor_symbol'=...)``.
+
+ TESTS::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2,3])
+ sage: G = CombinatorialFreeModule(ZZ, [1,2,3,8])
+ sage: F.rename("F")
+ sage: G.rename("G")
+ sage: T = tensor([F, G])
+ sage: T # indirect doctest
+ F # G
+ sage: T.print_options(tensor_symbol=' @ ') # note the spaces
+ sage: T # indirect doctest
+ F @ G
+
+ To avoid a side\--effect on another doctest, we revert the change::
+
+ sage: T.print_options(tensor_symbol=' # ')
+ """
+ from sage.categories.tensor import tensor
+ if hasattr(self, "_print_options"):
+ symb = self._print_options['tensor_symbol']
+ if symb is None:
symb = tensor.symbol
- return symb.join("%s" % module for module in self._sets)
- # TODO: make this overridable by setting _name
-
- def tensor_factors(self):
- """
- Return the tensor factors of this tensor product.
-
- EXAMPLES::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2])
- sage: F.rename("F")
- sage: G = CombinatorialFreeModule(ZZ, [3,4])
- sage: G.rename("G")
- sage: T = tensor([F, G]); T
- F # G
- sage: T.tensor_factors()
- (F, G)
- """
- return self._sets
-
- def _ascii_art_(self, term):
- """
- TESTS::
-
- sage: R = NonCommutativeSymmetricFunctions(QQ).R() # needs sage.combinat
- sage: Partitions.options(diagram_str="#", convention="french") # needs sage.combinat
- sage: s = ascii_art(tensor((R[1,2], R[3,1,2]))); s # needs sage.combinat
- R # R
- # ###
- ## #
- ##
-
- Check that the breakpoints are correct (:issue:`29202`)::
-
- sage: s._breakpoints # needs sage.combinat
- [6]
- """
- if hasattr(self, "_print_options"):
- symb = self._print_options['tensor_symbol']
- if symb is None:
- symb = tensor.symbol
- else:
+ else:
+ symb = tensor.symbol
+ return symb.join("%s" % module for module in self._sets)
+ # TODO: make this overridable by setting _name
+
+ def tensor_factors(self):
+ """
+ Return the tensor factors of this tensor product.
+
+ EXAMPLES::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2])
+ sage: F.rename("F")
+ sage: G = CombinatorialFreeModule(ZZ, [3,4])
+ sage: G.rename("G")
+ sage: T = tensor([F, G]); T
+ F # G
+ sage: T.tensor_factors()
+ (F, G)
+ """
+ return self._sets
+
+ def _ascii_art_(self, term):
+ """
+ TESTS::
+
+ sage: R = NonCommutativeSymmetricFunctions(QQ).R() # needs sage.combinat
+ sage: Partitions.options(diagram_str="#", convention="french") # needs sage.combinat
+ sage: s = ascii_art(tensor((R[1,2], R[3,1,2]))); s # needs sage.combinat
+ R # R
+ # ###
+ ## #
+ ##
+
+ Check that the breakpoints are correct (:issue:`29202`)::
+
+ sage: s._breakpoints # needs sage.combinat
+ [6]
+ """
+ if hasattr(self, "_print_options"):
+ symb = self._print_options['tensor_symbol']
+ if symb is None:
symb = tensor.symbol
- return ascii_art(*(module._ascii_art_term(t)
- for module, t in zip(self._sets, term)),
- sep=AsciiArt([symb], breakpoints=[len(symb)]))
-
- _ascii_art_term = _ascii_art_
-
- def _unicode_art_(self, term):
- """
- TESTS::
-
- sage: R = NonCommutativeSymmetricFunctions(QQ).R() # needs sage.combinat
- sage: Partitions.options(diagram_str="#", convention="french") # needs sage.combinat
- sage: s = unicode_art(tensor((R[1,2], R[3,1,2]))); s # needs sage.combinat
- R ⊗ R
- ┌┐ ┌┬┬┐
- ├┼┐ └┴┼┤
- └┴┘ ├┼┐
- └┴┘
-
- Check that the breakpoints are correct (:issue:`29202`)::
-
- sage: s._breakpoints # needs sage.combinat
- [7]
- """
- if hasattr(self, "_print_options"):
- symb = self._print_options['tensor_symbol']
- if symb is None:
- symb = tensor.unicode_symbol
- else:
+ else:
+ symb = tensor.symbol
+ return ascii_art(*(module._ascii_art_term(t)
+ for module, t in zip(self._sets, term)),
+ sep=AsciiArt([symb], breakpoints=[len(symb)]))
+
+ _ascii_art_term = _ascii_art_
+
+ def _unicode_art_(self, term):
+ """
+ TESTS::
+
+ sage: R = NonCommutativeSymmetricFunctions(QQ).R() # needs sage.combinat
+ sage: Partitions.options(diagram_str="#", convention="french") # needs sage.combinat
+ sage: s = unicode_art(tensor((R[1,2], R[3,1,2]))); s # needs sage.combinat
+ R ⊗ R
+ ┌┐ ┌┬┬┐
+ ├┼┐ └┴┼┤
+ └┴┘ ├┼┐
+ └┴┘
+
+ Check that the breakpoints are correct (:issue:`29202`)::
+
+ sage: s._breakpoints # needs sage.combinat
+ [7]
+ """
+ if hasattr(self, "_print_options"):
+ symb = self._print_options['tensor_symbol']
+ if symb is None:
symb = tensor.unicode_symbol
- return unicode_art(*(module._unicode_art_term(t)
- for module, t in zip(self._sets, term)),
- sep=UnicodeArt([symb], breakpoints=[len(symb)]))
-
- _unicode_art_term = _unicode_art_
-
- def _latex_(self):
- r"""
- TESTS::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2,3])
- sage: G = CombinatorialFreeModule(ZZ, [1,2,3,8])
- sage: F.rename("F")
- sage: G.rename("G")
- sage: latex(tensor([F, F, G])) # indirect doctest
- \text{\texttt{F}} \otimes \text{\texttt{F}} \otimes \text{\texttt{G}}
- sage: F._latex_ = lambda : "F"
- sage: G._latex_ = lambda : "G"
- sage: latex(tensor([F, F, G])) # indirect doctest
- F \otimes F \otimes G
- """
- from sage.misc.latex import latex
- symb = " \\otimes "
- return symb.join("%s" % latex(module) for module in self._sets)
-
- def _repr_term(self, term):
- """
- TESTS::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2,3], prefix="F")
- sage: G = CombinatorialFreeModule(ZZ, [1,2,3,4], prefix="G")
- sage: f = F.monomial(1) + 2 * F.monomial(2)
- sage: g = 2*G.monomial(3) + G.monomial(4)
- sage: tensor([f, g]) # indirect doctest
- 2*F[1] # G[3] + F[1] # G[4] + 4*F[2] # G[3] + 2*F[2] # G[4]
- """
- if hasattr(self, "_print_options"):
- symb = self._print_options['tensor_symbol']
- if symb is None:
- symb = tensor.symbol
- else:
+ else:
+ symb = tensor.unicode_symbol
+ return unicode_art(*(module._unicode_art_term(t)
+ for module, t in zip(self._sets, term)),
+ sep=UnicodeArt([symb], breakpoints=[len(symb)]))
+
+ _unicode_art_term = _unicode_art_
+
+ def _latex_(self):
+ r"""
+ TESTS::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2,3])
+ sage: G = CombinatorialFreeModule(ZZ, [1,2,3,8])
+ sage: F.rename("F")
+ sage: G.rename("G")
+ sage: latex(tensor([F, F, G])) # indirect doctest
+ \text{\texttt{F}} \otimes \text{\texttt{F}} \otimes \text{\texttt{G}}
+ sage: F._latex_ = lambda : "F"
+ sage: G._latex_ = lambda : "G"
+ sage: latex(tensor([F, F, G])) # indirect doctest
+ F \otimes F \otimes G
+ """
+ from sage.misc.latex import latex
+ symb = " \\otimes "
+ return symb.join("%s" % latex(module) for module in self._sets)
+
+ def _repr_term(self, term):
+ """
+ TESTS::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2,3], prefix="F")
+ sage: G = CombinatorialFreeModule(ZZ, [1,2,3,4], prefix="G")
+ sage: f = F.monomial(1) + 2 * F.monomial(2)
+ sage: g = 2*G.monomial(3) + G.monomial(4)
+ sage: tensor([f, g]) # indirect doctest
+ 2*F[1] # G[3] + F[1] # G[4] + 4*F[2] # G[3] + 2*F[2] # G[4]
+ """
+ if hasattr(self, "_print_options"):
+ symb = self._print_options['tensor_symbol']
+ if symb is None:
symb = tensor.symbol
- return symb.join(module._repr_term(t) for (module, t) in zip(self._sets, term))
-
- def _latex_term(self, term):
- r"""
- TESTS::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2,3], prefix='x')
- sage: G = CombinatorialFreeModule(ZZ, [1,2,3,4], prefix='y')
- sage: f = F.monomial(1) + 2 * F.monomial(2)
- sage: g = 2*G.monomial(3) + G.monomial(4)
- sage: latex(tensor([f, g])) # indirect doctest
- 2 x_{1} \otimes y_{3} + x_{1} \otimes y_{4} + 4 x_{2} \otimes y_{3} + 2 x_{2} \otimes y_{4}
- """
- symb = " \\otimes "
- return symb.join(module._latex_term(t) for (module, t) in zip(self._sets, term))
-
- @cached_method
- def tensor_constructor(self, modules):
- r"""
- INPUT:
-
- - ``modules`` -- a tuple `(F_1,\dots,F_n)` of
- free modules whose tensor product is self
-
- Returns the canonical multilinear morphism from
- `F_1 \times \dots \times F_n` to `F_1 \otimes \dots \otimes F_n`
-
- EXAMPLES::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2]); F.rename("F")
- sage: G = CombinatorialFreeModule(ZZ, [3,4]); G.rename("G")
- sage: H = CombinatorialFreeModule(ZZ, [5,6]); H.rename("H")
-
- sage: f = F.monomial(1) + 2*F.monomial(2)
- sage: g = 2*G.monomial(3) + G.monomial(4)
- sage: h = H.monomial(5) + H.monomial(6)
- sage: FG = tensor([F, G])
- sage: phi_fg = FG.tensor_constructor((F, G))
- sage: phi_fg(f, g)
- 2*B[1] # B[3] + B[1] # B[4] + 4*B[2] # B[3] + 2*B[2] # B[4]
-
- sage: FGH = tensor([F, G, H])
- sage: phi_fgh = FGH.tensor_constructor((F, G, H))
- sage: phi_fgh(f, g, h)
- 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5]
- + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6]
- + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
-
- sage: phi_fg_h = FGH.tensor_constructor((FG, H))
- sage: phi_fg_h(phi_fg(f, g), h)
- 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5]
- + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6]
- + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
- """
- assert (module in ModulesWithBasis(self.base_ring()) for module in modules)
- assert (tensor(modules) == self)
- # a list l such that l[i] is True if modules[i] is readily a tensor product
- is_tensor = [isinstance(module, CombinatorialFreeModule_Tensor) for module in modules]
- # the tensor_constructor, on basis elements
- result = self.monomial * CartesianProductWithFlattening(is_tensor)
- # TODO: make this into an element of Hom( A x B, C ) when those will exist
- for i in range(len(modules)):
- result = modules[i]._module_morphism(result, position=i,
- codomain=self)
- return result
-
- def _tensor_of_elements(self, elements):
- """
- Returns the tensor product of the specified elements.
- The result should be in ``self``.
-
- EXAMPLES::
-
- sage: F = CombinatorialFreeModule(ZZ, [1,2]); F.rename("F")
- sage: G = CombinatorialFreeModule(ZZ, [3,4]); G.rename("G")
- sage: H = CombinatorialFreeModule(ZZ, [5,6]); H.rename("H")
-
- sage: f = F.monomial(1) + 2 * F.monomial(2)
- sage: g = 2*G.monomial(3) + G.monomial(4)
- sage: h = H.monomial(5) + H.monomial(6)
-
- sage: GH = tensor([G, H])
- sage: gh = GH._tensor_of_elements([g, h]); gh
- 2*B[3] # B[5] + 2*B[3] # B[6] + B[4] # B[5] + B[4] # B[6]
-
- sage: FGH = tensor([F, G, H])
- sage: FGH._tensor_of_elements([f, g, h])
- 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5] + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6] + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
-
- sage: FGH._tensor_of_elements([f, gh])
- 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5] + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6] + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
- """
- return self.tensor_constructor(tuple(element.parent() for element in elements))(*elements)
-
- def _coerce_map_from_(self, R):
- """
- Return ``True`` if there is a coercion from ``R`` into ``self`` and
- ``False`` otherwise. The things that coerce into ``self`` are:
-
- - Anything with a coercion into ``self.base_ring()``.
-
- - A tensor algebra whose factors have a coercion into the
- corresponding factors of ``self``.
-
- TESTS::
-
- sage: C = CombinatorialFreeModule(ZZ, ZZ)
- sage: C2 = CombinatorialFreeModule(ZZ, NN)
- sage: M = C.module_morphism(lambda x: C2.monomial(abs(x)), codomain=C2)
- sage: M.register_as_coercion()
- sage: C2(C.basis()[3])
- B[3]
- sage: C2(C.basis()[3] + C.basis()[-3])
- 2*B[3]
- sage: S = C.tensor(C)
- sage: S2 = C2.tensor(C2)
- sage: S2.has_coerce_map_from(S)
- True
- sage: S.has_coerce_map_from(S2)
- False
- sage: S.an_element()
- 3*B[0] # B[-1] + 2*B[0] # B[0] + 2*B[0] # B[1]
- sage: S2(S.an_element())
- 2*B[0] # B[0] + 5*B[0] # B[1]
-
- ::
-
- sage: C = CombinatorialFreeModule(ZZ, Set([1,2]))
- sage: D = CombinatorialFreeModule(ZZ, Set([2,4]))
- sage: f = C.module_morphism(on_basis=lambda x: D.monomial(2*x), codomain=D)
- sage: f.register_as_coercion()
- sage: T = tensor((C,C))
- sage: p = D.an_element()
- sage: T(tensor((p,p)))
- Traceback (most recent call last):
- ...
- NotImplementedError
- sage: T = tensor((D,D))
- sage: p = C.an_element()
- sage: T(tensor((p,p)))
- 4*B[2] # B[2] + 4*B[2] # B[4] + 4*B[4] # B[2] + 4*B[4] # B[4]
- """
- if ((R in ModulesWithBasis(self.base_ring()).TensorProducts() or
- R in GradedAlgebrasWithBasis(self.base_ring()).SignedTensorProducts())
- and isinstance(R, CombinatorialFreeModule_Tensor)
- and len(R._sets) == len(self._sets)
- and all(self._sets[i].has_coerce_map_from(M)
- for i, M in enumerate(R._sets))):
- modules = R._sets
- vector_map = [self._sets[i]._internal_coerce_map_from(M)
- for i, M in enumerate(modules)]
- return R.module_morphism(lambda x: self._tensor_of_elements(
- [vector_map[i](M.monomial(x[i]))
- for i, M in enumerate(modules)]), codomain=self)
-
- return super()._coerce_map_from_(R)
+ else:
+ symb = tensor.symbol
+ return symb.join(module._repr_term(t) for (module, t) in zip(self._sets, term))
+
+ def _latex_term(self, term):
+ r"""
+ TESTS::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2,3], prefix='x')
+ sage: G = CombinatorialFreeModule(ZZ, [1,2,3,4], prefix='y')
+ sage: f = F.monomial(1) + 2 * F.monomial(2)
+ sage: g = 2*G.monomial(3) + G.monomial(4)
+ sage: latex(tensor([f, g])) # indirect doctest
+ 2 x_{1} \otimes y_{3} + x_{1} \otimes y_{4} + 4 x_{2} \otimes y_{3} + 2 x_{2} \otimes y_{4}
+ """
+ symb = " \\otimes "
+ return symb.join(module._latex_term(t) for (module, t) in zip(self._sets, term))
+
+ @cached_method
+ def tensor_constructor(self, modules):
+ r"""
+ INPUT:
+
+ - ``modules`` -- a tuple `(F_1,\dots,F_n)` of
+ free modules whose tensor product is self
+
+ Returns the canonical multilinear morphism from
+ `F_1 \times \dots \times F_n` to `F_1 \otimes \dots \otimes F_n`
+
+ EXAMPLES::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2]); F.rename("F")
+ sage: G = CombinatorialFreeModule(ZZ, [3,4]); G.rename("G")
+ sage: H = CombinatorialFreeModule(ZZ, [5,6]); H.rename("H")
+
+ sage: f = F.monomial(1) + 2*F.monomial(2)
+ sage: g = 2*G.monomial(3) + G.monomial(4)
+ sage: h = H.monomial(5) + H.monomial(6)
+ sage: FG = tensor([F, G])
+ sage: phi_fg = FG.tensor_constructor((F, G))
+ sage: phi_fg(f, g)
+ 2*B[1] # B[3] + B[1] # B[4] + 4*B[2] # B[3] + 2*B[2] # B[4]
+
+ sage: FGH = tensor([F, G, H])
+ sage: phi_fgh = FGH.tensor_constructor((F, G, H))
+ sage: phi_fgh(f, g, h)
+ 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5]
+ + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6]
+ + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
+
+ sage: phi_fg_h = FGH.tensor_constructor((FG, H))
+ sage: phi_fg_h(phi_fg(f, g), h)
+ 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5]
+ + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6]
+ + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
+ """
+ assert (module in ModulesWithBasis(self.base_ring()) for module in modules)
+ assert (tensor(modules) == self)
+ # a list l such that l[i] is True if modules[i] is readily a tensor product
+ is_tensor = [isinstance(module, CombinatorialFreeModule_Tensor) for module in modules]
+ # the tensor_constructor, on basis elements
+ result = self.monomial * CartesianProductWithFlattening(is_tensor)
+ # TODO: make this into an element of Hom( A x B, C ) when those will exist
+ for i in range(len(modules)):
+ result = modules[i]._module_morphism(result, position=i,
+ codomain=self)
+ return result
+
+ def _tensor_of_elements(self, elements):
+ """
+ Returns the tensor product of the specified elements.
+ The result should be in ``self``.
+
+ EXAMPLES::
+
+ sage: F = CombinatorialFreeModule(ZZ, [1,2]); F.rename("F")
+ sage: G = CombinatorialFreeModule(ZZ, [3,4]); G.rename("G")
+ sage: H = CombinatorialFreeModule(ZZ, [5,6]); H.rename("H")
+
+ sage: f = F.monomial(1) + 2 * F.monomial(2)
+ sage: g = 2*G.monomial(3) + G.monomial(4)
+ sage: h = H.monomial(5) + H.monomial(6)
+
+ sage: GH = tensor([G, H])
+ sage: gh = GH._tensor_of_elements([g, h]); gh
+ 2*B[3] # B[5] + 2*B[3] # B[6] + B[4] # B[5] + B[4] # B[6]
+
+ sage: FGH = tensor([F, G, H])
+ sage: FGH._tensor_of_elements([f, g, h])
+ 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5]
+ + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6]
+ + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
+
+ sage: FGH._tensor_of_elements([f, gh])
+ 2*B[1] # B[3] # B[5] + 2*B[1] # B[3] # B[6] + B[1] # B[4] # B[5]
+ + B[1] # B[4] # B[6] + 4*B[2] # B[3] # B[5] + 4*B[2] # B[3] # B[6]
+ + 2*B[2] # B[4] # B[5] + 2*B[2] # B[4] # B[6]
+ """
+ return self.tensor_constructor(tuple(element.parent() for element in elements))(*elements)
+
+ def _coerce_map_from_(self, R):
+ """
+ Return ``True`` if there is a coercion from ``R`` into ``self`` and
+ ``False`` otherwise. The things that coerce into ``self`` are:
+
+ - Anything with a coercion into ``self.base_ring()``.
+
+ - A tensor algebra whose factors have a coercion into the
+ corresponding factors of ``self``.
+
+ TESTS::
+
+ sage: C = CombinatorialFreeModule(ZZ, ZZ)
+ sage: C2 = CombinatorialFreeModule(ZZ, NN)
+ sage: M = C.module_morphism(lambda x: C2.monomial(abs(x)), codomain=C2)
+ sage: M.register_as_coercion()
+ sage: C2(C.basis()[3])
+ B[3]
+ sage: C2(C.basis()[3] + C.basis()[-3])
+ 2*B[3]
+ sage: S = C.tensor(C)
+ sage: S2 = C2.tensor(C2)
+ sage: S2.has_coerce_map_from(S)
+ True
+ sage: S.has_coerce_map_from(S2)
+ False
+ sage: S.an_element()
+ 3*B[0] # B[-1] + 2*B[0] # B[0] + 2*B[0] # B[1]
+ sage: S2(S.an_element())
+ 2*B[0] # B[0] + 5*B[0] # B[1]
+
+ ::
+
+ sage: C = CombinatorialFreeModule(ZZ, Set([1,2]))
+ sage: D = CombinatorialFreeModule(ZZ, Set([2,4]))
+ sage: f = C.module_morphism(on_basis=lambda x: D.monomial(2*x), codomain=D)
+ sage: f.register_as_coercion()
+ sage: T = tensor((C,C))
+ sage: p = D.an_element()
+ sage: T(tensor((p,p)))
+ Traceback (most recent call last):
+ ...
+ NotImplementedError
+ sage: T = tensor((D,D))
+ sage: p = C.an_element()
+ sage: T(tensor((p,p)))
+ 4*B[2] # B[2] + 4*B[2] # B[4] + 4*B[4] # B[2] + 4*B[4] # B[4]
+ """
+ if ((R in ModulesWithBasis(self.base_ring()).TensorProducts() or
+ R in GradedAlgebrasWithBasis(self.base_ring()).SignedTensorProducts())
+ and isinstance(R, CombinatorialFreeModule_Tensor)
+ and len(R._sets) == len(self._sets)
+ and all(self._sets[i].has_coerce_map_from(M)
+ for i, M in enumerate(R._sets))):
+ modules = R._sets
+ vector_map = [self._sets[i]._internal_coerce_map_from(M)
+ for i, M in enumerate(modules)]
+ return R.module_morphism(lambda x: self._tensor_of_elements(
+ [vector_map[i](M.monomial(x[i]))
+ for i, M in enumerate(modules)]), codomain=self)
+
+ return super()._coerce_map_from_(R)
class CartesianProductWithFlattening:
diff --git a/src/sage/combinat/free_prelie_algebra.py b/src/sage/combinat/free_prelie_algebra.py
index 88d54b1f443..5454c0ca0ee 100644
--- a/src/sage/combinat/free_prelie_algebra.py
+++ b/src/sage/combinat/free_prelie_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Free Pre-Lie Algebras
diff --git a/src/sage/combinat/fully_commutative_elements.py b/src/sage/combinat/fully_commutative_elements.py
index c6d072eb432..9da2ee91d46 100644
--- a/src/sage/combinat/fully_commutative_elements.py
+++ b/src/sage/combinat/fully_commutative_elements.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Fully commutative elements of Coxeter groups
diff --git a/src/sage/combinat/fully_packed_loop.py b/src/sage/combinat/fully_packed_loop.py
index 949ee9c6504..755865bc203 100644
--- a/src/sage/combinat/fully_packed_loop.py
+++ b/src/sage/combinat/fully_packed_loop.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Fully packed loops
diff --git a/src/sage/combinat/gelfand_tsetlin_patterns.py b/src/sage/combinat/gelfand_tsetlin_patterns.py
index 354c440c58b..ccb065167e1 100644
--- a/src/sage/combinat/gelfand_tsetlin_patterns.py
+++ b/src/sage/combinat/gelfand_tsetlin_patterns.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Gelfand-Tsetlin Patterns
diff --git a/src/sage/combinat/graph_path.py b/src/sage/combinat/graph_path.py
index 2fb255579dd..bf732904ab3 100644
--- a/src/sage/combinat/graph_path.py
+++ b/src/sage/combinat/graph_path.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Paths in Directed Acyclic Graphs
"""
diff --git a/src/sage/combinat/gray_codes.py b/src/sage/combinat/gray_codes.py
index e2508e0e01c..8572fc8b183 100644
--- a/src/sage/combinat/gray_codes.py
+++ b/src/sage/combinat/gray_codes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Gray codes
diff --git a/src/sage/combinat/grossman_larson_algebras.py b/src/sage/combinat/grossman_larson_algebras.py
index db2f1de5eca..6520f47e2a7 100644
--- a/src/sage/combinat/grossman_larson_algebras.py
+++ b/src/sage/combinat/grossman_larson_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Grossman-Larson Hopf Algebras
diff --git a/src/sage/combinat/growth.py b/src/sage/combinat/growth.py
index b940fec97b8..bf2ae12b401 100644
--- a/src/sage/combinat/growth.py
+++ b/src/sage/combinat/growth.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs
r"""
Growth diagrams and dual graded graphs
diff --git a/src/sage/combinat/hall_polynomial.py b/src/sage/combinat/hall_polynomial.py
index 9d2326e60f8..aa52259eaf0 100644
--- a/src/sage/combinat/hall_polynomial.py
+++ b/src/sage/combinat/hall_polynomial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Hall Polynomials
diff --git a/src/sage/combinat/hillman_grassl.py b/src/sage/combinat/hillman_grassl.py
index 5a85d4e48d3..1eddaffd9ce 100644
--- a/src/sage/combinat/hillman_grassl.py
+++ b/src/sage/combinat/hillman_grassl.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
The Hillman-Grassl correspondence
diff --git a/src/sage/combinat/integer_lists/__init__.py b/src/sage/combinat/integer_lists/__init__.py
index 4e0c59ff8a6..b0f381d27bf 100644
--- a/src/sage/combinat/integer_lists/__init__.py
+++ b/src/sage/combinat/integer_lists/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from .base import IntegerListsBackend, Envelope
from .lists import IntegerLists
from .invlex import IntegerListsLex
diff --git a/src/sage/combinat/integer_lists/base.pxd b/src/sage/combinat/integer_lists/base.pxd
index 3d373a64fe0..03af138ca01 100644
--- a/src/sage/combinat/integer_lists/base.pxd
+++ b/src/sage/combinat/integer_lists/base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef class Envelope():
cdef readonly sign
cdef f
diff --git a/src/sage/combinat/integer_lists/base.pyx b/src/sage/combinat/integer_lists/base.pyx
index 6da2125396e..0a463195426 100644
--- a/src/sage/combinat/integer_lists/base.pyx
+++ b/src/sage/combinat/integer_lists/base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumerated set of lists of integers with constraints: base classes
diff --git a/src/sage/combinat/integer_lists/invlex.pxd b/src/sage/combinat/integer_lists/invlex.pxd
index 143306b4448..087a4f1cc9d 100644
--- a/src/sage/combinat/integer_lists/invlex.pxd
+++ b/src/sage/combinat/integer_lists/invlex.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.combinat.integer_lists.base cimport IntegerListsBackend
cdef class IntegerListsBackend_invlex(IntegerListsBackend):
cdef public bint check
diff --git a/src/sage/combinat/integer_lists/invlex.pyx b/src/sage/combinat/integer_lists/invlex.pyx
index d8ab12b0a3d..b78c0a5353a 100644
--- a/src/sage/combinat/integer_lists/invlex.pyx
+++ b/src/sage/combinat/integer_lists/invlex.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumerated set of lists of integers with constraints, in inverse lexicographic order
diff --git a/src/sage/combinat/integer_lists/lists.py b/src/sage/combinat/integer_lists/lists.py
index 8e121461056..cc2661d38fc 100644
--- a/src/sage/combinat/integer_lists/lists.py
+++ b/src/sage/combinat/integer_lists/lists.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumerated set of lists of integers with constraints: front-end
diff --git a/src/sage/combinat/integer_lists/nn.py b/src/sage/combinat/integer_lists/nn.py
index 4329c6164d9..8788dbc6ca8 100644
--- a/src/sage/combinat/integer_lists/nn.py
+++ b/src/sage/combinat/integer_lists/nn.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.sets.family import Family
from sage.combinat.integer_lists import IntegerListsLex
from sage.rings.semirings.non_negative_integer_semiring import NN
diff --git a/src/sage/combinat/integer_matrices.py b/src/sage/combinat/integer_matrices.py
index 238d0ef4091..cefc635fbf0 100644
--- a/src/sage/combinat/integer_matrices.py
+++ b/src/sage/combinat/integer_matrices.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Counting, generating, and manipulating non-negative integer matrices
diff --git a/src/sage/combinat/integer_vector.py b/src/sage/combinat/integer_vector.py
index 61a3229e5d0..1da722d945c 100644
--- a/src/sage/combinat/integer_vector.py
+++ b/src/sage/combinat/integer_vector.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
(Non-negative) Integer vectors
diff --git a/src/sage/combinat/integer_vector_weighted.py b/src/sage/combinat/integer_vector_weighted.py
index 7540aca9a07..5b482f42939 100644
--- a/src/sage/combinat/integer_vector_weighted.py
+++ b/src/sage/combinat/integer_vector_weighted.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Weighted Integer Vectors
diff --git a/src/sage/combinat/integer_vectors_mod_permgroup.py b/src/sage/combinat/integer_vectors_mod_permgroup.py
index 7877fedee44..65b6def8d87 100644
--- a/src/sage/combinat/integer_vectors_mod_permgroup.py
+++ b/src/sage/combinat/integer_vectors_mod_permgroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups
r"""
Integer vectors modulo the action of a permutation group
diff --git a/src/sage/combinat/interval_posets.py b/src/sage/combinat/interval_posets.py
index bc0cada6c37..70f962f20ca 100644
--- a/src/sage/combinat/interval_posets.py
+++ b/src/sage/combinat/interval_posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Tamari Interval-posets
diff --git a/src/sage/combinat/k_tableau.py b/src/sage/combinat/k_tableau.py
index c7d58d17686..bbca259484e 100644
--- a/src/sage/combinat/k_tableau.py
+++ b/src/sage/combinat/k_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Strong and weak tableaux
diff --git a/src/sage/combinat/kazhdan_lusztig.py b/src/sage/combinat/kazhdan_lusztig.py
index 11e50379d1d..25c5447e32a 100644
--- a/src/sage/combinat/kazhdan_lusztig.py
+++ b/src/sage/combinat/kazhdan_lusztig.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Kazhdan-Lusztig Polynomials
diff --git a/src/sage/combinat/key_polynomial.py b/src/sage/combinat/key_polynomial.py
index 43db18cc72f..b565b471420 100644
--- a/src/sage/combinat/key_polynomial.py
+++ b/src/sage/combinat/key_polynomial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Key polynomials
diff --git a/src/sage/combinat/knutson_tao_puzzles.py b/src/sage/combinat/knutson_tao_puzzles.py
index 1c0215fa093..e5e76ccbb57 100644
--- a/src/sage/combinat/knutson_tao_puzzles.py
+++ b/src/sage/combinat/knutson_tao_puzzles.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Knutson-Tao Puzzles
diff --git a/src/sage/combinat/lr_tableau.py b/src/sage/combinat/lr_tableau.py
index a94f576a134..c424dbdbb67 100644
--- a/src/sage/combinat/lr_tableau.py
+++ b/src/sage/combinat/lr_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Littlewood-Richardson tableaux
diff --git a/src/sage/combinat/matrices/all.py b/src/sage/combinat/matrices/all.py
index 0f6adbb5355..cca0aef31ad 100644
--- a/src/sage/combinat/matrices/all.py
+++ b/src/sage/combinat/matrices/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Combinatorics on matrices
@@ -10,10 +11,14 @@
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
+from sage.combinat.matrices.all__sagemath_categories import *
+
from sage.misc.lazy_import import lazy_import
lazy_import('sage.combinat.matrices.latin',
['LatinSquare', 'LatinSquare_generator'])
-lazy_import('sage.combinat.matrices.dlxcpp', 'DLXCPP')
lazy_import('sage.combinat.matrices.hadamard_matrix',
['hadamard_matrix', 'hadamard_matrix_www'])
+
+del install_doc
+del lazy_import
diff --git a/src/sage/combinat/matrices/all__sagemath_categories.py b/src/sage/combinat/matrices/all__sagemath_categories.py
new file mode 100644
index 00000000000..b168b0b1127
--- /dev/null
+++ b/src/sage/combinat/matrices/all__sagemath_categories.py
@@ -0,0 +1,4 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.combinat.matrices.dlxcpp', 'DLXCPP')
+del lazy_import
diff --git a/src/sage/combinat/matrices/dancing_links.pyx b/src/sage/combinat/matrices/dancing_links.pyx
index 0ef6eed0026..e58974c4914 100644
--- a/src/sage/combinat/matrices/dancing_links.pyx
+++ b/src/sage/combinat/matrices/dancing_links.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
# distutils: language = c++
"""
Dancing Links internal pyx code
diff --git a/src/sage/combinat/matrices/dlxcpp.py b/src/sage/combinat/matrices/dlxcpp.py
index 3cdc3774d76..7c41db0a8f7 100644
--- a/src/sage/combinat/matrices/dlxcpp.py
+++ b/src/sage/combinat/matrices/dlxcpp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Dancing links C++ wrapper
"""
diff --git a/src/sage/combinat/matrices/hadamard_matrix.py b/src/sage/combinat/matrices/hadamard_matrix.py
index 14d6a30a8f5..7652da0a179 100644
--- a/src/sage/combinat/matrices/hadamard_matrix.py
+++ b/src/sage/combinat/matrices/hadamard_matrix.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.graphs sage.modules
r"""
Hadamard matrices
diff --git a/src/sage/combinat/matrices/latin.py b/src/sage/combinat/matrices/latin.py
index cba9aefa694..d70f6d2d55b 100644
--- a/src/sage/combinat/matrices/latin.py
+++ b/src/sage/combinat/matrices/latin.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups sage.modules
r"""
Latin Squares
diff --git a/src/sage/combinat/misc.py b/src/sage/combinat/misc.py
index 2a4341e8f4c..81a3b80c9c5 100644
--- a/src/sage/combinat/misc.py
+++ b/src/sage/combinat/misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Miscellaneous
"""
diff --git a/src/sage/combinat/multiset_partition_into_sets_ordered.py b/src/sage/combinat/multiset_partition_into_sets_ordered.py
index 967f6ad93af..0e688693f75 100755
--- a/src/sage/combinat/multiset_partition_into_sets_ordered.py
+++ b/src/sage/combinat/multiset_partition_into_sets_ordered.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Ordered Multiset Partitions into Sets and the Minimaj Crystal
diff --git a/src/sage/combinat/ncsf_qsym/all.py b/src/sage/combinat/ncsf_qsym/all.py
index db6cb1f065e..768eb014edf 100644
--- a/src/sage/combinat/ncsf_qsym/all.py
+++ b/src/sage/combinat/ncsf_qsym/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Non-commutative symmetric functions and quasi-symmetric functions
@@ -12,5 +13,10 @@
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
-from .qsym import QuasiSymmetricFunctions
-from .ncsf import NonCommutativeSymmetricFunctions
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.combinat.ncsf_qsym.qsym', 'QuasiSymmetricFunctions')
+lazy_import('sage.combinat.ncsf_qsym.ncsf', 'NonCommutativeSymmetricFunctions')
+
+del install_doc
+del lazy_import
diff --git a/src/sage/combinat/ncsf_qsym/combinatorics.py b/src/sage/combinat/ncsf_qsym/combinatorics.py
index cba0de3d45b..f53a782d82b 100644
--- a/src/sage/combinat/ncsf_qsym/combinatorics.py
+++ b/src/sage/combinat/ncsf_qsym/combinatorics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Common combinatorial tools
diff --git a/src/sage/combinat/ncsf_qsym/generic_basis_code.py b/src/sage/combinat/ncsf_qsym/generic_basis_code.py
index 4fe908d727c..a11f23cdf67 100644
--- a/src/sage/combinat/ncsf_qsym/generic_basis_code.py
+++ b/src/sage/combinat/ncsf_qsym/generic_basis_code.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Generic code for bases
diff --git a/src/sage/combinat/ncsf_qsym/ncsf.py b/src/sage/combinat/ncsf_qsym/ncsf.py
index db4492da607..d14f2720286 100644
--- a/src/sage/combinat/ncsf_qsym/ncsf.py
+++ b/src/sage/combinat/ncsf_qsym/ncsf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Non-Commutative Symmetric Functions
diff --git a/src/sage/combinat/ncsf_qsym/qsym.py b/src/sage/combinat/ncsf_qsym/qsym.py
index de940bda556..410399ddf58 100644
--- a/src/sage/combinat/ncsf_qsym/qsym.py
+++ b/src/sage/combinat/ncsf_qsym/qsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Quasisymmetric functions
diff --git a/src/sage/combinat/ncsf_qsym/tutorial.py b/src/sage/combinat/ncsf_qsym/tutorial.py
index 4b7f1d199ae..e4efe77d997 100644
--- a/src/sage/combinat/ncsf_qsym/tutorial.py
+++ b/src/sage/combinat/ncsf_qsym/tutorial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Introduction to Quasisymmetric Functions
diff --git a/src/sage/combinat/ncsym/all.py b/src/sage/combinat/ncsym/all.py
index 7a174e45ccf..fb16bc191ce 100644
--- a/src/sage/combinat/ncsym/all.py
+++ b/src/sage/combinat/ncsym/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Symmetric functions in non-commuting variables
@@ -11,5 +12,10 @@
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
-from .ncsym import SymmetricFunctionsNonCommutingVariables
-from .dual import SymmetricFunctionsNonCommutingVariablesDual
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.combinat.ncsym.ncsym', 'SymmetricFunctionsNonCommutingVariables')
+lazy_import('sage.combinat.ncsym.dual', 'SymmetricFunctionsNonCommutingVariablesDual')
+
+del install_doc
+del lazy_import
diff --git a/src/sage/combinat/ncsym/bases.py b/src/sage/combinat/ncsym/bases.py
index 466d1ad42e5..6fe3c6635ab 100644
--- a/src/sage/combinat/ncsym/bases.py
+++ b/src/sage/combinat/ncsym/bases.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bases for `NCSym`
diff --git a/src/sage/combinat/ncsym/dual.py b/src/sage/combinat/ncsym/dual.py
index 38ae7135882..db2b7350cb8 100644
--- a/src/sage/combinat/ncsym/dual.py
+++ b/src/sage/combinat/ncsym/dual.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Dual Symmetric Functions in Non-Commuting Variables
diff --git a/src/sage/combinat/ncsym/ncsym.py b/src/sage/combinat/ncsym/ncsym.py
index 8ebc0b899bd..5514ecd324f 100644
--- a/src/sage/combinat/ncsym/ncsym.py
+++ b/src/sage/combinat/ncsym/ncsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Symmetric Functions in Non-Commuting Variables
diff --git a/src/sage/combinat/necklace.py b/src/sage/combinat/necklace.py
index 54a3dc992f0..abba40c9186 100644
--- a/src/sage/combinat/necklace.py
+++ b/src/sage/combinat/necklace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Necklaces
diff --git a/src/sage/combinat/non_decreasing_parking_function.py b/src/sage/combinat/non_decreasing_parking_function.py
index 532b4bf8762..ec573aa6272 100644
--- a/src/sage/combinat/non_decreasing_parking_function.py
+++ b/src/sage/combinat/non_decreasing_parking_function.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Non-Decreasing Parking Functions
diff --git a/src/sage/combinat/nu_dyck_word.py b/src/sage/combinat/nu_dyck_word.py
index ddc54a03612..f47fb7c63ba 100644
--- a/src/sage/combinat/nu_dyck_word.py
+++ b/src/sage/combinat/nu_dyck_word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
`\nu`-Dyck Words
diff --git a/src/sage/combinat/nu_tamari_lattice.py b/src/sage/combinat/nu_tamari_lattice.py
index d28faf6c7ed..386a36a4c1b 100644
--- a/src/sage/combinat/nu_tamari_lattice.py
+++ b/src/sage/combinat/nu_tamari_lattice.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.combinat
r"""
`\nu`-Tamari lattice
diff --git a/src/sage/combinat/ordered_tree.py b/src/sage/combinat/ordered_tree.py
index e46e02fc971..d7b515e4f15 100644
--- a/src/sage/combinat/ordered_tree.py
+++ b/src/sage/combinat/ordered_tree.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Ordered Rooted Trees
diff --git a/src/sage/combinat/output.py b/src/sage/combinat/output.py
index 7f223921d7e..9f33b726dd1 100644
--- a/src/sage/combinat/output.py
+++ b/src/sage/combinat/output.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Output functions
diff --git a/src/sage/combinat/parallelogram_polyomino.py b/src/sage/combinat/parallelogram_polyomino.py
index 53d35bca831..d0c59f32bb1 100644
--- a/src/sage/combinat/parallelogram_polyomino.py
+++ b/src/sage/combinat/parallelogram_polyomino.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Parallelogram Polyominoes
diff --git a/src/sage/combinat/parking_functions.py b/src/sage/combinat/parking_functions.py
index fc677e47f90..436f402503a 100644
--- a/src/sage/combinat/parking_functions.py
+++ b/src/sage/combinat/parking_functions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Parking Functions
diff --git a/src/sage/combinat/partition.py b/src/sage/combinat/partition.py
index cb65aec8aec..f5c83e8bb3a 100644
--- a/src/sage/combinat/partition.py
+++ b/src/sage/combinat/partition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Integer partitions
diff --git a/src/sage/combinat/partition_algebra.py b/src/sage/combinat/partition_algebra.py
index d1d9db36979..586fce9d615 100644
--- a/src/sage/combinat/partition_algebra.py
+++ b/src/sage/combinat/partition_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Partition/Diagram Algebras
diff --git a/src/sage/combinat/partition_kleshchev.py b/src/sage/combinat/partition_kleshchev.py
index 44204aad33b..bcf454ad36e 100644
--- a/src/sage/combinat/partition_kleshchev.py
+++ b/src/sage/combinat/partition_kleshchev.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Kleshchev partitions
diff --git a/src/sage/combinat/partition_shifting_algebras.py b/src/sage/combinat/partition_shifting_algebras.py
index 90f1f10d59f..c32dad544af 100644
--- a/src/sage/combinat/partition_shifting_algebras.py
+++ b/src/sage/combinat/partition_shifting_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Partition Shifting Algebras
diff --git a/src/sage/combinat/partition_tuple.py b/src/sage/combinat/partition_tuple.py
index 182c0b8813d..c0eafc6c14d 100644
--- a/src/sage/combinat/partition_tuple.py
+++ b/src/sage/combinat/partition_tuple.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Partition tuples
diff --git a/src/sage/combinat/partitions.pyx b/src/sage/combinat/partitions.pyx
index c461797067c..fe4c5c3b65d 100644
--- a/src/sage/combinat/partitions.pyx
+++ b/src/sage/combinat/partitions.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Iterators over the partitions of an integer
diff --git a/src/sage/combinat/path_tableaux/all.py b/src/sage/combinat/path_tableaux/all.py
index 42a2e8ca4a5..38c8bbbc181 100644
--- a/src/sage/combinat/path_tableaux/all.py
+++ b/src/sage/combinat/path_tableaux/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Path tableaux
@@ -10,3 +11,4 @@
# install the docstring of this module to the containing package
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
+del install_doc
diff --git a/src/sage/combinat/path_tableaux/catalog.py b/src/sage/combinat/path_tableaux/catalog.py
index 0605c6da583..77cd5a33722 100644
--- a/src/sage/combinat/path_tableaux/catalog.py
+++ b/src/sage/combinat/path_tableaux/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Catalog of Path Tableaux
diff --git a/src/sage/combinat/path_tableaux/dyck_path.py b/src/sage/combinat/path_tableaux/dyck_path.py
index c3c24929e99..0286b65e827 100644
--- a/src/sage/combinat/path_tableaux/dyck_path.py
+++ b/src/sage/combinat/path_tableaux/dyck_path.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Dyck Paths
diff --git a/src/sage/combinat/path_tableaux/frieze.py b/src/sage/combinat/path_tableaux/frieze.py
index 7e667743e4a..63f0131b2d7 100644
--- a/src/sage/combinat/path_tableaux/frieze.py
+++ b/src/sage/combinat/path_tableaux/frieze.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Frieze Patterns
diff --git a/src/sage/combinat/path_tableaux/path_tableau.py b/src/sage/combinat/path_tableaux/path_tableau.py
index 66bec5fe5d2..afc2a7cfba6 100644
--- a/src/sage/combinat/path_tableaux/path_tableau.py
+++ b/src/sage/combinat/path_tableaux/path_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Path Tableaux
diff --git a/src/sage/combinat/path_tableaux/semistandard.py b/src/sage/combinat/path_tableaux/semistandard.py
index 040710d48f0..394b2ebede7 100644
--- a/src/sage/combinat/path_tableaux/semistandard.py
+++ b/src/sage/combinat/path_tableaux/semistandard.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Semistandard Tableaux
=====================
diff --git a/src/sage/combinat/perfect_matching.py b/src/sage/combinat/perfect_matching.py
index 84e481cb621..a1004d66429 100644
--- a/src/sage/combinat/perfect_matching.py
+++ b/src/sage/combinat/perfect_matching.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Perfect matchings
diff --git a/src/sage/combinat/permutation.py b/src/sage/combinat/permutation.py
index 3919d9866da..0a7b7f851ae 100644
--- a/src/sage/combinat/permutation.py
+++ b/src/sage/combinat/permutation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Permutations
diff --git a/src/sage/combinat/permutation_cython.pxd b/src/sage/combinat/permutation_cython.pxd
index 094dafc8ddc..45e190dc059 100644
--- a/src/sage/combinat/permutation_cython.pxd
+++ b/src/sage/combinat/permutation_cython.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from cpython.array cimport array
cdef void reset_swap(int n, int *c, int *o) noexcept
diff --git a/src/sage/combinat/permutation_cython.pyx b/src/sage/combinat/permutation_cython.pyx
index d16a0b175a9..38bfe1ec8a5 100644
--- a/src/sage/combinat/permutation_cython.pyx
+++ b/src/sage/combinat/permutation_cython.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Permutations (Cython file)
diff --git a/src/sage/combinat/plane_partition.py b/src/sage/combinat/plane_partition.py
index f4fe1286cef..58ddb02d616 100644
--- a/src/sage/combinat/plane_partition.py
+++ b/src/sage/combinat/plane_partition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Plane Partitions
diff --git a/src/sage/combinat/posets/all.py b/src/sage/combinat/posets/all.py
index f7f8bdcc7fc..f481f16e446 100644
--- a/src/sage/combinat/posets/all.py
+++ b/src/sage/combinat/posets/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Posets
@@ -36,8 +37,10 @@
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
-from .posets import Poset
+from sage.combinat.posets.posets import Poset
-from .lattices import LatticePoset, MeetSemilattice, JoinSemilattice
+from sage.combinat.posets.lattices import LatticePoset, MeetSemilattice, JoinSemilattice
-from .poset_examples import posets, Posets
+from sage.combinat.posets.poset_examples import posets, Posets
+
+del install_doc
diff --git a/src/sage/combinat/posets/all__sagemath_flint.py b/src/sage/combinat/posets/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/combinat/posets/cartesian_product.py b/src/sage/combinat/posets/cartesian_product.py
index 325789a6269..12322b39274 100644
--- a/src/sage/combinat/posets/cartesian_product.py
+++ b/src/sage/combinat/posets/cartesian_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Cartesian products of Posets
diff --git a/src/sage/combinat/posets/d_complete.py b/src/sage/combinat/posets/d_complete.py
index aa3c527ef8f..9d2a6ca2ae3 100644
--- a/src/sage/combinat/posets/d_complete.py
+++ b/src/sage/combinat/posets/d_complete.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.combinat sage.modules
r"""
D-Complete Posets
diff --git a/src/sage/combinat/posets/elements.py b/src/sage/combinat/posets/elements.py
index 5d033c5c26a..97de070ceb9 100644
--- a/src/sage/combinat/posets/elements.py
+++ b/src/sage/combinat/posets/elements.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.modules
r"""
Elements of posets, lattices, semilattices, etc.
diff --git a/src/sage/combinat/posets/forest.py b/src/sage/combinat/posets/forest.py
index f730b4147de..73b97c8d1f4 100644
--- a/src/sage/combinat/posets/forest.py
+++ b/src/sage/combinat/posets/forest.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Forest Posets
diff --git a/src/sage/combinat/posets/hasse_cython.pyx b/src/sage/combinat/posets/hasse_cython.pyx
index 2048febd192..f53b47a878c 100644
--- a/src/sage/combinat/posets/hasse_cython.pyx
+++ b/src/sage/combinat/posets/hasse_cython.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Some fast computations for finite posets
diff --git a/src/sage/combinat/posets/hasse_cython_flint.pyx b/src/sage/combinat/posets/hasse_cython_flint.pyx
index 5d2c5b967ae..79e1ccfaaed 100644
--- a/src/sage/combinat/posets/hasse_cython_flint.pyx
+++ b/src/sage/combinat/posets/hasse_cython_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# cython: binding=True
# sage.doctest: needs sage.libs.flint sage.graphs sage.modules
r"""
diff --git a/src/sage/combinat/posets/hasse_diagram.py b/src/sage/combinat/posets/hasse_diagram.py
index 3622c934234..d8d25a11fa5 100644
--- a/src/sage/combinat/posets/hasse_diagram.py
+++ b/src/sage/combinat/posets/hasse_diagram.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Hasse diagrams of posets
diff --git a/src/sage/combinat/posets/incidence_algebras.py b/src/sage/combinat/posets/incidence_algebras.py
index 3fc3f2a0b76..aef6d739669 100644
--- a/src/sage/combinat/posets/incidence_algebras.py
+++ b/src/sage/combinat/posets/incidence_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.modules
r"""
Incidence Algebras
diff --git a/src/sage/combinat/posets/lattices.py b/src/sage/combinat/posets/lattices.py
index b626b2eb81f..74fc21a48cc 100644
--- a/src/sage/combinat/posets/lattices.py
+++ b/src/sage/combinat/posets/lattices.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.modules
r"""
Finite lattices and semilattices
diff --git a/src/sage/combinat/posets/linear_extension_iterator.pyx b/src/sage/combinat/posets/linear_extension_iterator.pyx
index 142287d88c2..dbd927e8956 100644
--- a/src/sage/combinat/posets/linear_extension_iterator.pyx
+++ b/src/sage/combinat/posets/linear_extension_iterator.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Fast linear extension iterator
diff --git a/src/sage/combinat/posets/linear_extensions.py b/src/sage/combinat/posets/linear_extensions.py
index 640dff1e708..b47821257f9 100644
--- a/src/sage/combinat/posets/linear_extensions.py
+++ b/src/sage/combinat/posets/linear_extensions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Linear Extensions of Posets
diff --git a/src/sage/combinat/posets/mobile.py b/src/sage/combinat/posets/mobile.py
index 5e18f5c4856..3ae921afd97 100644
--- a/src/sage/combinat/posets/mobile.py
+++ b/src/sage/combinat/posets/mobile.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Mobile posets
"""
diff --git a/src/sage/combinat/posets/moebius_algebra.py b/src/sage/combinat/posets/moebius_algebra.py
index 5a8074c3272..8239cebda60 100644
--- a/src/sage/combinat/posets/moebius_algebra.py
+++ b/src/sage/combinat/posets/moebius_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.modules
r"""
Möbius Algebras
diff --git a/src/sage/combinat/posets/poset_examples.py b/src/sage/combinat/posets/poset_examples.py
index ae6887e5e89..0b9503cf32c 100644
--- a/src/sage/combinat/posets/poset_examples.py
+++ b/src/sage/combinat/posets/poset_examples.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.combinat sage.modules
r"""
Catalog of posets and lattices
diff --git a/src/sage/combinat/posets/posets.py b/src/sage/combinat/posets/posets.py
index bea6feab369..de8f9028545 100644
--- a/src/sage/combinat/posets/posets.py
+++ b/src/sage/combinat/posets/posets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs sage.modules
r"""
Finite posets
diff --git a/src/sage/combinat/q_analogues.py b/src/sage/combinat/q_analogues.py
index 561372ff2b0..1c6bb90ea46 100644
--- a/src/sage/combinat/q_analogues.py
+++ b/src/sage/combinat/q_analogues.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
`q`-Analogues
"""
diff --git a/src/sage/combinat/q_bernoulli.pyx b/src/sage/combinat/q_bernoulli.pyx
index 854a80190f3..ec22bcdcdd9 100644
--- a/src/sage/combinat/q_bernoulli.pyx
+++ b/src/sage/combinat/q_bernoulli.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
`q`-Bernoulli Numbers and Polynomials
"""
diff --git a/src/sage/combinat/quickref.py b/src/sage/combinat/quickref.py
index ee7d9ca8ec1..17ca1fd9d47 100644
--- a/src/sage/combinat/quickref.py
+++ b/src/sage/combinat/quickref.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Combinatorics quickref
diff --git a/src/sage/combinat/ranker.py b/src/sage/combinat/ranker.py
index d56dbd54f45..feb8409b6f4 100644
--- a/src/sage/combinat/ranker.py
+++ b/src/sage/combinat/ranker.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Rankers
"""
diff --git a/src/sage/combinat/recognizable_series.py b/src/sage/combinat/recognizable_series.py
index 8194e695d13..2f2f1c2b331 100644
--- a/src/sage/combinat/recognizable_series.py
+++ b/src/sage/combinat/recognizable_series.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Recognizable Series
diff --git a/src/sage/combinat/regular_sequence.py b/src/sage/combinat/regular_sequence.py
index 6822fc7dd3d..6dab274aa98 100644
--- a/src/sage/combinat/regular_sequence.py
+++ b/src/sage/combinat/regular_sequence.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules sage.symbolic
r"""
`k`-regular sequences
diff --git a/src/sage/combinat/restricted_growth.py b/src/sage/combinat/restricted_growth.py
index b638356e4db..37e33b3688c 100644
--- a/src/sage/combinat/restricted_growth.py
+++ b/src/sage/combinat/restricted_growth.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Restricted growth arrays
diff --git a/src/sage/combinat/ribbon.py b/src/sage/combinat/ribbon.py
index 6c662f505c7..557ed1aa9a6 100644
--- a/src/sage/combinat/ribbon.py
+++ b/src/sage/combinat/ribbon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Ribbons
"""
diff --git a/src/sage/combinat/ribbon_shaped_tableau.py b/src/sage/combinat/ribbon_shaped_tableau.py
index 84458d104f3..3effad089c1 100644
--- a/src/sage/combinat/ribbon_shaped_tableau.py
+++ b/src/sage/combinat/ribbon_shaped_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Ribbon Shaped Tableaux
"""
diff --git a/src/sage/combinat/ribbon_tableau.py b/src/sage/combinat/ribbon_tableau.py
index db82cbfd660..67d8485c315 100644
--- a/src/sage/combinat/ribbon_tableau.py
+++ b/src/sage/combinat/ribbon_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Ribbon Tableaux
"""
diff --git a/src/sage/combinat/rigged_configurations/all.py b/src/sage/combinat/rigged_configurations/all.py
index 36a10774a89..5c22fa880ba 100644
--- a/src/sage/combinat/rigged_configurations/all.py
+++ b/src/sage/combinat/rigged_configurations/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Rigged configurations
@@ -41,3 +42,5 @@
lazy_import('sage.combinat.rigged_configurations.rigged_configurations',
'RiggedConfigurations')
+del lazy_import
+del install_doc
diff --git a/src/sage/combinat/rigged_configurations/bij_abstract_class.py b/src/sage/combinat/rigged_configurations/bij_abstract_class.py
index 520ce241d57..5c553841531 100644
--- a/src/sage/combinat/rigged_configurations/bij_abstract_class.py
+++ b/src/sage/combinat/rigged_configurations/bij_abstract_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Abstract classes for the rigged configuration bijections
diff --git a/src/sage/combinat/rigged_configurations/bij_infinity.py b/src/sage/combinat/rigged_configurations/bij_infinity.py
index 0fd8ee7fdc9..03ad4f03aeb 100644
--- a/src/sage/combinat/rigged_configurations/bij_infinity.py
+++ b/src/sage/combinat/rigged_configurations/bij_infinity.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection between rigged configurations for `B(\infty)` and marginally large tableaux
diff --git a/src/sage/combinat/rigged_configurations/bij_type_A.py b/src/sage/combinat/rigged_configurations/bij_type_A.py
index 2a623f322da..6a5dbdb7e02 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_A.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_A.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `A_n^{(1)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_A2_dual.py b/src/sage/combinat/rigged_configurations/bij_type_A2_dual.py
index ceb6ad8f1b8..080b73e900d 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_A2_dual.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_A2_dual.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `A_{2n}^{(2)\dagger}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_A2_even.py b/src/sage/combinat/rigged_configurations/bij_type_A2_even.py
index 8fa552a1077..b28430bd836 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_A2_even.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_A2_even.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `A_{2n}^{(2)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_A2_odd.py b/src/sage/combinat/rigged_configurations/bij_type_A2_odd.py
index ea7862ef3ef..cbedbae3fe6 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_A2_odd.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_A2_odd.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `A_{2n-1}^{(2)}`.
diff --git a/src/sage/combinat/rigged_configurations/bij_type_B.py b/src/sage/combinat/rigged_configurations/bij_type_B.py
index 51fd8f198bc..46889635bd6 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_B.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_B.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `B_n^{(1)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_C.py b/src/sage/combinat/rigged_configurations/bij_type_C.py
index 9e0997e1479..182f178230a 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_C.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_C.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `C_n^{(1)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_D.py b/src/sage/combinat/rigged_configurations/bij_type_D.py
index ab9b41b89bd..9b102414dfd 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_D.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_D.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `D_n^{(1)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_D_tri.py b/src/sage/combinat/rigged_configurations/bij_type_D_tri.py
index b82ff955642..37770d2a07b 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_D_tri.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_D_tri.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `D_4^{(3)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_D_twisted.py b/src/sage/combinat/rigged_configurations/bij_type_D_twisted.py
index ce177ffb468..431e137223c 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_D_twisted.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_D_twisted.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `D_{n+1}^{(2)}`
diff --git a/src/sage/combinat/rigged_configurations/bij_type_E67.py b/src/sage/combinat/rigged_configurations/bij_type_E67.py
index af59d3048f5..7c14ca00739 100644
--- a/src/sage/combinat/rigged_configurations/bij_type_E67.py
+++ b/src/sage/combinat/rigged_configurations/bij_type_E67.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection classes for type `E_{6,7}^{(1)}`
diff --git a/src/sage/combinat/rigged_configurations/bijection.py b/src/sage/combinat/rigged_configurations/bijection.py
index 850270930a6..e236611bfd2 100644
--- a/src/sage/combinat/rigged_configurations/bijection.py
+++ b/src/sage/combinat/rigged_configurations/bijection.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Bijection between rigged configurations and KR tableaux
diff --git a/src/sage/combinat/rigged_configurations/kleber_tree.py b/src/sage/combinat/rigged_configurations/kleber_tree.py
index c3a2bbeaf0a..cebc4b277ea 100644
--- a/src/sage/combinat/rigged_configurations/kleber_tree.py
+++ b/src/sage/combinat/rigged_configurations/kleber_tree.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Kleber Trees
diff --git a/src/sage/combinat/rigged_configurations/kr_tableaux.py b/src/sage/combinat/rigged_configurations/kr_tableaux.py
index 8bdc1d275b9..7073cbb3a05 100644
--- a/src/sage/combinat/rigged_configurations/kr_tableaux.py
+++ b/src/sage/combinat/rigged_configurations/kr_tableaux.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Kirillov-Reshetikhin Tableaux
diff --git a/src/sage/combinat/rigged_configurations/rc_crystal.py b/src/sage/combinat/rigged_configurations/rc_crystal.py
index 171928862ef..8e171da5871 100644
--- a/src/sage/combinat/rigged_configurations/rc_crystal.py
+++ b/src/sage/combinat/rigged_configurations/rc_crystal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Crystal of Rigged Configurations
diff --git a/src/sage/combinat/rigged_configurations/rc_infinity.py b/src/sage/combinat/rigged_configurations/rc_infinity.py
index 5d5ec854771..d5dc63dfc49 100644
--- a/src/sage/combinat/rigged_configurations/rc_infinity.py
+++ b/src/sage/combinat/rigged_configurations/rc_infinity.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Rigged Configurations of `\mathcal{B}(\infty)`
diff --git a/src/sage/combinat/rigged_configurations/rigged_configuration_element.py b/src/sage/combinat/rigged_configurations/rigged_configuration_element.py
index 8e1e76ed41d..0f8572f04cf 100644
--- a/src/sage/combinat/rigged_configurations/rigged_configuration_element.py
+++ b/src/sage/combinat/rigged_configurations/rigged_configuration_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Rigged Configuration Elements
diff --git a/src/sage/combinat/rigged_configurations/rigged_configurations.py b/src/sage/combinat/rigged_configurations/rigged_configurations.py
index 33de9927c12..e55947bb1f3 100644
--- a/src/sage/combinat/rigged_configurations/rigged_configurations.py
+++ b/src/sage/combinat/rigged_configurations/rigged_configurations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Rigged Configurations
diff --git a/src/sage/combinat/rigged_configurations/rigged_partition.pxd b/src/sage/combinat/rigged_configurations/rigged_partition.pxd
index e99258f33b2..1da1c05cf64 100644
--- a/src/sage/combinat/rigged_configurations/rigged_partition.pxd
+++ b/src/sage/combinat/rigged_configurations/rigged_partition.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.structure.sage_object cimport SageObject
cdef class RiggedPartition(SageObject):
diff --git a/src/sage/combinat/rigged_configurations/rigged_partition.pyx b/src/sage/combinat/rigged_configurations/rigged_partition.pyx
index 97ff48d7918..77618dc2afc 100644
--- a/src/sage/combinat/rigged_configurations/rigged_partition.pyx
+++ b/src/sage/combinat/rigged_configurations/rigged_partition.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Rigged Partitions
diff --git a/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py b/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py
index a2ccd72e902..f78e8821dc1 100644
--- a/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py
+++ b/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Tensor Product of Kirillov-Reshetikhin Tableaux
diff --git a/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py b/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py
index 8db94443af2..ed33700bb28 100644
--- a/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py
+++ b/src/sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Tensor Product of Kirillov-Reshetikhin Tableaux Elements
diff --git a/src/sage/combinat/root_system/all.py b/src/sage/combinat/root_system/all.py
index 263a4d916d2..645b64640c4 100644
--- a/src/sage/combinat/root_system/all.py
+++ b/src/sage/combinat/root_system/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root Systems
@@ -121,12 +122,12 @@
from sage.misc.lazy_import import lazy_import
-from .cartan_type import CartanType
-from .dynkin_diagram import DynkinDiagram
-from .cartan_matrix import CartanMatrix
-from .coxeter_matrix import CoxeterMatrix
-from .coxeter_type import CoxeterType
-from .root_system import RootSystem, WeylDim
+from sage.combinat.root_system.cartan_type import CartanType
+lazy_import('sage.combinat.root_system.dynkin_diagram', 'DynkinDiagram')
+lazy_import('sage.combinat.root_system.cartan_matrix', 'CartanMatrix')
+lazy_import('sage.combinat.root_system.coxeter_matrix', 'CoxeterMatrix')
+from sage.combinat.root_system.coxeter_type import CoxeterType
+from sage.combinat.root_system.root_system import RootSystem, WeylDim
lazy_import('sage.combinat.root_system.weyl_group', ['WeylGroup',
'WeylGroupElement'])
lazy_import('sage.combinat.root_system.reflection_group_real',
@@ -136,7 +137,11 @@
lazy_import('sage.combinat.root_system.coxeter_group', 'CoxeterGroup')
lazy_import('sage.combinat.root_system.weyl_characters', ['WeylCharacterRing',
'WeightRing'])
-from .branching_rules import BranchingRule, branching_rule_from_plethysm, branching_rule
-
-lazy_import('sage.combinat.root_system.non_symmetric_macdonald_polynomials', 'NonSymmetricMacdonaldPolynomials')
-lazy_import('sage.combinat.root_system.integrable_representations', 'IntegrableRepresentation')
+from sage.combinat.root_system.branching_rules import BranchingRule, branching_rule_from_plethysm, branching_rule
+
+lazy_import('sage.combinat.root_system.non_symmetric_macdonald_polynomials',
+ 'NonSymmetricMacdonaldPolynomials')
+lazy_import('sage.combinat.root_system.integrable_representations',
+ 'IntegrableRepresentation')
+del lazy_import
+del install_doc
diff --git a/src/sage/combinat/root_system/all__sagemath_gap.py b/src/sage/combinat/root_system/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/combinat/root_system/ambient_space.py b/src/sage/combinat/root_system/ambient_space.py
index a8aa765ee5d..54b1461762b 100644
--- a/src/sage/combinat/root_system/ambient_space.py
+++ b/src/sage/combinat/root_system/ambient_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Ambient lattices and ambient spaces
"""
diff --git a/src/sage/combinat/root_system/associahedron.py b/src/sage/combinat/root_system/associahedron.py
index 448b1009036..8f111dbbf0c 100644
--- a/src/sage/combinat/root_system/associahedron.py
+++ b/src/sage/combinat/root_system/associahedron.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.geometry.polyhedron
r"""
Associahedron
diff --git a/src/sage/combinat/root_system/braid_move_calculator.py b/src/sage/combinat/root_system/braid_move_calculator.py
index 38931a00229..aa89a038084 100644
--- a/src/sage/combinat/root_system/braid_move_calculator.py
+++ b/src/sage/combinat/root_system/braid_move_calculator.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.gap
"""
Braid Move Calculator
diff --git a/src/sage/combinat/root_system/braid_orbit.pyx b/src/sage/combinat/root_system/braid_orbit.pyx
index 5107038df4c..e43a69d3cc0 100644
--- a/src/sage/combinat/root_system/braid_orbit.pyx
+++ b/src/sage/combinat/root_system/braid_orbit.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# cython: wraparound=False, boundscheck=False
"""
Braid Orbit
diff --git a/src/sage/combinat/root_system/branching_rules.py b/src/sage/combinat/root_system/branching_rules.py
index b2ace92a56d..25c1644e9f0 100644
--- a/src/sage/combinat/root_system/branching_rules.py
+++ b/src/sage/combinat/root_system/branching_rules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.gap
"""
Branching Rules
diff --git a/src/sage/combinat/root_system/cartan_matrix.py b/src/sage/combinat/root_system/cartan_matrix.py
index 23da5ab2e4b..e1d266159c3 100644
--- a/src/sage/combinat/root_system/cartan_matrix.py
+++ b/src/sage/combinat/root_system/cartan_matrix.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Cartan matrices
diff --git a/src/sage/combinat/root_system/cartan_type.py b/src/sage/combinat/root_system/cartan_type.py
index e4526d5f079..d8c79be478d 100644
--- a/src/sage/combinat/root_system/cartan_type.py
+++ b/src/sage/combinat/root_system/cartan_type.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Cartan types
diff --git a/src/sage/combinat/root_system/coxeter_group.py b/src/sage/combinat/root_system/coxeter_group.py
index 012daffdf87..b7b7deb7fe4 100644
--- a/src/sage/combinat/root_system/coxeter_group.py
+++ b/src/sage/combinat/root_system/coxeter_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Coxeter Groups
"""
diff --git a/src/sage/combinat/root_system/coxeter_matrix.py b/src/sage/combinat/root_system/coxeter_matrix.py
index 4ac8ea335ed..d4e97a18b49 100644
--- a/src/sage/combinat/root_system/coxeter_matrix.py
+++ b/src/sage/combinat/root_system/coxeter_matrix.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs
"""
Coxeter Matrices
diff --git a/src/sage/combinat/root_system/coxeter_type.py b/src/sage/combinat/root_system/coxeter_type.py
index 88a53e4bd98..fc4e0d824bf 100644
--- a/src/sage/combinat/root_system/coxeter_type.py
+++ b/src/sage/combinat/root_system/coxeter_type.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Coxeter Types
"""
diff --git a/src/sage/combinat/root_system/dynkin_diagram.py b/src/sage/combinat/root_system/dynkin_diagram.py
index f5aa29ba129..4f5ca0c1e11 100644
--- a/src/sage/combinat/root_system/dynkin_diagram.py
+++ b/src/sage/combinat/root_system/dynkin_diagram.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.graphs
"""
Dynkin diagrams
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 e81477653c2..f257dc7e455 100644
--- a/src/sage/combinat/root_system/extended_affine_weyl_group.py
+++ b/src/sage/combinat/root_system/extended_affine_weyl_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.gap
r"""
Extended Affine Weyl Groups
diff --git a/src/sage/combinat/root_system/fundamental_group.py b/src/sage/combinat/root_system/fundamental_group.py
index 8905471a5ab..2024231334e 100644
--- a/src/sage/combinat/root_system/fundamental_group.py
+++ b/src/sage/combinat/root_system/fundamental_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs sage.groups
r"""
Fundamental Group of an Extended Affine Weyl Group
diff --git a/src/sage/combinat/root_system/hecke_algebra_representation.py b/src/sage/combinat/root_system/hecke_algebra_representation.py
index 1dc8d16ad59..dea69183500 100644
--- a/src/sage/combinat/root_system/hecke_algebra_representation.py
+++ b/src/sage/combinat/root_system/hecke_algebra_representation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.gap sage.groups
r"""
Hecke algebra representations
diff --git a/src/sage/combinat/root_system/integrable_representations.py b/src/sage/combinat/root_system/integrable_representations.py
index a1cb764e19a..10cd1427782 100644
--- a/src/sage/combinat/root_system/integrable_representations.py
+++ b/src/sage/combinat/root_system/integrable_representations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs sage.modules
"""
Integrable Representations of Affine Lie Algebras
diff --git a/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py b/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py
index 34e7e0817f1..a4c211f12e4 100644
--- a/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py
+++ b/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs
r"""
Nonsymmetric Macdonald polynomials
diff --git a/src/sage/combinat/root_system/pieri_factors.py b/src/sage/combinat/root_system/pieri_factors.py
index 28b26d8bf6f..ee8e22e1f66 100644
--- a/src/sage/combinat/root_system/pieri_factors.py
+++ b/src/sage/combinat/root_system/pieri_factors.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.gap
r"""
Pieri Factors
diff --git a/src/sage/combinat/root_system/plot.py b/src/sage/combinat/root_system/plot.py
index 5d591febe43..4ace75da390 100644
--- a/src/sage/combinat/root_system/plot.py
+++ b/src/sage/combinat/root_system/plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.geometry.polyhedron sage.plot sage.symbolic
r"""
Tutorial: visualizing root systems
diff --git a/src/sage/combinat/root_system/reflection_group_c.pyx b/src/sage/combinat/root_system/reflection_group_c.pyx
index dbfc76282f8..0a5c4d6792a 100644
--- a/src/sage/combinat/root_system/reflection_group_c.pyx
+++ b/src/sage/combinat/root_system/reflection_group_c.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# cython: wraparound=False, boundscheck=False
# sage.doctest: needs sage.graphs
r"""
diff --git a/src/sage/combinat/root_system/reflection_group_complex.py b/src/sage/combinat/root_system/reflection_group_complex.py
index 0b80aa73a71..91405dfb630 100644
--- a/src/sage/combinat/root_system/reflection_group_complex.py
+++ b/src/sage/combinat/root_system/reflection_group_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: optional - gap3, needs sage.libs.gap
r"""
Finite complex reflection groups
diff --git a/src/sage/combinat/root_system/reflection_group_element.pxd b/src/sage/combinat/root_system/reflection_group_element.pxd
index 218dd6c2575..8c2e98cbb2a 100644
--- a/src/sage/combinat/root_system/reflection_group_element.pxd
+++ b/src/sage/combinat/root_system/reflection_group_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.groups.perm_gps.permgroup_element cimport PermutationGroupElement
cdef class ComplexReflectionGroupElement(PermutationGroupElement):
diff --git a/src/sage/combinat/root_system/reflection_group_element.pyx b/src/sage/combinat/root_system/reflection_group_element.pyx
index 3d81a84ff4b..42912520be8 100644
--- a/src/sage/combinat/root_system/reflection_group_element.pyx
+++ b/src/sage/combinat/root_system/reflection_group_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Reflection group elements
diff --git a/src/sage/combinat/root_system/reflection_group_real.py b/src/sage/combinat/root_system/reflection_group_real.py
index 8ae2acee1c8..7cdf6216596 100644
--- a/src/sage/combinat/root_system/reflection_group_real.py
+++ b/src/sage/combinat/root_system/reflection_group_real.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: optional - gap3
r"""
Finite real reflection groups
diff --git a/src/sage/combinat/root_system/root_lattice_realization_algebras.py b/src/sage/combinat/root_system/root_lattice_realization_algebras.py
index 30251e983a7..adac4a1090b 100644
--- a/src/sage/combinat/root_system/root_lattice_realization_algebras.py
+++ b/src/sage/combinat/root_system/root_lattice_realization_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Group algebras of root lattice realizations
"""
diff --git a/src/sage/combinat/root_system/root_lattice_realizations.py b/src/sage/combinat/root_system/root_lattice_realizations.py
index ea1f4d285b2..ea7a29e0d9c 100644
--- a/src/sage/combinat/root_system/root_lattice_realizations.py
+++ b/src/sage/combinat/root_system/root_lattice_realizations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root lattice realizations
"""
diff --git a/src/sage/combinat/root_system/root_space.py b/src/sage/combinat/root_system/root_space.py
index a375b3b8074..a6436855d98 100644
--- a/src/sage/combinat/root_system/root_space.py
+++ b/src/sage/combinat/root_system/root_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root lattices and root spaces
"""
diff --git a/src/sage/combinat/root_system/root_system.py b/src/sage/combinat/root_system/root_system.py
index c80cffbdb87..e3d5e0048bd 100644
--- a/src/sage/combinat/root_system/root_system.py
+++ b/src/sage/combinat/root_system/root_system.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Root systems
============
diff --git a/src/sage/combinat/root_system/type_A.py b/src/sage/combinat/root_system/type_A.py
index 48d1474c1f4..6f9ba424e59 100644
--- a/src/sage/combinat/root_system/type_A.py
+++ b/src/sage/combinat/root_system/type_A.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type A
"""
diff --git a/src/sage/combinat/root_system/type_A_affine.py b/src/sage/combinat/root_system/type_A_affine.py
index 57ed18afd01..cbd0b2798a4 100644
--- a/src/sage/combinat/root_system/type_A_affine.py
+++ b/src/sage/combinat/root_system/type_A_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type A affine
"""
diff --git a/src/sage/combinat/root_system/type_A_infinity.py b/src/sage/combinat/root_system/type_A_infinity.py
index 9e0f4711ccd..9b7a2c3a112 100644
--- a/src/sage/combinat/root_system/type_A_infinity.py
+++ b/src/sage/combinat/root_system/type_A_infinity.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type A infinity
"""
diff --git a/src/sage/combinat/root_system/type_B.py b/src/sage/combinat/root_system/type_B.py
index 8e9cb6e75a5..2e59dec208f 100644
--- a/src/sage/combinat/root_system/type_B.py
+++ b/src/sage/combinat/root_system/type_B.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type B
"""
diff --git a/src/sage/combinat/root_system/type_BC_affine.py b/src/sage/combinat/root_system/type_BC_affine.py
index 740dfa2e5f3..3dd5c47a511 100644
--- a/src/sage/combinat/root_system/type_BC_affine.py
+++ b/src/sage/combinat/root_system/type_BC_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type BC affine
"""
diff --git a/src/sage/combinat/root_system/type_B_affine.py b/src/sage/combinat/root_system/type_B_affine.py
index 047144f02d6..0f6a07310e6 100644
--- a/src/sage/combinat/root_system/type_B_affine.py
+++ b/src/sage/combinat/root_system/type_B_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type B affine
"""
diff --git a/src/sage/combinat/root_system/type_C.py b/src/sage/combinat/root_system/type_C.py
index 8c7ebce3359..fdd1426c107 100644
--- a/src/sage/combinat/root_system/type_C.py
+++ b/src/sage/combinat/root_system/type_C.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type C
"""
diff --git a/src/sage/combinat/root_system/type_C_affine.py b/src/sage/combinat/root_system/type_C_affine.py
index adaf5c77562..cdb2763f75b 100644
--- a/src/sage/combinat/root_system/type_C_affine.py
+++ b/src/sage/combinat/root_system/type_C_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type C affine
"""
diff --git a/src/sage/combinat/root_system/type_D.py b/src/sage/combinat/root_system/type_D.py
index 5f1469e48a8..b116f2e7979 100644
--- a/src/sage/combinat/root_system/type_D.py
+++ b/src/sage/combinat/root_system/type_D.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type D
"""
diff --git a/src/sage/combinat/root_system/type_D_affine.py b/src/sage/combinat/root_system/type_D_affine.py
index f77204e4a01..b33f999c56c 100644
--- a/src/sage/combinat/root_system/type_D_affine.py
+++ b/src/sage/combinat/root_system/type_D_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type D affine
"""
diff --git a/src/sage/combinat/root_system/type_E.py b/src/sage/combinat/root_system/type_E.py
index 22e81d52b34..1720211b977 100644
--- a/src/sage/combinat/root_system/type_E.py
+++ b/src/sage/combinat/root_system/type_E.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type E
"""
diff --git a/src/sage/combinat/root_system/type_E_affine.py b/src/sage/combinat/root_system/type_E_affine.py
index 3268d0603e5..47ae656d984 100644
--- a/src/sage/combinat/root_system/type_E_affine.py
+++ b/src/sage/combinat/root_system/type_E_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type E affine
"""
diff --git a/src/sage/combinat/root_system/type_F.py b/src/sage/combinat/root_system/type_F.py
index 5d699d31c5a..699bd011188 100644
--- a/src/sage/combinat/root_system/type_F.py
+++ b/src/sage/combinat/root_system/type_F.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type F
"""
diff --git a/src/sage/combinat/root_system/type_F_affine.py b/src/sage/combinat/root_system/type_F_affine.py
index 3d2dc8350ee..ee2ccfe3275 100644
--- a/src/sage/combinat/root_system/type_F_affine.py
+++ b/src/sage/combinat/root_system/type_F_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type F affine
"""
diff --git a/src/sage/combinat/root_system/type_G.py b/src/sage/combinat/root_system/type_G.py
index a2a1612f8df..bc4c065d715 100644
--- a/src/sage/combinat/root_system/type_G.py
+++ b/src/sage/combinat/root_system/type_G.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type G
"""
diff --git a/src/sage/combinat/root_system/type_G_affine.py b/src/sage/combinat/root_system/type_G_affine.py
index 582f7d9ed03..e7321b348c2 100644
--- a/src/sage/combinat/root_system/type_G_affine.py
+++ b/src/sage/combinat/root_system/type_G_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for (untwisted) type G affine
"""
diff --git a/src/sage/combinat/root_system/type_H.py b/src/sage/combinat/root_system/type_H.py
index 44f4b15db55..8ad752fb01a 100644
--- a/src/sage/combinat/root_system/type_H.py
+++ b/src/sage/combinat/root_system/type_H.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type H
"""
diff --git a/src/sage/combinat/root_system/type_I.py b/src/sage/combinat/root_system/type_I.py
index 76a24817bf9..66876b41e55 100644
--- a/src/sage/combinat/root_system/type_I.py
+++ b/src/sage/combinat/root_system/type_I.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type I
"""
diff --git a/src/sage/combinat/root_system/type_Q.py b/src/sage/combinat/root_system/type_Q.py
index b2aa3748e71..4184b396d75 100644
--- a/src/sage/combinat/root_system/type_Q.py
+++ b/src/sage/combinat/root_system/type_Q.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for type Q
"""
diff --git a/src/sage/combinat/root_system/type_affine.py b/src/sage/combinat/root_system/type_affine.py
index f903f40bf92..cf28cf89d8b 100644
--- a/src/sage/combinat/root_system/type_affine.py
+++ b/src/sage/combinat/root_system/type_affine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for affine Cartan types
"""
diff --git a/src/sage/combinat/root_system/type_dual.py b/src/sage/combinat/root_system/type_dual.py
index d7ec7e262a3..05d936adeb4 100644
--- a/src/sage/combinat/root_system/type_dual.py
+++ b/src/sage/combinat/root_system/type_dual.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for dual Cartan types
"""
diff --git a/src/sage/combinat/root_system/type_folded.py b/src/sage/combinat/root_system/type_folded.py
index 58f4911c361..b3be9273f5e 100644
--- a/src/sage/combinat/root_system/type_folded.py
+++ b/src/sage/combinat/root_system/type_folded.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Root system data for folded Cartan types
diff --git a/src/sage/combinat/root_system/type_marked.py b/src/sage/combinat/root_system/type_marked.py
index a9ca7d15a35..b2c54c37249 100644
--- a/src/sage/combinat/root_system/type_marked.py
+++ b/src/sage/combinat/root_system/type_marked.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for Cartan types with marked nodes
"""
diff --git a/src/sage/combinat/root_system/type_reducible.py b/src/sage/combinat/root_system/type_reducible.py
index 3b2e6bbedc4..b733a6e8189 100644
--- a/src/sage/combinat/root_system/type_reducible.py
+++ b/src/sage/combinat/root_system/type_reducible.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for reducible Cartan types
"""
diff --git a/src/sage/combinat/root_system/type_relabel.py b/src/sage/combinat/root_system/type_relabel.py
index d90e97cd375..c7032804dd4 100644
--- a/src/sage/combinat/root_system/type_relabel.py
+++ b/src/sage/combinat/root_system/type_relabel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for relabelled Cartan types
"""
diff --git a/src/sage/combinat/root_system/type_super_A.py b/src/sage/combinat/root_system/type_super_A.py
index c2717a572ff..fc93a52b8a4 100644
--- a/src/sage/combinat/root_system/type_super_A.py
+++ b/src/sage/combinat/root_system/type_super_A.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Root system data for super type A
"""
diff --git a/src/sage/combinat/root_system/weight_lattice_realizations.py b/src/sage/combinat/root_system/weight_lattice_realizations.py
index 82f076c2475..5fe021d55f9 100644
--- a/src/sage/combinat/root_system/weight_lattice_realizations.py
+++ b/src/sage/combinat/root_system/weight_lattice_realizations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Weight lattice realizations
"""
diff --git a/src/sage/combinat/root_system/weight_space.py b/src/sage/combinat/root_system/weight_space.py
index 8a5118714c7..2f8d71444d3 100644
--- a/src/sage/combinat/root_system/weight_space.py
+++ b/src/sage/combinat/root_system/weight_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Weight lattices and weight spaces
"""
diff --git a/src/sage/combinat/root_system/weyl_characters.py b/src/sage/combinat/root_system/weyl_characters.py
index a42929606b1..36fc6d23977 100644
--- a/src/sage/combinat/root_system/weyl_characters.py
+++ b/src/sage/combinat/root_system/weyl_characters.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs sage.groups sage.modules
"""
Weyl Character Rings
diff --git a/src/sage/combinat/root_system/weyl_group.py b/src/sage/combinat/root_system/weyl_group.py
index 2c8091e7e41..f51d63f9dd6 100644
--- a/src/sage/combinat/root_system/weyl_group.py
+++ b/src/sage/combinat/root_system/weyl_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.groups sage.modules
"""
Weyl Groups
diff --git a/src/sage/combinat/rooted_tree.py b/src/sage/combinat/rooted_tree.py
index 74aeeff0bba..5ad58e2d6d7 100644
--- a/src/sage/combinat/rooted_tree.py
+++ b/src/sage/combinat/rooted_tree.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Rooted (Unordered) Trees
diff --git a/src/sage/combinat/rsk.py b/src/sage/combinat/rsk.py
index 21557d306de..ee058c24f4d 100644
--- a/src/sage/combinat/rsk.py
+++ b/src/sage/combinat/rsk.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Robinson-Schensted-Knuth correspondence
diff --git a/src/sage/combinat/schubert_polynomial.py b/src/sage/combinat/schubert_polynomial.py
index 1fd435591de..8e6097c3d94 100644
--- a/src/sage/combinat/schubert_polynomial.py
+++ b/src/sage/combinat/schubert_polynomial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Schubert Polynomials
diff --git a/src/sage/combinat/set_partition.py b/src/sage/combinat/set_partition.py
index 0c22c6a2edc..a820cd9bd69 100644
--- a/src/sage/combinat/set_partition.py
+++ b/src/sage/combinat/set_partition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Set Partitions
diff --git a/src/sage/combinat/set_partition_iterator.pyx b/src/sage/combinat/set_partition_iterator.pyx
index ff7d2e7c6c3..66d2d829acc 100644
--- a/src/sage/combinat/set_partition_iterator.pyx
+++ b/src/sage/combinat/set_partition_iterator.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# cython: binding=True
r"""
Fast set partition iterators
diff --git a/src/sage/combinat/set_partition_ordered.py b/src/sage/combinat/set_partition_ordered.py
index 782b13df638..d5cc5c8f250 100644
--- a/src/sage/combinat/set_partition_ordered.py
+++ b/src/sage/combinat/set_partition_ordered.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Ordered Set Partitions
diff --git a/src/sage/combinat/sf/all.py b/src/sage/combinat/sf/all.py
index 00f8e4f2bdf..36b1fc6cf20 100644
--- a/src/sage/combinat/sf/all.py
+++ b/src/sage/combinat/sf/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Symmetric Functions
@@ -36,7 +37,7 @@
# In the long run, this will be the single entry point
# Nothing else will be exported
-lazy_import('sage.combinat.sf.sf', 'SymmetricFunctions')
+from sage.combinat.sf.sf import SymmetricFunctions
# Advanced stuff:
@@ -45,3 +46,5 @@
lazy_import('sage.combinat.sf.ns_macdonald', ['NonattackingFillings',
'AugmentedLatticeDiagramFilling',
'LatticeDiagram'])
+del lazy_import
+del install_doc
diff --git a/src/sage/combinat/sf/character.py b/src/sage/combinat/sf/character.py
index 6fd2490ff11..60881eaf63f 100644
--- a/src/sage/combinat/sf/character.py
+++ b/src/sage/combinat/sf/character.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Characters of the symmetric group as bases of the symmetric functions
diff --git a/src/sage/combinat/sf/classical.py b/src/sage/combinat/sf/classical.py
index 792272417a8..b8cb0b7b481 100644
--- a/src/sage/combinat/sf/classical.py
+++ b/src/sage/combinat/sf/classical.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Classical symmetric functions
diff --git a/src/sage/combinat/sf/dual.py b/src/sage/combinat/sf/dual.py
index aae10602f2d..edb13f5d681 100644
--- a/src/sage/combinat/sf/dual.py
+++ b/src/sage/combinat/sf/dual.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Generic dual bases symmetric functions
@@ -292,7 +293,7 @@ def basis_name(self):
Return the name of the basis of ``self``.
This is used for output and, for the classical bases of
- symmetric functions, to connect this basis with Symmetrica.
+ symmetric functions, to connect this basis with :ref:`Symmetrica `.
EXAMPLES::
diff --git a/src/sage/combinat/sf/elementary.py b/src/sage/combinat/sf/elementary.py
index f0942314323..1e6b080e4c1 100644
--- a/src/sage/combinat/sf/elementary.py
+++ b/src/sage/combinat/sf/elementary.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Elementary symmetric functions
diff --git a/src/sage/combinat/sf/hall_littlewood.py b/src/sage/combinat/sf/hall_littlewood.py
index 8d656533166..887600864e2 100644
--- a/src/sage/combinat/sf/hall_littlewood.py
+++ b/src/sage/combinat/sf/hall_littlewood.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Hall-Littlewood Polynomials
diff --git a/src/sage/combinat/sf/hecke.py b/src/sage/combinat/sf/hecke.py
index e0b7f965ba7..1c3793f2f5f 100644
--- a/src/sage/combinat/sf/hecke.py
+++ b/src/sage/combinat/sf/hecke.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Hecke Character Basis
diff --git a/src/sage/combinat/sf/homogeneous.py b/src/sage/combinat/sf/homogeneous.py
index 29cf294ea80..99e7185e8db 100644
--- a/src/sage/combinat/sf/homogeneous.py
+++ b/src/sage/combinat/sf/homogeneous.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Homogeneous symmetric functions
diff --git a/src/sage/combinat/sf/jack.py b/src/sage/combinat/sf/jack.py
index 8c62cfb08df..c47d2b29b64 100644
--- a/src/sage/combinat/sf/jack.py
+++ b/src/sage/combinat/sf/jack.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Jack Symmetric Functions
diff --git a/src/sage/combinat/sf/k_dual.py b/src/sage/combinat/sf/k_dual.py
index add64a28fdf..5dcb12701cc 100644
--- a/src/sage/combinat/sf/k_dual.py
+++ b/src/sage/combinat/sf/k_dual.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Quotient of symmetric function space by ideal generated by Hall-Littlewood symmetric functions
diff --git a/src/sage/combinat/sf/kfpoly.py b/src/sage/combinat/sf/kfpoly.py
index 09283745aa5..869d2169e32 100644
--- a/src/sage/combinat/sf/kfpoly.py
+++ b/src/sage/combinat/sf/kfpoly.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Kostka-Foulkes Polynomials
diff --git a/src/sage/combinat/sf/llt.py b/src/sage/combinat/sf/llt.py
index 05a4f50c92a..63019625fb4 100644
--- a/src/sage/combinat/sf/llt.py
+++ b/src/sage/combinat/sf/llt.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
LLT symmetric functions
diff --git a/src/sage/combinat/sf/macdonald.py b/src/sage/combinat/sf/macdonald.py
index c6021ac25de..7f1e2177ae7 100644
--- a/src/sage/combinat/sf/macdonald.py
+++ b/src/sage/combinat/sf/macdonald.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Macdonald Polynomials
diff --git a/src/sage/combinat/sf/monomial.py b/src/sage/combinat/sf/monomial.py
index 583008830af..594dffa7a54 100644
--- a/src/sage/combinat/sf/monomial.py
+++ b/src/sage/combinat/sf/monomial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Monomial symmetric functions
diff --git a/src/sage/combinat/sf/multiplicative.py b/src/sage/combinat/sf/multiplicative.py
index 7ff9797f81a..a11ff5d8b7e 100644
--- a/src/sage/combinat/sf/multiplicative.py
+++ b/src/sage/combinat/sf/multiplicative.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Multiplicative symmetric functions
diff --git a/src/sage/combinat/sf/new_kschur.py b/src/sage/combinat/sf/new_kschur.py
index 59ce50c74e2..97596200c96 100644
--- a/src/sage/combinat/sf/new_kschur.py
+++ b/src/sage/combinat/sf/new_kschur.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
`k`-Schur Functions
diff --git a/src/sage/combinat/sf/ns_macdonald.py b/src/sage/combinat/sf/ns_macdonald.py
index 582e2f99568..61443cc6865 100644
--- a/src/sage/combinat/sf/ns_macdonald.py
+++ b/src/sage/combinat/sf/ns_macdonald.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Non-symmetric Macdonald Polynomials
diff --git a/src/sage/combinat/sf/orthogonal.py b/src/sage/combinat/sf/orthogonal.py
index 3ab5f56debc..38017601031 100644
--- a/src/sage/combinat/sf/orthogonal.py
+++ b/src/sage/combinat/sf/orthogonal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Orthogonal Symmetric Functions
diff --git a/src/sage/combinat/sf/orthotriang.py b/src/sage/combinat/sf/orthotriang.py
index 17c636ce5ea..b5b325873ef 100644
--- a/src/sage/combinat/sf/orthotriang.py
+++ b/src/sage/combinat/sf/orthotriang.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Symmetric functions defined by orthogonality and triangularity
diff --git a/src/sage/combinat/sf/powersum.py b/src/sage/combinat/sf/powersum.py
index 9521eaccd32..049c18e48ad 100644
--- a/src/sage/combinat/sf/powersum.py
+++ b/src/sage/combinat/sf/powersum.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Power sum symmetric functions
diff --git a/src/sage/combinat/sf/schur.py b/src/sage/combinat/sf/schur.py
index 40e1de75812..c553fd411df 100644
--- a/src/sage/combinat/sf/schur.py
+++ b/src/sage/combinat/sf/schur.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Schur symmetric functions
diff --git a/src/sage/combinat/sf/sf.py b/src/sage/combinat/sf/sf.py
index cca184e91c3..99f8ab93aec 100644
--- a/src/sage/combinat/sf/sf.py
+++ b/src/sage/combinat/sf/sf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Symmetric functions, with their multiple realizations
diff --git a/src/sage/combinat/sf/sfa.py b/src/sage/combinat/sf/sfa.py
index d569b6ce1dd..56a32dea180 100644
--- a/src/sage/combinat/sf/sfa.py
+++ b/src/sage/combinat/sf/sfa.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Symmetric Functions
@@ -641,7 +642,8 @@ def corresponding_basis_over(self, R):
sage: Sym = SymmetricFunctions(P)
sage: mj = Sym.macdonald().J()
sage: mj.corresponding_basis_over(Integers(13)['q','t'])
- Symmetric Functions over Multivariate Polynomial Ring in q, t over Ring of integers modulo 13 in the Macdonald J basis
+ Symmetric Functions over Multivariate Polynomial Ring in q, t over
+ Ring of integers modulo 13 in the Macdonald J basis
TESTS:
diff --git a/src/sage/combinat/sf/symplectic.py b/src/sage/combinat/sf/symplectic.py
index f6db1782489..ed3c4459a28 100644
--- a/src/sage/combinat/sf/symplectic.py
+++ b/src/sage/combinat/sf/symplectic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Symplectic Symmetric Functions
diff --git a/src/sage/combinat/sf/witt.py b/src/sage/combinat/sf/witt.py
index 37a07f8139f..27fe3bcd6e2 100644
--- a/src/sage/combinat/sf/witt.py
+++ b/src/sage/combinat/sf/witt.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Witt symmetric functions
@@ -23,7 +24,6 @@
from sage.arith.misc import divisors
from sage.combinat.integer_lists.invlex import IntegerListsLex
from sage.combinat.partitions import ZS1_iterator
-from sage.matrix.constructor import matrix
from sage.misc.cachefunc import cached_method
diff --git a/src/sage/combinat/shard_order.py b/src/sage/combinat/shard_order.py
index d33bc2173f6..f995284fe07 100644
--- a/src/sage/combinat/shard_order.py
+++ b/src/sage/combinat/shard_order.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Shard intersection order
diff --git a/src/sage/combinat/shifted_primed_tableau.py b/src/sage/combinat/shifted_primed_tableau.py
index a05a8b0bee8..18b948c424d 100644
--- a/src/sage/combinat/shifted_primed_tableau.py
+++ b/src/sage/combinat/shifted_primed_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
"""
Shifted primed tableaux
diff --git a/src/sage/combinat/shuffle.py b/src/sage/combinat/shuffle.py
index 846a214e30d..72a73e731eb 100644
--- a/src/sage/combinat/shuffle.py
+++ b/src/sage/combinat/shuffle.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Shuffle product of iterables
diff --git a/src/sage/combinat/sidon_sets.py b/src/sage/combinat/sidon_sets.py
index 9ba6bdb5c71..7841a665d77 100644
--- a/src/sage/combinat/sidon_sets.py
+++ b/src/sage/combinat/sidon_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Sidon sets and their generalizations, Sidon `g`-sets
diff --git a/src/sage/combinat/similarity_class_type.py b/src/sage/combinat/similarity_class_type.py
index 64acd5696dc..8cba310930f 100644
--- a/src/sage/combinat/similarity_class_type.py
+++ b/src/sage/combinat/similarity_class_type.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Similarity class types of matrices with entries in a finite field
diff --git a/src/sage/combinat/sine_gordon.py b/src/sage/combinat/sine_gordon.py
index 209acd4486e..4514a5169d0 100644
--- a/src/sage/combinat/sine_gordon.py
+++ b/src/sage/combinat/sine_gordon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
sine-Gordon Y-system plotter
diff --git a/src/sage/combinat/six_vertex_model.py b/src/sage/combinat/six_vertex_model.py
index 11b3267eb61..f94444c529b 100644
--- a/src/sage/combinat/six_vertex_model.py
+++ b/src/sage/combinat/six_vertex_model.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Six Vertex Model
"""
diff --git a/src/sage/combinat/skew_partition.py b/src/sage/combinat/skew_partition.py
index 3337d6b2fb7..9b894d5abf8 100644
--- a/src/sage/combinat/skew_partition.py
+++ b/src/sage/combinat/skew_partition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Skew Partitions
diff --git a/src/sage/combinat/skew_tableau.py b/src/sage/combinat/skew_tableau.py
index a342e7005e8..e47cfe0c2eb 100644
--- a/src/sage/combinat/skew_tableau.py
+++ b/src/sage/combinat/skew_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Skew Tableaux
diff --git a/src/sage/combinat/sloane_functions.py b/src/sage/combinat/sloane_functions.py
index e9911d47506..643db7ca2a7 100644
--- a/src/sage/combinat/sloane_functions.py
+++ b/src/sage/combinat/sloane_functions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.libs.gap sage.libs.flint sage.libs.pari sage.modules
r"""
Functions that compute some of the sequences in Sloane's tables
@@ -859,7 +860,7 @@ def _eval(self, n):
sage: [sloane.A003418._eval(n) for n in range(1,11)]
[1, 2, 6, 12, 60, 60, 420, 840, 2520, 2520]
"""
- return arith.lcm([i for i in range(1, n+1)])
+ return arith.lcm(range(1, n + 1))
class A007318(SloaneSequence):
diff --git a/src/sage/combinat/specht_module.py b/src/sage/combinat/specht_module.py
index 127903829f7..fd93cf0bdf8 100644
--- a/src/sage/combinat/specht_module.py
+++ b/src/sage/combinat/specht_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.groups sage.modules
r"""
Specht Modules
diff --git a/src/sage/combinat/species/all.py b/src/sage/combinat/species/all.py
index 6bda0eab5db..bec54ab9161 100644
--- a/src/sage/combinat/species/all.py
+++ b/src/sage/combinat/species/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Combinatorial species
@@ -48,3 +49,4 @@
lazy_import("sage.combinat.species.recursive_species", "CombinatorialSpecies")
lazy_import("sage.combinat.species", "library", as_="species")
del lazy_import
+del install_doc
diff --git a/src/sage/combinat/species/characteristic_species.py b/src/sage/combinat/species/characteristic_species.py
index 37ce75abe28..1ef62596491 100644
--- a/src/sage/combinat/species/characteristic_species.py
+++ b/src/sage/combinat/species/characteristic_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Characteristic Species
"""
diff --git a/src/sage/combinat/species/composition_species.py b/src/sage/combinat/species/composition_species.py
index ccfe0141803..a11ae4b731c 100644
--- a/src/sage/combinat/species/composition_species.py
+++ b/src/sage/combinat/species/composition_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Composition species
"""
diff --git a/src/sage/combinat/species/cycle_species.py b/src/sage/combinat/species/cycle_species.py
index c808f6a0db1..9d27db8761e 100644
--- a/src/sage/combinat/species/cycle_species.py
+++ b/src/sage/combinat/species/cycle_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Cycle Species
"""
diff --git a/src/sage/combinat/species/empty_species.py b/src/sage/combinat/species/empty_species.py
index 5c4762cb34d..98c544d8c66 100644
--- a/src/sage/combinat/species/empty_species.py
+++ b/src/sage/combinat/species/empty_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Empty Species
"""
diff --git a/src/sage/combinat/species/functorial_composition_species.py b/src/sage/combinat/species/functorial_composition_species.py
index b327492a54a..c2f49c42e67 100644
--- a/src/sage/combinat/species/functorial_composition_species.py
+++ b/src/sage/combinat/species/functorial_composition_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Functorial composition species
"""
diff --git a/src/sage/combinat/species/generating_series.py b/src/sage/combinat/species/generating_series.py
index b7b208c3d87..d6d3ca62708 100644
--- a/src/sage/combinat/species/generating_series.py
+++ b/src/sage/combinat/species/generating_series.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Generating Series
diff --git a/src/sage/combinat/species/library.py b/src/sage/combinat/species/library.py
index c50a9fe75fa..8d6bb4679c9 100644
--- a/src/sage/combinat/species/library.py
+++ b/src/sage/combinat/species/library.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Examples of Combinatorial Species
"""
diff --git a/src/sage/combinat/species/linear_order_species.py b/src/sage/combinat/species/linear_order_species.py
index 0761dea576d..ca63ba6db40 100644
--- a/src/sage/combinat/species/linear_order_species.py
+++ b/src/sage/combinat/species/linear_order_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Linear-order Species
"""
diff --git a/src/sage/combinat/species/misc.py b/src/sage/combinat/species/misc.py
index 12a9b2c8f70..2cf4ecee33e 100644
--- a/src/sage/combinat/species/misc.py
+++ b/src/sage/combinat/species/misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.groups
"""
Miscellaneous Functions
diff --git a/src/sage/combinat/species/partition_species.py b/src/sage/combinat/species/partition_species.py
index dea38378a7a..414c2717c34 100644
--- a/src/sage/combinat/species/partition_species.py
+++ b/src/sage/combinat/species/partition_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.libs.flint
"""
Partition Species
@@ -182,7 +183,7 @@ def _structures(self, structure_class, labels):
yield structure_class(self, labels, [])
return
- u = [i for i in reversed(range(1, n + 1))]
+ u = list(range(n, 0, -1))
s0 = u.pop()
# Reconstruct the set partitions from
diff --git a/src/sage/combinat/species/permutation_species.py b/src/sage/combinat/species/permutation_species.py
index eebcc2cddce..8acc9d49a79 100644
--- a/src/sage/combinat/species/permutation_species.py
+++ b/src/sage/combinat/species/permutation_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.groups sage.libs.flint
"""
Permutation species
diff --git a/src/sage/combinat/species/product_species.py b/src/sage/combinat/species/product_species.py
index 90209e64776..e0ef889faa1 100644
--- a/src/sage/combinat/species/product_species.py
+++ b/src/sage/combinat/species/product_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Product species
"""
diff --git a/src/sage/combinat/species/recursive_species.py b/src/sage/combinat/species/recursive_species.py
index 8eaabf0d2a8..c35e7843b2c 100644
--- a/src/sage/combinat/species/recursive_species.py
+++ b/src/sage/combinat/species/recursive_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Recursive Species
"""
diff --git a/src/sage/combinat/species/set_species.py b/src/sage/combinat/species/set_species.py
index 94aa893cf46..1d837ba723b 100644
--- a/src/sage/combinat/species/set_species.py
+++ b/src/sage/combinat/species/set_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Set Species
"""
diff --git a/src/sage/combinat/species/species.py b/src/sage/combinat/species/species.py
index 705dbd22494..af092883c79 100644
--- a/src/sage/combinat/species/species.py
+++ b/src/sage/combinat/species/species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Combinatorial Species
diff --git a/src/sage/combinat/species/structure.py b/src/sage/combinat/species/structure.py
index b3003ed0f13..6fd7396888b 100644
--- a/src/sage/combinat/species/structure.py
+++ b/src/sage/combinat/species/structure.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Species structures
diff --git a/src/sage/combinat/species/subset_species.py b/src/sage/combinat/species/subset_species.py
index 2e7a6697e29..fff66dd3f63 100644
--- a/src/sage/combinat/species/subset_species.py
+++ b/src/sage/combinat/species/subset_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Subset Species
"""
diff --git a/src/sage/combinat/species/sum_species.py b/src/sage/combinat/species/sum_species.py
index b3ff129dc55..ff3ebbe8f94 100644
--- a/src/sage/combinat/species/sum_species.py
+++ b/src/sage/combinat/species/sum_species.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Sum species
"""
diff --git a/src/sage/combinat/subset.py b/src/sage/combinat/subset.py
index 822420d6514..cc485a9ee8f 100644
--- a/src/sage/combinat/subset.py
+++ b/src/sage/combinat/subset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subsets
@@ -741,7 +742,8 @@ def last(self):
if self._k > self._s.cardinality():
raise EmptySetError
- return self.element_class([i for i in itertools.islice(reversed(self._s), int(self._k))])
+ return self.element_class(list(itertools.islice(reversed(self._s),
+ int(self._k))))
def _fast_iterator(self):
r"""
diff --git a/src/sage/combinat/subsets_hereditary.py b/src/sage/combinat/subsets_hereditary.py
index 33b576e3cf1..12f62cd64ce 100644
--- a/src/sage/combinat/subsets_hereditary.py
+++ b/src/sage/combinat/subsets_hereditary.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subsets satisfying a hereditary property
"""
diff --git a/src/sage/combinat/subsets_pairwise.py b/src/sage/combinat/subsets_pairwise.py
index ed5613157f2..9f207f5cc4d 100644
--- a/src/sage/combinat/subsets_pairwise.py
+++ b/src/sage/combinat/subsets_pairwise.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subsets whose elements satisfy a predicate pairwise
"""
diff --git a/src/sage/combinat/subword.py b/src/sage/combinat/subword.py
index e5a9afcb804..dcf22a70a5a 100644
--- a/src/sage/combinat/subword.py
+++ b/src/sage/combinat/subword.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Subwords
diff --git a/src/sage/combinat/subword_complex.py b/src/sage/combinat/subword_complex.py
index 0439d7f72f0..314fad7f9a2 100644
--- a/src/sage/combinat/subword_complex.py
+++ b/src/sage/combinat/subword_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.graphs sage.modules
r"""
Subword complex
@@ -1854,8 +1855,8 @@ def cover_relations(self, label=False):
"""
N = len(self.group().long_element(as_word=True))
F = self.greedy_facet(side="positive")
- Fs = set([F])
- seen = set([F])
+ Fs = {F}
+ seen = {F}
covers = []
while Fs:
F = Fs.pop()
@@ -1895,7 +1896,7 @@ def increasing_flip_graph(self, label=True):
from sage.graphs.digraph import DiGraph
return DiGraph(self.cover_relations(label=label))
- def interval(self, I, J):
+ def interval(self, I, J) -> set:
"""
Return the interval [I,J] in the increasing flip graph subword complex.
@@ -1924,7 +1925,7 @@ def interval(self, I, J):
"""
G = self.increasing_flip_graph()
paths = G.all_paths(I, J)
- return set(K for path in paths for K in path)
+ return {K for path in paths for K in path}
def increasing_flip_poset(self):
"""
@@ -2125,8 +2126,8 @@ def _greedy_flip_algorithm(Q, w):
flip_to_ancestors.append(j)
next_index = i + 1
has_new_child = True
- facet_list.append([x for x in F])
- extended_root_conf_indices_list.append([x for x in R])
+ facet_list.append(list(F))
+ extended_root_conf_indices_list.append(list(R))
if not has_new_child:
i = flip_to_ancestors.pop()
if i != -1:
diff --git a/src/sage/combinat/subword_complex_c.pyx b/src/sage/combinat/subword_complex_c.pyx
index 5b155efda75..6a015a14791 100644
--- a/src/sage/combinat/subword_complex_c.pyx
+++ b/src/sage/combinat/subword_complex_c.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.modules
cpdef int _flip_c(W, set positions, list extended_root_conf_indices,
diff --git a/src/sage/combinat/super_tableau.py b/src/sage/combinat/super_tableau.py
index ffcdb0fc374..199841b1117 100644
--- a/src/sage/combinat/super_tableau.py
+++ b/src/sage/combinat/super_tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Super Tableaux
diff --git a/src/sage/combinat/superpartition.py b/src/sage/combinat/superpartition.py
index a2e77f8a5b1..8a22d17c089 100644
--- a/src/sage/combinat/superpartition.py
+++ b/src/sage/combinat/superpartition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Super Partitions
@@ -691,7 +692,7 @@ def add_horizontal_border_strip_star(self, h) -> list:
# TODO: Check that this is not supposed to be
# a tuple of size 1
+ [(i) for i in circ_list if row_changed[i[0]] == 0]]
- if len(set([k for (j, k) in new_sp[1]])) == len(new_sp[1]):
+ if len({k for j, k in new_sp[1]}) == len(new_sp[1]):
out += [SuperPartition.from_circled_diagram(*new_sp)]
return out
diff --git a/src/sage/combinat/symmetric_group_algebra.py b/src/sage/combinat/symmetric_group_algebra.py
index b0214063e3b..9d1a436656d 100644
--- a/src/sage/combinat/symmetric_group_algebra.py
+++ b/src/sage/combinat/symmetric_group_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules sage.groups
r"""
Symmetric Group Algebra
diff --git a/src/sage/combinat/symmetric_group_representations.py b/src/sage/combinat/symmetric_group_representations.py
index d95317335ab..50f5c0d2ada 100644
--- a/src/sage/combinat/symmetric_group_representations.py
+++ b/src/sage/combinat/symmetric_group_representations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules sage.groups
r"""
Representations of the Symmetric Group
diff --git a/src/sage/combinat/t_sequences.py b/src/sage/combinat/t_sequences.py
index 7f0e8492ca4..8e9c8111818 100644
--- a/src/sage/combinat/t_sequences.py
+++ b/src/sage/combinat/t_sequences.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
T-sequences
diff --git a/src/sage/combinat/tableau.py b/src/sage/combinat/tableau.py
index bb1aeaf28be..c5c8adb78d3 100644
--- a/src/sage/combinat/tableau.py
+++ b/src/sage/combinat/tableau.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Tableaux
diff --git a/src/sage/combinat/tableau_residues.py b/src/sage/combinat/tableau_residues.py
index ae3f65e7196..a1f79ee4ad2 100644
--- a/src/sage/combinat/tableau_residues.py
+++ b/src/sage/combinat/tableau_residues.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Residue sequences of tableaux
@@ -340,7 +341,7 @@ def __getitem__(self, k):
except (IndexError, KeyError):
raise IndexError('k must be in the range 1, 2, ..., {}'.format(len(self)))
- def residues(self):
+ def residues(self) -> list:
r"""
Return a list of the residue sequence.
@@ -350,7 +351,7 @@ def residues(self):
sage: ResidueSequence(3,(0,0,1),[0,0,1,1,2,2,3,3]).residues()
[0, 0, 1, 1, 2, 2, 0, 0]
"""
- return [r for r in self]
+ return list(self)
def restrict(self, m):
r"""
diff --git a/src/sage/combinat/tableau_tuple.py b/src/sage/combinat/tableau_tuple.py
index 1568175325e..77d6a68d9b9 100644
--- a/src/sage/combinat/tableau_tuple.py
+++ b/src/sage/combinat/tableau_tuple.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
TableauTuples
@@ -597,7 +598,7 @@ def components(self):
6 7
8 9
"""
- return [t for t in self]
+ return list(self)
def to_list(self):
"""
@@ -2371,9 +2372,8 @@ def list(self):
([[3, 5], [4]], [[1, 2]])]
"""
if self.is_finite():
- return [y for y in self]
- else:
- raise NotImplementedError('this is an infinite set of tableaux')
+ return list(self)
+ raise NotImplementedError('this is an infinite set of tableaux')
class TableauTuples_all(TableauTuples):
@@ -2666,7 +2666,7 @@ def an_element(self):
if self.size() == 0:
return self.element_class(self, [[] for _ in range(self.level())])
- tab = [[[m for m in range(1, self.size() + 1)]]]
+ tab = [[list(range(1, self.size() + 1))]]
for _ in range(self.level() - 1):
tab.append([])
return self.element_class(self, tab)
diff --git a/src/sage/combinat/tamari_lattices.py b/src/sage/combinat/tamari_lattices.py
index b84b587e1b3..87bef01f18f 100644
--- a/src/sage/combinat/tamari_lattices.py
+++ b/src/sage/combinat/tamari_lattices.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.modules
r"""
Generalized Tamari lattices
@@ -92,11 +93,11 @@ def paths_in_triangle(i, j, a, b) -> list[tuple[int, ...]]:
return [tuple([1] * j)]
if (j - 1) * a >= (i) * b:
- result = [u + tuple([1]) for u in paths_in_triangle(i, j - 1, a, b)]
- result += [u + tuple([0]) for u in paths_in_triangle(i - 1, j, a, b)]
+ result = [u + (1,) for u in paths_in_triangle(i, j - 1, a, b)]
+ result += [u + (0,) for u in paths_in_triangle(i - 1, j, a, b)]
return result
- return [u + tuple([0]) for u in paths_in_triangle(i - 1, j, a, b)]
+ return [u + (0,) for u in paths_in_triangle(i - 1, j, a, b)]
def swap(p, i, m=1) -> tuple[int, ...]:
@@ -156,7 +157,7 @@ def swap(p, i, m=1) -> tuple[int, ...]:
height -= 1
if height <= 0:
found = True
- q = [k for k in p]
+ q = list(p)
for k in range(i, j):
q[k] = p[k + 1]
q[j] = 0
diff --git a/src/sage/combinat/tiling.py b/src/sage/combinat/tiling.py
index a6284b83e1b..16f46e9d845 100644
--- a/src/sage/combinat/tiling.py
+++ b/src/sage/combinat/tiling.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Tiling Solver
@@ -991,12 +992,13 @@ def canonical_isometric_copies(self, orientation_preserving=True,
"""
if mod_box_isometries:
L = ncube_isometry_group_cosets(self._dimension, orientation_preserving)
- P_cosets = set(frozenset((m * self).canonical() for m in coset) for coset in L)
+ P_cosets = {frozenset((m * self).canonical() for m in coset)
+ for coset in L}
P_cosets_representents = [min(s, key=lambda a: a.sorted_list()) for s in P_cosets]
- return sorted(P_cosets_representents, key=lambda a:a.sorted_list())
+ return sorted(P_cosets_representents, key=lambda a: a.sorted_list())
else:
L = ncube_isometry_group(self._dimension, orientation_preserving)
- P_images = set((m * self).canonical() for m in L)
+ P_images = {(m * self).canonical() for m in L}
return sorted(P_images, key=lambda a: a.sorted_list())
def translated_copies(self, box):
@@ -1222,8 +1224,8 @@ def isometric_copies(self, box, orientation_preserving=True,
raise ValueError("Dimension of input box must match the "
"dimension of the polyomino")
box_min_coords, box_max_coords = box.bounding_box()
- if mod_box_isometries and len(set(b-a for (a,b) in zip(box_min_coords,
- box_max_coords))) < box._dimension:
+ if mod_box_isometries and len({b - a for a, b in zip(box_min_coords,
+ box_max_coords)}) < box._dimension:
raise NotImplementedError("The code below assumes that the"
" sizes of the box (={}) are all distinct when"
" argument `mod_box_isometries` is True.".format(box))
@@ -1267,8 +1269,8 @@ def isometric_copies_intersection(self, box, orientation_preserving=True):
"""
all_distinct_cano = self.canonical_isometric_copies(orientation_preserving,
mod_box_isometries=False)
- return set([t for cano in all_distinct_cano
- for t in cano.translated_copies_intersection(box=box)])
+ return {t for cano in all_distinct_cano
+ for t in cano.translated_copies_intersection(box=box)}
def neighbor_edges(self):
r"""
@@ -1766,11 +1768,10 @@ def coord_to_int_dict(self):
((2, 0), 4), ((2, 1), 5)]
"""
if self._reusable:
- return dict((c, i) for i, c in enumerate(self.space()))
- else:
- number_of_pieces = len(self._pieces)
- return dict((c, i+number_of_pieces)
- for i, c in enumerate(self.space()))
+ return {c: i for i, c in enumerate(self.space())}
+
+ number_of_pieces = len(self._pieces)
+ return {c: i + number_of_pieces for i, c in enumerate(self.space())}
@cached_method
def int_to_coord_dict(self):
@@ -1811,14 +1812,10 @@ def int_to_coord_dict(self):
True
sage: all(B[A[i]] == i for i in A)
True
-
"""
if self._reusable:
- return dict((i, c) for i, c in enumerate(self.space()))
- else:
- number_of_pieces = len(self._pieces)
- return dict((i+number_of_pieces, c)
- for i, c in enumerate(self.space()))
+ return dict(enumerate(self.space()))
+ return dict(enumerate(self.space(), start=len(self._pieces)))
@cached_method
def rows_for_piece(self, i, mod_box_isometries=False):
diff --git a/src/sage/combinat/tools.py b/src/sage/combinat/tools.py
index 63c611581c8..feb2c5d4975 100644
--- a/src/sage/combinat/tools.py
+++ b/src/sage/combinat/tools.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Transitive ideal closure tool
"""
diff --git a/src/sage/combinat/triangles_FHM.py b/src/sage/combinat/triangles_FHM.py
index 8e3399d4da4..39313e439da 100644
--- a/src/sage/combinat/triangles_FHM.py
+++ b/src/sage/combinat/triangles_FHM.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Combinatorial triangles for posets and fans
diff --git a/src/sage/combinat/tuple.py b/src/sage/combinat/tuple.py
index 54d1caf9181..1ce84561b94 100644
--- a/src/sage/combinat/tuple.py
+++ b/src/sage/combinat/tuple.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Tuples
"""
@@ -77,7 +78,7 @@ def __init__(self, S, k):
"""
self.S = S
self.k = k
- self._index_list = list(set(S.index(s) for s in S))
+ self._index_list = list({S.index(s) for s in S})
category = FiniteEnumeratedSets()
Parent.__init__(self, category=category)
@@ -168,7 +169,7 @@ def __init__(self, S, k):
"""
self.S = S
self.k = k
- self._index_list = list(set(S.index(s) for s in S))
+ self._index_list = list({S.index(s) for s in S})
category = FiniteEnumeratedSets()
Parent.__init__(self, category=category)
diff --git a/src/sage/combinat/tutorial.py b/src/sage/combinat/tutorial.py
index 6f9fad1c5dd..5279e06b03e 100644
--- a/src/sage/combinat/tutorial.py
+++ b/src/sage/combinat/tutorial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Introduction to combinatorics in Sage
diff --git a/src/sage/combinat/vector_partition.py b/src/sage/combinat/vector_partition.py
index 2bd89dbb244..e7b42038796 100644
--- a/src/sage/combinat/vector_partition.py
+++ b/src/sage/combinat/vector_partition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Vector Partitions
diff --git a/src/sage/combinat/words/abstract_word.py b/src/sage/combinat/words/abstract_word.py
index 4b385e3e79f..20da53699ec 100644
--- a/src/sage/combinat/words/abstract_word.py
+++ b/src/sage/combinat/words/abstract_word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Abstract word (finite or infinite)
diff --git a/src/sage/combinat/words/all.py b/src/sage/combinat/words/all.py
index 687b572c8e5..64c4ab6b47a 100644
--- a/src/sage/combinat/words/all.py
+++ b/src/sage/combinat/words/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Combinatorics on words
@@ -43,11 +44,16 @@
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
-from .alphabet import Alphabet, build_alphabet
-from .morphism import WordMorphism
-from .paths import WordPaths
-from .word import Word
-from .word_options import WordOptions
-from .word_generators import words
-from .words import Words, FiniteWords, InfiniteWords
-from .lyndon_word import LyndonWord, LyndonWords, StandardBracketedLyndonWords
+from sage.misc.lazy_import import lazy_import
+
+from sage.combinat.words.alphabet import Alphabet, build_alphabet
+from sage.combinat.words.morphism import WordMorphism
+lazy_import('sage.combinat.words.paths', 'WordPaths')
+from sage.combinat.words.word import Word
+from sage.combinat.words.word_options import WordOptions
+from sage.combinat.words.word_generators import words
+from sage.combinat.words.words import Words, FiniteWords, InfiniteWords
+from sage.combinat.words.lyndon_word import LyndonWord, LyndonWords, StandardBracketedLyndonWords
+
+del install_doc
+del lazy_import
diff --git a/src/sage/combinat/words/alphabet.py b/src/sage/combinat/words/alphabet.py
index 19ac17054b8..ea53ac437d0 100644
--- a/src/sage/combinat/words/alphabet.py
+++ b/src/sage/combinat/words/alphabet.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Alphabet
diff --git a/src/sage/combinat/words/finite_word.py b/src/sage/combinat/words/finite_word.py
index b596f87e56d..6ac287f2679 100644
--- a/src/sage/combinat/words/finite_word.py
+++ b/src/sage/combinat/words/finite_word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Finite word
@@ -1426,7 +1427,7 @@ def factor_set(self, n=None, algorithm='suffix tree'):
return Set(self.factor_iterator(n))
elif algorithm == 'naive':
if n is None:
- S = set([self[0:0]])
+ S = {self[0:0]}
for n in range(1, self.length()+1):
for i in range(self.length()-n+1):
S.add(self[i:i+n])
@@ -3006,7 +3007,7 @@ def palindromes(self, f=None):
[word: , word: ab, word: abbabaab, word: ba, word: baba, word: bbabaa]
"""
LPS = self.lps_lengths(f)
- return set(self[i - LPS[i]: i] for i in range(len(self) + 1))
+ return {self[i - LPS[i]: i] for i in range(len(self) + 1)}
def palindromic_complexity(self, n):
r"""
@@ -6415,7 +6416,7 @@ def delta(self):
return Words()([])
ss = self[0]
c = 0
- v = list()
+ v = []
max_c = 0
for s in self:
if s == ss:
diff --git a/src/sage/combinat/words/infinite_word.py b/src/sage/combinat/words/infinite_word.py
index 8baae7c1c3c..1fee1c7c8cf 100644
--- a/src/sage/combinat/words/infinite_word.py
+++ b/src/sage/combinat/words/infinite_word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Infinite word
diff --git a/src/sage/combinat/words/lyndon_word.py b/src/sage/combinat/words/lyndon_word.py
index c466166d78a..81c91897c2d 100644
--- a/src/sage/combinat/words/lyndon_word.py
+++ b/src/sage/combinat/words/lyndon_word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Lyndon words
"""
diff --git a/src/sage/combinat/words/morphic.py b/src/sage/combinat/words/morphic.py
index 6a7a7877185..b5da6376fa5 100644
--- a/src/sage/combinat/words/morphic.py
+++ b/src/sage/combinat/words/morphic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Morphic words
diff --git a/src/sage/combinat/words/morphism.py b/src/sage/combinat/words/morphism.py
index f490ac96cd0..eb3b6b5a485 100644
--- a/src/sage/combinat/words/morphism.py
+++ b/src/sage/combinat/words/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Word morphisms/substitutions
@@ -401,7 +402,7 @@ def __init__(self, data, domain=None, codomain=None):
self._morph = {}
- dom_alph = list()
+ dom_alph = []
for key, val in data.items():
dom_alph.append(key)
if val in codomain.alphabet():
@@ -950,7 +951,8 @@ def __mul__(self, other):
sage: m * WordMorphism('')
WordMorphism:
"""
- return WordMorphism(dict((key, self(w)) for key, w in other._morph.items()), codomain=self.codomain())
+ return WordMorphism({key: self(w) for key, w in other._morph.items()},
+ codomain=self.codomain())
def __pow__(self, exp):
r"""
@@ -1090,7 +1092,8 @@ def restrict_domain(self, alphabet):
...
TypeError: 'sage.rings.integer.Integer' object is not iterable
"""
- return WordMorphism(dict((a, self(a)) for a in alphabet if a in self.domain().alphabet()))
+ return WordMorphism({a: self(a) for a in alphabet
+ if a in self.domain().alphabet()})
def _matrix_(self, R=None):
r"""
@@ -1276,7 +1279,7 @@ def image(self, letter):
"""
return self._morph[letter]
- def images(self):
+ def images(self) -> list:
r"""
Return the list of all the images of the letters of the alphabet
under ``self``.
@@ -1698,7 +1701,7 @@ def is_prolongable(self, letter):
def is_uniform(self, k=None):
r"""
- Return True if self is a `k`-uniform morphism.
+ Return ``True`` if ``self`` is a `k`-uniform morphism.
Let `k` be a positive integer. A morphism `\phi` is called `k`-uniform
if for every letter `\alpha`, we have `|\phi(\alpha)| = k`. In other
@@ -1707,9 +1710,10 @@ def is_uniform(self, k=None):
INPUT:
- - ``k`` - a positive integer or None. If set to a positive integer,
- then the function return True if self is `k`-uniform. If set to
- None, then the function return True if self is uniform.
+ - ``k`` - a positive integer or ``None``. If set to a positive integer,
+ then the function return ``True`` if ``self`` is `k`-uniform.
+ If set to ``None``, then the function return ``True`` if ``self``
+ is uniform.
EXAMPLES::
@@ -1725,11 +1729,19 @@ def is_uniform(self, k=None):
False
sage: tau.is_uniform(k=2)
True
+
+ TESTS::
+
+ sage: phi = WordMorphism('')
+ sage: phi.is_uniform()
+ True
"""
if k is None:
- return len(set(w.length() for w in self.images())) == 1
- else:
- return all(w.length() == k for w in self.images())
+ try:
+ k = self.images()[0].length()
+ except IndexError:
+ return True
+ return all(w.length() == k for w in self.images())
def fixed_point(self, letter):
r"""
@@ -1980,7 +1992,7 @@ def periodic_points(self):
raise NotImplementedError("f should be non erasing")
A = self.domain().alphabet()
- d = dict((letter, self(letter)[0]) for letter in A)
+ d = {letter: self(letter)[0] for letter in A}
G = set(self.growing_letters())
res = []
@@ -2173,7 +2185,8 @@ def conjugate(self, pos):
sage: m.conjugate(2)
WordMorphism: a->cdeab, b->zxy
"""
- return WordMorphism(dict((key, w.conjugate(pos)) for (key, w) in self._morph.items()))
+ return WordMorphism({key: w.conjugate(pos)
+ for (key, w) in self._morph.items()})
def has_left_conjugate(self):
r"""
@@ -3785,7 +3798,7 @@ def try_create_h(f, k):
h = {letter: [letter] if image else [] for letter, image in f.items()}
elif len(Y) < len(X): # Trivial case #2.
k = {x: [y] for x, y in zip(X, Y)}
- k_inverse = {y: x for y, x in zip(Y, X)}
+ k_inverse = dict(zip(Y, X))
h = {x: [k_inverse[y] for y in image] for x, image in f.items()}
elif not self.is_injective(): # Non-trivial but a fast case.
k = dict(f)
@@ -3822,7 +3835,7 @@ def try_create_h(f, k):
for comb in combinations(factors, len(X) - 1):
if any(x.is_proper_prefix(y) for x in comb for y in comb):
continue
- k = {x: image for x, image in zip(X, comb)}
+ k = dict(zip(X, comb))
h = try_create_h(f, k)
if h:
break
diff --git a/src/sage/combinat/words/paths.py b/src/sage/combinat/words/paths.py
index f5506152d44..7601062f6d1 100644
--- a/src/sage/combinat/words/paths.py
+++ b/src/sage/combinat/words/paths.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat sage.modules
r"""
Word paths
diff --git a/src/sage/combinat/words/shuffle_product.py b/src/sage/combinat/words/shuffle_product.py
index 719e0122e5c..1ee79610a48 100644
--- a/src/sage/combinat/words/shuffle_product.py
+++ b/src/sage/combinat/words/shuffle_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Shuffle product of words
diff --git a/src/sage/combinat/words/suffix_trees.py b/src/sage/combinat/words/suffix_trees.py
index 8375bde1a8a..dc87e6ace61 100644
--- a/src/sage/combinat/words/suffix_trees.py
+++ b/src/sage/combinat/words/suffix_trees.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Suffix Tries and Suffix Trees
"""
@@ -136,7 +137,7 @@ def _process_letter(self, letter):
self._suffix_link[old_s] = self._transition_function[(r, letter)]
# update the active state
self._active_state = \
- self._transition_function[(self._active_state, letter)]
+ self._transition_function[(self._active_state, letter)]
def process_letter(self, letter):
r"""
@@ -177,7 +178,7 @@ def process_letter(self, letter):
# functionality to the class.
#####
- def _repr_(self):
+ def _repr_(self) -> str:
"""
TESTS::
@@ -189,12 +190,12 @@ def _repr_(self):
def node_to_word(self, state=0):
r"""
- Returns the word obtained by reading the edge labels from 0 to
+ Return the word obtained by reading the edge labels from 0 to
``state``.
INPUT:
- - ``state`` - (default: 0) a state
+ - ``state`` -- (default: 0) a state
EXAMPLES::
@@ -213,18 +214,18 @@ def node_to_word(self, state=0):
# Starting from the active state,
# read labels along the unique path to the root.
- (u,letter) = tf_inv[state]
+ u, letter = tf_inv[state]
w = letter
s = u
while s != 0:
- (u,letter) = tf_inv[s]
+ u, letter = tf_inv[s]
w = letter * w
s = u
return w
def word(self):
r"""
- Returns the word whose suffix tree this is.
+ Return the word whose suffix tree this is.
EXAMPLES::
@@ -238,10 +239,10 @@ def word(self):
"""
return self.node_to_word(self._active_state)
- def __eq__(self,other):
+ def __eq__(self, other) -> bool:
r"""
- If self and other have the same transition function, the same
- suffix link, and the same word, then they are equal.
+ If ``self`` and ``other`` have the same transition function,
+ the same suffix link, and the same word, then they are equal.
TESTS::
@@ -259,7 +260,7 @@ def __eq__(self,other):
sage: t == s
True
"""
- if not isinstance(other,SuffixTrie):
+ if not isinstance(other, SuffixTrie):
return False
return self._transition_function == other._transition_function \
and self._suffix_link == other._suffix_link \
@@ -267,13 +268,13 @@ def __eq__(self,other):
def transition_function(self, node, word):
r"""
- Returns the state reached by beginning at ``node`` and following the
+ Return the state reached by beginning at ``node`` and following the
arrows in the transition graph labelled by the letters of ``word``.
INPUT:
- - ``node`` - a node
- - ``word`` - a word
+ - ``node`` -- a node
+ - ``word`` -- a word
EXAMPLES::
@@ -281,7 +282,7 @@ def transition_function(self, node, word):
sage: w = Words([0,1])([0,1,0,1,1])
sage: t = SuffixTrie(w)
sage: all(t.transition_function(u, letter) == v
- ....: for ((u, letter), v) in t._transition_function.items())
+ ....: for (u, letter), v in t._transition_function.items())
True
"""
if node == -1:
@@ -316,7 +317,8 @@ def states(self):
def suffix_link(self, state):
r"""
- Evaluates the suffix link map of the suffix trie on ``state``.
+ Evaluate the suffix link map of the suffix trie on ``state``.
+
Note that the suffix link map is not defined on -1.
INPUT:
@@ -351,7 +353,7 @@ def suffix_link(self, state):
...
TypeError: 17 is not a state
"""
- if not isinstance(state, (int,Integer)):
+ if not isinstance(state, (int, Integer)):
raise TypeError("%s is not an integer" % state)
if state == -1:
raise TypeError("suffix link is not defined for -1")
@@ -361,8 +363,10 @@ def suffix_link(self, state):
def active_state(self):
r"""
- Returns the active state of the suffix trie. This is the state
- corresponding to the word as a suffix of itself.
+ Return the active state of the suffix trie.
+
+ This is the state corresponding to the word as a suffix of
+ itself.
EXAMPLES::
@@ -383,10 +387,11 @@ def active_state(self):
def final_states(self):
r"""
- Returns the set of final states of the suffix trie. These are the
- states corresponding to the suffixes of ``self.word()``. They are
- obtained be repeatedly following the suffix link from the active
- state until we reach 0.
+ Return the set of final states of the suffix trie.
+
+ These are the states corresponding to the suffixes of
+ ``self.word()``. They are obtained be repeatedly following the
+ suffix link from the active state until we reach 0.
EXAMPLES::
@@ -403,7 +408,7 @@ def final_states(self):
F.append(s)
return Set(F)
- def has_suffix(self,word):
+ def has_suffix(self, word) -> bool:
r"""
Return ``True`` if and only if ``word`` is a suffix of ``self.word()``.
@@ -423,16 +428,16 @@ def has_suffix(self,word):
q = self._active_state
if q == s:
return True
- else:
- while q != 0:
- q = self._suffix_link[q]
- if q == s:
- return True
+
+ while q != 0:
+ q = self._suffix_link[q]
+ if q == s:
+ return True
return False
def to_digraph(self):
r"""
- Returns a ``DiGraph`` object of the transition graph of the suffix
+ Return a ``DiGraph`` object of the transition graph of the suffix
trie.
EXAMPLES::
@@ -451,14 +456,14 @@ def to_digraph(self):
[0 0 0 0 0 0]
"""
dag = {}
- for ((u, letter), v) in self._transition_function.items():
+ for (u, letter), v in self._transition_function.items():
dag.setdefault(u, {})[v] = letter
return DiGraph(dag)
def plot(self, layout='tree', tree_root=0, tree_orientation='up',
- vertex_colors=None, edge_labels=True, *args, **kwds):
+ vertex_colors=None, edge_labels=True, *args, **kwds):
r"""
- Returns a Graphics object corresponding to the transition graph of
+ Return a Graphics object corresponding to the transition graph of
the suffix trie.
EXAMPLES::
@@ -474,20 +479,20 @@ def plot(self, layout='tree', tree_root=0, tree_orientation='up',
"""
tree = self.to_digraph()
- for (u,v,label) in tree.edge_iterator():
+ for u, v, label in tree.edge_iterator():
tree.set_edge_label(u, v, label.string_rep())
if vertex_colors is None:
suffix_nodes = self.final_states()
non_suffix_nodes = list(set(self.states()) - set(suffix_nodes))
- vertex_colors = {'#fec7b8':suffix_nodes,'#ffffff':non_suffix_nodes}
+ vertex_colors = {'#fec7b8': suffix_nodes, '#ffffff': non_suffix_nodes}
return tree.plot(layout=layout, tree_root=tree_root,
- tree_orientation=tree_orientation,
- vertex_colors=vertex_colors, edge_labels=edge_labels,
- *args, **kwds)
+ tree_orientation=tree_orientation,
+ vertex_colors=vertex_colors, edge_labels=edge_labels,
+ *args, **kwds)
def show(self, *args, **kwds):
r"""
- Displays the output of ``self.plot()``.
+ Display the output of :meth:`plot`.
EXAMPLES::
@@ -581,9 +586,9 @@ def __init__(self, word):
Implicit Suffix Tree of the word: cacao
"""
# For constructing the suffix tree.
- self._transition_function = {0:{}}
- self._suffix_link = {0:-1}
- self._active_state = (0,(1,1))
+ self._transition_function = {0: {}}
+ self._suffix_link = {0: -1}
+ self._active_state = (0, (1, 1))
self._letters = []
for letter in word:
self._letters.append(letter)
@@ -631,34 +636,38 @@ def _process_letter(self, letter):
sage: s
Implicit Suffix Tree of the word: 01011
"""
- (s,(k,i)) = self._active_state
+ s, (k, i) = self._active_state
old_r = 0
- (end_state, r) = self._test_and_split(s,(k,i-1),letter)
+ end_state, r = self._test_and_split(s, (k, i-1), letter)
while not end_state:
# adjoin a new state rr and create a transition from r to rr
rr = len(self._transition_function)
self._transition_function[rr] = {}
- self._transition_function[r][(i,None)] = rr
+ self._transition_function[r][(i, None)] = rr
# update the suffix link, if necessary
if old_r != 0:
self._suffix_link[old_r] = r
old_r = r
# follow the suffix link to the next state
- (s, k) = self._canonize(self._suffix_link[s], (k,i-1))
- (end_state, r) = self._test_and_split(s, (k,i-1), letter)
+ s, k = self._canonize(self._suffix_link[s], (k, i-1))
+ end_state, r = self._test_and_split(s, (k, i-1), letter)
# update the suffix link, if necessary
if old_r != 0:
self._suffix_link[old_r] = s
# set the active state
- (s,k) = self._canonize(s,(k,i))
+ s, k = self._canonize(s, (k, i))
self._active_state = (s, (k, i+1))
return
def _test_and_split(self, s, k_p, letter):
r"""
- Helper function for _process_letter. Tests to see whether an edge
- needs to be split. Returns ``(True, state)``, where ``state`` is the
- next state to process (either a newly created state or the original s).
+ Helper function for :meth:`_process_letter`. Test to see
+ whether an edge needs to be split.
+
+ OUTPUT:
+
+ ``(True, state)``, where ``state`` is the next state to
+ process (either a newly created state or the original ``s``).
TESTS::
@@ -669,15 +678,15 @@ def _test_and_split(self, s, k_p, letter):
sage: t._test_and_split(0, (4,5), w.parent().alphabet().rank("o"))
(False, 3)
"""
- (k, p) = k_p
+ k, p = k_p
if k <= p:
# find the transition from s that begins with k-th letter
- ((kk,pp), ss) = self._find_transition(s, self._letters[k-1])
+ (kk, pp), ss = self._find_transition(s, self._letters[k - 1])
if letter == self._letters[kk + p - k]:
return (True, s)
else:
# replace transition above by transitions
- del self._transition_function[s][(kk,pp)]
+ del self._transition_function[s][(kk, pp)]
r = len(self._transition_function)
self._transition_function[r] = {}
self._transition_function[s][(kk, kk+p-k)] = r
@@ -692,7 +701,7 @@ def _test_and_split(self, s, k_p, letter):
def _canonize(self, s, k_p):
r"""
- Given an implicit or explicit reference pair for a node, returns
+ Given an implicit or explicit reference pair for a node, return
the canonical reference pair.
Recall that a node r is referenced as (s, (k,p)), where s is an
@@ -709,22 +718,23 @@ def _canonize(self, s, k_p):
sage: t._canonize(0,(2,5))
(5, 3)
"""
- (k, p) = k_p
+ k, p = k_p
if p < k:
return (s, k)
else:
- ((kk,pp), ss) = self._find_transition(s, self._letters[k-1])
+ (kk, pp), ss = self._find_transition(s, self._letters[k - 1])
while pp is not None and pp - kk <= p - k:
k = k + pp - kk + 1
s = ss
if k <= p:
- ((kk,pp), ss) = self._find_transition(s, self._letters[k-1])
+ (kk, pp), ss = self._find_transition(s, self._letters[k-1])
return (s, k)
def _find_transition(self, state, letter):
r"""
- Returns the transition from state that begins with letter. Returns
- ``None`` if no such transition exists.
+ Return the transition from state that begins with letter.
+
+ This returns ``None`` if no such transition exists.
The transitions are stored as a dictionary of dictionaries: keyed
by the nodes, with the corresponding dictionary keyed by pairs
@@ -754,12 +764,12 @@ def _find_transition(self, state, letter):
"""
if state == -1:
return ((0, 0), 0)
- else:
- if state in self._transition_function:
- for ((k,p),s) in self._transition_function[state].items():
- if self._letters[k-1] == letter:
- return ((k,p), s)
- return None
+
+ if state in self._transition_function:
+ for (k, p), s in self._transition_function[state].items():
+ if self._letters[k - 1] == letter:
+ return ((k, p), s)
+ return None
#####
# The following are not necessary for constructing the implicit suffix
@@ -770,7 +780,7 @@ def _find_transition(self, state, letter):
# Visualization
#####
- def _repr_(self):
+ def _repr_(self) -> str:
r"""
TESTS::
@@ -782,7 +792,7 @@ def _repr_(self):
def word(self):
r"""
- Returns the word whose implicit suffix tree this is.
+ Return the word whose implicit suffix tree this is.
TESTS::
@@ -792,9 +802,10 @@ def word(self):
"""
return self._word
- def transition_function_dictionary(self):
+ def transition_function_dictionary(self) -> dict:
r"""
- Returns the transition function as a dictionary of dictionaries.
+ Return the transition function as a dictionary of dictionaries.
+
The format is consistent with the input format for ``DiGraph``.
EXAMPLES::
@@ -813,13 +824,13 @@ def transition_function_dictionary(self):
{0: {1: (0, None), 2: (1, None)}}
"""
d = {}
- for (u,v,(i,j)) in self.edge_iterator():
- d.setdefault(u, {})[v] = (i,j)
+ for u, v, (i, j) in self.edge_iterator():
+ d.setdefault(u, {})[v] = (i, j)
return d
def to_digraph(self, word_labels=False):
r"""
- Returns a ``DiGraph`` object of the transition graph of the suffix tree.
+ Return a ``DiGraph`` object of the transition graph of the suffix tree.
INPUT:
@@ -840,18 +851,18 @@ def to_digraph(self, word_labels=False):
return DiGraph(d)
d = self.transition_function_dictionary()
for u in d:
- for (v, (i, j)) in d[u].items():
+ for v, (i, j) in d[u].items():
if word_labels:
d[u][v] = self._word[i:j]
elif j is None:
- d[u][v] = (i,len(self._letters))
+ d[u][v] = (i, len(self._letters))
return DiGraph(d)
def plot(self, word_labels=False, layout='tree', tree_root=0,
- tree_orientation='up', vertex_colors=None, edge_labels=True,
- *args, **kwds):
+ tree_orientation='up', vertex_colors=None, edge_labels=True,
+ *args, **kwds):
r"""
- Returns a Graphics object corresponding to the transition graph of
+ Return a Graphics object corresponding to the transition graph of
the suffix tree.
INPUT:
@@ -883,18 +894,18 @@ def plot(self, word_labels=False, layout='tree', tree_root=0,
"""
tree = self.to_digraph(word_labels=word_labels)
if word_labels:
- for (u,v,label) in tree.edge_iterator():
+ for u, v, label in tree.edge_iterator():
tree.set_edge_label(u, v, label.string_rep())
if vertex_colors is None:
- vertex_colors = {'#fec7b8':tree.vertices(sort=True)}
+ vertex_colors = {'#fec7b8': tree.vertices(sort=True)}
return tree.plot(layout=layout, tree_root=tree_root,
- tree_orientation=tree_orientation,
- vertex_colors=vertex_colors, edge_labels=edge_labels,
- *args, **kwds)
+ tree_orientation=tree_orientation,
+ vertex_colors=vertex_colors, edge_labels=edge_labels,
+ *args, **kwds)
def show(self, word_labels=None, *args, **kwds):
r"""
- Displays the output of ``self.plot()``.
+ Display the output of :meth:`plot`.
INPUT:
@@ -917,10 +928,10 @@ def show(self, word_labels=None, *args, **kwds):
# Various methods
#####
- def __eq__(self,other):
+ def __eq__(self, other) -> bool:
r"""
- If self and other have the same transition function and the
- same word, then they are equal.
+ If ``self`` and ``other`` have the same transition function
+ and the same word, then they are equal.
TESTS::
@@ -930,22 +941,25 @@ def __eq__(self,other):
sage: ImplicitSuffixTree(w) == ImplicitSuffixTree(u)
True
"""
- if not isinstance(other,ImplicitSuffixTree):
+ if not isinstance(other, ImplicitSuffixTree):
return False
return self._transition_function == other._transition_function \
and self._letters == other._letters
def transition_function(self, word, node=0):
r"""
- Returns the node obtained by starting from ``node`` and following the
- edges labelled by the letters of ``word``. Returns ``("explicit",
- end_node)`` if we end at ``end_node``, or ``("implicit", edge, d)``
- if we end `d` spots along an edge.
+ Return the node obtained by starting from ``node`` and following the
+ edges labelled by the letters of ``word``.
+
+ OUTPUT:
+
+ ``("explicit", end_node)`` if we end at ``end_node``, or
+ ``("implicit", edge, d)`` if we end `d` spots along an edge.
INPUT:
- - ``word`` - a word
- - ``node`` - (default: 0) starting node
+ - ``word`` -- a word
+ - ``node`` -- (default: 0) starting node
EXAMPLES::
@@ -963,31 +977,31 @@ def transition_function(self, word, node=0):
"""
if word.is_empty():
return "explicit", node
- ((k,p),s) = self._find_transition(node, word[0])
+ (k, p), s = self._find_transition(node, word[0])
if p is None:
# test that word is a prefix of self._letters[k-1:]
if word == self._word[k-1:(k-1)+word.length()]:
if word.length() == len(self._letters) - k + 1:
return "explicit", s
else:
- edge = (node,s)
+ edge = (node, s)
return "implicit", edge, word.length()
else:
# find longest common prefix
- m = min(p-k+1,word.length())
+ m = min(p-k+1, word.length())
i = 0
while i < m and self._word[k-1+i] == word[i]:
i += 1
if i == p-k+1:
- return self.transition_function(word[p-k+1:],s)
+ return self.transition_function(word[p-k+1:], s)
else:
- edge = (node,s)
+ edge = (node, s)
return "implicit", edge, i
return "explicit", node
- def states(self):
+ def states(self) -> list:
r"""
- Returns the states (explicit nodes) of the suffix tree.
+ Return the states (explicit nodes) of the suffix tree.
EXAMPLES::
@@ -1001,7 +1015,8 @@ def states(self):
def suffix_link(self, state):
r"""
- Evaluates the suffix link map of the implicit suffix tree on ``state``.
+ Evaluate the suffix link map of the implicit suffix tree on ``state``.
+
Note that the suffix link is not defined for all states.
The suffix link of a state `x'` that corresponds to the suffix `x` is
@@ -1030,12 +1045,11 @@ def suffix_link(self, state):
"""
if state in self._suffix_link:
return self._suffix_link[state]
- else:
- raise TypeError("there is no suffix link from %s" % state)
+ raise TypeError("there is no suffix link from %s" % state)
def active_state(self):
r"""
- Returns the active state of the suffix tree.
+ Return the active state of the suffix tree.
EXAMPLES::
@@ -1049,7 +1063,7 @@ def active_state(self):
def process_letter(self, letter):
r"""
- Modifies the current implicit suffix tree producing the implicit
+ Modify the current implicit suffix tree producing the implicit
suffix tree for ``self.word() + letter``.
EXAMPLES::
@@ -1075,10 +1089,12 @@ def process_letter(self, letter):
def to_explicit_suffix_tree(self):
r"""
- Converts self to an explicit suffix tree. It is obtained by
- processing an end of string letter as if it were a regular
- letter, except that no new leaf nodes are created (thus, the only
- thing that happens is that some implicit nodes become explicit).
+ Convert ``self`` to an explicit suffix tree.
+
+ It is obtained by processing an end of string letter as if it
+ were a regular letter, except that no new leaf nodes are
+ created (thus, the only thing that happens is that some
+ implicit nodes become explicit).
EXAMPLES::
@@ -1096,20 +1112,21 @@ def to_explicit_suffix_tree(self):
# append a new unique symbol to the word and process the new letter
end_of_string = object()
self._letters.append(end_of_string)
- (s,(k,i)) = self._active_state
- (end_state, r) = self._test_and_split(s,(k,i-1), end_of_string)
+ s, (k, i) = self._active_state
+ end_state, r = self._test_and_split(s, (k, i-1), end_of_string)
while not end_state:
- (s, k) = self._canonize(self._suffix_link[s], (k,i-1))
- (end_state, r) = self._test_and_split(s, (k,i-1), end_of_string)
+ s, k = self._canonize(self._suffix_link[s], (k, i-1))
+ end_state, r = self._test_and_split(s, (k, i-1), end_of_string)
# remove the end of string symbol from the word
self._letters.pop()
return
def edge_iterator(self):
r"""
- Returns an iterator over the edges of the suffix tree. The
- edge from `u` to `v` labelled by `(i,j)` is returned as the tuple
- `(u,v,(i,j))`.
+ Return an iterator over the edges of the suffix tree.
+
+ The edge from `u` to `v` labelled by `(i,j)` is yielded as
+ the tuple `(u,v,(i,j))`.
EXAMPLES::
@@ -1124,11 +1141,11 @@ def edge_iterator(self):
queue = [0]
while queue:
v = queue.pop()
- for ((i,j),u) in self._transition_function[v].items():
- yield (v,u,(i-1,j))
+ for (i, j), u in self._transition_function[v].items():
+ yield (v, u, (i - 1, j))
queue.append(u)
- def number_of_factors(self,n=None):
+ def number_of_factors(self, n=None):
r"""
Count the number of distinct factors of ``self.word()``.
@@ -1189,7 +1206,7 @@ def number_of_factors(self,n=None):
if n is None:
length_word = self.word().length()
num_factors = 1 # empty word
- for (u, v, (i, j)) in self.edge_iterator():
+ for u, v, (i, j) in self.edge_iterator():
if j is None:
num_factors += length_word - i
else:
@@ -1198,12 +1215,12 @@ def number_of_factors(self,n=None):
num_factors = 0
queue = [(0, 0)]
while queue:
- (v, l) = queue.pop()
+ v, l = queue.pop()
if l == n:
num_factors += 1
if l < n:
- if self._transition_function[v] != {}:
- for ((i, j), u) in self._transition_function[v].items():
+ if self._transition_function[v]:
+ for (i, j), u in self._transition_function[v].items():
if j is None:
j = self.word().length()
if j - i >= n - l:
@@ -1256,27 +1273,27 @@ def factor_iterator(self, n=None):
queue = [(0, 0, -1, 0)]
yield w[0:0]
while queue:
- (v,i,j,l) = queue.pop()
- for k in range(i,j+1):
+ v, i, j, l = queue.pop()
+ for k in range(i, j+1):
yield w[j-l:k]
- for ((i,j),u) in self._transition_function[v].items():
+ for (i, j), u in self._transition_function[v].items():
if j is None:
j = wlen
- queue.append((u,i,j, l+j-i+1))
+ queue.append((u, i, j, l+j-i+1))
elif isinstance(n, (int, Integer)):
queue = [(0, 0, -1, 0)]
while queue:
- (v,i,j,l) = queue.pop()
+ v, i, j, l = queue.pop()
if l == n:
yield w[j-l:j]
if l < n:
- for ((i,j),u) in self._transition_function[v].items():
+ for (i, j), u in self._transition_function[v].items():
if j is None:
j = wlen
if j - i >= n - l:
yield w[i-l-1:i-l+n-1]
else:
- queue.append((u,i,j, l+j-i+1))
+ queue.append((u, i, j, l+j-i+1))
else:
raise TypeError("not an integer or None: %s" % n)
@@ -1319,7 +1336,7 @@ def LZ_decomposition(self):
w = self.word()
while i < len(w):
l = 0
- ((x, y), successor) = self._find_transition(0, w[i])
+ (x, y), successor = self._find_transition(0, w[i])
x = x-1
while x < i+l:
if y is None:
@@ -1329,7 +1346,7 @@ def LZ_decomposition(self):
if i+l >= len(w):
l = len(w)-i
break
- ((x, y), successor) = self._find_transition(successor, w[i+l])
+ (x, y), successor = self._find_transition(successor, w[i+l])
x = x-1
i += max(1, l)
iB.append(i)
@@ -1407,14 +1424,15 @@ def suffix_walk(self, edge, l):
sage: T.suffix_walk((7, 3), 1)
('implicit', (9, 4), 1)
"""
+ start, end = edge
# Select the transition that corresponds to edge
- for (i, j) in self._transition_function[edge[0]]:
- if self._transition_function[edge[0]][(i, j)] == edge[1]:
- break
+ ij = next(ij for ij, target in self._transition_function[start].items()
+ if target == end)
+
# self.word()[i-1:j] is the word on the edges
- i -= 1
- parent = self.suffix_link(edge[0])
- return self._count_and_skip(parent, i, i+l)
+ i = ij[0] - 1
+ parent = self.suffix_link(start)
+ return self._count_and_skip(parent, i, i + l)
def leftmost_covering_set(self):
r"""
@@ -1458,8 +1476,8 @@ def condition1_square_pairs(i):
"""
for k in range(1, B[i+1]-B[i]+1):
q = B[i+1]-k
- k1 = w.longest_forward_extension(B[i+1],q) if B[i+1] < len(w) else 0
- k2 = w.longest_backward_extension(B[i+1]-1,q-1) if q > 0 else 0
+ k1 = w.longest_forward_extension(B[i+1], q) if B[i+1] < len(w) else 0
+ k2 = w.longest_backward_extension(B[i+1]-1, q-1) if q > 0 else 0
start = max(q-k2, q-k+1)
if k1+k2 >= k and k1 > 0 and start >= B[i]:
yield (start, 2*k)
@@ -1481,13 +1499,13 @@ def condition2_square_pairs(i):
k2 = w.longest_backward_extension(B[i]-1, q-1) if B[i] > 0 else 0
start = max(B[i]-k2, B[i]-k+1)
if k1+k2 >= k and k1 > 0 and start+k <= B[i+1] and k2 > 0:
- yield (start,2*k)
+ yield (start, 2*k)
w = self.word()
B = self.LZ_decomposition()
P = [[] for _ in w]
- for i in range(len(B)-1):
- for (i,l) in chain(condition2_square_pairs(i), condition1_square_pairs(i)):
+ for i in range(len(B) - 1):
+ for i, l in chain(condition2_square_pairs(i), condition1_square_pairs(i)):
P[i].append(l)
for l in P:
l.reverse()
@@ -1499,9 +1517,10 @@ def condition2_square_pairs(i):
def uncompactify(self):
r"""
- Returns the tree obtained from self by splitting edges so that they
- are labelled by exactly one letter. The resulting tree is
- isomorphic to the suffix trie.
+ Return the tree obtained from ``self`` by splitting edges so that they
+ are labelled by exactly one letter.
+
+ The resulting tree is isomorphic to the suffix trie.
EXAMPLES::
@@ -1516,21 +1535,21 @@ def uncompactify(self):
newtree = DiGraph()
newtree.add_vertices(range(tree.order()))
new_node = tree.order() + 1
- for (u,v,label) in tree.edge_iterator():
+ for u, v, label in tree.edge_iterator():
if len(label) == 1:
- newtree.add_edge(u,v)
+ newtree.add_edge(u, v)
else:
- newtree.add_edge(u,new_node,label[0])
+ newtree.add_edge(u, new_node, label[0])
for w in label[1:-1]:
- newtree.add_edge(new_node,new_node+1,w)
+ newtree.add_edge(new_node, new_node+1, w)
new_node += 1
- newtree.add_edge(new_node,v,label[-1])
+ newtree.add_edge(new_node, v, label[-1])
new_node += 1
return newtree
def trie_type_dict(self):
r"""
- Returns a dictionary in a format compatible with that of the suffix
+ Return a dictionary in a format compatible with that of the suffix
trie transition function.
EXAMPLES::
@@ -1546,17 +1565,17 @@ def trie_type_dict(self):
"""
d = {}
new_node = len(self._transition_function)
- for (u, dd) in self._transition_function.items():
- for (sl, v) in dd.items():
+ for u, dd in self._transition_function.items():
+ for sl, v in dd.items():
w = self._word[sl[0]-1:sl[1]]
if w.length() == 1:
- d[u,w] = v
+ d[u, w] = v
else:
- d[u,w[0:1]] = new_node
- for i in range(1,w.length()-1):
+ d[u, w[0:1]] = new_node
+ for i in range(1, w.length()-1):
d[new_node, w[i:i+1]] = new_node + 1
new_node += 1
- d[new_node,w[-1:]] = v
+ d[new_node, w[-1:]] = v
new_node += 1
return d
@@ -1639,13 +1658,15 @@ def __repr__(self):
"""
w = self.word()
if len(w) > 40:
- w = str(w[:40])+'...'
- return "Decorated suffix tree of : {}".format(w)
+ w = str(w[:40]) + '...'
+ return f"Decorated suffix tree of : {w}"
def _partial_labeling(self):
r"""
Make a depth-first search in the suffix tree and mark some squares of a
- leftmost covering set of the tree. Used by ``self._complete_labeling``.
+ leftmost covering set of the tree.
+
+ This is used by :meth:`_complete_labeling`.
EXAMPLES::
@@ -1671,12 +1692,13 @@ def node_processing(node, parent, head):
OUTPUT: ``(i, pos)``, the new head of ``P(node)``
"""
i, pos = head
+ pano = (parent, node)
while pos < len(P[i]) and P[i][pos] > string_depth[parent]:
label = P[i][pos] - string_depth[parent]
- if (parent, node) in labeling:
- labeling[(parent, node)].append(label)
+ if pano in labeling:
+ labeling[pano].append(label)
else:
- labeling[(parent, node)] = [label]
+ labeling[pano] = [label]
pos += 1
return (i, pos)
@@ -1703,11 +1725,11 @@ def treat_node(current_node, parent):
if current_node in D:
node_list = (n, 0)
for child in D[current_node]:
- (i, j) = D[current_node][child]
+ i, j = D[current_node][child]
if j is None:
j = n
- string_depth[child] = string_depth[current_node]+j-i
- child_list = treat_node(child,current_node)
+ string_depth[child] = string_depth[current_node] + j - i
+ child_list = treat_node(child, current_node)
if child_list[0] < node_list[0]:
node_list = child_list
else: # The node is a child
@@ -1725,7 +1747,7 @@ def treat_node(current_node, parent):
def _complete_labeling(self):
r"""
- Returns a dictionary of edges of ``self``, with marked points for the end
+ Return a dictionary of edges of ``self``, with marked points for the end
of each distinct squares that can be found in ``self.word()``.
EXAMPLES::
@@ -1759,7 +1781,7 @@ def walk_chain(u, v, l, start):
successful = False
if final_state[0] == 'explicit':
parent = final_state[1]
- transition = self._find_transition(parent,self._letters[start])
+ transition = self._find_transition(parent, self._letters[start])
if transition is not None:
child = transition[1]
successful = True
@@ -1782,14 +1804,16 @@ def walk_chain(u, v, l, start):
def treat_node(current_node, i, j):
r"""
- Execute a depth-first search on self and start a suffix walk for
- labeled points on each edges of T. The function is recursive, call
- treat_node(0,0,0) to initiate the search.
+ Execute a depth-first search on ``self`` and start a suffix walk
+ for labeled points on each edges of T.
+
+ The function is recursive, call
+ ``treat_node(0,0,0)`` to initiate the search.
INPUT:
- - ``current_node`` - The node to treat
- - ``(i, j)`` - Pair of index such that the path from 0 to
+ - ``current_node`` -- The node to treat
+ - ``(i, j)`` -- Pair of index such that the path from 0 to
``current_node`` reads ``self.word()[i:j]``
"""
@@ -1844,14 +1868,13 @@ def treat_node(current_node, i, j):
pair = (square_start, edge_label[0]+l-square_start)
squares.append(pair)
- if output != "pair" and output != "word":
- raise ValueError("``output`` should be 'pair' or 'word'; got {}".format(
- output))
+ if output not in ["pair", "word"]:
+ msg = f"output should be 'pair' or 'word'; got {output}"
+ raise ValueError(msg)
D = self.transition_function_dictionary()
Q = self.labeling
squares = [(0, 0)]
treat_node(0, 0, 0)
if output == "pair":
return squares
- else:
- return [self.word()[i:i+l] for (i, l) in squares]
+ return [self.word()[i:i + l] for i, l in squares]
diff --git a/src/sage/combinat/words/word.py b/src/sage/combinat/words/word.py
index 222501a5dfd..9bfc13c6d89 100644
--- a/src/sage/combinat/words/word.py
+++ b/src/sage/combinat/words/word.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Word classes
diff --git a/src/sage/combinat/words/word_char.pyx b/src/sage/combinat/words/word_char.pyx
index 069f17fbcbc..142d041a107 100644
--- a/src/sage/combinat/words/word_char.pyx
+++ b/src/sage/combinat/words/word_char.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Fast word datatype using an array of unsigned char
"""
diff --git a/src/sage/combinat/words/word_datatypes.pxd b/src/sage/combinat/words/word_datatypes.pxd
index c3329bd5a78..5a2019651ec 100644
--- a/src/sage/combinat/words/word_datatypes.pxd
+++ b/src/sage/combinat/words/word_datatypes.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef class WordDatatype():
cdef public _parent
cdef _hash
diff --git a/src/sage/combinat/words/word_datatypes.pyx b/src/sage/combinat/words/word_datatypes.pyx
index 62132c64032..4c31a02959a 100644
--- a/src/sage/combinat/words/word_datatypes.pyx
+++ b/src/sage/combinat/words/word_datatypes.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Datatypes for finite words
"""
diff --git a/src/sage/combinat/words/word_generators.py b/src/sage/combinat/words/word_generators.py
index 3c38103cff4..afa595bac30 100644
--- a/src/sage/combinat/words/word_generators.py
+++ b/src/sage/combinat/words/word_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Common words
diff --git a/src/sage/combinat/words/word_infinite_datatypes.py b/src/sage/combinat/words/word_infinite_datatypes.py
index 8dbf97ed59a..f20eac6c730 100644
--- a/src/sage/combinat/words/word_infinite_datatypes.py
+++ b/src/sage/combinat/words/word_infinite_datatypes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Datatypes for words defined by iterators and callables
"""
diff --git a/src/sage/combinat/words/word_options.py b/src/sage/combinat/words/word_options.py
index 2d2bf3bc7ff..7a6d553f3cb 100644
--- a/src/sage/combinat/words/word_options.py
+++ b/src/sage/combinat/words/word_options.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
User-customizable options for words
"""
diff --git a/src/sage/combinat/words/words.py b/src/sage/combinat/words/words.py
index 9cdc76c7eac..0ebb653d0bd 100644
--- a/src/sage/combinat/words/words.py
+++ b/src/sage/combinat/words/words.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Set of words
diff --git a/src/sage/combinat/yang_baxter_graph.py b/src/sage/combinat/yang_baxter_graph.py
index bcfac20fdb3..6b10cb086dc 100644
--- a/src/sage/combinat/yang_baxter_graph.py
+++ b/src/sage/combinat/yang_baxter_graph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Yang-Baxter Graphs
"""
@@ -335,7 +336,7 @@ def _edges_in_bfs(self):
seen[self._root] = True
while queue:
u = queue.pop()
- l = sorted(list(digraph.neighbor_out_iterator(u)))
+ l = sorted(digraph.neighbor_out_iterator(u))
for w in l:
if w not in seen:
seen[w] = True
@@ -585,7 +586,7 @@ def __init__(self, partition):
"""
self._partition = partition
beta = sorted(self._partition, reverse=True)
- root = sum([tuple(range(b)) for b in beta], tuple())[::-1]
+ root = sum((tuple(range(b)) for b in beta), ())[::-1]
operators = [SwapIncreasingOperator(i)
for i in range(sum(partition) - 1)]
super().__init__(root, operators)
diff --git a/src/sage/cpython/__init__.py b/src/sage/cpython/__init__.py
index 0e4de12a8b1..1742d8853b4 100644
--- a/src/sage/cpython/__init__.py
+++ b/src/sage/cpython/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# sage.cpython is an ordinary package, not a namespace package.
# This package is imported very early, which is why workarounds/monkey-patching
diff --git a/src/sage/cpython/_py2_random.py b/src/sage/cpython/_py2_random.py
index 38ca23416ed..0da28217eec 100644
--- a/src/sage/cpython/_py2_random.py
+++ b/src/sage/cpython/_py2_random.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Except from the `random` module from Python 2.7.14 used solely for consistency
in the doctest suite for random results that depend on the Python PRNG.
diff --git a/src/sage/cpython/all.py b/src/sage/cpython/all.py
index d48ee4c7d45..f17f7a6559a 100644
--- a/src/sage/cpython/all.py
+++ b/src/sage/cpython/all.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
from sage.cpython.debug import getattr_debug, type_debug
from sage.cpython.getattr import raw_getattr
diff --git a/src/sage/cpython/atexit.pyx b/src/sage/cpython/atexit.pyx
index e5a82735137..dc132a9d25d 100644
--- a/src/sage/cpython/atexit.pyx
+++ b/src/sage/cpython/atexit.pyx
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
"""Utilities for interfacing with the standard library's atexit module."""
diff --git a/src/sage/cpython/builtin_types.pyx b/src/sage/cpython/builtin_types.pyx
index bfac8c414a7..f094d909dbf 100644
--- a/src/sage/cpython/builtin_types.pyx
+++ b/src/sage/cpython/builtin_types.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from cpython.object cimport PyTypeObject
cdef extern from *:
diff --git a/src/sage/cpython/cython_metaclass.pxd b/src/sage/cpython/cython_metaclass.pxd
index 189eb04f1c4..fc4bb020ed0 100644
--- a/src/sage/cpython/cython_metaclass.pxd
+++ b/src/sage/cpython/cython_metaclass.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
cdef extern from "cython_metaclass.h":
PyMethodDescr_CallSelf(desc, self)
diff --git a/src/sage/cpython/cython_metaclass.pyx b/src/sage/cpython/cython_metaclass.pyx
index a8fa92fc1a8..6447ed19e6d 100644
--- a/src/sage/cpython/cython_metaclass.pyx
+++ b/src/sage/cpython/cython_metaclass.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Metaclasses for Cython extension types
diff --git a/src/sage/cpython/debug.pyx b/src/sage/cpython/debug.pyx
index 09680986673..79aba1a7fbe 100644
--- a/src/sage/cpython/debug.pyx
+++ b/src/sage/cpython/debug.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Various functions to debug Python internals
"""
diff --git a/src/sage/cpython/dict_del_by_value.pxd b/src/sage/cpython/dict_del_by_value.pxd
index 71572b8951f..1bb9f8bd1c5 100644
--- a/src/sage/cpython/dict_del_by_value.pxd
+++ b/src/sage/cpython/dict_del_by_value.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from cpython.object cimport PyObject
cdef extern from "Python.h":
ctypedef struct PyDictObject
diff --git a/src/sage/cpython/dict_del_by_value.pyx b/src/sage/cpython/dict_del_by_value.pyx
index e00b4bcd611..44f0700206e 100644
--- a/src/sage/cpython/dict_del_by_value.pyx
+++ b/src/sage/cpython/dict_del_by_value.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Delete item from PyDict by exact value and hash
diff --git a/src/sage/cpython/getattr.pxd b/src/sage/cpython/getattr.pxd
index e0987cfa4c5..adf20ae9766 100644
--- a/src/sage/cpython/getattr.pxd
+++ b/src/sage/cpython/getattr.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# A class that allows for a more efficient creation
# of attribute errors, so that raising them requires
# less time.
diff --git a/src/sage/cpython/getattr.pyx b/src/sage/cpython/getattr.pyx
index d8a5795c0c4..899fbe62ecc 100644
--- a/src/sage/cpython/getattr.pyx
+++ b/src/sage/cpython/getattr.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Variants of getattr()
"""
diff --git a/src/sage/cpython/pycore_long.pxd b/src/sage/cpython/pycore_long.pxd
index 41de637ff18..4fe503a247e 100644
--- a/src/sage/cpython/pycore_long.pxd
+++ b/src/sage/cpython/pycore_long.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from cpython.longintrepr cimport py_long, digit
cdef extern from "pycore_long.h":
diff --git a/src/sage/cpython/python_debug.pxd b/src/sage/cpython/python_debug.pxd
index a7a2f112d00..f43779e5362 100644
--- a/src/sage/cpython/python_debug.pxd
+++ b/src/sage/cpython/python_debug.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# Python can be built with extensive debugging support. This file lets
# Sage know about which debugging options are enabled.
#
diff --git a/src/sage/cpython/string.pxd b/src/sage/cpython/string.pxd
index 1fde0aec0de..58c80d14987 100644
--- a/src/sage/cpython/string.pxd
+++ b/src/sage/cpython/string.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# ****************************************************************************
# Copyright (C) 2017 Erik M. Bray
#
diff --git a/src/sage/cpython/string.pyx b/src/sage/cpython/string.pyx
index a35fbd41881..fe472fd95bc 100644
--- a/src/sage/cpython/string.pyx
+++ b/src/sage/cpython/string.pyx
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
"""
String <-> bytes encoding/decoding
diff --git a/src/sage/cpython/type.pxd b/src/sage/cpython/type.pxd
index f3f80c7a6c6..2f77fe0a88e 100644
--- a/src/sage/cpython/type.pxd
+++ b/src/sage/cpython/type.pxd
@@ -1 +1,2 @@
+# sage_setup: distribution = sagemath-objects
cpdef bint can_assign_class(obj) noexcept
diff --git a/src/sage/cpython/type.pyx b/src/sage/cpython/type.pyx
index f9dcabc5df4..d2041c13ab5 100644
--- a/src/sage/cpython/type.pyx
+++ b/src/sage/cpython/type.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Type internals
"""
diff --git a/src/sage/cpython/wrapperdescr.pxd b/src/sage/cpython/wrapperdescr.pxd
index b6775860710..100d3a758bb 100644
--- a/src/sage/cpython/wrapperdescr.pxd
+++ b/src/sage/cpython/wrapperdescr.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from cpython.object cimport PyObject, PyTypeObject
cdef extern from *:
diff --git a/src/sage/cpython/wrapperdescr.pyx b/src/sage/cpython/wrapperdescr.pyx
index 776e4fe94a8..1e74353e798 100644
--- a/src/sage/cpython/wrapperdescr.pyx
+++ b/src/sage/cpython/wrapperdescr.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Slot wrappers
diff --git a/src/sage/crypto/__init__.py b/src/sage/crypto/__init__.py
index 107a9733a62..8d79ceb4559 100644
--- a/src/sage/crypto/__init__.py
+++ b/src/sage/crypto/__init__.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.crypto.lattice', 'gen_lattice')
diff --git a/src/sage/crypto/all.py b/src/sage/crypto/all.py
index 1ea6c8f20a7..e878d30ac8f 100644
--- a/src/sage/crypto/all.py
+++ b/src/sage/crypto/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
import sage.crypto.sbox
from sage.misc.persist import register_unpickle_override
register_unpickle_override('sage.crypto.mq.sbox', 'SBox', sage.crypto.sbox.SBox)
@@ -10,13 +11,14 @@
'ShiftCryptosystem',
'TranspositionCryptosystem',
'VigenereCryptosystem',
- ])
+ ])
lazy_import('sage.crypto.stream', ['LFSRCryptosystem',
'ShrinkingGeneratorCryptosystem',
- ])
+ ])
lazy_import('sage.crypto.lfsr', ['lfsr_sequence',
'lfsr_autocorrelation',
'lfsr_connection_polynomial',
- ])
+ ])
+del lazy_import
diff --git a/src/sage/crypto/block_cipher/all.py b/src/sage/crypto/block_cipher/all.py
index 0a5ec657f5d..822866ce5ec 100644
--- a/src/sage/crypto/block_cipher/all.py
+++ b/src/sage/crypto/block_cipher/all.py
@@ -1,5 +1,7 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.crypto.block_cipher.miniaes', 'MiniAES')
lazy_import('sage.crypto.block_cipher.sdes', 'SimplifiedDES')
lazy_import('sage.crypto.block_cipher.present', 'PRESENT')
+del lazy_import
diff --git a/src/sage/crypto/block_cipher/des.py b/src/sage/crypto/block_cipher/des.py
index 6799dd8e4c1..2af44a9473f 100644
--- a/src/sage/crypto/block_cipher/des.py
+++ b/src/sage/crypto/block_cipher/des.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
DES
diff --git a/src/sage/crypto/block_cipher/miniaes.py b/src/sage/crypto/block_cipher/miniaes.py
index 6eb9568b9fc..45cf03ad43c 100644
--- a/src/sage/crypto/block_cipher/miniaes.py
+++ b/src/sage/crypto/block_cipher/miniaes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.modules sage.rings.finite_rings
r"""
Mini-AES
diff --git a/src/sage/crypto/block_cipher/present.py b/src/sage/crypto/block_cipher/present.py
index d6f6146af3a..b69b54fb74d 100644
--- a/src/sage/crypto/block_cipher/present.py
+++ b/src/sage/crypto/block_cipher/present.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
PRESENT
diff --git a/src/sage/crypto/block_cipher/sdes.py b/src/sage/crypto/block_cipher/sdes.py
index 30b8cf2516c..04f8d373ef8 100644
--- a/src/sage/crypto/block_cipher/sdes.py
+++ b/src/sage/crypto/block_cipher/sdes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.rings.finite_rings
r"""
Simplified DES
diff --git a/src/sage/crypto/boolean_function.pxd b/src/sage/crypto/boolean_function.pxd
index 5703943123c..50ba8283b1c 100644
--- a/src/sage/crypto/boolean_function.pxd
+++ b/src/sage/crypto/boolean_function.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cdef inline unsigned int hamming_weight(unsigned int x) noexcept:
# valid for 32bits
x -= (x>>1) & 0x55555555UL # 0-2 in 2 bits
diff --git a/src/sage/crypto/boolean_function.pyx b/src/sage/crypto/boolean_function.pyx
index 70833c63dc3..0a5cb43da49 100644
--- a/src/sage/crypto/boolean_function.pyx
+++ b/src/sage/crypto/boolean_function.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
"""
Boolean functions
diff --git a/src/sage/crypto/cipher.py b/src/sage/crypto/cipher.py
index 14e9df6a504..0b5403415f7 100644
--- a/src/sage/crypto/cipher.py
+++ b/src/sage/crypto/cipher.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
"""
Ciphers
diff --git a/src/sage/crypto/classical.py b/src/sage/crypto/classical.py
index e88ad4924bb..8d7b820fc10 100644
--- a/src/sage/crypto/classical.py
+++ b/src/sage/crypto/classical.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Classical Cryptosystems
diff --git a/src/sage/crypto/classical_cipher.py b/src/sage/crypto/classical_cipher.py
index b775c426058..d071c537d13 100644
--- a/src/sage/crypto/classical_cipher.py
+++ b/src/sage/crypto/classical_cipher.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
"""
Classical Ciphers
diff --git a/src/sage/crypto/cryptosystem.py b/src/sage/crypto/cryptosystem.py
index 488b9a014b5..6524ecc0185 100644
--- a/src/sage/crypto/cryptosystem.py
+++ b/src/sage/crypto/cryptosystem.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Cryptosystems
diff --git a/src/sage/crypto/lattice.py b/src/sage/crypto/lattice.py
index 513730ff89f..a5d81c1bb7c 100644
--- a/src/sage/crypto/lattice.py
+++ b/src/sage/crypto/lattice.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules
"""
Hard Lattice Generator
diff --git a/src/sage/crypto/lfsr.py b/src/sage/crypto/lfsr.py
index 869bdcf5990..5b25196d732 100644
--- a/src/sage/crypto/lfsr.py
+++ b/src/sage/crypto/lfsr.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.finite_rings
r"""
Linear feedback shift register (LFSR) sequence commands
diff --git a/src/sage/crypto/lwe.py b/src/sage/crypto/lwe.py
index 40281916b19..5d70e237f5d 100644
--- a/src/sage/crypto/lwe.py
+++ b/src/sage/crypto/lwe.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs scipy sage.symbolic
"""
(Ring-)LWE oracle generators
diff --git a/src/sage/crypto/mq/__init__.py b/src/sage/crypto/mq/__init__.py
index bc96f8eb607..a0b767f60a5 100644
--- a/src/sage/crypto/mq/__init__.py
+++ b/src/sage/crypto/mq/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.crypto.mq.rijndael_gf', 'RijndaelGF')
lazy_import('sage.crypto.mq.sr', 'SR')
diff --git a/src/sage/crypto/mq/mpolynomialsystemgenerator.py b/src/sage/crypto/mq/mpolynomialsystemgenerator.py
index 4416d9ef7f6..31690a55e34 100644
--- a/src/sage/crypto/mq/mpolynomialsystemgenerator.py
+++ b/src/sage/crypto/mq/mpolynomialsystemgenerator.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Abstract base class for generators of polynomial systems
diff --git a/src/sage/crypto/mq/rijndael_gf.py b/src/sage/crypto/mq/rijndael_gf.py
index 55ae295f2cd..5192c742694 100644
--- a/src/sage/crypto/mq/rijndael_gf.py
+++ b/src/sage/crypto/mq/rijndael_gf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
Rijndael-GF
diff --git a/src/sage/crypto/mq/sbox.py b/src/sage/crypto/mq/sbox.py
index b05411fe0d3..ea2e3ea529e 100644
--- a/src/sage/crypto/mq/sbox.py
+++ b/src/sage/crypto/mq/sbox.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.crypto.sbox', ['SBox',
diff --git a/src/sage/crypto/mq/sr.py b/src/sage/crypto/mq/sr.py
index 5fcffef726d..80ff73420bb 100644
--- a/src/sage/crypto/mq/sr.py
+++ b/src/sage/crypto/mq/sr.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
Small Scale Variants of the AES (SR) Polynomial System Generator
diff --git a/src/sage/crypto/public_key/all.py b/src/sage/crypto/public_key/all.py
index 56416dd76b5..c19d3da50f3 100644
--- a/src/sage/crypto/public_key/all.py
+++ b/src/sage/crypto/public_key/all.py
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.crypto.public_key.blum_goldwasser', 'BlumGoldwasser')
+del lazy_import
diff --git a/src/sage/crypto/public_key/blum_goldwasser.py b/src/sage/crypto/public_key/blum_goldwasser.py
index 1d090673400..c759cc2784f 100644
--- a/src/sage/crypto/public_key/blum_goldwasser.py
+++ b/src/sage/crypto/public_key/blum_goldwasser.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Blum-Goldwasser Probabilistic Encryption
diff --git a/src/sage/crypto/sbox.pyx b/src/sage/crypto/sbox.pyx
index 322f7ca5f45..45f958ad0cc 100644
--- a/src/sage/crypto/sbox.pyx
+++ b/src/sage/crypto/sbox.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
S-Boxes and Their Algebraic Representations
diff --git a/src/sage/crypto/sboxes.py b/src/sage/crypto/sboxes.py
index 749593c401b..5f16103a641 100644
--- a/src/sage/crypto/sboxes.py
+++ b/src/sage/crypto/sboxes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
S-Boxes used in cryptographic schemes
diff --git a/src/sage/crypto/stream.py b/src/sage/crypto/stream.py
index 636f588ad97..a7d8760d7d5 100644
--- a/src/sage/crypto/stream.py
+++ b/src/sage/crypto/stream.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.rings.finite_rings
"""
Stream Cryptosystems
diff --git a/src/sage/crypto/stream_cipher.py b/src/sage/crypto/stream_cipher.py
index 7eb69e3c7b7..f2262ee43de 100644
--- a/src/sage/crypto/stream_cipher.py
+++ b/src/sage/crypto/stream_cipher.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.rings.finite_rings
"""
Stream Ciphers
diff --git a/src/sage/crypto/util.py b/src/sage/crypto/util.py
index 8590c83db5c..1610427b90e 100644
--- a/src/sage/crypto/util.py
+++ b/src/sage/crypto/util.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
"""
Utility Functions for Cryptography
diff --git a/src/sage/data_structures/all.py b/src/sage/data_structures/all.py
index eac1b4b8931..86dc95c5bd8 100644
--- a/src/sage/data_structures/all.py
+++ b/src/sage/data_structures/all.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-categories
-from sage.data_structures.bitset import Bitset, FrozenBitset
+from sage.data_structures.all__sagemath_categories import *
diff --git a/src/sage/data_structures/all__sagemath_categories.py b/src/sage/data_structures/all__sagemath_categories.py
new file mode 100644
index 00000000000..fe98668667d
--- /dev/null
+++ b/src/sage/data_structures/all__sagemath_categories.py
@@ -0,0 +1 @@
+from sage.data_structures.bitset import Bitset, FrozenBitset
diff --git a/src/sage/data_structures/all__sagemath_combinat.py b/src/sage/data_structures/all__sagemath_combinat.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/data_structures/all__sagemath_flint.py b/src/sage/data_structures/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/data_structures/binary_matrix.pxd b/src/sage/data_structures/binary_matrix.pxd
index a2eb8d709bb..6c4a8598797 100644
--- a/src/sage/data_structures/binary_matrix.pxd
+++ b/src/sage/data_structures/binary_matrix.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
A binary matrix datatype in Cython
diff --git a/src/sage/data_structures/binary_search.pxd b/src/sage/data_structures/binary_search.pxd
index 5eee088e8b8..88b025a3766 100644
--- a/src/sage/data_structures/binary_search.pxd
+++ b/src/sage/data_structures/binary_search.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-categories
cdef Py_ssize_t binary_search(Py_ssize_t* v, Py_ssize_t n, Py_ssize_t x, Py_ssize_t* ins) noexcept
-cdef Py_ssize_t binary_search0(Py_ssize_t* v, Py_ssize_t n, Py_ssize_t x) noexcept
\ No newline at end of file
+cdef Py_ssize_t binary_search0(Py_ssize_t* v, Py_ssize_t n, Py_ssize_t x) noexcept
diff --git a/src/sage/data_structures/binary_search.pyx b/src/sage/data_structures/binary_search.pyx
index 173affa5687..47d92ca3a16 100644
--- a/src/sage/data_structures/binary_search.pyx
+++ b/src/sage/data_structures/binary_search.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# We can probably get away with only having the mpz_binary_searches in here.
# I'm too scared to get rid of it at 2am though.
cdef Py_ssize_t binary_search(Py_ssize_t* v, Py_ssize_t n, Py_ssize_t x, Py_ssize_t* ins) noexcept:
diff --git a/src/sage/data_structures/bitset.pxd b/src/sage/data_structures/bitset.pxd
index 35343fa28ae..6f980b21837 100644
--- a/src/sage/data_structures/bitset.pxd
+++ b/src/sage/data_structures/bitset.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2008 Robert Bradshaw
#
diff --git a/src/sage/data_structures/bitset.pyx b/src/sage/data_structures/bitset.pyx
index 8a5e91c0a9a..8c3c28f281f 100644
--- a/src/sage/data_structures/bitset.pyx
+++ b/src/sage/data_structures/bitset.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Bitsets
diff --git a/src/sage/data_structures/bitset_base.pxd b/src/sage/data_structures/bitset_base.pxd
index df40d666d86..df569e4fddf 100644
--- a/src/sage/data_structures/bitset_base.pxd
+++ b/src/sage/data_structures/bitset_base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# distutils: depends = bitset_intrinsics.h
# distutils: libraries = gmp
"""
diff --git a/src/sage/data_structures/bitset_base.pyx b/src/sage/data_structures/bitset_base.pyx
index 182812a891f..bb94d74e131 100644
--- a/src/sage/data_structures/bitset_base.pyx
+++ b/src/sage/data_structures/bitset_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Few functions from ``bitset_base.pxd`` that are not inlined.
"""
diff --git a/src/sage/data_structures/blas_dict.pxd b/src/sage/data_structures/blas_dict.pxd
index 7464c0daba8..b40130c88d5 100644
--- a/src/sage/data_structures/blas_dict.pxd
+++ b/src/sage/data_structures/blas_dict.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cpdef int iaxpy(a, dict X, dict Y, bint remove_zeros=*, bint factor_on_left=*) except -1
cpdef dict axpy(a, dict X, dict Y, bint factor_on_left=*)
cpdef dict negate(dict D)
diff --git a/src/sage/data_structures/blas_dict.pyx b/src/sage/data_structures/blas_dict.pyx
index c13cab2aab9..b53b102377a 100644
--- a/src/sage/data_structures/blas_dict.pyx
+++ b/src/sage/data_structures/blas_dict.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Basic Linear Algebra Subroutines on dictionaries
diff --git a/src/sage/data_structures/bounded_integer_sequences.pxd b/src/sage/data_structures/bounded_integer_sequences.pxd
index c87fc914921..0abfd7d3082 100644
--- a/src/sage/data_structures/bounded_integer_sequences.pxd
+++ b/src/sage/data_structures/bounded_integer_sequences.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.gmp.types cimport *
from sage.data_structures.bitset cimport *
diff --git a/src/sage/data_structures/bounded_integer_sequences.pyx b/src/sage/data_structures/bounded_integer_sequences.pyx
index 40638ab399c..faed83a1d5e 100644
--- a/src/sage/data_structures/bounded_integer_sequences.pyx
+++ b/src/sage/data_structures/bounded_integer_sequences.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Sequences of bounded integers
diff --git a/src/sage/data_structures/list_of_pairs.pxd b/src/sage/data_structures/list_of_pairs.pxd
index 4dbb57c201c..e16c6ae628c 100644
--- a/src/sage/data_structures/list_of_pairs.pxd
+++ b/src/sage/data_structures/list_of_pairs.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cimport cython
cdef struct pair_s:
diff --git a/src/sage/data_structures/list_of_pairs.pyx b/src/sage/data_structures/list_of_pairs.pyx
index 258320353a0..a8e213aea36 100644
--- a/src/sage/data_structures/list_of_pairs.pyx
+++ b/src/sage/data_structures/list_of_pairs.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
A data structure to store lists of integer pairs of large size.
"""
diff --git a/src/sage/data_structures/mutable_poset.py b/src/sage/data_structures/mutable_poset.py
index 03b5a7019c2..852a29cd534 100644
--- a/src/sage/data_structures/mutable_poset.py
+++ b/src/sage/data_structures/mutable_poset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Mutable Poset
diff --git a/src/sage/data_structures/sparse_bitset.pxd b/src/sage/data_structures/sparse_bitset.pxd
index 9b95c55675b..9bebdb48b22 100644
--- a/src/sage/data_structures/sparse_bitset.pxd
+++ b/src/sage/data_structures/sparse_bitset.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Sparse bitset.
diff --git a/src/sage/data_structures/stream.py b/src/sage/data_structures/stream.py
index c67c2b3de04..0841c040c75 100644
--- a/src/sage/data_structures/stream.py
+++ b/src/sage/data_structures/stream.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Streams
diff --git a/src/sage/databases/all.py b/src/sage/databases/all.py
index a6571c7a5df..1f1e9ace1d8 100644
--- a/src/sage/databases/all.py
+++ b/src/sage/databases/all.py
@@ -5,7 +5,7 @@
* CremonaDatabase() - Cremona's tables of elliptic curves and related data.
- * findstat -- The FindStat database (http://www.findstat.org/).
+ * findstat -- The FindStat database (https://www.findstat.org/).
* JonesDatabase() -- returns the John Jones table of number fields
with bounded ramification and degree <= 6.
@@ -48,7 +48,7 @@
# ****************************************************************************
from sage.misc.lazy_import import lazy_import
-from .sql_db import SQLQuery, SQLDatabase
+from sage.databases.sql_db import SQLQuery, SQLDatabase
lazy_import('sage.databases.conway', 'ConwayPolynomials')
@@ -67,16 +67,17 @@
lazy_import('sage.databases.odlyzko', 'zeta_zeros')
-from .db_modular_polynomials import \
- ClassicalModularPolynomialDatabase, \
- DedekindEtaModularPolynomialDatabase, \
- DedekindEtaModularCorrespondenceDatabase, \
- AtkinModularPolynomialDatabase, \
- AtkinModularCorrespondenceDatabase
+from sage.databases.db_modular_polynomials import \
+ ClassicalModularPolynomialDatabase, \
+ DedekindEtaModularPolynomialDatabase, \
+ DedekindEtaModularCorrespondenceDatabase, \
+ AtkinModularPolynomialDatabase, \
+ AtkinModularCorrespondenceDatabase
-from .db_class_polynomials import \
- HilbertClassPolynomialDatabase
+from sage.databases.db_class_polynomials import \
+ HilbertClassPolynomialDatabase
lazy_import('sage.databases.cunningham_tables', 'cunningham_prime_factors')
lazy_import('sage.databases.findstat', ['findstat', 'findmap'])
+del lazy_import
diff --git a/src/sage/databases/all__sagemath_graphs.py b/src/sage/databases/all__sagemath_graphs.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/databases/conway.py b/src/sage/databases/conway.py
index b1f76292ce8..393f8428468 100644
--- a/src/sage/databases/conway.py
+++ b/src/sage/databases/conway.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Frank Lübeck's tables of Conway polynomials over finite fields
"""
diff --git a/src/sage/databases/cubic_hecke_db.py b/src/sage/databases/cubic_hecke_db.py
index ad3dc8cd399..c4c2eab0f8c 100644
--- a/src/sage/databases/cubic_hecke_db.py
+++ b/src/sage/databases/cubic_hecke_db.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Cubic Hecke database
diff --git a/src/sage/databases/findstat.py b/src/sage/databases/findstat.py
index 062bde84b74..3b27e18a06d 100644
--- a/src/sage/databases/findstat.py
+++ b/src/sage/databases/findstat.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
FindStat - the search engine for combinatorial statistics and maps
diff --git a/src/sage/databases/knotinfo_db.py b/src/sage/databases/knotinfo_db.py
index 8817a304d85..251ffb224fe 100644
--- a/src/sage/databases/knotinfo_db.py
+++ b/src/sage/databases/knotinfo_db.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
r"""
KnotInfo database
diff --git a/src/sage/databases/oeis.py b/src/sage/databases/oeis.py
index 040a2460289..83024b84db2 100644
--- a/src/sage/databases/oeis.py
+++ b/src/sage/databases/oeis.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
The On-Line Encyclopedia of Integer Sequences (OEIS)
diff --git a/src/sage/databases/sql_db.py b/src/sage/databases/sql_db.py
index ebc6d5f0eea..cae2b9c8430 100644
--- a/src/sage/databases/sql_db.py
+++ b/src/sage/databases/sql_db.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Relational (sqlite) Databases Module
diff --git a/src/sage/doctest/__init__.py b/src/sage/doctest/__init__.py
index 95280f2c603..d0892b4ed55 100644
--- a/src/sage/doctest/__init__.py
+++ b/src/sage/doctest/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# This flag gets set to True by sage.doctest.forker.init_sage at the
# beginning of each doctest run.
DOCTEST_MODE = False
diff --git a/src/sage/doctest/all.py b/src/sage/doctest/all.py
index bc363e7830c..626c4fb42b1 100644
--- a/src/sage/doctest/all.py
+++ b/src/sage/doctest/all.py
@@ -1,2 +1,4 @@
+# sage_setup: distribution = sagemath-repl
from sage.misc.lazy_import import lazy_import
lazy_import('sage.doctest.control', 'run_doctests')
+del lazy_import
diff --git a/src/sage/doctest/control.py b/src/sage/doctest/control.py
index 38c99e6dd72..602b5276543 100644
--- a/src/sage/doctest/control.py
+++ b/src/sage/doctest/control.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Classes involved in doctesting
@@ -1102,9 +1103,7 @@ def source_baseline(self, source):
EXAMPLES::
sage: from sage.doctest.control import DocTestDefaults, DocTestController
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
+ sage: filename = sage.doctest.util.__file__
sage: DD = DocTestDefaults()
sage: DC = DocTestController(DD, [filename])
sage: DC.expand_files_into_sources()
diff --git a/src/sage/doctest/external.py b/src/sage/doctest/external.py
index 85eefc27119..5dc1ed7b823 100644
--- a/src/sage/doctest/external.py
+++ b/src/sage/doctest/external.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Detecting external software
diff --git a/src/sage/doctest/fixtures.py b/src/sage/doctest/fixtures.py
index 9fbfdf86db9..01f931727df 100644
--- a/src/sage/doctest/fixtures.py
+++ b/src/sage/doctest/fixtures.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Fixtures to help testing functionality
diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py
index 42598a761c9..48b991316dd 100644
--- a/src/sage/doctest/forker.py
+++ b/src/sage/doctest/forker.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Processes for running doctests
@@ -575,11 +576,10 @@ def _run(self, test, compileflags, out):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: DTR.run(doctests[0], clear_globs=False) # indirect doctest
TestResults(failed=0, attempted=4)
@@ -876,12 +876,11 @@ def run(self, test, compileflags=0, out=None, clear_globs=True):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,
....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: DTR.run(doctests[0], clear_globs=False)
TestResults(failed=0, attempted=4)
@@ -1021,11 +1020,10 @@ def update_digests(self, example):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os, hashlib
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: DTR.running_global_digest.hexdigest()
'd41d8cd98f00b204e9800998ecf8427e'
@@ -1083,12 +1081,11 @@ def compile_and_execute(self, example, compiler, globs):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.util import RecordingDict
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os, hashlib
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,
....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
sage: DTR.running_doctest_digest = hashlib.md5()
- sage: filename = os.path.join(SAGE_SRC, 'sage', 'doctest', 'forker.py')
+ sage: filename = sage.doctest.forker.__file__
sage: FDS = FileDocTestSource(filename, DD)
sage: globs = RecordingDict(globals())
sage: 'doctest_var' in globs
@@ -1203,16 +1200,15 @@ def _failure_header(self, test, example, message='Failed example:'):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: print(DTR._failure_header(doctests[0], ex))
**********************************************************************
- File ".../sage/doctest/forker.py", line 11, in sage.doctest.forker
+ File ".../sage/doctest/forker.py", line 12, in sage.doctest.forker
Failed example:
doctest_var = 42; doctest_var^2
@@ -1222,7 +1218,7 @@ def _failure_header(self, test, example, message='Failed example:'):
sage: import doctest
sage: print(doctest.DocTestRunner._failure_header(DTR, doctests[0], ex))
**********************************************************************
- File ".../sage/doctest/forker.py", line 11, in sage.doctest.forker
+ File ".../sage/doctest/forker.py", line 12, in sage.doctest.forker
Failed example:
doctest_var = Integer(42); doctest_var**Integer(2)
@@ -1231,7 +1227,7 @@ def _failure_header(self, test, example, message='Failed example:'):
sage: print(DTR._failure_header(doctests[0], ex, message='Hello there!'))
**********************************************************************
- File ".../sage/doctest/forker.py", line 11, in sage.doctest.forker
+ File ".../sage/doctest/forker.py", line 12, in sage.doctest.forker
Hello there!
doctest_var = 42; doctest_var^2
@@ -1315,15 +1311,14 @@ def report_start(self, out, test, example):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: DTR.report_start(sys.stdout.write, doctests[0], ex)
- Trying (line 11): doctest_var = 42; doctest_var^2
+ Trying (line 12): doctest_var = 42; doctest_var^2
Expecting:
1764
"""
@@ -1369,11 +1364,10 @@ def report_success(self, out, test, example, got, *, check_duration=0):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
sage: from sage.misc.timing import walltime
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: ex.walltime = 0.0
@@ -1410,17 +1404,16 @@ def report_failure(self, out, test, example, got, globs):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: DTR.no_failure_yet = True
sage: DTR.report_failure(sys.stdout.write, doctests[0], ex, 'BAD ANSWER\n', {})
**********************************************************************
- File ".../sage/doctest/forker.py", line 11, in sage.doctest.forker
+ File ".../sage/doctest/forker.py", line 12, in sage.doctest.forker
Failed example:
doctest_var = 42; doctest_var^2
Expected:
@@ -1544,17 +1537,16 @@ def report_overtime(self, out, test, example, got, *, check_duration=0):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
sage: from sage.misc.timing import walltime
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: ex.walltime = 1.23
sage: DTR.report_overtime(sys.stdout.write, doctests[0], ex, 'BAD ANSWER\n', check_duration=2.34)
**********************************************************************
- File ".../sage/doctest/forker.py", line 11, in sage.doctest.forker
+ File ".../sage/doctest/forker.py", line 12, in sage.doctest.forker
Warning, slow doctest:
doctest_var = 42; doctest_var^2
Test ran for 1.23 s, check ran for 2.34 s
@@ -1672,11 +1664,10 @@ def update_results(self, D):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.sources import FileDocTestSource, DictAsObject
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
- sage: from sage.env import SAGE_SRC
sage: import doctest, sys, os
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DD)
sage: doctests, extras = FDS.create_doctests(globals())
sage: from sage.doctest.util import Timer
sage: T = Timer().start()
@@ -1754,7 +1745,6 @@ def serial_dispatch(self):
sage: from sage.doctest.forker import DocTestDispatcher
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.util import Timer
- sage: from sage.env import SAGE_SRC
sage: import os
sage: homset = os.path.join(SAGE_SRC, 'sage', 'rings', 'homset.py')
sage: ideal = os.path.join(SAGE_SRC, 'sage', 'rings', 'ideal.py')
@@ -1801,7 +1791,6 @@ def parallel_dispatch(self):
sage: from sage.doctest.forker import DocTestDispatcher
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.util import Timer
- sage: from sage.env import SAGE_SRC
sage: import os
sage: crem = os.path.join(SAGE_SRC, 'sage', 'databases', 'cremona.py')
sage: bigo = os.path.join(SAGE_SRC, 'sage', 'rings', 'big_oh.py')
@@ -2136,7 +2125,6 @@ def dispatch(self):
sage: from sage.doctest.forker import DocTestDispatcher
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.util import Timer
- sage: from sage.env import SAGE_SRC
sage: import os
sage: freehom = os.path.join(SAGE_SRC, 'sage', 'modules', 'free_module_homspace.py')
sage: bigo = os.path.join(SAGE_SRC, 'sage', 'rings', 'big_oh.py')
@@ -2191,10 +2179,9 @@ class should be accessed by the child process.
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
+ sage: filename = sage.doctest.util.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: W = DocTestWorker(FDS, DD)
sage: W.start()
sage: DC = DocTestController(DD, filename)
@@ -2316,10 +2303,9 @@ def start(self):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
+ sage: filename = sage.doctest.util.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: W = DocTestWorker(FDS, DD)
sage: W.start()
sage: try:
@@ -2356,10 +2342,9 @@ def read_messages(self):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
+ sage: filename = sage.doctest.util.__file__
sage: DD = DocTestDefaults(verbose=True,nthreads=2)
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: W = DocTestWorker(FDS, DD)
sage: W.start()
sage: while W.rmessages is not None:
@@ -2391,10 +2376,9 @@ def save_result_output(self):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
+ sage: filename = sage.doctest.util.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: W = DocTestWorker(FDS, DD)
sage: W.start()
sage: W.join()
@@ -2452,10 +2436,9 @@ def kill(self):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','tests','99seconds.rst')
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
We set up the worker to start by blocking ``SIGQUIT``, such that
killing will fail initially::
@@ -2522,11 +2505,10 @@ class DocTestTask():
sage: from sage.doctest.forker import DocTestTask
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults, DocTestController
- sage: from sage.env import SAGE_SRC
sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
+ sage: filename = sage.doctest.sources.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: DTT = DocTestTask(FDS)
sage: DC = DocTestController(DD,[filename])
sage: ntests, results = DTT(options=DD)
@@ -2545,10 +2527,9 @@ def __init__(self, source):
sage: from sage.doctest.forker import DocTestTask
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults
- sage: from sage.env import SAGE_SRC
sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: DocTestTask(FDS)
"""
@@ -2588,11 +2569,10 @@ def __call__(self, options, outtmpfile=None, msgfile=None, result_queue=None, *,
sage: from sage.doctest.forker import DocTestTask
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults, DocTestController
- sage: from sage.env import SAGE_SRC
sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','parsing.py')
+ sage: filename = sage.doctest.parsing.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: DTT = DocTestTask(FDS)
sage: DC = DocTestController(DD, [filename])
sage: ntests, runner = DTT(options=DD)
diff --git a/src/sage/doctest/parsing.py b/src/sage/doctest/parsing.py
index 8c70c723b90..06d504f6d41 100644
--- a/src/sage/doctest/parsing.py
+++ b/src/sage/doctest/parsing.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
Parsing docstrings
@@ -782,10 +782,8 @@ class OriginalSource():
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: ex.sage_source
@@ -809,10 +807,8 @@ def __init__(self, example):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: from sage.doctest.parsing import OriginalSource
@@ -827,10 +823,8 @@ def __enter__(self):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: from sage.doctest.parsing import OriginalSource
@@ -847,10 +841,8 @@ def __exit__(self, *args):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.control import DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.forker.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, extras = FDS.create_doctests(globals())
sage: ex = doctests[0].examples[0]
sage: from sage.doctest.parsing import OriginalSource
diff --git a/src/sage/doctest/reporting.py b/src/sage/doctest/reporting.py
index 1161bafd31c..c1ac8a6c7b8 100644
--- a/src/sage/doctest/reporting.py
+++ b/src/sage/doctest/reporting.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Reporting doctest results
@@ -109,10 +109,8 @@ def __init__(self, controller):
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','reporting.py')
- sage: DC = DocTestController(DocTestDefaults(),[filename])
+ sage: filename = sage.doctest.reporting.__file__
+ sage: DC = DocTestController(DocTestDefaults(), [filename])
sage: DTR = DocTestReporter(DC)
"""
self.controller = controller
@@ -133,10 +131,8 @@ def were_doctests_with_optional_tag_run(self, tag):
sage: from sage.doctest.reporting import DocTestReporter
sage: from sage.doctest.control import DocTestController, DocTestDefaults
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','reporting.py')
- sage: DC = DocTestController(DocTestDefaults(),[filename])
+ sage: filename = sage.doctest.reporting.__file__
+ sage: DC = DocTestController(DocTestDefaults(), [filename])
sage: DTR = DocTestReporter(DC)
::
@@ -150,7 +146,7 @@ def were_doctests_with_optional_tag_run(self, tag):
``latex`` are run by default since :issue:`32174`::
sage: filename = os.path.join(SAGE_SRC,'sage','misc','latex.py')
- sage: DC = DocTestController(DocTestDefaults(),[filename])
+ sage: DC = DocTestController(DocTestDefaults(), [filename])
sage: DTR = DocTestReporter(DC)
sage: DTR.were_doctests_with_optional_tag_run('latex') # optional - latex
True
@@ -178,10 +174,9 @@ def report_head(self, source, fail_msg=None):
sage: from sage.doctest.control import DocTestController, DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.forker import SageDocTestRunner
- sage: from sage.env import SAGE_SRC
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','reporting.py')
+ sage: filename = sage.doctest.reporting.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
sage: DC = DocTestController(DD, [filename])
sage: DTR = DocTestReporter(DC)
sage: print(DTR.report_head(FDS))
@@ -261,12 +256,11 @@ def report(self, source, timeout, return_code, results, output, pid=None):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.parsing import SageOutputChecker
sage: from sage.doctest.util import Timer
- sage: from sage.env import SAGE_SRC
- sage: import os, sys, doctest
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','reporting.py')
+ sage: import doctest
+ sage: filename = sage.doctest.reporting.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
- sage: DC = DocTestController(DD,[filename])
+ sage: FDS = FileDocTestSource(filename, DD)
+ sage: DC = DocTestController(DD, [filename])
sage: DTR = DocTestReporter(DC)
You can report a timeout::
@@ -339,13 +333,15 @@ def report(self, source, timeout, return_code, results, output, pid=None):
Or tell the user that everything succeeded::
sage: doctests, extras = FDS.create_doctests(globals())
- sage: runner = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,
- ....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ sage: runner = SageDocTestRunner(
+ ....: SageOutputChecker(), verbose=False, sage_options=DD,
+ ....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
sage: Timer().start().stop().annotate(runner)
sage: D = DictAsObject({'err':None})
sage: runner.update_results(D)
0
- sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D), "Good tests")
+ sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D),
+ ....: "Good tests")
[... tests, ... s]
sage: DTR.stats
{'sage.doctest.reporting': {'ntests': ..., 'walltime': ...}}
@@ -355,7 +351,8 @@ def report(self, source, timeout, return_code, results, output, pid=None):
sage: runner.failures = 1
sage: runner.update_results(D)
1
- sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D), "Doctest output including the failure...")
+ sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D),
+ ....: "Doctest output including the failure...")
[... tests, 1 failure, ... s]
If the user has requested that we report on skipped doctests,
@@ -365,7 +362,7 @@ def report(self, source, timeout, return_code, results, output, pid=None):
sage: from collections import defaultdict
sage: optionals = defaultdict(int)
sage: optionals['magma'] = 5; optionals['long time'] = 4; optionals[''] = 1; optionals['not tested'] = 2
- sage: D = DictAsObject(dict(err=None,optionals=optionals))
+ sage: D = DictAsObject(dict(err=None, optionals=optionals))
sage: runner.failures = 0
sage: runner.update_results(D)
0
@@ -391,20 +388,23 @@ def report(self, source, timeout, return_code, results, output, pid=None):
sage: DC = DocTestController(DD, [filename])
sage: DTR = DocTestReporter(DC)
sage: doctests, extras = FDS.create_doctests(globals())
- sage: runner = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,
- ....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ sage: runner = SageDocTestRunner(
+ ....: SageOutputChecker(), verbose=False, sage_options=DD,
+ ....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
sage: Timer().start().stop().annotate(runner)
sage: D = DictAsObject({'err':None})
sage: runner.update_results(D)
0
- sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D), "Good tests")
+ sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D),
+ ....: "Good tests")
However, failures are still output in the errors-only mode::
sage: runner.failures = 1
sage: runner.update_results(D)
1
- sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D), "Failed test")
+ sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D),
+ ....: "Failed test")
[... tests, 1 failure, ... s]
"""
log = self.controller.log
@@ -598,12 +598,11 @@ def finalize(self):
sage: from sage.doctest.forker import SageDocTestRunner
sage: from sage.doctest.parsing import SageOutputChecker
sage: from sage.doctest.util import Timer
- sage: from sage.env import SAGE_SRC
- sage: import os, sys, doctest
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','reporting.py')
+ sage: import doctest
+ sage: filename = sage.doctest.reporting.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
- sage: DC = DocTestController(DD,[filename])
+ sage: FDS = FileDocTestSource(filename, DD)
+ sage: DC = DocTestController(DD, [filename])
sage: DTR = DocTestReporter(DC)
Now we pretend to run some doctests::
@@ -621,19 +620,23 @@ def finalize(self):
Output before bad exit
**********************************************************************
sage: doctests, extras = FDS.create_doctests(globals())
- sage: runner = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ sage: runner = SageDocTestRunner(
+ ....: SageOutputChecker(), verbose=False, sage_options=DD,
+ ....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
sage: t = Timer().start().stop()
sage: t.annotate(runner)
sage: DC.timer = t
sage: D = DictAsObject({'err':None})
sage: runner.update_results(D)
0
- sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D), "Good tests")
+ sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D),
+ ....: "Good tests")
[... tests, ... s]
sage: runner.failures = 1
sage: runner.update_results(D)
1
- sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D), "Doctest output including the failure...")
+ sage: DTR.report(FDS, False, 0, (sum([len(t.examples) for t in doctests]), D),
+ ....: "Doctest output including the failure...")
[... tests, 1 failure, ... s]
Now we can show the output of finalize::
diff --git a/src/sage/doctest/sources.py b/src/sage/doctest/sources.py
index fdad2749083..61165b62aeb 100644
--- a/src/sage/doctest/sources.py
+++ b/src/sage/doctest/sources.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Classes for sources of doctests
@@ -82,11 +83,10 @@ def get_basename(path):
EXAMPLES::
sage: from sage.doctest.sources import get_basename
- sage: from sage.env import SAGE_SRC
sage: import os
- sage: get_basename(os.path.join(SAGE_SRC, 'sage', 'doctest', 'sources.py'))
+ sage: get_basename(sage.doctest.sources.__file__)
'sage.doctest.sources'
- sage: get_basename(os.path.join(SAGE_SRC, 'sage', 'structure', 'element.pxd'))
+ sage: get_basename(os.path.join(sage.structure.__path__[0], 'element.pxd'))
'sage.structure.element.pxd'
"""
if path is None:
@@ -140,10 +140,8 @@ def __init__(self, options):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: TestSuite(FDS).run()
"""
self.options = options
@@ -156,12 +154,10 @@ def __eq__(self, other):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
+ sage: filename = sage.doctest.sources.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
- sage: FDS2 = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
+ sage: FDS2 = FileDocTestSource(filename, DD)
sage: FDS == FDS2
True
"""
@@ -177,12 +173,10 @@ def __ne__(self, other):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
+ sage: filename = sage.doctest.sources.__file__
sage: DD = DocTestDefaults()
- sage: FDS = FileDocTestSource(filename,DD)
- sage: FDS2 = FileDocTestSource(filename,DD)
+ sage: FDS = FileDocTestSource(filename, DD)
+ sage: FDS2 = FileDocTestSource(filename, DD)
sage: FDS != FDS2
False
"""
@@ -217,10 +211,8 @@ def _process_doc(self, doctests, doc, namespace, start):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.parsing import SageDocTestParser
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.util.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, _ = FDS.create_doctests({})
sage: manual_doctests = []
sage: for dt in doctests:
@@ -291,10 +283,8 @@ def _create_doctests(self, namespace, tab_okay=None):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.util import NestedName
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS.qualified_name = NestedName('sage.doctest.sources')
sage: doctests, extras = FDS._create_doctests({})
sage: len(doctests)
@@ -523,10 +513,8 @@ class FileDocTestSource(DocTestSource):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS.basename
'sage.doctest.sources'
@@ -539,7 +527,7 @@ class FileDocTestSource(DocTestSource):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = tmp_filename(ext=".txtt")
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
Traceback (most recent call last):
...
ValueError: unknown extension for the file to test (=...txtt),
@@ -554,10 +542,8 @@ def __init__(self, path, options):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults(randorder=0))
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults(randorder=0))
sage: FDS.options.randorder
0
"""
@@ -645,16 +631,17 @@ def printpath(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
sage: import os
- sage: root = os.path.realpath(os.path.join(SAGE_SRC,'sage'))
- sage: filename = os.path.join(root,'doctest','sources.py')
+ sage: filename = os.path.realpath(sage.doctest.sources.__file__)
+ sage: root = os.path.join(os.path.dirname(filename), '..')
sage: cwd = os.getcwd()
sage: os.chdir(root)
- sage: FDS = FileDocTestSource(filename,DocTestDefaults(randorder=0,abspath=False))
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults(randorder=0,
+ ....: abspath=False))
sage: FDS.printpath
'doctest/sources.py'
- sage: FDS = FileDocTestSource(filename,DocTestDefaults(randorder=0,abspath=True))
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults(randorder=0,
+ ....: abspath=True))
sage: FDS.printpath
'.../sage/doctest/sources.py'
sage: os.chdir(cwd)
@@ -677,10 +664,8 @@ def basename(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
sage: filename = os.path.join(SAGE_SRC,'sage','rings','integer.pyx')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS.basename
'sage.rings.integer'
"""
@@ -700,7 +685,6 @@ def in_lib(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
sage: import os
sage: filename = os.path.join(SAGE_SRC, 'sage', 'rings', 'integer.pyx')
sage: FDS = FileDocTestSource(filename, DocTestDefaults())
@@ -713,10 +697,10 @@ def in_lib(self):
You can override the default::
- sage: FDS = FileDocTestSource("hello_world.py",DocTestDefaults())
+ sage: FDS = FileDocTestSource("hello_world.py", DocTestDefaults())
sage: FDS.in_lib
False
- sage: FDS = FileDocTestSource("hello_world.py",DocTestDefaults(force_lib=True))
+ sage: FDS = FileDocTestSource("hello_world.py", DocTestDefaults(force_lib=True))
sage: FDS.in_lib
True
"""
@@ -732,9 +716,7 @@ def file_optional_tags(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC, 'sage', 'repl', 'user_globals.py')
+ sage: filename = sage.repl.user_globals.__file__
sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS.file_optional_tags
{'sage.modules': None}
@@ -760,10 +742,8 @@ def create_doctests(self, namespace):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, extras = FDS.create_doctests(globals())
sage: len(doctests)
43
@@ -774,8 +754,8 @@ def create_doctests(self, namespace):
sage: doctests[20].name
'sage.doctest.sources.FileDocTestSource.create_doctests'
- sage: doctests[20].examples[10].source
- 'doctests[Integer(20)].examples[Integer(10)].source\n'
+ sage: doctests[20].examples[8].source
+ 'doctests[Integer(20)].examples[Integer(8)].source\n'
TESTS:
@@ -787,7 +767,7 @@ def create_doctests(self, namespace):
sage: gp.get_precision() == 38 # needs sage.libs.pari
False # 32-bit
True # 64-bit
- sage: ex = doctests[20].examples[13]
+ sage: ex = doctests[20].examples[11]
sage: ((bitness == '64' and ex.want == 'True \n') # needs sage.libs.pari
....: or (bitness == '32' and ex.want == 'False \n'))
True
@@ -835,7 +815,6 @@ def _test_enough_doctests(self, check_extras=True, verbose=True):
sage: # not tested (because the output will change when source files are changed)
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
sage: cwd = os.getcwd()
sage: os.chdir(SAGE_SRC)
sage: import itertools
@@ -942,10 +921,8 @@ def parse_docstring(self, docstring, namespace, start):
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.parsing import SageDocTestParser
sage: from sage.doctest.util import NestedName
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.util.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: doctests, _ = FDS.create_doctests({})
sage: for dt in doctests:
....: FDS.qualified_name = dt.name
@@ -964,10 +941,8 @@ class PythonSource(SourceLanguage):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: type(FDS)
"""
@@ -982,10 +957,8 @@ def _init(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.last_indent
-1
@@ -1019,10 +992,8 @@ def _update_quotetype(self, line):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS._update_quotetype('\"\"\"'); print(" ".join(list(FDS.quotetype)))
" " "
@@ -1116,10 +1087,8 @@ def starting_docstring(self, line):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.util import NestedName
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.starting_docstring("r'''")
<...Match object...>
@@ -1185,7 +1154,7 @@ def ending_docstring(self, line):
OUTPUT:
- an object that, when evaluated in a boolean context, gives
- True or False depending on whether the input line marks the
+ ``True`` or ``False`` depending on whether the input line marks the
end of a docstring.
EXAMPLES::
@@ -1193,10 +1162,8 @@ def ending_docstring(self, line):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: from sage.doctest.util import NestedName
- sage: from sage.env import SAGE_SRC
- sage: import os
- sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: filename = sage.doctest.sources.__file__
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.quotetype = "'''"
sage: FDS.ending_docstring("'''")
@@ -1229,7 +1196,8 @@ def _neutralize_doctests(self, reindent):
sage: from sage.doctest.sources import StringDocTestSource, PythonSource
sage: from sage.structure.dynamic_class import dynamic_class
sage: s = "'''\n sage: 2 + 2\n 4\n'''"
- sage: PythonStringSource = dynamic_class('PythonStringSource',(StringDocTestSource, PythonSource))
+ sage: PythonStringSource = dynamic_class('PythonStringSource',
+ ....: (StringDocTestSource, PythonSource))
sage: PSS = PythonStringSource('', s, DocTestDefaults(), 'runtime')
sage: print(PSS._neutralize_doctests(0))
'''
@@ -1264,7 +1232,7 @@ class TexSource(SourceLanguage):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_paper.tex"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: type(FDS)
"""
@@ -1280,7 +1248,7 @@ def _init(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_paper.tex"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.skipping
False
@@ -1312,7 +1280,7 @@ def starting_docstring(self, line):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_paper.tex"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
We start docstrings with \begin{verbatim} or \begin{lstlisting}::
@@ -1391,7 +1359,7 @@ def ending_docstring(self, line, check_skip=True):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_paper.tex"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.ending_docstring(r"\end{verbatim}")
True
@@ -1442,7 +1410,7 @@ class RestSource(SourceLanguage):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_doc.rst"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: type(FDS)
"""
@@ -1458,7 +1426,7 @@ def _init(self):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_doc.rst"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.link_all
False
@@ -1490,7 +1458,7 @@ def starting_docstring(self, line):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_doc.rst"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.starting_docstring("Hello world::")
True
@@ -1548,7 +1516,7 @@ def ending_docstring(self, line):
sage: from sage.doctest.control import DocTestDefaults
sage: from sage.doctest.sources import FileDocTestSource
sage: filename = "sage_doc.rst"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS._init()
sage: FDS.starting_docstring("Hello world::")
True
@@ -1594,7 +1562,7 @@ def parse_docstring(self, docstring, namespace, start):
sage: from sage.doctest.parsing import SageDocTestParser
sage: from sage.doctest.util import NestedName
sage: filename = "sage_doc.rst"
- sage: FDS = FileDocTestSource(filename,DocTestDefaults())
+ sage: FDS = FileDocTestSource(filename, DocTestDefaults())
sage: FDS.parser = SageDocTestParser(set(['sage']))
sage: FDS.qualified_name = NestedName('sage_doc')
sage: s = "Some text::\n\n def example_python_function(a, \
diff --git a/src/sage/doctest/test.py b/src/sage/doctest/test.py
index cb2cecc0b8b..4907d30d58d 100644
--- a/src/sage/doctest/test.py
+++ b/src/sage/doctest/test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Test the doctesting framework
diff --git a/src/sage/doctest/util.py b/src/sage/doctest/util.py
index b68068a0ce1..3fe9d3408bd 100644
--- a/src/sage/doctest/util.py
+++ b/src/sage/doctest/util.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Utility functions
diff --git a/src/sage/dynamics/all.py b/src/sage/dynamics/all.py
index e5c553a3d54..fddc4e83a98 100644
--- a/src/sage/dynamics/all.py
+++ b/src/sage/dynamics/all.py
@@ -20,14 +20,22 @@
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
+from sage.dynamics.all__sagemath_schemes import *
+
+try:
+ from sage.dynamics.all__sagemath_symbolics import *
+except ImportError:
+ pass
+
from sage.misc.lazy_import import lazy_import
-from sage.dynamics.arithmetic_dynamics.all import *
-from sage.dynamics.complex_dynamics.all import *
from sage.dynamics.cellular_automata.all import *
# Discrete dynamical systems
lazy_import('sage.dynamics.finite_dynamical_system',
['DiscreteDynamicalSystem'])
-lazy_import('sage.dynamics', 'finite_dynamical_system_catalog', 'finite_dynamical_systems')
+lazy_import('sage.dynamics', 'finite_dynamical_system_catalog',
+ 'finite_dynamical_systems')
+del lazy_import
+del install_doc
diff --git a/src/sage/dynamics/all__sagemath_schemes.py b/src/sage/dynamics/all__sagemath_schemes.py
new file mode 100644
index 00000000000..b1eac4ead2f
--- /dev/null
+++ b/src/sage/dynamics/all__sagemath_schemes.py
@@ -0,0 +1 @@
+from sage.dynamics.arithmetic_dynamics.all import *
diff --git a/src/sage/dynamics/all__sagemath_symbolics.py b/src/sage/dynamics/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..1bffe1dffa6
--- /dev/null
+++ b/src/sage/dynamics/all__sagemath_symbolics.py
@@ -0,0 +1,5 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.dynamics.complex_dynamics.mandel_julia',
+ ["mandelbrot_plot", "external_ray", "kneading_sequence", "julia_plot"])
+del lazy_import
diff --git a/src/sage/dynamics/arithmetic_dynamics/affine_ds.py b/src/sage/dynamics/arithmetic_dynamics/affine_ds.py
index 6938068bbc6..d89c79ee259 100644
--- a/src/sage/dynamics/arithmetic_dynamics/affine_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/affine_ds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Dynamical systems on affine schemes
diff --git a/src/sage/dynamics/arithmetic_dynamics/all.py b/src/sage/dynamics/arithmetic_dynamics/all.py
index f536734b5d9..563f3f5205b 100644
--- a/src/sage/dynamics/arithmetic_dynamics/all.py
+++ b/src/sage/dynamics/arithmetic_dynamics/all.py
@@ -1,12 +1,14 @@
+# sage_setup: distribution = sagemath-schemes
from sage.misc.lazy_import import lazy_import
-from .generic_ds import DynamicalSystem
-from .affine_ds import DynamicalSystem_affine
-from .projective_ds import DynamicalSystem_projective
-from .product_projective_ds import DynamicalSystem_product_projective
-from .berkovich_ds import DynamicalSystem_Berkovich
-from .dynamical_semigroup import DynamicalSemigroup
-from .dynamical_semigroup import DynamicalSemigroup_affine
-from .dynamical_semigroup import DynamicalSemigroup_projective
+from sage.dynamics.arithmetic_dynamics.generic_ds import DynamicalSystem
+from sage.dynamics.arithmetic_dynamics.affine_ds import DynamicalSystem_affine
+from sage.dynamics.arithmetic_dynamics.projective_ds import DynamicalSystem_projective
+from sage.dynamics.arithmetic_dynamics.product_projective_ds import DynamicalSystem_product_projective
+from sage.dynamics.arithmetic_dynamics.berkovich_ds import DynamicalSystem_Berkovich
+from sage.dynamics.arithmetic_dynamics.dynamical_semigroup import DynamicalSemigroup
+from sage.dynamics.arithmetic_dynamics.dynamical_semigroup import DynamicalSemigroup_affine
+from sage.dynamics.arithmetic_dynamics.dynamical_semigroup import DynamicalSemigroup_projective
lazy_import('sage.dynamics.arithmetic_dynamics.wehlerK3', 'WehlerK3Surface')
lazy_import('sage.dynamics.arithmetic_dynamics.wehlerK3', 'random_WehlerK3Surface')
+del lazy_import
diff --git a/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py b/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py
index 5559a48ecce..976d00fe6fd 100644
--- a/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Dynamical systems on Berkovich space over `\CC_p`.
diff --git a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py
index ebb8702a7db..540f633d545 100644
--- a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py
+++ b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Dynamical semigroups
diff --git a/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py b/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py
index c82f10aed0d..10c7ef51ce3 100644
--- a/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py
+++ b/src/sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Automorphism groups of dynamical systems of the projective line
diff --git a/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py b/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py
index 9a2e5fd6e15..af921d7fc96 100644
--- a/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py
+++ b/src/sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Sage functions to compute minimal models of rational functions
under the conjugation action of `PGL_2(QQ)`.
diff --git a/src/sage/dynamics/arithmetic_dynamics/generic_ds.py b/src/sage/dynamics/arithmetic_dynamics/generic_ds.py
index 0afff17895c..3ed33e439a1 100644
--- a/src/sage/dynamics/arithmetic_dynamics/generic_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/generic_ds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Generic dynamical systems on schemes
diff --git a/src/sage/dynamics/arithmetic_dynamics/product_projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/product_projective_ds.py
index 44565197717..12a032a7d63 100644
--- a/src/sage/dynamics/arithmetic_dynamics/product_projective_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/product_projective_ds.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Dynamical systems for products of projective spaces
diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py
index 353eb1ea041..876704c49e6 100644
--- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py
+++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-schemes
r"""
Dynamical systems on projective schemes
diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx b/src/sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx
index f05806f4935..9f7b8d6523f 100644
--- a/src/sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx
+++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Dynamical systems on projective varieties (Cython helper)
diff --git a/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py b/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py
index 7d775faf96a..bc05c39dc98 100644
--- a/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py
+++ b/src/sage/dynamics/arithmetic_dynamics/wehlerK3.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Wehler K3 Surfaces
diff --git a/src/sage/dynamics/cellular_automata/all.py b/src/sage/dynamics/cellular_automata/all.py
index 9f13ad1c13a..ff4151c0588 100644
--- a/src/sage/dynamics/cellular_automata/all.py
+++ b/src/sage/dynamics/cellular_automata/all.py
@@ -3,3 +3,4 @@
from sage.misc.lazy_import import lazy_import
lazy_import("sage.dynamics.cellular_automata.solitons",
["SolitonCellularAutomata", "PeriodicSolitonCellularAutomata"])
+del lazy_import
diff --git a/src/sage/dynamics/cellular_automata/elementary.py b/src/sage/dynamics/cellular_automata/elementary.py
index 26e68c37b01..77d5b705fcb 100644
--- a/src/sage/dynamics/cellular_automata/elementary.py
+++ b/src/sage/dynamics/cellular_automata/elementary.py
@@ -1,4 +1,3 @@
-# -*- encoding: utf-8 -*-
"""
Elementary Cellular Automata
diff --git a/src/sage/dynamics/cellular_automata/glca.py b/src/sage/dynamics/cellular_automata/glca.py
index 6b062f2a441..8c896a981e9 100644
--- a/src/sage/dynamics/cellular_automata/glca.py
+++ b/src/sage/dynamics/cellular_automata/glca.py
@@ -1,4 +1,3 @@
-# -*- encoding: utf-8 -*-
"""
Graftal Lace Cellular Automata
diff --git a/src/sage/dynamics/complex_dynamics/all.py b/src/sage/dynamics/complex_dynamics/all.py
index a4f82d614e5..9bd84366db6 100644
--- a/src/sage/dynamics/complex_dynamics/all.py
+++ b/src/sage/dynamics/complex_dynamics/all.py
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.misc.lazy_import import lazy_import
lazy_import("sage.dynamics.complex_dynamics.mandel_julia",
["mandelbrot_plot", "external_ray", "kneading_sequence", "julia_plot"])
+del lazy_import
diff --git a/src/sage/dynamics/complex_dynamics/mandel_julia.py b/src/sage/dynamics/complex_dynamics/mandel_julia.py
index f3d6fbfa5a0..43810d6582b 100644
--- a/src/sage/dynamics/complex_dynamics/mandel_julia.py
+++ b/src/sage/dynamics/complex_dynamics/mandel_julia.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Mandelbrot and Julia sets
diff --git a/src/sage/dynamics/complex_dynamics/mandel_julia_helper.pyx b/src/sage/dynamics/complex_dynamics/mandel_julia_helper.pyx
index 43ce0effd58..b3731884dda 100644
--- a/src/sage/dynamics/complex_dynamics/mandel_julia_helper.pyx
+++ b/src/sage/dynamics/complex_dynamics/mandel_julia_helper.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# cython: binding=True
# sage.doctest: needs sage.plot
r"""
diff --git a/src/sage/dynamics/finite_dynamical_system.py b/src/sage/dynamics/finite_dynamical_system.py
index 4295070615a..915db6dc580 100644
--- a/src/sage/dynamics/finite_dynamical_system.py
+++ b/src/sage/dynamics/finite_dynamical_system.py
@@ -98,22 +98,15 @@ class DiscreteDynamicalSystem(SageObject, metaclass=ClasscallMetaclass):
A *discrete dynamical system* (henceforth *DDS*) is a
pair `(X, \phi)` of a set `X` and a map `\phi : X \to X`.
- This set `X` is called the *ground set* of the DDS, while
- the map `\phi` is called the *evolution* of the DDS.
-
- A *discrete dynamical system* (short: *DDS*) is a pair
- `(X, \phi)` of a set `X` and a map `\phi : X \to X`.
- (This is one of several things known as a "discrete
- dynamical system" in mathematics.)
- Thus, a DDS is the same as an endomorphism of a set.
- The DDS is said to be *finite* if `X` is finite.
- The DDS is said to be *invertible* if the map `\phi` is
- invertible.
The set `X` is called the *ground set* of the DDS;
the map `\phi` is called the *evolution* of the DDS;
the inverse map `\phi^{-1}` (when it exists) is called the
*inverse evolution* of the DDS.
+ The DDS is called *finite* if `X` is finite.
+ The DDS is called *invertible* if the map `\phi` is
+ invertible.
+
Given a DDS `(X, \phi)`, we can study
* its orbits (i.e., the lists
@@ -138,7 +131,7 @@ class DiscreteDynamicalSystem(SageObject, metaclass=ClasscallMetaclass):
- ``X`` -- set, list, tuple, or another iterable, or
``None`` (default: ``None``); the ground set for the DDS.
- Tthis can be ``None`` (in which case Sage will not know
+ This can be ``None`` (in which case Sage will not know
the ground set, but can still apply evolution to any
elements that are provided to it).
Make sure to set the ``create_tuple`` argument to
diff --git a/src/sage/env.py b/src/sage/env.py
index bb228e7f041..80101c829e4 100644
--- a/src/sage/env.py
+++ b/src/sage/env.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Sage Runtime Environment
diff --git a/src/sage/ext/all__sagemath_categories.py b/src/sage/ext/all__sagemath_categories.py
new file mode 100644
index 00000000000..ec13d6e405f
--- /dev/null
+++ b/src/sage/ext/all__sagemath_categories.py
@@ -0,0 +1,2 @@
+from sage.ext.fast_callable import fast_callable
+from sage.ext.fast_eval import fast_float
diff --git a/src/sage/ext/all__sagemath_modules.py b/src/sage/ext/all__sagemath_modules.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/ext/all__sagemath_objects.py b/src/sage/ext/all__sagemath_objects.py
index 38e44245ad3..40da49fdd73 100644
--- a/src/sage/ext/all__sagemath_objects.py
+++ b/src/sage/ext/all__sagemath_objects.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
# The presence of this file ensures that sage_setup for sagemath-objects
# considers this directory as a namespace package
diff --git a/src/sage/ext/all__sagemath_pari.py b/src/sage/ext/all__sagemath_pari.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/ext/all__sagemath_symbolics.py b/src/sage/ext/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/ext/cplusplus.pxd b/src/sage/ext/cplusplus.pxd
index d748bf2347a..d5d2035ebe3 100644
--- a/src/sage/ext/cplusplus.pxd
+++ b/src/sage/ext/cplusplus.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
#*****************************************************************************
# Copyright (C) 2017 Jeroen Demeyer
#
diff --git a/src/sage/ext/fast_callable.pxd b/src/sage/ext/fast_callable.pxd
index 73dd0311c12..9e03efad5d5 100644
--- a/src/sage/ext/fast_callable.pxd
+++ b/src/sage/ext/fast_callable.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef class Wrapper:
cdef readonly object _orig_args
cdef readonly object _metadata
diff --git a/src/sage/ext/fast_callable.pyx b/src/sage/ext/fast_callable.pyx
index b9072da61c5..64f2e5be722 100644
--- a/src/sage/ext/fast_callable.pyx
+++ b/src/sage/ext/fast_callable.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Fast Expression Evaluation
diff --git a/src/sage/ext/fast_eval.pxd b/src/sage/ext/fast_eval.pxd
index e69de29bb2d..b230a6a2ad9 100644
--- a/src/sage/ext/fast_eval.pxd
+++ b/src/sage/ext/fast_eval.pxd
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-categories
diff --git a/src/sage/ext/fast_eval.pyx b/src/sage/ext/fast_eval.pyx
index 52fbc8f7406..961b0825c8b 100644
--- a/src/sage/ext/fast_eval.pyx
+++ b/src/sage/ext/fast_eval.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Fast Numerical Evaluation
diff --git a/src/sage/ext/memory.pyx b/src/sage/ext/memory.pyx
index 26a5c848bb5..c8671fa37cb 100644
--- a/src/sage/ext/memory.pyx
+++ b/src/sage/ext/memory.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Low-level memory allocation functions
diff --git a/src/sage/ext/mod_int.pxd b/src/sage/ext/mod_int.pxd
index f2ef6fe5527..98be0ab54dd 100644
--- a/src/sage/ext/mod_int.pxd
+++ b/src/sage/ext/mod_int.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
The `mod_int` Data Type
diff --git a/src/sage/ext/stdsage.pxd b/src/sage/ext/stdsage.pxd
index ddd3fd76504..e8e8f3823f3 100644
--- a/src/sage/ext/stdsage.pxd
+++ b/src/sage/ext/stdsage.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Standard C helper code for Cython modules
"""
diff --git a/src/sage/ext_data/all__sagemath_gap.py b/src/sage/ext_data/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/ext_data/all__sagemath_singular.py b/src/sage/ext_data/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/features/__init__.py b/src/sage/features/__init__.py
index a8b11ef7db5..5fdefceb7ee 100644
--- a/src/sage/features/__init__.py
+++ b/src/sage/features/__init__.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-environment
r"""
Testing for features of the environment at runtime
diff --git a/src/sage/features/all.py b/src/sage/features/all.py
index 599bc575dd7..a53d095c596 100644
--- a/src/sage/features/all.py
+++ b/src/sage/features/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Enumeration of all defined features
"""
diff --git a/src/sage/features/bliss.py b/src/sage/features/bliss.py
index 37fc4d7f8c3..cfdd84da1c7 100644
--- a/src/sage/features/bliss.py
+++ b/src/sage/features/bliss.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``bliss``
"""
diff --git a/src/sage/features/cddlib.py b/src/sage/features/cddlib.py
index b8fdb6fed8e..24b67ef9f8e 100644
--- a/src/sage/features/cddlib.py
+++ b/src/sage/features/cddlib.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``cddlib``
"""
diff --git a/src/sage/features/csdp.py b/src/sage/features/csdp.py
index 8f2e18dc182..866ca1c21d1 100644
--- a/src/sage/features/csdp.py
+++ b/src/sage/features/csdp.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``csdp``
"""
diff --git a/src/sage/features/cython.py b/src/sage/features/cython.py
index 8f03155ac2f..30f66eb3426 100644
--- a/src/sage/features/cython.py
+++ b/src/sage/features/cython.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``cython``
"""
diff --git a/src/sage/features/databases.py b/src/sage/features/databases.py
index 844ed54de17..7a05270532c 100644
--- a/src/sage/features/databases.py
+++ b/src/sage/features/databases.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of various databases
"""
diff --git a/src/sage/features/dvipng.py b/src/sage/features/dvipng.py
index 281084a6e72..66fbee39561 100644
--- a/src/sage/features/dvipng.py
+++ b/src/sage/features/dvipng.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``dvipng``
"""
diff --git a/src/sage/features/ffmpeg.py b/src/sage/features/ffmpeg.py
index 36a23594162..366249875d7 100644
--- a/src/sage/features/ffmpeg.py
+++ b/src/sage/features/ffmpeg.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``ffmpeg``
"""
diff --git a/src/sage/features/four_ti_2.py b/src/sage/features/four_ti_2.py
index 2af1c1e25d2..655674cbde1 100644
--- a/src/sage/features/four_ti_2.py
+++ b/src/sage/features/four_ti_2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``4ti2``
"""
diff --git a/src/sage/features/fricas.py b/src/sage/features/fricas.py
index a52e082d114..d5b7d469207 100644
--- a/src/sage/features/fricas.py
+++ b/src/sage/features/fricas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``fricas``
"""
diff --git a/src/sage/features/gap.py b/src/sage/features/gap.py
index 314ba1cc514..fdcbceee102 100644
--- a/src/sage/features/gap.py
+++ b/src/sage/features/gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of the SageMath interfaces to ``gap`` and of GAP packages
"""
diff --git a/src/sage/features/gfan.py b/src/sage/features/gfan.py
index a58090b4c91..e3545392934 100644
--- a/src/sage/features/gfan.py
+++ b/src/sage/features/gfan.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``gfan``
"""
diff --git a/src/sage/features/graph_generators.py b/src/sage/features/graph_generators.py
index 47c4557241c..8f384af9ed3 100644
--- a/src/sage/features/graph_generators.py
+++ b/src/sage/features/graph_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of graph generator programs ``benzene``, ``buckygen``, ``plantri``
"""
diff --git a/src/sage/features/graphviz.py b/src/sage/features/graphviz.py
index abf9b7615fa..4e6ae9a6c4a 100644
--- a/src/sage/features/graphviz.py
+++ b/src/sage/features/graphviz.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``graphviz``
"""
diff --git a/src/sage/features/igraph.py b/src/sage/features/igraph.py
index bcf81f9cec7..00d260f2ac7 100644
--- a/src/sage/features/igraph.py
+++ b/src/sage/features/igraph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Check for igraph
"""
diff --git a/src/sage/features/imagemagick.py b/src/sage/features/imagemagick.py
index fceeed8b727..526ac278877 100644
--- a/src/sage/features/imagemagick.py
+++ b/src/sage/features/imagemagick.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``imagemagick``
diff --git a/src/sage/features/interfaces.py b/src/sage/features/interfaces.py
index ddfc3b9b7ee..6d5249ab443 100644
--- a/src/sage/features/interfaces.py
+++ b/src/sage/features/interfaces.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing whether interpreter interfaces to ``magma``, ``maple``, ``mathematica`` etc. are functional
"""
diff --git a/src/sage/features/internet.py b/src/sage/features/internet.py
index 576b0136926..bba178bd326 100644
--- a/src/sage/features/internet.py
+++ b/src/sage/features/internet.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing if the Internet is available
"""
diff --git a/src/sage/features/join_feature.py b/src/sage/features/join_feature.py
index 24c6583c123..ae95d073da4 100644
--- a/src/sage/features/join_feature.py
+++ b/src/sage/features/join_feature.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Join features
"""
diff --git a/src/sage/features/kenzo.py b/src/sage/features/kenzo.py
index 72f703da15f..39b8dd9a936 100644
--- a/src/sage/features/kenzo.py
+++ b/src/sage/features/kenzo.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``kenzo``
"""
diff --git a/src/sage/features/latex.py b/src/sage/features/latex.py
index 874c5ca7bfb..6f366ff86f6 100644
--- a/src/sage/features/latex.py
+++ b/src/sage/features/latex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``latex`` and equivalent programs
"""
diff --git a/src/sage/features/latte.py b/src/sage/features/latte.py
index 4df8b1cd586..7e973978c24 100644
--- a/src/sage/features/latte.py
+++ b/src/sage/features/latte.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``latte_int``
"""
diff --git a/src/sage/features/lrs.py b/src/sage/features/lrs.py
index 6eb0a11b642..52506e496e5 100644
--- a/src/sage/features/lrs.py
+++ b/src/sage/features/lrs.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``lrslib``
"""
diff --git a/src/sage/features/mcqd.py b/src/sage/features/mcqd.py
index 036e8fc727b..25dc159f8d3 100644
--- a/src/sage/features/mcqd.py
+++ b/src/sage/features/mcqd.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``mcqd``
"""
diff --git a/src/sage/features/meataxe.py b/src/sage/features/meataxe.py
index cc2a69cfeff..319b58866ca 100644
--- a/src/sage/features/meataxe.py
+++ b/src/sage/features/meataxe.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``meataxe``
"""
diff --git a/src/sage/features/mip_backends.py b/src/sage/features/mip_backends.py
index 98b4766c1f5..a6aa0ff2525 100644
--- a/src/sage/features/mip_backends.py
+++ b/src/sage/features/mip_backends.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of :class:`MixedIntegerLinearProgram` backends
"""
diff --git a/src/sage/features/msolve.py b/src/sage/features/msolve.py
index c90f7e5aaf6..4328af54876 100644
--- a/src/sage/features/msolve.py
+++ b/src/sage/features/msolve.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of msolve
diff --git a/src/sage/features/nauty.py b/src/sage/features/nauty.py
index 4a07264f927..79542de74fc 100644
--- a/src/sage/features/nauty.py
+++ b/src/sage/features/nauty.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of nauty executables
"""
diff --git a/src/sage/features/normaliz.py b/src/sage/features/normaliz.py
index 80b3891daf3..6d1de88bf58 100644
--- a/src/sage/features/normaliz.py
+++ b/src/sage/features/normaliz.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``pynormaliz``
"""
diff --git a/src/sage/features/palp.py b/src/sage/features/palp.py
index b58a8fc2e54..b35634ac800 100644
--- a/src/sage/features/palp.py
+++ b/src/sage/features/palp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``palp``
"""
diff --git a/src/sage/features/pandoc.py b/src/sage/features/pandoc.py
index 00ee6055024..1c4450b9b0c 100644
--- a/src/sage/features/pandoc.py
+++ b/src/sage/features/pandoc.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``pandoc``
"""
diff --git a/src/sage/features/pdf2svg.py b/src/sage/features/pdf2svg.py
index 98578ecb6a1..af20d011ac3 100644
--- a/src/sage/features/pdf2svg.py
+++ b/src/sage/features/pdf2svg.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``pdf2svg``
"""
diff --git a/src/sage/features/phitigra.py b/src/sage/features/phitigra.py
index 6c1896bd8df..ea4d855cf53 100644
--- a/src/sage/features/phitigra.py
+++ b/src/sage/features/phitigra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Check for ``phitigra``
"""
diff --git a/src/sage/features/pkg_systems.py b/src/sage/features/pkg_systems.py
index 72ecd494344..4f6db21b735 100644
--- a/src/sage/features/pkg_systems.py
+++ b/src/sage/features/pkg_systems.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of package systems ``sage_spkg``, ``conda``, ``pip``, ``debian``, ``fedora`` etc.
"""
diff --git a/src/sage/features/polymake.py b/src/sage/features/polymake.py
index d2b433b1c7f..10dfab73346 100644
--- a/src/sage/features/polymake.py
+++ b/src/sage/features/polymake.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Feature for testing the presence of ``jupymake``, the Python interface to polymake
"""
diff --git a/src/sage/features/poppler.py b/src/sage/features/poppler.py
index b8f8586e7f5..c4777e9c6ca 100644
--- a/src/sage/features/poppler.py
+++ b/src/sage/features/poppler.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Check for poppler features
diff --git a/src/sage/features/rubiks.py b/src/sage/features/rubiks.py
index 07250532cb6..2429645d2ff 100644
--- a/src/sage/features/rubiks.py
+++ b/src/sage/features/rubiks.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``rubiks``
"""
diff --git a/src/sage/features/sagemath.py b/src/sage/features/sagemath.py
index 75a925895c5..207fa37ce15 100644
--- a/src/sage/features/sagemath.py
+++ b/src/sage/features/sagemath.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of Python modules in the Sage library
diff --git a/src/sage/features/singular.py b/src/sage/features/singular.py
index fce89a8e91c..d6469b6f7f4 100644
--- a/src/sage/features/singular.py
+++ b/src/sage/features/singular.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``singular`` and the SageMath interfaces to it
"""
diff --git a/src/sage/features/sphinx.py b/src/sage/features/sphinx.py
index a70e8a11eee..ec7c8be17b6 100644
--- a/src/sage/features/sphinx.py
+++ b/src/sage/features/sphinx.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``sphinx``
"""
diff --git a/src/sage/features/standard.py b/src/sage/features/standard.py
index c2090fc53a4..94272802aad 100644
--- a/src/sage/features/standard.py
+++ b/src/sage/features/standard.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Check for various standard packages (for modularized distributions)
diff --git a/src/sage/features/symengine_py.py b/src/sage/features/symengine_py.py
index d32492085b7..0e602e0b84d 100644
--- a/src/sage/features/symengine_py.py
+++ b/src/sage/features/symengine_py.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Check for symengine_py
"""
diff --git a/src/sage/features/tdlib.py b/src/sage/features/tdlib.py
index 128c056a49c..eb0b3b10c93 100644
--- a/src/sage/features/tdlib.py
+++ b/src/sage/features/tdlib.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Features for testing the presence of ``tdlib``
"""
diff --git a/src/sage/functions/airy.py b/src/sage/functions/airy.py
index 11f4c56be8c..11bd49f5339 100644
--- a/src/sage/functions/airy.py
+++ b/src/sage/functions/airy.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Airy functions
diff --git a/src/sage/functions/all.py b/src/sage/functions/all.py
index 4cf9005f7e3..cd3ef41a7ab 100644
--- a/src/sage/functions/all.py
+++ b/src/sage/functions/all.py
@@ -1,93 +1,97 @@
+# sage_setup: distribution = sagemath-categories
from sage.misc.lazy_import import lazy_import
lazy_import('sage.functions.piecewise', 'piecewise')
lazy_import('sage.functions.error', ['erf', 'erfc', 'erfi', 'erfinv',
- 'fresnel_sin', 'fresnel_cos'])
+ 'fresnel_sin', 'fresnel_cos'])
-from .trig import ( sin, cos, sec, csc, cot, tan,
- asin, acos, atan,
- acot, acsc, asec,
- arcsin, arccos, arctan,
- arccot, arccsc, arcsec,
- arctan2, atan2)
+from sage.functions.trig import (sin, cos, sec, csc, cot, tan,
+ asin, acos, atan,
+ acot, acsc, asec,
+ arcsin, arccos, arctan,
+ arccot, arccsc, arcsec,
+ arctan2, atan2)
-from .hyperbolic import ( tanh, sinh, cosh, coth, sech, csch,
- asinh, acosh, atanh, acoth, asech, acsch,
- arcsinh, arccosh, arctanh, arccoth, arcsech, arccsch )
+from sage.functions.hyperbolic import (tanh, sinh, cosh, coth, sech, csch,
+ asinh, acosh, atanh, acoth, asech, acsch,
+ arcsinh, arccosh, arctanh, arccoth, arcsech, arccsch)
-reciprocal_trig_functions = {'sec': cos, 'csc': sin, 'cot': tan, 'sech': cosh, 'csch': sinh, 'coth': tanh}
+reciprocal_trig_functions = {'sec': cos, 'csc': sin,
+ 'cot': tan, 'sech': cosh, 'csch': sinh, 'coth': tanh}
-from .other import ( ceil, floor, abs_symbolic, sqrt, real_nth_root,
- arg, real_part, real, frac,
- factorial, binomial,
- imag_part, imag, imaginary, conjugate, cases,
- complex_root_of)
+from sage.functions.other import (ceil, floor, abs_symbolic, sqrt, real_nth_root,
+ arg, real_part, real, frac,
+ factorial, binomial,
+ imag_part, imag, imaginary, conjugate, cases,
+ complex_root_of)
-from .log import (exp, exp_polar, log, ln, polylog, dilog, lambert_w, harmonic_number)
+from sage.functions.log import (exp, exp_polar, log, ln,
+ polylog, dilog, lambert_w, harmonic_number)
-from .transcendental import (zeta, zetaderiv, zeta_symmetric, hurwitz_zeta,
- dickman_rho, stieltjes)
+from sage.functions.transcendental import (zeta, zetaderiv, zeta_symmetric, hurwitz_zeta,
+ dickman_rho, stieltjes)
-from .bessel import (bessel_I, bessel_J, bessel_K, bessel_Y,
- Bessel, struve_H, struve_L, hankel1, hankel2,
+from sage.functions.bessel import (bessel_I, bessel_J, bessel_K, bessel_Y,
+ Bessel, struve_H, struve_L, hankel1, hankel2,
spherical_bessel_J, spherical_bessel_Y,
spherical_hankel1, spherical_hankel2)
-from .special import (spherical_harmonic, elliptic_e,
- elliptic_f, elliptic_ec, elliptic_eu,
- elliptic_kc, elliptic_pi, elliptic_j)
+from sage.functions.special import (spherical_harmonic, elliptic_e,
+ elliptic_f, elliptic_ec, elliptic_eu,
+ elliptic_kc, elliptic_pi, elliptic_j)
-from .jacobi import (jacobi, inverse_jacobi, jacobi_nd, jacobi_ns, jacobi_nc,
- jacobi_dn, jacobi_ds, jacobi_dc, jacobi_sn, jacobi_sd,
- jacobi_sc, jacobi_cn, jacobi_cd, jacobi_cs, jacobi_am,
- inverse_jacobi_nd, inverse_jacobi_ns, inverse_jacobi_nc,
- inverse_jacobi_dn, inverse_jacobi_ds, inverse_jacobi_dc,
- inverse_jacobi_sn, inverse_jacobi_sd, inverse_jacobi_sc,
- inverse_jacobi_cn, inverse_jacobi_cd, inverse_jacobi_cs)
+from sage.functions.jacobi import (jacobi, inverse_jacobi, jacobi_nd, jacobi_ns, jacobi_nc,
+ jacobi_dn, jacobi_ds, jacobi_dc, jacobi_sn, jacobi_sd,
+ jacobi_sc, jacobi_cn, jacobi_cd, jacobi_cs, jacobi_am,
+ inverse_jacobi_nd, inverse_jacobi_ns, inverse_jacobi_nc,
+ inverse_jacobi_dn, inverse_jacobi_ds, inverse_jacobi_dc,
+ inverse_jacobi_sn, inverse_jacobi_sd, inverse_jacobi_sc,
+ inverse_jacobi_cn, inverse_jacobi_cd, inverse_jacobi_cs)
-from .orthogonal_polys import (chebyshev_T,
- chebyshev_U,
- gen_laguerre,
- gen_legendre_P,
- gen_legendre_Q,
- hermite,
- jacobi_P,
- laguerre,
- legendre_P,
- legendre_Q,
- ultraspherical,
- gegenbauer,
- krawtchouk,
- meixner,
- hahn)
+from sage.functions.orthogonal_polys import (chebyshev_T,
+ chebyshev_U,
+ gen_laguerre,
+ gen_legendre_P,
+ gen_legendre_Q,
+ hermite,
+ jacobi_P,
+ laguerre,
+ legendre_P,
+ legendre_Q,
+ ultraspherical,
+ gegenbauer,
+ krawtchouk,
+ meixner,
+ hahn)
-from .spike_function import spike_function
+from sage.functions.spike_function import spike_function
-from .prime_pi import legendre_phi, partial_sieve_function, prime_pi
+from sage.functions.prime_pi import legendre_phi, partial_sieve_function, prime_pi
-from .wigner import (wigner_3j, clebsch_gordan, racah, wigner_6j,
- wigner_9j, gaunt)
+from sage.functions.wigner import (wigner_3j, clebsch_gordan, racah, wigner_6j,
+ wigner_9j, gaunt)
-from .generalized import (dirac_delta, heaviside, unit_step, sgn, sign,
- kronecker_delta)
+from sage.functions.generalized import (dirac_delta, heaviside, unit_step, sgn, sign,
+ kronecker_delta)
-from .min_max import max_symbolic, min_symbolic
+from sage.functions.min_max import max_symbolic, min_symbolic
-from .airy import airy_ai, airy_ai_prime, airy_bi, airy_bi_prime
+from sage.functions.airy import airy_ai, airy_ai_prime, airy_bi, airy_bi_prime
-from .exp_integral import (exp_integral_e, exp_integral_e1, log_integral, li, Li,
- log_integral_offset,
- sin_integral, cos_integral, Si, Ci,
- sinh_integral, cosh_integral, Shi, Chi,
- exponential_integral_1, Ei, exp_integral_ei)
+from sage.functions.exp_integral import (exp_integral_e, exp_integral_e1, log_integral, li, Li,
+ log_integral_offset,
+ sin_integral, cos_integral, Si, Ci,
+ sinh_integral, cosh_integral, Shi, Chi,
+ exponential_integral_1, Ei, exp_integral_ei)
-from .hypergeometric import hypergeometric, hypergeometric_M, hypergeometric_U
+from sage.functions.hypergeometric import hypergeometric, hypergeometric_M, hypergeometric_U
-from .gamma import (gamma, psi, beta, log_gamma,
- gamma_inc, gamma_inc_lower)
+from sage.functions.gamma import (gamma, psi, beta, log_gamma,
+ gamma_inc, gamma_inc_lower)
Γ = gamma
ψ = psi
ζ = zeta
+del lazy_import
diff --git a/src/sage/functions/bessel.py b/src/sage/functions/bessel.py
index cedbe56c00e..76fc6a6a3ae 100644
--- a/src/sage/functions/bessel.py
+++ b/src/sage/functions/bessel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Bessel functions
diff --git a/src/sage/functions/error.py b/src/sage/functions/error.py
index 76509ce5ef0..3467e18ddd2 100644
--- a/src/sage/functions/error.py
+++ b/src/sage/functions/error.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Error functions
diff --git a/src/sage/functions/exp_integral.py b/src/sage/functions/exp_integral.py
index 913cb577bef..edc2b1debc4 100644
--- a/src/sage/functions/exp_integral.py
+++ b/src/sage/functions/exp_integral.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Exponential integrals
diff --git a/src/sage/functions/gamma.py b/src/sage/functions/gamma.py
index 0af99e5dc20..a19795b8100 100644
--- a/src/sage/functions/gamma.py
+++ b/src/sage/functions/gamma.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Gamma and related functions
"""
diff --git a/src/sage/functions/generalized.py b/src/sage/functions/generalized.py
index 5e66d267828..9f31b8acc46 100644
--- a/src/sage/functions/generalized.py
+++ b/src/sage/functions/generalized.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Generalized functions
diff --git a/src/sage/functions/hyperbolic.py b/src/sage/functions/hyperbolic.py
index 7c94892ba9d..5bf71461c2d 100644
--- a/src/sage/functions/hyperbolic.py
+++ b/src/sage/functions/hyperbolic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Hyperbolic functions
diff --git a/src/sage/functions/hypergeometric.py b/src/sage/functions/hypergeometric.py
index 6e2b26d284a..9c7859bbd90 100644
--- a/src/sage/functions/hypergeometric.py
+++ b/src/sage/functions/hypergeometric.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Hypergeometric functions
diff --git a/src/sage/functions/jacobi.py b/src/sage/functions/jacobi.py
index 063dc8c7b78..c817ab0638c 100644
--- a/src/sage/functions/jacobi.py
+++ b/src/sage/functions/jacobi.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Jacobi elliptic functions
diff --git a/src/sage/functions/log.py b/src/sage/functions/log.py
index 37e5f601e59..4268ea8b122 100644
--- a/src/sage/functions/log.py
+++ b/src/sage/functions/log.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Logarithmic functions
diff --git a/src/sage/functions/min_max.py b/src/sage/functions/min_max.py
index caaed6f1193..38b68ba4314 100644
--- a/src/sage/functions/min_max.py
+++ b/src/sage/functions/min_max.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Symbolic minimum and maximum
diff --git a/src/sage/functions/orthogonal_polys.py b/src/sage/functions/orthogonal_polys.py
index 8976001bc62..ee6e32738b2 100644
--- a/src/sage/functions/orthogonal_polys.py
+++ b/src/sage/functions/orthogonal_polys.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Orthogonal polynomials
diff --git a/src/sage/functions/other.py b/src/sage/functions/other.py
index 3da7beec8ce..d5bf3e29425 100644
--- a/src/sage/functions/other.py
+++ b/src/sage/functions/other.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Other functions
diff --git a/src/sage/functions/piecewise.py b/src/sage/functions/piecewise.py
index f621c324cc4..c5da81f777f 100644
--- a/src/sage/functions/piecewise.py
+++ b/src/sage/functions/piecewise.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.symbolic
r"""
Piecewise functions
diff --git a/src/sage/functions/prime_pi.pyx b/src/sage/functions/prime_pi.pyx
index 8dede094229..2ecc6525e93 100644
--- a/src/sage/functions/prime_pi.pyx
+++ b/src/sage/functions/prime_pi.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs primecountpy
r"""
Counting primes
diff --git a/src/sage/functions/special.py b/src/sage/functions/special.py
index e100ba3ee23..4eed8e0c2f8 100644
--- a/src/sage/functions/special.py
+++ b/src/sage/functions/special.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Miscellaneous special functions
diff --git a/src/sage/functions/spike_function.py b/src/sage/functions/spike_function.py
index 4739ca7ffb4..737486e6e54 100644
--- a/src/sage/functions/spike_function.py
+++ b/src/sage/functions/spike_function.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Spike functions
diff --git a/src/sage/functions/transcendental.py b/src/sage/functions/transcendental.py
index c0debecdc0d..a9fe2588a88 100644
--- a/src/sage/functions/transcendental.py
+++ b/src/sage/functions/transcendental.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Number-theoretic functions
"""
diff --git a/src/sage/functions/trig.py b/src/sage/functions/trig.py
index d4e723ec6e2..6c98de24eb0 100644
--- a/src/sage/functions/trig.py
+++ b/src/sage/functions/trig.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Trigonometric functions
"""
diff --git a/src/sage/functions/wigner.py b/src/sage/functions/wigner.py
index 0bafe13a246..4b740bb2bfd 100644
--- a/src/sage/functions/wigner.py
+++ b/src/sage/functions/wigner.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Wigner, Clebsch-Gordan, Racah, and Gaunt coefficients
diff --git a/src/sage/game_theory/all.py b/src/sage/game_theory/all.py
index 4658885c3ab..f5caf04e6b7 100644
--- a/src/sage/game_theory/all.py
+++ b/src/sage/game_theory/all.py
@@ -1,6 +1,8 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.misc.lazy_import import lazy_import
lazy_import('sage.game_theory', 'catalog', 'game_theory')
lazy_import('sage.game_theory.cooperative_game', 'CooperativeGame')
lazy_import('sage.game_theory.normal_form_game', 'NormalFormGame')
lazy_import('sage.game_theory.matching_game', 'MatchingGame')
+del lazy_import
diff --git a/src/sage/game_theory/catalog.py b/src/sage/game_theory/catalog.py
index 9abb2c74151..58c3fb02a80 100644
--- a/src/sage/game_theory/catalog.py
+++ b/src/sage/game_theory/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Catalog Of Games
"""
diff --git a/src/sage/game_theory/catalog_normal_form_games.py b/src/sage/game_theory/catalog_normal_form_games.py
index ab7b48a4dc0..7733b970269 100644
--- a/src/sage/game_theory/catalog_normal_form_games.py
+++ b/src/sage/game_theory/catalog_normal_form_games.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
A catalog of normal form games
diff --git a/src/sage/game_theory/cooperative_game.py b/src/sage/game_theory/cooperative_game.py
index b95ba0f655a..1394c132960 100644
--- a/src/sage/game_theory/cooperative_game.py
+++ b/src/sage/game_theory/cooperative_game.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Co-operative Games With Finite Players
diff --git a/src/sage/game_theory/gambit_docs.py b/src/sage/game_theory/gambit_docs.py
index b2d8af991e9..e6acc5e6b69 100644
--- a/src/sage/game_theory/gambit_docs.py
+++ b/src/sage/game_theory/gambit_docs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Using Gambit as a standalone package
diff --git a/src/sage/game_theory/matching_game.py b/src/sage/game_theory/matching_game.py
index 11c04f6e5b1..e356132be82 100644
--- a/src/sage/game_theory/matching_game.py
+++ b/src/sage/game_theory/matching_game.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Matching games
diff --git a/src/sage/game_theory/normal_form_game.py b/src/sage/game_theory/normal_form_game.py
index b053f3160b8..ce5002b3e9f 100644
--- a/src/sage/game_theory/normal_form_game.py
+++ b/src/sage/game_theory/normal_form_game.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-polyhedra
r"""
Normal form games with N players.
diff --git a/src/sage/game_theory/parser.py b/src/sage/game_theory/parser.py
index d528116f244..0fd8892a6b1 100644
--- a/src/sage/game_theory/parser.py
+++ b/src/sage/game_theory/parser.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Parser For gambit And lrs Nash Equilibria
"""
diff --git a/src/sage/games/all.py b/src/sage/games/all.py
index e3e31bcf03e..cef064e1383 100644
--- a/src/sage/games/all.py
+++ b/src/sage/games/all.py
@@ -1,2 +1,7 @@
-from .sudoku import Sudoku, sudoku
-from .hexad import Minimog
+# sage_setup: distribution = sagemath-combinat
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.games.sudoku', ['Sudoku', 'sudoku'])
+lazy_import('sage.games.hexad', ['Minimog'])
+del lazy_import
diff --git a/src/sage/games/hexad.py b/src/sage/games/hexad.py
index ddc08530b08..64138d012e3 100644
--- a/src/sage/games/hexad.py
+++ b/src/sage/games/hexad.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Hexads in S(5, 6, 12)
diff --git a/src/sage/games/quantumino.py b/src/sage/games/quantumino.py
index d5646406882..16485d7ea42 100644
--- a/src/sage/games/quantumino.py
+++ b/src/sage/games/quantumino.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-combinat
r"""
Family Games America's Quantumino solver
diff --git a/src/sage/games/sudoku.py b/src/sage/games/sudoku.py
index abcadd08ca3..a98632df734 100644
--- a/src/sage/games/sudoku.py
+++ b/src/sage/games/sudoku.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Sudoku Puzzles
diff --git a/src/sage/games/sudoku_backtrack.pyx b/src/sage/games/sudoku_backtrack.pyx
index 9d02c4fcf9a..28504c3f109 100644
--- a/src/sage/games/sudoku_backtrack.pyx
+++ b/src/sage/games/sudoku_backtrack.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
This module contains Cython code for a backtracking algorithm to solve Sudoku puzzles.
diff --git a/src/sage/geometry/abc.pyx b/src/sage/geometry/abc.pyx
index f3aee46d324..a40fc1933e4 100644
--- a/src/sage/geometry/abc.pyx
+++ b/src/sage/geometry/abc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Abstract base classes for classes in :mod:`~sage.geometry`
"""
diff --git a/src/sage/geometry/all.py b/src/sage/geometry/all.py
index 3b7dcf756d8..ebf0d36f808 100644
--- a/src/sage/geometry/all.py
+++ b/src/sage/geometry/all.py
@@ -1,19 +1,12 @@
-from .polyhedron.all import *
-from .hyperbolic_space.all import *
-from .polyhedral_complex import PolyhedralComplex
-from sage.misc.lazy_import import lazy_import
+from sage.geometry.all__sagemath_polyhedra import *
-lazy_import('sage.geometry.cone', ['Cone', 'random_cone'])
-lazy_import('sage.geometry', 'cone_catalog', 'cones')
-lazy_import('sage.geometry.fan', ['Fan', 'FaceFan', 'NormalFan', 'Fan2d'])
-lazy_import('sage.geometry.fan_morphism', 'FanMorphism')
-lazy_import('sage.geometry.lattice_polytope',
- ['LatticePolytope', 'NefPartition',
- 'ReflexivePolytope', 'ReflexivePolytopes'])
-lazy_import('sage.geometry', 'lattice_polytope')
-lazy_import('sage.geometry.toric_lattice', 'ToricLattice')
-lazy_import('sage.geometry', 'toric_plotter')
-lazy_import('sage.geometry.voronoi_diagram', 'VoronoiDiagram')
-lazy_import('sage.geometry.ribbon_graph', 'RibbonGraph')
-lazy_import('sage.geometry.hyperplane_arrangement.arrangement', 'HyperplaneArrangements')
-lazy_import('sage.geometry.hyperplane_arrangement.library', 'hyperplane_arrangements')
+try:
+ from sage.geometry.all__sagemath_symbolics import *
+except ImportError:
+ pass
+
+
+try:
+ from sage.geometry.all__sagemath_gap import *
+except ImportError:
+ pass
diff --git a/src/sage/geometry/all__sagemath_categories.py b/src/sage/geometry/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/geometry/all__sagemath_gap.py b/src/sage/geometry/all__sagemath_gap.py
new file mode 100644
index 00000000000..34dc2709543
--- /dev/null
+++ b/src/sage/geometry/all__sagemath_gap.py
@@ -0,0 +1,5 @@
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.geometry.ribbon_graph', 'RibbonGraph')
+del lazy_import
diff --git a/src/sage/geometry/all__sagemath_linbox.py b/src/sage/geometry/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/geometry/all__sagemath_modules.py b/src/sage/geometry/all__sagemath_modules.py
new file mode 100644
index 00000000000..4ea1510f4ab
--- /dev/null
+++ b/src/sage/geometry/all__sagemath_modules.py
@@ -0,0 +1,4 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.geometry.toric_lattice', 'ToricLattice')
+del lazy_import
diff --git a/src/sage/geometry/all__sagemath_polyhedra.py b/src/sage/geometry/all__sagemath_polyhedra.py
new file mode 100644
index 00000000000..0b1852de7a5
--- /dev/null
+++ b/src/sage/geometry/all__sagemath_polyhedra.py
@@ -0,0 +1,20 @@
+from sage.geometry.all__sagemath_modules import *
+
+from sage.geometry.polyhedron.all import *
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.geometry.polyhedral_complex', 'PolyhedralComplex')
+lazy_import('sage.geometry.cone', ['Cone', 'random_cone'])
+lazy_import('sage.geometry', 'cone_catalog', 'cones')
+lazy_import('sage.geometry.fan', ['Fan', 'FaceFan', 'NormalFan', 'Fan2d'])
+lazy_import('sage.geometry.fan_morphism', 'FanMorphism')
+lazy_import('sage.geometry.lattice_polytope',
+ ['LatticePolytope', 'NefPartition',
+ 'ReflexivePolytope', 'ReflexivePolytopes'])
+lazy_import('sage.geometry', 'lattice_polytope')
+lazy_import('sage.geometry', 'toric_plotter')
+lazy_import('sage.geometry.voronoi_diagram', 'VoronoiDiagram')
+lazy_import('sage.geometry.hyperplane_arrangement.arrangement',
+ 'HyperplaneArrangements')
+lazy_import('sage.geometry.hyperplane_arrangement.library', 'hyperplane_arrangements')
+del lazy_import
diff --git a/src/sage/geometry/all__sagemath_symbolics.py b/src/sage/geometry/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..fb690c97312
--- /dev/null
+++ b/src/sage/geometry/all__sagemath_symbolics.py
@@ -0,0 +1,7 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.geometry.hyperbolic_space.hyperbolic_interface', 'HyperbolicPlane')
+
+from sage.geometry.riemannian_manifolds.all import *
+
+del lazy_import
diff --git a/src/sage/geometry/cone.py b/src/sage/geometry/cone.py
index fc0b3731945..91cfaf85ab0 100644
--- a/src/sage/geometry/cone.py
+++ b/src/sage/geometry/cone.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Convex rational polyhedral cones
diff --git a/src/sage/geometry/cone_catalog.py b/src/sage/geometry/cone_catalog.py
index d6898d40087..015fb5aad12 100644
--- a/src/sage/geometry/cone_catalog.py
+++ b/src/sage/geometry/cone_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Catalog of common polyhedral convex cones
diff --git a/src/sage/geometry/convex_set.py b/src/sage/geometry/convex_set.py
index dd7237f0e30..ab7b74341e3 100644
--- a/src/sage/geometry/convex_set.py
+++ b/src/sage/geometry/convex_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Convex Sets
"""
diff --git a/src/sage/geometry/fan.py b/src/sage/geometry/fan.py
index 832a76bb65d..34caa8a427a 100644
--- a/src/sage/geometry/fan.py
+++ b/src/sage/geometry/fan.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.graphs sage.combinat
r"""
Rational polyhedral fans
diff --git a/src/sage/geometry/fan_isomorphism.py b/src/sage/geometry/fan_isomorphism.py
index 2cf79c13442..e59604f59e9 100644
--- a/src/sage/geometry/fan_isomorphism.py
+++ b/src/sage/geometry/fan_isomorphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Find isomorphisms between fans
"""
diff --git a/src/sage/geometry/fan_morphism.py b/src/sage/geometry/fan_morphism.py
index 6f4fa78c5a3..fa1d82889d9 100644
--- a/src/sage/geometry/fan_morphism.py
+++ b/src/sage/geometry/fan_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.graphs, sage.combinat
r"""
Morphisms between toric lattices compatible with fans
diff --git a/src/sage/geometry/hasse_diagram.py b/src/sage/geometry/hasse_diagram.py
index d30f08ac8d5..96048cc817e 100644
--- a/src/sage/geometry/hasse_diagram.py
+++ b/src/sage/geometry/hasse_diagram.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Construction of finite atomic and coatomic lattices from incidences
diff --git a/src/sage/geometry/hyperbolic_space/all.py b/src/sage/geometry/hyperbolic_space/all.py
index d1b2a930e04..88d94a913e4 100644
--- a/src/sage/geometry/hyperbolic_space/all.py
+++ b/src/sage/geometry/hyperbolic_space/all.py
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.misc.lazy_import import lazy_import
lazy_import('sage.geometry.hyperbolic_space.hyperbolic_interface', 'HyperbolicPlane')
+del lazy_import
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_coercion.py b/src/sage/geometry/hyperbolic_space/hyperbolic_coercion.py
index ff509d0d97f..fc0f68e417b 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_coercion.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_coercion.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Coercion Maps Between Hyperbolic Plane Models
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_constants.py b/src/sage/geometry/hyperbolic_space/hyperbolic_constants.py
index 1ea800e58b0..b42f519014a 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_constants.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_constants.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.matrix.constructor import matrix
EPSILON = 10 ** -9
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py b/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py
index 802de09a9f0..381fe39a9e4 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Hyperbolic Geodesics
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_interface.py b/src/sage/geometry/hyperbolic_space/hyperbolic_interface.py
index 11f4c08add9..e0d4055e09e 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_interface.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_interface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to Hyperbolic Models
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_isometry.py b/src/sage/geometry/hyperbolic_space/hyperbolic_isometry.py
index 89e73b83a07..f25205a8192 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_isometry.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_isometry.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Hyperbolic Isometries
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_model.py b/src/sage/geometry/hyperbolic_space/hyperbolic_model.py
index 33e5f0008fe..fd8c12ed990 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_model.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_model.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Hyperbolic Models
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_point.py b/src/sage/geometry/hyperbolic_space/hyperbolic_point.py
index 650c90a4403..e12330e1908 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_point.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Hyperbolic Points
diff --git a/src/sage/geometry/hyperplane_arrangement/affine_subspace.py b/src/sage/geometry/hyperplane_arrangement/affine_subspace.py
index 7c1065553c4..74150f422f0 100644
--- a/src/sage/geometry/hyperplane_arrangement/affine_subspace.py
+++ b/src/sage/geometry/hyperplane_arrangement/affine_subspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Affine Subspaces of a Vector Space
diff --git a/src/sage/geometry/hyperplane_arrangement/all.py b/src/sage/geometry/hyperplane_arrangement/all.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/geometry/hyperplane_arrangement/all.py
+++ b/src/sage/geometry/hyperplane_arrangement/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/geometry/hyperplane_arrangement/arrangement.py b/src/sage/geometry/hyperplane_arrangement/arrangement.py
index bb1e04efabe..68ec59accc4 100644
--- a/src/sage/geometry/hyperplane_arrangement/arrangement.py
+++ b/src/sage/geometry/hyperplane_arrangement/arrangement.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Hyperplane Arrangements
diff --git a/src/sage/geometry/hyperplane_arrangement/check_freeness.py b/src/sage/geometry/hyperplane_arrangement/check_freeness.py
index e99c8ee9b39..385f83788f9 100644
--- a/src/sage/geometry/hyperplane_arrangement/check_freeness.py
+++ b/src/sage/geometry/hyperplane_arrangement/check_freeness.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.libs.singular
r"""
Helper Functions For Freeness Of Hyperplane Arrangements
diff --git a/src/sage/geometry/hyperplane_arrangement/hyperplane.py b/src/sage/geometry/hyperplane_arrangement/hyperplane.py
index 9ca1a7c42ac..2a4f8eea174 100644
--- a/src/sage/geometry/hyperplane_arrangement/hyperplane.py
+++ b/src/sage/geometry/hyperplane_arrangement/hyperplane.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Hyperplanes
diff --git a/src/sage/geometry/hyperplane_arrangement/library.py b/src/sage/geometry/hyperplane_arrangement/library.py
index cdfaca2faf0..280ac089c87 100644
--- a/src/sage/geometry/hyperplane_arrangement/library.py
+++ b/src/sage/geometry/hyperplane_arrangement/library.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Library of Hyperplane Arrangements
diff --git a/src/sage/geometry/hyperplane_arrangement/plot.py b/src/sage/geometry/hyperplane_arrangement/plot.py
index be468c111bc..93a8112cd54 100644
--- a/src/sage/geometry/hyperplane_arrangement/plot.py
+++ b/src/sage/geometry/hyperplane_arrangement/plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Plotting of Hyperplane Arrangements
diff --git a/src/sage/geometry/integral_points.pxi b/src/sage/geometry/integral_points.pxi
index 40f26e39d69..613e917f4fe 100644
--- a/src/sage/geometry/integral_points.pxi
+++ b/src/sage/geometry/integral_points.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
r"""
Cython helper methods to compute integral points in polyhedra.
"""
diff --git a/src/sage/geometry/integral_points.py b/src/sage/geometry/integral_points.py
index 48153591bcf..bc6e4a0626f 100644
--- a/src/sage/geometry/integral_points.py
+++ b/src/sage/geometry/integral_points.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
try:
from .integral_points_integer_dense import (
parallelotope_points,
diff --git a/src/sage/geometry/integral_points_generic_dense.pyx b/src/sage/geometry/integral_points_generic_dense.pyx
index 5ff619f44d4..99b0a60e49e 100644
--- a/src/sage/geometry/integral_points_generic_dense.pyx
+++ b/src/sage/geometry/integral_points_generic_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
#cython: wraparound=False, boundscheck=False
from sage.modules.vector_integer_dense cimport Vector_integer_dense as VectorClass
diff --git a/src/sage/geometry/integral_points_integer_dense.pyx b/src/sage/geometry/integral_points_integer_dense.pyx
index 0151ffed5c0..67b5009f191 100644
--- a/src/sage/geometry/integral_points_integer_dense.pyx
+++ b/src/sage/geometry/integral_points_integer_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
#cython: wraparound=False, boundscheck=False
from sage.modules.vector_integer_dense cimport Vector_integer_dense as VectorClass
diff --git a/src/sage/geometry/lattice_polytope.py b/src/sage/geometry/lattice_polytope.py
index b652e68c946..a35bbecbf70 100644
--- a/src/sage/geometry/lattice_polytope.py
+++ b/src/sage/geometry/lattice_polytope.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Lattice and reflexive polytopes
diff --git a/src/sage/geometry/linear_expression.py b/src/sage/geometry/linear_expression.py
index 547d2eeb5a3..9c6d3cd7cfd 100644
--- a/src/sage/geometry/linear_expression.py
+++ b/src/sage/geometry/linear_expression.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Linear Expressions
diff --git a/src/sage/geometry/newton_polygon.py b/src/sage/geometry/newton_polygon.py
index 28101e70646..b0b3209f426 100644
--- a/src/sage/geometry/newton_polygon.py
+++ b/src/sage/geometry/newton_polygon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Newton Polygons
diff --git a/src/sage/geometry/palp_normal_form.pyx b/src/sage/geometry/palp_normal_form.pyx
index fa756fe65b0..baaedefa467 100644
--- a/src/sage/geometry/palp_normal_form.pyx
+++ b/src/sage/geometry/palp_normal_form.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.groups
r"""
PALP normal form of vertices of a lattice polytope
diff --git a/src/sage/geometry/point_collection.pyx b/src/sage/geometry/point_collection.pyx
index aabb0bdcde3..162269b3a5f 100644
--- a/src/sage/geometry/point_collection.pyx
+++ b/src/sage/geometry/point_collection.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Point collections
diff --git a/src/sage/geometry/polyhedral_complex.py b/src/sage/geometry/polyhedral_complex.py
index 09200a60be9..6194595c2c8 100644
--- a/src/sage/geometry/polyhedral_complex.py
+++ b/src/sage/geometry/polyhedral_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.graphs
r"""
Finite polyhedral complexes
diff --git a/src/sage/geometry/polyhedron/all.py b/src/sage/geometry/polyhedron/all.py
index 3668a0b8b50..848763439fb 100644
--- a/src/sage/geometry/polyhedron/all.py
+++ b/src/sage/geometry/polyhedron/all.py
@@ -1,5 +1,8 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.misc.lazy_import import lazy_import
lazy_import('sage.geometry.polyhedron.constructor', 'Polyhedron')
lazy_import('sage.geometry.polyhedron.library', 'polytopes')
-lazy_import('sage.geometry.polyhedron.combinatorial_polyhedron.base' , 'CombinatorialPolyhedron')
+lazy_import('sage.geometry.polyhedron.combinatorial_polyhedron.base',
+ 'CombinatorialPolyhedron')
+del lazy_import
diff --git a/src/sage/geometry/polyhedron/backend_cdd.py b/src/sage/geometry/polyhedron/backend_cdd.py
index e59f05d09a3..1f497350727 100644
--- a/src/sage/geometry/polyhedron/backend_cdd.py
+++ b/src/sage/geometry/polyhedron/backend_cdd.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
The cdd backend for polyhedral computations
"""
diff --git a/src/sage/geometry/polyhedron/backend_cdd_rdf.py b/src/sage/geometry/polyhedron/backend_cdd_rdf.py
index 756e8df7b4a..3dc339a74f5 100644
--- a/src/sage/geometry/polyhedron/backend_cdd_rdf.py
+++ b/src/sage/geometry/polyhedron/backend_cdd_rdf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.rings.real_double
r"""
diff --git a/src/sage/geometry/polyhedron/backend_field.py b/src/sage/geometry/polyhedron/backend_field.py
index 7026cca98b8..8c8c977124c 100644
--- a/src/sage/geometry/polyhedron/backend_field.py
+++ b/src/sage/geometry/polyhedron/backend_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
The Python backend
diff --git a/src/sage/geometry/polyhedron/backend_normaliz.py b/src/sage/geometry/polyhedron/backend_normaliz.py
index 29b914531c4..f7e7b0ee782 100644
--- a/src/sage/geometry/polyhedron/backend_normaliz.py
+++ b/src/sage/geometry/polyhedron/backend_normaliz.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - pynormaliz
"""
The Normaliz backend for polyhedral computations
diff --git a/src/sage/geometry/polyhedron/backend_number_field.py b/src/sage/geometry/polyhedron/backend_number_field.py
index e79688bea5f..22834a0755f 100644
--- a/src/sage/geometry/polyhedron/backend_number_field.py
+++ b/src/sage/geometry/polyhedron/backend_number_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
The Python backend, using number fields internally
"""
diff --git a/src/sage/geometry/polyhedron/backend_polymake.py b/src/sage/geometry/polyhedron/backend_polymake.py
index a2bce697e1c..ce75370f3ef 100644
--- a/src/sage/geometry/polyhedron/backend_polymake.py
+++ b/src/sage/geometry/polyhedron/backend_polymake.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
The polymake backend for polyhedral computations
diff --git a/src/sage/geometry/polyhedron/backend_ppl.py b/src/sage/geometry/polyhedron/backend_ppl.py
index bb1a77e9f5d..106362e6031 100644
--- a/src/sage/geometry/polyhedron/backend_ppl.py
+++ b/src/sage/geometry/polyhedron/backend_ppl.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
The PPL (Parma Polyhedra Library) backend for polyhedral computations
"""
diff --git a/src/sage/geometry/polyhedron/base.py b/src/sage/geometry/polyhedron/base.py
index f9ce84be09d..1d032ee1df2 100644
--- a/src/sage/geometry/polyhedron/base.py
+++ b/src/sage/geometry/polyhedron/base.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Miscellaneous methods
"""
diff --git a/src/sage/geometry/polyhedron/base0.py b/src/sage/geometry/polyhedron/base0.py
index ea6a08837c5..2504976552f 100644
--- a/src/sage/geometry/polyhedron/base0.py
+++ b/src/sage/geometry/polyhedron/base0.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Initialization and access to Vrepresentation and Hrepresentation
"""
diff --git a/src/sage/geometry/polyhedron/base1.py b/src/sage/geometry/polyhedron/base1.py
index 507316f26a3..1e9d7a26bde 100644
--- a/src/sage/geometry/polyhedron/base1.py
+++ b/src/sage/geometry/polyhedron/base1.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Implementation of the :class:`ConvexSet_base` API
diff --git a/src/sage/geometry/polyhedron/base2.py b/src/sage/geometry/polyhedron/base2.py
index 3b72b5088c7..ab1c8063a3b 100644
--- a/src/sage/geometry/polyhedron/base2.py
+++ b/src/sage/geometry/polyhedron/base2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Methods related to lattice points
"""
diff --git a/src/sage/geometry/polyhedron/base3.py b/src/sage/geometry/polyhedron/base3.py
index d64cf38d26d..9bd0bf01ab1 100644
--- a/src/sage/geometry/polyhedron/base3.py
+++ b/src/sage/geometry/polyhedron/base3.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Methods regarding the combinatorics of a polyhedron
diff --git a/src/sage/geometry/polyhedron/base4.py b/src/sage/geometry/polyhedron/base4.py
index bc31ab76102..9601d7df1ce 100644
--- a/src/sage/geometry/polyhedron/base4.py
+++ b/src/sage/geometry/polyhedron/base4.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.graphs
r"""
Base class for polyhedra: Graph-theoretic methods
diff --git a/src/sage/geometry/polyhedron/base5.py b/src/sage/geometry/polyhedron/base5.py
index a1e57a63b99..b36b7ebf6e3 100644
--- a/src/sage/geometry/polyhedron/base5.py
+++ b/src/sage/geometry/polyhedron/base5.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Methods for constructing new polyhedra
diff --git a/src/sage/geometry/polyhedron/base6.py b/src/sage/geometry/polyhedron/base6.py
index aaa18f5b541..35341f122c2 100644
--- a/src/sage/geometry/polyhedron/base6.py
+++ b/src/sage/geometry/polyhedron/base6.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Methods for plotting and affine hull projection
"""
diff --git a/src/sage/geometry/polyhedron/base7.py b/src/sage/geometry/polyhedron/base7.py
index 55f9d23ea0b..bbe6737c843 100644
--- a/src/sage/geometry/polyhedron/base7.py
+++ b/src/sage/geometry/polyhedron/base7.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra: Methods for triangulation and volume computation
"""
diff --git a/src/sage/geometry/polyhedron/base_QQ.py b/src/sage/geometry/polyhedron/base_QQ.py
index ff0872b7dd7..426b73b359f 100644
--- a/src/sage/geometry/polyhedron/base_QQ.py
+++ b/src/sage/geometry/polyhedron/base_QQ.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra over `\QQ`
"""
diff --git a/src/sage/geometry/polyhedron/base_RDF.py b/src/sage/geometry/polyhedron/base_RDF.py
index b3ba587746e..4fbbf52750c 100644
--- a/src/sage/geometry/polyhedron/base_RDF.py
+++ b/src/sage/geometry/polyhedron/base_RDF.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.rings.real_double
"""
diff --git a/src/sage/geometry/polyhedron/base_ZZ.py b/src/sage/geometry/polyhedron/base_ZZ.py
index c450fbda0e0..7cc1432f0a5 100644
--- a/src/sage/geometry/polyhedron/base_ZZ.py
+++ b/src/sage/geometry/polyhedron/base_ZZ.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for polyhedra over `\ZZ`
"""
diff --git a/src/sage/geometry/polyhedron/base_mutable.py b/src/sage/geometry/polyhedron/base_mutable.py
index 42e77a8fcf0..3b6842da210 100644
--- a/src/sage/geometry/polyhedron/base_mutable.py
+++ b/src/sage/geometry/polyhedron/base_mutable.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Base class for mutable polyhedra.
diff --git a/src/sage/geometry/polyhedron/base_number_field.py b/src/sage/geometry/polyhedron/base_number_field.py
index ef912a5e501..148248f6e46 100644
--- a/src/sage/geometry/polyhedron/base_number_field.py
+++ b/src/sage/geometry/polyhedron/base_number_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Support for internal use of number fields in backends for polyhedral computations
"""
diff --git a/src/sage/geometry/polyhedron/cdd_file_format.py b/src/sage/geometry/polyhedron/cdd_file_format.py
index 728f20bb9b5..6934ebfd26c 100644
--- a/src/sage/geometry/polyhedron/cdd_file_format.py
+++ b/src/sage/geometry/polyhedron/cdd_file_format.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Generate cdd ``.ext`` / ``.ine`` file format
"""
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/all.py b/src/sage/geometry/polyhedron/combinatorial_polyhedron/all.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/all.py
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd
index a04a1186876..9418e743553 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cimport cython
from sage.data_structures.list_of_pairs cimport ListOfPairs
from sage.structure.sage_object cimport SageObject
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx
index 367049b9fc0..c4c4502bb8b 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Combinatorial polyhedron
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd
index f39284ace68..71456157430 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cimport cython
from sage.structure.sage_object cimport SageObject
from sage.geometry.polyhedron.combinatorial_polyhedron.list_of_faces cimport ListOfFaces
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx
index fb780e29353..b701f6a25c4 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Combinatorial face of a polyhedron
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd
index 2a0e950b469..9d876fa72f5 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.geometry.polyhedron.combinatorial_polyhedron.face_list_data_structure cimport face_t
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx
index 951dd9e5420..f26e00cb65d 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Conversions
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd
index 3ed71a664e1..ef347d8e9a9 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Cython data structure for combinatorial faces.
"""
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd
index 3c015973dd1..b13c0cd7be0 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cimport cython
from sage.structure.sage_object cimport SageObject
from sage.geometry.polyhedron.combinatorial_polyhedron.list_of_faces cimport ListOfFaces
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx
index ca5634d31a7..1b2b8362864 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# distutils: extra_compile_args = OPENMP_CFLAGS
# distutils: extra_link_args = OPENMP_CFLAGS
r"""
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd
index 50bbd7c4026..4768c7809f2 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Inline cython methods for lists of faces.
"""
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx
index 34adfb092dd..6b95606d751 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Sorting of a list of faces.
"""
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd
index 62ba5b987cf..6f704dd760b 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cimport cython
from sage.geometry.polyhedron.combinatorial_polyhedron.face_list_data_structure cimport face_list_t, face_t
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx
index 468347f5256..6a2b5960c32 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
List of faces
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd b/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd
index 824b832f238..72b4dd30889 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cimport cython
from sage.geometry.polyhedron.combinatorial_polyhedron.list_of_faces cimport ListOfFaces
from sage.geometry.polyhedron.combinatorial_polyhedron.face_data_structure cimport face_t
diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx b/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx
index d0064795fa5..0e1f0df82bc 100644
--- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx
+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
PolyhedronFaceLattice
diff --git a/src/sage/geometry/polyhedron/constructor.py b/src/sage/geometry/polyhedron/constructor.py
index ef95c2fb457..9b6e01a0367 100644
--- a/src/sage/geometry/polyhedron/constructor.py
+++ b/src/sage/geometry/polyhedron/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Polyhedra
diff --git a/src/sage/geometry/polyhedron/double_description.py b/src/sage/geometry/polyhedron/double_description.py
index 089580e3146..08a18bfaa82 100644
--- a/src/sage/geometry/polyhedron/double_description.py
+++ b/src/sage/geometry/polyhedron/double_description.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Double Description Algorithm for Cones
diff --git a/src/sage/geometry/polyhedron/double_description_inhomogeneous.py b/src/sage/geometry/polyhedron/double_description_inhomogeneous.py
index 9b7882a5bcd..28f4bbc6a17 100644
--- a/src/sage/geometry/polyhedron/double_description_inhomogeneous.py
+++ b/src/sage/geometry/polyhedron/double_description_inhomogeneous.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Double Description for Arbitrary Polyhedra
diff --git a/src/sage/geometry/polyhedron/face.py b/src/sage/geometry/polyhedron/face.py
index 97319ed1740..bc67c1504c5 100644
--- a/src/sage/geometry/polyhedron/face.py
+++ b/src/sage/geometry/polyhedron/face.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
A class to keep information about faces of a polyhedron
diff --git a/src/sage/geometry/polyhedron/generating_function.py b/src/sage/geometry/polyhedron/generating_function.py
index 7a33bd528b9..0d287fbe4d0 100644
--- a/src/sage/geometry/polyhedron/generating_function.py
+++ b/src/sage/geometry/polyhedron/generating_function.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - sage.combinat
r"""
Generating Function of Polyhedron's Integral Points
diff --git a/src/sage/geometry/polyhedron/lattice_euclidean_group_element.py b/src/sage/geometry/polyhedron/lattice_euclidean_group_element.py
index 79331133960..95a8fd63633 100644
--- a/src/sage/geometry/polyhedron/lattice_euclidean_group_element.py
+++ b/src/sage/geometry/polyhedron/lattice_euclidean_group_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Lattice Euclidean Group Elements
diff --git a/src/sage/geometry/polyhedron/library.py b/src/sage/geometry/polyhedron/library.py
index 81cf67b2d8b..da5e400f8c8 100644
--- a/src/sage/geometry/polyhedron/library.py
+++ b/src/sage/geometry/polyhedron/library.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Library of commonly used, famous, or interesting polytopes
diff --git a/src/sage/geometry/polyhedron/misc.py b/src/sage/geometry/polyhedron/misc.py
index b47e51f79b8..28ed9250c5a 100644
--- a/src/sage/geometry/polyhedron/misc.py
+++ b/src/sage/geometry/polyhedron/misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Miscellaneous helper functions
"""
diff --git a/src/sage/geometry/polyhedron/modules/all.py b/src/sage/geometry/polyhedron/modules/all.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/geometry/polyhedron/modules/all.py
+++ b/src/sage/geometry/polyhedron/modules/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py b/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py
index 6255650b84f..d375d26ae7b 100644
--- a/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py
+++ b/src/sage/geometry/polyhedron/modules/formal_polyhedra_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Formal modules generated by polyhedra
"""
diff --git a/src/sage/geometry/polyhedron/palp_database.py b/src/sage/geometry/polyhedron/palp_database.py
index 60846d8df23..4534cb992ab 100644
--- a/src/sage/geometry/polyhedron/palp_database.py
+++ b/src/sage/geometry/polyhedron/palp_database.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - polytopes_db palp
"""
Access the PALP database(s) of reflexive lattice polytopes
diff --git a/src/sage/geometry/polyhedron/parent.py b/src/sage/geometry/polyhedron/parent.py
index 2d87ac6f202..dac8f2d438b 100644
--- a/src/sage/geometry/polyhedron/parent.py
+++ b/src/sage/geometry/polyhedron/parent.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Parents for Polyhedra
"""
diff --git a/src/sage/geometry/polyhedron/plot.py b/src/sage/geometry/polyhedron/plot.py
index 283d5163f81..46a024f3188 100644
--- a/src/sage/geometry/polyhedron/plot.py
+++ b/src/sage/geometry/polyhedron/plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Functions for plotting polyhedra
"""
diff --git a/src/sage/geometry/polyhedron/ppl_lattice_polygon.py b/src/sage/geometry/polyhedron/ppl_lattice_polygon.py
index 933275357d8..95404238463 100644
--- a/src/sage/geometry/polyhedron/ppl_lattice_polygon.py
+++ b/src/sage/geometry/polyhedron/ppl_lattice_polygon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Fast Lattice Polygons using PPL
diff --git a/src/sage/geometry/polyhedron/ppl_lattice_polytope.py b/src/sage/geometry/polyhedron/ppl_lattice_polytope.py
index 3cde1c6af81..837723aa173 100644
--- a/src/sage/geometry/polyhedron/ppl_lattice_polytope.py
+++ b/src/sage/geometry/polyhedron/ppl_lattice_polytope.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Fast Lattice Polytopes using PPL.
diff --git a/src/sage/geometry/polyhedron/representation.py b/src/sage/geometry/polyhedron/representation.py
index ea803b2e558..de62ece29da 100644
--- a/src/sage/geometry/polyhedron/representation.py
+++ b/src/sage/geometry/polyhedron/representation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
H(yperplane) and V(ertex) representation objects for polyhedra
"""
diff --git a/src/sage/geometry/pseudolines.py b/src/sage/geometry/pseudolines.py
index cc52979b577..034848ab63e 100644
--- a/src/sage/geometry/pseudolines.py
+++ b/src/sage/geometry/pseudolines.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Pseudolines
diff --git a/src/sage/geometry/relative_interior.py b/src/sage/geometry/relative_interior.py
index 8f4a63a8a14..df303f0ac72 100644
--- a/src/sage/geometry/relative_interior.py
+++ b/src/sage/geometry/relative_interior.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Relative Interiors of Polyhedra and Cones
"""
diff --git a/src/sage/geometry/ribbon_graph.py b/src/sage/geometry/ribbon_graph.py
index 12918ae29b5..8e927bdedea 100644
--- a/src/sage/geometry/ribbon_graph.py
+++ b/src/sage/geometry/ribbon_graph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Ribbon Graphs
diff --git a/src/sage/geometry/riemannian_manifolds/all.py b/src/sage/geometry/riemannian_manifolds/all.py
index b375f473546..b379b366f24 100644
--- a/src/sage/geometry/riemannian_manifolds/all.py
+++ b/src/sage/geometry/riemannian_manifolds/all.py
@@ -1,5 +1,7 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.misc.lazy_import import lazy_import
lazy_import('sage.geometry.riemannian_manifolds.parametrized_surface3d',
'ParametrizedSurface3D')
lazy_import('sage.geometry.riemannian_manifolds.surface3d_generators',
'surfaces')
+del lazy_import
diff --git a/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py b/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py
index 98362a2f70f..95eab06a3da 100644
--- a/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py
+++ b/src/sage/geometry/riemannian_manifolds/parametrized_surface3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Differential Geometry of Parametrized Surfaces
diff --git a/src/sage/geometry/riemannian_manifolds/surface3d_generators.py b/src/sage/geometry/riemannian_manifolds/surface3d_generators.py
index a75fdb0f2f2..576f420783d 100644
--- a/src/sage/geometry/riemannian_manifolds/surface3d_generators.py
+++ b/src/sage/geometry/riemannian_manifolds/surface3d_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Common parametrized surfaces in 3D.
diff --git a/src/sage/geometry/toric_lattice.py b/src/sage/geometry/toric_lattice.py
index 2759a2b1281..cbf20caeb58 100644
--- a/src/sage/geometry/toric_lattice.py
+++ b/src/sage/geometry/toric_lattice.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Toric lattices
diff --git a/src/sage/geometry/toric_lattice_element.pyx b/src/sage/geometry/toric_lattice_element.pyx
index 8a2f87762eb..18cb15c212f 100644
--- a/src/sage/geometry/toric_lattice_element.pyx
+++ b/src/sage/geometry/toric_lattice_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Toric lattice elements
diff --git a/src/sage/geometry/toric_plotter.py b/src/sage/geometry/toric_plotter.py
index 2943daa49bd..7a7f1976cc7 100644
--- a/src/sage/geometry/toric_plotter.py
+++ b/src/sage/geometry/toric_plotter.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Toric plotter
diff --git a/src/sage/geometry/triangulation/all.py b/src/sage/geometry/triangulation/all.py
index d40e50321f8..9bbbc0f6270 100644
--- a/src/sage/geometry/triangulation/all.py
+++ b/src/sage/geometry/triangulation/all.py
@@ -1 +1,3 @@
-from .point_configuration import PointConfiguration
+# sage_setup: distribution = sagemath-polyhedra
+
+from sage.geometry.triangulation.point_configuration import PointConfiguration
diff --git a/src/sage/geometry/triangulation/base.pyx b/src/sage/geometry/triangulation/base.pyx
index cb9cb948256..4331f0c24fd 100644
--- a/src/sage/geometry/triangulation/base.pyx
+++ b/src/sage/geometry/triangulation/base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# distutils: sources = sage/geometry/triangulation/functions.cc sage/geometry/triangulation/data.cc sage/geometry/triangulation/triangulations.cc
# distutils: depends = sage/geometry/triangulation/functions.h sage/geometry/triangulation/data.h sage/geometry/triangulation/triangulations.h
# distutils: language = c++
diff --git a/src/sage/geometry/triangulation/data.pxd b/src/sage/geometry/triangulation/data.pxd
index 1baf9381ef7..13bdc971669 100644
--- a/src/sage/geometry/triangulation/data.pxd
+++ b/src/sage/geometry/triangulation/data.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cdef extern from "data.h":
cdef cppclass compact_simplices():
void push_back(int encoded_simplex)
diff --git a/src/sage/geometry/triangulation/element.py b/src/sage/geometry/triangulation/element.py
index e8c8d7e1a51..f40e555ae99 100644
--- a/src/sage/geometry/triangulation/element.py
+++ b/src/sage/geometry/triangulation/element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
A triangulation
diff --git a/src/sage/geometry/triangulation/functions.pxd b/src/sage/geometry/triangulation/functions.pxd
index fa981e5215b..875adc3fdba 100644
--- a/src/sage/geometry/triangulation/functions.pxd
+++ b/src/sage/geometry/triangulation/functions.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cdef extern from "functions.h":
int factorial(int n)
int binomial(int n, int D)
diff --git a/src/sage/geometry/triangulation/point_configuration.py b/src/sage/geometry/triangulation/point_configuration.py
index 89d486b1e4f..88f306b177c 100644
--- a/src/sage/geometry/triangulation/point_configuration.py
+++ b/src/sage/geometry/triangulation/point_configuration.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Triangulations of a point configuration
diff --git a/src/sage/geometry/triangulation/triangulations.pxd b/src/sage/geometry/triangulation/triangulations.pxd
index 0111fb0dd5f..0caca05228c 100644
--- a/src/sage/geometry/triangulation/triangulations.pxd
+++ b/src/sage/geometry/triangulation/triangulations.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cdef extern from "triangulations.h":
ctypedef void* triangulations_ptr
cdef triangulations_ptr init_triangulations \
diff --git a/src/sage/geometry/voronoi_diagram.py b/src/sage/geometry/voronoi_diagram.py
index 0cea1e91377..d2954a310fa 100644
--- a/src/sage/geometry/voronoi_diagram.py
+++ b/src/sage/geometry/voronoi_diagram.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Voronoi diagram
diff --git a/src/sage/graphs/all.py b/src/sage/graphs/all.py
index 68529637000..4986f777404 100644
--- a/src/sage/graphs/all.py
+++ b/src/sage/graphs/all.py
@@ -1,17 +1,19 @@
+# sage_setup: distribution = sagemath-graphs
from sage.misc.lazy_import import lazy_import
lazy_import("sage.graphs.graph_generators", "graphs")
lazy_import("sage.graphs.digraph_generators", "digraphs")
lazy_import("sage.graphs.hypergraph_generators", "hypergraphs")
-lazy_import("sage.graphs.graph_database", ["GraphDatabase", "GenericGraphQuery", "GraphQuery"])
-from .graph import Graph
-from .digraph import DiGraph
-from .bipartite_graph import BipartiteGraph
+lazy_import("sage.graphs.graph_database", [
+ "GraphDatabase", "GenericGraphQuery", "GraphQuery"])
+from sage.graphs.graph import Graph
+from sage.graphs.digraph import DiGraph
+from sage.graphs.bipartite_graph import BipartiteGraph
import sage.graphs.weakly_chordal
import sage.graphs.lovasz_theta
import sage.graphs.partial_cube
-from . import graph_list as graphs_list
+from sage.graphs import graph_list as graphs_list
lazy_import("sage.graphs", "graph_coloring")
lazy_import("sage.graphs.graph_database", "graph_db_info")
lazy_import("sage.graphs.graph_editor", "graph_editor")
@@ -37,3 +39,4 @@
...
NameError: name 'clique_number' is not defined
"""
+del lazy_import
diff --git a/src/sage/graphs/all__sagemath_bliss.py b/src/sage/graphs/all__sagemath_bliss.py
index e69de29bb2d..00e01e7dfe7 100644
--- a/src/sage/graphs/all__sagemath_bliss.py
+++ b/src/sage/graphs/all__sagemath_bliss.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-bliss
diff --git a/src/sage/graphs/all__sagemath_flint.py b/src/sage/graphs/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/graphs/all__sagemath_mcqd.py b/src/sage/graphs/all__sagemath_mcqd.py
index e69de29bb2d..9d46f0ff6ba 100644
--- a/src/sage/graphs/all__sagemath_mcqd.py
+++ b/src/sage/graphs/all__sagemath_mcqd.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-mcqd
diff --git a/src/sage/graphs/all__sagemath_tdlib.py b/src/sage/graphs/all__sagemath_tdlib.py
index e69de29bb2d..e26612c8409 100644
--- a/src/sage/graphs/all__sagemath_tdlib.py
+++ b/src/sage/graphs/all__sagemath_tdlib.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-tdlib
diff --git a/src/sage/graphs/asteroidal_triples.pyx b/src/sage/graphs/asteroidal_triples.pyx
index d2423c912e3..bf70c6dc4e1 100644
--- a/src/sage/graphs/asteroidal_triples.pyx
+++ b/src/sage/graphs/asteroidal_triples.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Asteroidal triples
diff --git a/src/sage/graphs/base/all.py b/src/sage/graphs/base/all.py
index e69de29bb2d..9d0d23c0337 100644
--- a/src/sage/graphs/base/all.py
+++ b/src/sage/graphs/base/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-graphs
diff --git a/src/sage/graphs/base/boost_graph.pxd b/src/sage/graphs/base/boost_graph.pxd
index 7c7333a525b..c0b41e8b5cc 100644
--- a/src/sage/graphs/base/boost_graph.pxd
+++ b/src/sage/graphs/base/boost_graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# distutils: language = c++
# distutils: extra_compile_args = -std=c++11
diff --git a/src/sage/graphs/base/boost_graph.pyx b/src/sage/graphs/base/boost_graph.pyx
index b4474a96bd6..f69bcba3615 100644
--- a/src/sage/graphs/base/boost_graph.pyx
+++ b/src/sage/graphs/base/boost_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Interface to run Boost algorithms
diff --git a/src/sage/graphs/base/c_graph.pxd b/src/sage/graphs/base/c_graph.pxd
index 9cd670ccbc5..19710b4326d 100644
--- a/src/sage/graphs/base/c_graph.pxd
+++ b/src/sage/graphs/base/c_graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
#**************************************************************************
# Copyright (C) 2008-9 Robert L. Miller
#
diff --git a/src/sage/graphs/base/c_graph.pyx b/src/sage/graphs/base/c_graph.pyx
index c8d68c4837f..c1ac19eab2b 100644
--- a/src/sage/graphs/base/c_graph.pyx
+++ b/src/sage/graphs/base/c_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# distutils: language = c++
r"""
Fast compiled graphs
diff --git a/src/sage/graphs/base/dense_graph.pxd b/src/sage/graphs/base/dense_graph.pxd
index 82659713bd9..6fe1fa722e2 100644
--- a/src/sage/graphs/base/dense_graph.pxd
+++ b/src/sage/graphs/base/dense_graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
#*****************************************************************************
# Copyright (C) 2008-2009 Robert L. Miller
#
diff --git a/src/sage/graphs/base/dense_graph.pyx b/src/sage/graphs/base/dense_graph.pyx
index eca8de6afed..3237a0cfbc6 100644
--- a/src/sage/graphs/base/dense_graph.pyx
+++ b/src/sage/graphs/base/dense_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Fast dense graphs
diff --git a/src/sage/graphs/base/graph_backends.pxd b/src/sage/graphs/base/graph_backends.pxd
index 063e70e575e..ad412643bab 100644
--- a/src/sage/graphs/base/graph_backends.pxd
+++ b/src/sage/graphs/base/graph_backends.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.structure.sage_object cimport SageObject
cdef class GenericGraphBackend(SageObject):
diff --git a/src/sage/graphs/base/graph_backends.pyx b/src/sage/graphs/base/graph_backends.pyx
index 77961c33cf6..dff96353d59 100644
--- a/src/sage/graphs/base/graph_backends.pyx
+++ b/src/sage/graphs/base/graph_backends.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
r"""
Backends for Sage (di)graphs
diff --git a/src/sage/graphs/base/overview.py b/src/sage/graphs/base/overview.py
index e349d84b828..a1c781f1afc 100644
--- a/src/sage/graphs/base/overview.py
+++ b/src/sage/graphs/base/overview.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Overview of (di)graph data structures
diff --git a/src/sage/graphs/base/sparse_graph.pxd b/src/sage/graphs/base/sparse_graph.pxd
index 540a8827801..78633ff96ce 100644
--- a/src/sage/graphs/base/sparse_graph.pxd
+++ b/src/sage/graphs/base/sparse_graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# ****************************************************************************
# Copyright (C) 2008-2009 Robert L. Miller
#
diff --git a/src/sage/graphs/base/sparse_graph.pyx b/src/sage/graphs/base/sparse_graph.pyx
index 8672940c404..c0ddfa11f1f 100644
--- a/src/sage/graphs/base/sparse_graph.pyx
+++ b/src/sage/graphs/base/sparse_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Fast sparse graphs
diff --git a/src/sage/graphs/base/static_dense_graph.pxd b/src/sage/graphs/base/static_dense_graph.pxd
index 0e580a02b57..4f513679c41 100644
--- a/src/sage/graphs/base/static_dense_graph.pxd
+++ b/src/sage/graphs/base/static_dense_graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.data_structures.binary_matrix cimport binary_matrix_t
from libc.stdint cimport uint32_t, uint64_t
diff --git a/src/sage/graphs/base/static_dense_graph.pyx b/src/sage/graphs/base/static_dense_graph.pyx
index b23eab66a3b..eb8fda3c547 100644
--- a/src/sage/graphs/base/static_dense_graph.pyx
+++ b/src/sage/graphs/base/static_dense_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Static dense graphs
diff --git a/src/sage/graphs/base/static_sparse_backend.pxd b/src/sage/graphs/base/static_sparse_backend.pxd
index 31f3b172a94..5e1a48a4f75 100644
--- a/src/sage/graphs/base/static_sparse_backend.pxd
+++ b/src/sage/graphs/base/static_sparse_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from libc.stdint cimport uint64_t, uint32_t, INT32_MAX, UINT32_MAX
from sage.data_structures.bitset cimport *
diff --git a/src/sage/graphs/base/static_sparse_backend.pyx b/src/sage/graphs/base/static_sparse_backend.pyx
index 1dc517a957a..2432cf7d5dd 100644
--- a/src/sage/graphs/base/static_sparse_backend.pyx
+++ b/src/sage/graphs/base/static_sparse_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Static sparse graph backend
diff --git a/src/sage/graphs/base/static_sparse_graph.pxd b/src/sage/graphs/base/static_sparse_graph.pxd
index bece6946be3..dd77fe1b3f0 100644
--- a/src/sage/graphs/base/static_sparse_graph.pxd
+++ b/src/sage/graphs/base/static_sparse_graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from cpython.object cimport PyObject
from libc.stdint cimport uint32_t, uint64_t, UINT32_MAX
from sage.data_structures.bitset cimport *
diff --git a/src/sage/graphs/base/static_sparse_graph.pyx b/src/sage/graphs/base/static_sparse_graph.pyx
index 4c68f4043d3..cffc224dd07 100644
--- a/src/sage/graphs/base/static_sparse_graph.pyx
+++ b/src/sage/graphs/base/static_sparse_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: language = c++
r"""
diff --git a/src/sage/graphs/bipartite_graph.py b/src/sage/graphs/bipartite_graph.py
index 6d8e909fa57..dbff11deafd 100644
--- a/src/sage/graphs/bipartite_graph.py
+++ b/src/sage/graphs/bipartite_graph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# autopep8: off
r"""
Bipartite graphs
diff --git a/src/sage/graphs/centrality.pyx b/src/sage/graphs/centrality.pyx
index d73c7571d18..3e6dcf681c4 100755
--- a/src/sage/graphs/centrality.pyx
+++ b/src/sage/graphs/centrality.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Centrality
diff --git a/src/sage/graphs/chrompoly.pyx b/src/sage/graphs/chrompoly.pyx
index 920a2b0eee0..2dbec41de2a 100644
--- a/src/sage/graphs/chrompoly.pyx
+++ b/src/sage/graphs/chrompoly.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# cython: binding=True
# sage.doctest: needs sage.libs.flint sage.graphs
"""
diff --git a/src/sage/graphs/cliquer.pxd b/src/sage/graphs/cliquer.pxd
index df1576b164e..05f6ad93ab0 100644
--- a/src/sage/graphs/cliquer.pxd
+++ b/src/sage/graphs/cliquer.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# distutils: libraries = cliquer
cdef extern from "cliquer/graph.h":
diff --git a/src/sage/graphs/cliquer.pyx b/src/sage/graphs/cliquer.pyx
index 62ce4816ccd..f1f18fd992a 100644
--- a/src/sage/graphs/cliquer.pyx
+++ b/src/sage/graphs/cliquer.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Interface with Cliquer (clique-related problems)
diff --git a/src/sage/graphs/comparability.pyx b/src/sage/graphs/comparability.pyx
index b10ce489268..d30fa021066 100644
--- a/src/sage/graphs/comparability.pyx
+++ b/src/sage/graphs/comparability.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Comparability and permutation graphs
diff --git a/src/sage/graphs/connectivity.pxd b/src/sage/graphs/connectivity.pxd
index f529d2ebdea..ba23b20f2ba 100644
--- a/src/sage/graphs/connectivity.pxd
+++ b/src/sage/graphs/connectivity.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from memory_allocator cimport MemoryAllocator
from sage.graphs.generic_graph_pyx cimport GenericGraph_pyx
diff --git a/src/sage/graphs/connectivity.pyx b/src/sage/graphs/connectivity.pyx
index ee387ab352b..3d9e1a1eda5 100644
--- a/src/sage/graphs/connectivity.pyx
+++ b/src/sage/graphs/connectivity.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Connectivity related functions
diff --git a/src/sage/graphs/convexity_properties.pxd b/src/sage/graphs/convexity_properties.pxd
index f6c1b68b6b8..7f9fc85c3c1 100644
--- a/src/sage/graphs/convexity_properties.pxd
+++ b/src/sage/graphs/convexity_properties.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.data_structures.bitset cimport bitset_t
from sage.data_structures.binary_matrix cimport binary_matrix_t
diff --git a/src/sage/graphs/convexity_properties.pyx b/src/sage/graphs/convexity_properties.pyx
index 60c7941147d..aa107fb4dee 100644
--- a/src/sage/graphs/convexity_properties.pyx
+++ b/src/sage/graphs/convexity_properties.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Convexity properties of graphs
diff --git a/src/sage/graphs/digraph.py b/src/sage/graphs/digraph.py
index e59b62bff9e..dcfd111c3cb 100644
--- a/src/sage/graphs/digraph.py
+++ b/src/sage/graphs/digraph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Directed graphs
diff --git a/src/sage/graphs/digraph_generators.py b/src/sage/graphs/digraph_generators.py
index a5804ab9c8e..073bb5a8dfc 100644
--- a/src/sage/graphs/digraph_generators.py
+++ b/src/sage/graphs/digraph_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Common digraphs
diff --git a/src/sage/graphs/distances_all_pairs.pxd b/src/sage/graphs/distances_all_pairs.pxd
index d87a001d143..3b6287215a0 100644
--- a/src/sage/graphs/distances_all_pairs.pxd
+++ b/src/sage/graphs/distances_all_pairs.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from libc.stdint cimport uint32_t
cdef unsigned short * c_shortest_path_all_pairs(G, vertex_list=*) except NULL
diff --git a/src/sage/graphs/distances_all_pairs.pyx b/src/sage/graphs/distances_all_pairs.pyx
index 3eb15129d19..eae58b0319e 100644
--- a/src/sage/graphs/distances_all_pairs.pyx
+++ b/src/sage/graphs/distances_all_pairs.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Distances/shortest paths between all pairs of vertices
diff --git a/src/sage/graphs/domination.py b/src/sage/graphs/domination.py
index 6b119afed25..7a651fb9bce 100644
--- a/src/sage/graphs/domination.py
+++ b/src/sage/graphs/domination.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Domination
diff --git a/src/sage/graphs/dot2tex_utils.py b/src/sage/graphs/dot2tex_utils.py
index f8eb55485ac..4c653e06598 100644
--- a/src/sage/graphs/dot2tex_utils.py
+++ b/src/sage/graphs/dot2tex_utils.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
This file contains some utility functions for the interface with dot2tex
"""
diff --git a/src/sage/graphs/edge_connectivity.pyx b/src/sage/graphs/edge_connectivity.pyx
index aef8e43d98e..8e9a088eb6c 100644
--- a/src/sage/graphs/edge_connectivity.pyx
+++ b/src/sage/graphs/edge_connectivity.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: language = c++
r"""
diff --git a/src/sage/graphs/generators/all.py b/src/sage/graphs/generators/all.py
index e69de29bb2d..9d0d23c0337 100644
--- a/src/sage/graphs/generators/all.py
+++ b/src/sage/graphs/generators/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-graphs
diff --git a/src/sage/graphs/generators/basic.py b/src/sage/graphs/generators/basic.py
index 216ac0b4e39..405eeab95a1 100644
--- a/src/sage/graphs/generators/basic.py
+++ b/src/sage/graphs/generators/basic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Basic graphs
diff --git a/src/sage/graphs/generators/chessboard.py b/src/sage/graphs/generators/chessboard.py
index a76d6f98de7..79f08fe6492 100644
--- a/src/sage/graphs/generators/chessboard.py
+++ b/src/sage/graphs/generators/chessboard.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Chessboard graphs
diff --git a/src/sage/graphs/generators/classical_geometries.py b/src/sage/graphs/generators/classical_geometries.py
index e27f7e11b6d..5b465cd3bb1 100644
--- a/src/sage/graphs/generators/classical_geometries.py
+++ b/src/sage/graphs/generators/classical_geometries.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: optional - sage.modules
r"""
Families of graphs derived from classical geometries over finite fields
diff --git a/src/sage/graphs/generators/degree_sequence.py b/src/sage/graphs/generators/degree_sequence.py
index 5250bd9cb1a..ab226e3eaf8 100644
--- a/src/sage/graphs/generators/degree_sequence.py
+++ b/src/sage/graphs/generators/degree_sequence.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Graphs with a given degree sequence
diff --git a/src/sage/graphs/generators/distance_regular.pyx b/src/sage/graphs/generators/distance_regular.pyx
index f05e4d714f7..442f88883f6 100644
--- a/src/sage/graphs/generators/distance_regular.pyx
+++ b/src/sage/graphs/generators/distance_regular.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Database of distance regular graphs
diff --git a/src/sage/graphs/generators/families.py b/src/sage/graphs/generators/families.py
index 0d039d8db05..8e97803ea37 100644
--- a/src/sage/graphs/generators/families.py
+++ b/src/sage/graphs/generators/families.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Various families of graphs
diff --git a/src/sage/graphs/generators/intersection.py b/src/sage/graphs/generators/intersection.py
index 0434806fb73..ff948504a82 100644
--- a/src/sage/graphs/generators/intersection.py
+++ b/src/sage/graphs/generators/intersection.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Intersection graphs
diff --git a/src/sage/graphs/generators/platonic_solids.py b/src/sage/graphs/generators/platonic_solids.py
index 5a572611539..db52f5a9ae8 100644
--- a/src/sage/graphs/generators/platonic_solids.py
+++ b/src/sage/graphs/generators/platonic_solids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
1-skeletons of Platonic solids
diff --git a/src/sage/graphs/generators/random.py b/src/sage/graphs/generators/random.py
index 9459124a0fe..8bf3614ecda 100644
--- a/src/sage/graphs/generators/random.py
+++ b/src/sage/graphs/generators/random.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Random graphs
diff --git a/src/sage/graphs/generators/smallgraphs.py b/src/sage/graphs/generators/smallgraphs.py
index f1eaa816d6c..d19f712c904 100644
--- a/src/sage/graphs/generators/smallgraphs.py
+++ b/src/sage/graphs/generators/smallgraphs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Various small graphs
diff --git a/src/sage/graphs/generators/world_map.py b/src/sage/graphs/generators/world_map.py
index 588689d516c..f3c53f2219b 100644
--- a/src/sage/graphs/generators/world_map.py
+++ b/src/sage/graphs/generators/world_map.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Graphs from the World Map
diff --git a/src/sage/graphs/generic_graph.py b/src/sage/graphs/generic_graph.py
index 4d147efcd2f..f9cf7f8961a 100644
--- a/src/sage/graphs/generic_graph.py
+++ b/src/sage/graphs/generic_graph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Generic graphs (common to directed/undirected)
diff --git a/src/sage/graphs/generic_graph_pyx.pxd b/src/sage/graphs/generic_graph_pyx.pxd
index a09c1d69333..317832d3b7a 100644
--- a/src/sage/graphs/generic_graph_pyx.pxd
+++ b/src/sage/graphs/generic_graph_pyx.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.structure.sage_object cimport SageObject
from sage.graphs.base.dense_graph cimport DenseGraph
from memory_allocator cimport MemoryAllocator
diff --git a/src/sage/graphs/generic_graph_pyx.pyx b/src/sage/graphs/generic_graph_pyx.pyx
index 74a6f13c1c6..f67f51df11b 100644
--- a/src/sage/graphs/generic_graph_pyx.pyx
+++ b/src/sage/graphs/generic_graph_pyx.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
"""
GenericGraph Cython functions
diff --git a/src/sage/graphs/genus.pyx b/src/sage/graphs/genus.pyx
index dae6f71308f..24d9ba36d0e 100644
--- a/src/sage/graphs/genus.pyx
+++ b/src/sage/graphs/genus.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Genus
diff --git a/src/sage/graphs/graph.py b/src/sage/graphs/graph.py
index d4f2e18a555..862d94354a4 100644
--- a/src/sage/graphs/graph.py
+++ b/src/sage/graphs/graph.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Undirected graphs
diff --git a/src/sage/graphs/graph_coloring.pyx b/src/sage/graphs/graph_coloring.pyx
index e4b6dd9873e..900aede0ece 100644
--- a/src/sage/graphs/graph_coloring.pyx
+++ b/src/sage/graphs/graph_coloring.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: language = c++
diff --git a/src/sage/graphs/graph_database.py b/src/sage/graphs/graph_database.py
index 653201c3d10..f6f1dfc99f6 100644
--- a/src/sage/graphs/graph_database.py
+++ b/src/sage/graphs/graph_database.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Graph database
diff --git a/src/sage/graphs/graph_decompositions/all.py b/src/sage/graphs/graph_decompositions/all.py
index e69de29bb2d..9d0d23c0337 100644
--- a/src/sage/graphs/graph_decompositions/all.py
+++ b/src/sage/graphs/graph_decompositions/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-graphs
diff --git a/src/sage/graphs/graph_decompositions/all__sagemath_tdlib.py b/src/sage/graphs/graph_decompositions/all__sagemath_tdlib.py
index e69de29bb2d..e26612c8409 100644
--- a/src/sage/graphs/graph_decompositions/all__sagemath_tdlib.py
+++ b/src/sage/graphs/graph_decompositions/all__sagemath_tdlib.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-tdlib
diff --git a/src/sage/graphs/graph_decompositions/bandwidth.pyx b/src/sage/graphs/graph_decompositions/bandwidth.pyx
index 61bacd2daf5..659c9eefdb2 100644
--- a/src/sage/graphs/graph_decompositions/bandwidth.pyx
+++ b/src/sage/graphs/graph_decompositions/bandwidth.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Bandwidth of undirected graphs
diff --git a/src/sage/graphs/graph_decompositions/clique_separators.pyx b/src/sage/graphs/graph_decompositions/clique_separators.pyx
index 0989a5a9dae..e6d60adc6ac 100644
--- a/src/sage/graphs/graph_decompositions/clique_separators.pyx
+++ b/src/sage/graphs/graph_decompositions/clique_separators.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: language = c++
r"""
diff --git a/src/sage/graphs/graph_decompositions/cutwidth.pyx b/src/sage/graphs/graph_decompositions/cutwidth.pyx
index 8aa99a242c9..f2fc9ee9951 100644
--- a/src/sage/graphs/graph_decompositions/cutwidth.pyx
+++ b/src/sage/graphs/graph_decompositions/cutwidth.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Cutwidth
diff --git a/src/sage/graphs/graph_decompositions/fast_digraph.pxd b/src/sage/graphs/graph_decompositions/fast_digraph.pxd
index 2687f8f974d..b2b2f44b989 100644
--- a/src/sage/graphs/graph_decompositions/fast_digraph.pxd
+++ b/src/sage/graphs/graph_decompositions/fast_digraph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from libc.stdint cimport uint8_t
cdef class FastDigraph:
diff --git a/src/sage/graphs/graph_decompositions/fast_digraph.pyx b/src/sage/graphs/graph_decompositions/fast_digraph.pyx
index 2d28ccf4d05..5e0924e06ff 100644
--- a/src/sage/graphs/graph_decompositions/fast_digraph.pyx
+++ b/src/sage/graphs/graph_decompositions/fast_digraph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Compact structure for fast operations on less than 32 vertices
diff --git a/src/sage/graphs/graph_decompositions/graph_products.pyx b/src/sage/graphs/graph_decompositions/graph_products.pyx
index 98bfb6ec0f5..df053ac937a 100644
--- a/src/sage/graphs/graph_decompositions/graph_products.pyx
+++ b/src/sage/graphs/graph_decompositions/graph_products.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Products of graphs
diff --git a/src/sage/graphs/graph_decompositions/modular_decomposition.py b/src/sage/graphs/graph_decompositions/modular_decomposition.py
index 6b1e825ba2e..d62c28c7922 100644
--- a/src/sage/graphs/graph_decompositions/modular_decomposition.py
+++ b/src/sage/graphs/graph_decompositions/modular_decomposition.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Modular Decomposition
diff --git a/src/sage/graphs/graph_decompositions/rankwidth.pxd b/src/sage/graphs/graph_decompositions/rankwidth.pxd
index a23faceac4f..a970d155391 100644
--- a/src/sage/graphs/graph_decompositions/rankwidth.pxd
+++ b/src/sage/graphs/graph_decompositions/rankwidth.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
cdef extern from "rw.h":
ctypedef int uint_fast8_t
ctypedef int uint_fast32_t
diff --git a/src/sage/graphs/graph_decompositions/rankwidth.pyx b/src/sage/graphs/graph_decompositions/rankwidth.pyx
index d817cf04a5d..438b0a9e1b2 100644
--- a/src/sage/graphs/graph_decompositions/rankwidth.pyx
+++ b/src/sage/graphs/graph_decompositions/rankwidth.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: libraries = rw
r"""
diff --git a/src/sage/graphs/graph_decompositions/tree_decomposition.pxd b/src/sage/graphs/graph_decompositions/tree_decomposition.pxd
index 2de876e8889..ace3fd5a327 100644
--- a/src/sage/graphs/graph_decompositions/tree_decomposition.pxd
+++ b/src/sage/graphs/graph_decompositions/tree_decomposition.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.graphs.generic_graph_pyx cimport GenericGraph_pyx
cdef class TreelengthConnected:
diff --git a/src/sage/graphs/graph_decompositions/tree_decomposition.pyx b/src/sage/graphs/graph_decompositions/tree_decomposition.pyx
index 0fb9f87c6ee..64bf05b0889 100644
--- a/src/sage/graphs/graph_decompositions/tree_decomposition.pyx
+++ b/src/sage/graphs/graph_decompositions/tree_decomposition.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Tree decompositions
diff --git a/src/sage/graphs/graph_decompositions/vertex_separation.pxd b/src/sage/graphs/graph_decompositions/vertex_separation.pxd
index fa757b2c28e..94a46c33c26 100644
--- a/src/sage/graphs/graph_decompositions/vertex_separation.pxd
+++ b/src/sage/graphs/graph_decompositions/vertex_separation.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from libc.stdint cimport uint8_t
from sage.graphs.graph_decompositions.fast_digraph cimport FastDigraph
diff --git a/src/sage/graphs/graph_decompositions/vertex_separation.pyx b/src/sage/graphs/graph_decompositions/vertex_separation.pyx
index 2d49f4bdb29..bc1f8c8dade 100644
--- a/src/sage/graphs/graph_decompositions/vertex_separation.pyx
+++ b/src/sage/graphs/graph_decompositions/vertex_separation.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Vertex separation
diff --git a/src/sage/graphs/graph_editor.py b/src/sage/graphs/graph_editor.py
index fc1fc72ccc8..e09368db17a 100644
--- a/src/sage/graphs/graph_editor.py
+++ b/src/sage/graphs/graph_editor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Graph editor widget
diff --git a/src/sage/graphs/graph_generators.py b/src/sage/graphs/graph_generators.py
index 5a09c617ba2..6708600eb31 100644
--- a/src/sage/graphs/graph_generators.py
+++ b/src/sage/graphs/graph_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Common graphs
diff --git a/src/sage/graphs/graph_generators_pyx.pyx b/src/sage/graphs/graph_generators_pyx.pyx
index 033e8b22adc..1817e99c497 100644
--- a/src/sage/graphs/graph_generators_pyx.pyx
+++ b/src/sage/graphs/graph_generators_pyx.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Common graphs and digraphs generators (Cython)
diff --git a/src/sage/graphs/graph_input.py b/src/sage/graphs/graph_input.py
index 52941853359..1da45c63e35 100644
--- a/src/sage/graphs/graph_input.py
+++ b/src/sage/graphs/graph_input.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Functions for reading/building graphs/digraphs
diff --git a/src/sage/graphs/graph_latex.py b/src/sage/graphs/graph_latex.py
index 42cc1b369ab..9c18c959a29 100644
--- a/src/sage/graphs/graph_latex.py
+++ b/src/sage/graphs/graph_latex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.plot
r"""
LaTeX options for graphs
diff --git a/src/sage/graphs/graph_list.py b/src/sage/graphs/graph_list.py
index 6994a821948..d6bfcfd1369 100644
--- a/src/sage/graphs/graph_list.py
+++ b/src/sage/graphs/graph_list.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Lists of graphs
diff --git a/src/sage/graphs/graph_plot.py b/src/sage/graphs/graph_plot.py
index 6e36a195197..8794587bab6 100644
--- a/src/sage/graphs/graph_plot.py
+++ b/src/sage/graphs/graph_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: optional - sage.plot
r"""
Graph plotting
diff --git a/src/sage/graphs/graph_plot_js.py b/src/sage/graphs/graph_plot_js.py
index cd9c635c736..95440d5560b 100644
--- a/src/sage/graphs/graph_plot_js.py
+++ b/src/sage/graphs/graph_plot_js.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.plot
r"""
Graph plotting in Javascript with d3.js
diff --git a/src/sage/graphs/hyperbolicity.pyx b/src/sage/graphs/hyperbolicity.pyx
index 78b3205b6fd..6cc36695efd 100644
--- a/src/sage/graphs/hyperbolicity.pyx
+++ b/src/sage/graphs/hyperbolicity.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Hyperbolicity
diff --git a/src/sage/graphs/hypergraph_generators.py b/src/sage/graphs/hypergraph_generators.py
index f5218e225f1..5141c02e968 100644
--- a/src/sage/graphs/hypergraph_generators.py
+++ b/src/sage/graphs/hypergraph_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Hypergraph generators
diff --git a/src/sage/graphs/independent_sets.pxd b/src/sage/graphs/independent_sets.pxd
index 91f65b64ff7..7089adec2ae 100644
--- a/src/sage/graphs/independent_sets.pxd
+++ b/src/sage/graphs/independent_sets.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from libc.stdint cimport uint32_t, uint64_t
from sage.data_structures.binary_matrix cimport *
diff --git a/src/sage/graphs/independent_sets.pyx b/src/sage/graphs/independent_sets.pyx
index 3064ccbc86f..22303abefd5 100644
--- a/src/sage/graphs/independent_sets.pyx
+++ b/src/sage/graphs/independent_sets.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Independent sets
diff --git a/src/sage/graphs/isgci.py b/src/sage/graphs/isgci.py
index 2315ea4679d..a573bce2fd7 100644
--- a/src/sage/graphs/isgci.py
+++ b/src/sage/graphs/isgci.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
ISGCI: Information System on Graph Classes and their Inclusions
diff --git a/src/sage/graphs/isoperimetric_inequalities.pyx b/src/sage/graphs/isoperimetric_inequalities.pyx
index 1d01e311c1c..0b17d17f59f 100644
--- a/src/sage/graphs/isoperimetric_inequalities.pyx
+++ b/src/sage/graphs/isoperimetric_inequalities.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding = True
r"""
Isoperimetric inequalities
diff --git a/src/sage/graphs/line_graph.pyx b/src/sage/graphs/line_graph.pyx
index 796e15d44ab..e17bcdb767e 100644
--- a/src/sage/graphs/line_graph.pyx
+++ b/src/sage/graphs/line_graph.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Line graphs
diff --git a/src/sage/graphs/lovasz_theta.py b/src/sage/graphs/lovasz_theta.py
index 5335a597ebf..8ebd37e2372 100644
--- a/src/sage/graphs/lovasz_theta.py
+++ b/src/sage/graphs/lovasz_theta.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Lovász theta-function of graphs
diff --git a/src/sage/graphs/matchpoly.pyx b/src/sage/graphs/matchpoly.pyx
index 03b15c066d1..f04c258e8a2 100644
--- a/src/sage/graphs/matchpoly.pyx
+++ b/src/sage/graphs/matchpoly.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# cython: binding=True
# sage.doctest: needs sage.libs.flint sage.graphs
"""
diff --git a/src/sage/graphs/orientations.py b/src/sage/graphs/orientations.py
index 1ecb283ba2a..2658c416470 100644
--- a/src/sage/graphs/orientations.py
+++ b/src/sage/graphs/orientations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Orientations
diff --git a/src/sage/graphs/partial_cube.py b/src/sage/graphs/partial_cube.py
index 79b1edc957c..5f181f557d0 100644
--- a/src/sage/graphs/partial_cube.py
+++ b/src/sage/graphs/partial_cube.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Partial cubes
diff --git a/src/sage/graphs/path_enumeration.pyx b/src/sage/graphs/path_enumeration.pyx
index 78832f89134..4ca9a5d21f8 100644
--- a/src/sage/graphs/path_enumeration.pyx
+++ b/src/sage/graphs/path_enumeration.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: language = c++
r"""
diff --git a/src/sage/graphs/planarity.pyx b/src/sage/graphs/planarity.pyx
index 987669d97fe..351238ffacd 100644
--- a/src/sage/graphs/planarity.pyx
+++ b/src/sage/graphs/planarity.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# distutils: libraries = planarity
"""
Wrapper for Boyer's (C) planarity algorithm
diff --git a/src/sage/graphs/pq_trees.py b/src/sage/graphs/pq_trees.py
index 66f0c9aaf67..3530bf7a0d7 100644
--- a/src/sage/graphs/pq_trees.py
+++ b/src/sage/graphs/pq_trees.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
PQ-Trees
diff --git a/src/sage/graphs/print_graphs.py b/src/sage/graphs/print_graphs.py
index e89610d0424..e0248c86806 100644
--- a/src/sage/graphs/print_graphs.py
+++ b/src/sage/graphs/print_graphs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Print graph
diff --git a/src/sage/graphs/schnyder.py b/src/sage/graphs/schnyder.py
index b22ab6d3302..4371f22ceae 100644
--- a/src/sage/graphs/schnyder.py
+++ b/src/sage/graphs/schnyder.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Schnyder's algorithm for straight-line planar embeddings
diff --git a/src/sage/graphs/spanning_tree.pyx b/src/sage/graphs/spanning_tree.pyx
index ccddfa7f5b4..84088d585d0 100644
--- a/src/sage/graphs/spanning_tree.pyx
+++ b/src/sage/graphs/spanning_tree.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Spanning trees
diff --git a/src/sage/graphs/strongly_regular_db.pyx b/src/sage/graphs/strongly_regular_db.pyx
index 27cfd3da535..267ee25170e 100644
--- a/src/sage/graphs/strongly_regular_db.pyx
+++ b/src/sage/graphs/strongly_regular_db.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
r"""
Database of strongly regular graphs
diff --git a/src/sage/graphs/traversals.pxd b/src/sage/graphs/traversals.pxd
index a81c72dcd9d..f937451fc7e 100644
--- a/src/sage/graphs/traversals.pxd
+++ b/src/sage/graphs/traversals.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.graphs.base.static_sparse_graph cimport short_digraph
cdef maximum_cardinality_search_M_short_digraph(short_digraph sd,
diff --git a/src/sage/graphs/traversals.pyx b/src/sage/graphs/traversals.pyx
index d7dfad47a30..06bf346271d 100644
--- a/src/sage/graphs/traversals.pyx
+++ b/src/sage/graphs/traversals.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
# distutils: language = c++
r"""
diff --git a/src/sage/graphs/trees.pxd b/src/sage/graphs/trees.pxd
index f2c81ab49a7..953d29c1f7e 100644
--- a/src/sage/graphs/trees.pxd
+++ b/src/sage/graphs/trees.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
cdef class TreeIterator:
cdef int vertices
diff --git a/src/sage/graphs/trees.pyx b/src/sage/graphs/trees.pyx
index 2fd64e9ef43..6e87c647667 100644
--- a/src/sage/graphs/trees.pyx
+++ b/src/sage/graphs/trees.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Generation of trees
diff --git a/src/sage/graphs/tutte_polynomial.py b/src/sage/graphs/tutte_polynomial.py
index 6206b963b50..58012201b26 100644
--- a/src/sage/graphs/tutte_polynomial.py
+++ b/src/sage/graphs/tutte_polynomial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Tutte polynomial
diff --git a/src/sage/graphs/views.pyx b/src/sage/graphs/views.pyx
index d8eb1b3eae6..19660e48fd1 100644
--- a/src/sage/graphs/views.pyx
+++ b/src/sage/graphs/views.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
View classes
diff --git a/src/sage/graphs/weakly_chordal.pyx b/src/sage/graphs/weakly_chordal.pyx
index ea82042f996..f337d0d3281 100644
--- a/src/sage/graphs/weakly_chordal.pyx
+++ b/src/sage/graphs/weakly_chordal.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# cython: binding=True
r"""
Weakly chordal graphs
diff --git a/src/sage/groups/abelian_gps/abelian_aut.py b/src/sage/groups/abelian_gps/abelian_aut.py
index b27f9bdb220..5b9f8f53b32 100644
--- a/src/sage/groups/abelian_gps/abelian_aut.py
+++ b/src/sage/groups/abelian_gps/abelian_aut.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
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 90cdcaa42fd..356e3e20284 100644
--- a/src/sage/groups/abelian_gps/abelian_group.py
+++ b/src/sage/groups/abelian_gps/abelian_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Multiplicative Abelian Groups
@@ -981,8 +982,8 @@ def gens_orders(self):
TESTS::
sage: G, (g0, g1) = AbelianGroup(2, [48, 0]).objgens()
- sage: G0 = G.subgroup([g0])
- sage: len(G0.gens()) == len(G0.gens_orders())
+ sage: G0 = G.subgroup([g0]) # optional - gap_package_polycyclic
+ sage: len(G0.gens()) == len(G0.gens_orders()) # optional - gap_package_polycyclic
True
sage: F = AbelianGroup(3, [2], names='abc')
sage: list(map(type, F.gens_orders()))
diff --git a/src/sage/groups/abelian_gps/abelian_group_element.py b/src/sage/groups/abelian_gps/abelian_group_element.py
index b081f1e1c4e..e7a95a13bba 100644
--- a/src/sage/groups/abelian_gps/abelian_group_element.py
+++ b/src/sage/groups/abelian_gps/abelian_group_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Abelian group elements
diff --git a/src/sage/groups/abelian_gps/abelian_group_gap.py b/src/sage/groups/abelian_gps/abelian_group_gap.py
index 9ce83a6e33c..c51857fa4a3 100644
--- a/src/sage/groups/abelian_gps/abelian_group_gap.py
+++ b/src/sage/groups/abelian_gps/abelian_group_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Finitely generated abelian groups with GAP.
diff --git a/src/sage/groups/abelian_gps/abelian_group_morphism.py b/src/sage/groups/abelian_gps/abelian_group_morphism.py
index e4b7b82b42b..650567fe07d 100644
--- a/src/sage/groups/abelian_gps/abelian_group_morphism.py
+++ b/src/sage/groups/abelian_gps/abelian_group_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Homomorphisms of abelian groups
diff --git a/src/sage/groups/abelian_gps/all.py b/src/sage/groups/abelian_gps/all.py
index 2bb91f85f3b..6d1dd159ba6 100644
--- a/src/sage/groups/abelian_gps/all.py
+++ b/src/sage/groups/abelian_gps/all.py
@@ -1,8 +1,9 @@
+# sage_setup: distribution = sagemath-groups
"""
all.py -- export of abelian groups to Sage
"""
-#*****************************************************************************
+# *****************************************************************************
#
# Sage: Open Source Mathematical Software
#
@@ -17,13 +18,8 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-#from dual_abelian_group import DualAbelianGroup
-from .abelian_group import AbelianGroup, word_problem
-from .values import AbelianGroupWithValues
-
-# TODO:
-# Implement group homset, conversion of generator images to morphism
-from .abelian_group_morphism import AbelianGroupMorphism
+from sage.groups.abelian_gps.all__sagemath_modules import *
+from sage.groups.abelian_gps.all__sagemath_gap import *
diff --git a/src/sage/groups/abelian_gps/all__sagemath_gap.py b/src/sage/groups/abelian_gps/all__sagemath_gap.py
new file mode 100644
index 00000000000..80c0bd46216
--- /dev/null
+++ b/src/sage/groups/abelian_gps/all__sagemath_gap.py
@@ -0,0 +1,5 @@
+
+# TODO:
+# Implement group homset, conversion of generator images to morphism
+
+from sage.groups.abelian_gps.abelian_group_morphism import AbelianGroupMorphism
diff --git a/src/sage/groups/abelian_gps/all__sagemath_modules.py b/src/sage/groups/abelian_gps/all__sagemath_modules.py
new file mode 100644
index 00000000000..32a1f65f720
--- /dev/null
+++ b/src/sage/groups/abelian_gps/all__sagemath_modules.py
@@ -0,0 +1,4 @@
+
+# from dual_abelian_group import DualAbelianGroup
+from sage.groups.abelian_gps.abelian_group import AbelianGroup, word_problem
+from sage.groups.abelian_gps.values import AbelianGroupWithValues
diff --git a/src/sage/groups/abelian_gps/dual_abelian_group.py b/src/sage/groups/abelian_gps/dual_abelian_group.py
index 4aecfd69816..2d8970e6897 100644
--- a/src/sage/groups/abelian_gps/dual_abelian_group.py
+++ b/src/sage/groups/abelian_gps/dual_abelian_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.number_field
r"""
Dual groups of Finite Multiplicative Abelian Groups
diff --git a/src/sage/groups/abelian_gps/dual_abelian_group_element.py b/src/sage/groups/abelian_gps/dual_abelian_group_element.py
index 6fdb8a68c4e..08afe59ecd5 100644
--- a/src/sage/groups/abelian_gps/dual_abelian_group_element.py
+++ b/src/sage/groups/abelian_gps/dual_abelian_group_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.number_field
"""
Elements (characters) of the dual group of a finite Abelian group
diff --git a/src/sage/groups/abelian_gps/element_base.py b/src/sage/groups/abelian_gps/element_base.py
index 0435c9835b9..9ed358c9807 100644
--- a/src/sage/groups/abelian_gps/element_base.py
+++ b/src/sage/groups/abelian_gps/element_base.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Base class for abelian group elements
diff --git a/src/sage/groups/abelian_gps/values.py b/src/sage/groups/abelian_gps/values.py
index 3db117123f0..32992e04eb9 100644
--- a/src/sage/groups/abelian_gps/values.py
+++ b/src/sage/groups/abelian_gps/values.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Multiplicative Abelian Groups With Values
diff --git a/src/sage/groups/additive_abelian/additive_abelian_group.py b/src/sage/groups/additive_abelian/additive_abelian_group.py
index 167b38a9cc0..05ed10d52c2 100644
--- a/src/sage/groups/additive_abelian/additive_abelian_group.py
+++ b/src/sage/groups/additive_abelian/additive_abelian_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Additive Abelian Groups
diff --git a/src/sage/groups/additive_abelian/additive_abelian_wrapper.py b/src/sage/groups/additive_abelian/additive_abelian_wrapper.py
index bf16874d97f..05e017aa78d 100644
--- a/src/sage/groups/additive_abelian/additive_abelian_wrapper.py
+++ b/src/sage/groups/additive_abelian/additive_abelian_wrapper.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Wrapper class for abelian groups
diff --git a/src/sage/groups/additive_abelian/all.py b/src/sage/groups/additive_abelian/all.py
index 956cf00614e..6b2648bb3dc 100644
--- a/src/sage/groups/additive_abelian/all.py
+++ b/src/sage/groups/additive_abelian/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
-from .additive_abelian_group import AdditiveAbelianGroup
-from .additive_abelian_wrapper import *
+from sage.groups.additive_abelian.additive_abelian_group import AdditiveAbelianGroup
+from sage.groups.additive_abelian.additive_abelian_wrapper import *
diff --git a/src/sage/groups/additive_abelian/qmodnz.py b/src/sage/groups/additive_abelian/qmodnz.py
index db0b23d5fe4..8c1b60ee80f 100644
--- a/src/sage/groups/additive_abelian/qmodnz.py
+++ b/src/sage/groups/additive_abelian/qmodnz.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
This module implements `\Q/n\Z` for `n \in \Q`.
diff --git a/src/sage/groups/additive_abelian/qmodnz_element.py b/src/sage/groups/additive_abelian/qmodnz_element.py
index 10f92f76bf9..ea0191212f9 100644
--- a/src/sage/groups/additive_abelian/qmodnz_element.py
+++ b/src/sage/groups/additive_abelian/qmodnz_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements of `\Q/n\Z`.
diff --git a/src/sage/groups/affine_gps/affine_group.py b/src/sage/groups/affine_gps/affine_group.py
index a811640c3c0..8e5662d5855 100644
--- a/src/sage/groups/affine_gps/affine_group.py
+++ b/src/sage/groups/affine_gps/affine_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Affine Groups
diff --git a/src/sage/groups/affine_gps/all.py b/src/sage/groups/affine_gps/all.py
index e69de29bb2d..6f6ab52d0f2 100644
--- a/src/sage/groups/affine_gps/all.py
+++ b/src/sage/groups/affine_gps/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-modules
diff --git a/src/sage/groups/affine_gps/catalog.py b/src/sage/groups/affine_gps/catalog.py
index cefcfeb97bf..5e86c8ded23 100644
--- a/src/sage/groups/affine_gps/catalog.py
+++ b/src/sage/groups/affine_gps/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Type ``groups.affine.`` to access examples
of groups implemented as affine groups.
diff --git a/src/sage/groups/affine_gps/euclidean_group.py b/src/sage/groups/affine_gps/euclidean_group.py
index 3154eee7a01..467d64eb017 100644
--- a/src/sage/groups/affine_gps/euclidean_group.py
+++ b/src/sage/groups/affine_gps/euclidean_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Euclidean Groups
diff --git a/src/sage/groups/affine_gps/group_element.py b/src/sage/groups/affine_gps/group_element.py
index 42546194bb6..6b33bcf95d7 100644
--- a/src/sage/groups/affine_gps/group_element.py
+++ b/src/sage/groups/affine_gps/group_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements of Affine Groups
diff --git a/src/sage/groups/all.py b/src/sage/groups/all.py
index 5fa9ccfac39..eda2cdcbe5b 100644
--- a/src/sage/groups/all.py
+++ b/src/sage/groups/all.py
@@ -1,37 +1,6 @@
-from sage.misc.lazy_import import lazy_import
+# sage_setup: distribution = sagemath-groups
-from .pari_group import PariGroup
-
-from .matrix_gps.all import *
-from .abelian_gps.all import *
-
-from .perm_gps.all import *
-
-from .generic import (discrete_log, discrete_log_rho, discrete_log_lambda,
- linear_relation, multiple, multiples, order_from_multiple)
-
-lazy_import('sage.groups.class_function', 'ClassFunction')
-
-from .additive_abelian.all import *
-
-lazy_import('sage.groups.conjugacy_classes', ['ConjugacyClass', 'ConjugacyClassGAP'])
-
-lazy_import('sage.groups.free_group', 'FreeGroup')
-lazy_import('sage.groups.braid', 'BraidGroup')
-lazy_import('sage.groups.cubic_braid', 'CubicBraidGroup')
-lazy_import('sage.groups.cubic_braid', 'AssionGroupU')
-lazy_import('sage.groups.cubic_braid', 'AssionGroupS')
-
-lazy_import('sage.groups.affine_gps.affine_group', 'AffineGroup')
-lazy_import('sage.groups.affine_gps.euclidean_group', 'EuclideanGroup')
-
-lazy_import('sage.groups.artin', 'ArtinGroup')
-lazy_import('sage.groups.raag', 'RightAngledArtinGroup')
-
-lazy_import('sage.groups', 'groups_catalog', 'groups')
-
-lazy_import('sage.groups.semimonomial_transformations.semimonomial_transformation_group', 'SemimonomialTransformationGroup')
-
-lazy_import('sage.groups.group_exp', ['GroupExp', 'GroupExp_Class', 'GroupExpElement'])
-
-lazy_import('sage.groups.group_semidirect_product', ['GroupSemidirectProduct', 'GroupSemidirectProductElement'])
+from sage.groups.all__sagemath_modules import *
+from sage.groups.all__sagemath_gap import *
+from sage.groups.all__sagemath_pari import *
+from sage.groups.all__sagemath_groups import *
diff --git a/src/sage/groups/all__sagemath_categories.py b/src/sage/groups/all__sagemath_categories.py
new file mode 100644
index 00000000000..cf28b7d6bff
--- /dev/null
+++ b/src/sage/groups/all__sagemath_categories.py
@@ -0,0 +1,10 @@
+from sage.groups.all__sagemath_objects import *
+
+from sage.groups.generic import (discrete_log, discrete_log_rho, discrete_log_lambda,
+ linear_relation, multiple, multiples, order_from_multiple)
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.groups', 'groups_catalog', 'groups')
+
+del lazy_import
diff --git a/src/sage/groups/all__sagemath_combinat.py b/src/sage/groups/all__sagemath_combinat.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/all__sagemath_gap.py b/src/sage/groups/all__sagemath_gap.py
new file mode 100644
index 00000000000..15278ba12aa
--- /dev/null
+++ b/src/sage/groups/all__sagemath_gap.py
@@ -0,0 +1,3 @@
+
+from sage.groups.perm_gps.all import *
+from sage.groups.abelian_gps.all__sagemath_gap import *
diff --git a/src/sage/groups/all__sagemath_graphs.py b/src/sage/groups/all__sagemath_graphs.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/all__sagemath_groups.py b/src/sage/groups/all__sagemath_groups.py
new file mode 100644
index 00000000000..c27a9ca05c5
--- /dev/null
+++ b/src/sage/groups/all__sagemath_groups.py
@@ -0,0 +1,32 @@
+from sage.groups.all__sagemath_modules import *
+
+try:
+ from sage.groups.all__sagemath_pari import *
+except ImportError:
+ pass
+
+from sage.groups.all__sagemath_gap import *
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.groups.class_function', 'ClassFunction')
+
+lazy_import('sage.groups.conjugacy_classes', ['ConjugacyClass', 'ConjugacyClassGAP'])
+
+lazy_import('sage.groups.free_group', 'FreeGroup')
+lazy_import('sage.groups.braid', 'BraidGroup')
+lazy_import('sage.groups.cubic_braid', 'CubicBraidGroup')
+lazy_import('sage.groups.cubic_braid', 'AssionGroupU')
+lazy_import('sage.groups.cubic_braid', 'AssionGroupS')
+
+lazy_import('sage.groups.artin', 'ArtinGroup')
+lazy_import('sage.groups.raag', 'RightAngledArtinGroup')
+
+lazy_import('sage.groups.semimonomial_transformations.semimonomial_transformation_group',
+ 'SemimonomialTransformationGroup')
+
+lazy_import('sage.groups.group_exp', ['GroupExp', 'GroupExp_Class', 'GroupExpElement'])
+
+lazy_import('sage.groups.group_semidirect_product', [
+ 'GroupSemidirectProduct', 'GroupSemidirectProductElement'])
+del lazy_import
diff --git a/src/sage/groups/all__sagemath_modules.py b/src/sage/groups/all__sagemath_modules.py
new file mode 100644
index 00000000000..6a3eb638a9b
--- /dev/null
+++ b/src/sage/groups/all__sagemath_modules.py
@@ -0,0 +1,11 @@
+from sage.groups.all__sagemath_categories import *
+
+from sage.groups.additive_abelian.all import *
+from sage.groups.abelian_gps.all__sagemath_modules import *
+from sage.groups.matrix_gps.all__sagemath_modules import *
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.groups.affine_gps.affine_group', 'AffineGroup')
+lazy_import('sage.groups.affine_gps.euclidean_group', 'EuclideanGroup')
+del lazy_import
diff --git a/src/sage/groups/all__sagemath_objects.py b/src/sage/groups/all__sagemath_objects.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/all__sagemath_pari.py b/src/sage/groups/all__sagemath_pari.py
new file mode 100644
index 00000000000..97f61bbfc2c
--- /dev/null
+++ b/src/sage/groups/all__sagemath_pari.py
@@ -0,0 +1,2 @@
+
+from sage.groups.pari_group import PariGroup
diff --git a/src/sage/groups/artin.py b/src/sage/groups/artin.py
index afb40463206..c3b747b8595 100644
--- a/src/sage/groups/artin.py
+++ b/src/sage/groups/artin.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
"""
Artin Groups
diff --git a/src/sage/groups/braid.py b/src/sage/groups/braid.py
index fb52b074218..4a2e081d2b7 100644
--- a/src/sage/groups/braid.py
+++ b/src/sage/groups/braid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
"""
Braid groups
diff --git a/src/sage/groups/cactus_group.py b/src/sage/groups/cactus_group.py
index a4a6fe629b0..e4e1c41833e 100644
--- a/src/sage/groups/cactus_group.py
+++ b/src/sage/groups/cactus_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
# sage.doctest: needs sage.rings.number_field
r"""
Cactus Groups
diff --git a/src/sage/groups/class_function.py b/src/sage/groups/class_function.py
index 901b0083b49..af465b4c8b0 100644
--- a/src/sage/groups/class_function.py
+++ b/src/sage/groups/class_function.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
# sage.doctest: needs sage.rings.number_field
r"""
Class functions of groups.
diff --git a/src/sage/groups/conjugacy_classes.py b/src/sage/groups/conjugacy_classes.py
index 147cc803842..873d420b547 100644
--- a/src/sage/groups/conjugacy_classes.py
+++ b/src/sage/groups/conjugacy_classes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Conjugacy classes of groups
diff --git a/src/sage/groups/cubic_braid.py b/src/sage/groups/cubic_braid.py
index 9dd59e069f9..36fccfebbc3 100644
--- a/src/sage/groups/cubic_braid.py
+++ b/src/sage/groups/cubic_braid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Cubic Braid Groups
diff --git a/src/sage/groups/finitely_presented.py b/src/sage/groups/finitely_presented.py
index 3388c41d954..d1152a17740 100644
--- a/src/sage/groups/finitely_presented.py
+++ b/src/sage/groups/finitely_presented.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
"""
Finitely Presented Groups
diff --git a/src/sage/groups/finitely_presented_catalog.py b/src/sage/groups/finitely_presented_catalog.py
index 512e851628b..a21d3e582cb 100644
--- a/src/sage/groups/finitely_presented_catalog.py
+++ b/src/sage/groups/finitely_presented_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
"""
Type ``groups.presentation.`` to access examples
of groups implemented as finite presentations (quotients of
diff --git a/src/sage/groups/finitely_presented_named.py b/src/sage/groups/finitely_presented_named.py
index d800bf014d0..262d205ccf4 100644
--- a/src/sage/groups/finitely_presented_named.py
+++ b/src/sage/groups/finitely_presented_named.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Named Finitely Presented Groups
diff --git a/src/sage/groups/fqf_orthogonal.py b/src/sage/groups/fqf_orthogonal.py
index 8c996ad3c6a..fd14f5142cf 100644
--- a/src/sage/groups/fqf_orthogonal.py
+++ b/src/sage/groups/fqf_orthogonal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Orthogonal Groups of Torsion Quadratic Forms
diff --git a/src/sage/groups/free_group.py b/src/sage/groups/free_group.py
index 471940f6b95..2639df59f55 100644
--- a/src/sage/groups/free_group.py
+++ b/src/sage/groups/free_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
"""
Free Groups
diff --git a/src/sage/groups/galois_group.py b/src/sage/groups/galois_group.py
index a7439d18ab3..d7d479305fa 100644
--- a/src/sage/groups/galois_group.py
+++ b/src/sage/groups/galois_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Galois groups of field extensions.
diff --git a/src/sage/groups/galois_group_perm.py b/src/sage/groups/galois_group_perm.py
index 7a640bcfe29..0c348e603a8 100644
--- a/src/sage/groups/galois_group_perm.py
+++ b/src/sage/groups/galois_group_perm.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Galois groups of field extensions as permutation groups
"""
diff --git a/src/sage/groups/generic.py b/src/sage/groups/generic.py
index cb406b444af..bf710fb566b 100644
--- a/src/sage/groups/generic.py
+++ b/src/sage/groups/generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Miscellaneous generic functions
diff --git a/src/sage/groups/group.pxd b/src/sage/groups/group.pxd
index 8a38ba4b583..771408df9ab 100644
--- a/src/sage/groups/group.pxd
+++ b/src/sage/groups/group.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.parent cimport Parent
cdef class Group(Parent):
diff --git a/src/sage/groups/group.pyx b/src/sage/groups/group.pyx
index 9ecbfde9d6f..d26829cc694 100644
--- a/src/sage/groups/group.pyx
+++ b/src/sage/groups/group.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Base class for groups
"""
diff --git a/src/sage/groups/group_exp.py b/src/sage/groups/group_exp.py
index ffae5e73cb2..fe3567e5801 100644
--- a/src/sage/groups/group_exp.py
+++ b/src/sage/groups/group_exp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Functor that converts a commutative additive group into a multiplicative group.
diff --git a/src/sage/groups/group_semidirect_product.py b/src/sage/groups/group_semidirect_product.py
index 1805dbbc53a..e5e7077f271 100644
--- a/src/sage/groups/group_semidirect_product.py
+++ b/src/sage/groups/group_semidirect_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Semidirect product of groups
diff --git a/src/sage/groups/groups_catalog.py b/src/sage/groups/groups_catalog.py
index a95ffaefb4a..d2c87813273 100644
--- a/src/sage/groups/groups_catalog.py
+++ b/src/sage/groups/groups_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Examples of Groups
diff --git a/src/sage/groups/indexed_free_group.py b/src/sage/groups/indexed_free_group.py
index 79be1df663d..a2735e7ea6b 100644
--- a/src/sage/groups/indexed_free_group.py
+++ b/src/sage/groups/indexed_free_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.combinat
"""
Indexed Free Groups
diff --git a/src/sage/groups/kernel_subgroup.py b/src/sage/groups/kernel_subgroup.py
index dec7a0be573..bcbca50b37f 100644
--- a/src/sage/groups/kernel_subgroup.py
+++ b/src/sage/groups/kernel_subgroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Kernel Subgroups
diff --git a/src/sage/groups/libgap_group.py b/src/sage/groups/libgap_group.py
index 09889de4af5..3a181ff46ba 100644
--- a/src/sage/groups/libgap_group.py
+++ b/src/sage/groups/libgap_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Generic LibGAP-based Group
diff --git a/src/sage/groups/libgap_mixin.py b/src/sage/groups/libgap_mixin.py
index 50f8fdf2678..7da19cf8ada 100644
--- a/src/sage/groups/libgap_mixin.py
+++ b/src/sage/groups/libgap_mixin.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.modules
"""
Mix-in Class for GAP-based Groups
diff --git a/src/sage/groups/libgap_morphism.py b/src/sage/groups/libgap_morphism.py
index daac871629b..1b7a6d953ec 100644
--- a/src/sage/groups/libgap_morphism.py
+++ b/src/sage/groups/libgap_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Group homomorphisms for groups with a GAP backend
diff --git a/src/sage/groups/libgap_wrapper.pxd b/src/sage/groups/libgap_wrapper.pxd
index 0c43b098140..42214521586 100644
--- a/src/sage/groups/libgap_wrapper.pxd
+++ b/src/sage/groups/libgap_wrapper.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.structure.element cimport MultiplicativeGroupElement
from sage.libs.gap.element cimport GapElement
diff --git a/src/sage/groups/libgap_wrapper.pyx b/src/sage/groups/libgap_wrapper.pyx
index 3d27ec44ea0..8e4c7ba883c 100644
--- a/src/sage/groups/libgap_wrapper.pyx
+++ b/src/sage/groups/libgap_wrapper.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
LibGAP-based Groups
diff --git a/src/sage/groups/lie_gps/all.py b/src/sage/groups/lie_gps/all.py
index e69de29bb2d..11f290a2a34 100644
--- a/src/sage/groups/lie_gps/all.py
+++ b/src/sage/groups/lie_gps/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-groups
diff --git a/src/sage/groups/lie_gps/catalog.py b/src/sage/groups/lie_gps/catalog.py
index 1b35d31d6b7..976df6bc1ac 100644
--- a/src/sage/groups/lie_gps/catalog.py
+++ b/src/sage/groups/lie_gps/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Type ``groups.lie.`` to access examples of Lie groups.
"""
diff --git a/src/sage/groups/lie_gps/nilpotent_lie_group.py b/src/sage/groups/lie_gps/nilpotent_lie_group.py
index 1164f28e056..9ee3d58da1a 100644
--- a/src/sage/groups/lie_gps/nilpotent_lie_group.py
+++ b/src/sage/groups/lie_gps/nilpotent_lie_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Nilpotent Lie groups
diff --git a/src/sage/groups/matrix_gps/all.py b/src/sage/groups/matrix_gps/all.py
index c6360cd6a03..503b377f675 100644
--- a/src/sage/groups/matrix_gps/all.py
+++ b/src/sage/groups/matrix_gps/all.py
@@ -1,13 +1,5 @@
-from sage.misc.lazy_import import lazy_import
+# sage_setup: distribution = sagemath-modules
-lazy_import('sage.groups.matrix_gps.linear', 'GL')
-lazy_import('sage.groups.matrix_gps.linear', 'SL')
-lazy_import('sage.groups.matrix_gps.symplectic', 'Sp')
-lazy_import('sage.groups.matrix_gps.unitary', 'SU')
-lazy_import('sage.groups.matrix_gps.unitary', 'GU')
-lazy_import('sage.groups.matrix_gps.orthogonal', 'GO')
-lazy_import('sage.groups.matrix_gps.orthogonal', 'SO')
-lazy_import('sage.groups.matrix_gps.finitely_generated', 'MatrixGroup')
-lazy_import('sage.groups.matrix_gps.finitely_generated', 'QuaternionMatrixGroupGF3')
+from sage.groups.matrix_gps.all__sagemath_modules import *
import sage.groups.matrix_gps.pickling_overrides
diff --git a/src/sage/groups/matrix_gps/all__sagemath_gap.py b/src/sage/groups/matrix_gps/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/matrix_gps/all__sagemath_modules.py b/src/sage/groups/matrix_gps/all__sagemath_modules.py
new file mode 100644
index 00000000000..e8ff9cf4fa6
--- /dev/null
+++ b/src/sage/groups/matrix_gps/all__sagemath_modules.py
@@ -0,0 +1,12 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.groups.matrix_gps.linear', 'GL')
+lazy_import('sage.groups.matrix_gps.linear', 'SL')
+lazy_import('sage.groups.matrix_gps.symplectic', 'Sp')
+lazy_import('sage.groups.matrix_gps.unitary', 'SU')
+lazy_import('sage.groups.matrix_gps.unitary', 'GU')
+lazy_import('sage.groups.matrix_gps.orthogonal', 'GO')
+lazy_import('sage.groups.matrix_gps.orthogonal', 'SO')
+lazy_import('sage.groups.matrix_gps.finitely_generated', 'MatrixGroup')
+lazy_import('sage.groups.matrix_gps.finitely_generated', 'QuaternionMatrixGroupGF3')
+del lazy_import
diff --git a/src/sage/groups/matrix_gps/binary_dihedral.py b/src/sage/groups/matrix_gps/binary_dihedral.py
index ccce9eeb17b..bf2a1b69342 100644
--- a/src/sage/groups/matrix_gps/binary_dihedral.py
+++ b/src/sage/groups/matrix_gps/binary_dihedral.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.libs.gap sage.modules sage.rings.number_field
"""
Binary Dihedral Groups
diff --git a/src/sage/groups/matrix_gps/catalog.py b/src/sage/groups/matrix_gps/catalog.py
index a9687740649..2419053f843 100644
--- a/src/sage/groups/matrix_gps/catalog.py
+++ b/src/sage/groups/matrix_gps/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Library of Interesting Groups
diff --git a/src/sage/groups/matrix_gps/coxeter_group.py b/src/sage/groups/matrix_gps/coxeter_group.py
index b6a9e211ff0..99aefbddf97 100644
--- a/src/sage/groups/matrix_gps/coxeter_group.py
+++ b/src/sage/groups/matrix_gps/coxeter_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs
"""
Coxeter Groups As Matrix Groups
diff --git a/src/sage/groups/matrix_gps/finitely_generated.py b/src/sage/groups/matrix_gps/finitely_generated.py
index 6d487e5d123..e621ea4e82d 100644
--- a/src/sage/groups/matrix_gps/finitely_generated.py
+++ b/src/sage/groups/matrix_gps/finitely_generated.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Finitely Generated Matrix Groups
diff --git a/src/sage/groups/matrix_gps/finitely_generated_gap.py b/src/sage/groups/matrix_gps/finitely_generated_gap.py
index 14bf551789f..11cc0a45b42 100644
--- a/src/sage/groups/matrix_gps/finitely_generated_gap.py
+++ b/src/sage/groups/matrix_gps/finitely_generated_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Finitely Generated Matrix Groups with GAP
"""
diff --git a/src/sage/groups/matrix_gps/group_element.pxd b/src/sage/groups/matrix_gps/group_element.pxd
index 36a5a9fc4ce..fadcded4ef9 100644
--- a/src/sage/groups/matrix_gps/group_element.pxd
+++ b/src/sage/groups/matrix_gps/group_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport MultiplicativeGroupElement, Element, MonoidElement, Matrix
cpdef is_MatrixGroupElement(x)
diff --git a/src/sage/groups/matrix_gps/group_element.pyx b/src/sage/groups/matrix_gps/group_element.pyx
index 38bf1f03279..c123d0d1820 100644
--- a/src/sage/groups/matrix_gps/group_element.pyx
+++ b/src/sage/groups/matrix_gps/group_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Matrix Group Elements
diff --git a/src/sage/groups/matrix_gps/group_element_gap.pxd b/src/sage/groups/matrix_gps/group_element_gap.pxd
index e0ecbefea5c..2c99c0d4e9a 100644
--- a/src/sage/groups/matrix_gps/group_element_gap.pxd
+++ b/src/sage/groups/matrix_gps/group_element_gap.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.groups.libgap_wrapper cimport ElementLibGAP
cdef class MatrixGroupElement_gap(ElementLibGAP):
diff --git a/src/sage/groups/matrix_gps/group_element_gap.pyx b/src/sage/groups/matrix_gps/group_element_gap.pyx
index b07c0f01a44..9e5e2922590 100644
--- a/src/sage/groups/matrix_gps/group_element_gap.pyx
+++ b/src/sage/groups/matrix_gps/group_element_gap.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Matrix group elements implemented in GAP
"""
diff --git a/src/sage/groups/matrix_gps/heisenberg.py b/src/sage/groups/matrix_gps/heisenberg.py
index 8a262ddf1c7..21ab7db9d45 100644
--- a/src/sage/groups/matrix_gps/heisenberg.py
+++ b/src/sage/groups/matrix_gps/heisenberg.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.libs.gap sage.modules
"""
Heisenberg Group
diff --git a/src/sage/groups/matrix_gps/isometries.py b/src/sage/groups/matrix_gps/isometries.py
index 424e5a0edf0..b351f5533b2 100644
--- a/src/sage/groups/matrix_gps/isometries.py
+++ b/src/sage/groups/matrix_gps/isometries.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Groups of isometries
diff --git a/src/sage/groups/matrix_gps/linear.py b/src/sage/groups/matrix_gps/linear.py
index ef2bf1aa0be..1fa9dca7984 100644
--- a/src/sage/groups/matrix_gps/linear.py
+++ b/src/sage/groups/matrix_gps/linear.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Linear Groups
diff --git a/src/sage/groups/matrix_gps/linear_gap.py b/src/sage/groups/matrix_gps/linear_gap.py
index f5c16f1c9fe..62d84711f6f 100644
--- a/src/sage/groups/matrix_gps/linear_gap.py
+++ b/src/sage/groups/matrix_gps/linear_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Linear Groups with GAP
"""
diff --git a/src/sage/groups/matrix_gps/matrix_group.py b/src/sage/groups/matrix_gps/matrix_group.py
index 2b87493fbc5..10bf5786f0e 100644
--- a/src/sage/groups/matrix_gps/matrix_group.py
+++ b/src/sage/groups/matrix_gps/matrix_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Base classes for Matrix Groups
diff --git a/src/sage/groups/matrix_gps/matrix_group_gap.py b/src/sage/groups/matrix_gps/matrix_group_gap.py
index 84fd3d74996..29c40bb22be 100644
--- a/src/sage/groups/matrix_gps/matrix_group_gap.py
+++ b/src/sage/groups/matrix_gps/matrix_group_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Matrix group over a ring that GAP understands
"""
diff --git a/src/sage/groups/matrix_gps/named_group.py b/src/sage/groups/matrix_gps/named_group.py
index 90c01e232e7..59766f21cfa 100644
--- a/src/sage/groups/matrix_gps/named_group.py
+++ b/src/sage/groups/matrix_gps/named_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Base for Classical Matrix Groups
diff --git a/src/sage/groups/matrix_gps/named_group_gap.py b/src/sage/groups/matrix_gps/named_group_gap.py
index b8b1f54722c..3e4f0131a54 100644
--- a/src/sage/groups/matrix_gps/named_group_gap.py
+++ b/src/sage/groups/matrix_gps/named_group_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Base for Classical Matrix Groups with GAP
"""
diff --git a/src/sage/groups/matrix_gps/orthogonal.py b/src/sage/groups/matrix_gps/orthogonal.py
index 3ce9915dfec..d38ed37bd1a 100644
--- a/src/sage/groups/matrix_gps/orthogonal.py
+++ b/src/sage/groups/matrix_gps/orthogonal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Orthogonal Linear Groups
diff --git a/src/sage/groups/matrix_gps/orthogonal_gap.py b/src/sage/groups/matrix_gps/orthogonal_gap.py
index 39947bda211..b06ac22dd31 100644
--- a/src/sage/groups/matrix_gps/orthogonal_gap.py
+++ b/src/sage/groups/matrix_gps/orthogonal_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Orthogonal Linear Groups with GAP
"""
diff --git a/src/sage/groups/matrix_gps/symplectic.py b/src/sage/groups/matrix_gps/symplectic.py
index 0e378b4d153..0476eb4b8f6 100644
--- a/src/sage/groups/matrix_gps/symplectic.py
+++ b/src/sage/groups/matrix_gps/symplectic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Symplectic Linear Groups
diff --git a/src/sage/groups/matrix_gps/symplectic_gap.py b/src/sage/groups/matrix_gps/symplectic_gap.py
index d348ed9f40f..a30ed541a78 100644
--- a/src/sage/groups/matrix_gps/symplectic_gap.py
+++ b/src/sage/groups/matrix_gps/symplectic_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Symplectic Linear Groups with GAP
"""
diff --git a/src/sage/groups/matrix_gps/unitary.py b/src/sage/groups/matrix_gps/unitary.py
index 43ac69c3983..0c18107a260 100644
--- a/src/sage/groups/matrix_gps/unitary.py
+++ b/src/sage/groups/matrix_gps/unitary.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Unitary Groups `GU(n,q)` and `SU(n,q)`
diff --git a/src/sage/groups/matrix_gps/unitary_gap.py b/src/sage/groups/matrix_gps/unitary_gap.py
index ac2de20f96b..ce715e34903 100644
--- a/src/sage/groups/matrix_gps/unitary_gap.py
+++ b/src/sage/groups/matrix_gps/unitary_gap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.rings.finite_rings
r"""
Unitary Groups `GU(n,q)` and `SU(n,q)` with GAP
diff --git a/src/sage/groups/misc_gps/all.py b/src/sage/groups/misc_gps/all.py
index e69de29bb2d..11f290a2a34 100644
--- a/src/sage/groups/misc_gps/all.py
+++ b/src/sage/groups/misc_gps/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-groups
diff --git a/src/sage/groups/misc_gps/argument_groups.py b/src/sage/groups/misc_gps/argument_groups.py
index 1c949a57f51..cc533de027c 100644
--- a/src/sage/groups/misc_gps/argument_groups.py
+++ b/src/sage/groups/misc_gps/argument_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Groups of elements representing (complex) arguments.
diff --git a/src/sage/groups/misc_gps/imaginary_groups.py b/src/sage/groups/misc_gps/imaginary_groups.py
index 41fe79f9959..e197273ec6c 100644
--- a/src/sage/groups/misc_gps/imaginary_groups.py
+++ b/src/sage/groups/misc_gps/imaginary_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Groups of imaginary elements
diff --git a/src/sage/groups/misc_gps/misc_groups.py b/src/sage/groups/misc_gps/misc_groups.py
index fb6bcb30fb7..7b695bb6fab 100644
--- a/src/sage/groups/misc_gps/misc_groups.py
+++ b/src/sage/groups/misc_gps/misc_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Miscellaneous Groups
diff --git a/src/sage/groups/misc_gps/misc_groups_catalog.py b/src/sage/groups/misc_gps/misc_groups_catalog.py
index 5396677d0b1..2eb44762f04 100644
--- a/src/sage/groups/misc_gps/misc_groups_catalog.py
+++ b/src/sage/groups/misc_gps/misc_groups_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
r"""
Type ``groups.misc.`` to access examples
of various groups not listed elsewhere.
diff --git a/src/sage/groups/old.pxd b/src/sage/groups/old.pxd
index 3409c5b1764..87b029a4992 100644
--- a/src/sage/groups/old.pxd
+++ b/src/sage/groups/old.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cimport sage.structure.parent_gens
cdef class Group(sage.structure.parent.Parent):
diff --git a/src/sage/groups/old.pyx b/src/sage/groups/old.pyx
index 1833b4a2b74..a625dbcfb07 100644
--- a/src/sage/groups/old.pyx
+++ b/src/sage/groups/old.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Deprecated base class for groups
"""
diff --git a/src/sage/groups/pari_group.py b/src/sage/groups/pari_group.py
index 62dc75cb821..ca7f41ff5b3 100644
--- a/src/sage/groups/pari_group.py
+++ b/src/sage/groups/pari_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
r"""
PARI Groups
diff --git a/src/sage/groups/perm_gps/all.py b/src/sage/groups/perm_gps/all.py
index ae405f298a2..56571fafe06 100644
--- a/src/sage/groups/perm_gps/all.py
+++ b/src/sage/groups/perm_gps/all.py
@@ -1,20 +1,22 @@
-from .permgroup_named import (SymmetricGroup, AlternatingGroup,
- DihedralGroup, SplitMetacyclicGroup,
- SemidihedralGroup, CyclicPermutationGroup,
- DiCyclicGroup, TransitiveGroup,
- PGL, PSL, PSp, PSU, PGU,
- MathieuGroup, KleinFourGroup, QuaternionGroup,
- PrimitiveGroup, PrimitiveGroups,
- SuzukiGroup, TransitiveGroups,
- GeneralDihedralGroup, SmallPermutationGroup)
+# sage_setup: distribution = sagemath-gap
-from .permgroup import PermutationGroup, PermutationGroup_generic, PermutationGroup_subgroup, direct_product_permgroups
+from sage.groups.perm_gps.permgroup_named import (SymmetricGroup, AlternatingGroup,
+ DihedralGroup, SplitMetacyclicGroup,
+ SemidihedralGroup, CyclicPermutationGroup,
+ DiCyclicGroup, TransitiveGroup,
+ PGL, PSL, PSp, PSU, PGU,
+ MathieuGroup, KleinFourGroup, QuaternionGroup,
+ PrimitiveGroup, PrimitiveGroups,
+ SuzukiGroup, TransitiveGroups,
+ GeneralDihedralGroup, SmallPermutationGroup)
-from .constructor import PermutationGroupElement
+from sage.groups.perm_gps.permgroup import PermutationGroup, PermutationGroup_generic, PermutationGroup_subgroup, direct_product_permgroups
-from .permgroup_morphism import (PermutationGroupMorphism as PermutationGroupMap,
- PermutationGroupMorphism_im_gens,
- PermutationGroupMorphism_id)
+from sage.groups.perm_gps.constructor import PermutationGroupElement
+
+from sage.groups.perm_gps.permgroup_morphism import (PermutationGroupMorphism as PermutationGroupMap,
+ PermutationGroupMorphism_im_gens,
+ PermutationGroupMorphism_id)
PermutationGroupMorphism = PermutationGroupMorphism_im_gens
-from .cubegroup import CubeGroup, RubiksCube
+from sage.groups.perm_gps.cubegroup import CubeGroup, RubiksCube
diff --git a/src/sage/groups/perm_gps/all__sagemath_categories.py b/src/sage/groups/perm_gps/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/all__sagemath_graphs.py b/src/sage/groups/perm_gps/all__sagemath_graphs.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/all__sagemath_modules.py b/src/sage/groups/perm_gps/all__sagemath_modules.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/constructor.py b/src/sage/groups/perm_gps/constructor.py
index 5a130eb19be..2061c514436 100644
--- a/src/sage/groups/perm_gps/constructor.py
+++ b/src/sage/groups/perm_gps/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Constructor for permutations
diff --git a/src/sage/groups/perm_gps/cubegroup.py b/src/sage/groups/perm_gps/cubegroup.py
index 5a802bb4f48..ebd667a7d2a 100644
--- a/src/sage/groups/perm_gps/cubegroup.py
+++ b/src/sage/groups/perm_gps/cubegroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Rubik's cube group functions
diff --git a/src/sage/groups/perm_gps/partn_ref/all.py b/src/sage/groups/perm_gps/partn_ref/all.py
index e69de29bb2d..b230a6a2ad9 100644
--- a/src/sage/groups/perm_gps/partn_ref/all.py
+++ b/src/sage/groups/perm_gps/partn_ref/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-categories
diff --git a/src/sage/groups/perm_gps/partn_ref/all__sagemath_categories.py b/src/sage/groups/perm_gps/partn_ref/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/partn_ref/all__sagemath_gap.py b/src/sage/groups/perm_gps/partn_ref/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/partn_ref/all__sagemath_graphs.py b/src/sage/groups/perm_gps/partn_ref/all__sagemath_graphs.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/partn_ref/all__sagemath_modules.py b/src/sage/groups/perm_gps/partn_ref/all__sagemath_modules.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd b/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd
index 52f75a3df9c..62c9b138371 100644
--- a/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
diff --git a/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx b/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx
index 803f2533b7d..15838965934 100644
--- a/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups
r"""
Automorphism groups and canonical labels
diff --git a/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd b/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd
index 49e2f3cdbde..70ff0198384 100644
--- a/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Declaration file for canonical augmentation
diff --git a/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx b/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx
index 6143e509caa..95faace2536 100644
--- a/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Canonical augmentation
diff --git a/src/sage/groups/perm_gps/partn_ref/data_structures.pxd b/src/sage/groups/perm_gps/partn_ref/data_structures.pxd
index f53184bd082..0589ad87d07 100644
--- a/src/sage/groups/perm_gps/partn_ref/data_structures.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/data_structures.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
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 cb25f23a4d3..089ed979891 100644
--- a/src/sage/groups/perm_gps/partn_ref/data_structures.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/data_structures.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Data structures
diff --git a/src/sage/groups/perm_gps/partn_ref/double_coset.pxd b/src/sage/groups/perm_gps/partn_ref/double_coset.pxd
index 6c5d9e0f279..a0c86f1bcb5 100644
--- a/src/sage/groups/perm_gps/partn_ref/double_coset.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/double_coset.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
diff --git a/src/sage/groups/perm_gps/partn_ref/double_coset.pyx b/src/sage/groups/perm_gps/partn_ref/double_coset.pyx
index 73631b395c4..58b8c73381b 100644
--- a/src/sage/groups/perm_gps/partn_ref/double_coset.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/double_coset.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.groups
r"""
Double cosets
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_binary.pxd b/src/sage/groups/perm_gps/partn_ref/refinement_binary.pxd
index 4af69f4b5f5..dbcaa574b8e 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_binary.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_binary.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx b/src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx
index 6a3c07ac75d..3590d950164 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules sage.rings.finite_rings
"""
Partition backtrack functions for binary codes
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pxd b/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pxd
index 464ddde015d..3dbbb6f8c5a 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pyx b/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pyx
index 1b588487d1c..f5042c7bf58 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_graphs.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Graph-theoretic partition backtrack functions
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_lists.pxd b/src/sage/groups/perm_gps/partn_ref/refinement_lists.pxd
index e7b6cf42f6d..d8462ad64af 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_lists.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_lists.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
# Copyright (C) 2009 Nicolas Borie
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_lists.pyx b/src/sage/groups/perm_gps/partn_ref/refinement_lists.pyx
index 00365bcbd3c..7959f355a02 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_lists.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_lists.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Partition backtrack functions for lists -- a simple example of using partn_ref
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pxd b/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pxd
index 2cf087e9915..15a8c8a045b 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pyx b/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pyx
index c8d4f86a8f1..616b45e6dba 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_matrices.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Partition backtrack functions for matrices
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_python.pxd b/src/sage/groups/perm_gps/partn_ref/refinement_python.pxd
index 9f46107a1c1..96e68132042 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_python.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_python.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2006 - 2011 Robert L. Miller
#
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 23d5e7576c7..cef8a50bc58 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_python.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_python.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Python interface to partition backtrack functions
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_sets.pxd b/src/sage/groups/perm_gps/partn_ref/refinement_sets.pxd
index 94bcbe5bf95..452dbd8a772 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_sets.pxd
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_sets.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Declaration file for simple set datastructures
diff --git a/src/sage/groups/perm_gps/partn_ref/refinement_sets.pyx b/src/sage/groups/perm_gps/partn_ref/refinement_sets.pyx
index 6ccc0b28c45..232e4745c4c 100644
--- a/src/sage/groups/perm_gps/partn_ref/refinement_sets.pyx
+++ b/src/sage/groups/perm_gps/partn_ref/refinement_sets.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Partition backtrack functions for sets
diff --git a/src/sage/groups/perm_gps/partn_ref2/all.py b/src/sage/groups/perm_gps/partn_ref2/all.py
index e69de29bb2d..dd59a6da735 100644
--- a/src/sage/groups/perm_gps/partn_ref2/all.py
+++ b/src/sage/groups/perm_gps/partn_ref2/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-gap
diff --git a/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pxd b/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pxd
index 9ba66caff70..bef4ff59121 100644
--- a/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pxd
+++ b/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
#*******************************************************************************
# Copyright (C) 2012 Thomas Feulner
#
diff --git a/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx b/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx
index 261d1987897..b229fb8852d 100644
--- a/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx
+++ b/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Automorphism groups and canonical labels.
diff --git a/src/sage/groups/perm_gps/permgroup.py b/src/sage/groups/perm_gps/permgroup.py
index f001126ed84..4b33600db9f 100644
--- a/src/sage/groups/perm_gps/permgroup.py
+++ b/src/sage/groups/perm_gps/permgroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Permutation groups
diff --git a/src/sage/groups/perm_gps/permgroup_element.pxd b/src/sage/groups/perm_gps/permgroup_element.pxd
index 21b509f06d1..81f767526b1 100644
--- a/src/sage/groups/perm_gps/permgroup_element.pxd
+++ b/src/sage/groups/perm_gps/permgroup_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.structure.element cimport MultiplicativeGroupElement, MonoidElement, Element
from sage.structure.list_clone cimport ClonableIntArray
from sage.rings.polynomial.polydict cimport ETuple
diff --git a/src/sage/groups/perm_gps/permgroup_element.pyx b/src/sage/groups/perm_gps/permgroup_element.pyx
index 0d80d04a8af..00851d078c1 100644
--- a/src/sage/groups/perm_gps/permgroup_element.pyx
+++ b/src/sage/groups/perm_gps/permgroup_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Permutation group elements
diff --git a/src/sage/groups/perm_gps/permgroup_morphism.py b/src/sage/groups/perm_gps/permgroup_morphism.py
index 206828b4e1a..a5a69f12d68 100644
--- a/src/sage/groups/perm_gps/permgroup_morphism.py
+++ b/src/sage/groups/perm_gps/permgroup_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Permutation group homomorphisms
diff --git a/src/sage/groups/perm_gps/permgroup_named.py b/src/sage/groups/perm_gps/permgroup_named.py
index 69014066364..0840a1224f1 100644
--- a/src/sage/groups/perm_gps/permgroup_named.py
+++ b/src/sage/groups/perm_gps/permgroup_named.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
"Named" Permutation groups (such as the symmetric group, S_n)
diff --git a/src/sage/groups/perm_gps/permutation_groups_catalog.py b/src/sage/groups/perm_gps/permutation_groups_catalog.py
index 52f99920307..e91742a3e11 100644
--- a/src/sage/groups/perm_gps/permutation_groups_catalog.py
+++ b/src/sage/groups/perm_gps/permutation_groups_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Catalog of permutation groups
diff --git a/src/sage/groups/perm_gps/symgp_conjugacy_class.py b/src/sage/groups/perm_gps/symgp_conjugacy_class.py
index 23f5cdab15c..8a2a75b8f97 100644
--- a/src/sage/groups/perm_gps/symgp_conjugacy_class.py
+++ b/src/sage/groups/perm_gps/symgp_conjugacy_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Conjugacy Classes Of The Symmetric Group
diff --git a/src/sage/groups/raag.py b/src/sage/groups/raag.py
index 22c44cb2312..342f2a21d7d 100644
--- a/src/sage/groups/raag.py
+++ b/src/sage/groups/raag.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
# sage.doctest: needs sage.graphs sage.rings.number_field
r"""
Right-Angled Artin Groups
diff --git a/src/sage/groups/semimonomial_transformations/all.py b/src/sage/groups/semimonomial_transformations/all.py
index e69de29bb2d..11f290a2a34 100644
--- a/src/sage/groups/semimonomial_transformations/all.py
+++ b/src/sage/groups/semimonomial_transformations/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-groups
diff --git a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pxd b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pxd
index bd4f62d497f..178bd872df8 100644
--- a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pxd
+++ b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
from sage.structure.element cimport Element, MonoidElement, MultiplicativeGroupElement
cdef class SemimonomialTransformation(MultiplicativeGroupElement):
diff --git a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx
index baaefa1950e..460b7f566b3 100644
--- a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx
+++ b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
# sage.doctest: needs sage.rings.finite_rings
r"""
Elements of a semimonomial transformation group
diff --git a/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py b/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py
index e61c7bf64c7..8b91afca6cc 100644
--- a/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py
+++ b/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-groups
# sage.doctest: needs sage.rings.finite_rings
r"""
Semimonomial transformation group
diff --git a/src/sage/homology/algebraic_topological_model.py b/src/sage/homology/algebraic_topological_model.py
index c7856836f28..caab0e0e6a7 100644
--- a/src/sage/homology/algebraic_topological_model.py
+++ b/src/sage/homology/algebraic_topological_model.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs
r"""
Algebraic topological model for a cell complex
diff --git a/src/sage/homology/all.py b/src/sage/homology/all.py
index d9306c19daa..4be53743f0a 100644
--- a/src/sage/homology/all.py
+++ b/src/sage/homology/all.py
@@ -1,6 +1,3 @@
-from .chain_complex import ChainComplex
+# sage_setup: distribution = sagemath-modules
-from .chain_complex_morphism import ChainComplexMorphism
-
-from sage.misc.lazy_import import lazy_import
-lazy_import('sage.homology.koszul_complex', 'KoszulComplex')
+from sage.homology.all__sagemath_modules import *
diff --git a/src/sage/homology/all__sagemath_modules.py b/src/sage/homology/all__sagemath_modules.py
new file mode 100644
index 00000000000..5ebb7604432
--- /dev/null
+++ b/src/sage/homology/all__sagemath_modules.py
@@ -0,0 +1,7 @@
+from sage.homology.chain_complex import ChainComplex
+
+from sage.homology.chain_complex_morphism import ChainComplexMorphism
+
+from sage.misc.lazy_import import lazy_import
+lazy_import('sage.homology.koszul_complex', 'KoszulComplex')
+del lazy_import
diff --git a/src/sage/homology/chain_complex.py b/src/sage/homology/chain_complex.py
index 0d692df4709..c01151ee7ed 100644
--- a/src/sage/homology/chain_complex.py
+++ b/src/sage/homology/chain_complex.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
r"""
Chain complexes
diff --git a/src/sage/homology/chain_complex_homspace.py b/src/sage/homology/chain_complex_homspace.py
index ad7a6bf9b84..eb550837a41 100644
--- a/src/sage/homology/chain_complex_homspace.py
+++ b/src/sage/homology/chain_complex_homspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs (because all doctests use SimplicialComplex)
r"""
Homspaces between chain complexes
diff --git a/src/sage/homology/chain_complex_morphism.py b/src/sage/homology/chain_complex_morphism.py
index afefe44eb79..0e6264c1b09 100644
--- a/src/sage/homology/chain_complex_morphism.py
+++ b/src/sage/homology/chain_complex_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Morphisms of chain complexes
diff --git a/src/sage/homology/chain_homotopy.py b/src/sage/homology/chain_homotopy.py
index 91ae14eda11..8d5a1dd6351 100644
--- a/src/sage/homology/chain_homotopy.py
+++ b/src/sage/homology/chain_homotopy.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
r"""
Chain homotopies and chain contractions
diff --git a/src/sage/homology/chains.py b/src/sage/homology/chains.py
index b9a54940943..1bddf164ba4 100644
--- a/src/sage/homology/chains.py
+++ b/src/sage/homology/chains.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs (because all doctests use the catalogs simplicial_complexes, cubical_complexes)
r"""
Chains and cochains
diff --git a/src/sage/homology/free_resolution.py b/src/sage/homology/free_resolution.py
index 29c33e4e2a6..887713fb541 100644
--- a/src/sage/homology/free_resolution.py
+++ b/src/sage/homology/free_resolution.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.singular
r"""
Free resolutions
diff --git a/src/sage/homology/graded_resolution.py b/src/sage/homology/graded_resolution.py
index ceadd15c2de..7a46eb963d8 100644
--- a/src/sage/homology/graded_resolution.py
+++ b/src/sage/homology/graded_resolution.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.singular
r"""
Graded free resolutions
diff --git a/src/sage/homology/hochschild_complex.py b/src/sage/homology/hochschild_complex.py
index ea42164ef9d..0845517bcd6 100644
--- a/src/sage/homology/hochschild_complex.py
+++ b/src/sage/homology/hochschild_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat (because all doctests use FreeAlgebra, SymmetricGroupAlgebra, etc.)
"""
Hochschild Complexes
diff --git a/src/sage/homology/homology_group.py b/src/sage/homology/homology_group.py
index 8d86d477ad8..12e07b61c07 100644
--- a/src/sage/homology/homology_group.py
+++ b/src/sage/homology/homology_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Homology Groups
diff --git a/src/sage/homology/homology_morphism.py b/src/sage/homology/homology_morphism.py
index 1b4a69c2e7e..06eba661b3c 100644
--- a/src/sage/homology/homology_morphism.py
+++ b/src/sage/homology/homology_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs (because all doctests use the catalog simplicial_complexes)
r"""
Induced morphisms on homology
diff --git a/src/sage/homology/homology_vector_space_with_basis.py b/src/sage/homology/homology_vector_space_with_basis.py
index ace9775d56b..cc945e528ed 100644
--- a/src/sage/homology/homology_vector_space_with_basis.py
+++ b/src/sage/homology/homology_vector_space_with_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.graphs (because all doctests use the catalogs simplicial_complexes, cubical_complexes)
"""
diff --git a/src/sage/homology/koszul_complex.py b/src/sage/homology/koszul_complex.py
index 22a1ceb5d80..5d0716e9772 100644
--- a/src/sage/homology/koszul_complex.py
+++ b/src/sage/homology/koszul_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Koszul Complexes
"""
diff --git a/src/sage/homology/matrix_utils.py b/src/sage/homology/matrix_utils.py
index 4f10ae415a3..50a9ff6dba3 100644
--- a/src/sage/homology/matrix_utils.py
+++ b/src/sage/homology/matrix_utils.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Utility Functions for Matrices
diff --git a/src/sage/interacts/all.py b/src/sage/interacts/all.py
index c53a1e11ecf..87d00072798 100644
--- a/src/sage/interacts/all.py
+++ b/src/sage/interacts/all.py
@@ -17,9 +17,10 @@
# ****************************************************************************
from sage.misc.lazy_import import lazy_import
-from . import calculus
-from . import geometry
-from . import statistics
-from . import fractals
-from . import algebra
+from sage.interacts import calculus
+from sage.interacts import geometry
+from sage.interacts import statistics
+from sage.interacts import fractals
+from sage.interacts import algebra
lazy_import('sage.interacts.library', 'demo')
+del lazy_import
diff --git a/src/sage/interfaces/abc.py b/src/sage/interfaces/abc.py
index 9c451733631..e285fc0218b 100644
--- a/src/sage/interfaces/abc.py
+++ b/src/sage/interfaces/abc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Abstract base classes for interface elements
"""
diff --git a/src/sage/interfaces/all.py b/src/sage/interfaces/all.py
index ed71b662362..5bc6576d935 100644
--- a/src/sage/interfaces/all.py
+++ b/src/sage/interfaces/all.py
@@ -1,15 +1,16 @@
+# sage_setup: distribution = sagemath-categories
# interfaces to other interpreters
-from .sage0 import sage0, sage0_version, Sage
-from .gap import gap, gap_reset_workspace, Gap
-from .gp import gp, gp_version, Gp
+from sage.interfaces.sage0 import sage0, sage0_version, Sage
+from sage.interfaces.gap import gap, gap_reset_workspace, Gap
+from sage.interfaces.gp import gp, gp_version, Gp
# import problems
# from maxima_lib import maxima_lib
-from .maxima import maxima, Maxima
-from .singular import singular, singular_version, Singular
+from sage.interfaces.maxima import maxima, Maxima
+from sage.interfaces.singular import singular, singular_version, Singular
-from .magma import magma, Magma
-from .polymake import polymake
+from sage.interfaces.magma import magma, Magma
+from sage.interfaces.polymake import polymake
from sage.misc.lazy_import import lazy_import
@@ -48,3 +49,4 @@
'kash', 'magma', 'macaulay2', 'maple', 'maxima',
'mathematica', 'mwrank', 'octave', 'r', 'singular',
'sage0', 'sage']
+del lazy_import
diff --git a/src/sage/interfaces/all__sagemath_categories.py b/src/sage/interfaces/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/interfaces/all__sagemath_gap.py b/src/sage/interfaces/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/interfaces/all__sagemath_libecm.py b/src/sage/interfaces/all__sagemath_libecm.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/interfaces/all__sagemath_pari.py b/src/sage/interfaces/all__sagemath_pari.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/interfaces/all__sagemath_plot.py b/src/sage/interfaces/all__sagemath_plot.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/interfaces/all__sagemath_polyhedra.py b/src/sage/interfaces/all__sagemath_polyhedra.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/interfaces/all__sagemath_polyhedra.py
+++ b/src/sage/interfaces/all__sagemath_polyhedra.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/interfaces/all__sagemath_symbolics.py b/src/sage/interfaces/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/interfaces/cleaner.py b/src/sage/interfaces/cleaner.py
index 54bfac779ac..2d72be495e1 100644
--- a/src/sage/interfaces/cleaner.py
+++ b/src/sage/interfaces/cleaner.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Interface to the Sage cleaner
diff --git a/src/sage/interfaces/ecm.py b/src/sage/interfaces/ecm.py
index ae1379861f2..0dc08138b35 100644
--- a/src/sage/interfaces/ecm.py
+++ b/src/sage/interfaces/ecm.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-libecm
r"""
The Elliptic Curve Factorization Method
diff --git a/src/sage/interfaces/expect.py b/src/sage/interfaces/expect.py
index 340ada3f185..e2e9b6687ba 100644
--- a/src/sage/interfaces/expect.py
+++ b/src/sage/interfaces/expect.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.gap sage.libs.pari sage.libs.singular sage.symbolic
"""
Common Interface Functionality through Pexpect
diff --git a/src/sage/interfaces/four_ti_2.py b/src/sage/interfaces/four_ti_2.py
index 42fa64d0155..ff56f832365 100644
--- a/src/sage/interfaces/four_ti_2.py
+++ b/src/sage/interfaces/four_ti_2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Interface to 4ti2
diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py
index 87feb554d16..6b2036d2a64 100644
--- a/src/sage/interfaces/fricas.py
+++ b/src/sage/interfaces/fricas.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# sage.doctest: optional - fricas
r"""
Interface to FriCAS
diff --git a/src/sage/interfaces/frobby.py b/src/sage/interfaces/frobby.py
index 75e6da5b4d9..498a5a6da58 100644
--- a/src/sage/interfaces/frobby.py
+++ b/src/sage/interfaces/frobby.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Interface to Frobby for fast computations on monomial ideals.
diff --git a/src/sage/interfaces/gap.py b/src/sage/interfaces/gap.py
index ee5861ac785..d087f32293a 100644
--- a/src/sage/interfaces/gap.py
+++ b/src/sage/interfaces/gap.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-gap
r"""
Interface to GAP
diff --git a/src/sage/interfaces/gap3.py b/src/sage/interfaces/gap3.py
index de2a7fe4289..310f5a965a7 100644
--- a/src/sage/interfaces/gap3.py
+++ b/src/sage/interfaces/gap3.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Interface to GAP3
diff --git a/src/sage/interfaces/gap_workspace.py b/src/sage/interfaces/gap_workspace.py
index 70bb584fdef..fdb4d87f577 100644
--- a/src/sage/interfaces/gap_workspace.py
+++ b/src/sage/interfaces/gap_workspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Support for (lib)GAP workspace files
"""
diff --git a/src/sage/interfaces/genus2reduction.py b/src/sage/interfaces/genus2reduction.py
index 28d9d58473d..f2e3b7ab2e1 100644
--- a/src/sage/interfaces/genus2reduction.py
+++ b/src/sage/interfaces/genus2reduction.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Conductor and reduction types for genus 2 curves
diff --git a/src/sage/interfaces/giac.py b/src/sage/interfaces/giac.py
index 9c4a3b5e1c1..4dc0ac9660b 100644
--- a/src/sage/interfaces/giac.py
+++ b/src/sage/interfaces/giac.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Pexpect Interface to Giac
diff --git a/src/sage/interfaces/gnuplot.py b/src/sage/interfaces/gnuplot.py
index dc9b3f3e320..b5e6c32d145 100644
--- a/src/sage/interfaces/gnuplot.py
+++ b/src/sage/interfaces/gnuplot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Interface to the Gnuplot interpreter
"""
diff --git a/src/sage/interfaces/gp.py b/src/sage/interfaces/gp.py
index 2e6a20339be..2b18888818e 100644
--- a/src/sage/interfaces/gp.py
+++ b/src/sage/interfaces/gp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
r"""
Interface to the GP calculator of PARI/GP
diff --git a/src/sage/interfaces/interface.py b/src/sage/interfaces/interface.py
index 517c0c6fc7a..e49d5e19d3f 100644
--- a/src/sage/interfaces/interface.py
+++ b/src/sage/interfaces/interface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.gap sage.libs.pari sage.libs.singular sage.symbolic
r"""
Common Interface Functionality
diff --git a/src/sage/interfaces/jmoldata.py b/src/sage/interfaces/jmoldata.py
index add4b453b3d..d0a1571fa3b 100644
--- a/src/sage/interfaces/jmoldata.py
+++ b/src/sage/interfaces/jmoldata.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Interface for extracting data and generating images from Jmol readable files.
diff --git a/src/sage/interfaces/latte.py b/src/sage/interfaces/latte.py
index 6923be55d53..c2a1f0dfb23 100644
--- a/src/sage/interfaces/latte.py
+++ b/src/sage/interfaces/latte.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Interface to LattE integrale programs
"""
diff --git a/src/sage/interfaces/magma.py b/src/sage/interfaces/magma.py
index 48ed6deb722..9f0c2420571 100644
--- a/src/sage/interfaces/magma.py
+++ b/src/sage/interfaces/magma.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to Magma
diff --git a/src/sage/interfaces/magma_free.py b/src/sage/interfaces/magma_free.py
index 34d5b70f29a..e31e12b7e4c 100644
--- a/src/sage/interfaces/magma_free.py
+++ b/src/sage/interfaces/magma_free.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"Interface to the free online MAGMA calculator"
# ****************************************************************************
diff --git a/src/sage/interfaces/maple.py b/src/sage/interfaces/maple.py
index 92e7d7c9200..59a9713a704 100644
--- a/src/sage/interfaces/maple.py
+++ b/src/sage/interfaces/maple.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to Maple
diff --git a/src/sage/interfaces/mathematica.py b/src/sage/interfaces/mathematica.py
index 99b531e80eb..7797f34b4ef 100644
--- a/src/sage/interfaces/mathematica.py
+++ b/src/sage/interfaces/mathematica.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to Mathematica
diff --git a/src/sage/interfaces/mathics.py b/src/sage/interfaces/mathics.py
index 48328d1b083..48e222078f8 100644
--- a/src/sage/interfaces/mathics.py
+++ b/src/sage/interfaces/mathics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to Mathics
diff --git a/src/sage/interfaces/maxima.py b/src/sage/interfaces/maxima.py
index de0f6aad7fc..e6b48c39b06 100644
--- a/src/sage/interfaces/maxima.py
+++ b/src/sage/interfaces/maxima.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Pexpect interface to Maxima
diff --git a/src/sage/interfaces/maxima_abstract.py b/src/sage/interfaces/maxima_abstract.py
index 767b5173823..539e8854403 100644
--- a/src/sage/interfaces/maxima_abstract.py
+++ b/src/sage/interfaces/maxima_abstract.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Abstract interface to Maxima
diff --git a/src/sage/interfaces/maxima_lib.py b/src/sage/interfaces/maxima_lib.py
index 3efeed0bbee..13102783576 100644
--- a/src/sage/interfaces/maxima_lib.py
+++ b/src/sage/interfaces/maxima_lib.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Library interface to Maxima
diff --git a/src/sage/interfaces/povray.py b/src/sage/interfaces/povray.py
index b892cb112cd..bfc8d445f6f 100644
--- a/src/sage/interfaces/povray.py
+++ b/src/sage/interfaces/povray.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
POV-Ray, The Persistence of Vision Ray Tracer
"""
diff --git a/src/sage/interfaces/process.pxd b/src/sage/interfaces/process.pxd
index 3f1ae3f0dc8..99a14e6bb43 100644
--- a/src/sage/interfaces/process.pxd
+++ b/src/sage/interfaces/process.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef class ContainChildren():
cdef int parentpid
cdef int exitcode, exceptcode
diff --git a/src/sage/interfaces/process.pyx b/src/sage/interfaces/process.pyx
index 016de82a30f..e8cda516797 100644
--- a/src/sage/interfaces/process.pyx
+++ b/src/sage/interfaces/process.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Utilities for subprocess management
"""
diff --git a/src/sage/interfaces/qepcad.py b/src/sage/interfaces/qepcad.py
index 6aa5b008859..732309f9c69 100644
--- a/src/sage/interfaces/qepcad.py
+++ b/src/sage/interfaces/qepcad.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to QEPCAD
===================
diff --git a/src/sage/interfaces/quit.py b/src/sage/interfaces/quit.py
index d93cdf2730a..d2757356784 100644
--- a/src/sage/interfaces/quit.py
+++ b/src/sage/interfaces/quit.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Quitting interfaces
"""
diff --git a/src/sage/interfaces/r.py b/src/sage/interfaces/r.py
index 232d767c944..2d0b393ab0c 100644
--- a/src/sage/interfaces/r.py
+++ b/src/sage/interfaces/r.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Interfaces to R
diff --git a/src/sage/interfaces/sage0.py b/src/sage/interfaces/sage0.py
index 12aa8447eff..8da8f5017e3 100644
--- a/src/sage/interfaces/sage0.py
+++ b/src/sage/interfaces/sage0.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.all
r"""
Interface to Sage
diff --git a/src/sage/interfaces/sagespawn.pyx b/src/sage/interfaces/sagespawn.pyx
index f146fa01ddb..7db6da52348 100644
--- a/src/sage/interfaces/sagespawn.pyx
+++ b/src/sage/interfaces/sagespawn.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: optional - ptyprocess
"""
Sage wrapper around pexpect's ``spawn`` class and
diff --git a/src/sage/interfaces/sympy.py b/src/sage/interfaces/sympy.py
index d291727ee0e..c245a2c9da6 100644
--- a/src/sage/interfaces/sympy.py
+++ b/src/sage/interfaces/sympy.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# sage.doctest: optional - sympy
"""
SymPy --> Sage conversion
diff --git a/src/sage/interfaces/sympy_wrapper.py b/src/sage/interfaces/sympy_wrapper.py
index 5ad6095a787..56f00a036c6 100644
--- a/src/sage/interfaces/sympy_wrapper.py
+++ b/src/sage/interfaces/sympy_wrapper.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# sage.doctest: optional - sympy
"""
Wrapper Class for Sage Sets as SymPy Sets
diff --git a/src/sage/interfaces/tab_completion.py b/src/sage/interfaces/tab_completion.py
index ca106a67273..1cc27554350 100644
--- a/src/sage/interfaces/tab_completion.py
+++ b/src/sage/interfaces/tab_completion.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Mixin For Extra Tab Completions
diff --git a/src/sage/interfaces/tachyon.py b/src/sage/interfaces/tachyon.py
index 253253620bd..46b76d6a563 100644
--- a/src/sage/interfaces/tachyon.py
+++ b/src/sage/interfaces/tachyon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
The Tachyon Ray Tracer
diff --git a/src/sage/interfaces/tides.py b/src/sage/interfaces/tides.py
index 309046f30ac..2bf8218ed33 100644
--- a/src/sage/interfaces/tides.py
+++ b/src/sage/interfaces/tides.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to TIDES
diff --git a/src/sage/knots/all.py b/src/sage/knots/all.py
index d25acbda1a3..68945068849 100644
--- a/src/sage/knots/all.py
+++ b/src/sage/knots/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.misc.lazy_import import lazy_import
from sage.features.databases import DatabaseKnotInfo
diff --git a/src/sage/knots/gauss_code.py b/src/sage/knots/gauss_code.py
index 0a631bdd0d5..2438808364d 100644
--- a/src/sage/knots/gauss_code.py
+++ b/src/sage/knots/gauss_code.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
"""
Helper functions related to Gauss codes of knots
diff --git a/src/sage/knots/knot.py b/src/sage/knots/knot.py
index 10f0e241608..76119f6c593 100644
--- a/src/sage/knots/knot.py
+++ b/src/sage/knots/knot.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
r"""
Knots
diff --git a/src/sage/knots/knot_table.py b/src/sage/knots/knot_table.py
index 8defab899c4..85e1a156574 100644
--- a/src/sage/knots/knot_table.py
+++ b/src/sage/knots/knot_table.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Rolfsen database of knots with at most 10 crossings.
diff --git a/src/sage/knots/knotinfo.py b/src/sage/knots/knotinfo.py
index d30fd678735..ea94af29ff2 100644
--- a/src/sage/knots/knotinfo.py
+++ b/src/sage/knots/knotinfo.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
r"""
Access to the KnotInfo database
diff --git a/src/sage/knots/link.py b/src/sage/knots/link.py
index 7ddbe5879c3..9d988d877cf 100644
--- a/src/sage/knots/link.py
+++ b/src/sage/knots/link.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
r"""
Links
diff --git a/src/sage/lfunctions/all.py b/src/sage/lfunctions/all.py
index 9281f97ebbe..80b30c2ec6e 100644
--- a/src/sage/lfunctions/all.py
+++ b/src/sage/lfunctions/all.py
@@ -1,6 +1,8 @@
-from sage.misc.lazy_import import lazy_import as _lazy_import_
+from sage.misc.lazy_import import lazy_import
-_lazy_import_("sage.lfunctions.dokchitser", "Dokchitser")
-_lazy_import_("sage.lfunctions.sympow", "sympow")
-_lazy_import_("sage.lfunctions.zero_sums", "LFunctionZeroSum")
-_lazy_import_("sage.lfunctions.lcalc", "lcalc")
+lazy_import("sage.lfunctions.dokchitser", "Dokchitser")
+lazy_import("sage.lfunctions.sympow", "sympow")
+lazy_import("sage.lfunctions.zero_sums", "LFunctionZeroSum")
+lazy_import("sage.lfunctions.lcalc", "lcalc")
+
+del lazy_import
diff --git a/src/sage/lfunctions/all__sagemath_lcalc.py b/src/sage/lfunctions/all__sagemath_lcalc.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/lfunctions/lcalc.py b/src/sage/lfunctions/lcalc.py
index 73246cdd81e..e8b4c728575 100644
--- a/src/sage/lfunctions/lcalc.py
+++ b/src/sage/lfunctions/lcalc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-lcalc
r"""
Rubinstein's `L`-function calculator
diff --git a/src/sage/lfunctions/pari.py b/src/sage/lfunctions/pari.py
index 732eb115584..770d59c02b5 100644
--- a/src/sage/lfunctions/pari.py
+++ b/src/sage/lfunctions/pari.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
"""
`L`-functions from PARI
diff --git a/src/sage/libs/all.py b/src/sage/libs/all.py
index f85115a4da2..7c6e14767cf 100644
--- a/src/sage/libs/all.py
+++ b/src/sage/libs/all.py
@@ -1,19 +1,11 @@
-
-import sage.libs.ntl.all as ntl
-
-from sage.libs.pari.all import pari, pari_gen, PariError
-
-import sage.libs.symmetrica.all as symmetrica
-
-from sage.misc.lazy_import import lazy_import
-lazy_import('sage.libs.gap.libgap', 'libgap')
-
-lazy_import('sage.libs.eclib.constructor', 'CremonaModularSymbols')
-lazy_import('sage.libs.eclib.interface', ['mwrank_EllipticCurve', 'mwrank_MordellWeil'])
-lazy_import('sage.libs.eclib.mwrank', 'get_precision', 'mwrank_get_precision')
-lazy_import('sage.libs.eclib.mwrank', 'set_precision', 'mwrank_set_precision')
-lazy_import('sage.libs.eclib.mwrank', 'initprimes', 'mwrank_initprimes')
-
-lazy_import('sage.libs.flint.qsieve_sage', 'qsieve')
-
-lazy_import('sage.libs.giac.giac', 'libgiac')
+from sage.libs.all__sagemath_combinat import *
+from sage.libs.all__sagemath_gap import *
+from sage.libs.all__sagemath_flint import *
+from sage.libs.all__sagemath_ntl import *
+from sage.libs.all__sagemath_pari import *
+from sage.libs.all__sagemath_eclib import *
+
+try:
+ from sage.libs.all__sagemath_symbolics import *
+except ImportError:
+ pass
diff --git a/src/sage/libs/all__sagemath_brial.py b/src/sage/libs/all__sagemath_brial.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_combinat.py b/src/sage/libs/all__sagemath_combinat.py
new file mode 100644
index 00000000000..49fc95742c3
--- /dev/null
+++ b/src/sage/libs/all__sagemath_combinat.py
@@ -0,0 +1,5 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.libs.symmetrica', 'all', as_='symmetrica')
+
+del lazy_import
diff --git a/src/sage/libs/all__sagemath_coxeter3.py b/src/sage/libs/all__sagemath_coxeter3.py
index e69de29bb2d..61138b7bc1a 100644
--- a/src/sage/libs/all__sagemath_coxeter3.py
+++ b/src/sage/libs/all__sagemath_coxeter3.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-coxeter3
diff --git a/src/sage/libs/all__sagemath_eclib.py b/src/sage/libs/all__sagemath_eclib.py
new file mode 100644
index 00000000000..23d7839846c
--- /dev/null
+++ b/src/sage/libs/all__sagemath_eclib.py
@@ -0,0 +1,10 @@
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.libs.eclib.constructor', 'CremonaModularSymbols')
+lazy_import('sage.libs.eclib.interface', ['mwrank_EllipticCurve', 'mwrank_MordellWeil'])
+lazy_import('sage.libs.eclib.mwrank', 'get_precision', 'mwrank_get_precision')
+lazy_import('sage.libs.eclib.mwrank', 'set_precision', 'mwrank_set_precision')
+lazy_import('sage.libs.eclib.mwrank', 'initprimes', 'mwrank_initprimes')
+
+del lazy_import
diff --git a/src/sage/libs/all__sagemath_flint.py b/src/sage/libs/all__sagemath_flint.py
new file mode 100644
index 00000000000..b5e330d8329
--- /dev/null
+++ b/src/sage/libs/all__sagemath_flint.py
@@ -0,0 +1,16 @@
+
+try:
+ from sage.libs.all__sagemath_pari import *
+except ImportError:
+ pass
+
+try:
+ from sage.libs.all__sagemath_ntl import *
+except ImportError:
+ pass
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.libs.flint.qsieve_sage', 'qsieve')
+
+del lazy_import
diff --git a/src/sage/libs/all__sagemath_gap.py b/src/sage/libs/all__sagemath_gap.py
new file mode 100644
index 00000000000..e4b82d9deb5
--- /dev/null
+++ b/src/sage/libs/all__sagemath_gap.py
@@ -0,0 +1,3 @@
+from sage.misc.lazy_import import lazy_import
+lazy_import('sage.libs.gap.libgap', 'libgap')
+del lazy_import
diff --git a/src/sage/libs/all__sagemath_giac.py b/src/sage/libs/all__sagemath_giac.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_glpk.py b/src/sage/libs/all__sagemath_glpk.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_homfly.py b/src/sage/libs/all__sagemath_homfly.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_lcalc.py b/src/sage/libs/all__sagemath_lcalc.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_libbraiding.py b/src/sage/libs/all__sagemath_libbraiding.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_libecm.py b/src/sage/libs/all__sagemath_libecm.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_linbox.py b/src/sage/libs/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_meataxe.py b/src/sage/libs/all__sagemath_meataxe.py
index e69de29bb2d..fd1e327ee2f 100644
--- a/src/sage/libs/all__sagemath_meataxe.py
+++ b/src/sage/libs/all__sagemath_meataxe.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-meataxe
diff --git a/src/sage/libs/all__sagemath_modules.py b/src/sage/libs/all__sagemath_modules.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_mpmath.py b/src/sage/libs/all__sagemath_mpmath.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_ntl.py b/src/sage/libs/all__sagemath_ntl.py
new file mode 100644
index 00000000000..ad98922f701
--- /dev/null
+++ b/src/sage/libs/all__sagemath_ntl.py
@@ -0,0 +1,2 @@
+
+import sage.libs.ntl.all as ntl
diff --git a/src/sage/libs/all__sagemath_objects.py b/src/sage/libs/all__sagemath_objects.py
index 38e44245ad3..40da49fdd73 100644
--- a/src/sage/libs/all__sagemath_objects.py
+++ b/src/sage/libs/all__sagemath_objects.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
# The presence of this file ensures that sage_setup for sagemath-objects
# considers this directory as a namespace package
diff --git a/src/sage/libs/all__sagemath_pari.py b/src/sage/libs/all__sagemath_pari.py
new file mode 100644
index 00000000000..3babb25ee71
--- /dev/null
+++ b/src/sage/libs/all__sagemath_pari.py
@@ -0,0 +1 @@
+from sage.libs.pari.all import pari, pari_gen, PariError
diff --git a/src/sage/libs/all__sagemath_singular.py b/src/sage/libs/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_sirocco.py b/src/sage/libs/all__sagemath_sirocco.py
index e69de29bb2d..44db2511e89 100644
--- a/src/sage/libs/all__sagemath_sirocco.py
+++ b/src/sage/libs/all__sagemath_sirocco.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-sirocco
diff --git a/src/sage/libs/all__sagemath_symbolics.py b/src/sage/libs/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..9c096062eb5
--- /dev/null
+++ b/src/sage/libs/all__sagemath_symbolics.py
@@ -0,0 +1,4 @@
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.libs.giac.giac', 'libgiac')
+del lazy_import
diff --git a/src/sage/libs/arb/__init__.py b/src/sage/libs/arb/__init__.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/libs/arb/__init__.py
+++ b/src/sage/libs/arb/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/libs/arb/acb.pxd b/src/sage/libs/arb/acb.pxd
index 9dac39b52a6..212ae927fcf 100644
--- a/src/sage/libs/arb/acb.pxd
+++ b/src/sage/libs/arb/acb.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/acb_calc.pxd b/src/sage/libs/arb/acb_calc.pxd
index c06d7c5ad39..b2d79e9416d 100644
--- a/src/sage/libs/arb/acb_calc.pxd
+++ b/src/sage/libs/arb/acb_calc.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb_calc.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/acb_elliptic.pxd b/src/sage/libs/arb/acb_elliptic.pxd
index d1899d64b94..4bbd36ab55b 100644
--- a/src/sage/libs/arb/acb_elliptic.pxd
+++ b/src/sage/libs/arb/acb_elliptic.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb_elliptic.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/acb_hypgeom.pxd b/src/sage/libs/arb/acb_hypgeom.pxd
index 641dd595004..240a71df996 100644
--- a/src/sage/libs/arb/acb_hypgeom.pxd
+++ b/src/sage/libs/arb/acb_hypgeom.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb_hypgeom.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/acb_mat.pxd b/src/sage/libs/arb/acb_mat.pxd
index 5c16b9481a4..eab8badd5f8 100644
--- a/src/sage/libs/arb/acb_mat.pxd
+++ b/src/sage/libs/arb/acb_mat.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb_mat.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/acb_modular.pxd b/src/sage/libs/arb/acb_modular.pxd
index 46ef451ddd4..fcab53d4124 100644
--- a/src/sage/libs/arb/acb_modular.pxd
+++ b/src/sage/libs/arb/acb_modular.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb_modular.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/acb_poly.pxd b/src/sage/libs/arb/acb_poly.pxd
index 42f4eae1ad4..1fa3dee2c7d 100644
--- a/src/sage/libs/arb/acb_poly.pxd
+++ b/src/sage/libs/arb/acb_poly.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/acb_poly.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/arb.pxd b/src/sage/libs/arb/arb.pxd
index 704a5419c2f..acc5bdc5cde 100644
--- a/src/sage/libs/arb/arb.pxd
+++ b/src/sage/libs/arb/arb.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/arb.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/arb_fmpz_poly.pxd b/src/sage/libs/arb/arb_fmpz_poly.pxd
index a1de902aeb4..f0b3750967e 100644
--- a/src/sage/libs/arb/arb_fmpz_poly.pxd
+++ b/src/sage/libs/arb/arb_fmpz_poly.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/arb_fmpz_poly.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/arb_hypgeom.pxd b/src/sage/libs/arb/arb_hypgeom.pxd
index 09ef72742a1..e7e0389f5c6 100644
--- a/src/sage/libs/arb/arb_hypgeom.pxd
+++ b/src/sage/libs/arb/arb_hypgeom.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/arb_hypgeom.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/arf.pxd b/src/sage/libs/arb/arf.pxd
index bfdca642bc9..92a71f24bba 100644
--- a/src/sage/libs/arb/arf.pxd
+++ b/src/sage/libs/arb/arf.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/arf.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/arith.pyx b/src/sage/libs/arb/arith.pyx
index 8bc843aa2a3..d95977e4176 100644
--- a/src/sage/libs/arb/arith.pyx
+++ b/src/sage/libs/arb/arith.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Arithmetic functions using the arb library
"""
diff --git a/src/sage/libs/arb/bernoulli.pxd b/src/sage/libs/arb/bernoulli.pxd
index a347f8e8378..4b9901c4895 100644
--- a/src/sage/libs/arb/bernoulli.pxd
+++ b/src/sage/libs/arb/bernoulli.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/bernoulli.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/mag.pxd b/src/sage/libs/arb/mag.pxd
index 7c75a4343cc..4a65282aaa6 100644
--- a/src/sage/libs/arb/mag.pxd
+++ b/src/sage/libs/arb/mag.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/mag.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/arb/types.pxd b/src/sage/libs/arb/types.pxd
index 85969f380b8..7582aa556e8 100644
--- a/src/sage/libs/arb/types.pxd
+++ b/src/sage/libs/arb/types.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
# Deprecated header file; use sage/libs/flint/types.pxd instead
# See https://github.com/sagemath/sage/pull/36449
diff --git a/src/sage/libs/braiding.pyx b/src/sage/libs/braiding.pyx
index f3849a55d7e..c10601dfe56 100644
--- a/src/sage/libs/braiding.pyx
+++ b/src/sage/libs/braiding.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-libbraiding
# distutils: libraries = braiding
# distutils: language = c++
r"""
diff --git a/src/sage/libs/ecl.pxd b/src/sage/libs/ecl.pxd
index 19472171403..24d872c59ff 100644
--- a/src/sage/libs/ecl.pxd
+++ b/src/sage/libs/ecl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# distutils: extra_compile_args = ECL_CFLAGS
# distutils: include_dirs = ECL_INCDIR
# distutils: libraries = ECL_LIBRARIES
diff --git a/src/sage/libs/ecl.pyx b/src/sage/libs/ecl.pyx
index 1cc38a3ab3a..9095c57f38c 100644
--- a/src/sage/libs/ecl.pyx
+++ b/src/sage/libs/ecl.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Library interface to Embeddable Common Lisp (ECL)
"""
diff --git a/src/sage/libs/eclib/__init__.pxd b/src/sage/libs/eclib/__init__.pxd
index d44d4fba865..8bade99e170 100644
--- a/src/sage/libs/eclib/__init__.pxd
+++ b/src/sage/libs/eclib/__init__.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
# distutils: language = c++
# distutils: libraries = ec NTL_LIBRARIES pari gmp m
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/libs/eclib/__init__.py b/src/sage/libs/eclib/__init__.py
index e69de29bb2d..95995325cb0 100644
--- a/src/sage/libs/eclib/__init__.py
+++ b/src/sage/libs/eclib/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-eclib
diff --git a/src/sage/libs/eclib/all.py b/src/sage/libs/eclib/all.py
index 717a66fae7b..0be330b09e4 100644
--- a/src/sage/libs/eclib/all.py
+++ b/src/sage/libs/eclib/all.py
@@ -1,4 +1,6 @@
-from .constructor import CremonaModularSymbols
-from .interface import mwrank_EllipticCurve, mwrank_MordellWeil
-from .mwrank import get_precision, set_precision
-from .mwrank import initprimes as mwrank_initprimes
+# sage_setup: distribution = sagemath-eclib
+
+from sage.libs.eclib.constructor import CremonaModularSymbols
+from sage.libs.eclib.interface import mwrank_EllipticCurve, mwrank_MordellWeil
+from sage.libs.eclib.mwrank import get_precision, set_precision
+from sage.libs.eclib.mwrank import initprimes as mwrank_initprimes
diff --git a/src/sage/libs/eclib/constructor.py b/src/sage/libs/eclib/constructor.py
index 7c1c21377d0..37e2e373a2b 100644
--- a/src/sage/libs/eclib/constructor.py
+++ b/src/sage/libs/eclib/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
"Cremona modular symbols"
def CremonaModularSymbols(level, sign=0, cuspidal=False, verbose=0):
diff --git a/src/sage/libs/eclib/homspace.pxd b/src/sage/libs/eclib/homspace.pxd
index d3600547f1e..f9fdefe66f4 100644
--- a/src/sage/libs/eclib/homspace.pxd
+++ b/src/sage/libs/eclib/homspace.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
from sage.libs.eclib cimport homspace
cdef class ModularSymbols:
diff --git a/src/sage/libs/eclib/homspace.pyx b/src/sage/libs/eclib/homspace.pyx
index 723bdc8c30e..77bf76b299a 100644
--- a/src/sage/libs/eclib/homspace.pyx
+++ b/src/sage/libs/eclib/homspace.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
"Cremona modular symbols"
from cysignals.signals cimport sig_on, sig_off
diff --git a/src/sage/libs/eclib/interface.py b/src/sage/libs/eclib/interface.py
index 7b2b07b1f3f..bc78e4c47c4 100644
--- a/src/sage/libs/eclib/interface.py
+++ b/src/sage/libs/eclib/interface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
r"""
Sage interface to Cremona's ``eclib`` library (also known as ``mwrank``)
diff --git a/src/sage/libs/eclib/mat.pxd b/src/sage/libs/eclib/mat.pxd
index 509bd4d0ce8..f582ab4a21f 100644
--- a/src/sage/libs/eclib/mat.pxd
+++ b/src/sage/libs/eclib/mat.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
from sage.libs.eclib cimport mat
cdef class Matrix:
diff --git a/src/sage/libs/eclib/mat.pyx b/src/sage/libs/eclib/mat.pyx
index b4b607ef083..80499d89297 100644
--- a/src/sage/libs/eclib/mat.pyx
+++ b/src/sage/libs/eclib/mat.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
"""
Cremona matrices
"""
diff --git a/src/sage/libs/eclib/mwrank.pyx b/src/sage/libs/eclib/mwrank.pyx
index bc475f907b6..a74860db330 100644
--- a/src/sage/libs/eclib/mwrank.pyx
+++ b/src/sage/libs/eclib/mwrank.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
"""
Cython interface to Cremona's ``eclib`` library (also known as ``mwrank``)
diff --git a/src/sage/libs/eclib/newforms.pxd b/src/sage/libs/eclib/newforms.pxd
index 7f78a4f9f63..04398ec7748 100644
--- a/src/sage/libs/eclib/newforms.pxd
+++ b/src/sage/libs/eclib/newforms.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
from sage.libs.eclib cimport newforms
cdef class ECModularSymbol:
diff --git a/src/sage/libs/eclib/newforms.pyx b/src/sage/libs/eclib/newforms.pyx
index a1dffcbe1e3..1cec125a369 100644
--- a/src/sage/libs/eclib/newforms.pyx
+++ b/src/sage/libs/eclib/newforms.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-eclib
"""
Modular symbols using eclib newforms
"""
diff --git a/src/sage/libs/flint/__init__.py b/src/sage/libs/flint/__init__.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/libs/flint/__init__.py
+++ b/src/sage/libs/flint/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/libs/flint/arith.pxd b/src/sage/libs/flint/arith.pxd
index 70e7f5e5d29..357c53ee0c8 100644
--- a/src/sage/libs/flint/arith.pxd
+++ b/src/sage/libs/flint/arith.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/arith.h
diff --git a/src/sage/libs/flint/arith.pyx b/src/sage/libs/flint/arith.pyx
index fe599af4dfc..1ecabf5c1da 100644
--- a/src/sage/libs/flint/arith.pyx
+++ b/src/sage/libs/flint/arith.pyx
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
r"""
Deprecated module.
diff --git a/src/sage/libs/flint/flint.pxd b/src/sage/libs/flint/flint.pxd
index 33af77f9c16..f685ba9ced4 100644
--- a/src/sage/libs/flint/flint.pxd
+++ b/src/sage/libs/flint/flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/flint.h
diff --git a/src/sage/libs/flint/fmpq.pxd b/src/sage/libs/flint/fmpq.pxd
index 61ebabac2b0..80eac6af702 100644
--- a/src/sage/libs/flint/fmpq.pxd
+++ b/src/sage/libs/flint/fmpq.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpq.h
diff --git a/src/sage/libs/flint/fmpq_mat.pxd b/src/sage/libs/flint/fmpq_mat.pxd
index 0227b8523a6..5da5c44bfcc 100644
--- a/src/sage/libs/flint/fmpq_mat.pxd
+++ b/src/sage/libs/flint/fmpq_mat.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpq_mat.h
diff --git a/src/sage/libs/flint/fmpq_poly.pxd b/src/sage/libs/flint/fmpq_poly.pxd
index f8622ebfd41..db45362e456 100644
--- a/src/sage/libs/flint/fmpq_poly.pxd
+++ b/src/sage/libs/flint/fmpq_poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpq_poly.h
diff --git a/src/sage/libs/flint/fmpq_poly_sage.pyx b/src/sage/libs/flint/fmpq_poly_sage.pyx
index fcaf6407bfc..0c6813cf7b9 100644
--- a/src/sage/libs/flint/fmpq_poly_sage.pyx
+++ b/src/sage/libs/flint/fmpq_poly_sage.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# Functions removed from flint but still needed in Sage. Code adapted from
# earlier versions of flint.
diff --git a/src/sage/libs/flint/fmpz.pxd b/src/sage/libs/flint/fmpz.pxd
index 237ac135cd9..ba4ee32db9b 100644
--- a/src/sage/libs/flint/fmpz.pxd
+++ b/src/sage/libs/flint/fmpz.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz.h
diff --git a/src/sage/libs/flint/fmpz_factor.pxd b/src/sage/libs/flint/fmpz_factor.pxd
index 1e93305c7f5..7e1aaefbe70 100644
--- a/src/sage/libs/flint/fmpz_factor.pxd
+++ b/src/sage/libs/flint/fmpz_factor.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_factor.h
diff --git a/src/sage/libs/flint/fmpz_factor_sage.pyx b/src/sage/libs/flint/fmpz_factor_sage.pyx
index 330ba3d4d4e..71a898fa15c 100644
--- a/src/sage/libs/flint/fmpz_factor_sage.pyx
+++ b/src/sage/libs/flint/fmpz_factor_sage.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from cysignals.signals cimport sig_check
from sage.libs.flint.fmpz cimport fmpz_get_mpz
from sage.rings.integer cimport Integer
diff --git a/src/sage/libs/flint/fmpz_mat.pxd b/src/sage/libs/flint/fmpz_mat.pxd
index abde570c32f..871172b28aa 100644
--- a/src/sage/libs/flint/fmpz_mat.pxd
+++ b/src/sage/libs/flint/fmpz_mat.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_mat.h
diff --git a/src/sage/libs/flint/fmpz_mod.pxd b/src/sage/libs/flint/fmpz_mod.pxd
index 4089589dd53..6fa63df8209 100644
--- a/src/sage/libs/flint/fmpz_mod.pxd
+++ b/src/sage/libs/flint/fmpz_mod.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_mod.h
diff --git a/src/sage/libs/flint/fmpz_mod_poly.pxd b/src/sage/libs/flint/fmpz_mod_poly.pxd
index 302113e191b..f70a19f852a 100644
--- a/src/sage/libs/flint/fmpz_mod_poly.pxd
+++ b/src/sage/libs/flint/fmpz_mod_poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_mod_poly.h
diff --git a/src/sage/libs/flint/fmpz_poly.pxd b/src/sage/libs/flint/fmpz_poly.pxd
index 59508fe6c19..0a07a50b357 100644
--- a/src/sage/libs/flint/fmpz_poly.pxd
+++ b/src/sage/libs/flint/fmpz_poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_poly.h
diff --git a/src/sage/libs/flint/fmpz_poly.pyx b/src/sage/libs/flint/fmpz_poly.pyx
index ca3997316e7..d33c23cad33 100644
--- a/src/sage/libs/flint/fmpz_poly.pyx
+++ b/src/sage/libs/flint/fmpz_poly.pyx
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
r"""
Deprecated module
diff --git a/src/sage/libs/flint/fmpz_poly_mat.pxd b/src/sage/libs/flint/fmpz_poly_mat.pxd
index 83ed1d8bced..56977d1ff3f 100644
--- a/src/sage/libs/flint/fmpz_poly_mat.pxd
+++ b/src/sage/libs/flint/fmpz_poly_mat.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_poly_mat.h
diff --git a/src/sage/libs/flint/fmpz_poly_q.pxd b/src/sage/libs/flint/fmpz_poly_q.pxd
index 26de673bb6c..88bafa5fc1e 100644
--- a/src/sage/libs/flint/fmpz_poly_q.pxd
+++ b/src/sage/libs/flint/fmpz_poly_q.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_poly_q.h
diff --git a/src/sage/libs/flint/fmpz_vec.pxd b/src/sage/libs/flint/fmpz_vec.pxd
index 0418fbc6242..0cfc343b8aa 100644
--- a/src/sage/libs/flint/fmpz_vec.pxd
+++ b/src/sage/libs/flint/fmpz_vec.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_vec.h
diff --git a/src/sage/libs/flint/fq.pxd b/src/sage/libs/flint/fq.pxd
index 01c8f5887a2..e2b65e3a46d 100644
--- a/src/sage/libs/flint/fq.pxd
+++ b/src/sage/libs/flint/fq.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fq.h
diff --git a/src/sage/libs/flint/fq_nmod.pxd b/src/sage/libs/flint/fq_nmod.pxd
index 83085408d29..4f2f7402b8c 100644
--- a/src/sage/libs/flint/fq_nmod.pxd
+++ b/src/sage/libs/flint/fq_nmod.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fq_nmod.h
diff --git a/src/sage/libs/flint/nmod_poly.pxd b/src/sage/libs/flint/nmod_poly.pxd
index eb5cd984fd6..2f98a8e6fee 100644
--- a/src/sage/libs/flint/nmod_poly.pxd
+++ b/src/sage/libs/flint/nmod_poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/nmod_poly.h
diff --git a/src/sage/libs/flint/nmod_poly_linkage.pxi b/src/sage/libs/flint/nmod_poly_linkage.pxi
index 461679cba20..fb429ccf20e 100644
--- a/src/sage/libs/flint/nmod_poly_linkage.pxi
+++ b/src/sage/libs/flint/nmod_poly_linkage.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Linkage for arithmetic with FLINT's nmod_poly_t elements.
diff --git a/src/sage/libs/flint/nmod_vec.pxd b/src/sage/libs/flint/nmod_vec.pxd
index 326ea21b98a..66d5cb63990 100644
--- a/src/sage/libs/flint/nmod_vec.pxd
+++ b/src/sage/libs/flint/nmod_vec.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/nmod_vec.h
diff --git a/src/sage/libs/flint/ntl_interface.pxd b/src/sage/libs/flint/ntl_interface.pxd
index d6112383330..cf25aa73004 100644
--- a/src/sage/libs/flint/ntl_interface.pxd
+++ b/src/sage/libs/flint/ntl_interface.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: language = c++
# distutils: libraries = flint
# distutils: depends = flint/NTL-interface.h
diff --git a/src/sage/libs/flint/padic.pxd b/src/sage/libs/flint/padic.pxd
index ef190a51a9e..fd46053d501 100644
--- a/src/sage/libs/flint/padic.pxd
+++ b/src/sage/libs/flint/padic.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/padic.h
diff --git a/src/sage/libs/flint/padic_poly.pxd b/src/sage/libs/flint/padic_poly.pxd
index caca76b79db..09481dc9955 100644
--- a/src/sage/libs/flint/padic_poly.pxd
+++ b/src/sage/libs/flint/padic_poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/padic_poly.h
diff --git a/src/sage/libs/flint/qadic.pxd b/src/sage/libs/flint/qadic.pxd
index 86db643ec2a..93d3ec98267 100644
--- a/src/sage/libs/flint/qadic.pxd
+++ b/src/sage/libs/flint/qadic.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/qadic.h
diff --git a/src/sage/libs/flint/qsieve.pxd b/src/sage/libs/flint/qsieve.pxd
index fe25087758c..c5628bb377d 100644
--- a/src/sage/libs/flint/qsieve.pxd
+++ b/src/sage/libs/flint/qsieve.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/qsieve.h
diff --git a/src/sage/libs/flint/qsieve.pyx b/src/sage/libs/flint/qsieve.pyx
index 7168a3beac8..3a405dfa316 100644
--- a/src/sage/libs/flint/qsieve.pyx
+++ b/src/sage/libs/flint/qsieve.pyx
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
r"""
Deprecated module.
diff --git a/src/sage/libs/flint/thread_pool.pxd b/src/sage/libs/flint/thread_pool.pxd
index 137eae2b7a6..778245ef9cb 100644
--- a/src/sage/libs/flint/thread_pool.pxd
+++ b/src/sage/libs/flint/thread_pool.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/thread_pool.h
diff --git a/src/sage/libs/flint/types.pxd b/src/sage/libs/flint/types.pxd
index 9e227fd87b0..d8c27deb02c 100644
--- a/src/sage/libs/flint/types.pxd
+++ b/src/sage/libs/flint/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: depends = flint/acb.h flint/acb_calc.h flint/acb_dft.h flint/acb_dirichlet.h flint/acb_elliptic.h flint/acb_hypgeom.h flint/acb_mat.h flint/acb_modular.h flint/acb_poly.h flint/acf.h flint/aprcl.h flint/arb.h flint/arb_calc.h flint/arb_fmpz_poly.h flint/arb_fpwrap.h flint/arb_hypgeom.h flint/arb_mat.h flint/arb_poly.h flint/arf.h flint/arith.h flint/bernoulli.h flint/bool_mat.h flint/ca.h flint/ca_ext.h flint/ca_field.h flint/ca_mat.h flint/ca_poly.h flint/ca_vec.h flint/calcium.h flint/d_mat.h flint/d_vec.h flint/dirichlet.h flint/dlog.h flint/double_extras.h flint/double_interval.h flint/fexpr.h flint/fexpr_builtin.h flint/fft.h flint/flint.h flint/fmpq.h flint/fmpq_mat.h flint/fmpq_mpoly.h flint/fmpq_mpoly_factor.h flint/fmpq_poly.h flint/fmpq_vec.h flint/fmpz.h flint/fmpz_extras.h flint/fmpz_factor.h flint/fmpz_lll.h flint/fmpz_mat.h flint/fmpz_mod.h flint/fmpz_mod_mat.h flint/fmpz_mod_mpoly.h flint/fmpz_mod_mpoly_factor.h flint/fmpz_mod_poly.h flint/fmpz_mod_poly_factor.h flint/fmpz_mod_vec.h flint/fmpz_mpoly.h flint/fmpz_mpoly_factor.h flint/fmpz_mpoly_q.h flint/fmpz_poly.h flint/fmpz_poly_factor.h flint/fmpz_poly_mat.h flint/fmpz_poly_q.h flint/fmpz_vec.h flint/fmpzi.h flint/fq.h flint/fq_default.h flint/fq_default_mat.h flint/fq_default_poly.h flint/fq_default_poly_factor.h flint/fq_embed.h flint/fq_mat.h flint/fq_nmod.h flint/fq_nmod_embed.h flint/fq_nmod_mat.h flint/fq_nmod_mpoly.h flint/fq_nmod_mpoly_factor.h flint/fq_nmod_poly.h flint/fq_nmod_poly_factor.h flint/fq_nmod_vec.h flint/fq_poly.h flint/fq_poly_factor.h flint/fq_vec.h flint/fq_zech.h flint/fq_zech_embed.h flint/fq_zech_mat.h flint/fq_zech_poly.h flint/fq_zech_poly_factor.h flint/fq_zech_vec.h flint/gr.h flint/gr_generic.h flint/gr_mat.h flint/gr_mpoly.h flint/gr_poly.h flint/gr_special.h flint/gr_vec.h flint/hypgeom.h flint/long_extras.h flint/mag.h flint/mpf_mat.h flint/mpf_vec.h flint/mpfr_mat.h flint/mpfr_vec.h flint/mpn_extras.h flint/mpoly.h flint/nf.h flint/nf_elem.h flint/nmod.h flint/nmod_mat.h flint/nmod_mpoly.h flint/nmod_mpoly_factor.h flint/nmod_poly.h flint/nmod_poly_factor.h flint/nmod_poly_mat.h flint/nmod_types.h flint/nmod_vec.h flint/padic.h flint/padic_mat.h flint/padic_poly.h flint/partitions.h flint/perm.h flint/profiler.h flint/qadic.h flint/qfb.h flint/qqbar.h flint/qsieve.h flint/thread_pool.h flint/ulong_extras.h
# WARNING: src/sage/libs/flint/types.pxd is generated from
diff --git a/src/sage/libs/flint/ulong_extras.pxd b/src/sage/libs/flint/ulong_extras.pxd
index 8593c3725f2..d9ad42c0d9c 100644
--- a/src/sage/libs/flint/ulong_extras.pxd
+++ b/src/sage/libs/flint/ulong_extras.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/ulong_extras.h
diff --git a/src/sage/libs/flint/ulong_extras.pyx b/src/sage/libs/flint/ulong_extras.pyx
index e4eee95b119..7a414d9ceb9 100644
--- a/src/sage/libs/flint/ulong_extras.pyx
+++ b/src/sage/libs/flint/ulong_extras.pyx
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
r"""
Deprecated modules.
diff --git a/src/sage/libs/gap/all.py b/src/sage/libs/gap/all.py
index e69de29bb2d..dd59a6da735 100644
--- a/src/sage/libs/gap/all.py
+++ b/src/sage/libs/gap/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-gap
diff --git a/src/sage/libs/gap/all_documented_functions.py b/src/sage/libs/gap/all_documented_functions.py
index 0820dc71064..f680ddff75a 100644
--- a/src/sage/libs/gap/all_documented_functions.py
+++ b/src/sage/libs/gap/all_documented_functions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""nodoctest
All Documented GAP Functions
diff --git a/src/sage/libs/gap/assigned_names.py b/src/sage/libs/gap/assigned_names.py
index e8d1f1707cc..e136e95f5e0 100644
--- a/src/sage/libs/gap/assigned_names.py
+++ b/src/sage/libs/gap/assigned_names.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""nodoctest
List of assigned names in GAP
diff --git a/src/sage/libs/gap/context_managers.py b/src/sage/libs/gap/context_managers.py
index b42e9c02f4f..9252c3ee510 100644
--- a/src/sage/libs/gap/context_managers.py
+++ b/src/sage/libs/gap/context_managers.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Context Managers for LibGAP
diff --git a/src/sage/libs/gap/element.pxd b/src/sage/libs/gap/element.pxd
index ba4028cd91c..db7ac3be9f9 100644
--- a/src/sage/libs/gap/element.pxd
+++ b/src/sage/libs/gap/element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
#*****************************************************************************
# Copyright (C) 2012 Volker Braun
#
diff --git a/src/sage/libs/gap/element.pyx b/src/sage/libs/gap/element.pyx
index f1482997b86..83d2286113e 100644
--- a/src/sage/libs/gap/element.pyx
+++ b/src/sage/libs/gap/element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
GAP element wrapper
diff --git a/src/sage/libs/gap/gap_functions.py b/src/sage/libs/gap/gap_functions.py
index 5e35ca672bf..7df65a0db51 100644
--- a/src/sage/libs/gap/gap_functions.py
+++ b/src/sage/libs/gap/gap_functions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""Common global functions defined by GAP."""
###############################################################################
diff --git a/src/sage/libs/gap/gap_globals.py b/src/sage/libs/gap/gap_globals.py
index 4c3e6eb3aae..b2a413c06d9 100644
--- a/src/sage/libs/gap/gap_globals.py
+++ b/src/sage/libs/gap/gap_globals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""Common globals defined by GAP."""
###############################################################################
diff --git a/src/sage/libs/gap/gap_includes.pxd b/src/sage/libs/gap/gap_includes.pxd
index 1ed4378a6c7..67746723817 100644
--- a/src/sage/libs/gap/gap_includes.pxd
+++ b/src/sage/libs/gap/gap_includes.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# distutils: libraries = gap gmp m
###############################################################################
# Copyright (C) 2009, William Stein
diff --git a/src/sage/libs/gap/libgap.pyx b/src/sage/libs/gap/libgap.pyx
index 328a5096160..5683b632fb1 100644
--- a/src/sage/libs/gap/libgap.pyx
+++ b/src/sage/libs/gap/libgap.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Library Interface to GAP
diff --git a/src/sage/libs/gap/operations.py b/src/sage/libs/gap/operations.py
index 434d1a01511..0cbfb8ffa5a 100644
--- a/src/sage/libs/gap/operations.py
+++ b/src/sage/libs/gap/operations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Operations for LibGAP Elements
diff --git a/src/sage/libs/gap/saved_workspace.py b/src/sage/libs/gap/saved_workspace.py
index fdaf18f4644..43e5e066ed4 100644
--- a/src/sage/libs/gap/saved_workspace.py
+++ b/src/sage/libs/gap/saved_workspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
LibGAP Workspace Support
diff --git a/src/sage/libs/gap/test.py b/src/sage/libs/gap/test.py
index eee697218ee..c96c6ceddf9 100644
--- a/src/sage/libs/gap/test.py
+++ b/src/sage/libs/gap/test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Short tests for GAP
"""
diff --git a/src/sage/libs/gap/test_long.py b/src/sage/libs/gap/test_long.py
index 262db5ad287..a365b2c4a4a 100644
--- a/src/sage/libs/gap/test_long.py
+++ b/src/sage/libs/gap/test_long.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Long tests for GAP
diff --git a/src/sage/libs/gap/util.pxd b/src/sage/libs/gap/util.pxd
index bb559f7c6a3..eb5d5711ad3 100644
--- a/src/sage/libs/gap/util.pxd
+++ b/src/sage/libs/gap/util.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
#*****************************************************************************
# Copyright (C) 2012 Volker Braun
#
diff --git a/src/sage/libs/gap/util.pyx b/src/sage/libs/gap/util.pyx
index 3e75d71ff06..3586bee9211 100644
--- a/src/sage/libs/gap/util.pyx
+++ b/src/sage/libs/gap/util.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
"""
Utility functions for GAP
"""
diff --git a/src/sage/libs/giac/__init__.py b/src/sage/libs/giac/__init__.py
index e7d7bc67d14..ffc5714017a 100644
--- a/src/sage/libs/giac/__init__.py
+++ b/src/sage/libs/giac/__init__.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-giac
"""
Wrappers for Giac functions
diff --git a/src/sage/libs/giac/auto-methods.pxi b/src/sage/libs/giac/auto-methods.pxi
index 9af4c0023bf..92166556652 100644
--- a/src/sage/libs/giac/auto-methods.pxi
+++ b/src/sage/libs/giac/auto-methods.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-giac
# file auto generated by mkkeywords.py
cdef class GiacMethods_base:
"""
diff --git a/src/sage/libs/giac/giac.pxd b/src/sage/libs/giac/giac.pxd
index 1d9da88d8d4..b1c57995763 100644
--- a/src/sage/libs/giac/giac.pxd
+++ b/src/sage/libs/giac/giac.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-giac
# distutils: language = c++
# ****************************************************************************
# Copyright (C) 2012, Frederic Han
diff --git a/src/sage/libs/giac/giac.pyx b/src/sage/libs/giac/giac.pyx
index 74e4587440f..628d457eb20 100644
--- a/src/sage/libs/giac/giac.pyx
+++ b/src/sage/libs/giac/giac.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-giac
# distutils: libraries = giac
# distutils: language = c++
r"""
diff --git a/src/sage/libs/giac/keywords.pxi b/src/sage/libs/giac/keywords.pxi
index 9bc7eebe0b5..e1253b9746a 100644
--- a/src/sage/libs/giac/keywords.pxi
+++ b/src/sage/libs/giac/keywords.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-giac
# file auto generated by mkkeywords.py
blacklist = ['eval', 'cas_setup', 'i', 'list', 'input', 'in', 'sto', 'string', 'and', 'break', 'continue', 'else', 'for', 'from', 'if', 'not', 'or', 'pow', 'print', 'return', 'set[]', 'try', 'while', 'open', 'output', 'do', 'of', 'Request', 'i[]', '[]', 'ffunction', 'sleep', '[..]']
diff --git a/src/sage/libs/glpk/__init__.py b/src/sage/libs/glpk/__init__.py
index e69de29bb2d..b555a29542b 100644
--- a/src/sage/libs/glpk/__init__.py
+++ b/src/sage/libs/glpk/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-glpk
diff --git a/src/sage/libs/glpk/constants.pxd b/src/sage/libs/glpk/constants.pxd
index 55fd165dcd3..f75107a9ae6 100644
--- a/src/sage/libs/glpk/constants.pxd
+++ b/src/sage/libs/glpk/constants.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
#*****************************************************************************
# Copyright (C) 2010 Nathann Cohen
# Copyright (C) 2015 Jeroen Demeyer
diff --git a/src/sage/libs/glpk/env.pxd b/src/sage/libs/glpk/env.pxd
index 80d5153d3c9..8da2da5c261 100644
--- a/src/sage/libs/glpk/env.pxd
+++ b/src/sage/libs/glpk/env.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
# distutils: libraries = glpk z gmp
cdef extern from "glpk.h":
diff --git a/src/sage/libs/glpk/error.pyx b/src/sage/libs/glpk/error.pyx
index 4fb01782205..4948f0969ad 100644
--- a/src/sage/libs/glpk/error.pyx
+++ b/src/sage/libs/glpk/error.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
"""
Error handler for the GLPK library
"""
diff --git a/src/sage/libs/glpk/graph.pxd b/src/sage/libs/glpk/graph.pxd
index 2266952444c..94ebbb91c47 100644
--- a/src/sage/libs/glpk/graph.pxd
+++ b/src/sage/libs/glpk/graph.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
# distutils: libraries = glpk z gmp
#*****************************************************************************
diff --git a/src/sage/libs/glpk/lp.pxd b/src/sage/libs/glpk/lp.pxd
index cc4f05e5368..d3260e30f60 100644
--- a/src/sage/libs/glpk/lp.pxd
+++ b/src/sage/libs/glpk/lp.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
# distutils: libraries = glpk z gmp
#*****************************************************************************
diff --git a/src/sage/libs/glpk/types.pxd b/src/sage/libs/glpk/types.pxd
index 2d02df5dad4..33db76589d4 100644
--- a/src/sage/libs/glpk/types.pxd
+++ b/src/sage/libs/glpk/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
#*****************************************************************************
# Copyright (C) 2010 Nathann Cohen
# Copyright (C) 2015 Jeroen Demeyer
diff --git a/src/sage/libs/gmp/__init__.py b/src/sage/libs/gmp/__init__.py
index e69de29bb2d..f9b8167c3cd 100644
--- a/src/sage/libs/gmp/__init__.py
+++ b/src/sage/libs/gmp/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-objects
diff --git a/src/sage/libs/gmp/all.pxd b/src/sage/libs/gmp/all.pxd
index cf1f3fa6417..ee59521494e 100644
--- a/src/sage/libs/gmp/all.pxd
+++ b/src/sage/libs/gmp/all.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.libs.gmp.types cimport *
from sage.libs.gmp.random cimport *
from sage.libs.gmp.mpz cimport *
diff --git a/src/sage/libs/gmp/binop.pxd b/src/sage/libs/gmp/binop.pxd
index 6b56c24a1b5..94b6db1a8db 100644
--- a/src/sage/libs/gmp/binop.pxd
+++ b/src/sage/libs/gmp/binop.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Fast binary operations for basic types
"""
diff --git a/src/sage/libs/gmp/misc.pxd b/src/sage/libs/gmp/misc.pxd
index 3ad4f2a89db..c64528d0e9c 100644
--- a/src/sage/libs/gmp/misc.pxd
+++ b/src/sage/libs/gmp/misc.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: libraries = gmp
cdef extern from "gmp.h":
diff --git a/src/sage/libs/gmp/mpf.pxd b/src/sage/libs/gmp/mpf.pxd
index b63d84009c0..a1bbfd46df3 100644
--- a/src/sage/libs/gmp/mpf.pxd
+++ b/src/sage/libs/gmp/mpf.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: libraries = gmp
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/gmp/mpn.pxd b/src/sage/libs/gmp/mpn.pxd
index 890c5b63da7..34b045e1f4b 100644
--- a/src/sage/libs/gmp/mpn.pxd
+++ b/src/sage/libs/gmp/mpn.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: libraries = gmp
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/gmp/mpq.pxd b/src/sage/libs/gmp/mpq.pxd
index d865630aee0..068988ffbc4 100644
--- a/src/sage/libs/gmp/mpq.pxd
+++ b/src/sage/libs/gmp/mpq.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: libraries = gmp
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/gmp/mpz.pxd b/src/sage/libs/gmp/mpz.pxd
index 71d1e5e3069..66c44773d17 100644
--- a/src/sage/libs/gmp/mpz.pxd
+++ b/src/sage/libs/gmp/mpz.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: libraries = gmp
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/gmp/pylong.pxd b/src/sage/libs/gmp/pylong.pxd
index 325d747f57b..fbc8e5671f7 100644
--- a/src/sage/libs/gmp/pylong.pxd
+++ b/src/sage/libs/gmp/pylong.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Various functions to deal with conversion mpz <-> Python int/long
"""
diff --git a/src/sage/libs/gmp/pylong.pyx b/src/sage/libs/gmp/pylong.pyx
index 80f9843e07c..660cdbbae58 100644
--- a/src/sage/libs/gmp/pylong.pyx
+++ b/src/sage/libs/gmp/pylong.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Various functions to deal with conversion mpz <-> Python int/long
diff --git a/src/sage/libs/gmp/random.pxd b/src/sage/libs/gmp/random.pxd
index a50657454ca..ef3cde3c4ea 100644
--- a/src/sage/libs/gmp/random.pxd
+++ b/src/sage/libs/gmp/random.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: libraries = gmp
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/gmp/randomize.pxd b/src/sage/libs/gmp/randomize.pxd
index 3876c0dda13..ac4d155c694 100644
--- a/src/sage/libs/gmp/randomize.pxd
+++ b/src/sage/libs/gmp/randomize.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Generate random rationals in Sage
"""
diff --git a/src/sage/libs/gmp/types.pxd b/src/sage/libs/gmp/types.pxd
index a8a4a6a35c4..0047df1194e 100644
--- a/src/sage/libs/gmp/types.pxd
+++ b/src/sage/libs/gmp/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from libc.stdio cimport FILE
cdef extern from "gmp.h":
diff --git a/src/sage/libs/gmpxx.pxd b/src/sage/libs/gmpxx.pxd
index 8ad41212dbf..227e62fe9c3 100644
--- a/src/sage/libs/gmpxx.pxd
+++ b/src/sage/libs/gmpxx.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# distutils: language = c++
# distutils: libraries = gmpxx gmp
diff --git a/src/sage/libs/gsl/__init__.py b/src/sage/libs/gsl/__init__.py
index e69de29bb2d..6f6ab52d0f2 100644
--- a/src/sage/libs/gsl/__init__.py
+++ b/src/sage/libs/gsl/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-modules
diff --git a/src/sage/libs/gsl/airy.pxd b/src/sage/libs/gsl/airy.pxd
index 7e996d5af81..d4f8c8806ee 100644
--- a/src/sage/libs/gsl/airy.pxd
+++ b/src/sage/libs/gsl/airy.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/all.pxd b/src/sage/libs/gsl/all.pxd
index 099399d9f3f..5d90292969a 100644
--- a/src/sage/libs/gsl/all.pxd
+++ b/src/sage/libs/gsl/all.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gsl.types cimport *
from sage.libs.gsl.math cimport *
diff --git a/src/sage/libs/gsl/array.pxd b/src/sage/libs/gsl/array.pxd
index 45ed04e45d0..0860ade618f 100644
--- a/src/sage/libs/gsl/array.pxd
+++ b/src/sage/libs/gsl/array.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cdef class GSLDoubleArray:
cdef size_t n
cdef size_t stride
diff --git a/src/sage/libs/gsl/array.pyx b/src/sage/libs/gsl/array.pyx
index 3916929cca4..ac01868f01e 100644
--- a/src/sage/libs/gsl/array.pyx
+++ b/src/sage/libs/gsl/array.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
GSL arrays
"""
diff --git a/src/sage/libs/gsl/bessel.pxd b/src/sage/libs/gsl/bessel.pxd
index 8a0a521aa3d..64f06a36db9 100644
--- a/src/sage/libs/gsl/bessel.pxd
+++ b/src/sage/libs/gsl/bessel.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/blas.pxd b/src/sage/libs/gsl/blas.pxd
index 7b195751993..0648ecf42a2 100644
--- a/src/sage/libs/gsl/blas.pxd
+++ b/src/sage/libs/gsl/blas.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/blas_types.pxd b/src/sage/libs/gsl/blas_types.pxd
index 7292912a641..9b09ddc36c4 100644
--- a/src/sage/libs/gsl/blas_types.pxd
+++ b/src/sage/libs/gsl/blas_types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: include_dirs = GSL_INCDIR
cdef extern from "gsl/gsl_cblas.h":
cdef enum CBLAS_ORDER:
diff --git a/src/sage/libs/gsl/block.pxd b/src/sage/libs/gsl/block.pxd
index 69ee5251dda..f0ddd7ecb52 100644
--- a/src/sage/libs/gsl/block.pxd
+++ b/src/sage/libs/gsl/block.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/chebyshev.pxd b/src/sage/libs/gsl/chebyshev.pxd
index 06d2da41732..87158ebd611 100644
--- a/src/sage/libs/gsl/chebyshev.pxd
+++ b/src/sage/libs/gsl/chebyshev.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/clausen.pxd b/src/sage/libs/gsl/clausen.pxd
index 2f92518e171..f45676f2673 100644
--- a/src/sage/libs/gsl/clausen.pxd
+++ b/src/sage/libs/gsl/clausen.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/combination.pxd b/src/sage/libs/gsl/combination.pxd
index 6072fb2417a..8e382d71d97 100644
--- a/src/sage/libs/gsl/combination.pxd
+++ b/src/sage/libs/gsl/combination.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/complex.pxd b/src/sage/libs/gsl/complex.pxd
index 87fd3957b62..98db853b947 100644
--- a/src/sage/libs/gsl/complex.pxd
+++ b/src/sage/libs/gsl/complex.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/coulomb.pxd b/src/sage/libs/gsl/coulomb.pxd
index 7941dff093d..7b6d8be0640 100644
--- a/src/sage/libs/gsl/coulomb.pxd
+++ b/src/sage/libs/gsl/coulomb.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/coupling.pxd b/src/sage/libs/gsl/coupling.pxd
index cd5f4d301a6..29a3fc89ce9 100644
--- a/src/sage/libs/gsl/coupling.pxd
+++ b/src/sage/libs/gsl/coupling.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/dawson.pxd b/src/sage/libs/gsl/dawson.pxd
index 9eccc6c4485..553527d588a 100644
--- a/src/sage/libs/gsl/dawson.pxd
+++ b/src/sage/libs/gsl/dawson.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/debye.pxd b/src/sage/libs/gsl/debye.pxd
index ca6d5722e56..07273be89a6 100644
--- a/src/sage/libs/gsl/debye.pxd
+++ b/src/sage/libs/gsl/debye.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/dilog.pxd b/src/sage/libs/gsl/dilog.pxd
index 30f633dd5d2..3af4655c653 100644
--- a/src/sage/libs/gsl/dilog.pxd
+++ b/src/sage/libs/gsl/dilog.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/eigen.pxd b/src/sage/libs/gsl/eigen.pxd
index a0568b1f464..11f849b3715 100644
--- a/src/sage/libs/gsl/eigen.pxd
+++ b/src/sage/libs/gsl/eigen.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/elementary.pxd b/src/sage/libs/gsl/elementary.pxd
index 66e3d39b1e9..da6f0dcae56 100644
--- a/src/sage/libs/gsl/elementary.pxd
+++ b/src/sage/libs/gsl/elementary.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/ellint.pxd b/src/sage/libs/gsl/ellint.pxd
index 2c6cdfb9662..49bda769ce4 100644
--- a/src/sage/libs/gsl/ellint.pxd
+++ b/src/sage/libs/gsl/ellint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/elljac.pxd b/src/sage/libs/gsl/elljac.pxd
index b343222e1a0..ace72b4ec73 100644
--- a/src/sage/libs/gsl/elljac.pxd
+++ b/src/sage/libs/gsl/elljac.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/erf.pxd b/src/sage/libs/gsl/erf.pxd
index 3035944ae47..836629ec3f5 100644
--- a/src/sage/libs/gsl/erf.pxd
+++ b/src/sage/libs/gsl/erf.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/errno.pxd b/src/sage/libs/gsl/errno.pxd
index 02d599289fd..d273be21303 100644
--- a/src/sage/libs/gsl/errno.pxd
+++ b/src/sage/libs/gsl/errno.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/exp.pxd b/src/sage/libs/gsl/exp.pxd
index 875f5564053..9c47c1a8237 100644
--- a/src/sage/libs/gsl/exp.pxd
+++ b/src/sage/libs/gsl/exp.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/expint.pxd b/src/sage/libs/gsl/expint.pxd
index 66e2e7b2091..5bb6c70cf52 100644
--- a/src/sage/libs/gsl/expint.pxd
+++ b/src/sage/libs/gsl/expint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/fermi_dirac.pxd b/src/sage/libs/gsl/fermi_dirac.pxd
index 367fe60f293..af5ca2d2ec7 100644
--- a/src/sage/libs/gsl/fermi_dirac.pxd
+++ b/src/sage/libs/gsl/fermi_dirac.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/fft.pxd b/src/sage/libs/gsl/fft.pxd
index 8d0bbff58c1..d798b153755 100644
--- a/src/sage/libs/gsl/fft.pxd
+++ b/src/sage/libs/gsl/fft.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/fit.pxd b/src/sage/libs/gsl/fit.pxd
index 7a052d157dd..ca20f893822 100644
--- a/src/sage/libs/gsl/fit.pxd
+++ b/src/sage/libs/gsl/fit.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/gamma.pxd b/src/sage/libs/gsl/gamma.pxd
index 59bcced37be..aae7e4228dc 100644
--- a/src/sage/libs/gsl/gamma.pxd
+++ b/src/sage/libs/gsl/gamma.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/gegenbauer.pxd b/src/sage/libs/gsl/gegenbauer.pxd
index 8b3c802a9b9..b9affccfb27 100644
--- a/src/sage/libs/gsl/gegenbauer.pxd
+++ b/src/sage/libs/gsl/gegenbauer.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/histogram.pxd b/src/sage/libs/gsl/histogram.pxd
index 6e83a5e48a8..7f504a71b41 100644
--- a/src/sage/libs/gsl/histogram.pxd
+++ b/src/sage/libs/gsl/histogram.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/hyperg.pxd b/src/sage/libs/gsl/hyperg.pxd
index 3e85ebfb0e4..e80953d372c 100644
--- a/src/sage/libs/gsl/hyperg.pxd
+++ b/src/sage/libs/gsl/hyperg.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/integration.pxd b/src/sage/libs/gsl/integration.pxd
index 0a584a90ecd..8542bf36b56 100644
--- a/src/sage/libs/gsl/integration.pxd
+++ b/src/sage/libs/gsl/integration.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/interp.pxd b/src/sage/libs/gsl/interp.pxd
index c64fa0bd4f7..cea79d3f8ad 100644
--- a/src/sage/libs/gsl/interp.pxd
+++ b/src/sage/libs/gsl/interp.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/laguerre.pxd b/src/sage/libs/gsl/laguerre.pxd
index 14a2bcbee83..c7505bc7475 100644
--- a/src/sage/libs/gsl/laguerre.pxd
+++ b/src/sage/libs/gsl/laguerre.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/lambert.pxd b/src/sage/libs/gsl/lambert.pxd
index e30e41f0bd9..850279a8c36 100644
--- a/src/sage/libs/gsl/lambert.pxd
+++ b/src/sage/libs/gsl/lambert.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/legendre.pxd b/src/sage/libs/gsl/legendre.pxd
index f9a69910bc2..62a61a9cf63 100644
--- a/src/sage/libs/gsl/legendre.pxd
+++ b/src/sage/libs/gsl/legendre.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/linalg.pxd b/src/sage/libs/gsl/linalg.pxd
index 389ec2e7997..38075323f51 100644
--- a/src/sage/libs/gsl/linalg.pxd
+++ b/src/sage/libs/gsl/linalg.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/log.pxd b/src/sage/libs/gsl/log.pxd
index 35798b2b150..64877bf51a7 100644
--- a/src/sage/libs/gsl/log.pxd
+++ b/src/sage/libs/gsl/log.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/math.pxd b/src/sage/libs/gsl/math.pxd
index 0f0a27a58e1..6e71fca54bf 100644
--- a/src/sage/libs/gsl/math.pxd
+++ b/src/sage/libs/gsl/math.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/matrix.pxd b/src/sage/libs/gsl/matrix.pxd
index e1e2009b609..4e5ab16ed79 100644
--- a/src/sage/libs/gsl/matrix.pxd
+++ b/src/sage/libs/gsl/matrix.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/matrix_complex.pxd b/src/sage/libs/gsl/matrix_complex.pxd
index 6cbc983a45e..ea894c74893 100644
--- a/src/sage/libs/gsl/matrix_complex.pxd
+++ b/src/sage/libs/gsl/matrix_complex.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/min.pxd b/src/sage/libs/gsl/min.pxd
index 25a9770eba0..67982bde2b5 100644
--- a/src/sage/libs/gsl/min.pxd
+++ b/src/sage/libs/gsl/min.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/monte.pxd b/src/sage/libs/gsl/monte.pxd
index 92142abdbcc..8d9ba8cd657 100644
--- a/src/sage/libs/gsl/monte.pxd
+++ b/src/sage/libs/gsl/monte.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/ntuple.pxd b/src/sage/libs/gsl/ntuple.pxd
index c47ab38d289..c94f3a2211f 100644
--- a/src/sage/libs/gsl/ntuple.pxd
+++ b/src/sage/libs/gsl/ntuple.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/odeiv.pxd b/src/sage/libs/gsl/odeiv.pxd
index 25924ff86aa..3ad312bb68a 100644
--- a/src/sage/libs/gsl/odeiv.pxd
+++ b/src/sage/libs/gsl/odeiv.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/permutation.pxd b/src/sage/libs/gsl/permutation.pxd
index 49b10e0611d..443dffa4c4b 100644
--- a/src/sage/libs/gsl/permutation.pxd
+++ b/src/sage/libs/gsl/permutation.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/poly.pxd b/src/sage/libs/gsl/poly.pxd
index ae172cbf07f..8ad7eb86ed2 100644
--- a/src/sage/libs/gsl/poly.pxd
+++ b/src/sage/libs/gsl/poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/pow_int.pxd b/src/sage/libs/gsl/pow_int.pxd
index af5de0263b8..155f1bc0629 100644
--- a/src/sage/libs/gsl/pow_int.pxd
+++ b/src/sage/libs/gsl/pow_int.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/psi.pxd b/src/sage/libs/gsl/psi.pxd
index fd33ccd636c..885f4001489 100644
--- a/src/sage/libs/gsl/psi.pxd
+++ b/src/sage/libs/gsl/psi.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/qrng.pxd b/src/sage/libs/gsl/qrng.pxd
index 24f0702f6c1..6987fb3f5e7 100644
--- a/src/sage/libs/gsl/qrng.pxd
+++ b/src/sage/libs/gsl/qrng.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/random.pxd b/src/sage/libs/gsl/random.pxd
index 21f531265bc..89f792cdbb1 100644
--- a/src/sage/libs/gsl/random.pxd
+++ b/src/sage/libs/gsl/random.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/rng.pxd b/src/sage/libs/gsl/rng.pxd
index b1ab233715e..0b976df3586 100644
--- a/src/sage/libs/gsl/rng.pxd
+++ b/src/sage/libs/gsl/rng.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/roots.pxd b/src/sage/libs/gsl/roots.pxd
index 2bf1ccf9403..4380949a3ba 100644
--- a/src/sage/libs/gsl/roots.pxd
+++ b/src/sage/libs/gsl/roots.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/sort.pxd b/src/sage/libs/gsl/sort.pxd
index 68493a8a1a8..bc1932a57db 100644
--- a/src/sage/libs/gsl/sort.pxd
+++ b/src/sage/libs/gsl/sort.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/statistics.pxd b/src/sage/libs/gsl/statistics.pxd
index 5f5dcaa426e..62ef3dbde6c 100644
--- a/src/sage/libs/gsl/statistics.pxd
+++ b/src/sage/libs/gsl/statistics.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/sum.pxd b/src/sage/libs/gsl/sum.pxd
index 83966b8eb34..3a75e8fc666 100644
--- a/src/sage/libs/gsl/sum.pxd
+++ b/src/sage/libs/gsl/sum.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/synchrotron.pxd b/src/sage/libs/gsl/synchrotron.pxd
index a02c9964fc2..fd642e85113 100644
--- a/src/sage/libs/gsl/synchrotron.pxd
+++ b/src/sage/libs/gsl/synchrotron.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/transport.pxd b/src/sage/libs/gsl/transport.pxd
index 6700511a9c9..86691a48b05 100644
--- a/src/sage/libs/gsl/transport.pxd
+++ b/src/sage/libs/gsl/transport.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/trig.pxd b/src/sage/libs/gsl/trig.pxd
index c9da72206af..b7ebe9e14f2 100644
--- a/src/sage/libs/gsl/trig.pxd
+++ b/src/sage/libs/gsl/trig.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/types.pxd b/src/sage/libs/gsl/types.pxd
index 7076e2f8861..00ffe3fb4ea 100644
--- a/src/sage/libs/gsl/types.pxd
+++ b/src/sage/libs/gsl/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: include_dirs = GSL_INCDIR
from libc.stdio cimport FILE
diff --git a/src/sage/libs/gsl/vector.pxd b/src/sage/libs/gsl/vector.pxd
index 30960a2d1ef..a00611fced0 100644
--- a/src/sage/libs/gsl/vector.pxd
+++ b/src/sage/libs/gsl/vector.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/vector_complex.pxd b/src/sage/libs/gsl/vector_complex.pxd
index a784c32880a..7629f946720 100644
--- a/src/sage/libs/gsl/vector_complex.pxd
+++ b/src/sage/libs/gsl/vector_complex.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/wavelet.pxd b/src/sage/libs/gsl/wavelet.pxd
index c74052e8bfc..2f94e13e6d9 100644
--- a/src/sage/libs/gsl/wavelet.pxd
+++ b/src/sage/libs/gsl/wavelet.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/gsl/zeta.pxd b/src/sage/libs/gsl/zeta.pxd
index 9b6edbd74b9..b89442a28fa 100644
--- a/src/sage/libs/gsl/zeta.pxd
+++ b/src/sage/libs/gsl/zeta.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = GSL_LIBRARIES
# distutils: library_dirs = GSL_LIBDIR
# distutils: include_dirs = GSL_INCDIR
diff --git a/src/sage/libs/homfly.pyx b/src/sage/libs/homfly.pyx
index 550c5f02a65..1cc3f591f8a 100644
--- a/src/sage/libs/homfly.pyx
+++ b/src/sage/libs/homfly.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-homfly
# distutils: libraries = homfly gc
r"""
Cython wrapper for libhomfly library
diff --git a/src/sage/libs/iml.pxd b/src/sage/libs/iml.pxd
index 274a05f4313..9796c931db4 100644
--- a/src/sage/libs/iml.pxd
+++ b/src/sage/libs/iml.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from sage.libs.gmp.types cimport mpz_t
cdef extern from "iml.h":
@@ -6,4 +7,4 @@ cdef extern from "iml.h":
RightSolu
cdef long nullspaceMP(long n, long m, const mpz_t *A, mpz_t * *mp_N_pass)
- cdef void nonsingSolvLlhsMM(SOLU_POS solupos, long n, long m, mpz_t *mp_A, mpz_t *mp_B, mpz_t *mp_N, mpz_t mp_D)
\ No newline at end of file
+ cdef void nonsingSolvLlhsMM(SOLU_POS solupos, long n, long m, mpz_t *mp_A, mpz_t *mp_B, mpz_t *mp_N, mpz_t mp_D)
diff --git a/src/sage/libs/lcalc/__init__.py b/src/sage/libs/lcalc/__init__.py
index e69de29bb2d..35fac988d13 100644
--- a/src/sage/libs/lcalc/__init__.py
+++ b/src/sage/libs/lcalc/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-lcalc
diff --git a/src/sage/libs/lcalc/lcalc_Lfunction.pxd b/src/sage/libs/lcalc/lcalc_Lfunction.pxd
index 715fa46bba0..1da49c00755 100644
--- a/src/sage/libs/lcalc/lcalc_Lfunction.pxd
+++ b/src/sage/libs/lcalc/lcalc_Lfunction.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-lcalc
cdef extern from "lcalc_sage.h":
ctypedef struct doublevec "std::vector":
int (*size)()
diff --git a/src/sage/libs/lcalc/lcalc_Lfunction.pyx b/src/sage/libs/lcalc/lcalc_Lfunction.pyx
index 2bb8fb200ea..88d9ecfd987 100644
--- a/src/sage/libs/lcalc/lcalc_Lfunction.pyx
+++ b/src/sage/libs/lcalc/lcalc_Lfunction.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-lcalc
# distutils: libraries = m NTL_LIBRARIES Lfunction
# distutils: extra_compile_args = NTL_CFLAGS -O3 -ffast-math
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/libecm.pyx b/src/sage/libs/libecm.pyx
index 90b98bcaa1e..a9c52bde1dd 100644
--- a/src/sage/libs/libecm.pyx
+++ b/src/sage/libs/libecm.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-libecm
# distutils: libraries = ecm
# distutils: extra_link_args = LINUX_NOEXECSTACK
r"""
diff --git a/src/sage/libs/linbox/__init__.py b/src/sage/libs/linbox/__init__.py
index e69de29bb2d..d3fe8dc3de9 100644
--- a/src/sage/libs/linbox/__init__.py
+++ b/src/sage/libs/linbox/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-linbox
diff --git a/src/sage/libs/linbox/conversion.pxd b/src/sage/libs/linbox/conversion.pxd
index a443431adbb..fde69391470 100644
--- a/src/sage/libs/linbox/conversion.pxd
+++ b/src/sage/libs/linbox/conversion.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
r"""
Inline conversions between LinBox and Sage
diff --git a/src/sage/libs/linbox/fflas.pxd b/src/sage/libs/linbox/fflas.pxd
index d5b077cf045..f962d26b000 100644
--- a/src/sage/libs/linbox/fflas.pxd
+++ b/src/sage/libs/linbox/fflas.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# Issue #33153: fflas-ffpack-2.4.3 is missing a return value in one of
# its functions and runs afoul of -Werror=return-type. Compounding the
# problem on openSUSE tumbleweed, the CFLAGS in python's sysconfig
diff --git a/src/sage/libs/linbox/givaro.pxd b/src/sage/libs/linbox/givaro.pxd
index e6b5a06c3b0..4a1fa3beebc 100644
--- a/src/sage/libs/linbox/givaro.pxd
+++ b/src/sage/libs/linbox/givaro.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: extra_compile_args = GIVARO_CFLAGS
# distutils: include_dirs = GIVARO_INCDIR
# distutils: libraries = GIVARO_LIBRARIES FFLASFFPACK_LIBRARIES
diff --git a/src/sage/libs/linbox/linbox.pxd b/src/sage/libs/linbox/linbox.pxd
index 6792e260a34..e4064118461 100644
--- a/src/sage/libs/linbox/linbox.pxd
+++ b/src/sage/libs/linbox/linbox.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: extra_compile_args = LINBOX_CFLAGS
# distutils: include_dirs = LINBOX_INCDIR
# distutils: libraries = LINBOX_LIBRARIES
diff --git a/src/sage/libs/linbox/linbox_flint_interface.pxd b/src/sage/libs/linbox/linbox_flint_interface.pxd
index f47d5386a01..72cf727e886 100644
--- a/src/sage/libs/linbox/linbox_flint_interface.pxd
+++ b/src/sage/libs/linbox/linbox_flint_interface.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = LINBOX_LIBRARIES
# distutils: library_dirs = LINBOX_LIBDIR
# distutils: extra_link_args = LINBOX_LIBEXTRA
diff --git a/src/sage/libs/linbox/linbox_flint_interface.pyx b/src/sage/libs/linbox/linbox_flint_interface.pyx
index ed3fa183032..e508685c9ca 100644
--- a/src/sage/libs/linbox/linbox_flint_interface.pyx
+++ b/src/sage/libs/linbox/linbox_flint_interface.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
r"""
Interface between flint matrices and linbox
diff --git a/src/sage/libs/linkages/__init__.py b/src/sage/libs/linkages/__init__.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/libs/linkages/__init__.py
+++ b/src/sage/libs/linkages/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/libs/linkages/padics/API.pxi b/src/sage/libs/linkages/padics/API.pxi
index ec69c5bbaa3..bfc8583dbbd 100644
--- a/src/sage/libs/linkages/padics/API.pxi
+++ b/src/sage/libs/linkages/padics/API.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file defines the common API for p-adic elements.
Elements using different precision models (e.g. capped relative,
diff --git a/src/sage/libs/linkages/padics/Polynomial_ram.pxi b/src/sage/libs/linkages/padics/Polynomial_ram.pxi
index e0584ecb8ad..e02be61091c 100644
--- a/src/sage/libs/linkages/padics/Polynomial_ram.pxi
+++ b/src/sage/libs/linkages/padics/Polynomial_ram.pxi
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
This linkage file implements the padics API for ramified extensions using Sage
Polynomials.
diff --git a/src/sage/libs/linkages/padics/Polynomial_shared.pxi b/src/sage/libs/linkages/padics/Polynomial_shared.pxi
index 367bbc2f33d..80d58c3fd52 100644
--- a/src/sage/libs/linkages/padics/Polynomial_shared.pxi
+++ b/src/sage/libs/linkages/padics/Polynomial_shared.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
This linkage file implements the padics API using Sage Polynomials.
diff --git a/src/sage/libs/linkages/padics/__init__.py b/src/sage/libs/linkages/padics/__init__.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/libs/linkages/padics/__init__.py
+++ b/src/sage/libs/linkages/padics/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/libs/linkages/padics/fmpz_poly_unram.pxi b/src/sage/libs/linkages/padics/fmpz_poly_unram.pxi
index 2171b426911..38e49a8d8fe 100644
--- a/src/sage/libs/linkages/padics/fmpz_poly_unram.pxi
+++ b/src/sage/libs/linkages/padics/fmpz_poly_unram.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This linkage file implements the API for unramified extensions of the padics
using FLINT's fmpz_poly_t.
diff --git a/src/sage/libs/linkages/padics/mpz.pxi b/src/sage/libs/linkages/padics/mpz.pxi
index 3a555e441dc..e122fee1962 100644
--- a/src/sage/libs/linkages/padics/mpz.pxi
+++ b/src/sage/libs/linkages/padics/mpz.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This linkage file implements the padics API using MPIR mpz_t
multiprecision integers.
diff --git a/src/sage/libs/linkages/padics/relaxed/API.pxi b/src/sage/libs/linkages/padics/relaxed/API.pxi
index 4e9ea075bb2..8ebfda5e115 100644
--- a/src/sage/libs/linkages/padics/relaxed/API.pxi
+++ b/src/sage/libs/linkages/padics/relaxed/API.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
This file defines the common API for relaxed `p`-adic numbers.
diff --git a/src/sage/libs/linkages/padics/relaxed/__init__.py b/src/sage/libs/linkages/padics/relaxed/__init__.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/libs/linkages/padics/relaxed/__init__.py
+++ b/src/sage/libs/linkages/padics/relaxed/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/libs/linkages/padics/relaxed/flint.pxi b/src/sage/libs/linkages/padics/relaxed/flint.pxi
index 7085fd76ac8..31867021907 100644
--- a/src/sage/libs/linkages/padics/relaxed/flint.pxi
+++ b/src/sage/libs/linkages/padics/relaxed/flint.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
This linkage file implements the relaxed padics API using flint.
diff --git a/src/sage/libs/linkages/padics/unram_shared.pxi b/src/sage/libs/linkages/padics/unram_shared.pxi
index 7ffbebc5f52..c82f9be18ec 100644
--- a/src/sage/libs/linkages/padics/unram_shared.pxi
+++ b/src/sage/libs/linkages/padics/unram_shared.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
cimport cython
@cython.binding(True)
diff --git a/src/sage/libs/lrcalc/__init__.py b/src/sage/libs/lrcalc/__init__.py
index e69de29bb2d..28c48d66b20 100644
--- a/src/sage/libs/lrcalc/__init__.py
+++ b/src/sage/libs/lrcalc/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-combinat
diff --git a/src/sage/libs/lrcalc/lrcalc.py b/src/sage/libs/lrcalc/lrcalc.py
index cd9248f59d9..ec5942a5789 100644
--- a/src/sage/libs/lrcalc/lrcalc.py
+++ b/src/sage/libs/lrcalc/lrcalc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
An interface to Anders Buch's Littlewood-Richardson Calculator ``lrcalc``
diff --git a/src/sage/libs/m4ri.pxd b/src/sage/libs/m4ri.pxd
index a9c6c792c05..5a55204b7c4 100644
--- a/src/sage/libs/m4ri.pxd
+++ b/src/sage/libs/m4ri.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: extra_compile_args = -std=c++11
# distutils: language = c++
diff --git a/src/sage/libs/m4rie.pxd b/src/sage/libs/m4rie.pxd
index 4bc99aba4d7..f769003b8f5 100644
--- a/src/sage/libs/m4rie.pxd
+++ b/src/sage/libs/m4rie.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
##############################################################################
# Copyright (C) 2010 Martin Albrecht
# Distributed under the terms of the GNU General Public License (GPL)
diff --git a/src/sage/libs/mpc/__init__.pxd b/src/sage/libs/mpc/__init__.pxd
index 4930a636c41..7f27ba719e8 100644
--- a/src/sage/libs/mpc/__init__.pxd
+++ b/src/sage/libs/mpc/__init__.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = gmp mpfr mpc
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/mpc/types.pxd b/src/sage/libs/mpc/types.pxd
index 72565c08630..2221e931726 100644
--- a/src/sage/libs/mpc/types.pxd
+++ b/src/sage/libs/mpc/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.mpfr.types cimport mpfr_t
cdef extern from "mpc.h":
diff --git a/src/sage/libs/mpfi/__init__.pxd b/src/sage/libs/mpfi/__init__.pxd
index b55a5129d18..1c83243299e 100644
--- a/src/sage/libs/mpfi/__init__.pxd
+++ b/src/sage/libs/mpfi/__init__.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = gmp mpfr mpfi
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/mpfi/types.pxd b/src/sage/libs/mpfi/types.pxd
index 073a2e719ac..efc8552675e 100644
--- a/src/sage/libs/mpfi/types.pxd
+++ b/src/sage/libs/mpfi/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.mpfr.types cimport __mpfr_struct
cdef extern from "mpfi.h":
diff --git a/src/sage/libs/mpfr/__init__.pxd b/src/sage/libs/mpfr/__init__.pxd
index facac9aa6c7..a6c222d600f 100644
--- a/src/sage/libs/mpfr/__init__.pxd
+++ b/src/sage/libs/mpfr/__init__.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: libraries = gmp mpfr
from sage.libs.gmp.types cimport *
diff --git a/src/sage/libs/mpfr/types.pxd b/src/sage/libs/mpfr/types.pxd
index 45f8a161361..9cfbc0e96fd 100644
--- a/src/sage/libs/mpfr/types.pxd
+++ b/src/sage/libs/mpfr/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gmp.types cimport mp_limb_t
cdef extern from "mpfr.h":
diff --git a/src/sage/libs/mpmath/all.py b/src/sage/libs/mpmath/all.py
index cae40f79314..87a32ed5014 100644
--- a/src/sage/libs/mpmath/all.py
+++ b/src/sage/libs/mpmath/all.py
@@ -1,7 +1,8 @@
+# sage_setup: distribution = sagemath-mpmath
import mpmath
# Patch mpmath to use Cythonized functions
-from . import utils as _utils
+from sage.libs.mpmath import utils as _utils
# Also import internal functions
from mpmath.libmp import *
@@ -10,16 +11,17 @@
from mpmath import *
# Utilities
-from .utils import call, mpmath_to_sage, sage_to_mpmath
+from sage.libs.mpmath.utils import call, mpmath_to_sage, sage_to_mpmath
# Use mpmath internal functions for constants, to avoid unnecessary overhead
_constants_funcs = {
- 'glaisher': glaisher_fixed,
- 'khinchin': khinchin_fixed,
- 'twinprime': twinprime_fixed,
- 'mertens': mertens_fixed
+ 'glaisher': glaisher_fixed,
+ 'khinchin': khinchin_fixed,
+ 'twinprime': twinprime_fixed,
+ 'mertens': mertens_fixed
}
+
def eval_constant(name, ring):
prec = ring.precision() + 20
return ring(_constants_funcs[name](prec)) >> prec
diff --git a/src/sage/libs/mpmath/ext_impl.pxd b/src/sage/libs/mpmath/ext_impl.pxd
index 586d10d17f2..d4ff28112f2 100644
--- a/src/sage/libs/mpmath/ext_impl.pxd
+++ b/src/sage/libs/mpmath/ext_impl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-mpmath
from sage.libs.gmp.all cimport mpz_t
ctypedef struct MPopts:
diff --git a/src/sage/libs/mpmath/ext_impl.pyx b/src/sage/libs/mpmath/ext_impl.pyx
index 0d57c8f2882..d9ed3bda4bb 100644
--- a/src/sage/libs/mpmath/ext_impl.pyx
+++ b/src/sage/libs/mpmath/ext_impl.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-mpmath
"""
This module provides the core implementation of multiprecision
floating-point arithmetic. Operations are done in-place.
diff --git a/src/sage/libs/mpmath/ext_libmp.pyx b/src/sage/libs/mpmath/ext_libmp.pyx
index 10d1b32eb36..d59d1d268cd 100644
--- a/src/sage/libs/mpmath/ext_libmp.pyx
+++ b/src/sage/libs/mpmath/ext_libmp.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-mpmath
"""
Faster versions of some key functions in mpmath.libmp
"""
diff --git a/src/sage/libs/mpmath/ext_main.pxd b/src/sage/libs/mpmath/ext_main.pxd
index 8a3bf740b0e..ea3f7bba6d4 100644
--- a/src/sage/libs/mpmath/ext_main.pxd
+++ b/src/sage/libs/mpmath/ext_main.pxd
@@ -1 +1,2 @@
+# sage_setup: distribution = sagemath-mpmath
from sage.libs.mpmath.ext_impl cimport *
diff --git a/src/sage/libs/mpmath/ext_main.pyx b/src/sage/libs/mpmath/ext_main.pyx
index 36a035f7570..19462b1d21e 100644
--- a/src/sage/libs/mpmath/ext_main.pyx
+++ b/src/sage/libs/mpmath/ext_main.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-mpmath
"""
mpmath floating-point numbers
diff --git a/src/sage/libs/mpmath/utils.pyx b/src/sage/libs/mpmath/utils.pyx
index b7a4f532823..7d98a5fd324 100644
--- a/src/sage/libs/mpmath/utils.pyx
+++ b/src/sage/libs/mpmath/utils.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-mpmath
"""
Utilities for Sage-mpmath interaction
diff --git a/src/sage/libs/ntl/GF2.pxd b/src/sage/libs/ntl/GF2.pxd
index 5be7f496766..1d5d9ea49d7 100644
--- a/src/sage/libs/ntl/GF2.pxd
+++ b/src/sage/libs/ntl/GF2.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2_c
diff --git a/src/sage/libs/ntl/GF2E.pxd b/src/sage/libs/ntl/GF2E.pxd
index 5a72efec6a4..901df87a4ef 100644
--- a/src/sage/libs/ntl/GF2E.pxd
+++ b/src/sage/libs/ntl/GF2E.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2E_c, GF2X_c, GF2_c, GF2XModulus_c, ZZ_c
diff --git a/src/sage/libs/ntl/GF2EX.pxd b/src/sage/libs/ntl/GF2EX.pxd
index 4a0df45c9f1..4648aaa7429 100644
--- a/src/sage/libs/ntl/GF2EX.pxd
+++ b/src/sage/libs/ntl/GF2EX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2EX_c
diff --git a/src/sage/libs/ntl/GF2X.pxd b/src/sage/libs/ntl/GF2X.pxd
index 9342f63244c..e3da7f38126 100644
--- a/src/sage/libs/ntl/GF2X.pxd
+++ b/src/sage/libs/ntl/GF2X.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2X_c, GF2_c, GF2XModulus_c, vec_GF2_c, ZZ_c
diff --git a/src/sage/libs/ntl/ZZ.pxd b/src/sage/libs/ntl/ZZ.pxd
index fc8901fc31a..faf139e6848 100644
--- a/src/sage/libs/ntl/ZZ.pxd
+++ b/src/sage/libs/ntl/ZZ.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport ZZ_c
diff --git a/src/sage/libs/ntl/ZZX.pxd b/src/sage/libs/ntl/ZZX.pxd
index bc2780e3a83..e5511934cca 100644
--- a/src/sage/libs/ntl/ZZX.pxd
+++ b/src/sage/libs/ntl/ZZX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.gmp.types cimport mpz_t
diff --git a/src/sage/libs/ntl/ZZ_p.pxd b/src/sage/libs/ntl/ZZ_p.pxd
index 1d7d95e4007..0611bc4e1b6 100644
--- a/src/sage/libs/ntl/ZZ_p.pxd
+++ b/src/sage/libs/ntl/ZZ_p.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport ZZ_c, ZZ_p_c
diff --git a/src/sage/libs/ntl/ZZ_pE.pxd b/src/sage/libs/ntl/ZZ_pE.pxd
index bdfb04cb783..f8842659911 100644
--- a/src/sage/libs/ntl/ZZ_pE.pxd
+++ b/src/sage/libs/ntl/ZZ_pE.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport ZZ_c, ZZ_p_c, ZZ_pX_c, ZZ_pE_c
diff --git a/src/sage/libs/ntl/ZZ_pEX.pxd b/src/sage/libs/ntl/ZZ_pEX.pxd
index 78be3ee13ea..e5f2b12d62e 100644
--- a/src/sage/libs/ntl/ZZ_pEX.pxd
+++ b/src/sage/libs/ntl/ZZ_pEX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport (ZZ_c, ZZ_p_c, ZZ_pContext_c, ZZ_pE_c, vec_ZZ_p_c,
diff --git a/src/sage/libs/ntl/ZZ_pX.pxd b/src/sage/libs/ntl/ZZ_pX.pxd
index 8c9f609f1cd..d54625fcebf 100644
--- a/src/sage/libs/ntl/ZZ_pX.pxd
+++ b/src/sage/libs/ntl/ZZ_pX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport (ZZ_c, ZZX_c, ZZ_p_c, vec_ZZ_p_c, ZZ_pContext_c,
diff --git a/src/sage/libs/ntl/__init__.py b/src/sage/libs/ntl/__init__.py
index 0ab0a2c43e7..ba2e4477f9f 100644
--- a/src/sage/libs/ntl/__init__.py
+++ b/src/sage/libs/ntl/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.error import setup_NTL_error_callback
setup_NTL_error_callback()
diff --git a/src/sage/libs/ntl/all.py b/src/sage/libs/ntl/all.py
index e9d4271879a..ade13735e1f 100644
--- a/src/sage/libs/ntl/all.py
+++ b/src/sage/libs/ntl/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
r"""
Victor Shoup's NTL C++ Library
@@ -29,12 +30,12 @@
from sage.libs.ntl.ntl_ZZ_pContext import ntl_ZZ_pContext as ZZ_pContext
from sage.libs.ntl.ntl_ZZ_p import (
- ntl_ZZ_p as ZZ_p,
- ntl_ZZ_p_random_element as ZZ_p_random )
+ ntl_ZZ_p as ZZ_p,
+ ntl_ZZ_p_random_element as ZZ_p_random)
from sage.libs.ntl.ntl_ZZX import (
- ntl_ZZX as ZZX,
- zero_ZZX, one_ZZX )
+ ntl_ZZX as ZZX,
+ zero_ZZX, one_ZZX)
from sage.libs.ntl.ntl_ZZ_pX import ntl_ZZ_pX as ZZ_pX
diff --git a/src/sage/libs/ntl/conversion.pxd b/src/sage/libs/ntl/conversion.pxd
index e46cc66284e..a24de983a12 100644
--- a/src/sage/libs/ntl/conversion.pxd
+++ b/src/sage/libs/ntl/conversion.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
r"""
Inline conversions between NTL and Sage
diff --git a/src/sage/libs/ntl/convert.pxd b/src/sage/libs/ntl/convert.pxd
index 58420abb94c..42d2f01dc1b 100644
--- a/src/sage/libs/ntl/convert.pxd
+++ b/src/sage/libs/ntl/convert.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_c
from sage.libs.gmp.types cimport mpz_t, mpz_srcptr
diff --git a/src/sage/libs/ntl/convert.pyx b/src/sage/libs/ntl/convert.pyx
index 5924c9f2e79..3002ce3061d 100644
--- a/src/sage/libs/ntl/convert.pyx
+++ b/src/sage/libs/ntl/convert.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/libs/ntl/decl.pxi b/src/sage/libs/ntl/decl.pxi
index ae4eb5500f5..79b9592d199 100644
--- a/src/sage/libs/ntl/decl.pxi
+++ b/src/sage/libs/ntl/decl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport *
from sage.libs.ntl.ZZ cimport *
from sage.libs.ntl.ZZ_pX cimport *
diff --git a/src/sage/libs/ntl/error.pyx b/src/sage/libs/ntl/error.pyx
index c729cd4c1fb..54693d1c87f 100644
--- a/src/sage/libs/ntl/error.pyx
+++ b/src/sage/libs/ntl/error.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = ntl gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/lzz_p.pxd b/src/sage/libs/ntl/lzz_p.pxd
index 14d81bc8ab0..3d30b2f38c4 100644
--- a/src/sage/libs/ntl/lzz_p.pxd
+++ b/src/sage/libs/ntl/lzz_p.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport zz_p_c
diff --git a/src/sage/libs/ntl/lzz_pX.pxd b/src/sage/libs/ntl/lzz_pX.pxd
index 72905fd1d54..e747309ceb9 100644
--- a/src/sage/libs/ntl/lzz_pX.pxd
+++ b/src/sage/libs/ntl/lzz_pX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from sage.libs.ntl.types cimport ZZ_c, zz_p_c, zz_pX_c, zz_pX_Modulus_c
diff --git a/src/sage/libs/ntl/mat_GF2.pxd b/src/sage/libs/ntl/mat_GF2.pxd
index db535d800fc..0405a90c646 100644
--- a/src/sage/libs/ntl/mat_GF2.pxd
+++ b/src/sage/libs/ntl/mat_GF2.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport mat_GF2_c, vec_GF2_c, GF2_c
diff --git a/src/sage/libs/ntl/mat_GF2E.pxd b/src/sage/libs/ntl/mat_GF2E.pxd
index e6c3b5fc622..c6d2c615dbd 100644
--- a/src/sage/libs/ntl/mat_GF2E.pxd
+++ b/src/sage/libs/ntl/mat_GF2E.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport mat_GF2E_c, vec_GF2E_c, GF2E_c
diff --git a/src/sage/libs/ntl/mat_ZZ.pxd b/src/sage/libs/ntl/mat_ZZ.pxd
index a676c90fb1b..a33fc2b1a1a 100644
--- a/src/sage/libs/ntl/mat_ZZ.pxd
+++ b/src/sage/libs/ntl/mat_ZZ.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport mat_ZZ_c, ZZ_c, ZZX_c
diff --git a/src/sage/libs/ntl/misc.pxi b/src/sage/libs/ntl/misc.pxi
index e9dcd9807b0..3f6a69149d2 100644
--- a/src/sage/libs/ntl/misc.pxi
+++ b/src/sage/libs/ntl/misc.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
from cysignals.memory cimport sig_free
diff --git a/src/sage/libs/ntl/ntl_GF2.pxd b/src/sage/libs/ntl/ntl_GF2.pxd
index 2be873c950c..1f388a00ff0 100644
--- a/src/sage/libs/ntl/ntl_GF2.pxd
+++ b/src/sage/libs/ntl/ntl_GF2.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2_c
cdef class ntl_GF2():
diff --git a/src/sage/libs/ntl/ntl_GF2.pyx b/src/sage/libs/ntl/ntl_GF2.pyx
index 9d4d8a0b5e4..9933db5ffe9 100644
--- a/src/sage/libs/ntl/ntl_GF2.pyx
+++ b/src/sage/libs/ntl/ntl_GF2.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_GF2E.pxd b/src/sage/libs/ntl/ntl_GF2E.pxd
index c36292c8748..fd3825f9b37 100644
--- a/src/sage/libs/ntl/ntl_GF2E.pxd
+++ b/src/sage/libs/ntl/ntl_GF2E.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2E_c
from sage.libs.ntl.ntl_GF2EContext cimport ntl_GF2EContext_class
diff --git a/src/sage/libs/ntl/ntl_GF2E.pyx b/src/sage/libs/ntl/ntl_GF2E.pyx
index e162f21ddc9..f452aadf609 100644
--- a/src/sage/libs/ntl/ntl_GF2E.pyx
+++ b/src/sage/libs/ntl/ntl_GF2E.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_GF2EContext.pxd b/src/sage/libs/ntl/ntl_GF2EContext.pxd
index 01fc4676e58..c7256683a56 100644
--- a/src/sage/libs/ntl/ntl_GF2EContext.pxd
+++ b/src/sage/libs/ntl/ntl_GF2EContext.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2EContext_c
from sage.libs.ntl.ntl_GF2X cimport ntl_GF2X
diff --git a/src/sage/libs/ntl/ntl_GF2EContext.pyx b/src/sage/libs/ntl/ntl_GF2EContext.pyx
index ad3b08aa9dc..5ee4bbbc249 100644
--- a/src/sage/libs/ntl/ntl_GF2EContext.pyx
+++ b/src/sage/libs/ntl/ntl_GF2EContext.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_GF2EX.pxd b/src/sage/libs/ntl/ntl_GF2EX.pxd
index becd89a9c57..5113ee1f612 100644
--- a/src/sage/libs/ntl/ntl_GF2EX.pxd
+++ b/src/sage/libs/ntl/ntl_GF2EX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2EX_c
from sage.libs.ntl.ntl_GF2EContext cimport ntl_GF2EContext_class
from sage.libs.ntl.ntl_GF2E cimport ntl_GF2E
diff --git a/src/sage/libs/ntl/ntl_GF2EX.pyx b/src/sage/libs/ntl/ntl_GF2EX.pyx
index 0b7beb873df..ecdbba594d0 100644
--- a/src/sage/libs/ntl/ntl_GF2EX.pyx
+++ b/src/sage/libs/ntl/ntl_GF2EX.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_GF2X.pxd b/src/sage/libs/ntl/ntl_GF2X.pxd
index 8d50c9d17d8..f72db7c0404 100644
--- a/src/sage/libs/ntl/ntl_GF2X.pxd
+++ b/src/sage/libs/ntl/ntl_GF2X.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2X_c
cdef class ntl_GF2X():
diff --git a/src/sage/libs/ntl/ntl_GF2X.pyx b/src/sage/libs/ntl/ntl_GF2X.pyx
index 5e6ef736763..57329a65e90 100644
--- a/src/sage/libs/ntl/ntl_GF2X.pyx
+++ b/src/sage/libs/ntl/ntl_GF2X.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_GF2X_linkage.pxi b/src/sage/libs/ntl/ntl_GF2X_linkage.pxi
index 8f5edce14c1..ea29db53969 100644
--- a/src/sage/libs/ntl/ntl_GF2X_linkage.pxi
+++ b/src/sage/libs/ntl/ntl_GF2X_linkage.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
r"""
Linkage for arithmetic with NTL's GF2X elements.
diff --git a/src/sage/libs/ntl/ntl_ZZ.pxd b/src/sage/libs/ntl/ntl_ZZ.pxd
index 2ada3d8398c..bab369973a5 100644
--- a/src/sage/libs/ntl/ntl_ZZ.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_c
cdef class ntl_ZZ():
diff --git a/src/sage/libs/ntl/ntl_ZZ.pyx b/src/sage/libs/ntl/ntl_ZZ.pyx
index 3f4a412a5e1..68d1a0cb4c8 100644
--- a/src/sage/libs/ntl/ntl_ZZ.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZX.pxd b/src/sage/libs/ntl/ntl_ZZX.pxd
index 63e588c1d42..287d3fec8af 100644
--- a/src/sage/libs/ntl/ntl_ZZX.pxd
+++ b/src/sage/libs/ntl/ntl_ZZX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZX_c
cdef class ntl_ZZX():
diff --git a/src/sage/libs/ntl/ntl_ZZX.pyx b/src/sage/libs/ntl/ntl_ZZX.pyx
index 3e23bcd1250..4e142c3cff8 100644
--- a/src/sage/libs/ntl/ntl_ZZX.pyx
+++ b/src/sage/libs/ntl/ntl_ZZX.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZ_p.pxd b/src/sage/libs/ntl/ntl_ZZ_p.pxd
index 8bac6e012e4..9a15f92452c 100644
--- a/src/sage/libs/ntl/ntl_ZZ_p.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ_p.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_p_c
from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
diff --git a/src/sage/libs/ntl/ntl_ZZ_p.pyx b/src/sage/libs/ntl/ntl_ZZ_p.pyx
index f4e84667d2b..c804b8a7f8b 100644
--- a/src/sage/libs/ntl/ntl_ZZ_p.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_p.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZ_pContext.pxd b/src/sage/libs/ntl/ntl_ZZ_pContext.pxd
index 1cab7b77e35..1224b0900b8 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pContext.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ_pContext.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_pContext_c
from sage.libs.ntl.ntl_ZZ cimport ntl_ZZ
from sage.libs.ntl.types cimport ZZ_c
diff --git a/src/sage/libs/ntl/ntl_ZZ_pContext.pyx b/src/sage/libs/ntl/ntl_ZZ_pContext.pyx
index 38f211a5ea1..e8a277f296a 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pContext.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pContext.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZ_pE.pxd b/src/sage/libs/ntl/ntl_ZZ_pE.pxd
index c60eaba4ad5..965b531d702 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pE.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ_pE.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_pE_c
from sage.libs.ntl.ntl_ZZ_pEContext cimport ntl_ZZ_pEContext_class
from sage.libs.ntl.ntl_ZZ_pX cimport ntl_ZZ_pX
diff --git a/src/sage/libs/ntl/ntl_ZZ_pE.pyx b/src/sage/libs/ntl/ntl_ZZ_pE.pyx
index 00644a8bd84..1f202626a43 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pE.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pE.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEContext.pxd b/src/sage/libs/ntl/ntl_ZZ_pEContext.pxd
index 70041817a63..8db9e1e8741 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEContext.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ_pEContext.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_pContext_c, ZZ_pEContext_c
from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
from sage.libs.ntl.ntl_ZZ_pX cimport ntl_ZZ_pX
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx b/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx
index 03ff00f21d4..01a5260fe5e 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pEContext.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEX.pxd b/src/sage/libs/ntl/ntl_ZZ_pEX.pxd
index b56b85519a3..10c3b0a4627 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEX.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ_pEX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_pEX_c
from sage.libs.ntl.ntl_ZZ_pEContext cimport ntl_ZZ_pEContext_class
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEX.pyx b/src/sage/libs/ntl/ntl_ZZ_pEX.pyx
index c12df77c2f0..ea323040d72 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEX.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pEX.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_ZZ_pEX_linkage.pxi b/src/sage/libs/ntl/ntl_ZZ_pEX_linkage.pxi
index 76ec8770f3f..62027822f20 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pEX_linkage.pxi
+++ b/src/sage/libs/ntl/ntl_ZZ_pEX_linkage.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
r"""
Linkage for arithmetic with NTL's ZZ_pEX elements.
diff --git a/src/sage/libs/ntl/ntl_ZZ_pX.pxd b/src/sage/libs/ntl/ntl_ZZ_pX.pxd
index d02596b5128..62b98f25e21 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pX.pxd
+++ b/src/sage/libs/ntl/ntl_ZZ_pX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.ZZ_pX cimport *
from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
diff --git a/src/sage/libs/ntl/ntl_ZZ_pX.pyx b/src/sage/libs/ntl/ntl_ZZ_pX.pyx
index c93d263cb10..5de5ae27c92 100644
--- a/src/sage/libs/ntl/ntl_ZZ_pX.pyx
+++ b/src/sage/libs/ntl/ntl_ZZ_pX.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_lzz_p.pxd b/src/sage/libs/ntl/ntl_lzz_p.pxd
index 6e8c43d8997..dd35d65da88 100644
--- a/src/sage/libs/ntl/ntl_lzz_p.pxd
+++ b/src/sage/libs/ntl/ntl_lzz_p.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.lzz_p cimport *
from sage.libs.ntl.ntl_lzz_pContext cimport ntl_zz_pContext_class
diff --git a/src/sage/libs/ntl/ntl_lzz_p.pyx b/src/sage/libs/ntl/ntl_lzz_p.pyx
index af86b9bcf69..2188192156f 100644
--- a/src/sage/libs/ntl/ntl_lzz_p.pyx
+++ b/src/sage/libs/ntl/ntl_lzz_p.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_lzz_pContext.pxd b/src/sage/libs/ntl/ntl_lzz_pContext.pxd
index 3fd7452197d..075f7dfbfdf 100644
--- a/src/sage/libs/ntl/ntl_lzz_pContext.pxd
+++ b/src/sage/libs/ntl/ntl_lzz_pContext.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport zz_pContext_c
cdef class ntl_zz_pContext_class():
diff --git a/src/sage/libs/ntl/ntl_lzz_pContext.pyx b/src/sage/libs/ntl/ntl_lzz_pContext.pyx
index 2c1c941b9e8..97751af9741 100644
--- a/src/sage/libs/ntl/ntl_lzz_pContext.pyx
+++ b/src/sage/libs/ntl/ntl_lzz_pContext.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_lzz_pX.pxd b/src/sage/libs/ntl/ntl_lzz_pX.pxd
index 3ab79084299..5684627847d 100644
--- a/src/sage/libs/ntl/ntl_lzz_pX.pxd
+++ b/src/sage/libs/ntl/ntl_lzz_pX.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.lzz_p cimport *
from sage.libs.ntl.lzz_pX cimport *
diff --git a/src/sage/libs/ntl/ntl_lzz_pX.pyx b/src/sage/libs/ntl/ntl_lzz_pX.pyx
index 7d19cc55e37..9fc6f22c9d5 100644
--- a/src/sage/libs/ntl/ntl_lzz_pX.pyx
+++ b/src/sage/libs/ntl/ntl_lzz_pX.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_mat_GF2.pxd b/src/sage/libs/ntl/ntl_mat_GF2.pxd
index 5617ef98915..63fdbdd41b9 100644
--- a/src/sage/libs/ntl/ntl_mat_GF2.pxd
+++ b/src/sage/libs/ntl/ntl_mat_GF2.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport mat_GF2_c
from sage.libs.ntl.ntl_GF2 cimport ntl_GF2
diff --git a/src/sage/libs/ntl/ntl_mat_GF2.pyx b/src/sage/libs/ntl/ntl_mat_GF2.pyx
index 318747e9ade..87cc2b56795 100644
--- a/src/sage/libs/ntl/ntl_mat_GF2.pyx
+++ b/src/sage/libs/ntl/ntl_mat_GF2.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_mat_GF2E.pxd b/src/sage/libs/ntl/ntl_mat_GF2E.pxd
index fbb58382368..47748a341b7 100644
--- a/src/sage/libs/ntl/ntl_mat_GF2E.pxd
+++ b/src/sage/libs/ntl/ntl_mat_GF2E.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport mat_GF2E_c
from sage.libs.ntl.ntl_GF2EContext cimport ntl_GF2EContext_class
from sage.libs.ntl.ntl_GF2E cimport ntl_GF2E
diff --git a/src/sage/libs/ntl/ntl_mat_GF2E.pyx b/src/sage/libs/ntl/ntl_mat_GF2E.pyx
index 7ab9b92c020..67875771ea5 100644
--- a/src/sage/libs/ntl/ntl_mat_GF2E.pyx
+++ b/src/sage/libs/ntl/ntl_mat_GF2E.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_mat_ZZ.pxd b/src/sage/libs/ntl/ntl_mat_ZZ.pxd
index 472ef698704..bb51160564a 100644
--- a/src/sage/libs/ntl/ntl_mat_ZZ.pxd
+++ b/src/sage/libs/ntl/ntl_mat_ZZ.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport mat_ZZ_c
cdef class ntl_mat_ZZ():
diff --git a/src/sage/libs/ntl/ntl_mat_ZZ.pyx b/src/sage/libs/ntl/ntl_mat_ZZ.pyx
index ed4e012bb33..89968c7e46f 100644
--- a/src/sage/libs/ntl/ntl_mat_ZZ.pyx
+++ b/src/sage/libs/ntl/ntl_mat_ZZ.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/libs/ntl/ntl_tools.pxd b/src/sage/libs/ntl/ntl_tools.pxd
index 3cb8c0567f2..ae88c987f42 100644
--- a/src/sage/libs/ntl/ntl_tools.pxd
+++ b/src/sage/libs/ntl/ntl_tools.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-ntl
cdef extern from "NTL/tools.h" namespace "NTL":
void (*ErrorMsgCallback)(const char *) except *
diff --git a/src/sage/libs/ntl/types.pxd b/src/sage/libs/ntl/types.pxd
index 22e16968943..ed7f61beddb 100644
--- a/src/sage/libs/ntl/types.pxd
+++ b/src/sage/libs/ntl/types.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: depends = NTL/ZZ.h
cdef extern from "ntlwrap.h":
diff --git a/src/sage/libs/ntl/vec_GF2.pxd b/src/sage/libs/ntl/vec_GF2.pxd
index 81a3736b49f..38d1751410d 100644
--- a/src/sage/libs/ntl/vec_GF2.pxd
+++ b/src/sage/libs/ntl/vec_GF2.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport vec_GF2_c, GF2_c
diff --git a/src/sage/libs/ntl/vec_GF2E.pxd b/src/sage/libs/ntl/vec_GF2E.pxd
index 8e53bad0517..2d0d6436d51 100644
--- a/src/sage/libs/ntl/vec_GF2E.pxd
+++ b/src/sage/libs/ntl/vec_GF2E.pxd
@@ -1 +1,2 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport vec_GF2E_c
diff --git a/src/sage/libs/pari/__init__.py b/src/sage/libs/pari/__init__.py
index 44d159ef3c1..9ece55f0ba3 100644
--- a/src/sage/libs/pari/__init__.py
+++ b/src/sage/libs/pari/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.rings.real_mpfr
"""
Interface between Sage and PARI
diff --git a/src/sage/libs/pari/all.py b/src/sage/libs/pari/all.py
index 8bcf5d827df..dff1eaf985f 100644
--- a/src/sage/libs/pari/all.py
+++ b/src/sage/libs/pari/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen import Gen as pari_gen
from cypari2 import PariError
-from . import pari
+from sage.libs.pari import pari
diff --git a/src/sage/libs/pari/all__sagemath_flint.py b/src/sage/libs/pari/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/pari/convert_flint.pxd b/src/sage/libs/pari/convert_flint.pxd
index c139703b9a5..cce1636463a 100644
--- a/src/sage/libs/pari/convert_flint.pxd
+++ b/src/sage/libs/pari/convert_flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from cypari2.types cimport GEN
from cypari2.gen cimport Gen
from sage.libs.flint.types cimport fmpz_t, fmpz_mat_t, fmpq_t, fmpq_mat_t
diff --git a/src/sage/libs/pari/convert_flint.pyx b/src/sage/libs/pari/convert_flint.pyx
index fe0e4f7648d..59aee3b93f9 100644
--- a/src/sage/libs/pari/convert_flint.pyx
+++ b/src/sage/libs/pari/convert_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Convert PARI objects to/from Flint objects
diff --git a/src/sage/libs/pari/convert_gmp.pxd b/src/sage/libs/pari/convert_gmp.pxd
index 8e984eedce8..3c087f57ec9 100644
--- a/src/sage/libs/pari/convert_gmp.pxd
+++ b/src/sage/libs/pari/convert_gmp.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.types cimport GEN
from cypari2.gen cimport Gen
from sage.libs.gmp.types cimport mpz_t, mpq_t, mpz_ptr, mpq_ptr
diff --git a/src/sage/libs/pari/convert_gmp.pyx b/src/sage/libs/pari/convert_gmp.pyx
index 9162f7d9a27..05e81de8b22 100644
--- a/src/sage/libs/pari/convert_gmp.pyx
+++ b/src/sage/libs/pari/convert_gmp.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Convert PARI objects to/from GMP objects
diff --git a/src/sage/libs/pari/convert_sage.pxd b/src/sage/libs/pari/convert_sage.pxd
index ef80ff4030f..ee45f16fe33 100644
--- a/src/sage/libs/pari/convert_sage.pxd
+++ b/src/sage/libs/pari/convert_sage.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen cimport Gen
from sage.rings.integer cimport Integer
from sage.rings.rational cimport Rational
diff --git a/src/sage/libs/pari/convert_sage.pyx b/src/sage/libs/pari/convert_sage.pyx
index a163dbf2b33..be14c4a8ff0 100644
--- a/src/sage/libs/pari/convert_sage.pyx
+++ b/src/sage/libs/pari/convert_sage.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Convert PARI objects to Sage types
"""
diff --git a/src/sage/libs/pari/convert_sage_complex_double.pxd b/src/sage/libs/pari/convert_sage_complex_double.pxd
index 51299d77759..8511c788eec 100644
--- a/src/sage/libs/pari/convert_sage_complex_double.pxd
+++ b/src/sage/libs/pari/convert_sage_complex_double.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen cimport Gen
from sage.rings.complex_double cimport ComplexDoubleElement
diff --git a/src/sage/libs/pari/convert_sage_complex_double.pyx b/src/sage/libs/pari/convert_sage_complex_double.pyx
index d7d7c5333a1..18ab028ae63 100644
--- a/src/sage/libs/pari/convert_sage_complex_double.pyx
+++ b/src/sage/libs/pari/convert_sage_complex_double.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.rings.complex_double
from cysignals.signals cimport sig_on, sig_off
diff --git a/src/sage/libs/pari/convert_sage_matrix.pyx b/src/sage/libs/pari/convert_sage_matrix.pyx
index 1efcea03e72..d686d2b6164 100644
--- a/src/sage/libs/pari/convert_sage_matrix.pyx
+++ b/src/sage/libs/pari/convert_sage_matrix.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.modules
from cypari2.gen cimport Gen
diff --git a/src/sage/libs/pari/convert_sage_real_double.pxd b/src/sage/libs/pari/convert_sage_real_double.pxd
index 12fa7418e69..d72730f0770 100644
--- a/src/sage/libs/pari/convert_sage_real_double.pxd
+++ b/src/sage/libs/pari/convert_sage_real_double.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen cimport Gen
from sage.rings.real_double cimport RealDoubleElement
diff --git a/src/sage/libs/pari/convert_sage_real_double.pyx b/src/sage/libs/pari/convert_sage_real_double.pyx
index 6d7ffe7038e..8a81836407e 100644
--- a/src/sage/libs/pari/convert_sage_real_double.pyx
+++ b/src/sage/libs/pari/convert_sage_real_double.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.convert cimport new_gen_from_double
cpdef Gen new_gen_from_real_double_element(RealDoubleElement self):
diff --git a/src/sage/libs/pari/convert_sage_real_mpfr.pxd b/src/sage/libs/pari/convert_sage_real_mpfr.pxd
index 34fbd2bbe45..73d8260d4e6 100644
--- a/src/sage/libs/pari/convert_sage_real_mpfr.pxd
+++ b/src/sage/libs/pari/convert_sage_real_mpfr.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen cimport Gen
from sage.rings.real_mpfr cimport RealNumber
diff --git a/src/sage/libs/pari/convert_sage_real_mpfr.pyx b/src/sage/libs/pari/convert_sage_real_mpfr.pyx
index 4546c3def24..312aec30473 100644
--- a/src/sage/libs/pari/convert_sage_real_mpfr.pyx
+++ b/src/sage/libs/pari/convert_sage_real_mpfr.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.rings.real_mpfr
from cypari2.stack cimport new_gen
diff --git a/src/sage/libs/pari/misc.pxd b/src/sage/libs/pari/misc.pxd
index ae89aff0b84..710ffefb6ca 100644
--- a/src/sage/libs/pari/misc.pxd
+++ b/src/sage/libs/pari/misc.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen cimport Gen
cdef Gen new_t_POL_from_int_star(int* vals, unsigned long length, long varnum)
diff --git a/src/sage/libs/pari/misc.pyx b/src/sage/libs/pari/misc.pyx
index 1ed774d417c..45d265e0d62 100644
--- a/src/sage/libs/pari/misc.pyx
+++ b/src/sage/libs/pari/misc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cysignals.signals cimport sig_on
from cypari2.paridecl cimport *
from cypari2.stack cimport new_gen
diff --git a/src/sage/libs/pari/tests.py b/src/sage/libs/pari/tests.py
index 43018a338d6..e46281c1ef2 100644
--- a/src/sage/libs/pari/tests.py
+++ b/src/sage/libs/pari/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Tests for the Sage <-> PARI interface
diff --git a/src/sage/libs/polybori/__init__.pxd b/src/sage/libs/polybori/__init__.pxd
index 361d7520c13..bc6ce2d1ff6 100644
--- a/src/sage/libs/polybori/__init__.pxd
+++ b/src/sage/libs/polybori/__init__.pxd
@@ -1 +1,2 @@
+# sage_setup: distribution = sagemath-brial
# Insert a comment here to prevent repo corruption.
diff --git a/src/sage/libs/polybori/decl.pxd b/src/sage/libs/polybori/decl.pxd
index dd6a3aaf0b6..b516710851c 100644
--- a/src/sage/libs/polybori/decl.pxd
+++ b/src/sage/libs/polybori/decl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
# distutils: language = c++
# distutils: extra_compile_args = -std=c++11
diff --git a/src/sage/libs/pynac/__init__.py b/src/sage/libs/pynac/__init__.py
index e69de29bb2d..332eaf1cdb6 100644
--- a/src/sage/libs/pynac/__init__.py
+++ b/src/sage/libs/pynac/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-symbolics
diff --git a/src/sage/libs/pynac/pynac.py b/src/sage/libs/pynac/pynac.py
index ae39f63c4c2..dbc8660b51c 100644
--- a/src/sage/libs/pynac/pynac.py
+++ b/src/sage/libs/pynac/pynac.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Interface to the pynac library (deprecated module)
diff --git a/src/sage/libs/singular/__init__.py b/src/sage/libs/singular/__init__.py
index e69de29bb2d..84ec2b51067 100644
--- a/src/sage/libs/singular/__init__.py
+++ b/src/sage/libs/singular/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-singular
diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd
index e36216d6395..27ddad438fc 100644
--- a/src/sage/libs/singular/decl.pxd
+++ b/src/sage/libs/singular/decl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# distutils: include_dirs = SINGULAR_INCDIR
# distutils: extra_compile_args = SINGULAR_CFLAGS
# distutils: libraries = SINGULAR_LIBRARIES
diff --git a/src/sage/libs/singular/function.pxd b/src/sage/libs/singular/function.pxd
index facdcae674a..1f680cafcfb 100644
--- a/src/sage/libs/singular/function.pxd
+++ b/src/sage/libs/singular/function.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Direct Access to Singular's Functions via libSingular
diff --git a/src/sage/libs/singular/function.pyx b/src/sage/libs/singular/function.pyx
index 4a5ab6d78f6..4d551b3a82f 100644
--- a/src/sage/libs/singular/function.pyx
+++ b/src/sage/libs/singular/function.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
libSingular: Functions
diff --git a/src/sage/libs/singular/function_factory.py b/src/sage/libs/singular/function_factory.py
index c4b0b52372f..09d45a85e97 100644
--- a/src/sage/libs/singular/function_factory.py
+++ b/src/sage/libs/singular/function_factory.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
libSingular: Function Factory
diff --git a/src/sage/libs/singular/groebner_strategy.pxd b/src/sage/libs/singular/groebner_strategy.pxd
index 605e2679228..342c4e0955f 100644
--- a/src/sage/libs/singular/groebner_strategy.pxd
+++ b/src/sage/libs/singular/groebner_strategy.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.libs.singular.decl cimport skStrategy, ring
from sage.rings.polynomial.multi_polynomial_libsingular cimport \
diff --git a/src/sage/libs/singular/groebner_strategy.pyx b/src/sage/libs/singular/groebner_strategy.pyx
index e9c00e7d1fd..5e34073dd38 100644
--- a/src/sage/libs/singular/groebner_strategy.pyx
+++ b/src/sage/libs/singular/groebner_strategy.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Singular's Groebner Strategy Objects
diff --git a/src/sage/libs/singular/option.pyx b/src/sage/libs/singular/option.pyx
index d35415c2864..a21bf28a668 100644
--- a/src/sage/libs/singular/option.pyx
+++ b/src/sage/libs/singular/option.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
libSingular: Options
diff --git a/src/sage/libs/singular/polynomial.pxd b/src/sage/libs/singular/polynomial.pxd
index 52b19fbba75..0b7dd0079e0 100644
--- a/src/sage/libs/singular/polynomial.pxd
+++ b/src/sage/libs/singular/polynomial.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Wrapper for Singular's Polynomial Arithmetic
diff --git a/src/sage/libs/singular/polynomial.pyx b/src/sage/libs/singular/polynomial.pyx
index e3a5881383d..3699eefd811 100644
--- a/src/sage/libs/singular/polynomial.pyx
+++ b/src/sage/libs/singular/polynomial.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Wrapper for Singular's Polynomial Arithmetic
diff --git a/src/sage/libs/singular/ring.pxd b/src/sage/libs/singular/ring.pxd
index 55403521886..6e336b94b57 100644
--- a/src/sage/libs/singular/ring.pxd
+++ b/src/sage/libs/singular/ring.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Wrapper for Singular's Rings
diff --git a/src/sage/libs/singular/ring.pyx b/src/sage/libs/singular/ring.pyx
index 0efff45904d..73bd0a07ce4 100644
--- a/src/sage/libs/singular/ring.pyx
+++ b/src/sage/libs/singular/ring.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Wrapper for Singular's Rings
diff --git a/src/sage/libs/singular/singular.pxd b/src/sage/libs/singular/singular.pxd
index 05f32b68079..bb7686dea30 100644
--- a/src/sage/libs/singular/singular.pxd
+++ b/src/sage/libs/singular/singular.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.libs.singular.decl cimport ring, poly, number, intvec
from sage.libs.singular.function cimport Resolution
diff --git a/src/sage/libs/singular/singular.pyx b/src/sage/libs/singular/singular.pyx
index e256949298e..79aa1e15aac 100644
--- a/src/sage/libs/singular/singular.pyx
+++ b/src/sage/libs/singular/singular.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
libSingular: Conversion Routines and Initialisation
diff --git a/src/sage/libs/singular/standard_options.py b/src/sage/libs/singular/standard_options.py
index 341650fa6ba..aa4cc17b9a3 100644
--- a/src/sage/libs/singular/standard_options.py
+++ b/src/sage/libs/singular/standard_options.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Highlevel functions for managing options of the libSingular interface
diff --git a/src/sage/libs/symmetrica/__init__.py b/src/sage/libs/symmetrica/__init__.py
index e69de29bb2d..28c48d66b20 100644
--- a/src/sage/libs/symmetrica/__init__.py
+++ b/src/sage/libs/symmetrica/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-combinat
diff --git a/src/sage/libs/symmetrica/all.py b/src/sage/libs/symmetrica/all.py
index 7c5215f6444..817d568b03e 100644
--- a/src/sage/libs/symmetrica/all.py
+++ b/src/sage/libs/symmetrica/all.py
@@ -1,100 +1,102 @@
-#from symmetrica import *
-
-from .symmetrica import start
-
-#kostka
-from .symmetrica import kostka_number_symmetrica as kostka_number
-from .symmetrica import kostka_tab_symmetrica as kostka_tab
-from .symmetrica import kostka_tafel_symmetrica as kostka_tafel
-
-
-#sab
-from .symmetrica import dimension_symmetrization_symmetrica as dimension_symmetrization
-from .symmetrica import bdg_symmetrica as bdg
-from .symmetrica import sdg_symmetrica as sdg
-from .symmetrica import odg_symmetrica as odg
-from .symmetrica import specht_dg_symmetrica as specht_dg
-from .symmetrica import ndg_symmetrica as ndg
-#from symmetrica import glmndg_symmetrica as glmndg
-
-
-#sc
-from .symmetrica import chartafel_symmetrica as chartafel
-from .symmetrica import charvalue_symmetrica as charvalue
-from .symmetrica import kranztafel_symmetrica as kranztafel
-#from symmetrica import c_ijk_sn_symmetrica as c_ijk_sn
-
-#part
-from .symmetrica import strict_to_odd_part_symmetrica as strict_to_odd_part
-from .symmetrica import odd_to_strict_part_symmetrica as odd_to_strict
-from .symmetrica import q_core_symmetrica as q_core
-from .symmetrica import gupta_nm_symmetrica as gupta_nm
-from .symmetrica import gupta_tafel_symmetrica as gupta_tafel
-from .symmetrica import random_partition_symmetrica as random_partition
-
-
-#schur
-from .symmetrica import outerproduct_schur_symmetrica as outerproduct_schur
-from .symmetrica import dimension_schur_symmetrica as dimension_schur
-from .symmetrica import part_part_skewschur_symmetrica as part_part_skewschur
-from .symmetrica import newtrans_symmetrica as newtrans
-from .symmetrica import compute_schur_with_alphabet_symmetrica as compute_schur_with_alphabet
-from .symmetrica import compute_homsym_with_alphabet_symmetrica as compute_homsym_with_alphabet
-from .symmetrica import compute_elmsym_with_alphabet_symmetrica as compute_elmsym_with_alphabet
-from .symmetrica import compute_monomial_with_alphabet_symmetrica as compute_monomial_with_alphabet
-from .symmetrica import compute_powsym_with_alphabet_symmetrica as compute_powsym_with_alphabet
-from .symmetrica import compute_schur_with_alphabet_det_symmetrica as compute_schur_with_alphabet_det
-
-from .symmetrica import t_SCHUR_MONOMIAL_symmetrica as t_SCHUR_MONOMIAL
-from .symmetrica import t_SCHUR_HOMSYM_symmetrica as t_SCHUR_HOMSYM
-from .symmetrica import t_SCHUR_POWSYM_symmetrica as t_SCHUR_POWSYM
-from .symmetrica import t_SCHUR_ELMSYM_symmetrica as t_SCHUR_ELMSYM
-
-from .symmetrica import t_MONOMIAL_SCHUR_symmetrica as t_MONOMIAL_SCHUR
-from .symmetrica import t_MONOMIAL_HOMSYM_symmetrica as t_MONOMIAL_HOMSYM
-from .symmetrica import t_MONOMIAL_POWSYM_symmetrica as t_MONOMIAL_POWSYM
-from .symmetrica import t_MONOMIAL_ELMSYM_symmetrica as t_MONOMIAL_ELMSYM
-
-from .symmetrica import t_ELMSYM_SCHUR_symmetrica as t_ELMSYM_SCHUR
-from .symmetrica import t_ELMSYM_MONOMIAL_symmetrica as t_ELMSYM_MONOMIAL
-from .symmetrica import t_ELMSYM_HOMSYM_symmetrica as t_ELMSYM_HOMSYM
-from .symmetrica import t_ELMSYM_POWSYM_symmetrica as t_ELMSYM_POWSYM
-
-from .symmetrica import t_HOMSYM_SCHUR_symmetrica as t_HOMSYM_SCHUR
-from .symmetrica import t_HOMSYM_MONOMIAL_symmetrica as t_HOMSYM_MONOMIAL
-from .symmetrica import t_HOMSYM_POWSYM_symmetrica as t_HOMSYM_POWSYM
-from .symmetrica import t_HOMSYM_ELMSYM_symmetrica as t_HOMSYM_ELMSYM
-
-from .symmetrica import t_POWSYM_SCHUR_symmetrica as t_POWSYM_SCHUR
-from .symmetrica import t_POWSYM_HOMSYM_symmetrica as t_POWSYM_HOMSYM
-from .symmetrica import t_POWSYM_ELMSYM_symmetrica as t_POWSYM_ELMSYM
-from .symmetrica import t_POWSYM_MONOMIAL_symmetrica as t_POWSYM_MONOMIAL
-
-
-from .symmetrica import mult_schur_schur_symmetrica as mult_schur_schur
-from .symmetrica import mult_monomial_monomial_symmetrica as mult_monomial_monomial
-
-
-from .symmetrica import hall_littlewood_symmetrica as hall_littlewood
-
-from .symmetrica import t_POLYNOM_POWER_symmetrica as t_POLYNOM_POWER
-from .symmetrica import t_POLYNOM_SCHUR_symmetrica as t_POLYNOM_SCHUR
-from .symmetrica import t_POLYNOM_ELMSYM_symmetrica as t_POLYNOM_ELMSYM
-from .symmetrica import t_POLYNOM_MONOMIAL_symmetrica as t_POLYNOM_MONOMIAL
-
-from .symmetrica import scalarproduct_schur_symmetrica as scalarproduct_schur
-
-#plet
-from .symmetrica import plethysm_symmetrica as plethysm
-from .symmetrica import schur_schur_plet_symmetrica as schur_schur_plet
-
-#sb
-from .symmetrica import mult_schubert_schubert_symmetrica as mult_schubert_schubert
-from .symmetrica import t_SCHUBERT_POLYNOM_symmetrica as t_SCHUBERT_POLYNOM
-from .symmetrica import t_POLYNOM_SCHUBERT_symmetrica as t_POLYNOM_SCHUBERT
-from .symmetrica import mult_schubert_variable_symmetrica as mult_schubert_variable
-from .symmetrica import divdiff_perm_schubert_symmetrica as divdiff_perm_schubert
-from .symmetrica import scalarproduct_schubert_symmetrica as scalarproduct_schubert
-from .symmetrica import divdiff_schubert_symmetrica as divdiff_schubert
+# sage_setup: distribution = sagemath-combinat
+
+# from symmetrica import *
+
+from sage.libs.symmetrica.symmetrica import start
+
+# kostka
+from sage.libs.symmetrica.symmetrica import kostka_number_symmetrica as kostka_number
+from sage.libs.symmetrica.symmetrica import kostka_tab_symmetrica as kostka_tab
+from sage.libs.symmetrica.symmetrica import kostka_tafel_symmetrica as kostka_tafel
+
+
+# sab
+from sage.libs.symmetrica.symmetrica import dimension_symmetrization_symmetrica as dimension_symmetrization
+from sage.libs.symmetrica.symmetrica import bdg_symmetrica as bdg
+from sage.libs.symmetrica.symmetrica import sdg_symmetrica as sdg
+from sage.libs.symmetrica.symmetrica import odg_symmetrica as odg
+from sage.libs.symmetrica.symmetrica import specht_dg_symmetrica as specht_dg
+from sage.libs.symmetrica.symmetrica import ndg_symmetrica as ndg
+# from symmetrica import glmndg_symmetrica as glmndg
+
+
+# sc
+from sage.libs.symmetrica.symmetrica import chartafel_symmetrica as chartafel
+from sage.libs.symmetrica.symmetrica import charvalue_symmetrica as charvalue
+from sage.libs.symmetrica.symmetrica import kranztafel_symmetrica as kranztafel
+# from symmetrica import c_ijk_sn_symmetrica as c_ijk_sn
+
+# part
+from sage.libs.symmetrica.symmetrica import strict_to_odd_part_symmetrica as strict_to_odd_part
+from sage.libs.symmetrica.symmetrica import odd_to_strict_part_symmetrica as odd_to_strict
+from sage.libs.symmetrica.symmetrica import q_core_symmetrica as q_core
+from sage.libs.symmetrica.symmetrica import gupta_nm_symmetrica as gupta_nm
+from sage.libs.symmetrica.symmetrica import gupta_tafel_symmetrica as gupta_tafel
+from sage.libs.symmetrica.symmetrica import random_partition_symmetrica as random_partition
+
+
+# schur
+from sage.libs.symmetrica.symmetrica import outerproduct_schur_symmetrica as outerproduct_schur
+from sage.libs.symmetrica.symmetrica import dimension_schur_symmetrica as dimension_schur
+from sage.libs.symmetrica.symmetrica import part_part_skewschur_symmetrica as part_part_skewschur
+from sage.libs.symmetrica.symmetrica import newtrans_symmetrica as newtrans
+from sage.libs.symmetrica.symmetrica import compute_schur_with_alphabet_symmetrica as compute_schur_with_alphabet
+from sage.libs.symmetrica.symmetrica import compute_homsym_with_alphabet_symmetrica as compute_homsym_with_alphabet
+from sage.libs.symmetrica.symmetrica import compute_elmsym_with_alphabet_symmetrica as compute_elmsym_with_alphabet
+from sage.libs.symmetrica.symmetrica import compute_monomial_with_alphabet_symmetrica as compute_monomial_with_alphabet
+from sage.libs.symmetrica.symmetrica import compute_powsym_with_alphabet_symmetrica as compute_powsym_with_alphabet
+from sage.libs.symmetrica.symmetrica import compute_schur_with_alphabet_det_symmetrica as compute_schur_with_alphabet_det
+
+from sage.libs.symmetrica.symmetrica import t_SCHUR_MONOMIAL_symmetrica as t_SCHUR_MONOMIAL
+from sage.libs.symmetrica.symmetrica import t_SCHUR_HOMSYM_symmetrica as t_SCHUR_HOMSYM
+from sage.libs.symmetrica.symmetrica import t_SCHUR_POWSYM_symmetrica as t_SCHUR_POWSYM
+from sage.libs.symmetrica.symmetrica import t_SCHUR_ELMSYM_symmetrica as t_SCHUR_ELMSYM
+
+from sage.libs.symmetrica.symmetrica import t_MONOMIAL_SCHUR_symmetrica as t_MONOMIAL_SCHUR
+from sage.libs.symmetrica.symmetrica import t_MONOMIAL_HOMSYM_symmetrica as t_MONOMIAL_HOMSYM
+from sage.libs.symmetrica.symmetrica import t_MONOMIAL_POWSYM_symmetrica as t_MONOMIAL_POWSYM
+from sage.libs.symmetrica.symmetrica import t_MONOMIAL_ELMSYM_symmetrica as t_MONOMIAL_ELMSYM
+
+from sage.libs.symmetrica.symmetrica import t_ELMSYM_SCHUR_symmetrica as t_ELMSYM_SCHUR
+from sage.libs.symmetrica.symmetrica import t_ELMSYM_MONOMIAL_symmetrica as t_ELMSYM_MONOMIAL
+from sage.libs.symmetrica.symmetrica import t_ELMSYM_HOMSYM_symmetrica as t_ELMSYM_HOMSYM
+from sage.libs.symmetrica.symmetrica import t_ELMSYM_POWSYM_symmetrica as t_ELMSYM_POWSYM
+
+from sage.libs.symmetrica.symmetrica import t_HOMSYM_SCHUR_symmetrica as t_HOMSYM_SCHUR
+from sage.libs.symmetrica.symmetrica import t_HOMSYM_MONOMIAL_symmetrica as t_HOMSYM_MONOMIAL
+from sage.libs.symmetrica.symmetrica import t_HOMSYM_POWSYM_symmetrica as t_HOMSYM_POWSYM
+from sage.libs.symmetrica.symmetrica import t_HOMSYM_ELMSYM_symmetrica as t_HOMSYM_ELMSYM
+
+from sage.libs.symmetrica.symmetrica import t_POWSYM_SCHUR_symmetrica as t_POWSYM_SCHUR
+from sage.libs.symmetrica.symmetrica import t_POWSYM_HOMSYM_symmetrica as t_POWSYM_HOMSYM
+from sage.libs.symmetrica.symmetrica import t_POWSYM_ELMSYM_symmetrica as t_POWSYM_ELMSYM
+from sage.libs.symmetrica.symmetrica import t_POWSYM_MONOMIAL_symmetrica as t_POWSYM_MONOMIAL
+
+
+from sage.libs.symmetrica.symmetrica import mult_schur_schur_symmetrica as mult_schur_schur
+from sage.libs.symmetrica.symmetrica import mult_monomial_monomial_symmetrica as mult_monomial_monomial
+
+
+from sage.libs.symmetrica.symmetrica import hall_littlewood_symmetrica as hall_littlewood
+
+from sage.libs.symmetrica.symmetrica import t_POLYNOM_POWER_symmetrica as t_POLYNOM_POWER
+from sage.libs.symmetrica.symmetrica import t_POLYNOM_SCHUR_symmetrica as t_POLYNOM_SCHUR
+from sage.libs.symmetrica.symmetrica import t_POLYNOM_ELMSYM_symmetrica as t_POLYNOM_ELMSYM
+from sage.libs.symmetrica.symmetrica import t_POLYNOM_MONOMIAL_symmetrica as t_POLYNOM_MONOMIAL
+
+from sage.libs.symmetrica.symmetrica import scalarproduct_schur_symmetrica as scalarproduct_schur
+
+# plet
+from sage.libs.symmetrica.symmetrica import plethysm_symmetrica as plethysm
+from sage.libs.symmetrica.symmetrica import schur_schur_plet_symmetrica as schur_schur_plet
+
+# sb
+from sage.libs.symmetrica.symmetrica import mult_schubert_schubert_symmetrica as mult_schubert_schubert
+from sage.libs.symmetrica.symmetrica import t_SCHUBERT_POLYNOM_symmetrica as t_SCHUBERT_POLYNOM
+from sage.libs.symmetrica.symmetrica import t_POLYNOM_SCHUBERT_symmetrica as t_POLYNOM_SCHUBERT
+from sage.libs.symmetrica.symmetrica import mult_schubert_variable_symmetrica as mult_schubert_variable
+from sage.libs.symmetrica.symmetrica import divdiff_perm_schubert_symmetrica as divdiff_perm_schubert
+from sage.libs.symmetrica.symmetrica import scalarproduct_schubert_symmetrica as scalarproduct_schubert
+from sage.libs.symmetrica.symmetrica import divdiff_schubert_symmetrica as divdiff_schubert
start()
diff --git a/src/sage/libs/symmetrica/kostka.pxi b/src/sage/libs/symmetrica/kostka.pxi
index 690e5d5a096..76409a73383 100644
--- a/src/sage/libs/symmetrica/kostka.pxi
+++ b/src/sage/libs/symmetrica/kostka.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from cpython.object cimport *
from cysignals.signals cimport sig_on, sig_off
diff --git a/src/sage/libs/symmetrica/part.pxi b/src/sage/libs/symmetrica/part.pxi
index 37a3c0ff8f0..28e49fd261c 100644
--- a/src/sage/libs/symmetrica/part.pxi
+++ b/src/sage/libs/symmetrica/part.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef extern from 'symmetrica/def.h':
INT strict_to_odd_part(OP s, OP o)
INT odd_to_strict_part(OP o, OP s)
diff --git a/src/sage/libs/symmetrica/plet.pxi b/src/sage/libs/symmetrica/plet.pxi
index b1f8450c621..a1c4a4cf785 100644
--- a/src/sage/libs/symmetrica/plet.pxi
+++ b/src/sage/libs/symmetrica/plet.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef extern from 'symmetrica/def.h':
INT plethysm(OP s1, OP s2, OP res)
INT schur_schur_plet(OP p1, OP p2, OP res)
diff --git a/src/sage/libs/symmetrica/sab.pxi b/src/sage/libs/symmetrica/sab.pxi
index de2838e7ed5..3750d9263d9 100644
--- a/src/sage/libs/symmetrica/sab.pxi
+++ b/src/sage/libs/symmetrica/sab.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef extern from 'symmetrica/def.h':
INT dimension_symmetrization(OP n, OP part, OP a)
INT bdg(OP part, OP perm, OP D)
diff --git a/src/sage/libs/symmetrica/sb.pxi b/src/sage/libs/symmetrica/sb.pxi
index b884d33dafd..908edbb7201 100644
--- a/src/sage/libs/symmetrica/sb.pxi
+++ b/src/sage/libs/symmetrica/sb.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef extern from 'symmetrica/def.h':
INT mult_schubert_schubert(OP a, OP b, OP result)
INT m_perm_sch(OP a, OP b)
diff --git a/src/sage/libs/symmetrica/sc.pxi b/src/sage/libs/symmetrica/sc.pxi
index 4d9fa4f009d..f1a20b359e0 100644
--- a/src/sage/libs/symmetrica/sc.pxi
+++ b/src/sage/libs/symmetrica/sc.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef extern from 'symmetrica/def.h':
INT chartafel(OP degree, OP result)
INT charvalue(OP irred, OP cls, OP result, OP table)
diff --git a/src/sage/libs/symmetrica/schur.pxi b/src/sage/libs/symmetrica/schur.pxi
index 501acf5b7e0..9e8ca73cd80 100644
--- a/src/sage/libs/symmetrica/schur.pxi
+++ b/src/sage/libs/symmetrica/schur.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
cdef extern from 'symmetrica/def.h':
INT outerproduct_schur(OP parta, OP partb, OP result)
INT dimension_schur(OP a, OP result)
diff --git a/src/sage/libs/symmetrica/symmetrica.pxi b/src/sage/libs/symmetrica/symmetrica.pxi
index 2bdb51f1a8e..f10450d69be 100644
--- a/src/sage/libs/symmetrica/symmetrica.pxi
+++ b/src/sage/libs/symmetrica/symmetrica.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# We put all definitions together, whether they appear in def.h or
# macro.h
cdef extern from 'symmetrica/def.h':
diff --git a/src/sage/libs/symmetrica/symmetrica.pyx b/src/sage/libs/symmetrica/symmetrica.pyx
index 7ca41fbc82b..56e3ede0bf3 100644
--- a/src/sage/libs/symmetrica/symmetrica.pyx
+++ b/src/sage/libs/symmetrica/symmetrica.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# distutils: libraries = symmetrica
"""
Symmetrica library
diff --git a/src/sage/logic/all.py b/src/sage/logic/all.py
index c8604a624e8..6fe860ea538 100644
--- a/src/sage/logic/all.py
+++ b/src/sage/logic/all.py
@@ -1,3 +1,3 @@
-from .logic import SymbolicLogic
+from sage.logic.logic import SymbolicLogic
-from . import propcalc
+from sage.logic import propcalc
diff --git a/src/sage/manifolds/all.py b/src/sage/manifolds/all.py
index 68a489d08d0..dc9bc48616c 100644
--- a/src/sage/manifolds/all.py
+++ b/src/sage/manifolds/all.py
@@ -1,6 +1,8 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.misc.lazy_import import lazy_import
lazy_import('sage.manifolds.manifold', 'Manifold')
lazy_import('sage.manifolds.differentiable.examples.real_line', ('OpenInterval', 'RealLine'),
deprecation=31881)
lazy_import('sage.manifolds.differentiable.examples.euclidean', 'EuclideanSpace')
lazy_import('sage.manifolds', 'catalog', 'manifolds')
+del lazy_import
diff --git a/src/sage/manifolds/calculus_method.py b/src/sage/manifolds/calculus_method.py
index ddbad8a11ef..57dea6677a4 100644
--- a/src/sage/manifolds/calculus_method.py
+++ b/src/sage/manifolds/calculus_method.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Coordinate calculus methods
diff --git a/src/sage/manifolds/catalog.py b/src/sage/manifolds/catalog.py
index bb09ed8885d..9cad91acc65 100644
--- a/src/sage/manifolds/catalog.py
+++ b/src/sage/manifolds/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Manifolds Catalog
diff --git a/src/sage/manifolds/chart.py b/src/sage/manifolds/chart.py
index 2bd980fb465..dc256321d12 100644
--- a/src/sage/manifolds/chart.py
+++ b/src/sage/manifolds/chart.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Coordinate Charts
diff --git a/src/sage/manifolds/chart_func.py b/src/sage/manifolds/chart_func.py
index 6363ed61841..42a9c5ced84 100644
--- a/src/sage/manifolds/chart_func.py
+++ b/src/sage/manifolds/chart_func.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Chart Functions
diff --git a/src/sage/manifolds/continuous_map.py b/src/sage/manifolds/continuous_map.py
index dc9f9b5d12c..478af258542 100644
--- a/src/sage/manifolds/continuous_map.py
+++ b/src/sage/manifolds/continuous_map.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Continuous Maps Between Topological Manifolds
diff --git a/src/sage/manifolds/continuous_map_image.py b/src/sage/manifolds/continuous_map_image.py
index 303117f7978..eebd214dbb6 100644
--- a/src/sage/manifolds/continuous_map_image.py
+++ b/src/sage/manifolds/continuous_map_image.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Images of Manifold Subsets under Continuous Maps as Subsets of the Codomain
diff --git a/src/sage/manifolds/differentiable/affine_connection.py b/src/sage/manifolds/differentiable/affine_connection.py
index 1a45b219872..e29e8e1f984 100644
--- a/src/sage/manifolds/differentiable/affine_connection.py
+++ b/src/sage/manifolds/differentiable/affine_connection.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Affine Connections
diff --git a/src/sage/manifolds/differentiable/all.py b/src/sage/manifolds/differentiable/all.py
index e69de29bb2d..332eaf1cdb6 100644
--- a/src/sage/manifolds/differentiable/all.py
+++ b/src/sage/manifolds/differentiable/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-symbolics
diff --git a/src/sage/manifolds/differentiable/automorphismfield.py b/src/sage/manifolds/differentiable/automorphismfield.py
index 89cc87aef32..aa52d4e1f27 100644
--- a/src/sage/manifolds/differentiable/automorphismfield.py
+++ b/src/sage/manifolds/differentiable/automorphismfield.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Tangent-Space Automorphism Fields
diff --git a/src/sage/manifolds/differentiable/automorphismfield_group.py b/src/sage/manifolds/differentiable/automorphismfield_group.py
index c0e782798aa..8293a71e31b 100644
--- a/src/sage/manifolds/differentiable/automorphismfield_group.py
+++ b/src/sage/manifolds/differentiable/automorphismfield_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Group of Tangent-Space Automorphism Fields
diff --git a/src/sage/manifolds/differentiable/bundle_connection.py b/src/sage/manifolds/differentiable/bundle_connection.py
index a3353b820cb..e16a3485b05 100644
--- a/src/sage/manifolds/differentiable/bundle_connection.py
+++ b/src/sage/manifolds/differentiable/bundle_connection.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Bundle Connections
diff --git a/src/sage/manifolds/differentiable/characteristic_cohomology_class.py b/src/sage/manifolds/differentiable/characteristic_cohomology_class.py
index 91ebbf00ccc..fa8642eadaa 100644
--- a/src/sage/manifolds/differentiable/characteristic_cohomology_class.py
+++ b/src/sage/manifolds/differentiable/characteristic_cohomology_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Characteristic cohomology classes
diff --git a/src/sage/manifolds/differentiable/chart.py b/src/sage/manifolds/differentiable/chart.py
index a40ebb8e5b2..83be8302afd 100644
--- a/src/sage/manifolds/differentiable/chart.py
+++ b/src/sage/manifolds/differentiable/chart.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Coordinate Charts on Differentiable Manifolds
diff --git a/src/sage/manifolds/differentiable/curve.py b/src/sage/manifolds/differentiable/curve.py
index 7ea264565ae..44f621f8b83 100644
--- a/src/sage/manifolds/differentiable/curve.py
+++ b/src/sage/manifolds/differentiable/curve.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Curves in Manifolds
diff --git a/src/sage/manifolds/differentiable/de_rham_cohomology.py b/src/sage/manifolds/differentiable/de_rham_cohomology.py
index 403f9f37f00..845a6225625 100644
--- a/src/sage/manifolds/differentiable/de_rham_cohomology.py
+++ b/src/sage/manifolds/differentiable/de_rham_cohomology.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
De Rham Cohomology
diff --git a/src/sage/manifolds/differentiable/degenerate.py b/src/sage/manifolds/differentiable/degenerate.py
index 82de8c39d74..34a146454bc 100644
--- a/src/sage/manifolds/differentiable/degenerate.py
+++ b/src/sage/manifolds/differentiable/degenerate.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Degenerate manifolds
"""
diff --git a/src/sage/manifolds/differentiable/degenerate_submanifold.py b/src/sage/manifolds/differentiable/degenerate_submanifold.py
index 581162b88f5..ee2ef289a89 100644
--- a/src/sage/manifolds/differentiable/degenerate_submanifold.py
+++ b/src/sage/manifolds/differentiable/degenerate_submanifold.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Degenerate submanifolds
diff --git a/src/sage/manifolds/differentiable/diff_form.py b/src/sage/manifolds/differentiable/diff_form.py
index 0fc837b8cc4..6ee84daf4ae 100644
--- a/src/sage/manifolds/differentiable/diff_form.py
+++ b/src/sage/manifolds/differentiable/diff_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Differential Forms
diff --git a/src/sage/manifolds/differentiable/diff_form_module.py b/src/sage/manifolds/differentiable/diff_form_module.py
index b10de21c07c..3495398d7a2 100644
--- a/src/sage/manifolds/differentiable/diff_form_module.py
+++ b/src/sage/manifolds/differentiable/diff_form_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Differential Form Modules
diff --git a/src/sage/manifolds/differentiable/diff_map.py b/src/sage/manifolds/differentiable/diff_map.py
index 8a64694b38b..5a020f54594 100644
--- a/src/sage/manifolds/differentiable/diff_map.py
+++ b/src/sage/manifolds/differentiable/diff_map.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Differentiable Maps between Differentiable Manifolds
diff --git a/src/sage/manifolds/differentiable/differentiable_submanifold.py b/src/sage/manifolds/differentiable/differentiable_submanifold.py
index 7387ea3a44e..46624e8fc70 100644
--- a/src/sage/manifolds/differentiable/differentiable_submanifold.py
+++ b/src/sage/manifolds/differentiable/differentiable_submanifold.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Submanifolds of differentiable manifolds
diff --git a/src/sage/manifolds/differentiable/examples/all.py b/src/sage/manifolds/differentiable/examples/all.py
index e69de29bb2d..332eaf1cdb6 100644
--- a/src/sage/manifolds/differentiable/examples/all.py
+++ b/src/sage/manifolds/differentiable/examples/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-symbolics
diff --git a/src/sage/manifolds/differentiable/examples/euclidean.py b/src/sage/manifolds/differentiable/examples/euclidean.py
index eb96b6da587..494c01849e4 100644
--- a/src/sage/manifolds/differentiable/examples/euclidean.py
+++ b/src/sage/manifolds/differentiable/examples/euclidean.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Euclidean Spaces
diff --git a/src/sage/manifolds/differentiable/examples/real_line.py b/src/sage/manifolds/differentiable/examples/real_line.py
index 5ff4f969b49..a1029c4b507 100644
--- a/src/sage/manifolds/differentiable/examples/real_line.py
+++ b/src/sage/manifolds/differentiable/examples/real_line.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
The Real Line and Open Intervals
diff --git a/src/sage/manifolds/differentiable/examples/sphere.py b/src/sage/manifolds/differentiable/examples/sphere.py
index 4ccc6f7440b..41cb847cc3a 100644
--- a/src/sage/manifolds/differentiable/examples/sphere.py
+++ b/src/sage/manifolds/differentiable/examples/sphere.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Spheres smoothly embedded in Euclidean Space
diff --git a/src/sage/manifolds/differentiable/examples/symplectic_space.py b/src/sage/manifolds/differentiable/examples/symplectic_space.py
index 623979ed7f3..e92e29d9ab4 100644
--- a/src/sage/manifolds/differentiable/examples/symplectic_space.py
+++ b/src/sage/manifolds/differentiable/examples/symplectic_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Symplectic vector spaces
diff --git a/src/sage/manifolds/differentiable/examples/symplectic_space_test.py b/src/sage/manifolds/differentiable/examples/symplectic_space_test.py
index 0372470bd73..01e19bcb351 100644
--- a/src/sage/manifolds/differentiable/examples/symplectic_space_test.py
+++ b/src/sage/manifolds/differentiable/examples/symplectic_space_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
import sage.all
from sage.manifolds.differentiable.symplectic_form import SymplecticForm
from sage.manifolds.differentiable.examples.symplectic_space import (
diff --git a/src/sage/manifolds/differentiable/integrated_curve.py b/src/sage/manifolds/differentiable/integrated_curve.py
index 063611becce..00c834a9a3c 100644
--- a/src/sage/manifolds/differentiable/integrated_curve.py
+++ b/src/sage/manifolds/differentiable/integrated_curve.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Integrated Curves and Geodesics in Manifolds
diff --git a/src/sage/manifolds/differentiable/levi_civita_connection.py b/src/sage/manifolds/differentiable/levi_civita_connection.py
index 00ebf69b47f..c0ed5664ce2 100644
--- a/src/sage/manifolds/differentiable/levi_civita_connection.py
+++ b/src/sage/manifolds/differentiable/levi_civita_connection.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Levi-Civita Connections
diff --git a/src/sage/manifolds/differentiable/manifold.py b/src/sage/manifolds/differentiable/manifold.py
index 4b5a793f762..f4c80365be1 100644
--- a/src/sage/manifolds/differentiable/manifold.py
+++ b/src/sage/manifolds/differentiable/manifold.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Differentiable Manifolds
diff --git a/src/sage/manifolds/differentiable/manifold_homset.py b/src/sage/manifolds/differentiable/manifold_homset.py
index 20660a01652..1475161de7c 100644
--- a/src/sage/manifolds/differentiable/manifold_homset.py
+++ b/src/sage/manifolds/differentiable/manifold_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Sets of Morphisms between Differentiable Manifolds
diff --git a/src/sage/manifolds/differentiable/metric.py b/src/sage/manifolds/differentiable/metric.py
index 74fdd076e45..87278c3e9ff 100644
--- a/src/sage/manifolds/differentiable/metric.py
+++ b/src/sage/manifolds/differentiable/metric.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Pseudo-Riemannian Metrics and Degenerate Metrics
diff --git a/src/sage/manifolds/differentiable/mixed_form.py b/src/sage/manifolds/differentiable/mixed_form.py
index 4ca5cf56c49..ba984871a7c 100644
--- a/src/sage/manifolds/differentiable/mixed_form.py
+++ b/src/sage/manifolds/differentiable/mixed_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Mixed Differential Forms
diff --git a/src/sage/manifolds/differentiable/mixed_form_algebra.py b/src/sage/manifolds/differentiable/mixed_form_algebra.py
index 15bd856c476..762b73fa0a7 100644
--- a/src/sage/manifolds/differentiable/mixed_form_algebra.py
+++ b/src/sage/manifolds/differentiable/mixed_form_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Graded Algebra of Mixed Differential Forms
diff --git a/src/sage/manifolds/differentiable/multivector_module.py b/src/sage/manifolds/differentiable/multivector_module.py
index 83c741fa8af..92f2a3cbfa1 100644
--- a/src/sage/manifolds/differentiable/multivector_module.py
+++ b/src/sage/manifolds/differentiable/multivector_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Multivector Field Modules
diff --git a/src/sage/manifolds/differentiable/multivectorfield.py b/src/sage/manifolds/differentiable/multivectorfield.py
index 9a4b03fb369..da8ef3b183b 100644
--- a/src/sage/manifolds/differentiable/multivectorfield.py
+++ b/src/sage/manifolds/differentiable/multivectorfield.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Multivector Fields
diff --git a/src/sage/manifolds/differentiable/poisson_tensor.py b/src/sage/manifolds/differentiable/poisson_tensor.py
index 41f178dff5c..86c00eb79fe 100644
--- a/src/sage/manifolds/differentiable/poisson_tensor.py
+++ b/src/sage/manifolds/differentiable/poisson_tensor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Poisson tensors
diff --git a/src/sage/manifolds/differentiable/pseudo_riemannian.py b/src/sage/manifolds/differentiable/pseudo_riemannian.py
index 3b811883cd6..d9028905e97 100644
--- a/src/sage/manifolds/differentiable/pseudo_riemannian.py
+++ b/src/sage/manifolds/differentiable/pseudo_riemannian.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Pseudo-Riemannian Manifolds
diff --git a/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py b/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py
index 219ccfc580e..19f18097c71 100644
--- a/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py
+++ b/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Pseudo-Riemannian submanifolds
diff --git a/src/sage/manifolds/differentiable/scalarfield.py b/src/sage/manifolds/differentiable/scalarfield.py
index ba5c5d70f2c..08b0e5da099 100644
--- a/src/sage/manifolds/differentiable/scalarfield.py
+++ b/src/sage/manifolds/differentiable/scalarfield.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Differentiable Scalar Fields
diff --git a/src/sage/manifolds/differentiable/scalarfield_algebra.py b/src/sage/manifolds/differentiable/scalarfield_algebra.py
index 44e6e16bff4..a640ce829b0 100644
--- a/src/sage/manifolds/differentiable/scalarfield_algebra.py
+++ b/src/sage/manifolds/differentiable/scalarfield_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Algebra of Differentiable Scalar Fields
diff --git a/src/sage/manifolds/differentiable/symplectic_form.py b/src/sage/manifolds/differentiable/symplectic_form.py
index 381fab1e72c..e3c3a99d805 100644
--- a/src/sage/manifolds/differentiable/symplectic_form.py
+++ b/src/sage/manifolds/differentiable/symplectic_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Symplectic structures
diff --git a/src/sage/manifolds/differentiable/symplectic_form_test.py b/src/sage/manifolds/differentiable/symplectic_form_test.py
index 5bc519af6d3..5b25b439e66 100644
--- a/src/sage/manifolds/differentiable/symplectic_form_test.py
+++ b/src/sage/manifolds/differentiable/symplectic_form_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# pylint: disable=missing-function-docstring
from _pytest.fixtures import FixtureRequest
import pytest
diff --git a/src/sage/manifolds/differentiable/tangent_space.py b/src/sage/manifolds/differentiable/tangent_space.py
index 98a60cede2a..7a95ad1a09e 100644
--- a/src/sage/manifolds/differentiable/tangent_space.py
+++ b/src/sage/manifolds/differentiable/tangent_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Tangent Spaces
diff --git a/src/sage/manifolds/differentiable/tangent_vector.py b/src/sage/manifolds/differentiable/tangent_vector.py
index 97abcea54e1..2d6a848965d 100644
--- a/src/sage/manifolds/differentiable/tangent_vector.py
+++ b/src/sage/manifolds/differentiable/tangent_vector.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Tangent Vectors
diff --git a/src/sage/manifolds/differentiable/tensorfield.py b/src/sage/manifolds/differentiable/tensorfield.py
index df54270dde0..61904583db4 100644
--- a/src/sage/manifolds/differentiable/tensorfield.py
+++ b/src/sage/manifolds/differentiable/tensorfield.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Tensor Fields
diff --git a/src/sage/manifolds/differentiable/tensorfield_module.py b/src/sage/manifolds/differentiable/tensorfield_module.py
index 8d31d670137..f3849336a6d 100644
--- a/src/sage/manifolds/differentiable/tensorfield_module.py
+++ b/src/sage/manifolds/differentiable/tensorfield_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Tensor Field Modules
diff --git a/src/sage/manifolds/differentiable/tensorfield_paral.py b/src/sage/manifolds/differentiable/tensorfield_paral.py
index 7cf7c40896c..f8832b0a602 100644
--- a/src/sage/manifolds/differentiable/tensorfield_paral.py
+++ b/src/sage/manifolds/differentiable/tensorfield_paral.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Tensor Fields with Values on a Parallelizable Manifold
diff --git a/src/sage/manifolds/differentiable/tensorfield_paral_test.py b/src/sage/manifolds/differentiable/tensorfield_paral_test.py
index 7eda28c5c49..a71a5571fd9 100644
--- a/src/sage/manifolds/differentiable/tensorfield_paral_test.py
+++ b/src/sage/manifolds/differentiable/tensorfield_paral_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# pylint: disable=missing-function-docstring,missing-class-docstring
import pytest
diff --git a/src/sage/manifolds/differentiable/vector_bundle.py b/src/sage/manifolds/differentiable/vector_bundle.py
index 18d1169064d..d0497025c07 100644
--- a/src/sage/manifolds/differentiable/vector_bundle.py
+++ b/src/sage/manifolds/differentiable/vector_bundle.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Differentiable Vector Bundles
diff --git a/src/sage/manifolds/differentiable/vectorfield.py b/src/sage/manifolds/differentiable/vectorfield.py
index 04018ba9916..480aa7e5b60 100644
--- a/src/sage/manifolds/differentiable/vectorfield.py
+++ b/src/sage/manifolds/differentiable/vectorfield.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Vector Fields
diff --git a/src/sage/manifolds/differentiable/vectorfield_module.py b/src/sage/manifolds/differentiable/vectorfield_module.py
index 78cc259ca41..ea2c104b24e 100644
--- a/src/sage/manifolds/differentiable/vectorfield_module.py
+++ b/src/sage/manifolds/differentiable/vectorfield_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Vector Field Modules
diff --git a/src/sage/manifolds/differentiable/vectorframe.py b/src/sage/manifolds/differentiable/vectorframe.py
index 539c08b8050..fd6d9544016 100644
--- a/src/sage/manifolds/differentiable/vectorframe.py
+++ b/src/sage/manifolds/differentiable/vectorframe.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Vector Frames
diff --git a/src/sage/manifolds/family.py b/src/sage/manifolds/family.py
index 61c74f54469..7fe5c67d396 100644
--- a/src/sage/manifolds/family.py
+++ b/src/sage/manifolds/family.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Families of Manifold Objects
diff --git a/src/sage/manifolds/local_frame.py b/src/sage/manifolds/local_frame.py
index fffe607efda..1cc02af1a0f 100644
--- a/src/sage/manifolds/local_frame.py
+++ b/src/sage/manifolds/local_frame.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Local Frames
diff --git a/src/sage/manifolds/manifold.py b/src/sage/manifolds/manifold.py
index 0e09530ad54..2da8c991fb2 100644
--- a/src/sage/manifolds/manifold.py
+++ b/src/sage/manifolds/manifold.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Topological Manifolds
diff --git a/src/sage/manifolds/manifold_homset.py b/src/sage/manifolds/manifold_homset.py
index 71773c5d3ce..9458f7d286e 100644
--- a/src/sage/manifolds/manifold_homset.py
+++ b/src/sage/manifolds/manifold_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Sets of Morphisms between Topological Manifolds
diff --git a/src/sage/manifolds/operators.py b/src/sage/manifolds/operators.py
index dae39bdcad2..1982ca9c0d3 100644
--- a/src/sage/manifolds/operators.py
+++ b/src/sage/manifolds/operators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Operators for vector calculus
diff --git a/src/sage/manifolds/point.py b/src/sage/manifolds/point.py
index ff0009db15b..7191edb1fd1 100644
--- a/src/sage/manifolds/point.py
+++ b/src/sage/manifolds/point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Points of Topological Manifolds
diff --git a/src/sage/manifolds/scalarfield.py b/src/sage/manifolds/scalarfield.py
index 1cc865564fc..c394589ee12 100644
--- a/src/sage/manifolds/scalarfield.py
+++ b/src/sage/manifolds/scalarfield.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Scalar Fields
diff --git a/src/sage/manifolds/scalarfield_algebra.py b/src/sage/manifolds/scalarfield_algebra.py
index f8573b8f635..9c1a4b36be1 100644
--- a/src/sage/manifolds/scalarfield_algebra.py
+++ b/src/sage/manifolds/scalarfield_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Algebra of Scalar Fields
diff --git a/src/sage/manifolds/section.py b/src/sage/manifolds/section.py
index e48b2b5ee29..76bf19fc34e 100644
--- a/src/sage/manifolds/section.py
+++ b/src/sage/manifolds/section.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Sections
diff --git a/src/sage/manifolds/section_module.py b/src/sage/manifolds/section_module.py
index 975113ca2c9..0fcbb87a884 100644
--- a/src/sage/manifolds/section_module.py
+++ b/src/sage/manifolds/section_module.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Section Modules
diff --git a/src/sage/manifolds/structure.py b/src/sage/manifolds/structure.py
index dd9fc2a3f8a..8fae887fa7d 100644
--- a/src/sage/manifolds/structure.py
+++ b/src/sage/manifolds/structure.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Manifold Structures
diff --git a/src/sage/manifolds/subset.py b/src/sage/manifolds/subset.py
index d6de3069a6f..b55f405b0bd 100644
--- a/src/sage/manifolds/subset.py
+++ b/src/sage/manifolds/subset.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Subsets of Topological Manifolds
diff --git a/src/sage/manifolds/subsets/all.py b/src/sage/manifolds/subsets/all.py
index e69de29bb2d..332eaf1cdb6 100644
--- a/src/sage/manifolds/subsets/all.py
+++ b/src/sage/manifolds/subsets/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-symbolics
diff --git a/src/sage/manifolds/subsets/closure.py b/src/sage/manifolds/subsets/closure.py
index 4a5c056ef68..965cc576b2f 100644
--- a/src/sage/manifolds/subsets/closure.py
+++ b/src/sage/manifolds/subsets/closure.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Topological Closures of Manifold Subsets
diff --git a/src/sage/manifolds/subsets/pullback.py b/src/sage/manifolds/subsets/pullback.py
index 6ab4a28059f..2804aa0ca17 100644
--- a/src/sage/manifolds/subsets/pullback.py
+++ b/src/sage/manifolds/subsets/pullback.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Manifold Subsets Defined as Pullbacks of Subsets under Continuous Maps
"""
diff --git a/src/sage/manifolds/topological_submanifold.py b/src/sage/manifolds/topological_submanifold.py
index 9b722907152..b2685c77f5e 100644
--- a/src/sage/manifolds/topological_submanifold.py
+++ b/src/sage/manifolds/topological_submanifold.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Submanifolds of topological manifolds
diff --git a/src/sage/manifolds/trivialization.py b/src/sage/manifolds/trivialization.py
index ed3a8b4ed9f..3246eee3fdc 100644
--- a/src/sage/manifolds/trivialization.py
+++ b/src/sage/manifolds/trivialization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Trivializations
diff --git a/src/sage/manifolds/utilities.py b/src/sage/manifolds/utilities.py
index 20bac910900..83b040ac202 100644
--- a/src/sage/manifolds/utilities.py
+++ b/src/sage/manifolds/utilities.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Utilities for Calculus
diff --git a/src/sage/manifolds/vector_bundle.py b/src/sage/manifolds/vector_bundle.py
index b851fa64fe7..9e4315e7069 100644
--- a/src/sage/manifolds/vector_bundle.py
+++ b/src/sage/manifolds/vector_bundle.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
r"""
Topological Vector Bundle
diff --git a/src/sage/manifolds/vector_bundle_fiber.py b/src/sage/manifolds/vector_bundle_fiber.py
index 90a59e97169..0e3feb4a9b8 100644
--- a/src/sage/manifolds/vector_bundle_fiber.py
+++ b/src/sage/manifolds/vector_bundle_fiber.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Vector Bundle Fibers
diff --git a/src/sage/manifolds/vector_bundle_fiber_element.py b/src/sage/manifolds/vector_bundle_fiber_element.py
index 048275a8495..010846ec488 100644
--- a/src/sage/manifolds/vector_bundle_fiber_element.py
+++ b/src/sage/manifolds/vector_bundle_fiber_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Vector Bundle Fiber Elements
diff --git a/src/sage/matrix/action.pxd b/src/sage/matrix/action.pxd
index d50965dc8f5..befbb54c2d1 100644
--- a/src/sage/matrix/action.pxd
+++ b/src/sage/matrix/action.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport Element, Matrix, Vector
from sage.structure.parent cimport Parent
from sage.categories.action cimport Action
diff --git a/src/sage/matrix/action.pyx b/src/sage/matrix/action.pyx
index 0db343c9eed..d538369f57d 100644
--- a/src/sage/matrix/action.pyx
+++ b/src/sage/matrix/action.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Actions used by the coercion model for matrix and vector multiplications
diff --git a/src/sage/matrix/all.py b/src/sage/matrix/all.py
index 041624f3853..1e1b590dad6 100644
--- a/src/sage/matrix/all.py
+++ b/src/sage/matrix/all.py
@@ -1,7 +1,9 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
-from .matrix_space import MatrixSpace
-from .constructor import (matrix, Matrix, column_matrix, random_matrix,
- diagonal_matrix, identity_matrix, block_matrix,
- block_diagonal_matrix, jordan_block, zero_matrix,
- ones_matrix, elementary_matrix, companion_matrix)
+from sage.matrix.matrix_space import MatrixSpace
+from sage.matrix.constructor import (matrix, Matrix, column_matrix, random_matrix,
+ diagonal_matrix, identity_matrix, block_matrix,
+ block_diagonal_matrix, jordan_block, zero_matrix,
+ ones_matrix, elementary_matrix, companion_matrix)
Mat = MatrixSpace
+del lazy_import
diff --git a/src/sage/matrix/all__sagemath_flint.py b/src/sage/matrix/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/all__sagemath_gap.py b/src/sage/matrix/all__sagemath_gap.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/all__sagemath_linbox.py b/src/sage/matrix/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/all__sagemath_meataxe.py b/src/sage/matrix/all__sagemath_meataxe.py
index e69de29bb2d..fd1e327ee2f 100644
--- a/src/sage/matrix/all__sagemath_meataxe.py
+++ b/src/sage/matrix/all__sagemath_meataxe.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-meataxe
diff --git a/src/sage/matrix/all__sagemath_ntl.py b/src/sage/matrix/all__sagemath_ntl.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/all__sagemath_singular.py b/src/sage/matrix/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/all__sagemath_symbolics.py b/src/sage/matrix/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/args.pxd b/src/sage/matrix/args.pxd
index 9ab004e1887..ad840522297 100644
--- a/src/sage/matrix/args.pxd
+++ b/src/sage/matrix/args.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from cpython.object cimport PyObject
from sage.structure.element cimport Element, Matrix
from sage.structure.parent cimport Parent
diff --git a/src/sage/matrix/args.pyx b/src/sage/matrix/args.pyx
index 6e272858156..fa496a05de8 100644
--- a/src/sage/matrix/args.pyx
+++ b/src/sage/matrix/args.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# cython: wraparound=False
# cython: boundscheck=False
"""
diff --git a/src/sage/matrix/benchmark.py b/src/sage/matrix/benchmark.py
index 5e29a19f48c..fd316cdc532 100644
--- a/src/sage/matrix/benchmark.py
+++ b/src/sage/matrix/benchmark.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.flint
"""
Benchmarks for matrices
diff --git a/src/sage/matrix/berlekamp_massey.py b/src/sage/matrix/berlekamp_massey.py
index a6fe70c50e6..d84969d556c 100644
--- a/src/sage/matrix/berlekamp_massey.py
+++ b/src/sage/matrix/berlekamp_massey.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Minimal Polynomials of Linear Recurrence Sequences
diff --git a/src/sage/matrix/change_ring.pyx b/src/sage/matrix/change_ring.pyx
index f942b753275..7a26f2a0efa 100644
--- a/src/sage/matrix/change_ring.pyx
+++ b/src/sage/matrix/change_ring.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
"""
Functions for changing the base ring of matrices quickly
"""
diff --git a/src/sage/matrix/compute_J_ideal.py b/src/sage/matrix/compute_J_ideal.py
index f7005c04d31..2f1aac2164b 100644
--- a/src/sage/matrix/compute_J_ideal.py
+++ b/src/sage/matrix/compute_J_ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.libs.pari (for charpoly, minimal_polynomial in __init__)
r"""
`J`-ideals of matrices
diff --git a/src/sage/matrix/constructor.pyx b/src/sage/matrix/constructor.pyx
index d7b209b93ca..c35c84468d7 100644
--- a/src/sage/matrix/constructor.pyx
+++ b/src/sage/matrix/constructor.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# cython: binding=True
"""
General matrix Constructor and display options
diff --git a/src/sage/matrix/docs.py b/src/sage/matrix/docs.py
index 6a76d6fb331..8667e053d1f 100644
--- a/src/sage/matrix/docs.py
+++ b/src/sage/matrix/docs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Matrices over an arbitrary ring
diff --git a/src/sage/matrix/echelon_matrix.pyx b/src/sage/matrix/echelon_matrix.pyx
index 7f5457a7f7b..b544211f8b2 100644
--- a/src/sage/matrix/echelon_matrix.pyx
+++ b/src/sage/matrix/echelon_matrix.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Echelon matrices over finite fields.
"""
diff --git a/src/sage/matrix/matrix.pxd b/src/sage/matrix/matrix.pxd
index b67ed5b4969..7899379dc45 100644
--- a/src/sage/matrix/matrix.pxd
+++ b/src/sage/matrix/matrix.pxd
@@ -1 +1,2 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix2 cimport Matrix
diff --git a/src/sage/matrix/matrix0.pxd b/src/sage/matrix/matrix0.pxd
index c18c7cdc4a3..3be1da7c607 100644
--- a/src/sage/matrix/matrix0.pxd
+++ b/src/sage/matrix/matrix0.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Generic matrices
"""
diff --git a/src/sage/matrix/matrix0.pyx b/src/sage/matrix/matrix0.pyx
index 3dc47b9df07..26311b91ee8 100644
--- a/src/sage/matrix/matrix0.pyx
+++ b/src/sage/matrix/matrix0.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
"""
Base class for matrices, part 0
diff --git a/src/sage/matrix/matrix1.pxd b/src/sage/matrix/matrix1.pxd
index d24468b80e1..72226127f27 100644
--- a/src/sage/matrix/matrix1.pxd
+++ b/src/sage/matrix/matrix1.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix0 cimport Matrix as Matrix0
cdef class Matrix(Matrix0):
diff --git a/src/sage/matrix/matrix1.pyx b/src/sage/matrix/matrix1.pyx
index d446030473f..e1dd532b21a 100644
--- a/src/sage/matrix/matrix1.pyx
+++ b/src/sage/matrix/matrix1.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Base class for matrices, part 1
diff --git a/src/sage/matrix/matrix2.pxd b/src/sage/matrix/matrix2.pxd
index a2e0297228c..dc1104dfdbe 100644
--- a/src/sage/matrix/matrix2.pxd
+++ b/src/sage/matrix/matrix2.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Generic matrices
"""
diff --git a/src/sage/matrix/matrix2.pyx b/src/sage/matrix/matrix2.pyx
index c3f621ec8ef..608b9fd47bd 100644
--- a/src/sage/matrix/matrix2.pyx
+++ b/src/sage/matrix/matrix2.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Base class for matrices, part 2
@@ -9964,6 +9965,33 @@ cdef class Matrix(Matrix1):
chi = self.charpoly()
return chi.is_monomial()
+ def is_semisimple(self) -> bool:
+ r"""
+ Return if ``self`` is semisimple.
+
+ A (square) matrix `A` is *semisimple* if the
+ :meth:`minimal polynomial ` of `A` is sqaure-free.
+
+ If `A` represents a linear map from `F^n \to F^n` for some field `F`,
+ then this is equivalent to every `A`-invariant subspace of `F^n`
+ has a complementary `A`-invariant subspace. This is also equivalent
+ to saying the matrix is diagonalizable over `\bar{F}`, the algebraic
+ closure of `F`.
+
+ EXAMPLES::
+
+ sage: A = matrix([[0, -1], [1, 0]]); A
+ [ 0 -1]
+ [ 1 0]
+ sage: A.is_semisimple()
+ True
+ sage: A.change_ring(QQ).is_diagonalizable()
+ False
+ sage: A.change_ring(CyclotomicField(4)).is_diagonalizable()
+ True
+ """
+ return self.minpoly().is_squarefree()
+
def as_sum_of_permutations(self):
r"""
Returns the current matrix as a sum of permutation matrices
@@ -11660,6 +11688,95 @@ cdef class Matrix(Matrix1):
else:
return J
+ def jordan_decomposition(self):
+ r"""
+ Return the Jordan decomposition of ``self``.
+
+ The Jordan decomposition of a matrix `A` is a pair of
+ matrices `(S, N)` such that
+
+ - `A = S + N`,
+ - `S` is semisimple,
+ - `N` is nilpotent.
+
+ EXAMPLES::
+
+ sage: A = matrix(QQ, 5, 5, {(0,1): -1, (1,0): 1, (2,3): -1}); A
+ [ 0 -1 0 0 0]
+ [ 1 0 0 0 0]
+ [ 0 0 0 -1 0]
+ [ 0 0 0 0 0]
+ [ 0 0 0 0 0]
+ sage: S, N = A.jordan_decomposition()
+ sage: S
+ [ 0 -1 0 0 0]
+ [ 1 0 0 0 0]
+ [ 0 0 0 0 0]
+ [ 0 0 0 0 0]
+ [ 0 0 0 0 0]
+ sage: N
+ [ 0 0 0 0 0]
+ [ 0 0 0 0 0]
+ [ 0 0 0 -1 0]
+ [ 0 0 0 0 0]
+ [ 0 0 0 0 0]
+ sage: A == S + N
+ True
+ sage: S.is_semisimple()
+ True
+ sage: N.is_nilpotent()
+ True
+ sage: A.jordan_form()
+ Traceback (most recent call last):
+ ...
+ RuntimeError: Some eigenvalue does not exist in Rational Field.
+
+ TESTS::
+
+ sage: X = random_matrix(QQ, 4)
+ sage: S, N = X.jordan_decomposition()
+ sage: X == S + N
+ True
+ sage: S is X.jordan_decomposition()[0] # result is cached
+ True
+ sage: N is X.jordan_decomposition()[1] # result is cached
+ True
+ sage: A = matrix(ZZ, 5, 5, {(0,1): -1, (1,0): 1, (2,3): -1})
+ sage: A.jordan_decomposition()
+ Traceback (most recent call last):
+ ...
+ ValueError: unable to compute Jordan decomposition
+ sage: B = A.change_ring(RR)
+ sage: B.jordan_decomposition()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: Jordan decomposition not implemented over inexact rings
+ """
+ if not self.base_ring().is_exact():
+ raise NotImplementedError("Jordan decomposition not implemented over inexact rings")
+ JD = self.fetch('jordan_decomposition')
+ if JD is not None:
+ return JD
+ f = self.minpoly()
+ h = f // f.gcd(f.diff())
+ o, p, q = h.xgcd(h.diff())
+ if not o.is_one():
+ raise ValueError("unable to compute Jordan decomposition")
+ A = self
+ hq = h * q
+ # very bad bound, but requires no extra computation
+ # a better bound is the maximum multiplicity in the minpoly,
+ # but this requires factoring the minpoly
+ for _ in range(self.nrows()):
+ if not h(A):
+ ret = (A, self - A)
+ ret[0].set_immutable()
+ ret[1].set_immutable()
+ self.cache('jordan_decomposition', ret)
+ return ret
+ A -= hq(A)
+ raise ValueError("Jordan decomposition does not exist")
+
def diagonalization(self, base_field=None):
"""
Return a diagonal matrix similar to ``self`` along with the
diff --git a/src/sage/matrix/matrix_cdv.pxd b/src/sage/matrix/matrix_cdv.pxd
index f7684da49f2..fb7f4b29b60 100644
--- a/src/sage/matrix/matrix_cdv.pxd
+++ b/src/sage/matrix/matrix_cdv.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
cpdef hessenbergize_cdvf(Matrix_generic_dense)
diff --git a/src/sage/matrix/matrix_cdv.pyx b/src/sage/matrix/matrix_cdv.pyx
index 7a6b1887518..a035e52b16a 100644
--- a/src/sage/matrix/matrix_cdv.pyx
+++ b/src/sage/matrix/matrix_cdv.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Special methods for matrices over discrete valuation rings/fields.
"""
diff --git a/src/sage/matrix/matrix_complex_ball_dense.pxd b/src/sage/matrix/matrix_complex_ball_dense.pxd
index effa0413026..9d901f1c65c 100644
--- a/src/sage/matrix/matrix_complex_ball_dense.pxd
+++ b/src/sage/matrix/matrix_complex_ball_dense.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
from sage.libs.flint.types cimport acb_mat_t
from sage.matrix.matrix_dense cimport Matrix_dense
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
diff --git a/src/sage/matrix/matrix_complex_ball_dense.pyx b/src/sage/matrix/matrix_complex_ball_dense.pyx
index 07857217309..9888f4b7f33 100644
--- a/src/sage/matrix/matrix_complex_ball_dense.pyx
+++ b/src/sage/matrix/matrix_complex_ball_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
r"""
Arbitrary precision complex ball matrices
diff --git a/src/sage/matrix/matrix_complex_double_dense.pxd b/src/sage/matrix/matrix_complex_double_dense.pxd
index a9041564e43..1626912bb9d 100644
--- a/src/sage/matrix/matrix_complex_double_dense.pxd
+++ b/src/sage/matrix/matrix_complex_double_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_double_dense cimport Matrix_double_dense
cdef class Matrix_complex_double_dense(Matrix_double_dense):
diff --git a/src/sage/matrix/matrix_complex_double_dense.pyx b/src/sage/matrix/matrix_complex_double_dense.pyx
index b86516fd121..e499dd9fa97 100644
--- a/src/sage/matrix/matrix_complex_double_dense.pyx
+++ b/src/sage/matrix/matrix_complex_double_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
"""
Dense matrices over the Complex Double Field using NumPy
diff --git a/src/sage/matrix/matrix_cyclo_dense.pxd b/src/sage/matrix/matrix_cyclo_dense.pxd
index 13f72389cf5..3a1eaaea796 100644
--- a/src/sage/matrix/matrix_cyclo_dense.pxd
+++ b/src/sage/matrix/matrix_cyclo_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from sage.libs.gmp.types cimport mpz_t
from sage.matrix.matrix_dense cimport Matrix_dense
from sage.matrix.matrix_rational_dense cimport Matrix_rational_dense
diff --git a/src/sage/matrix/matrix_cyclo_dense.pyx b/src/sage/matrix/matrix_cyclo_dense.pyx
index 8bffbb905d8..52c4fabac5d 100644
--- a/src/sage/matrix/matrix_cyclo_dense.pyx
+++ b/src/sage/matrix/matrix_cyclo_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: language = c++
# distutils: libraries = NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/matrix/matrix_dense.pxd b/src/sage/matrix/matrix_dense.pxd
index 30c3effe02a..f8da138b44c 100644
--- a/src/sage/matrix/matrix_dense.pxd
+++ b/src/sage/matrix/matrix_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix cimport Matrix
cdef class Matrix_dense(Matrix):
diff --git a/src/sage/matrix/matrix_dense.pyx b/src/sage/matrix/matrix_dense.pyx
index a954dde39d2..caebc788af1 100644
--- a/src/sage/matrix/matrix_dense.pyx
+++ b/src/sage/matrix/matrix_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Base class for dense matrices
diff --git a/src/sage/matrix/matrix_domain_dense.pxd b/src/sage/matrix/matrix_domain_dense.pxd
index 8a6e487c493..f924ac01457 100644
--- a/src/sage/matrix/matrix_domain_dense.pxd
+++ b/src/sage/matrix/matrix_domain_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix cimport Matrix
cdef class Matrix_domain_dense(Matrix):
diff --git a/src/sage/matrix/matrix_domain_sparse.pxd b/src/sage/matrix/matrix_domain_sparse.pxd
index c5882238632..2c95dd4f418 100644
--- a/src/sage/matrix/matrix_domain_sparse.pxd
+++ b/src/sage/matrix/matrix_domain_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix cimport Matrix
cdef class Matrix_domain_sparse(Matrix):
diff --git a/src/sage/matrix/matrix_double_dense.pxd b/src/sage/matrix/matrix_double_dense.pxd
index 3f2cb525b10..ac4ee7ce6b7 100644
--- a/src/sage/matrix/matrix_double_dense.pxd
+++ b/src/sage/matrix/matrix_double_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_numpy_dense cimport Matrix_numpy_dense
diff --git a/src/sage/matrix/matrix_double_dense.pyx b/src/sage/matrix/matrix_double_dense.pyx
index 31a03fb7e28..3544adc96cc 100644
--- a/src/sage/matrix/matrix_double_dense.pyx
+++ b/src/sage/matrix/matrix_double_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
"""
Dense matrices using a NumPy backend
diff --git a/src/sage/matrix/matrix_double_sparse.pxd b/src/sage/matrix/matrix_double_sparse.pxd
index 0a292404338..ce2502bdc53 100644
--- a/src/sage/matrix/matrix_double_sparse.pxd
+++ b/src/sage/matrix/matrix_double_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_generic_sparse cimport Matrix_generic_sparse
diff --git a/src/sage/matrix/matrix_double_sparse.pyx b/src/sage/matrix/matrix_double_sparse.pyx
index cac826d7777..f1ffd1bb8fb 100644
--- a/src/sage/matrix/matrix_double_sparse.pyx
+++ b/src/sage/matrix/matrix_double_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix2 cimport Matrix
from sage.matrix.matrix_generic_sparse cimport Matrix_generic_sparse
diff --git a/src/sage/matrix/matrix_gap.pxd b/src/sage/matrix/matrix_gap.pxd
index f378adbfc2a..19674a56d0a 100644
--- a/src/sage/matrix/matrix_gap.pxd
+++ b/src/sage/matrix/matrix_gap.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
from sage.matrix.matrix_dense cimport Matrix_dense
from sage.libs.gap.element cimport GapElement
diff --git a/src/sage/matrix/matrix_gap.pyx b/src/sage/matrix/matrix_gap.pyx
index f5a6e1d10e7..b4294c4f7ed 100644
--- a/src/sage/matrix/matrix_gap.pyx
+++ b/src/sage/matrix/matrix_gap.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
r"""
Wrappers on GAP matrices
"""
diff --git a/src/sage/matrix/matrix_generic_dense.pxd b/src/sage/matrix/matrix_generic_dense.pxd
index ba37428cb1f..c81e2f6f8a1 100644
--- a/src/sage/matrix/matrix_generic_dense.pxd
+++ b/src/sage/matrix/matrix_generic_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_dense cimport Matrix_dense
diff --git a/src/sage/matrix/matrix_generic_dense.pyx b/src/sage/matrix/matrix_generic_dense.pyx
index 441138560b0..1720ef12da1 100644
--- a/src/sage/matrix/matrix_generic_dense.pyx
+++ b/src/sage/matrix/matrix_generic_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Dense Matrices over a general ring
"""
diff --git a/src/sage/matrix/matrix_generic_sparse.pxd b/src/sage/matrix/matrix_generic_sparse.pxd
index 461fb38e18b..f674a3b3a56 100644
--- a/src/sage/matrix/matrix_generic_sparse.pxd
+++ b/src/sage/matrix/matrix_generic_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_sparse cimport Matrix_sparse
diff --git a/src/sage/matrix/matrix_generic_sparse.pyx b/src/sage/matrix/matrix_generic_sparse.pyx
index 055746a8664..0d5583f25d7 100644
--- a/src/sage/matrix/matrix_generic_sparse.pyx
+++ b/src/sage/matrix/matrix_generic_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Sparse Matrices over a general ring
diff --git a/src/sage/matrix/matrix_gf2e_dense.pxd b/src/sage/matrix/matrix_gf2e_dense.pxd
index dcd1019f230..9357616496b 100644
--- a/src/sage/matrix/matrix_gf2e_dense.pxd
+++ b/src/sage/matrix/matrix_gf2e_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from sage.libs.m4rie cimport mzed_t
from sage.libs.m4ri cimport m4ri_word
from sage.matrix.matrix_dense cimport Matrix_dense
diff --git a/src/sage/matrix/matrix_gf2e_dense.pyx b/src/sage/matrix/matrix_gf2e_dense.pyx
index a089770ef4c..15e8328b1c7 100644
--- a/src/sage/matrix/matrix_gf2e_dense.pyx
+++ b/src/sage/matrix/matrix_gf2e_dense.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = m4rie M4RI_LIBRARIES m
# distutils: library_dirs = M4RI_LIBDIR
# distutils: include_dirs = M4RI_INCDIR
diff --git a/src/sage/matrix/matrix_integer_dense.pxd b/src/sage/matrix/matrix_integer_dense.pxd
index c60b4422e97..d644241bbc3 100644
--- a/src/sage/matrix/matrix_integer_dense.pxd
+++ b/src/sage/matrix/matrix_integer_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.gmp.types cimport *
from sage.libs.flint.types cimport fmpz_mat_t
diff --git a/src/sage/matrix/matrix_integer_dense.pyx b/src/sage/matrix/matrix_integer_dense.pyx
index e06e5af4c35..26e5af5bf0c 100644
--- a/src/sage/matrix/matrix_integer_dense.pyx
+++ b/src/sage/matrix/matrix_integer_dense.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-linbox
# distutils: extra_compile_args = NTL_CFLAGS M4RI_CFLAGS
# distutils: libraries = iml NTL_LIBRARIES gmp m CBLAS_LIBRARIES
# distutils: library_dirs = NTL_LIBDIR CBLAS_LIBDIR
diff --git a/src/sage/matrix/matrix_integer_dense_hnf.py b/src/sage/matrix/matrix_integer_dense_hnf.py
index 30db173966f..829746c0e00 100644
--- a/src/sage/matrix/matrix_integer_dense_hnf.py
+++ b/src/sage/matrix/matrix_integer_dense_hnf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
"""
Modular algorithm to compute Hermite normal forms of integer matrices
diff --git a/src/sage/matrix/matrix_integer_dense_saturation.py b/src/sage/matrix/matrix_integer_dense_saturation.py
index 65d3cc66495..75d645f0e51 100644
--- a/src/sage/matrix/matrix_integer_dense_saturation.py
+++ b/src/sage/matrix/matrix_integer_dense_saturation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
"""
Saturation over ZZ
"""
diff --git a/src/sage/matrix/matrix_integer_sparse.pxd b/src/sage/matrix/matrix_integer_sparse.pxd
index fbfa9c9a793..6d2ad42805e 100644
--- a/src/sage/matrix/matrix_integer_sparse.pxd
+++ b/src/sage/matrix/matrix_integer_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.modules.vector_integer_sparse cimport mpz_vector
from sage.ext.mod_int cimport mod_int
from sage.matrix.matrix_sparse cimport Matrix_sparse
diff --git a/src/sage/matrix/matrix_integer_sparse.pyx b/src/sage/matrix/matrix_integer_sparse.pyx
index 31c6c1e9d1a..c068a55b35d 100644
--- a/src/sage/matrix/matrix_integer_sparse.pyx
+++ b/src/sage/matrix/matrix_integer_sparse.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-linbox
r"""
Sparse integer matrices
diff --git a/src/sage/matrix/matrix_laurent_mpolynomial_dense.pxd b/src/sage/matrix/matrix_laurent_mpolynomial_dense.pxd
index 2a1170d0bc5..5edd4f07346 100644
--- a/src/sage/matrix/matrix_laurent_mpolynomial_dense.pxd
+++ b/src/sage/matrix/matrix_laurent_mpolynomial_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
cdef class Matrix_Laurent_mpolynomial_dense(Matrix_generic_dense):
diff --git a/src/sage/matrix/matrix_laurent_mpolynomial_dense.pyx b/src/sage/matrix/matrix_laurent_mpolynomial_dense.pyx
index 1f345a68ba6..d7877f812da 100644
--- a/src/sage/matrix/matrix_laurent_mpolynomial_dense.pyx
+++ b/src/sage/matrix/matrix_laurent_mpolynomial_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Dense matrices over multivariate polynomials over fields.
diff --git a/src/sage/matrix/matrix_misc.py b/src/sage/matrix/matrix_misc.py
index 84ddd3819c7..9b464fa65c2 100644
--- a/src/sage/matrix/matrix_misc.py
+++ b/src/sage/matrix/matrix_misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Miscellaneous matrix functions
diff --git a/src/sage/matrix/matrix_mod2_dense.pxd b/src/sage/matrix/matrix_mod2_dense.pxd
index ea3575ef3be..7844c8d1e34 100644
--- a/src/sage/matrix/matrix_mod2_dense.pxd
+++ b/src/sage/matrix/matrix_mod2_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from .matrix_dense cimport Matrix_dense
from sage.libs.m4ri cimport *
diff --git a/src/sage/matrix/matrix_mod2_dense.pyx b/src/sage/matrix/matrix_mod2_dense.pyx
index f7689c60b07..afdee68abe3 100644
--- a/src/sage/matrix/matrix_mod2_dense.pyx
+++ b/src/sage/matrix/matrix_mod2_dense.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = M4RI_LIBRARIES GDLIB_LIBRARIES LIBPNG_LIBRARIES ZLIB_LIBRARIES
# distutils: library_dirs = M4RI_LIBDIR GDLIB_LIBDIR LIBPNG_LIBDIR ZLIB_LIBDIR
# distutils: include_dirs = M4RI_INCDIR GDLIB_INCDIR LIBPNG_INCDIR ZLIB_INCDIR
diff --git a/src/sage/matrix/matrix_modn_dense_double.pxd b/src/sage/matrix/matrix_modn_dense_double.pxd
index 8cea9f2993b..33e60ee9660 100644
--- a/src/sage/matrix/matrix_modn_dense_double.pxd
+++ b/src/sage/matrix/matrix_modn_dense_double.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
ctypedef double celement
include "matrix_modn_dense_template_header.pxi"
diff --git a/src/sage/matrix/matrix_modn_dense_double.pyx b/src/sage/matrix/matrix_modn_dense_double.pyx
index b112ffba912..902339e81e5 100644
--- a/src/sage/matrix/matrix_modn_dense_double.pyx
+++ b/src/sage/matrix/matrix_modn_dense_double.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: language = c++
# distutils: libraries = CBLAS_LIBRARIES
# distutils: library_dirs = CBLAS_LIBDIR
diff --git a/src/sage/matrix/matrix_modn_dense_float.pxd b/src/sage/matrix/matrix_modn_dense_float.pxd
index 697e1e79e57..99d9e4ed1ca 100644
--- a/src/sage/matrix/matrix_modn_dense_float.pxd
+++ b/src/sage/matrix/matrix_modn_dense_float.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
ctypedef float celement
include "matrix_modn_dense_template_header.pxi"
diff --git a/src/sage/matrix/matrix_modn_dense_float.pyx b/src/sage/matrix/matrix_modn_dense_float.pyx
index 73fbe175d95..fd216c68386 100644
--- a/src/sage/matrix/matrix_modn_dense_float.pyx
+++ b/src/sage/matrix/matrix_modn_dense_float.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: language = c++
# distutils: libraries = CBLAS_LIBRARIES
# distutils: library_dirs = CBLAS_LIBDIR
diff --git a/src/sage/matrix/matrix_modn_dense_template.pxi b/src/sage/matrix/matrix_modn_dense_template.pxi
index 08f01205da1..a0b83d63875 100644
--- a/src/sage/matrix/matrix_modn_dense_template.pxi
+++ b/src/sage/matrix/matrix_modn_dense_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
r"""
Dense matrices over `\ZZ/n\ZZ` for `n` small using the LinBox library (FFLAS/FFPACK)
diff --git a/src/sage/matrix/matrix_modn_dense_template_header.pxi b/src/sage/matrix/matrix_modn_dense_template_header.pxi
index b5f12c69397..90ca36aaedd 100644
--- a/src/sage/matrix/matrix_modn_dense_template_header.pxi
+++ b/src/sage/matrix/matrix_modn_dense_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
"""
Dense Matrix Template for C/C++ Library Interfaces
"""
diff --git a/src/sage/matrix/matrix_modn_sparse.pxd b/src/sage/matrix/matrix_modn_sparse.pxd
index dded069b3d8..c808458ab3a 100644
--- a/src/sage/matrix/matrix_modn_sparse.pxd
+++ b/src/sage/matrix/matrix_modn_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.matrix.matrix_sparse cimport Matrix_sparse
from sage.modules.vector_modn_sparse cimport *
diff --git a/src/sage/matrix/matrix_modn_sparse.pyx b/src/sage/matrix/matrix_modn_sparse.pyx
index bffe9c31aa1..c7984d5a222 100644
--- a/src/sage/matrix/matrix_modn_sparse.pyx
+++ b/src/sage/matrix/matrix_modn_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
r"""
Sparse matrices over `\ZZ/n\ZZ` for `n` small
diff --git a/src/sage/matrix/matrix_mpolynomial_dense.pxd b/src/sage/matrix/matrix_mpolynomial_dense.pxd
index e4d70ba9dd0..0a4891f5e18 100644
--- a/src/sage/matrix/matrix_mpolynomial_dense.pxd
+++ b/src/sage/matrix/matrix_mpolynomial_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
from sage.libs.singular.decl cimport ideal
diff --git a/src/sage/matrix/matrix_mpolynomial_dense.pyx b/src/sage/matrix/matrix_mpolynomial_dense.pyx
index 5b4e1c398ee..ec982d1f411 100644
--- a/src/sage/matrix/matrix_mpolynomial_dense.pyx
+++ b/src/sage/matrix/matrix_mpolynomial_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Dense matrices over multivariate polynomials over fields
diff --git a/src/sage/matrix/matrix_numpy_dense.pxd b/src/sage/matrix/matrix_numpy_dense.pxd
index 4fe2c65e0fc..2218cbc7b70 100644
--- a/src/sage/matrix/matrix_numpy_dense.pxd
+++ b/src/sage/matrix/matrix_numpy_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cimport numpy as cnumpy
from sage.matrix.matrix_dense cimport Matrix_dense
diff --git a/src/sage/matrix/matrix_numpy_dense.pyx b/src/sage/matrix/matrix_numpy_dense.pyx
index 401f115ed78..725f36ce34c 100644
--- a/src/sage/matrix/matrix_numpy_dense.pyx
+++ b/src/sage/matrix/matrix_numpy_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
"""
Dense matrices using a NumPy backend
diff --git a/src/sage/matrix/matrix_numpy_integer_dense.pxd b/src/sage/matrix/matrix_numpy_integer_dense.pxd
index 3116f89d8e2..6d63f9808e4 100644
--- a/src/sage/matrix/matrix_numpy_integer_dense.pxd
+++ b/src/sage/matrix/matrix_numpy_integer_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_numpy_dense cimport Matrix_numpy_dense
diff --git a/src/sage/matrix/matrix_numpy_integer_dense.pyx b/src/sage/matrix/matrix_numpy_integer_dense.pyx
index 8c449a86abf..d09f354195a 100644
--- a/src/sage/matrix/matrix_numpy_integer_dense.pyx
+++ b/src/sage/matrix/matrix_numpy_integer_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Dense integer matrices using a NumPy backend
diff --git a/src/sage/matrix/matrix_polynomial_dense.pxd b/src/sage/matrix/matrix_polynomial_dense.pxd
index 14caadea50c..1ed11b24e3c 100644
--- a/src/sage/matrix/matrix_polynomial_dense.pxd
+++ b/src/sage/matrix/matrix_polynomial_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
cdef class Matrix_polynomial_dense(Matrix_generic_dense):
diff --git a/src/sage/matrix/matrix_polynomial_dense.pyx b/src/sage/matrix/matrix_polynomial_dense.pyx
index 7c0c1cd71eb..54c2983eca9 100644
--- a/src/sage/matrix/matrix_polynomial_dense.pyx
+++ b/src/sage/matrix/matrix_polynomial_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Dense matrices over univariate polynomials over fields
diff --git a/src/sage/matrix/matrix_rational_dense.pxd b/src/sage/matrix/matrix_rational_dense.pxd
index d2d9955fefc..0f196e53f9e 100644
--- a/src/sage/matrix/matrix_rational_dense.pxd
+++ b/src/sage/matrix/matrix_rational_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.flint.types cimport fmpz_t, fmpq_mat_t
from sage.matrix.matrix_dense cimport Matrix_dense
diff --git a/src/sage/matrix/matrix_rational_dense.pyx b/src/sage/matrix/matrix_rational_dense.pyx
index 7b6067892de..d44e223147e 100644
--- a/src/sage/matrix/matrix_rational_dense.pyx
+++ b/src/sage/matrix/matrix_rational_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: extra_compile_args = -D_XPG6 NTL_CFLAGS M4RI_CFLAGS
# distutils: extra_link_args = NTL_LIBEXTRA
# distutils: libraries = iml NTL_LIBRARIES m CBLAS_LIBRARIES
diff --git a/src/sage/matrix/matrix_rational_sparse.pxd b/src/sage/matrix/matrix_rational_sparse.pxd
index c754850bee9..e6753ac0f4d 100644
--- a/src/sage/matrix/matrix_rational_sparse.pxd
+++ b/src/sage/matrix/matrix_rational_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.gmp.types cimport mpz_t
from sage.modules.vector_rational_sparse cimport mpq_vector
from sage.matrix.matrix_sparse cimport Matrix_sparse
diff --git a/src/sage/matrix/matrix_rational_sparse.pyx b/src/sage/matrix/matrix_rational_sparse.pyx
index dac06a3cfd3..40d212811a8 100644
--- a/src/sage/matrix/matrix_rational_sparse.pyx
+++ b/src/sage/matrix/matrix_rational_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
"""
Sparse rational matrices
diff --git a/src/sage/matrix/matrix_real_double_dense.pxd b/src/sage/matrix/matrix_real_double_dense.pxd
index d781a84ce40..4601c94cbd5 100644
--- a/src/sage/matrix/matrix_real_double_dense.pxd
+++ b/src/sage/matrix/matrix_real_double_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_double_dense cimport Matrix_double_dense
diff --git a/src/sage/matrix/matrix_real_double_dense.pyx b/src/sage/matrix/matrix_real_double_dense.pyx
index 10eaeac4e56..a24098bb2f6 100644
--- a/src/sage/matrix/matrix_real_double_dense.pyx
+++ b/src/sage/matrix/matrix_real_double_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
"""
Dense matrices over the Real Double Field using NumPy
diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py
index aa9a6fe6111..377afa9a5ee 100644
--- a/src/sage/matrix/matrix_space.py
+++ b/src/sage/matrix/matrix_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Matrix Spaces
diff --git a/src/sage/matrix/matrix_sparse.pxd b/src/sage/matrix/matrix_sparse.pxd
index 7546645a6c9..46b4f668b26 100644
--- a/src/sage/matrix/matrix_sparse.pxd
+++ b/src/sage/matrix/matrix_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from .matrix cimport Matrix
cdef class Matrix_sparse(Matrix):
diff --git a/src/sage/matrix/matrix_sparse.pyx b/src/sage/matrix/matrix_sparse.pyx
index d8b2e65127a..3a1ffd931f1 100644
--- a/src/sage/matrix/matrix_sparse.pyx
+++ b/src/sage/matrix/matrix_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Base class for sparse matrices
"""
diff --git a/src/sage/matrix/matrix_symbolic_dense.pxd b/src/sage/matrix/matrix_symbolic_dense.pxd
index aa85e4c6a21..13d37e45f43 100644
--- a/src/sage/matrix/matrix_symbolic_dense.pxd
+++ b/src/sage/matrix/matrix_symbolic_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
diff --git a/src/sage/matrix/matrix_symbolic_dense.pyx b/src/sage/matrix/matrix_symbolic_dense.pyx
index 7a0dab316d8..e9c4213273e 100644
--- a/src/sage/matrix/matrix_symbolic_dense.pyx
+++ b/src/sage/matrix/matrix_symbolic_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Symbolic dense matrices
diff --git a/src/sage/matrix/matrix_symbolic_sparse.pxd b/src/sage/matrix/matrix_symbolic_sparse.pxd
index c90e0161119..6837cad281d 100644
--- a/src/sage/matrix/matrix_symbolic_sparse.pxd
+++ b/src/sage/matrix/matrix_symbolic_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
from sage.matrix.matrix_generic_sparse cimport Matrix_generic_sparse
diff --git a/src/sage/matrix/matrix_symbolic_sparse.pyx b/src/sage/matrix/matrix_symbolic_sparse.pyx
index 680e36c5c6c..66907facf8e 100644
--- a/src/sage/matrix/matrix_symbolic_sparse.pyx
+++ b/src/sage/matrix/matrix_symbolic_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Symbolic sparse matrices
diff --git a/src/sage/matrix/matrix_window.pxd b/src/sage/matrix/matrix_window.pxd
index 070f1deaf25..e167c351937 100644
--- a/src/sage/matrix/matrix_window.pxd
+++ b/src/sage/matrix/matrix_window.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix cimport Matrix
diff --git a/src/sage/matrix/matrix_window.pyx b/src/sage/matrix/matrix_window.pyx
index 11a8c0ed1b2..4ece8e027ce 100644
--- a/src/sage/matrix/matrix_window.pyx
+++ b/src/sage/matrix/matrix_window.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Matrix windows
"""
diff --git a/src/sage/matrix/misc.pyx b/src/sage/matrix/misc.pyx
index 5ff93f4accb..272a2838e50 100644
--- a/src/sage/matrix/misc.pyx
+++ b/src/sage/matrix/misc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
"""
Misc matrix algorithms
"""
diff --git a/src/sage/matrix/misc_flint.pyx b/src/sage/matrix/misc_flint.pyx
index 3e829df4d22..8bd45e68f2d 100644
--- a/src/sage/matrix/misc_flint.pyx
+++ b/src/sage/matrix/misc_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Misc matrix algorithms using FLINT
"""
diff --git a/src/sage/matrix/misc_mpfr.pyx b/src/sage/matrix/misc_mpfr.pyx
index 91613b16492..9e9905c6b47 100644
--- a/src/sage/matrix/misc_mpfr.pyx
+++ b/src/sage/matrix/misc_mpfr.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Misc matrix algorithms using MPFR
"""
diff --git a/src/sage/matrix/operation_table.py b/src/sage/matrix/operation_table.py
index 50fe4f257dd..a73d2bf92b8 100644
--- a/src/sage/matrix/operation_table.py
+++ b/src/sage/matrix/operation_table.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Operation Tables
diff --git a/src/sage/matrix/special.py b/src/sage/matrix/special.py
index 0399db53a03..3beab71b0b9 100644
--- a/src/sage/matrix/special.py
+++ b/src/sage/matrix/special.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
"""
Constructors for special matrices
diff --git a/src/sage/matrix/strassen.pyx b/src/sage/matrix/strassen.pyx
index e568011adb7..4f0d877c2b5 100644
--- a/src/sage/matrix/strassen.pyx
+++ b/src/sage/matrix/strassen.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Generic Asymptotically Fast Strassen Algorithms
diff --git a/src/sage/matrix/symplectic_basis.py b/src/sage/matrix/symplectic_basis.py
index db38f5f3611..ca6581baea3 100644
--- a/src/sage/matrix/symplectic_basis.py
+++ b/src/sage/matrix/symplectic_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Calculate symplectic bases for matrices over fields and the integers.
diff --git a/src/sage/matrix/template.pxd b/src/sage/matrix/template.pxd
index 69123a38f2d..4db874af5d2 100644
--- a/src/sage/matrix/template.pxd
+++ b/src/sage/matrix/template.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matrix.matrix_dense cimport Matrix_dense
diff --git a/src/sage/matrix/tests.py b/src/sage/matrix/tests.py
index b4747bff5c9..ef893bc931b 100644
--- a/src/sage/matrix/tests.py
+++ b/src/sage/matrix/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
TESTS:
diff --git a/src/sage/matroids/advanced.py b/src/sage/matroids/advanced.py
index d290aca2060..e6221026371 100644
--- a/src/sage/matroids/advanced.py
+++ b/src/sage/matroids/advanced.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Advanced matroid functionality.
@@ -53,6 +54,7 @@
from .minor_matroid import MinorMatroid
from .dual_matroid import DualMatroid
from .rank_matroid import RankMatroid
+from .circuits_matroid import CircuitsMatroid
from .circuit_closures_matroid import CircuitClosuresMatroid
from .basis_matroid import BasisMatroid
from .flats_matroid import FlatsMatroid
diff --git a/src/sage/matroids/all.py b/src/sage/matroids/all.py
index e647629c988..8d0105373c0 100644
--- a/src/sage/matroids/all.py
+++ b/src/sage/matroids/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Matroids
"""
@@ -10,3 +11,5 @@
# import matroids_catalog as matroids
lazy_import('sage.matroids.constructor', 'Matroid')
lazy_import('sage.matroids', 'matroids_catalog', 'matroids')
+del lazy_import
+del install_doc
diff --git a/src/sage/matroids/basis_exchange_matroid.pxd b/src/sage/matroids/basis_exchange_matroid.pxd
index 97cc4391633..473533eebe8 100644
--- a/src/sage/matroids/basis_exchange_matroid.pxd
+++ b/src/sage/matroids/basis_exchange_matroid.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.data_structures.bitset cimport *
from sage.data_structures.bitset_base cimport bitset_t, bitset_s
diff --git a/src/sage/matroids/basis_exchange_matroid.pyx b/src/sage/matroids/basis_exchange_matroid.pyx
index 835092678e2..ed0e8909a8c 100644
--- a/src/sage/matroids/basis_exchange_matroid.pyx
+++ b/src/sage/matroids/basis_exchange_matroid.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Basis exchange matroids
diff --git a/src/sage/matroids/basis_matroid.pxd b/src/sage/matroids/basis_matroid.pxd
index 3782b51c5fa..ecb0baf8ed1 100644
--- a/src/sage/matroids/basis_matroid.pxd
+++ b/src/sage/matroids/basis_matroid.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.data_structures.bitset cimport bitset_t
from sage.matroids.matroid cimport Matroid
from sage.matroids.basis_exchange_matroid cimport BasisExchangeMatroid
diff --git a/src/sage/matroids/basis_matroid.pyx b/src/sage/matroids/basis_matroid.pyx
index 4c20102a621..d9d08183c3b 100644
--- a/src/sage/matroids/basis_matroid.pyx
+++ b/src/sage/matroids/basis_matroid.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Basis matroids
@@ -1161,46 +1162,6 @@ cdef class BasisMatroid(BasisExchangeMatroid):
else:
return rich_to_bool(op, 1)
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: from sage.matroids.advanced import *
- sage: M = BasisMatroid(matroids.catalog.Vamos())
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- """
- N = BasisMatroid(M=self)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo=None):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Identical to shallow copy for BasisMatroid class.
-
- EXAMPLES::
-
- sage: from sage.matroids.advanced import *
- sage: M = BasisMatroid(matroids.catalog.Vamos())
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- False
- """
- if memo is None:
- memo = {}
- N = BasisMatroid(M=self)
- N.rename(self.get_custom_name())
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
diff --git a/src/sage/matroids/catalog.py b/src/sage/matroids/catalog.py
index 55dd69d2ef4..87f2613ab3a 100644
--- a/src/sage/matroids/catalog.py
+++ b/src/sage/matroids/catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Individual matroids in the catalog
diff --git a/src/sage/matroids/circuit_closures_matroid.pxd b/src/sage/matroids/circuit_closures_matroid.pxd
index 7c7b61ec35f..6bbbc072bac 100644
--- a/src/sage/matroids/circuit_closures_matroid.pxd
+++ b/src/sage/matroids/circuit_closures_matroid.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matroids.matroid cimport Matroid
diff --git a/src/sage/matroids/circuit_closures_matroid.pyx b/src/sage/matroids/circuit_closures_matroid.pyx
index 42293cc2fc3..385d314d8ea 100644
--- a/src/sage/matroids/circuit_closures_matroid.pyx
+++ b/src/sage/matroids/circuit_closures_matroid.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Circuit closures matroids
@@ -46,15 +47,6 @@ Note that the class does not implement custom minor and dual operations::
AUTHORS:
- Rudi Pendavingh, Stefan van Zwam (2013-04-01): initial version
-
-TESTS::
-
- sage: from sage.matroids.advanced import *
- sage: M = CircuitClosuresMatroid(matroids.catalog.Fano())
- sage: TestSuite(M).run()
-
-Methods
-=======
"""
# ****************************************************************************
# Copyright (C) 2013 Rudi Pendavingh
@@ -131,7 +123,8 @@ cdef class CircuitClosuresMatroid(Matroid):
True
"""
- # NECESSARY
+ # necessary
+
def __init__(self, M=None, groundset=None, circuit_closures=None):
"""
Initialization of the matroid. See class docstring for full
@@ -154,6 +147,12 @@ cdef class CircuitClosuresMatroid(Matroid):
....: 4: ['abcdefgh']})
sage: M.equals(matroids.catalog.P8())
True
+
+ TESTS::
+
+ sage: from sage.matroids.advanced import *
+ sage: M = CircuitClosuresMatroid(matroids.catalog.Fano())
+ sage: TestSuite(M).run()
"""
if M is not None:
self._groundset = M.groundset()
@@ -206,7 +205,8 @@ cdef class CircuitClosuresMatroid(Matroid):
"""
return len(self._max_independent(X))
- # OPTIONAL, OPTIMIZED FOR THIS CLASS
+ # optional
+
cpdef full_rank(self):
r"""
Return the rank of the matroid.
@@ -413,7 +413,8 @@ cdef class CircuitClosuresMatroid(Matroid):
SN.append(C)
return SM._isomorphism(SN) is not None
- # REPRESENTATION
+ # representation
+
def _repr_(self):
"""
Return a string representation of the matroid.
@@ -430,7 +431,7 @@ cdef class CircuitClosuresMatroid(Matroid):
"""
return Matroid._repr_(self) + " with circuit-closures\n" + setprint_s(self._circuit_closures)
- # COMPARISON
+ # comparison
def __hash__(self):
r"""
@@ -490,52 +491,7 @@ cdef class CircuitClosuresMatroid(Matroid):
return rich_to_bool(op, 1)
return richcmp(lt._circuit_closures, rt._circuit_closures, op)
- # COPYING, LOADING, SAVING
-
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = matroids.catalog.Vamos()
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- True
- """
- N = CircuitClosuresMatroid(groundset=[], circuit_closures={})
- N._groundset = self._groundset
- N._circuit_closures = self._circuit_closures
- N._matroid_rank = self._matroid_rank
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo=None):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Since matroids are immutable, a shallow copy normally suffices.
-
- EXAMPLES::
-
- sage: M = matroids.catalog.Vamos()
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- False
- """
- if memo is None:
- memo = {}
- from copy import deepcopy
- # Since matroids are immutable, N cannot reference itself in correct code, so no need to worry about the recursion.
- N = CircuitClosuresMatroid(groundset=deepcopy(self._groundset, memo), circuit_closures=deepcopy(self._circuit_closures, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
+ # copying, loading, saving
def __reduce__(self):
"""
diff --git a/src/sage/matroids/circuits_matroid.pyx b/src/sage/matroids/circuits_matroid.pyx
index 6c09c2dc07d..be38519b677 100644
--- a/src/sage/matroids/circuits_matroid.pyx
+++ b/src/sage/matroids/circuits_matroid.pyx
@@ -337,55 +337,6 @@ cdef class CircuitsMatroid(Matroid):
# copying, loading, saving
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: from sage.matroids.circuits_matroid import CircuitsMatroid
- sage: M = CircuitsMatroid(matroids.catalog.Vamos())
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- True
- """
- N = CircuitsMatroid(groundset=[], circuits=[])
- N._groundset = self._groundset
- N._C = self._C
- N._k_C = self._k_C
- N._nsc_defined = self._nsc_defined
- N._matroid_rank = self._matroid_rank
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo=None):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Since matroids are immutable, a shallow copy normally suffices.
-
- EXAMPLES::
-
- sage: from sage.matroids.circuits_matroid import CircuitsMatroid
- sage: M = CircuitsMatroid(matroids.catalog.Vamos())
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- False
- """
- if memo is None:
- memo = {}
- from copy import deepcopy
- # Since matroids are immutable, N cannot reference itself in correct code, so no need to worry about the recursion.
- N = CircuitsMatroid(groundset=deepcopy(self._groundset, memo), circuits=deepcopy(frozenset(self._C), memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
diff --git a/src/sage/matroids/constructor.py b/src/sage/matroids/constructor.py
index cecfead568a..ac9f489aade 100644
--- a/src/sage/matroids/constructor.py
+++ b/src/sage/matroids/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Matroid construction
diff --git a/src/sage/matroids/database_matroids.py b/src/sage/matroids/database_matroids.py
index 0017ce0627e..40ce2519b86 100644
--- a/src/sage/matroids/database_matroids.py
+++ b/src/sage/matroids/database_matroids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Database of matroids
diff --git a/src/sage/matroids/dual_matroid.py b/src/sage/matroids/dual_matroid.py
index f3cabe0dc42..3c0a824a943 100644
--- a/src/sage/matroids/dual_matroid.py
+++ b/src/sage/matroids/dual_matroid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Dual matroids
@@ -386,7 +387,8 @@ def dual(self):
"""
return self._matroid
- # REPRESENTATION
+ # representation
+
def _repr_(self):
"""
Return a string representation of the matroid.
@@ -404,7 +406,7 @@ def _repr_(self):
"""
return "Dual of '" + repr(self._matroid) + "'"
- # COMPARISON
+ # comparison
def __hash__(self):
r"""
@@ -494,46 +496,7 @@ def __ne__(self, other):
"""
return not self == other
- # COPYING, LOADING, SAVING
-
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = matroids.catalog.Vamos()
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- True
- """
- N = DualMatroid(self._matroid)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo={}):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Since matroids are immutable, a shallow copy normally suffices.
-
- EXAMPLES::
-
- sage: M = matroids.catalog.Vamos().dual()
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- False
- """
- from copy import deepcopy
- N = DualMatroid(deepcopy(self._matroid, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
+ # copying, loading, saving
def __reduce__(self):
"""
diff --git a/src/sage/matroids/extension.pxd b/src/sage/matroids/extension.pxd
index b48a9a7e02d..ad7e5899733 100644
--- a/src/sage/matroids/extension.pxd
+++ b/src/sage/matroids/extension.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.data_structures.bitset cimport bitset_t
from sage.matroids.basis_matroid cimport BasisMatroid
diff --git a/src/sage/matroids/extension.pyx b/src/sage/matroids/extension.pyx
index d73b4581674..5d1b166a138 100644
--- a/src/sage/matroids/extension.pyx
+++ b/src/sage/matroids/extension.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Iterators for linear subclasses
diff --git a/src/sage/matroids/graphic_matroid.py b/src/sage/matroids/graphic_matroid.py
index 57bbae15f22..6aedb5e3702 100644
--- a/src/sage/matroids/graphic_matroid.py
+++ b/src/sage/matroids/graphic_matroid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.graphs
r"""
Graphic Matroids
@@ -450,46 +451,6 @@ def __ne__(self, other):
# Copying, loading, saving:
- def __copy__(self):
- """
- Create a shallow copy.
-
- Creating a ``GraphicMatroid`` instance will build a new graph, so
- the copies have no attributes in common.
-
- EXAMPLES::
-
- sage: M = Matroid(graphs.PappusGraph())
- sage: N = copy(M)
- sage: M == N
- True
- sage: M._G is N._G
- False
- """
- N = GraphicMatroid(self._G)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo={}):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Since matroids are immutable, a shallow copy normally suffices.
-
- EXAMPLES::
-
- sage: M = Matroid(graphs.PetersenGraph())
- sage: N = deepcopy(M)
- sage: N == M
- True
- """
- # The only real difference between this and __copy__() is the memo
- N = GraphicMatroid(deepcopy(self._G, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
diff --git a/src/sage/matroids/lean_matrix.pxd b/src/sage/matroids/lean_matrix.pxd
index 3091af107d0..26647ba3025 100644
--- a/src/sage/matroids/lean_matrix.pxd
+++ b/src/sage/matroids/lean_matrix.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.data_structures.bitset cimport bitset_t
from sage.libs.gmp.types cimport mpq_t
diff --git a/src/sage/matroids/lean_matrix.pyx b/src/sage/matroids/lean_matrix.pyx
index 34c498b016a..5a4e6bea6e5 100644
--- a/src/sage/matroids/lean_matrix.pyx
+++ b/src/sage/matroids/lean_matrix.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.rings.finite_rings
"""
Lean matrices
@@ -476,32 +477,6 @@ cdef class LeanMatrix:
# Copying, loading, saving:
- def __copy__(self):
- """
- Return a copy of ``self``.
-
- EXAMPLES::
-
- sage: from sage.matroids.lean_matrix import *
- sage: A = GenericMatrix(2, 5, Matrix(GF(5), [[1, 0, 1, 1, 1], [0, 1, 1, 2, 3]]))
- sage: A == copy(A) # indirect doctest
- True
- """
- return self.copy()
-
- def __deepcopy__(self, memo=None):
- """
- Return a deep copy of ``self``.
-
- EXAMPLES::
-
- sage: from sage.matroids.lean_matrix import *
- sage: A = GenericMatrix(2, 5, Matrix(GF(5), [[1, 0, 1, 1, 1], [0, 1, 1, 2, 3]]))
- sage: A == deepcopy(A) # indirect doctest
- True
- """
- return self.copy()
-
def __reduce__(self):
"""
Save the object.
diff --git a/src/sage/matroids/linear_matroid.pxd b/src/sage/matroids/linear_matroid.pxd
index 4902ccef6ef..bc496cb72d7 100644
--- a/src/sage/matroids/linear_matroid.pxd
+++ b/src/sage/matroids/linear_matroid.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.data_structures.bitset cimport bitset_t
from sage.matroids.matroid cimport Matroid
diff --git a/src/sage/matroids/linear_matroid.pyx b/src/sage/matroids/linear_matroid.pyx
index 7b6eb9bb711..33e78d7a586 100644
--- a/src/sage/matroids/linear_matroid.pyx
+++ b/src/sage/matroids/linear_matroid.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Linear matroids
@@ -2882,48 +2883,6 @@ cdef class LinearMatroid(BasisExchangeMatroid):
# Copying, loading, saving
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(7), [[1, 0, 0, 1, 1], [0, 1, 0, 1, 2],
- ....: [0, 0, 1, 1, 3]]))
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- """
- cdef LinearMatroid N
- if self._representation is not None:
- N = LinearMatroid(groundset=self._E, matrix=self._representation, keep_initial_representation=True)
- else:
- rows, cols = self._current_rows_cols()
- N = LinearMatroid(groundset=rows + cols, reduced_matrix=self._A)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo):
- """
- Create a deep copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(7), [[1, 0, 0, 1, 1], [0, 1, 0, 1, 2],
- ....: [0, 0, 1, 1, 3]]))
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- """
- cdef LinearMatroid N
- if self._representation is not None:
- N = LinearMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._representation, memo), keep_initial_representation=True)
- else:
- rows, cols = self._current_rows_cols()
- N = LinearMatroid(groundset=deepcopy(rows + cols, memo), reduced_matrix=deepcopy(self._A, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
@@ -3931,55 +3890,6 @@ cdef class BinaryMatroid(LinearMatroid):
"""
return True
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(2), [[1, 0, 0, 1, 1], [0, 1, 0, 1, 2],
- ....: [0, 0, 1, 1, 3]]))
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- """
- cdef BinaryMatroid N
- cdef list basis
- if self._representation is not None:
- N = BinaryMatroid(groundset=self._E, matrix=self._representation, keep_initial_representation=True)
- else:
- basis = [0] * self.full_rank()
- for e in self.basis():
- basis[self._prow[self._idx[e]]] = e
- N = BinaryMatroid(groundset=self._E, matrix=self._A, basis=basis)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo):
- """
- Create a deep copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(2), [[1, 0, 0, 1, 1], [0, 1, 0, 1, 2],
- ....: [0, 0, 1, 1, 3]]))
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- """
- from copy import deepcopy
- cdef BinaryMatroid N
- cdef list basis
- if self._representation is not None:
- N = BinaryMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._representation, memo), keep_initial_representation=True)
- else:
- basis = [0] * self.full_rank()
- for e in self.basis():
- basis[self._prow[self._idx[e]]] = e
- N = BinaryMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._A, memo), basis=deepcopy(basis, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
@@ -4821,55 +4731,6 @@ cdef class TernaryMatroid(LinearMatroid):
"""
return True
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(3), [[1, 0, 0, 1, 1], [0, 1, 0, 1, 2],
- ....: [0, 0, 1, 1, 3]]))
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- """
- cdef TernaryMatroid N
- cdef list basis
- if self._representation is not None:
- N = TernaryMatroid(groundset=self._E, matrix=self._representation, keep_initial_representation=True)
- else:
- basis = [0] * self.full_rank()
- for e in self.basis():
- basis[self._prow[self._idx[e]]] = e
- N = TernaryMatroid(groundset=self._E, matrix=self._A, basis=basis)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo):
- """
- Create a deep copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(3), [[1, 0, 0, 1, 1], [0, 1, 0, 1, 2],
- ....: [0, 0, 1, 1, -1]]))
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- """
- from copy import deepcopy
- cdef TernaryMatroid N
- cdef list basis
- if self._representation is not None:
- N = TernaryMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._representation, memo), keep_initial_representation=True)
- else:
- basis = [0] * self.full_rank()
- for e in self.basis():
- basis[self._prow[self._idx[e]]] = e
- N = TernaryMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._A, memo), basis=deepcopy(basis, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
@@ -5550,55 +5411,6 @@ cdef class QuaternaryMatroid(LinearMatroid):
"""
return True
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(4, 'x'), [[1, 0, 0, 1, 1], # needs sage.rings.finite_rings
- ....: [0, 1, 0, 1, 2], [0, 0, 1, 1, 3]]))
- sage: N = copy(M) # indirect doctest # needs sage.rings.finite_rings
- sage: M == N # needs sage.rings.finite_rings
- True
- """
- cdef QuaternaryMatroid N
- cdef list basis
- if self._representation is not None:
- N = QuaternaryMatroid(groundset=self._E, matrix=self._representation, keep_initial_representation=True)
- else:
- basis = [0] * self.full_rank()
- for e in self.basis():
- basis[self._prow[self._idx[e]]] = e
- N = QuaternaryMatroid(groundset=self._E, matrix=self._A, basis=basis)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo):
- """
- Create a deep copy.
-
- EXAMPLES::
-
- sage: M = Matroid(Matrix(GF(4, 'x'), [[1, 0, 0, 1, 1], # needs sage.rings.finite_rings
- ....: [0, 1, 0, 1, 2], [0, 0, 1, 1, -1]]))
- sage: N = deepcopy(M) # indirect doctest # needs sage.rings.finite_rings
- sage: M == N # needs sage.rings.finite_rings
- True
- """
- from copy import deepcopy
- cdef QuaternaryMatroid N
- cdef list basis
- if self._representation is not None:
- N = QuaternaryMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._representation, memo), keep_initial_representation=True)
- else:
- basis = [0] * self.full_rank()
- for e in self.basis():
- basis[self._prow[self._idx[e]]] = e
- N = QuaternaryMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._A, memo), basis=deepcopy(basis, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
@@ -6487,46 +6299,6 @@ cdef class RegularMatroid(LinearMatroid):
# Copying, loading, saving
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: M = matroids.catalog.R10()
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- """
- cdef RegularMatroid N
- if self._representation is not None:
- N = RegularMatroid(groundset=self._E, matrix=self._representation, keep_initial_representation=True)
- else:
- rows, cols = self._current_rows_cols()
- N = RegularMatroid(groundset=rows + cols, reduced_matrix=self._A)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo):
- """
- Create a deep copy.
-
- EXAMPLES::
-
- sage: M = matroids.catalog.R10()
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- """
- cdef RegularMatroid N
- if self._representation is not None:
- N = RegularMatroid(groundset=deepcopy(self._E, memo), matrix=deepcopy(self._representation, memo), keep_initial_representation=True)
- else:
- rows, cols = self._current_rows_cols()
- N = RegularMatroid(groundset=deepcopy(rows + cols, memo), reduced_matrix=deepcopy(self._A, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
diff --git a/src/sage/matroids/matroid.pxd b/src/sage/matroids/matroid.pxd
index 5103bcf2a4b..f60cfdca452 100644
--- a/src/sage/matroids/matroid.pxd
+++ b/src/sage/matroids/matroid.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.sage_object cimport SageObject
cdef class Matroid(SageObject):
diff --git a/src/sage/matroids/matroid.pyx b/src/sage/matroids/matroid.pyx
index 781f72592ac..2ba5d962067 100644
--- a/src/sage/matroids/matroid.pyx
+++ b/src/sage/matroids/matroid.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
r"""
The abstract Matroid class
@@ -517,6 +517,98 @@ cdef class Matroid(SageObject):
"""
raise NotImplementedError("subclasses need to implement this.")
+ # copying
+
+ def __copy__(self):
+ """
+ Create a shallow copy.
+
+ EXAMPLES::
+
+ sage: from sage.matroids.advanced import *
+ sage: matroids_lst = [
+ ....: BasisMatroid(matroids.catalog.Vamos()),
+ ....: CircuitsMatroid(matroids.catalog.Vamos()),
+ ....: CircuitClosuresMatroid(matroids.catalog.Vamos()),
+ ....: Matroid(groundset=range(10), rank_function=lambda X: min(len(X), 4)),
+ ....: Matroid(Matrix(GF(7), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: Matroid(Matrix(GF(2), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: Matroid(Matrix(GF(3), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: Matroid(Matrix(GF(4, 'x'), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: matroids.catalog.R10()
+ ....: ]
+ sage: for M in matroids_lst: # indirect doctest
+ ....: N = copy(M)
+ ....: assert M == N
+ ....: assert M.groundset() is N.groundset()
+
+ sage: M = Matroid(graphs.PappusGraph())
+ sage: N = copy(M)
+ sage: M == N
+ True
+ sage: M._G is N._G
+ True
+
+ sage: M = MinorMatroid(matroid=matroids.catalog.Vamos(),
+ ....: contractions={'a', 'b'}, deletions={'f'})
+ sage: N = copy(M) # indirect doctest
+ sage: M == N
+ True
+ sage: M._matroid is N._matroid
+ True
+
+ sage: from sage.matroids.lean_matrix import *
+ sage: A = GenericMatrix(2, 5, Matrix(GF(5), [[1, 0, 1, 1, 1], [0, 1, 1, 2, 3]]))
+ sage: A == copy(A) # indirect doctest
+ True
+ """
+ return self
+
+ def __deepcopy__(self, memo=None):
+ """
+ Create a deep copy.
+
+ EXAMPLES::
+
+ sage: from sage.matroids.advanced import *
+ sage: matroids_lst = [
+ ....: BasisMatroid(matroids.catalog.Vamos()),
+ ....: CircuitsMatroid(matroids.catalog.Vamos()),
+ ....: CircuitClosuresMatroid(matroids.catalog.Vamos()),
+ ....: Matroid(groundset=range(10), rank_function=lambda X: min(len(X), 4)),
+ ....: Matroid(Matrix(GF(7), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: Matroid(Matrix(GF(2), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: Matroid(Matrix(GF(3), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: Matroid(Matrix(GF(4, 'x'), [[1,0,0,1,1],[0,1,0,1,2],[0,0,1,1,3]])),
+ ....: matroids.catalog.R10()
+ ....: ]
+ sage: for M in matroids_lst: # indirect doctest
+ ....: N = deepcopy(M)
+ ....: assert M == N
+ ....: assert M.groundset() is N.groundset()
+
+ sage: M = Matroid(graphs.PappusGraph())
+ sage: N = deepcopy(M)
+ sage: M == N
+ True
+ sage: M._G is N._G
+ True
+
+ sage: M = MinorMatroid(matroid=matroids.catalog.Vamos(),
+ ....: contractions={'a', 'b'}, deletions={'f'})
+ sage: N = deepcopy(M) # indirect doctest
+ sage: M == N
+ True
+ sage: M._matroid is N._matroid
+ True
+
+ sage: from sage.matroids.lean_matrix import *
+ sage: A = GenericMatrix(2, 5, Matrix(GF(5), [[1, 0, 1, 1, 1], [0, 1, 1, 2, 3]]))
+ sage: A == deepcopy(A) # indirect doctest
+ True
+ """
+ return self
+
# internal methods, assuming verified input
# for better efficiency, its best to override the following methods in
diff --git a/src/sage/matroids/matroids_catalog.py b/src/sage/matroids/matroids_catalog.py
index 4fbeddac9e8..ef7401119fb 100644
--- a/src/sage/matroids/matroids_catalog.py
+++ b/src/sage/matroids/matroids_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Catalog of matroids
diff --git a/src/sage/matroids/matroids_plot_helpers.py b/src/sage/matroids/matroids_plot_helpers.py
index b7a3d7d6d03..1d6d28cc040 100644
--- a/src/sage/matroids/matroids_plot_helpers.py
+++ b/src/sage/matroids/matroids_plot_helpers.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - scipy
r"""
Helper functions for plotting the geometric representation of matroids
diff --git a/src/sage/matroids/minor_matroid.py b/src/sage/matroids/minor_matroid.py
index 6c7fbeb8ef9..79b15ac4d29 100644
--- a/src/sage/matroids/minor_matroid.py
+++ b/src/sage/matroids/minor_matroid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Minors of matroids
@@ -470,50 +471,6 @@ def __ne__(self, other):
# Copying, loading, saving:
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: from sage.matroids.advanced import *
- sage: M = MinorMatroid(matroid=matroids.catalog.Vamos(),
- ....: contractions={'a', 'b'}, deletions={'f'})
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- sage: M._matroid is N._matroid
- True
- """
- N = MinorMatroid(self._matroid, self._contractions, self._deletions)
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo={}):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Since matroids are immutable, a shallow copy normally suffices.
-
- EXAMPLES::
-
- sage: from sage.matroids.advanced import *
- sage: M = MinorMatroid(matroid=matroids.catalog.Vamos(),
- ....: contractions={'a', 'b'}, deletions={'f'})
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- sage: M._matroid is N._matroid
- False
- """
- from copy import deepcopy
- # Since matroids are immutable, N cannot reference itself in correct code, so no need to worry about the recursion.
- N = MinorMatroid(deepcopy(self._matroid, memo), deepcopy(self._contractions, memo), deepcopy(self._deletions, memo))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
r"""
Save the matroid for later reloading.
diff --git a/src/sage/matroids/named_matroids.py b/src/sage/matroids/named_matroids.py
index 7fcd63b92c9..708d3ad2680 100644
--- a/src/sage/matroids/named_matroids.py
+++ b/src/sage/matroids/named_matroids.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.superseded import deprecation
from sage.matroids.database_matroids import *
deprecation(36842, "named_matroids is deprecated, use catalog instead")
diff --git a/src/sage/matroids/rank_matroid.py b/src/sage/matroids/rank_matroid.py
index 9dd359c14a9..9f1251512d6 100644
--- a/src/sage/matroids/rank_matroid.py
+++ b/src/sage/matroids/rank_matroid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Rank function matroids
@@ -247,51 +248,6 @@ def __ne__(self, other):
# Copying, loading, saving:
- def __copy__(self):
- """
- Create a shallow copy.
-
- EXAMPLES::
-
- sage: from sage.matroids.advanced import *
- sage: M = Matroid(groundset=range(10),
- ....: rank_function=lambda X: min(len(X), 4))
- sage: N = copy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- True
- """
- N = RankMatroid(groundset=[], rank_function=None)
- N._groundset = self._groundset
- N._rank_function = self._rank_function
- N.rename(self.get_custom_name())
- return N
-
- def __deepcopy__(self, memo={}):
- """
- Create a deep copy.
-
- .. NOTE::
-
- Since matroids are immutable, a shallow copy normally suffices.
-
- EXAMPLES::
-
- sage: M = Matroid(groundset=range(10),
- ....: rank_function=lambda X: min(len(X), 4))
- sage: N = deepcopy(M) # indirect doctest
- sage: M == N
- True
- sage: M.groundset() is N.groundset()
- False
- """
- from copy import deepcopy
- # Since matroids are immutable, N cannot reference itself in correct code, so no need to worry about the recursion.
- N = RankMatroid(groundset=deepcopy(self._groundset), rank_function=deepcopy(self._rank_function))
- N.rename(deepcopy(self.get_custom_name(), memo))
- return N
-
def __reduce__(self):
"""
Save the matroid for later reloading.
diff --git a/src/sage/matroids/set_system.pxd b/src/sage/matroids/set_system.pxd
index a283244b53b..c80cec843e0 100644
--- a/src/sage/matroids/set_system.pxd
+++ b/src/sage/matroids/set_system.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.data_structures.bitset cimport bitset_t
cdef class SetSystem:
diff --git a/src/sage/matroids/set_system.pyx b/src/sage/matroids/set_system.pyx
index 606231a1734..dfe0fa175d2 100644
--- a/src/sage/matroids/set_system.pyx
+++ b/src/sage/matroids/set_system.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Set systems
diff --git a/src/sage/matroids/union_matroid.pxd b/src/sage/matroids/union_matroid.pxd
index d03ae476bda..f286413eaee 100644
--- a/src/sage/matroids/union_matroid.pxd
+++ b/src/sage/matroids/union_matroid.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matroids.matroid cimport Matroid
diff --git a/src/sage/matroids/union_matroid.pyx b/src/sage/matroids/union_matroid.pyx
index 817f9c4a222..19b3b45d143 100644
--- a/src/sage/matroids/union_matroid.pyx
+++ b/src/sage/matroids/union_matroid.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.matroids.matroid cimport Matroid
diff --git a/src/sage/matroids/unpickling.pyx b/src/sage/matroids/unpickling.pyx
index 9e41c28a477..2785326c11a 100644
--- a/src/sage/matroids/unpickling.pyx
+++ b/src/sage/matroids/unpickling.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Unpickling methods
diff --git a/src/sage/matroids/utilities.py b/src/sage/matroids/utilities.py
index a0cf14f5276..d5561bb4067 100644
--- a/src/sage/matroids/utilities.py
+++ b/src/sage/matroids/utilities.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Some useful functions for the matroid class.
diff --git a/src/sage/misc/abstract_method.py b/src/sage/misc/abstract_method.py
index 6179c5a2b8f..3160c89344b 100644
--- a/src/sage/misc/abstract_method.py
+++ b/src/sage/misc/abstract_method.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Abstract methods
"""
@@ -193,7 +194,7 @@ def _sage_src_lines_(self):
sage: src[0]
'def version():\n'
sage: lines
- 18
+ 19
"""
from sage.misc.sageinspect import sage_getsourcelines
return sage_getsourcelines(self._f)
diff --git a/src/sage/misc/all.py b/src/sage/misc/all.py
index 8aee092368c..dfa47c89ca6 100644
--- a/src/sage/misc/all.py
+++ b/src/sage/misc/all.py
@@ -1,129 +1,35 @@
-from sage.misc.lazy_attribute import lazy_attribute, lazy_class_attribute
-from sage.misc.lazy_import import lazy_import
-
-from sage.misc.all__sagemath_objects import *
+# from sage.misc.all__sagemath_objects import *
from sage.misc.all__sagemath_environment import *
+from sage.misc.all__sagemath_modules import *
from sage.misc.all__sagemath_repl import *
from sage.misc.misc import (BackslashOperator,
- exists, forall, is_iterator,
- random_sublist,
- pad_zeros,
- SAGE_DB,
- newton_method_sizes, compose,
- nest)
+ exists, forall, is_iterator,
+ random_sublist,
+ pad_zeros,
+ SAGE_DB,
+ newton_method_sizes, compose,
+ nest)
lazy_import('sage.misc.misc', 'union',
deprecation=32096)
-from sage.misc.banner import version
-
from sage.misc.dev_tools import import_statements
-from sage.misc.html import html, pretty_print_default
-
-from sage.misc.table import table
-
-from sage.misc.sage_timeit_class import timeit
-
from sage.misc.edit_module import edit
-from sage.misc.map_threaded import map_threaded
-
-from sage.misc.session import load_session, save_session, show_identifiers
-
from sage.misc.remote_file import get_remote_file
-from sage.misc.mrange import xmrange, mrange, xmrange_iter, mrange_iter, cartesian_product_iterator
-
-from sage.misc.fpickle import pickle_function, unpickle_function
-
lazy_import('sage.misc.pager', 'pager')
-lazy_import('sage.misc.sagedoc', ['browse_sage_doc',
- 'search_src', 'search_def', 'search_doc',
- 'tutorial', 'reference', 'manual', 'developer',
- 'constructions', 'help'])
-lazy_import('pydoc', 'help', 'python_help')
-
from sage.misc.classgraph import class_graph
-from sage.misc.reset import reset, restore
-
-from sage.misc.mathml import mathml
-
-from sage.misc.defaults import (set_default_variable_name,
- series_precision, set_series_precision)
-
lazy_import("sage.misc.cython", "cython_lambda")
lazy_import("sage.misc.cython", "cython_compile", "cython")
-from sage.misc.func_persist import func_persist
-
-from sage.misc.functional import (additive_order,
- base_ring,
- base_field,
- basis,
- category,
- charpoly,
- characteristic_polynomial,
- coerce,
- cyclotomic_polynomial,
- decomposition,
- denominator,
- det,
- dimension,
- dim,
- discriminant,
- disc,
- eta,
- fcp,
- gen,
- gens,
- hecke_operator,
- image,
- integral, integrate,
- integral_closure,
- interval,
- xinterval,
- is_even,
- is_odd,
- kernel,
- krull_dimension,
- lift,
- log as log_b,
- minimal_polynomial,
- minpoly,
- multiplicative_order,
- ngens,
- norm,
- numerator,
- numerical_approx,
- n, N,
- objgens,
- objgen,
- order,
- rank,
- regulator,
- round,
- quotient,
- quo,
- isqrt,
- squarefree_part,
- sqrt,
- symbolic_sum as sum,
- symbolic_prod as product,
- transpose)
-
-
-from sage.misc.latex import LatexExpr, latex, view
-
-from sage.misc.randstate import seed, set_random_seed, initial_seed, current_randstate
-
-from sage.misc.prandom import *
-
-from sage.misc.timing import walltime, cputime
-
-from sage.misc.explain_pickle import explain_pickle, unpickle_newobj, unpickle_global, unpickle_build, unpickle_instantiate, unpickle_persistent, unpickle_extension, unpickle_appends
+# Following will go to all__sagemath_repl.py in #36566
+from sage.misc.explain_pickle import (explain_pickle, unpickle_newobj, unpickle_build,
+ unpickle_instantiate, unpickle_persistent,
+ unpickle_extension, unpickle_appends)
lazy_import('sage.misc.inline_fortran', 'fortran')
@@ -139,3 +45,10 @@
deprecation=34259)
lazy_import('sage.misc.benchmark', 'benchmark', deprecation=34259)
lazy_import('sage.repl.interpreter', 'logstr', deprecation=34259)
+
+# Following will go to all__sagemath_objects.py in #36566
+from sage.misc.randstate import seed, set_random_seed, initial_seed, current_randstate
+from sage.misc.prandom import *
+from sage.misc.sage_timeit_class import timeit
+from sage.misc.session import load_session, save_session, show_identifiers
+from sage.misc.reset import reset, restore
diff --git a/src/sage/misc/all__sagemath_categories.py b/src/sage/misc/all__sagemath_categories.py
new file mode 100644
index 00000000000..0806bdf7aec
--- /dev/null
+++ b/src/sage/misc/all__sagemath_categories.py
@@ -0,0 +1,77 @@
+
+from sage.misc.all__sagemath_objects import *
+
+from sage.misc.html import html, pretty_print_default
+
+from sage.misc.mathml import mathml
+
+from sage.misc.table import table
+
+from sage.misc.map_threaded import map_threaded
+
+from sage.misc.mrange import xmrange, mrange, xmrange_iter, mrange_iter, cartesian_product_iterator
+
+from sage.misc.defaults import (set_default_variable_name,
+ series_precision, set_series_precision)
+
+
+from sage.misc.functional import (additive_order,
+ base_ring,
+ base_field,
+ basis,
+ category,
+ charpoly,
+ characteristic_polynomial,
+ coerce,
+ cyclotomic_polynomial,
+ decomposition,
+ denominator,
+ det,
+ dimension,
+ dim,
+ discriminant,
+ disc,
+ eta,
+ fcp,
+ gen,
+ gens,
+ hecke_operator,
+ image,
+ integral, integrate,
+ integral_closure,
+ interval,
+ xinterval,
+ is_even,
+ is_odd,
+ kernel,
+ krull_dimension,
+ lift,
+ log as log_b,
+ minimal_polynomial,
+ minpoly,
+ multiplicative_order,
+ ngens,
+ norm,
+ numerator,
+ numerical_approx,
+ n, N,
+ objgens,
+ objgen,
+ order,
+ rank,
+ regulator,
+ round,
+ quotient,
+ quo,
+ isqrt,
+ squarefree_part,
+ sqrt,
+ symbolic_sum as sum,
+ symbolic_prod as product,
+ transpose)
+
+from sage.misc.latex import LatexExpr, latex, view
+
+from sage.misc.fpickle import pickle_function, unpickle_function
+
+from sage.misc.persist import unpickle_global
diff --git a/src/sage/misc/all__sagemath_environment.py b/src/sage/misc/all__sagemath_environment.py
index 9ebcc85870b..2f09e9c4d56 100644
--- a/src/sage/misc/all__sagemath_environment.py
+++ b/src/sage/misc/all__sagemath_environment.py
@@ -1 +1,2 @@
+# sage_setup: distribution = sagemath-environment
from sage.misc.temporary_file import tmp_dir, tmp_filename
diff --git a/src/sage/misc/all__sagemath_modules.py b/src/sage/misc/all__sagemath_modules.py
new file mode 100644
index 00000000000..8111aee2a29
--- /dev/null
+++ b/src/sage/misc/all__sagemath_modules.py
@@ -0,0 +1,20 @@
+# All of sage.misc.all except for development tools, session management,
+# and deprecated functionality
+
+from sage.misc.lazy_attribute import lazy_attribute, lazy_class_attribute
+
+from sage.misc.all__sagemath_categories import *
+
+from sage.misc.misc import (BackslashOperator, # Depends on sage.env -- can lower to sagemath-objects after splitting this module
+ exists, forall, is_iterator,
+ random_sublist,
+ pad_zeros,
+ SAGE_DB,
+ newton_method_sizes, compose,
+ nest)
+
+from sage.misc.temporary_file import tmp_dir, tmp_filename # Depends on sage.env
+
+from sage.misc.mathml import mathml
+
+from sage.misc.func_persist import func_persist
diff --git a/src/sage/misc/all__sagemath_ntl.py b/src/sage/misc/all__sagemath_ntl.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/misc/all__sagemath_objects.py b/src/sage/misc/all__sagemath_objects.py
index 30a76f38fab..634584c5567 100644
--- a/src/sage/misc/all__sagemath_objects.py
+++ b/src/sage/misc/all__sagemath_objects.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# Subset of sage.misc.all that is made available by the sage-objects distribution
import sage.structure.all # to break a cyclic import
@@ -6,7 +7,7 @@
from sage.misc.lazy_import import lazy_import
from sage.misc.verbose import (set_verbose, set_verbose_files,
- get_verbose_files, unset_verbose_files, get_verbose)
+ get_verbose_files, unset_verbose_files, get_verbose)
lazy_import('sage.misc.verbose', 'verbose',
deprecation=17815)
from sage.misc.call import attrcall
diff --git a/src/sage/misc/all__sagemath_repl.py b/src/sage/misc/all__sagemath_repl.py
index c7acba4ab07..9c29d75ac03 100644
--- a/src/sage/misc/all__sagemath_repl.py
+++ b/src/sage/misc/all__sagemath_repl.py
@@ -1,3 +1,16 @@
+# sage_setup: distribution = sagemath-repl
+
+from sage.misc.all__sagemath_objects import *
+
from sage.misc.sage_eval import sage_eval, sageobj
from sage.misc.sage_input import sage_input
+
+from sage.misc.banner import version
+
+lazy_import('sage.misc.sagedoc', ['browse_sage_doc',
+ 'search_src', 'search_def', 'search_doc',
+ 'tutorial', 'reference', 'manual', 'developer',
+ 'constructions', 'help'])
+
+lazy_import('pydoc', 'help', 'python_help')
diff --git a/src/sage/misc/allocator.pxd b/src/sage/misc/allocator.pxd
index 7945a75241f..63943541273 100644
--- a/src/sage/misc/allocator.pxd
+++ b/src/sage/misc/allocator.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from cpython.object cimport *
cdef hook_tp_functions_type(object t, newfunc tp_new, destructor tp_dealloc, bint useGC)
diff --git a/src/sage/misc/allocator.pyx b/src/sage/misc/allocator.pyx
index b7fafdce286..9448bbff2c1 100644
--- a/src/sage/misc/allocator.pyx
+++ b/src/sage/misc/allocator.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from cpython.ref cimport Py_INCREF
cdef _hook_tp_functions_type(PyTypeObject *t, newfunc tp_new, destructor tp_dealloc, bint useGC):
diff --git a/src/sage/misc/banner.py b/src/sage/misc/banner.py
index 9d231926705..0ecac1d75b9 100644
--- a/src/sage/misc/banner.py
+++ b/src/sage/misc/banner.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
SageMath version and banner info
"""
diff --git a/src/sage/misc/binary_tree.pxd b/src/sage/misc/binary_tree.pxd
index 4e54f74a71a..4b0c1213363 100644
--- a/src/sage/misc/binary_tree.pxd
+++ b/src/sage/misc/binary_tree.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef struct binary_tree_node:
int key
binary_tree_node *left
diff --git a/src/sage/misc/binary_tree.pyx b/src/sage/misc/binary_tree.pyx
index 8451e0b1e04..0f739946805 100644
--- a/src/sage/misc/binary_tree.pyx
+++ b/src/sage/misc/binary_tree.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Binary trees
diff --git a/src/sage/misc/bindable_class.py b/src/sage/misc/bindable_class.py
index 8739bab3002..d9cfa536dc9 100644
--- a/src/sage/misc/bindable_class.py
+++ b/src/sage/misc/bindable_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Bindable classes
"""
diff --git a/src/sage/misc/c3.pyx b/src/sage/misc/c3.pyx
index a3f37380faf..a4452f4a7e6 100644
--- a/src/sage/misc/c3.pyx
+++ b/src/sage/misc/c3.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
The C3 algorithm
diff --git a/src/sage/misc/c3_controlled.pxd b/src/sage/misc/c3_controlled.pxd
index d5dd5c23183..2340a4db9a8 100644
--- a/src/sage/misc/c3_controlled.pxd
+++ b/src/sage/misc/c3_controlled.pxd
@@ -1 +1,3 @@
+# sage_setup: distribution = sagemath-objects
+
cpdef tuple C3_sorted_merge(list lists, key=?)
diff --git a/src/sage/misc/c3_controlled.pyx b/src/sage/misc/c3_controlled.pyx
index befaa7b5b32..e120c578a86 100644
--- a/src/sage/misc/c3_controlled.pyx
+++ b/src/sage/misc/c3_controlled.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
The C3 algorithm, under control of a total order
diff --git a/src/sage/misc/cachefunc.pxd b/src/sage/misc/cachefunc.pxd
index 1ebd6f25a9d..a08889f22cb 100644
--- a/src/sage/misc/cachefunc.pxd
+++ b/src/sage/misc/cachefunc.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.misc.function_mangling cimport ArgumentFixer
cpdef dict_key(o)
diff --git a/src/sage/misc/cachefunc.pyx b/src/sage/misc/cachefunc.pyx
index 7b95ce26779..094f036cbd3 100644
--- a/src/sage/misc/cachefunc.pyx
+++ b/src/sage/misc/cachefunc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Cached Functions and Methods
diff --git a/src/sage/misc/call.py b/src/sage/misc/call.py
index 6de02981882..959b3143666 100644
--- a/src/sage/misc/call.py
+++ b/src/sage/misc/call.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Attribute and method calling
"""
diff --git a/src/sage/misc/callable_dict.pyx b/src/sage/misc/callable_dict.pyx
index b1f93240a6a..28555e7b3da 100644
--- a/src/sage/misc/callable_dict.pyx
+++ b/src/sage/misc/callable_dict.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
Callable dictionaries
"""
diff --git a/src/sage/misc/classcall_metaclass.pxd b/src/sage/misc/classcall_metaclass.pxd
index 85ea3bd5eef..1ae792f074b 100644
--- a/src/sage/misc/classcall_metaclass.pxd
+++ b/src/sage/misc/classcall_metaclass.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
#*****************************************************************************
# Copyright (C) 2012 Florent Hivert
#
diff --git a/src/sage/misc/classcall_metaclass.pyx b/src/sage/misc/classcall_metaclass.pyx
index 65351cb2756..691f7fec01e 100644
--- a/src/sage/misc/classcall_metaclass.pyx
+++ b/src/sage/misc/classcall_metaclass.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Special Methods for Classes
diff --git a/src/sage/misc/compat.py b/src/sage/misc/compat.py
index e374cf97aac..6bbe90e810e 100644
--- a/src/sage/misc/compat.py
+++ b/src/sage/misc/compat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""Cross-platform compatibility routines and wrappers."""
#*****************************************************************************
diff --git a/src/sage/misc/constant_function.pyx b/src/sage/misc/constant_function.pyx
index e94f36da403..4eb58d7599a 100644
--- a/src/sage/misc/constant_function.pyx
+++ b/src/sage/misc/constant_function.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Constant functions
"""
diff --git a/src/sage/misc/converting_dict.py b/src/sage/misc/converting_dict.py
index 0cd7a47916e..2ae4bf1f47e 100644
--- a/src/sage/misc/converting_dict.py
+++ b/src/sage/misc/converting_dict.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Converting Dictionary
diff --git a/src/sage/misc/cython.py b/src/sage/misc/cython.py
index 93ce994c537..2ab17cad6d5 100644
--- a/src/sage/misc/cython.py
+++ b/src/sage/misc/cython.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.misc.cython
"""
Cython support functions
diff --git a/src/sage/misc/decorators.py b/src/sage/misc/decorators.py
index 9ded4260e3b..ba005138f14 100644
--- a/src/sage/misc/decorators.py
+++ b/src/sage/misc/decorators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Decorators
diff --git a/src/sage/misc/defaults.py b/src/sage/misc/defaults.py
index 3d75021d198..fb1bc4779da 100644
--- a/src/sage/misc/defaults.py
+++ b/src/sage/misc/defaults.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Default Settings
diff --git a/src/sage/misc/derivative.pyx b/src/sage/misc/derivative.pyx
index 9788e82e06e..8196074a492 100644
--- a/src/sage/misc/derivative.pyx
+++ b/src/sage/misc/derivative.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2008 William Stein
#
diff --git a/src/sage/misc/dev_tools.py b/src/sage/misc/dev_tools.py
index 8a4420f2314..5b1832c27bd 100644
--- a/src/sage/misc/dev_tools.py
+++ b/src/sage/misc/dev_tools.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Some tools for developers
@@ -148,6 +149,7 @@ def load_submodules(module=None, exclude_pattern=None):
EXAMPLES::
sage: sage.misc.dev_tools.load_submodules(sage.combinat)
+ load sage.combinat.affine_permutation... succeeded
load sage.combinat.algebraic_combinatorics... succeeded
...
load sage.combinat.words.suffix_trees... succeeded
diff --git a/src/sage/misc/edit_module.py b/src/sage/misc/edit_module.py
index 58a3ab15a2a..e4594c2476b 100644
--- a/src/sage/misc/edit_module.py
+++ b/src/sage/misc/edit_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Edit the source code of Sage interactively
diff --git a/src/sage/misc/element_with_label.py b/src/sage/misc/element_with_label.py
index e7ae38264be..3fca93b08a3 100644
--- a/src/sage/misc/element_with_label.py
+++ b/src/sage/misc/element_with_label.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements with labels.
diff --git a/src/sage/misc/explain_pickle.py b/src/sage/misc/explain_pickle.py
index a0c6323270c..5171927aa91 100644
--- a/src/sage/misc/explain_pickle.py
+++ b/src/sage/misc/explain_pickle.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
A tool for inspecting Python pickles
diff --git a/src/sage/misc/fast_methods.pxd b/src/sage/misc/fast_methods.pxd
index 4df34feab62..8a1070a263b 100644
--- a/src/sage/misc/fast_methods.pxd
+++ b/src/sage/misc/fast_methods.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cdef extern from "Python.h":
cdef size_t SIZEOF_VOID_P
diff --git a/src/sage/misc/fast_methods.pyx b/src/sage/misc/fast_methods.pyx
index ce7f918cccd..6ac4a020da2 100644
--- a/src/sage/misc/fast_methods.pyx
+++ b/src/sage/misc/fast_methods.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Fast methods via Cython
diff --git a/src/sage/misc/flatten.py b/src/sage/misc/flatten.py
index 5ebc8c2ceaa..3b857fcb3d8 100644
--- a/src/sage/misc/flatten.py
+++ b/src/sage/misc/flatten.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"Flatten nested lists"
import sys
diff --git a/src/sage/misc/fpickle.pyx b/src/sage/misc/fpickle.pyx
index 37c26e431ba..b233b9cd7ae 100644
--- a/src/sage/misc/fpickle.pyx
+++ b/src/sage/misc/fpickle.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# cython: old_style_globals=True
# cython: binding=True
"""
diff --git a/src/sage/misc/func_persist.py b/src/sage/misc/func_persist.py
index 65b6d536d79..8e157af0d94 100644
--- a/src/sage/misc/func_persist.py
+++ b/src/sage/misc/func_persist.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Support for persistent functions in .sage files
diff --git a/src/sage/misc/function_mangling.pxd b/src/sage/misc/function_mangling.pxd
index 01604088adc..e7c6cfd8780 100644
--- a/src/sage/misc/function_mangling.pxd
+++ b/src/sage/misc/function_mangling.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cdef class ArgumentFixer:
cdef public object f
cdef public int _ndefault
diff --git a/src/sage/misc/function_mangling.pyx b/src/sage/misc/function_mangling.pyx
index 1392fc4f2fd..7efeb31e09b 100644
--- a/src/sage/misc/function_mangling.pyx
+++ b/src/sage/misc/function_mangling.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# Copyright (c) 2009, Tom Boothby
# All rights reserved.
#
diff --git a/src/sage/misc/functional.py b/src/sage/misc/functional.py
index 4ae9ecd6a2c..2f58fd92df0 100644
--- a/src/sage/misc/functional.py
+++ b/src/sage/misc/functional.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Functional notation
diff --git a/src/sage/misc/html.py b/src/sage/misc/html.py
index 0c7524674bc..e6bd805bae5 100644
--- a/src/sage/misc/html.py
+++ b/src/sage/misc/html.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
HTML Fragments
diff --git a/src/sage/misc/inherit_comparison.pxd b/src/sage/misc/inherit_comparison.pxd
index 28a29270a25..86207223782 100644
--- a/src/sage/misc/inherit_comparison.pxd
+++ b/src/sage/misc/inherit_comparison.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cimport sage.cpython.cython_metaclass
cdef class InheritComparisonMetaclass(type):
diff --git a/src/sage/misc/inherit_comparison.pyx b/src/sage/misc/inherit_comparison.pyx
index 394044d8a9a..9758d25574d 100644
--- a/src/sage/misc/inherit_comparison.pyx
+++ b/src/sage/misc/inherit_comparison.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Metaclass for inheriting comparison functions
diff --git a/src/sage/misc/inline_fortran.py b/src/sage/misc/inline_fortran.py
index 82da6982bec..2c131f77cc6 100644
--- a/src/sage/misc/inline_fortran.py
+++ b/src/sage/misc/inline_fortran.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Fortran compiler
"""
diff --git a/src/sage/misc/instancedoc.pyx b/src/sage/misc/instancedoc.pyx
index 44ee70f64ba..852cde57220 100644
--- a/src/sage/misc/instancedoc.pyx
+++ b/src/sage/misc/instancedoc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Dynamic documentation for instances of classes
diff --git a/src/sage/misc/latex.py b/src/sage/misc/latex.py
index db573d16e66..1769a31dea6 100644
--- a/src/sage/misc/latex.py
+++ b/src/sage/misc/latex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
LaTeX printing support
diff --git a/src/sage/misc/latex_macros.py b/src/sage/misc/latex_macros.py
index 93fb11fbf48..f2109e8cc9d 100644
--- a/src/sage/misc/latex_macros.py
+++ b/src/sage/misc/latex_macros.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
LaTeX macros
diff --git a/src/sage/misc/latex_standalone.py b/src/sage/misc/latex_standalone.py
index c21bdefb643..e539d2912d8 100644
--- a/src/sage/misc/latex_standalone.py
+++ b/src/sage/misc/latex_standalone.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Standalone LaTeX Document class and TikzPicture
diff --git a/src/sage/misc/lazy_attribute.pyx b/src/sage/misc/lazy_attribute.pyx
index e2dee7b58ac..4210fb7e081 100644
--- a/src/sage/misc/lazy_attribute.pyx
+++ b/src/sage/misc/lazy_attribute.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Lazy attributes
@@ -87,7 +88,7 @@ cdef class _lazy_attribute():
sage: src[0]
'def banner():\n'
sage: lines
- 88
+ 89
"""
from sage.misc.sageinspect import sage_getsourcelines
return sage_getsourcelines(self.f)
diff --git a/src/sage/misc/lazy_format.py b/src/sage/misc/lazy_format.py
index b58ea155862..d5e411ff005 100644
--- a/src/sage/misc/lazy_format.py
+++ b/src/sage/misc/lazy_format.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Lazy format strings
"""
diff --git a/src/sage/misc/lazy_import.pyx b/src/sage/misc/lazy_import.pyx
index d25b24a10dc..800ae4bff85 100644
--- a/src/sage/misc/lazy_import.pyx
+++ b/src/sage/misc/lazy_import.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Lazy imports
diff --git a/src/sage/misc/lazy_import_cache.py b/src/sage/misc/lazy_import_cache.py
index d47b6d5edfd..7ae240e8ee0 100644
--- a/src/sage/misc/lazy_import_cache.py
+++ b/src/sage/misc/lazy_import_cache.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Lazy import cache
"""
diff --git a/src/sage/misc/lazy_list.pxd b/src/sage/misc/lazy_list.pxd
index f8b51b47835..13221457695 100644
--- a/src/sage/misc/lazy_list.pxd
+++ b/src/sage/misc/lazy_list.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cdef class lazy_list_generic():
cdef list cache # the cache
cdef lazy_list_generic master # a reference if self is a slice
diff --git a/src/sage/misc/lazy_list.pyx b/src/sage/misc/lazy_list.pyx
index cd750933860..202f629b693 100644
--- a/src/sage/misc/lazy_list.pyx
+++ b/src/sage/misc/lazy_list.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Lazy lists
diff --git a/src/sage/misc/lazy_string.pxd b/src/sage/misc/lazy_string.pxd
index 7f7354e03ca..aa8faae784e 100644
--- a/src/sage/misc/lazy_string.pxd
+++ b/src/sage/misc/lazy_string.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cdef class _LazyString():
cdef func
cdef args
diff --git a/src/sage/misc/lazy_string.pyx b/src/sage/misc/lazy_string.pyx
index a0efbb186bf..1af6efd42ee 100644
--- a/src/sage/misc/lazy_string.pyx
+++ b/src/sage/misc/lazy_string.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
"""
Lazy strings
diff --git a/src/sage/misc/map_threaded.py b/src/sage/misc/map_threaded.py
index db525e0ef6f..8c2a9db5ed4 100644
--- a/src/sage/misc/map_threaded.py
+++ b/src/sage/misc/map_threaded.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Threaded map function
"""
diff --git a/src/sage/misc/mathml.py b/src/sage/misc/mathml.py
index bdb0e6fffe0..5b0a047c7cd 100644
--- a/src/sage/misc/mathml.py
+++ b/src/sage/misc/mathml.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
MathML output support
diff --git a/src/sage/misc/method_decorator.py b/src/sage/misc/method_decorator.py
index 2e7cf206da2..48cc2f64faf 100644
--- a/src/sage/misc/method_decorator.py
+++ b/src/sage/misc/method_decorator.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Base Class to Support Method Decorators
diff --git a/src/sage/misc/misc.py b/src/sage/misc/misc.py
index 39a6ecffd14..50b4053534b 100644
--- a/src/sage/misc/misc.py
+++ b/src/sage/misc/misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Miscellaneous functions
diff --git a/src/sage/misc/misc_c.pxd b/src/sage/misc/misc_c.pxd
index acb36ab6d99..ad553008767 100644
--- a/src/sage/misc/misc_c.pxd
+++ b/src/sage/misc/misc_c.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
cpdef list normalize_index(object key, int size)
diff --git a/src/sage/misc/misc_c.pyx b/src/sage/misc/misc_c.pyx
index 56e7a323258..be5e05e441b 100644
--- a/src/sage/misc/misc_c.pyx
+++ b/src/sage/misc/misc_c.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Miscellaneous functions (Cython)
diff --git a/src/sage/misc/mrange.py b/src/sage/misc/mrange.py
index 47cf9d32e81..bd01e44972d 100644
--- a/src/sage/misc/mrange.py
+++ b/src/sage/misc/mrange.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Multidimensional enumeration
diff --git a/src/sage/misc/multireplace.py b/src/sage/misc/multireplace.py
index 3b70d60e50c..debdd5d56b7 100644
--- a/src/sage/misc/multireplace.py
+++ b/src/sage/misc/multireplace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"multi_replace"
##########################################################################
diff --git a/src/sage/misc/namespace_package.py b/src/sage/misc/namespace_package.py
index eaa05bdfd71..61ba9e25727 100644
--- a/src/sage/misc/namespace_package.py
+++ b/src/sage/misc/namespace_package.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Utility functions for namespace packages in Sage
"""
diff --git a/src/sage/misc/nested_class.pxd b/src/sage/misc/nested_class.pxd
index ac64c28422e..ce96f44df8e 100644
--- a/src/sage/misc/nested_class.pxd
+++ b/src/sage/misc/nested_class.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
cdef class NestedClassMetaclass(type):
pass
diff --git a/src/sage/misc/nested_class.pyx b/src/sage/misc/nested_class.pyx
index 97ed312b08c..637d4c9c792 100644
--- a/src/sage/misc/nested_class.pyx
+++ b/src/sage/misc/nested_class.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Fixing pickle for nested classes
diff --git a/src/sage/misc/object_multiplexer.py b/src/sage/misc/object_multiplexer.py
index 00fd89d6652..202310f41f2 100644
--- a/src/sage/misc/object_multiplexer.py
+++ b/src/sage/misc/object_multiplexer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Multiplex calls to one object to calls to many objects
diff --git a/src/sage/misc/package.py b/src/sage/misc/package.py
index cc7ac5fdfb2..39d87ce6aa4 100644
--- a/src/sage/misc/package.py
+++ b/src/sage/misc/package.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Listing Sage packages
diff --git a/src/sage/misc/package_dir.py b/src/sage/misc/package_dir.py
index 16c78d18462..05432ebebbe 100644
--- a/src/sage/misc/package_dir.py
+++ b/src/sage/misc/package_dir.py
@@ -116,7 +116,7 @@ def read_distribution(src_file):
sage: read_distribution(os.path.join(SAGE_SRC, 'sage', 'graphs', 'graph_decompositions', 'tdlib.pyx'))
'sagemath-tdlib'
sage: read_distribution(os.path.join(SAGE_SRC, 'sage', 'graphs', 'graph_decompositions', 'modular_decomposition.py'))
- ''
+ 'sagemath-graphs'
"""
with open(src_file, encoding='utf-8', errors='ignore') as fh:
for line in fh:
@@ -200,8 +200,8 @@ def update_distribution(src_file, distribution, *, verbose=False):
try:
with open(src_file, 'r') as f:
src_lines = f.read().splitlines()
- except UnicodeDecodeError:
- # Silently skip binary files
+ except (UnicodeDecodeError, FileNotFoundError):
+ # Silently skip binary files, nonexisting files
return
any_found = False
any_change = False
@@ -262,6 +262,8 @@ def is_package_or_sage_namespace_package_dir(path, *, distribution_filter=None):
:mod:`sage.cpython` is an ordinary package::
sage: from sage.misc.package_dir import is_package_or_sage_namespace_package_dir
+ sage: len(sage.cpython.__path__)
+ 1
sage: directory = sage.cpython.__path__[0]; directory
'.../sage/cpython'
sage: is_package_or_sage_namespace_package_dir(directory)
@@ -270,23 +272,26 @@ def is_package_or_sage_namespace_package_dir(path, *, distribution_filter=None):
:mod:`sage.libs.mpfr` only has an ``__init__.pxd`` file, but we consider
it a package directory for consistency with Cython::
- sage: directory = os.path.join(sage.libs.__path__[0], 'mpfr'); directory
- '.../sage/libs/mpfr'
- sage: is_package_or_sage_namespace_package_dir(directory)
+ sage: directories = [os.path.join(p, 'mpfr')
+ ....: for p in sage.libs.__path__]; directories
+ ['.../sage/libs/mpfr'...]
+ sage: any(is_package_or_sage_namespace_package_dir(d) for d in directories)
True
- :mod:`sage` is designated to become an implicit namespace package::
+ :mod:`sage` is an implicit namespace package::
- sage: directory = sage.__path__[0]; directory
+ sage: sage.__path__[0]
'.../sage'
- sage: is_package_or_sage_namespace_package_dir(directory)
+ sage: all(is_package_or_sage_namespace_package_dir(p) for p in sage.__path__)
True
Not a package::
- sage: directory = os.path.join(sage.symbolic.__path__[0], 'ginac'); directory # needs sage.symbolic
- '.../sage/symbolic/ginac'
- sage: is_package_or_sage_namespace_package_dir(directory) # needs sage.symbolic
+ sage: directories = [os.path.join(p, 'ginac') # needs sage.symbolic
+ ....: for p in sage.symbolic.__path__]; directories
+ ['.../sage/symbolic/ginac'...]
+ sage: any(is_package_or_sage_namespace_package_dir(d) # needs sage.symbolic
+ ....: for d in directories)
False
"""
if os.path.exists(os.path.join(path, '__init__.py')): # ordinary package
diff --git a/src/sage/misc/pager.py b/src/sage/misc/pager.py
index 84833d6135a..2e5cd592676 100644
--- a/src/sage/misc/pager.py
+++ b/src/sage/misc/pager.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Pager for showing strings
diff --git a/src/sage/misc/parser.pyx b/src/sage/misc/parser.pyx
index a028e953f90..08179df444f 100644
--- a/src/sage/misc/parser.pyx
+++ b/src/sage/misc/parser.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
A parser for symbolic equations and expressions
diff --git a/src/sage/misc/persist.pyx b/src/sage/misc/persist.pyx
index 3e56e249d45..51be391958f 100644
--- a/src/sage/misc/persist.pyx
+++ b/src/sage/misc/persist.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# cython: old_style_globals=True
# The old_style_globals directive is important for load() to work correctly.
# However, this should be removed in favor of user_globals; see
diff --git a/src/sage/misc/pickle_old.pyx b/src/sage/misc/pickle_old.pyx
index ede0c6abe06..58e9a02d0c1 100644
--- a/src/sage/misc/pickle_old.pyx
+++ b/src/sage/misc/pickle_old.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.superseded import deprecation_cython as deprecation
import sage.rings.fraction_field_element
diff --git a/src/sage/misc/prandom.py b/src/sage/misc/prandom.py
index 800ed60aedd..e49bf2af7ea 100644
--- a/src/sage/misc/prandom.py
+++ b/src/sage/misc/prandom.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Random Numbers with Python API
diff --git a/src/sage/misc/profiler.py b/src/sage/misc/profiler.py
index a8e3592d935..1f0592ede6c 100644
--- a/src/sage/misc/profiler.py
+++ b/src/sage/misc/profiler.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Simple profiling tool
diff --git a/src/sage/misc/proof.py b/src/sage/misc/proof.py
index 12a14869fd5..d4197bc7419 100644
--- a/src/sage/misc/proof.py
+++ b/src/sage/misc/proof.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Whether or not computations are provably correct by default
"""
diff --git a/src/sage/misc/random_testing.py b/src/sage/misc/random_testing.py
index 9dfb866bbc4..f371642bb13 100644
--- a/src/sage/misc/random_testing.py
+++ b/src/sage/misc/random_testing.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Random testing
diff --git a/src/sage/misc/randstate.pxd b/src/sage/misc/randstate.pxd
index fc5e955eb79..1e882164901 100644
--- a/src/sage/misc/randstate.pxd
+++ b/src/sage/misc/randstate.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.libs.gmp.types cimport gmp_randstate_t
# The c_random() method on randstate objects gives a value
diff --git a/src/sage/misc/randstate.pyx b/src/sage/misc/randstate.pyx
index 5809e4d7cb4..6e909df0a9f 100644
--- a/src/sage/misc/randstate.pyx
+++ b/src/sage/misc/randstate.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# sage.doctest: needs sage.groups sage.libs.gap sage.libs.ntl sage.libs.pari
r"""
Random Number States
diff --git a/src/sage/misc/replace_dot_all.py b/src/sage/misc/replace_dot_all.py
index 117b7f6892b..0160601bf63 100644
--- a/src/sage/misc/replace_dot_all.py
+++ b/src/sage/misc/replace_dot_all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Implementation of the command ``sage --fiximports``.
@@ -298,7 +299,7 @@ def process_line(location, line, replacements, row_index, verbose=False):
sage: from sage.misc.replace_dot_all import *
sage: location = os.path.join(sage.env.SAGE_SRC, 'sage/plot/arc.py')
sage: replacements = find_replacements(location, package_regex='sage[.]plot[.]all', verbose=True); replacements
- [[477, 24, 'from sage.plot.graphics import Graphics']]
+ [[478, 24, 'from sage.plot.graphics import Graphics']]
sage: with open(location, "r") as file:
....: lines = file.readlines()
sage: row_index, col_number, *_ = replacements[0]
diff --git a/src/sage/misc/repr.py b/src/sage/misc/repr.py
index e6dc42d56a3..656319e0683 100644
--- a/src/sage/misc/repr.py
+++ b/src/sage/misc/repr.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Repr formatting support
"""
diff --git a/src/sage/misc/reset.pyx b/src/sage/misc/reset.pyx
index 1d979197d3d..561127fd7f0 100644
--- a/src/sage/misc/reset.pyx
+++ b/src/sage/misc/reset.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# cython: old_style_globals=True
"""
Interpreter reset
diff --git a/src/sage/misc/rest_index_of_methods.py b/src/sage/misc/rest_index_of_methods.py
index d1b102829c9..0dfc461d92b 100644
--- a/src/sage/misc/rest_index_of_methods.py
+++ b/src/sage/misc/rest_index_of_methods.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
ReST index of functions
diff --git a/src/sage/misc/sage_eval.py b/src/sage/misc/sage_eval.py
index ec6d94543f9..3f0a62931d6 100644
--- a/src/sage/misc/sage_eval.py
+++ b/src/sage/misc/sage_eval.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Evaluating a String in Sage
"""
diff --git a/src/sage/misc/sage_input.py b/src/sage/misc/sage_input.py
index be38a27d683..a71a9d98c63 100644
--- a/src/sage/misc/sage_input.py
+++ b/src/sage/misc/sage_input.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Sage Input Formatting
diff --git a/src/sage/misc/sage_ostools.pyx b/src/sage/misc/sage_ostools.pyx
index 8a91afe54c2..4db8638daf7 100644
--- a/src/sage/misc/sage_ostools.pyx
+++ b/src/sage/misc/sage_ostools.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Miscellaneous operating system functions
"""
diff --git a/src/sage/misc/sage_timeit.py b/src/sage/misc/sage_timeit.py
index 89c813e563b..b1591b944fb 100644
--- a/src/sage/misc/sage_timeit.py
+++ b/src/sage/misc/sage_timeit.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Accurate timing information for Sage commands
diff --git a/src/sage/misc/sage_timeit_class.pyx b/src/sage/misc/sage_timeit_class.pyx
index f568886574f..06afeb391ad 100644
--- a/src/sage/misc/sage_timeit_class.pyx
+++ b/src/sage/misc/sage_timeit_class.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# This is here in Cython so we can access the interpreter globals
# cython: old_style_globals=True
"""
diff --git a/src/sage/misc/sage_unittest.py b/src/sage/misc/sage_unittest.py
index 9d3ce5db1e8..1da0a3d72c7 100644
--- a/src/sage/misc/sage_unittest.py
+++ b/src/sage/misc/sage_unittest.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Unit testing for Sage objects
"""
diff --git a/src/sage/misc/sagedoc.py b/src/sage/misc/sagedoc.py
index 308fa7d8340..f3e5e93ec12 100644
--- a/src/sage/misc/sagedoc.py
+++ b/src/sage/misc/sagedoc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Format Sage documentation for viewing with IPython and the notebook
diff --git a/src/sage/misc/sagedoc_conf.py b/src/sage/misc/sagedoc_conf.py
index 2cacfcf8327..723898b01c8 100644
--- a/src/sage/misc/sagedoc_conf.py
+++ b/src/sage/misc/sagedoc_conf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Sphinx configuration shared by sage.misc.sphinxify and sage_docbuild
"""
diff --git a/src/sage/misc/sageinspect.py b/src/sage/misc/sageinspect.py
index f79aeafb937..27d4ac54e9a 100644
--- a/src/sage/misc/sageinspect.py
+++ b/src/sage/misc/sageinspect.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Inspect Python, Sage, and Cython objects
@@ -16,7 +17,7 @@
sage: sage_getdoc(sage.rings.rational).lstrip()
'Rational Numbers...'
sage: sage_getsource(sage.rings.rational)
- '# distutils: ...Rational Numbers...'
+ '# sage_setup: distribution = sagemath-categories...# distutils: ...Rational Numbers...'
Python modules::
@@ -24,7 +25,7 @@
'.../sageinspect.py'
sage: print(sage_getdoc(sage.misc.sageinspect).lstrip()[:40])
Inspect Python, Sage, and Cython objects
- sage: sage_getsource(sage.misc.sageinspect).lstrip()[5:-1]
+ sage: sage_getsource(sage.misc.sageinspect).lstrip()[51:-1]
'Inspect Python, Sage, and Cython objects...'
Test introspection of classes defined in Python and Cython files:
@@ -1308,6 +1309,7 @@ def sage_getfile(obj):
sage: from sage.misc.sageinspect import sage_getfile
sage: sage_getfile(sage.rings.rational)
'...sage/rings/rational.pyx'
+ sage: from sage.algebras.steenrod.steenrod_algebra import Sq # needs sage.combinat sage.modules
sage: sage_getfile(Sq) # needs sage.combinat sage.modules
'...sage/algebras/steenrod/steenrod_algebra.py'
sage: sage_getfile(x) # needs sage.symbolic
@@ -1386,6 +1388,7 @@ def sage_getfile_relative(obj):
sage: from sage.misc.sageinspect import sage_getfile_relative
sage: sage_getfile_relative(sage.rings.rational)
'sage/rings/rational.pyx'
+ sage: from sage.algebras.steenrod.steenrod_algebra import Sq # needs sage.combinat sage.modules
sage: sage_getfile_relative(Sq) # needs sage.combinat sage.modules
'sage/algebras/steenrod/steenrod_algebra.py'
sage: sage_getfile_relative(x) # needs sage.symbolic
@@ -2267,8 +2270,9 @@ def sage_getsourcelines(obj):
sage: from sage.misc.sageinspect import sage_getsourcelines
sage: # needs sage.modules
+ sage: from sage.matrix.constructor import matrix
sage: sage_getsourcelines(matrix)[1]
- 21
+ 22
sage: sage_getsourcelines(matrix)[0][0]
'def matrix(*args, **kwds):\n'
@@ -2297,7 +2301,7 @@ def sage_getsourcelines(obj):
sage: sage_getsourcelines(test_func)
(['def base(x):\n',
...
- ' return x\n'], 7)
+ ' return x\n'], 8)
Here are some cases that were covered in :issue:`11298`;
note that line numbers may easily change, and therefore we do
diff --git a/src/sage/misc/search.pxd b/src/sage/misc/search.pxd
index 8cc43ba1b0f..b4cef51a1f2 100644
--- a/src/sage/misc/search.pxd
+++ b/src/sage/misc/search.pxd
@@ -1 +1,3 @@
-cpdef search(object v, object x)
\ No newline at end of file
+# sage_setup: distribution = sagemath-categories
+
+cpdef search(object v, object x)
diff --git a/src/sage/misc/search.pyx b/src/sage/misc/search.pyx
index a9e7149113e..8463285daf4 100644
--- a/src/sage/misc/search.pyx
+++ b/src/sage/misc/search.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Searching a sorted list
diff --git a/src/sage/misc/session.pyx b/src/sage/misc/session.pyx
index 53b732309da..a727e759430 100644
--- a/src/sage/misc/session.pyx
+++ b/src/sage/misc/session.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Loading and saving sessions and listing all variables
diff --git a/src/sage/misc/sphinxify.py b/src/sage/misc/sphinxify.py
index 2fb6e95395c..e89137113f0 100644
--- a/src/sage/misc/sphinxify.py
+++ b/src/sage/misc/sphinxify.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sphinx
r"""
Process docstrings with Sphinx
diff --git a/src/sage/misc/stopgap.pyx b/src/sage/misc/stopgap.pyx
index 0ca72e9fe1a..9aedd5ef1b1 100644
--- a/src/sage/misc/stopgap.pyx
+++ b/src/sage/misc/stopgap.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Stopgaps
"""
diff --git a/src/sage/misc/superseded.py b/src/sage/misc/superseded.py
index 4c4cddddc5c..61f34b59cea 100644
--- a/src/sage/misc/superseded.py
+++ b/src/sage/misc/superseded.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Handling Superseded Functionality
diff --git a/src/sage/misc/table.py b/src/sage/misc/table.py
index 33532ee2610..e3c521b4c31 100644
--- a/src/sage/misc/table.py
+++ b/src/sage/misc/table.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Tables
diff --git a/src/sage/misc/temporary_file.py b/src/sage/misc/temporary_file.py
index daf3cbac8e7..375bd157f02 100644
--- a/src/sage/misc/temporary_file.py
+++ b/src/sage/misc/temporary_file.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
"""
Temporary file handling
diff --git a/src/sage/misc/test_class_pickling.py b/src/sage/misc/test_class_pickling.py
index f9c8003fa4a..c4af34f2132 100644
--- a/src/sage/misc/test_class_pickling.py
+++ b/src/sage/misc/test_class_pickling.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
import copyreg
diff --git a/src/sage/misc/test_nested_class.py b/src/sage/misc/test_nested_class.py
index 40712bfc9fb..747eecab5e4 100644
--- a/src/sage/misc/test_nested_class.py
+++ b/src/sage/misc/test_nested_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Test for nested class Parent
diff --git a/src/sage/misc/timing.py b/src/sage/misc/timing.py
index 5e5c49b9594..5d82fa5f538 100644
--- a/src/sage/misc/timing.py
+++ b/src/sage/misc/timing.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Timing functions
"""
diff --git a/src/sage/misc/trace.py b/src/sage/misc/trace.py
index 0c9210bfd19..a530a416f81 100644
--- a/src/sage/misc/trace.py
+++ b/src/sage/misc/trace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Interactively tracing execution of a command
"""
diff --git a/src/sage/misc/unknown.py b/src/sage/misc/unknown.py
index b87a3e67506..7c4e71a5f18 100644
--- a/src/sage/misc/unknown.py
+++ b/src/sage/misc/unknown.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
The Unknown truth value
diff --git a/src/sage/misc/verbose.py b/src/sage/misc/verbose.py
index 184f8d10053..2c186b445aa 100644
--- a/src/sage/misc/verbose.py
+++ b/src/sage/misc/verbose.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Verbosity System and Logging in SageMath
diff --git a/src/sage/misc/viewer.py b/src/sage/misc/viewer.py
index 85ff09aa341..caca6647acf 100644
--- a/src/sage/misc/viewer.py
+++ b/src/sage/misc/viewer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-environment
r"""
Determination of programs for viewing web pages, etc.
diff --git a/src/sage/misc/weak_dict.pxd b/src/sage/misc/weak_dict.pxd
index f1e85012be7..7be392b79f3 100644
--- a/src/sage/misc/weak_dict.pxd
+++ b/src/sage/misc/weak_dict.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cdef class WeakValueDictionary(dict):
cdef __weakref__
cdef callback
diff --git a/src/sage/misc/weak_dict.pyx b/src/sage/misc/weak_dict.pyx
index d806335d0e9..f4b20c0fcd1 100644
--- a/src/sage/misc/weak_dict.pyx
+++ b/src/sage/misc/weak_dict.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Fast and safe weak value dictionary
diff --git a/src/sage/modular/abvar/abvar.py b/src/sage/modular/abvar/abvar.py
index 8e0906e45a8..c64ae540afb 100644
--- a/src/sage/modular/abvar/abvar.py
+++ b/src/sage/modular/abvar/abvar.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Base class for modular abelian varieties
diff --git a/src/sage/modular/abvar/abvar_ambient_jacobian.py b/src/sage/modular/abvar/abvar_ambient_jacobian.py
index 32a006b3729..bb5d66cb327 100644
--- a/src/sage/modular/abvar/abvar_ambient_jacobian.py
+++ b/src/sage/modular/abvar/abvar_ambient_jacobian.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Ambient Jacobian abelian variety
diff --git a/src/sage/modular/abvar/abvar_newform.py b/src/sage/modular/abvar/abvar_newform.py
index 5d4976d5d54..af2be64c305 100644
--- a/src/sage/modular/abvar/abvar_newform.py
+++ b/src/sage/modular/abvar/abvar_newform.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Abelian varieties attached to newforms
diff --git a/src/sage/modular/abvar/all.py b/src/sage/modular/abvar/all.py
index f0971bc0b42..e15363355dc 100644
--- a/src/sage/modular/abvar/all.py
+++ b/src/sage/modular/abvar/all.py
@@ -1,7 +1,8 @@
+# sage_setup: distribution = sagemath-schemes
###########################################################################
# Copyright (C) 2007 William Stein #
# Distributed under the terms of the GNU General Public License (GPL) #
-# http://www.gnu.org/licenses/ #
+# https://www.gnu.org/licenses/ #
###########################################################################
-from .constructor import J0, J1, JH, AbelianVariety
+from sage.modular.abvar.constructor import J0, J1, JH, AbelianVariety
diff --git a/src/sage/modular/abvar/constructor.py b/src/sage/modular/abvar/constructor.py
index 5dd6a77b4ca..0155acf27c9 100644
--- a/src/sage/modular/abvar/constructor.py
+++ b/src/sage/modular/abvar/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Constructors for certain modular abelian varieties
diff --git a/src/sage/modular/abvar/cuspidal_subgroup.py b/src/sage/modular/abvar/cuspidal_subgroup.py
index 82e373ad716..efacd8d21c5 100644
--- a/src/sage/modular/abvar/cuspidal_subgroup.py
+++ b/src/sage/modular/abvar/cuspidal_subgroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Cuspidal subgroups of modular abelian varieties
diff --git a/src/sage/modular/abvar/finite_subgroup.py b/src/sage/modular/abvar/finite_subgroup.py
index 2725e11a387..8df71f0fc0e 100644
--- a/src/sage/modular/abvar/finite_subgroup.py
+++ b/src/sage/modular/abvar/finite_subgroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Finite subgroups of modular abelian varieties
diff --git a/src/sage/modular/abvar/homology.py b/src/sage/modular/abvar/homology.py
index da586d7c0e0..447e21ed6c7 100644
--- a/src/sage/modular/abvar/homology.py
+++ b/src/sage/modular/abvar/homology.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
r"""
Homology of modular abelian varieties
diff --git a/src/sage/modular/abvar/homspace.py b/src/sage/modular/abvar/homspace.py
index e914e11cc8e..77a9e372777 100644
--- a/src/sage/modular/abvar/homspace.py
+++ b/src/sage/modular/abvar/homspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Spaces of homomorphisms between modular abelian varieties
diff --git a/src/sage/modular/abvar/lseries.py b/src/sage/modular/abvar/lseries.py
index 4d67f7b2dfd..a27812b222b 100644
--- a/src/sage/modular/abvar/lseries.py
+++ b/src/sage/modular/abvar/lseries.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
`L`-series of modular abelian varieties
diff --git a/src/sage/modular/abvar/morphism.py b/src/sage/modular/abvar/morphism.py
index cc7e5a22ab2..b85cc670df9 100644
--- a/src/sage/modular/abvar/morphism.py
+++ b/src/sage/modular/abvar/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
r"""
Hecke operators and morphisms between modular abelian varieties
diff --git a/src/sage/modular/abvar/torsion_point.py b/src/sage/modular/abvar/torsion_point.py
index 6702a231cbb..849b9451f30 100644
--- a/src/sage/modular/abvar/torsion_point.py
+++ b/src/sage/modular/abvar/torsion_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
"""
Torsion points on modular abelian varieties
diff --git a/src/sage/modular/abvar/torsion_subgroup.py b/src/sage/modular/abvar/torsion_subgroup.py
index 5993a611355..25cd48ada24 100644
--- a/src/sage/modular/abvar/torsion_subgroup.py
+++ b/src/sage/modular/abvar/torsion_subgroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Torsion subgroups of modular abelian varieties
diff --git a/src/sage/modular/all.py b/src/sage/modular/all.py
index cfccb18e65f..19c03a95049 100644
--- a/src/sage/modular/all.py
+++ b/src/sage/modular/all.py
@@ -1,24 +1,25 @@
+# sage_setup: distribution = sagemath-schemes
from sage.misc.lazy_import import lazy_import
-from .quatalg.all import *
+from sage.modular.quatalg.all import *
-from .modsym.all import *
+from sage.modular.modsym.all import *
-from .modform.all import *
+from sage.modular.modform.all import *
-from .ssmod.all import *
+from sage.modular.ssmod.all import *
-from .abvar.all import *
+from sage.modular.abvar.all import *
-from .dirichlet import (DirichletGroup,
- kronecker_character, kronecker_character_upside_down,
- trivial_character)
+from sage.modular.dirichlet import (DirichletGroup,
+ kronecker_character, kronecker_character_upside_down,
+ trivial_character)
-from .arithgroup.all import (Gamma0, Gamma1, GammaH, Gamma, SL2Z,
- ArithmeticSubgroup_Permutation,
- CongruenceSubgroup, FareySymbol)
+from sage.modular.arithgroup.all import (Gamma0, Gamma1, GammaH, Gamma, SL2Z,
+ ArithmeticSubgroup_Permutation,
+ CongruenceSubgroup, FareySymbol)
-from .cusps import Cusp, Cusps
+from sage.modular.cusps import Cusp, Cusps
lazy_import('sage.modular.dims', ('dimension_cusp_forms',
'dimension_new_cusp_forms',
@@ -27,19 +28,20 @@
'sturm_bound'),
deprecation=(32647, 'removed from main namespace'))
-from .etaproducts import (EtaGroup, EtaProduct, EtaGroupElement,
- AllCusps, CuspFamily)
+from sage.modular.etaproducts import (EtaGroup, EtaProduct, EtaGroupElement,
+ AllCusps, CuspFamily)
lazy_import('sage.modular.multiple_zeta', ['Multizeta', 'Multizetas'])
-from .overconvergent.all import *
+from sage.modular.overconvergent.all import *
-from .local_comp.all import *
+from sage.modular.local_comp.all import *
-from .cusps_nf import NFCusp, NFCusps, Gamma0_NFCusps
+from sage.modular.cusps_nf import NFCusp, NFCusps, Gamma0_NFCusps
-from .btquotients.all import *
+from sage.modular.btquotients.all import *
-from .pollack_stevens.all import *
+from sage.modular.pollack_stevens.all import *
-from .quasimodform.all import *
+from sage.modular.quasimodform.all import *
+del lazy_import
diff --git a/src/sage/modular/arithgroup/all.py b/src/sage/modular/arithgroup/all.py
index d4fb241d1f9..4dd543b8e14 100644
--- a/src/sage/modular/arithgroup/all.py
+++ b/src/sage/modular/arithgroup/all.py
@@ -1,18 +1,20 @@
+# sage_setup: distribution = sagemath-schemes
# Note: the is_xxx functions are imported to here, but not from here up to sage.modular.all, so
# they are invisible to the user but easy to import all in one go by other code that needs them.
-from .arithgroup_generic import is_ArithmeticSubgroup
-from .congroup_generic import is_CongruenceSubgroup, CongruenceSubgroup_constructor as CongruenceSubgroup
-from .congroup_gammaH import GammaH_constructor as GammaH, is_GammaH
-from .congroup_gamma1 import Gamma1_constructor as Gamma1, is_Gamma1
-from .congroup_gamma0 import Gamma0_constructor as Gamma0, is_Gamma0
-from .congroup_gamma import Gamma_constructor as Gamma, is_Gamma
-from .congroup_sl2z import SL2Z, is_SL2Z
+from sage.modular.arithgroup.arithgroup_generic import is_ArithmeticSubgroup
+from sage.modular.arithgroup.congroup_generic import is_CongruenceSubgroup, CongruenceSubgroup_constructor as CongruenceSubgroup
+from sage.modular.arithgroup.congroup_gammaH import GammaH_constructor as GammaH, is_GammaH
+from sage.modular.arithgroup.congroup_gamma1 import Gamma1_constructor as Gamma1, is_Gamma1
+from sage.modular.arithgroup.congroup_gamma0 import Gamma0_constructor as Gamma0, is_Gamma0
+from sage.modular.arithgroup.congroup_gamma import Gamma_constructor as Gamma, is_Gamma
+from sage.modular.arithgroup.congroup_sl2z import SL2Z, is_SL2Z
from sage.misc.lazy_import import lazy_import
lazy_import('sage.modular.arithgroup.arithgroup_perm', 'ArithmeticSubgroup_Permutation')
-from .congroup import (degeneracy_coset_representatives_gamma0,
- degeneracy_coset_representatives_gamma1)
+from sage.modular.arithgroup.congroup import (degeneracy_coset_representatives_gamma0,
+ degeneracy_coset_representatives_gamma1)
-from .farey_symbol import Farey as FareySymbol
+from sage.modular.arithgroup.farey_symbol import Farey as FareySymbol
+del lazy_import
diff --git a/src/sage/modular/arithgroup/arithgroup_element.pyx b/src/sage/modular/arithgroup/arithgroup_element.pyx
index 1b3db34a04c..b0602f1ec0b 100644
--- a/src/sage/modular/arithgroup/arithgroup_element.pyx
+++ b/src/sage/modular/arithgroup/arithgroup_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Elements of arithmetic subgroups
"""
diff --git a/src/sage/modular/arithgroup/arithgroup_generic.py b/src/sage/modular/arithgroup/arithgroup_generic.py
index 105eaed623b..90be418efae 100644
--- a/src/sage/modular/arithgroup/arithgroup_generic.py
+++ b/src/sage/modular/arithgroup/arithgroup_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Arithmetic subgroups, finite index subgroups of `\SL_2(\ZZ)`
diff --git a/src/sage/modular/arithgroup/arithgroup_perm.py b/src/sage/modular/arithgroup/arithgroup_perm.py
index 6ff94e3bcac..e9ec3094d8b 100644
--- a/src/sage/modular/arithgroup/arithgroup_perm.py
+++ b/src/sage/modular/arithgroup/arithgroup_perm.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.groups
r"""
Arithmetic subgroups defined by permutations of cosets
diff --git a/src/sage/modular/arithgroup/congroup.pyx b/src/sage/modular/arithgroup/congroup.pyx
index 002e3bb02da..90a4b113392 100644
--- a/src/sage/modular/arithgroup/congroup.pyx
+++ b/src/sage/modular/arithgroup/congroup.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Helper functions for congruence subgroups
diff --git a/src/sage/modular/arithgroup/congroup_gamma.py b/src/sage/modular/arithgroup/congroup_gamma.py
index fee74dcce8e..2c90bd49a7c 100644
--- a/src/sage/modular/arithgroup/congroup_gamma.py
+++ b/src/sage/modular/arithgroup/congroup_gamma.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Congruence subgroup `\Gamma(N)`
"""
diff --git a/src/sage/modular/arithgroup/congroup_gamma0.py b/src/sage/modular/arithgroup/congroup_gamma0.py
index aecf1582f98..21231c5fab1 100644
--- a/src/sage/modular/arithgroup/congroup_gamma0.py
+++ b/src/sage/modular/arithgroup/congroup_gamma0.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Congruence subgroup `\Gamma_0(N)`
diff --git a/src/sage/modular/arithgroup/congroup_gamma1.py b/src/sage/modular/arithgroup/congroup_gamma1.py
index 0e417904b0e..4b73021bf33 100644
--- a/src/sage/modular/arithgroup/congroup_gamma1.py
+++ b/src/sage/modular/arithgroup/congroup_gamma1.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Congruence subgroup `\Gamma_1(N)`
diff --git a/src/sage/modular/arithgroup/congroup_gammaH.py b/src/sage/modular/arithgroup/congroup_gammaH.py
index 0b97c83ecf7..2162c8fa684 100644
--- a/src/sage/modular/arithgroup/congroup_gammaH.py
+++ b/src/sage/modular/arithgroup/congroup_gammaH.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Congruence subgroup `\Gamma_H(N)`
diff --git a/src/sage/modular/arithgroup/congroup_generic.py b/src/sage/modular/arithgroup/congroup_generic.py
index 3fd60c06165..7cabf15d855 100644
--- a/src/sage/modular/arithgroup/congroup_generic.py
+++ b/src/sage/modular/arithgroup/congroup_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.gap sage.libs.pari
r"""
Congruence arithmetic subgroups of `\SL_2(\ZZ)`
diff --git a/src/sage/modular/arithgroup/congroup_sl2z.py b/src/sage/modular/arithgroup/congroup_sl2z.py
index d870f207b38..baa20b48463 100644
--- a/src/sage/modular/arithgroup/congroup_sl2z.py
+++ b/src/sage/modular/arithgroup/congroup_sl2z.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
The modular group `\SL_2(\ZZ)`
diff --git a/src/sage/modular/arithgroup/farey_symbol.pyx b/src/sage/modular/arithgroup/farey_symbol.pyx
index 61c2446a16b..f43abc157b7 100644
--- a/src/sage/modular/arithgroup/farey_symbol.pyx
+++ b/src/sage/modular/arithgroup/farey_symbol.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# distutils: sources = sage/modular/arithgroup/sl2z.cpp sage/modular/arithgroup/farey.cpp
# distutils: language = c++
# distutils: extra_compile_args = -std=c++11
diff --git a/src/sage/modular/arithgroup/tests.py b/src/sage/modular/arithgroup/tests.py
index d30ead3ac4c..080067913e6 100644
--- a/src/sage/modular/arithgroup/tests.py
+++ b/src/sage/modular/arithgroup/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.groups
r"""
Testing arithmetic subgroup
diff --git a/src/sage/modular/btquotients/all.py b/src/sage/modular/btquotients/all.py
index 3807442da70..15c39012db2 100644
--- a/src/sage/modular/btquotients/all.py
+++ b/src/sage/modular/btquotients/all.py
@@ -1,3 +1,5 @@
-from .btquotient import BruhatTitsQuotient
-#from pautomorphicform import pAdicAutomorphicForms
-#from pautomorphicform import BruhatTitsHarmonicCocycles
+# sage_setup: distribution = sagemath-schemes
+
+from sage.modular.btquotients.btquotient import BruhatTitsQuotient
+# from pautomorphicform import pAdicAutomorphicForms
+# from pautomorphicform import BruhatTitsHarmonicCocycles
diff --git a/src/sage/modular/btquotients/btquotient.py b/src/sage/modular/btquotients/btquotient.py
index 828a003b0ab..29be990dd5d 100644
--- a/src/sage/modular/btquotients/btquotient.py
+++ b/src/sage/modular/btquotients/btquotient.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Quotients of the Bruhat-Tits tree
diff --git a/src/sage/modular/btquotients/pautomorphicform.py b/src/sage/modular/btquotients/pautomorphicform.py
index fc06af86c38..03298554a01 100644
--- a/src/sage/modular/btquotients/pautomorphicform.py
+++ b/src/sage/modular/btquotients/pautomorphicform.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
#########################################################################
# Copyright (C) 2011 Cameron Franc and Marc Masdeu
diff --git a/src/sage/modular/buzzard.py b/src/sage/modular/buzzard.py
index 72e72e745cc..06583f1a435 100644
--- a/src/sage/modular/buzzard.py
+++ b/src/sage/modular/buzzard.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Conjectural slopes of Hecke polynomials
diff --git a/src/sage/modular/congroup.py b/src/sage/modular/congroup.py
index 23a6679fdcc..57ae81ec647 100644
--- a/src/sage/modular/congroup.py
+++ b/src/sage/modular/congroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
###########################################################
# Re-bindings for unpickling
#
diff --git a/src/sage/modular/congroup_element.py b/src/sage/modular/congroup_element.py
index 61ae5071e46..f599fcf9c64 100644
--- a/src/sage/modular/congroup_element.py
+++ b/src/sage/modular/congroup_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
###########################################################
# Re-bindings for unpickling
#
diff --git a/src/sage/modular/cusps.py b/src/sage/modular/cusps.py
index 263eb61308a..f9857528547 100644
--- a/src/sage/modular/cusps.py
+++ b/src/sage/modular/cusps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
The set `\mathbb{P}^1(\QQ)` of cusps
diff --git a/src/sage/modular/cusps_nf.py b/src/sage/modular/cusps_nf.py
index 8d8b580a74e..73f020879ad 100644
--- a/src/sage/modular/cusps_nf.py
+++ b/src/sage/modular/cusps_nf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
The set `\mathbb{P}^1(K)` of cusps of a number field `K`
diff --git a/src/sage/modular/dims.py b/src/sage/modular/dims.py
index b8b83e87b57..e7d6e79c2a1 100644
--- a/src/sage/modular/dims.py
+++ b/src/sage/modular/dims.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Dimensions of spaces of modular forms
diff --git a/src/sage/modular/dirichlet.py b/src/sage/modular/dirichlet.py
index 7b0c28c5c32..b73169fc7fb 100644
--- a/src/sage/modular/dirichlet.py
+++ b/src/sage/modular/dirichlet.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Dirichlet characters
diff --git a/src/sage/modular/etaproducts.py b/src/sage/modular/etaproducts.py
index 54442f02ec8..51bbebac142 100644
--- a/src/sage/modular/etaproducts.py
+++ b/src/sage/modular/etaproducts.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Eta-products on modular curves `X_0(N)`
diff --git a/src/sage/modular/hecke/algebra.py b/src/sage/modular/hecke/algebra.py
index 2f314e5d3ef..0d932ab23c3 100644
--- a/src/sage/modular/hecke/algebra.py
+++ b/src/sage/modular/hecke/algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Hecke algebras
diff --git a/src/sage/modular/hecke/all.py b/src/sage/modular/hecke/all.py
index 0aaa2232773..144d82f1ca3 100644
--- a/src/sage/modular/hecke/all.py
+++ b/src/sage/modular/hecke/all.py
@@ -1,19 +1,21 @@
-from .homspace import HeckeModuleHomspace, is_HeckeModuleHomspace
+# sage_setup: distribution = sagemath-schemes
-from .module import HeckeModule_free_module, HeckeModule_generic, is_HeckeModule
+from sage.modular.hecke.homspace import HeckeModuleHomspace, is_HeckeModuleHomspace
-from .hecke_operator import HeckeOperator, is_HeckeOperator
+from sage.modular.hecke.module import HeckeModule_free_module, HeckeModule_generic, is_HeckeModule
-from .degenmap import DegeneracyMap
+from sage.modular.hecke.hecke_operator import HeckeOperator, is_HeckeOperator
-from .algebra import HeckeAlgebra, is_HeckeAlgebra
+from sage.modular.hecke.degenmap import DegeneracyMap
-from .morphism import (HeckeModuleMorphism, HeckeModuleMorphism_matrix,
- is_HeckeModuleMorphism,
- is_HeckeModuleMorphism_matrix)
+from sage.modular.hecke.algebra import HeckeAlgebra, is_HeckeAlgebra
-from .element import HeckeModuleElement, is_HeckeModuleElement
+from sage.modular.hecke.morphism import (HeckeModuleMorphism, HeckeModuleMorphism_matrix,
+ is_HeckeModuleMorphism,
+ is_HeckeModuleMorphism_matrix)
-from .submodule import HeckeSubmodule, is_HeckeSubmodule
+from sage.modular.hecke.element import HeckeModuleElement, is_HeckeModuleElement
-from .ambient_module import AmbientHeckeModule, is_AmbientHeckeModule
+from sage.modular.hecke.submodule import HeckeSubmodule, is_HeckeSubmodule
+
+from sage.modular.hecke.ambient_module import AmbientHeckeModule, is_AmbientHeckeModule
diff --git a/src/sage/modular/hecke/ambient_module.py b/src/sage/modular/hecke/ambient_module.py
index 7805cd2d364..b1f758c3e6a 100644
--- a/src/sage/modular/hecke/ambient_module.py
+++ b/src/sage/modular/hecke/ambient_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Ambient Hecke modules
diff --git a/src/sage/modular/hecke/degenmap.py b/src/sage/modular/hecke/degenmap.py
index 887506e7559..1590a691f19 100644
--- a/src/sage/modular/hecke/degenmap.py
+++ b/src/sage/modular/hecke/degenmap.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Degeneracy maps
diff --git a/src/sage/modular/hecke/element.py b/src/sage/modular/hecke/element.py
index f45a29f6b31..f0ce2337bee 100644
--- a/src/sage/modular/hecke/element.py
+++ b/src/sage/modular/hecke/element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Elements of Hecke modules
diff --git a/src/sage/modular/hecke/hecke_operator.py b/src/sage/modular/hecke/hecke_operator.py
index b1e6ea9707c..d21262f91e7 100644
--- a/src/sage/modular/hecke/hecke_operator.py
+++ b/src/sage/modular/hecke/hecke_operator.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Hecke operators
diff --git a/src/sage/modular/hecke/homspace.py b/src/sage/modular/hecke/homspace.py
index 194162faba4..34b9a8ec3d6 100644
--- a/src/sage/modular/hecke/homspace.py
+++ b/src/sage/modular/hecke/homspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Hom spaces between Hecke modules
diff --git a/src/sage/modular/hecke/module.py b/src/sage/modular/hecke/module.py
index 65536b4a043..7757f83ba10 100644
--- a/src/sage/modular/hecke/module.py
+++ b/src/sage/modular/hecke/module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Hecke modules
diff --git a/src/sage/modular/hecke/morphism.py b/src/sage/modular/hecke/morphism.py
index ac9cfbf4e84..b3f105807e2 100644
--- a/src/sage/modular/hecke/morphism.py
+++ b/src/sage/modular/hecke/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Morphisms of Hecke modules
diff --git a/src/sage/modular/hecke/submodule.py b/src/sage/modular/hecke/submodule.py
index 5e9bf127496..c9873c05b48 100644
--- a/src/sage/modular/hecke/submodule.py
+++ b/src/sage/modular/hecke/submodule.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Submodules of Hecke modules
diff --git a/src/sage/modular/hypergeometric_misc.pxd b/src/sage/modular/hypergeometric_misc.pxd
index 00bf9a97e9a..79a8931c3ce 100644
--- a/src/sage/modular/hypergeometric_misc.pxd
+++ b/src/sage/modular/hypergeometric_misc.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-schemes
cpdef hgm_coeffs(long long p, int f, int prec, gamma, m, int D,
gtable, int gtable_prec, bint use_longs)
diff --git a/src/sage/modular/hypergeometric_misc.pyx b/src/sage/modular/hypergeometric_misc.pyx
index b8c39aeefa7..77f351c3e1a 100644
--- a/src/sage/modular/hypergeometric_misc.pyx
+++ b/src/sage/modular/hypergeometric_misc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Some utility routines for the hypergeometric motives package that benefit
significantly from Cythonization.
diff --git a/src/sage/modular/hypergeometric_motive.py b/src/sage/modular/hypergeometric_motive.py
index 26a9ff00c7c..afe857d0e40 100644
--- a/src/sage/modular/hypergeometric_motive.py
+++ b/src/sage/modular/hypergeometric_motive.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Hypergeometric motives
diff --git a/src/sage/modular/local_comp/all.py b/src/sage/modular/local_comp/all.py
index 1df1ec59fd6..60806b8c93f 100644
--- a/src/sage/modular/local_comp/all.py
+++ b/src/sage/modular/local_comp/all.py
@@ -1 +1,3 @@
-from .local_comp import LocalComponent
+# sage_setup: distribution = sagemath-schemes
+
+from sage.modular.local_comp.local_comp import LocalComponent
diff --git a/src/sage/modular/local_comp/liftings.py b/src/sage/modular/local_comp/liftings.py
index dcb901cc3a1..fa5ef7d369a 100644
--- a/src/sage/modular/local_comp/liftings.py
+++ b/src/sage/modular/local_comp/liftings.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Helper functions for local components
diff --git a/src/sage/modular/local_comp/local_comp.py b/src/sage/modular/local_comp/local_comp.py
index 0fb990c17de..21f62500928 100644
--- a/src/sage/modular/local_comp/local_comp.py
+++ b/src/sage/modular/local_comp/local_comp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Local components of modular forms
diff --git a/src/sage/modular/local_comp/smoothchar.py b/src/sage/modular/local_comp/smoothchar.py
index cfce7550fda..e278c6b2106 100644
--- a/src/sage/modular/local_comp/smoothchar.py
+++ b/src/sage/modular/local_comp/smoothchar.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari sage.rings.number_field
r"""
Smooth characters of `p`-adic fields
diff --git a/src/sage/modular/local_comp/type_space.py b/src/sage/modular/local_comp/type_space.py
index a808ef48743..a85005966a8 100644
--- a/src/sage/modular/local_comp/type_space.py
+++ b/src/sage/modular/local_comp/type_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Type spaces of newforms
diff --git a/src/sage/modular/modform/all.py b/src/sage/modular/modform/all.py
index feb1521d3ca..18afdf8401e 100644
--- a/src/sage/modular/modform/all.py
+++ b/src/sage/modular/modform/all.py
@@ -1,28 +1,30 @@
+# sage_setup: distribution = sagemath-schemes
#########################################################################
# Copyright (C) 2004--2006 William Stein
#
# Distributed under the terms of the GNU General Public License (GPL)
#
-# http://www.gnu.org/licenses/
+# https://www.gnu.org/licenses/
#########################################################################
-from .constructor import ModularForms, CuspForms, EisensteinForms, Newforms, Newform
+from sage.modular.modform.constructor import ModularForms, CuspForms, EisensteinForms, Newforms, Newform
-from .eis_series import eisenstein_series_qexp, eisenstein_series_lseries
+from sage.modular.modform.eis_series import eisenstein_series_qexp, eisenstein_series_lseries
-from .half_integral import half_integral_weight_modform_basis
+from sage.modular.modform.half_integral import half_integral_weight_modform_basis
-from .theta import theta_qexp, theta2_qexp
+from sage.modular.modform.theta import theta_qexp, theta2_qexp
from sage.misc.lazy_import import lazy_import
lazy_import('sage.modular.modform.j_invariant', 'j_invariant_qexp')
lazy_import('sage.modular.modform.vm_basis', ['victor_miller_basis', 'delta_qexp'])
-from .hecke_operator_on_qexp import hecke_operator_on_qexp, hecke_operator_on_basis
+from sage.modular.modform.hecke_operator_on_qexp import hecke_operator_on_qexp, hecke_operator_on_basis
-from .numerical import NumericalEigenforms as numerical_eigenforms
+from sage.modular.modform.numerical import NumericalEigenforms as numerical_eigenforms
-from .element import delta_lseries
+from sage.modular.modform.element import delta_lseries
-from .ring import ModularFormsRing
+from sage.modular.modform.ring import ModularFormsRing
+del lazy_import
diff --git a/src/sage/modular/modform/ambient.py b/src/sage/modular/modform/ambient.py
index dac59731ec5..2267b67247a 100644
--- a/src/sage/modular/modform/ambient.py
+++ b/src/sage/modular/modform/ambient.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Ambient spaces of modular forms
diff --git a/src/sage/modular/modform/ambient_R.py b/src/sage/modular/modform/ambient_R.py
index 9f416f49169..76ce3658725 100644
--- a/src/sage/modular/modform/ambient_R.py
+++ b/src/sage/modular/modform/ambient_R.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Modular forms over a non-minimal base ring
diff --git a/src/sage/modular/modform/ambient_eps.py b/src/sage/modular/modform/ambient_eps.py
index 57bad5752eb..0fe07aef281 100644
--- a/src/sage/modular/modform/ambient_eps.py
+++ b/src/sage/modular/modform/ambient_eps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari sage.rings.number_field
r"""
Modular forms with character
diff --git a/src/sage/modular/modform/ambient_g0.py b/src/sage/modular/modform/ambient_g0.py
index 0b2ffb8fb83..17186291d89 100644
--- a/src/sage/modular/modform/ambient_g0.py
+++ b/src/sage/modular/modform/ambient_g0.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Modular forms for `\Gamma_0(N)` over `\QQ`
diff --git a/src/sage/modular/modform/ambient_g1.py b/src/sage/modular/modform/ambient_g1.py
index 40c6c579e2d..02a660951b9 100644
--- a/src/sage/modular/modform/ambient_g1.py
+++ b/src/sage/modular/modform/ambient_g1.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Modular forms for `\Gamma_1(N)` and `\Gamma_H(N)` over `\QQ`
diff --git a/src/sage/modular/modform/constructor.py b/src/sage/modular/modform/constructor.py
index 02107b2f9d7..2ba3f3b9889 100644
--- a/src/sage/modular/modform/constructor.py
+++ b/src/sage/modular/modform/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Creating spaces of modular forms
diff --git a/src/sage/modular/modform/cuspidal_submodule.py b/src/sage/modular/modform/cuspidal_submodule.py
index 0bf53873ed3..a0f28881dfe 100644
--- a/src/sage/modular/modform/cuspidal_submodule.py
+++ b/src/sage/modular/modform/cuspidal_submodule.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
The cuspidal subspace
diff --git a/src/sage/modular/modform/defaults.py b/src/sage/modular/modform/defaults.py
index e818030eebf..4a7d07edb69 100644
--- a/src/sage/modular/modform/defaults.py
+++ b/src/sage/modular/modform/defaults.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
#########################################################################
# Copyright (C) 2004--2006 William Stein
#
diff --git a/src/sage/modular/modform/eis_series.py b/src/sage/modular/modform/eis_series.py
index bb3e89697c2..8037c6bd0ec 100644
--- a/src/sage/modular/modform/eis_series.py
+++ b/src/sage/modular/modform/eis_series.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Eisenstein series
diff --git a/src/sage/modular/modform/eisenstein_submodule.py b/src/sage/modular/modform/eisenstein_submodule.py
index 034d94479d5..41332b31d18 100644
--- a/src/sage/modular/modform/eisenstein_submodule.py
+++ b/src/sage/modular/modform/eisenstein_submodule.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
The Eisenstein subspace
diff --git a/src/sage/modular/modform/element.py b/src/sage/modular/modform/element.py
index 999b8dc93b9..5703faada50 100644
--- a/src/sage/modular/modform/element.py
+++ b/src/sage/modular/modform/element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Elements of modular forms spaces
diff --git a/src/sage/modular/modform/find_generators.py b/src/sage/modular/modform/find_generators.py
index 3fb00a3f9af..b3a8c039864 100644
--- a/src/sage/modular/modform/find_generators.py
+++ b/src/sage/modular/modform/find_generators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
r"""
This module is now called ``ring.py`` (see :issue:`31559`). Do not import from here as
diff --git a/src/sage/modular/modform/half_integral.py b/src/sage/modular/modform/half_integral.py
index bf6c33e73a1..bee31db4d92 100644
--- a/src/sage/modular/modform/half_integral.py
+++ b/src/sage/modular/modform/half_integral.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Compute spaces of half-integral weight modular forms
diff --git a/src/sage/modular/modform/hecke_operator_on_qexp.py b/src/sage/modular/modform/hecke_operator_on_qexp.py
index 33d26b5f43b..6aea5bc9717 100644
--- a/src/sage/modular/modform/hecke_operator_on_qexp.py
+++ b/src/sage/modular/modform/hecke_operator_on_qexp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Hecke operators on `q`-expansions
diff --git a/src/sage/modular/modform/j_invariant.py b/src/sage/modular/modform/j_invariant.py
index 48b7c91fcb0..3297b0509e7 100644
--- a/src/sage/modular/modform/j_invariant.py
+++ b/src/sage/modular/modform/j_invariant.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
r"""
`q`-expansion of `j`-invariant
diff --git a/src/sage/modular/modform/l_series_gross_zagier.py b/src/sage/modular/modform/l_series_gross_zagier.py
index 28acdeeb978..39728eb87b9 100644
--- a/src/sage/modular/modform/l_series_gross_zagier.py
+++ b/src/sage/modular/modform/l_series_gross_zagier.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
from sage.rings.integer import Integer
from sage.structure.sage_object import SageObject
from sage.lfunctions.dokchitser import Dokchitser
diff --git a/src/sage/modular/modform/l_series_gross_zagier_coeffs.pyx b/src/sage/modular/modform/l_series_gross_zagier_coeffs.pyx
index f91a3e256f0..a6deb180a79 100644
--- a/src/sage/modular/modform/l_series_gross_zagier_coeffs.pyx
+++ b/src/sage/modular/modform/l_series_gross_zagier_coeffs.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
from cysignals.memory cimport check_allocarray, check_calloc, sig_free
from cysignals.signals cimport sig_check, sig_on, sig_off
diff --git a/src/sage/modular/modform/notes.py b/src/sage/modular/modform/notes.py
index 833bb017bfd..61064b6f40b 100644
--- a/src/sage/modular/modform/notes.py
+++ b/src/sage/modular/modform/notes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Design notes
diff --git a/src/sage/modular/modform/numerical.py b/src/sage/modular/modform/numerical.py
index 362caee0038..278bb977f66 100644
--- a/src/sage/modular/modform/numerical.py
+++ b/src/sage/modular/modform/numerical.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Numerical computation of newforms
diff --git a/src/sage/modular/modform/periods.py b/src/sage/modular/modform/periods.py
index d1b3dd72245..8c6fce42899 100644
--- a/src/sage/modular/modform/periods.py
+++ b/src/sage/modular/modform/periods.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Periods of modular forms
"""
diff --git a/src/sage/modular/modform/ring.py b/src/sage/modular/modform/ring.py
index c0a69717cfa..365f9f2a504 100644
--- a/src/sage/modular/modform/ring.py
+++ b/src/sage/modular/modform/ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Graded rings of modular forms
diff --git a/src/sage/modular/modform/space.py b/src/sage/modular/modform/space.py
index 289119f9d37..186d353398a 100644
--- a/src/sage/modular/modform/space.py
+++ b/src/sage/modular/modform/space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Generic spaces of modular forms
diff --git a/src/sage/modular/modform/submodule.py b/src/sage/modular/modform/submodule.py
index f2bc33f5782..3fe00bbee78 100644
--- a/src/sage/modular/modform/submodule.py
+++ b/src/sage/modular/modform/submodule.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Submodules of spaces of modular forms
diff --git a/src/sage/modular/modform/tests.py b/src/sage/modular/modform/tests.py
index 9ca5b54a194..62902dfb3c6 100644
--- a/src/sage/modular/modform/tests.py
+++ b/src/sage/modular/modform/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
TESTS:
diff --git a/src/sage/modular/modform/theta.py b/src/sage/modular/modform/theta.py
index ea0a88c81ba..d2e247c5e61 100644
--- a/src/sage/modular/modform/theta.py
+++ b/src/sage/modular/modform/theta.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
`q`-expansions of theta series
diff --git a/src/sage/modular/modform/vm_basis.py b/src/sage/modular/modform/vm_basis.py
index 244a305e324..0588ee3c5e1 100644
--- a/src/sage/modular/modform/vm_basis.py
+++ b/src/sage/modular/modform/vm_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
r"""
The Victor Miller basis
diff --git a/src/sage/modular/modform/weight1.py b/src/sage/modular/modform/weight1.py
index c2ce006decb..b9c5eb31d5e 100644
--- a/src/sage/modular/modform/weight1.py
+++ b/src/sage/modular/modform/weight1.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
Weight 1 modular forms
diff --git a/src/sage/modular/modform_hecketriangle/abstract_ring.py b/src/sage/modular/modform_hecketriangle/abstract_ring.py
index 3b68a6e505c..4342a229740 100644
--- a/src/sage/modular/modform_hecketriangle/abstract_ring.py
+++ b/src/sage/modular/modform_hecketriangle/abstract_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Graded rings of modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/abstract_space.py b/src/sage/modular/modform_hecketriangle/abstract_space.py
index 47bd1e6c766..b6652b51412 100644
--- a/src/sage/modular/modform_hecketriangle/abstract_space.py
+++ b/src/sage/modular/modform_hecketriangle/abstract_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/all.py b/src/sage/modular/modform_hecketriangle/all.py
index cd236efc334..bfb8f6b8239 100644
--- a/src/sage/modular/modform_hecketriangle/all.py
+++ b/src/sage/modular/modform_hecketriangle/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
AUTHORS:
@@ -11,19 +12,19 @@
# the License, or (at your option) any later version.
# https://www.gnu.org/licenses/
# ****************************************************************************
-from .hecke_triangle_groups import HeckeTriangleGroup
+from sage.modular.modform_hecketriangle.hecke_triangle_groups import HeckeTriangleGroup
-from .series_constructor import MFSeriesConstructor
+from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
-from .graded_ring import (QuasiMeromorphicModularFormsRing,
- QuasiWeakModularFormsRing, QuasiModularFormsRing,
- QuasiCuspFormsRing, MeromorphicModularFormsRing,
- WeakModularFormsRing,
- ModularFormsRing, CuspFormsRing)
+from sage.modular.modform_hecketriangle.graded_ring import (QuasiMeromorphicModularFormsRing,
+ QuasiWeakModularFormsRing, QuasiModularFormsRing,
+ QuasiCuspFormsRing, MeromorphicModularFormsRing,
+ WeakModularFormsRing,
+ ModularFormsRing, CuspFormsRing)
-from .space import (QuasiMeromorphicModularForms, QuasiWeakModularForms,
- QuasiModularForms, QuasiCuspForms,
- MeromorphicModularForms, WeakModularForms, ModularForms,
- CuspForms, ZeroForm)
+from sage.modular.modform_hecketriangle.space import (QuasiMeromorphicModularForms, QuasiWeakModularForms,
+ QuasiModularForms, QuasiCuspForms,
+ MeromorphicModularForms, WeakModularForms, ModularForms,
+ CuspForms, ZeroForm)
-from .subspace import ModularFormsSubSpace
+from sage.modular.modform_hecketriangle.subspace import ModularFormsSubSpace
diff --git a/src/sage/modular/modform_hecketriangle/analytic_type.py b/src/sage/modular/modform_hecketriangle/analytic_type.py
index e5fc53abb25..33a8a3bb15d 100644
--- a/src/sage/modular/modform_hecketriangle/analytic_type.py
+++ b/src/sage/modular/modform_hecketriangle/analytic_type.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.graphs
r"""
Analytic types of modular forms
diff --git a/src/sage/modular/modform_hecketriangle/constructor.py b/src/sage/modular/modform_hecketriangle/constructor.py
index 040aa01add7..835ce412ef6 100644
--- a/src/sage/modular/modform_hecketriangle/constructor.py
+++ b/src/sage/modular/modform_hecketriangle/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Constructor for spaces of modular forms for Hecke triangle groups based on a type
diff --git a/src/sage/modular/modform_hecketriangle/element.py b/src/sage/modular/modform_hecketriangle/element.py
index 4f58baafff5..ae7855e47eb 100644
--- a/src/sage/modular/modform_hecketriangle/element.py
+++ b/src/sage/modular/modform_hecketriangle/element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Elements of Hecke modular forms spaces
diff --git a/src/sage/modular/modform_hecketriangle/functors.py b/src/sage/modular/modform_hecketriangle/functors.py
index 3ba9c865231..332afdff963 100644
--- a/src/sage/modular/modform_hecketriangle/functors.py
+++ b/src/sage/modular/modform_hecketriangle/functors.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Functor construction for all spaces
diff --git a/src/sage/modular/modform_hecketriangle/graded_ring.py b/src/sage/modular/modform_hecketriangle/graded_ring.py
index 877f6562235..df2fca9cf93 100644
--- a/src/sage/modular/modform_hecketriangle/graded_ring.py
+++ b/src/sage/modular/modform_hecketriangle/graded_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Graded rings of modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/graded_ring_element.py b/src/sage/modular/modform_hecketriangle/graded_ring_element.py
index 0de1562677b..63974cfc322 100644
--- a/src/sage/modular/modform_hecketriangle/graded_ring_element.py
+++ b/src/sage/modular/modform_hecketriangle/graded_ring_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Elements of graded rings of modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/hecke_triangle_group_element.py b/src/sage/modular/modform_hecketriangle/hecke_triangle_group_element.py
index 2d52c934adf..258711a730e 100644
--- a/src/sage/modular/modform_hecketriangle/hecke_triangle_group_element.py
+++ b/src/sage/modular/modform_hecketriangle/hecke_triangle_group_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.gap
r"""
Hecke triangle group elements
diff --git a/src/sage/modular/modform_hecketriangle/hecke_triangle_groups.py b/src/sage/modular/modform_hecketriangle/hecke_triangle_groups.py
index b6a4da172dc..7860990c17b 100644
--- a/src/sage/modular/modform_hecketriangle/hecke_triangle_groups.py
+++ b/src/sage/modular/modform_hecketriangle/hecke_triangle_groups.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.gap
r"""
Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/readme.py b/src/sage/modular/modform_hecketriangle/readme.py
index 920822a2257..a6b6e92a180 100644
--- a/src/sage/modular/modform_hecketriangle/readme.py
+++ b/src/sage/modular/modform_hecketriangle/readme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.gap
r"""
Overview of Hecke triangle groups and modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/series_constructor.py b/src/sage/modular/modform_hecketriangle/series_constructor.py
index b44f41a09a0..61fb99edd69 100644
--- a/src/sage/modular/modform_hecketriangle/series_constructor.py
+++ b/src/sage/modular/modform_hecketriangle/series_constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.gap
r"""
Series constructor for modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/space.py b/src/sage/modular/modform_hecketriangle/space.py
index e897808ef23..a6b152e39a1 100644
--- a/src/sage/modular/modform_hecketriangle/space.py
+++ b/src/sage/modular/modform_hecketriangle/space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modform_hecketriangle/subspace.py b/src/sage/modular/modform_hecketriangle/subspace.py
index 504c5fc1936..7a896bf7165 100644
--- a/src/sage/modular/modform_hecketriangle/subspace.py
+++ b/src/sage/modular/modform_hecketriangle/subspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat sage.graphs
r"""
Subspaces of modular forms for Hecke triangle groups
diff --git a/src/sage/modular/modsym/all.py b/src/sage/modular/modsym/all.py
index 798a4a7d55f..09838f3a306 100644
--- a/src/sage/modular/modsym/all.py
+++ b/src/sage/modular/modsym/all.py
@@ -1,15 +1,17 @@
+# sage_setup: distribution = sagemath-schemes
from sage.misc.lazy_import import lazy_import
-from .element import set_modsym_print_mode
+from sage.modular.modsym.element import set_modsym_print_mode
-from .modsym import ModularSymbols, ModularSymbols_clear_cache
+from sage.modular.modsym.modsym import ModularSymbols, ModularSymbols_clear_cache
lazy_import('sage.modular.modsym.heilbronn', ['HeilbronnCremona', 'HeilbronnMerel'])
-from .p1list import P1List, lift_to_sl2z
+from sage.modular.modsym.p1list import P1List, lift_to_sl2z
-from .p1list_nf import P1NFList, MSymbol
+from sage.modular.modsym.p1list_nf import P1NFList, MSymbol
-from .ghlist import GHlist
+from sage.modular.modsym.ghlist import GHlist
-from .g1list import G1list
+from sage.modular.modsym.g1list import G1list
+del lazy_import
diff --git a/src/sage/modular/modsym/ambient.py b/src/sage/modular/modsym/ambient.py
index 00c97e59789..8b9dbeb39ed 100644
--- a/src/sage/modular/modsym/ambient.py
+++ b/src/sage/modular/modsym/ambient.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
r"""
Ambient spaces of modular symbols
diff --git a/src/sage/modular/modsym/boundary.py b/src/sage/modular/modsym/boundary.py
index fab48aab6a3..52a6e04f7ba 100644
--- a/src/sage/modular/modsym/boundary.py
+++ b/src/sage/modular/modsym/boundary.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
r"""
Space of boundary modular symbols
diff --git a/src/sage/modular/modsym/element.py b/src/sage/modular/modsym/element.py
index 686e64e96d8..3debfdddcae 100644
--- a/src/sage/modular/modsym/element.py
+++ b/src/sage/modular/modsym/element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
A single element of an ambient space of modular symbols
diff --git a/src/sage/modular/modsym/g1list.py b/src/sage/modular/modsym/g1list.py
index 4485a52814a..857e43b7944 100644
--- a/src/sage/modular/modsym/g1list.py
+++ b/src/sage/modular/modsym/g1list.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
List of coset representatives for `\Gamma_1(N)` in `\SL_2(\ZZ)`
"""
diff --git a/src/sage/modular/modsym/ghlist.py b/src/sage/modular/modsym/ghlist.py
index 62989e22105..6ad9359d795 100644
--- a/src/sage/modular/modsym/ghlist.py
+++ b/src/sage/modular/modsym/ghlist.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
r"""
List of coset representatives for `\Gamma_H(N)` in `\SL_2(\ZZ)`
diff --git a/src/sage/modular/modsym/hecke_operator.py b/src/sage/modular/modsym/hecke_operator.py
index 818de55e97e..a018ffafc41 100644
--- a/src/sage/modular/modsym/hecke_operator.py
+++ b/src/sage/modular/modsym/hecke_operator.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Sparse action of Hecke operators
diff --git a/src/sage/modular/modsym/manin_symbol.pxd b/src/sage/modular/modsym/manin_symbol.pxd
index d7f6c7adeae..014fd3b7fd8 100644
--- a/src/sage/modular/modsym/manin_symbol.pxd
+++ b/src/sage/modular/modsym/manin_symbol.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
from sage.structure.element cimport Element
cdef class ManinSymbol(Element):
diff --git a/src/sage/modular/modsym/manin_symbol.pyx b/src/sage/modular/modsym/manin_symbol.pyx
index 6da79e21b2d..91698dd2138 100644
--- a/src/sage/modular/modsym/manin_symbol.pyx
+++ b/src/sage/modular/modsym/manin_symbol.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
r"""
Manin symbols
diff --git a/src/sage/modular/modsym/manin_symbol_list.py b/src/sage/modular/modsym/manin_symbol_list.py
index 7499b6fb500..5889bfd024f 100644
--- a/src/sage/modular/modsym/manin_symbol_list.py
+++ b/src/sage/modular/modsym/manin_symbol_list.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Manin symbol lists
diff --git a/src/sage/modular/modsym/modsym.py b/src/sage/modular/modsym/modsym.py
index 51108d1e84a..965249c4436 100644
--- a/src/sage/modular/modsym/modsym.py
+++ b/src/sage/modular/modsym/modsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
r"""
Creation of modular symbols spaces
diff --git a/src/sage/modular/modsym/modular_symbols.py b/src/sage/modular/modsym/modular_symbols.py
index 57dc8f23a2b..adc91cd8644 100644
--- a/src/sage/modular/modsym/modular_symbols.py
+++ b/src/sage/modular/modsym/modular_symbols.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
r"""
Modular symbols `\{\alpha`, `\beta\}`
diff --git a/src/sage/modular/modsym/p1list.pxd b/src/sage/modular/modsym/p1list.pxd
index b66f28b8ad6..83af443a0a3 100644
--- a/src/sage/modular/modsym/p1list.pxd
+++ b/src/sage/modular/modsym/p1list.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
cdef class export:
diff --git a/src/sage/modular/modsym/p1list.pyx b/src/sage/modular/modsym/p1list.pyx
index 1613d90729a..57fc3612084 100644
--- a/src/sage/modular/modsym/p1list.pyx
+++ b/src/sage/modular/modsym/p1list.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# distutils: libraries = gmp
# distutils: extra_compile_args = -D_XPG6
diff --git a/src/sage/modular/modsym/p1list_nf.py b/src/sage/modular/modsym/p1list_nf.py
index 25c68137e0c..d238da98811 100644
--- a/src/sage/modular/modsym/p1list_nf.py
+++ b/src/sage/modular/modsym/p1list_nf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
Lists of Manin symbols over number fields, elements of `\mathbb{P}^1(R/N)`
diff --git a/src/sage/modular/modsym/relation_matrix.py b/src/sage/modular/modsym/relation_matrix.py
index 609d70c2446..e59020bb209 100644
--- a/src/sage/modular/modsym/relation_matrix.py
+++ b/src/sage/modular/modsym/relation_matrix.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Relation matrices for ambient modular symbols spaces
diff --git a/src/sage/modular/modsym/relation_matrix_pyx.pyx b/src/sage/modular/modsym/relation_matrix_pyx.pyx
index 46d8d716e62..328dc2177d5 100644
--- a/src/sage/modular/modsym/relation_matrix_pyx.pyx
+++ b/src/sage/modular/modsym/relation_matrix_pyx.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Optimized computing of relation matrices in certain cases
"""
diff --git a/src/sage/modular/modsym/space.py b/src/sage/modular/modsym/space.py
index a097c1b0c8d..78b610da298 100644
--- a/src/sage/modular/modsym/space.py
+++ b/src/sage/modular/modsym/space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Base class of the space of modular symbols
diff --git a/src/sage/modular/modsym/subspace.py b/src/sage/modular/modsym/subspace.py
index fdc69b18b9a..95b15921db4 100644
--- a/src/sage/modular/modsym/subspace.py
+++ b/src/sage/modular/modsym/subspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Subspace of ambient spaces of modular symbols
diff --git a/src/sage/modular/modsym/tests.py b/src/sage/modular/modsym/tests.py
index 3af2ffb1d87..b710d716956 100644
--- a/src/sage/modular/modsym/tests.py
+++ b/src/sage/modular/modsym/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Testing modular symbols spaces
diff --git a/src/sage/modular/multiple_zeta.py b/src/sage/modular/multiple_zeta.py
index a6eac6dbacb..d93951b6aa4 100644
--- a/src/sage/modular/multiple_zeta.py
+++ b/src/sage/modular/multiple_zeta.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat
r"""
Algebra of motivic multiple zeta values
diff --git a/src/sage/modular/multiple_zeta_F_algebra.py b/src/sage/modular/multiple_zeta_F_algebra.py
index 863a369940c..25bee87d69c 100644
--- a/src/sage/modular/multiple_zeta_F_algebra.py
+++ b/src/sage/modular/multiple_zeta_F_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.combinat
r"""
F-algebra for motivic multiple zeta values.
diff --git a/src/sage/modular/overconvergent/all.py b/src/sage/modular/overconvergent/all.py
index 11e23071854..ca1ff92f993 100644
--- a/src/sage/modular/overconvergent/all.py
+++ b/src/sage/modular/overconvergent/all.py
@@ -1,5 +1,7 @@
-from .weightspace import WeightSpace_constructor as pAdicWeightSpace
+# sage_setup: distribution = sagemath-schemes
-from .genus0 import OverconvergentModularForms
+from sage.modular.overconvergent.weightspace import WeightSpace_constructor as pAdicWeightSpace
-from .hecke_series import hecke_series
+from sage.modular.overconvergent.genus0 import OverconvergentModularForms
+
+from sage.modular.overconvergent.hecke_series import hecke_series
diff --git a/src/sage/modular/overconvergent/genus0.py b/src/sage/modular/overconvergent/genus0.py
index 58f31f4af0c..56a8c220e05 100644
--- a/src/sage/modular/overconvergent/genus0.py
+++ b/src/sage/modular/overconvergent/genus0.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari sage.rings.padics
r"""
Overconvergent `p`-adic modular forms for small primes
diff --git a/src/sage/modular/overconvergent/hecke_series.py b/src/sage/modular/overconvergent/hecke_series.py
index 1e10c6386a9..8311cfd8ced 100644
--- a/src/sage/modular/overconvergent/hecke_series.py
+++ b/src/sage/modular/overconvergent/hecke_series.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint sage.libs.pari
r"""
Atkin/Hecke series for overconvergent modular forms
diff --git a/src/sage/modular/overconvergent/weightspace.py b/src/sage/modular/overconvergent/weightspace.py
index e9478c40a90..bc6ea3ef7e4 100644
--- a/src/sage/modular/overconvergent/weightspace.py
+++ b/src/sage/modular/overconvergent/weightspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
The space of `p`-adic weights
diff --git a/src/sage/modular/pollack_stevens/all.py b/src/sage/modular/pollack_stevens/all.py
index a51787d6fd2..86fa7d86ccb 100644
--- a/src/sage/modular/pollack_stevens/all.py
+++ b/src/sage/modular/pollack_stevens/all.py
@@ -1,3 +1,5 @@
-from .space import PollackStevensModularSymbols
-from .distributions import Symk
-from .distributions import OverconvergentDistributions
+# sage_setup: distribution = sagemath-schemes
+
+from sage.modular.pollack_stevens.space import PollackStevensModularSymbols
+from sage.modular.pollack_stevens.distributions import Symk
+from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
diff --git a/src/sage/modular/pollack_stevens/dist.pyx b/src/sage/modular/pollack_stevens/dist.pyx
index 1f79133f2f5..f1a656c6e60 100644
--- a/src/sage/modular/pollack_stevens/dist.pyx
+++ b/src/sage/modular/pollack_stevens/dist.pyx
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# distutils: libraries = gmp
# distutils: extra_compile_args = -D_XPG6
"""
diff --git a/src/sage/modular/pollack_stevens/distributions.py b/src/sage/modular/pollack_stevens/distributions.py
index f33b4022842..49b702b3cb9 100644
--- a/src/sage/modular/pollack_stevens/distributions.py
+++ b/src/sage/modular/pollack_stevens/distributions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Spaces of distributions for Pollack-Stevens modular symbols
diff --git a/src/sage/modular/pollack_stevens/fund_domain.py b/src/sage/modular/pollack_stevens/fund_domain.py
index cab712a95bf..b55cecdbc90 100644
--- a/src/sage/modular/pollack_stevens/fund_domain.py
+++ b/src/sage/modular/pollack_stevens/fund_domain.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Manin relations for overconvergent modular symbols
diff --git a/src/sage/modular/pollack_stevens/manin_map.py b/src/sage/modular/pollack_stevens/manin_map.py
index 0af3ed946d0..e78cd0e51ce 100644
--- a/src/sage/modular/pollack_stevens/manin_map.py
+++ b/src/sage/modular/pollack_stevens/manin_map.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Manin map
diff --git a/src/sage/modular/pollack_stevens/modsym.py b/src/sage/modular/pollack_stevens/modsym.py
index 914f0447992..c9c5a536df2 100644
--- a/src/sage/modular/pollack_stevens/modsym.py
+++ b/src/sage/modular/pollack_stevens/modsym.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Element class for Pollack-Stevens' modular symbols
diff --git a/src/sage/modular/pollack_stevens/padic_lseries.py b/src/sage/modular/pollack_stevens/padic_lseries.py
index 748b5dc9993..ee69a93a7cf 100644
--- a/src/sage/modular/pollack_stevens/padic_lseries.py
+++ b/src/sage/modular/pollack_stevens/padic_lseries.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.ring.padics
r"""
`p`-adic `L`-series attached to overconvergent eigensymbols
diff --git a/src/sage/modular/pollack_stevens/sigma0.py b/src/sage/modular/pollack_stevens/sigma0.py
index ce52830f070..24b9ff99393 100644
--- a/src/sage/modular/pollack_stevens/sigma0.py
+++ b/src/sage/modular/pollack_stevens/sigma0.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
The matrix monoid `\Sigma_0(N)`.
diff --git a/src/sage/modular/pollack_stevens/space.py b/src/sage/modular/pollack_stevens/space.py
index c0464dd61d8..7cd0e1410bd 100644
--- a/src/sage/modular/pollack_stevens/space.py
+++ b/src/sage/modular/pollack_stevens/space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Pollack-Stevens' modular symbols spaces
diff --git a/src/sage/modular/quasimodform/all.py b/src/sage/modular/quasimodform/all.py
index 114783b2e37..935b04bc09e 100644
--- a/src/sage/modular/quasimodform/all.py
+++ b/src/sage/modular/quasimodform/all.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-schemes
# Quasimodular forms rings
-from .ring import QuasiModularForms
+from sage.modular.quasimodform.ring import QuasiModularForms
diff --git a/src/sage/modular/quasimodform/element.py b/src/sage/modular/quasimodform/element.py
index dd45fca7713..ac7e2d2b8d7 100644
--- a/src/sage/modular/quasimodform/element.py
+++ b/src/sage/modular/quasimodform/element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.flint
"""
Elements of quasimodular forms rings
diff --git a/src/sage/modular/quasimodform/ring.py b/src/sage/modular/quasimodform/ring.py
index dcdf8e470c2..4c1984171bc 100644
--- a/src/sage/modular/quasimodform/ring.py
+++ b/src/sage/modular/quasimodform/ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Graded quasimodular forms ring
diff --git a/src/sage/modular/quatalg/all.py b/src/sage/modular/quatalg/all.py
index e554527d96c..7328385e126 100644
--- a/src/sage/modular/quatalg/all.py
+++ b/src/sage/modular/quatalg/all.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-schemes
-from .brandt import BrandtModule
+from sage.modular.quatalg.brandt import BrandtModule
diff --git a/src/sage/modular/quatalg/brandt.py b/src/sage/modular/quatalg/brandt.py
index 28ae7e6201b..abb49610a04 100644
--- a/src/sage/modular/quatalg/brandt.py
+++ b/src/sage/modular/quatalg/brandt.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Brandt modules
diff --git a/src/sage/modular/ssmod/all.py b/src/sage/modular/ssmod/all.py
index 1257c107a99..4e7d2356d18 100644
--- a/src/sage/modular/ssmod/all.py
+++ b/src/sage/modular/ssmod/all.py
@@ -1,6 +1,8 @@
+# sage_setup: distribution = sagemath-schemes
from sage.misc.lazy_import import lazy_import
lazy_import("sage.modular.ssmod.ssmod", ['dimension_supersingular_module',
'supersingular_j',
'SupersingularModule',
'supersingular_D'])
+del lazy_import
diff --git a/src/sage/modular/ssmod/ssmod.py b/src/sage/modular/ssmod/ssmod.py
index d2d2d717cbc..82417142980 100644
--- a/src/sage/modular/ssmod/ssmod.py
+++ b/src/sage/modular/ssmod/ssmod.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Module of supersingular points
diff --git a/src/sage/modules/all.py b/src/sage/modules/all.py
index 929d16b79d0..bbecf800f09 100644
--- a/src/sage/modules/all.py
+++ b/src/sage/modules/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# *****************************************************************************
# Copyright (C) 2005 William Stein
#
@@ -38,3 +39,4 @@
lazy_import("sage.modules.multi_filtered_vector_space", "MultiFilteredVectorSpace")
lazy_import("sage.modules.free_quadratic_module_integer_symmetric", "IntegralLattice")
lazy_import("sage.modules.torsion_quadratic_module", "TorsionQuadraticForm")
+del lazy_import
diff --git a/src/sage/modules/all__sagemath_linbox.py b/src/sage/modules/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/modules/all__sagemath_objects.py b/src/sage/modules/all__sagemath_objects.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/modules/all__sagemath_symbolics.py b/src/sage/modules/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/modules/complex_double_vector.py b/src/sage/modules/complex_double_vector.py
index 728d862e8fc..fad12406262 100644
--- a/src/sage/modules/complex_double_vector.py
+++ b/src/sage/modules/complex_double_vector.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Pickling for the old CDF vector class
diff --git a/src/sage/modules/diamond_cutting.py b/src/sage/modules/diamond_cutting.py
index 14adddd4b54..b1e25c1fc88 100644
--- a/src/sage/modules/diamond_cutting.py
+++ b/src/sage/modules/diamond_cutting.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.geometry.polyhedron
"""
Diamond cutting implementation
diff --git a/src/sage/modules/fg_pid/all.py b/src/sage/modules/fg_pid/all.py
index e69de29bb2d..6f6ab52d0f2 100644
--- a/src/sage/modules/fg_pid/all.py
+++ b/src/sage/modules/fg_pid/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-modules
diff --git a/src/sage/modules/fg_pid/fgp_element.py b/src/sage/modules/fg_pid/fgp_element.py
index 9152c09d187..99e93b32b20 100644
--- a/src/sage/modules/fg_pid/fgp_element.py
+++ b/src/sage/modules/fg_pid/fgp_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements of finitely generated modules over a PID
diff --git a/src/sage/modules/fg_pid/fgp_module.py b/src/sage/modules/fg_pid/fgp_module.py
index 6965b4281b7..5a39cdd5b57 100644
--- a/src/sage/modules/fg_pid/fgp_module.py
+++ b/src/sage/modules/fg_pid/fgp_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Finitely generated modules over a PID
diff --git a/src/sage/modules/fg_pid/fgp_morphism.py b/src/sage/modules/fg_pid/fgp_morphism.py
index c3b5374f706..f4e5edbb6bd 100644
--- a/src/sage/modules/fg_pid/fgp_morphism.py
+++ b/src/sage/modules/fg_pid/fgp_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Morphisms between finitely generated modules over a PID
diff --git a/src/sage/modules/filtered_vector_space.py b/src/sage/modules/filtered_vector_space.py
index 68bbff12c8d..95fce5e5c12 100644
--- a/src/sage/modules/filtered_vector_space.py
+++ b/src/sage/modules/filtered_vector_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
`\ZZ`-filtered vector spaces
diff --git a/src/sage/modules/finite_submodule_iter.pxd b/src/sage/modules/finite_submodule_iter.pxd
index 8173f265673..9817e2855be 100644
--- a/src/sage/modules/finite_submodule_iter.pxd
+++ b/src/sage/modules/finite_submodule_iter.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport ModuleElement
cdef class FiniteZZsubmodule_iterator:
diff --git a/src/sage/modules/finite_submodule_iter.pyx b/src/sage/modules/finite_submodule_iter.pyx
index f3ef152cb86..c157111a16f 100644
--- a/src/sage/modules/finite_submodule_iter.pyx
+++ b/src/sage/modules/finite_submodule_iter.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.finite_rings
r"""
Iterators over finite submodules of a `\ZZ`-module
diff --git a/src/sage/modules/free_module.py b/src/sage/modules/free_module.py
index 6e2c9e4dc1d..c0e709829e1 100644
--- a/src/sage/modules/free_module.py
+++ b/src/sage/modules/free_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free modules
diff --git a/src/sage/modules/free_module_element.pxd b/src/sage/modules/free_module_element.pxd
index 084423a2714..4712c53e72c 100644
--- a/src/sage/modules/free_module_element.pxd
+++ b/src/sage/modules/free_module_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport Vector
cdef class FreeModuleElement(Vector):
diff --git a/src/sage/modules/free_module_element.pyx b/src/sage/modules/free_module_element.pyx
index c93c71f195e..b0a64351969 100644
--- a/src/sage/modules/free_module_element.pyx
+++ b/src/sage/modules/free_module_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements of free modules
diff --git a/src/sage/modules/free_module_homspace.py b/src/sage/modules/free_module_homspace.py
index 9513a56ea56..2d8a6e656b8 100644
--- a/src/sage/modules/free_module_homspace.py
+++ b/src/sage/modules/free_module_homspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Homspaces between free modules
diff --git a/src/sage/modules/free_module_integer.py b/src/sage/modules/free_module_integer.py
index 9602d04fde0..bded2894baf 100644
--- a/src/sage/modules/free_module_integer.py
+++ b/src/sage/modules/free_module_integer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Discrete subgroups of `\\ZZ^n`
diff --git a/src/sage/modules/free_module_morphism.py b/src/sage/modules/free_module_morphism.py
index 147dbe5b57a..3fdd76bff6f 100644
--- a/src/sage/modules/free_module_morphism.py
+++ b/src/sage/modules/free_module_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Morphisms of free modules
diff --git a/src/sage/modules/free_quadratic_module.py b/src/sage/modules/free_quadratic_module.py
index 78b3b179b33..46363438dc6 100644
--- a/src/sage/modules/free_quadratic_module.py
+++ b/src/sage/modules/free_quadratic_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free quadratic modules
diff --git a/src/sage/modules/free_quadratic_module_integer_symmetric.py b/src/sage/modules/free_quadratic_module_integer_symmetric.py
index c899c5203fb..eab90951ccc 100644
--- a/src/sage/modules/free_quadratic_module_integer_symmetric.py
+++ b/src/sage/modules/free_quadratic_module_integer_symmetric.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Integral lattices
diff --git a/src/sage/modules/matrix_morphism.py b/src/sage/modules/matrix_morphism.py
index dc4b3817eca..ab194038d93 100644
--- a/src/sage/modules/matrix_morphism.py
+++ b/src/sage/modules/matrix_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Morphisms defined by a matrix
diff --git a/src/sage/modules/misc.py b/src/sage/modules/misc.py
index abcdfa01a20..0b2af8bc192 100644
--- a/src/sage/modules/misc.py
+++ b/src/sage/modules/misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Miscellaneous module-related functions
diff --git a/src/sage/modules/module.pxd b/src/sage/modules/module.pxd
index 032cce6d69e..31eb027b970 100644
--- a/src/sage/modules/module.pxd
+++ b/src/sage/modules/module.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.parent cimport Parent
cdef class Module(Parent):
diff --git a/src/sage/modules/module.pyx b/src/sage/modules/module.pyx
index 2d7d21422ac..08dc1d5eb31 100644
--- a/src/sage/modules/module.pyx
+++ b/src/sage/modules/module.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Abstract base class for modules
diff --git a/src/sage/modules/module_functors.py b/src/sage/modules/module_functors.py
index c3977183c56..00da40a67f5 100644
--- a/src/sage/modules/module_functors.py
+++ b/src/sage/modules/module_functors.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Module Functors
diff --git a/src/sage/modules/multi_filtered_vector_space.py b/src/sage/modules/multi_filtered_vector_space.py
index 8190c69793b..bd206f7956b 100644
--- a/src/sage/modules/multi_filtered_vector_space.py
+++ b/src/sage/modules/multi_filtered_vector_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Multiple `\ZZ`-graded filtrations of a single vector space
diff --git a/src/sage/modules/quotient_module.py b/src/sage/modules/quotient_module.py
index be3e3735175..3a122a8d98a 100644
--- a/src/sage/modules/quotient_module.py
+++ b/src/sage/modules/quotient_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Quotients of free modules
diff --git a/src/sage/modules/real_double_vector.py b/src/sage/modules/real_double_vector.py
index 5430e175f11..69bd0c28bdc 100644
--- a/src/sage/modules/real_double_vector.py
+++ b/src/sage/modules/real_double_vector.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Pickling for the old RDF vector class
diff --git a/src/sage/modules/submodule.py b/src/sage/modules/submodule.py
index 4576d6c4bbd..512555524b5 100644
--- a/src/sage/modules/submodule.py
+++ b/src/sage/modules/submodule.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Submodules and subquotients of free modules
diff --git a/src/sage/modules/tensor_operations.py b/src/sage/modules/tensor_operations.py
index 8ca968133a2..f4e87f1995f 100644
--- a/src/sage/modules/tensor_operations.py
+++ b/src/sage/modules/tensor_operations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Helper classes to implement tensor operations
diff --git a/src/sage/modules/torsion_quadratic_module.py b/src/sage/modules/torsion_quadratic_module.py
index 28428a08f51..83ce6ac4754 100644
--- a/src/sage/modules/torsion_quadratic_module.py
+++ b/src/sage/modules/torsion_quadratic_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Finite `\ZZ`-modules with bilinear and quadratic forms
diff --git a/src/sage/modules/tutorial_free_modules.py b/src/sage/modules/tutorial_free_modules.py
index 8fe8cd8c7df..dc1b10524bb 100644
--- a/src/sage/modules/tutorial_free_modules.py
+++ b/src/sage/modules/tutorial_free_modules.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Tutorial: Using free modules and vector spaces
diff --git a/src/sage/modules/vector_callable_symbolic_dense.py b/src/sage/modules/vector_callable_symbolic_dense.py
index 5727003a22d..d008a4a85a8 100644
--- a/src/sage/modules/vector_callable_symbolic_dense.py
+++ b/src/sage/modules/vector_callable_symbolic_dense.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Vectors over callable symbolic rings
diff --git a/src/sage/modules/vector_complex_double_dense.pxd b/src/sage/modules/vector_complex_double_dense.pxd
index 955c0a414d2..194f26f3d69 100644
--- a/src/sage/modules/vector_complex_double_dense.pxd
+++ b/src/sage/modules/vector_complex_double_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.modules.vector_double_dense cimport Vector_double_dense
diff --git a/src/sage/modules/vector_complex_double_dense.pyx b/src/sage/modules/vector_complex_double_dense.pyx
index 59b585f912c..50d35e2ec82 100644
--- a/src/sage/modules/vector_complex_double_dense.pyx
+++ b/src/sage/modules/vector_complex_double_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Dense complex double vectors using a NumPy backend
diff --git a/src/sage/modules/vector_double_dense.pxd b/src/sage/modules/vector_double_dense.pxd
index f4f1f47cbce..e6111cb8a08 100644
--- a/src/sage/modules/vector_double_dense.pxd
+++ b/src/sage/modules/vector_double_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.modules.vector_numpy_dense cimport Vector_numpy_dense
diff --git a/src/sage/modules/vector_double_dense.pyx b/src/sage/modules/vector_double_dense.pyx
index b07fc9e71c2..e401d783145 100644
--- a/src/sage/modules/vector_double_dense.pyx
+++ b/src/sage/modules/vector_double_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Dense vectors using a NumPy backend
diff --git a/src/sage/modules/vector_integer_dense.pxd b/src/sage/modules/vector_integer_dense.pxd
index ff2843f481f..e878e882ffe 100644
--- a/src/sage/modules/vector_integer_dense.pxd
+++ b/src/sage/modules/vector_integer_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gmp.types cimport mpz_t
from sage.modules.free_module_element cimport FreeModuleElement
from sage.structure.parent cimport Parent
diff --git a/src/sage/modules/vector_integer_dense.pyx b/src/sage/modules/vector_integer_dense.pyx
index c078db11fff..80faf6f78e6 100644
--- a/src/sage/modules/vector_integer_dense.pyx
+++ b/src/sage/modules/vector_integer_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Vectors with integer entries
diff --git a/src/sage/modules/vector_integer_sparse.pxd b/src/sage/modules/vector_integer_sparse.pxd
index 42818124a82..7a8dc1ec770 100644
--- a/src/sage/modules/vector_integer_sparse.pxd
+++ b/src/sage/modules/vector_integer_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################
#
# Sparse Vector over mpz_t (the GMP integers)
diff --git a/src/sage/modules/vector_integer_sparse.pyx b/src/sage/modules/vector_integer_sparse.pyx
index 57a7b70bde4..737c63272f5 100644
--- a/src/sage/modules/vector_integer_sparse.pyx
+++ b/src/sage/modules/vector_integer_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################
#
# Sparse Vector over mpz_t (the GMP integers)
diff --git a/src/sage/modules/vector_mod2_dense.pxd b/src/sage/modules/vector_mod2_dense.pxd
index 4535fe3273d..3fb7fcf8a87 100644
--- a/src/sage/modules/vector_mod2_dense.pxd
+++ b/src/sage/modules/vector_mod2_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from sage.modules.free_module_element cimport FreeModuleElement
from sage.libs.m4ri cimport mzd_t
diff --git a/src/sage/modules/vector_mod2_dense.pyx b/src/sage/modules/vector_mod2_dense.pyx
index e6c2408b1f0..d965443f932 100644
--- a/src/sage/modules/vector_mod2_dense.pyx
+++ b/src/sage/modules/vector_mod2_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = M4RI_LIBRARIES GDLIB_LIBRARIES LIBPNG_LIBRARIES
# distutils: library_dirs = M4RI_LIBDIR GDLIB_LIBDIR LIBPNG_LIBDIR
# distutils: include_dirs = M4RI_INCDIR GDLIB_INCDIR LIBPNG_INCDIR
diff --git a/src/sage/modules/vector_modn_dense.pxd b/src/sage/modules/vector_modn_dense.pxd
index 5de166f1b85..c1aa84f770e 100644
--- a/src/sage/modules/vector_modn_dense.pxd
+++ b/src/sage/modules/vector_modn_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.ext.mod_int cimport mod_int
from sage.modules.free_module_element cimport FreeModuleElement
diff --git a/src/sage/modules/vector_modn_dense.pyx b/src/sage/modules/vector_modn_dense.pyx
index ed98d3e573d..f09fb7d5547 100644
--- a/src/sage/modules/vector_modn_dense.pyx
+++ b/src/sage/modules/vector_modn_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Vectors with integer mod `n` entries, with small `n`
diff --git a/src/sage/modules/vector_modn_sparse.pxd b/src/sage/modules/vector_modn_sparse.pxd
index 049b9ba27e8..0be082a95aa 100644
--- a/src/sage/modules/vector_modn_sparse.pxd
+++ b/src/sage/modules/vector_modn_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.finite_rings.stdint cimport *
cdef struct c_vector_modint:
diff --git a/src/sage/modules/vector_modn_sparse.pyx b/src/sage/modules/vector_modn_sparse.pyx
index a6b59ae9ca5..92b785c2168 100644
--- a/src/sage/modules/vector_modn_sparse.pyx
+++ b/src/sage/modules/vector_modn_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################################
# Copyright (C) 2004, 2007 William Stein
# Distributed under the terms of the GNU General Public License (GPL)
diff --git a/src/sage/modules/vector_numpy_dense.pxd b/src/sage/modules/vector_numpy_dense.pxd
index ec60da7a865..cda44c4664e 100644
--- a/src/sage/modules/vector_numpy_dense.pxd
+++ b/src/sage/modules/vector_numpy_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cimport numpy
from sage.modules.free_module_element cimport FreeModuleElement
diff --git a/src/sage/modules/vector_numpy_dense.pyx b/src/sage/modules/vector_numpy_dense.pyx
index 9b16a6c354d..0ccbd577225 100644
--- a/src/sage/modules/vector_numpy_dense.pyx
+++ b/src/sage/modules/vector_numpy_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Dense vectors using a NumPy backend.
diff --git a/src/sage/modules/vector_numpy_integer_dense.pxd b/src/sage/modules/vector_numpy_integer_dense.pxd
index 31bc1cf8f6b..2c1f640bcd0 100644
--- a/src/sage/modules/vector_numpy_integer_dense.pxd
+++ b/src/sage/modules/vector_numpy_integer_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.modules.vector_numpy_dense cimport Vector_numpy_dense
diff --git a/src/sage/modules/vector_numpy_integer_dense.pyx b/src/sage/modules/vector_numpy_integer_dense.pyx
index ba3537436d5..4ff577e1004 100644
--- a/src/sage/modules/vector_numpy_integer_dense.pyx
+++ b/src/sage/modules/vector_numpy_integer_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Dense integer vectors using a NumPy backend.
diff --git a/src/sage/modules/vector_rational_dense.pxd b/src/sage/modules/vector_rational_dense.pxd
index c5f2a4a7c3f..cd81899227d 100644
--- a/src/sage/modules/vector_rational_dense.pxd
+++ b/src/sage/modules/vector_rational_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gmp.types cimport mpq_t
from sage.modules.free_module_element cimport FreeModuleElement
from sage.structure.parent cimport Parent
diff --git a/src/sage/modules/vector_rational_dense.pyx b/src/sage/modules/vector_rational_dense.pyx
index 864628f10c7..f6779a507ca 100644
--- a/src/sage/modules/vector_rational_dense.pyx
+++ b/src/sage/modules/vector_rational_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Vectors with rational entries
diff --git a/src/sage/modules/vector_rational_sparse.pxd b/src/sage/modules/vector_rational_sparse.pxd
index 4dfbed73d6d..b7e731619e1 100644
--- a/src/sage/modules/vector_rational_sparse.pxd
+++ b/src/sage/modules/vector_rational_sparse.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################
#
# Sparse Vector over mpq_t (the GMP rationals)
diff --git a/src/sage/modules/vector_rational_sparse.pyx b/src/sage/modules/vector_rational_sparse.pyx
index 37466bab2da..54bbb4f4f54 100644
--- a/src/sage/modules/vector_rational_sparse.pyx
+++ b/src/sage/modules/vector_rational_sparse.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################
#
# Sparse Vector over mpq_t (the GMP rationals)
diff --git a/src/sage/modules/vector_real_double_dense.pxd b/src/sage/modules/vector_real_double_dense.pxd
index 4dd3b43ab25..efd4a7833fe 100644
--- a/src/sage/modules/vector_real_double_dense.pxd
+++ b/src/sage/modules/vector_real_double_dense.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.modules.vector_double_dense cimport Vector_double_dense
diff --git a/src/sage/modules/vector_real_double_dense.pyx b/src/sage/modules/vector_real_double_dense.pyx
index a5d4c236722..db0969e8d5a 100644
--- a/src/sage/modules/vector_real_double_dense.pyx
+++ b/src/sage/modules/vector_real_double_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Dense real double vectors using a NumPy backend
diff --git a/src/sage/modules/vector_space_homspace.py b/src/sage/modules/vector_space_homspace.py
index b815051171a..743163acb62 100644
--- a/src/sage/modules/vector_space_homspace.py
+++ b/src/sage/modules/vector_space_homspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Space of morphisms of vector spaces (linear transformations)
diff --git a/src/sage/modules/vector_space_morphism.py b/src/sage/modules/vector_space_morphism.py
index 6585da0b047..d605a4f4d30 100644
--- a/src/sage/modules/vector_space_morphism.py
+++ b/src/sage/modules/vector_space_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Morphisms of vector spaces (linear transformations)
diff --git a/src/sage/modules/vector_symbolic_dense.py b/src/sage/modules/vector_symbolic_dense.py
index bd50cedec7b..8d21c3c1367 100644
--- a/src/sage/modules/vector_symbolic_dense.py
+++ b/src/sage/modules/vector_symbolic_dense.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Dense vectors over the symbolic ring
diff --git a/src/sage/modules/vector_symbolic_sparse.py b/src/sage/modules/vector_symbolic_sparse.py
index 41cbbda5241..fc1e8734343 100644
--- a/src/sage/modules/vector_symbolic_sparse.py
+++ b/src/sage/modules/vector_symbolic_sparse.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Sparse vectors over the symbolic ring
diff --git a/src/sage/modules/with_basis/all.py b/src/sage/modules/with_basis/all.py
index 1f352bcc768..3374803a1a5 100644
--- a/src/sage/modules/with_basis/all.py
+++ b/src/sage/modules/with_basis/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Concrete classes related to modules with a distinguished basis
@@ -11,3 +12,4 @@
# install the docstring of this module to the containing package
from sage.misc.namespace_package import install_doc
install_doc(__package__, __doc__)
+del install_doc
diff --git a/src/sage/modules/with_basis/cell_module.py b/src/sage/modules/with_basis/cell_module.py
index 2c5f54de21b..f43365bbb0a 100644
--- a/src/sage/modules/with_basis/cell_module.py
+++ b/src/sage/modules/with_basis/cell_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Cell modules
diff --git a/src/sage/modules/with_basis/indexed_element.pxd b/src/sage/modules/with_basis/indexed_element.pxd
index ebc785d7ccf..574ba288b84 100644
--- a/src/sage/modules/with_basis/indexed_element.pxd
+++ b/src/sage/modules/with_basis/indexed_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport Element, ModuleElement
cdef class IndexedFreeModuleElement(ModuleElement):
diff --git a/src/sage/modules/with_basis/indexed_element.pyx b/src/sage/modules/with_basis/indexed_element.pyx
index c71024d2079..c9dba690a36 100644
--- a/src/sage/modules/with_basis/indexed_element.pyx
+++ b/src/sage/modules/with_basis/indexed_element.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
r"""
An element in an indexed free module
@@ -372,6 +372,16 @@ cdef class IndexedFreeModuleElement(ModuleElement):
sage: E2 = L.exterior_power(2)
sage: ascii_art(E2.an_element())
2*()/\(5,6,7) + 2*()/\(5,7,6) + 3*()/\(1,2)(3,4)
+
+ We can also get the ascii art when ``one_basis``
+ is ``NotImplemented``::
+
+ sage: TL = TemperleyLiebAlgebra(8, -1, QQ)
+ sage: C = TL.cellular_basis()
+ sage: ascii_art(list(C.basis())[0])
+ C
+ ( .-. .-. .-. .-. .-. .-. .-. .-. )
+ ( 0, o o o o o o o o, o o o o o o o o )
"""
from sage.misc.repr import coeff_repr
terms = self._sorted_items_for_printing()
@@ -390,8 +400,8 @@ cdef class IndexedFreeModuleElement(ModuleElement):
one_basis = None
try:
- if self.parent().one_basis is not NotImplemented:
- one_basis = self.parent().one_basis()
+ if self._parent.one_basis is not NotImplemented:
+ one_basis = self._parent.one_basis()
except (AttributeError, NotImplementedError, ValueError, TypeError):
pass
@@ -457,6 +467,16 @@ cdef class IndexedFreeModuleElement(ModuleElement):
sage: E2 = L.exterior_power(2)
sage: unicode_art(E2.an_element())
2*()∧(5,6,7) + 2*()∧(5,7,6) + 3*()∧(1,2)(3,4)
+
+ We can also get the unicode art when ``one_basis``
+ is ``NotImplemented``::
+
+ sage: TL = TemperleyLiebAlgebra(8, -1, QQ)
+ sage: C = TL.cellular_basis()
+ sage: unicode_art(list(C.basis())[0])
+ C
+ ⎛ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ⎞
+ ⎝ 0, ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬, ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⎠
"""
from sage.misc.repr import coeff_repr
terms = self._sorted_items_for_printing()
@@ -475,8 +495,8 @@ cdef class IndexedFreeModuleElement(ModuleElement):
one_basis = None
try:
- if self.parent().one_basis is not NotImplemented:
- one_basis = self.parent().one_basis()
+ if self._parent.one_basis is not NotImplemented:
+ one_basis = self._parent.one_basis()
except (AttributeError, NotImplementedError, ValueError, TypeError):
pass
diff --git a/src/sage/modules/with_basis/invariant.py b/src/sage/modules/with_basis/invariant.py
index 7e7600f3069..03b4f3e0050 100644
--- a/src/sage/modules/with_basis/invariant.py
+++ b/src/sage/modules/with_basis/invariant.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.groups
r"""
Invariant modules
diff --git a/src/sage/modules/with_basis/morphism.py b/src/sage/modules/with_basis/morphism.py
index ea1dcf93f65..d7448d694b1 100644
--- a/src/sage/modules/with_basis/morphism.py
+++ b/src/sage/modules/with_basis/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Morphisms of modules with a basis
diff --git a/src/sage/modules/with_basis/representation.py b/src/sage/modules/with_basis/representation.py
index 0e1e081c671..dbf7e42c2d7 100644
--- a/src/sage/modules/with_basis/representation.py
+++ b/src/sage/modules/with_basis/representation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.groups
"""
Representations of a semigroup
@@ -1420,7 +1421,6 @@ def _action_on_basis(self, g, b, vec_on_left):
return self.element_class(self, data)
-
class RegularRepresentation(Representation):
r"""
The regular representation of a semigroup.
@@ -1503,7 +1503,6 @@ def _right_on_basis(self, g, m):
return self.monomial(m * g)
-
class TrivialRepresentation(Representation_abstract):
"""
The trivial representation of a semigroup.
diff --git a/src/sage/modules/with_basis/subquotient.py b/src/sage/modules/with_basis/subquotient.py
index 48a235b4ab9..4999a799760 100644
--- a/src/sage/modules/with_basis/subquotient.py
+++ b/src/sage/modules/with_basis/subquotient.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Quotients of modules with basis
"""
diff --git a/src/sage/monoids/all.py b/src/sage/monoids/all.py
index cd2812c89f1..83541093f6c 100644
--- a/src/sage/monoids/all.py
+++ b/src/sage/monoids/all.py
@@ -1,11 +1,12 @@
+# sage_setup: distribution = sagemath-combinat
-from .free_monoid import FreeMonoid
-from .string_monoid import (BinaryStrings, OctalStrings, HexadecimalStrings,
- Radix64Strings, AlphabeticStrings)
+from sage.monoids.free_monoid import FreeMonoid
+from sage.monoids.string_monoid import (BinaryStrings, OctalStrings, HexadecimalStrings,
+ Radix64Strings, AlphabeticStrings)
-from .free_abelian_monoid import FreeAbelianMonoid
+from sage.monoids.free_abelian_monoid import FreeAbelianMonoid
-from .string_ops import (
+from sage.monoids.string_ops import (
strip_encoding,
frequency_distribution,
coincidence_index,
diff --git a/src/sage/monoids/all__sagemath_categories.py b/src/sage/monoids/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/monoids/automatic_semigroup.py b/src/sage/monoids/automatic_semigroup.py
index 2d0b595dd7f..f5d454b3a4d 100644
--- a/src/sage/monoids/automatic_semigroup.py
+++ b/src/sage/monoids/automatic_semigroup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Automatic Semigroups
diff --git a/src/sage/monoids/free_abelian_monoid.py b/src/sage/monoids/free_abelian_monoid.py
index 590a20eaa1a..a00d4236b83 100644
--- a/src/sage/monoids/free_abelian_monoid.py
+++ b/src/sage/monoids/free_abelian_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Free abelian monoids
diff --git a/src/sage/monoids/free_abelian_monoid_element.pxd b/src/sage/monoids/free_abelian_monoid_element.pxd
index 092cd343f05..add273ebedb 100644
--- a/src/sage/monoids/free_abelian_monoid_element.pxd
+++ b/src/sage/monoids/free_abelian_monoid_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.structure.element cimport MonoidElement
from sage.libs.gmp.types cimport mpz_t
from sage.structure.parent cimport Parent
diff --git a/src/sage/monoids/free_abelian_monoid_element.pyx b/src/sage/monoids/free_abelian_monoid_element.pyx
index c81c1fa5575..9afee5095a8 100644
--- a/src/sage/monoids/free_abelian_monoid_element.pyx
+++ b/src/sage/monoids/free_abelian_monoid_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Abelian Monoid Elements
diff --git a/src/sage/monoids/free_monoid.py b/src/sage/monoids/free_monoid.py
index 88277320a63..0ec5dd59568 100644
--- a/src/sage/monoids/free_monoid.py
+++ b/src/sage/monoids/free_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Free Monoids
diff --git a/src/sage/monoids/free_monoid_element.py b/src/sage/monoids/free_monoid_element.py
index e540f408f1d..83de7a36bb4 100644
--- a/src/sage/monoids/free_monoid_element.py
+++ b/src/sage/monoids/free_monoid_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Elements of Free Monoids
diff --git a/src/sage/monoids/hecke_monoid.py b/src/sage/monoids/hecke_monoid.py
index 179446d24e6..f42e23c6fc0 100644
--- a/src/sage/monoids/hecke_monoid.py
+++ b/src/sage/monoids/hecke_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Hecke Monoids
"""
diff --git a/src/sage/monoids/indexed_free_monoid.py b/src/sage/monoids/indexed_free_monoid.py
index 66af0a2fb5c..62c3d1daaf0 100644
--- a/src/sage/monoids/indexed_free_monoid.py
+++ b/src/sage/monoids/indexed_free_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Indexed Monoids
diff --git a/src/sage/monoids/monoid.py b/src/sage/monoids/monoid.py
index 97c0dfa6ad3..ec04f116088 100644
--- a/src/sage/monoids/monoid.py
+++ b/src/sage/monoids/monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Monoids
"""
diff --git a/src/sage/monoids/string_monoid.py b/src/sage/monoids/string_monoid.py
index 7aa51ad9776..87a51a834a4 100644
--- a/src/sage/monoids/string_monoid.py
+++ b/src/sage/monoids/string_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Free String Monoids
diff --git a/src/sage/monoids/string_monoid_element.py b/src/sage/monoids/string_monoid_element.py
index 0299359c7f7..69087d3e251 100644
--- a/src/sage/monoids/string_monoid_element.py
+++ b/src/sage/monoids/string_monoid_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
String Monoid Elements
diff --git a/src/sage/monoids/string_ops.py b/src/sage/monoids/string_ops.py
index e34164712fb..8c19574527c 100644
--- a/src/sage/monoids/string_ops.py
+++ b/src/sage/monoids/string_ops.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"Utility functions on strings"
# ****************************************************************************
diff --git a/src/sage/monoids/trace_monoid.py b/src/sage/monoids/trace_monoid.py
index bc7edc7ab08..c3769ca7c5b 100644
--- a/src/sage/monoids/trace_monoid.py
+++ b/src/sage/monoids/trace_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Module of trace monoids (free partially commutative monoids).
diff --git a/src/sage/numerical/all.py b/src/sage/numerical/all.py
index 8b69da18652..c2b17a60f65 100644
--- a/src/sage/numerical/all.py
+++ b/src/sage/numerical/all.py
@@ -1,7 +1,9 @@
+# sage_setup: distribution = sagemath-polyhedra
+
+from sage.numerical.all__sagemath_modules import *
+
from sage.misc.lazy_import import lazy_import
-lazy_import("sage.numerical.optimize",
- ["find_fit", "find_local_maximum", "find_local_minimum",
- "find_root", "minimize", "minimize_constrained"])
+
lazy_import("sage.numerical.mip", ["MixedIntegerLinearProgram"])
lazy_import("sage.numerical.sdp", ["SemidefiniteProgram"])
lazy_import("sage.numerical.backends.generic_backend", ["default_mip_solver"])
@@ -9,3 +11,4 @@
lazy_import("sage.numerical.interactive_simplex_method",
["InteractiveLPProblem", "InteractiveLPProblemStandardForm"])
+del lazy_import
diff --git a/src/sage/numerical/all__sagemath_categories.py b/src/sage/numerical/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/numerical/all__sagemath_glpk.py b/src/sage/numerical/all__sagemath_glpk.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/numerical/all__sagemath_modules.py b/src/sage/numerical/all__sagemath_modules.py
new file mode 100644
index 00000000000..7a2c2778373
--- /dev/null
+++ b/src/sage/numerical/all__sagemath_modules.py
@@ -0,0 +1,5 @@
+from sage.misc.lazy_import import lazy_import
+lazy_import("sage.numerical.optimize",
+ ["find_fit", "find_local_maximum", "find_local_minimum",
+ "find_root", "minimize", "minimize_constrained"])
+del lazy_import
diff --git a/src/sage/numerical/all__sagemath_polyhedra.py b/src/sage/numerical/all__sagemath_polyhedra.py
index 6de2a9af502..6589c9f5fc0 100644
--- a/src/sage/numerical/all__sagemath_polyhedra.py
+++ b/src/sage/numerical/all__sagemath_polyhedra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.misc.lazy_import import lazy_import
lazy_import("sage.numerical.mip", ["MixedIntegerLinearProgram"])
@@ -7,3 +8,4 @@
lazy_import("sage.numerical.interactive_simplex_method",
["InteractiveLPProblem", "InteractiveLPProblemStandardForm"])
+del lazy_import
diff --git a/src/sage/numerical/backends/all.py b/src/sage/numerical/backends/all.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/numerical/backends/all.py
+++ b/src/sage/numerical/backends/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/numerical/backends/all__sagemath_categories.py b/src/sage/numerical/backends/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/numerical/backends/all__sagemath_glpk.py b/src/sage/numerical/backends/all__sagemath_glpk.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/numerical/backends/all__sagemath_polyhedra.py b/src/sage/numerical/backends/all__sagemath_polyhedra.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/numerical/backends/all__sagemath_polyhedra.py
+++ b/src/sage/numerical/backends/all__sagemath_polyhedra.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/numerical/backends/cvxopt_backend.pyx b/src/sage/numerical/backends/cvxopt_backend.pyx
index 1d7ef20625c..64d9537f000 100644
--- a/src/sage/numerical/backends/cvxopt_backend.pyx
+++ b/src/sage/numerical/backends/cvxopt_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs cvxopt
r"""
CVXOPT Backend
diff --git a/src/sage/numerical/backends/cvxopt_backend_test.py b/src/sage/numerical/backends/cvxopt_backend_test.py
index 6029221fda2..d2567569187 100644
--- a/src/sage/numerical/backends/cvxopt_backend_test.py
+++ b/src/sage/numerical/backends/cvxopt_backend_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
import pytest
from sage.structure.sage_object import SageObject
diff --git a/src/sage/numerical/backends/cvxopt_sdp_backend.pyx b/src/sage/numerical/backends/cvxopt_sdp_backend.pyx
index 5a5cf2c11a2..4364877c36b 100644
--- a/src/sage/numerical/backends/cvxopt_sdp_backend.pyx
+++ b/src/sage/numerical/backends/cvxopt_sdp_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs cvxopt
r"""
CVXOPT SDP Backend
diff --git a/src/sage/numerical/backends/cvxpy_backend.pxd b/src/sage/numerical/backends/cvxpy_backend.pxd
index ed4d63ccc63..f3b14def032 100644
--- a/src/sage/numerical/backends/cvxpy_backend.pxd
+++ b/src/sage/numerical/backends/cvxpy_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
##############################################################################
# Copyright (C) 2010 Nathann Cohen
# Copyright (C) 2022 Matthias Koeppe
diff --git a/src/sage/numerical/backends/cvxpy_backend.pyx b/src/sage/numerical/backends/cvxpy_backend.pyx
index 145f84b363a..883de3ca891 100644
--- a/src/sage/numerical/backends/cvxpy_backend.pyx
+++ b/src/sage/numerical/backends/cvxpy_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - cvxpy
r"""
CVXPY Backend
diff --git a/src/sage/numerical/backends/cvxpy_backend_test.py b/src/sage/numerical/backends/cvxpy_backend_test.py
index 1f5f030248e..4082cc414de 100644
--- a/src/sage/numerical/backends/cvxpy_backend_test.py
+++ b/src/sage/numerical/backends/cvxpy_backend_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
import pytest
from sage.numerical.backends.generic_backend_test import GenericBackendTests
from sage.numerical.backends.generic_backend import GenericBackend
diff --git a/src/sage/numerical/backends/generic_backend.pxd b/src/sage/numerical/backends/generic_backend.pxd
index f2d315d249c..fb14079c2b2 100644
--- a/src/sage/numerical/backends/generic_backend.pxd
+++ b/src/sage/numerical/backends/generic_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
##############################################################################
# Copyright (C) 2010 Nathann Cohen
# Distributed under the terms of the GNU General Public License (GPL)
diff --git a/src/sage/numerical/backends/generic_backend.pyx b/src/sage/numerical/backends/generic_backend.pyx
index 00909eb25a8..a283a956566 100644
--- a/src/sage/numerical/backends/generic_backend.pyx
+++ b/src/sage/numerical/backends/generic_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Generic Backend for LP solvers
diff --git a/src/sage/numerical/backends/generic_backend_test.py b/src/sage/numerical/backends/generic_backend_test.py
index 3c5416eb63c..5aa004a23b9 100644
--- a/src/sage/numerical/backends/generic_backend_test.py
+++ b/src/sage/numerical/backends/generic_backend_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
import pytest
from sage.numerical.backends.generic_backend import GenericBackend
from sage.structure.sage_object import SageObject
diff --git a/src/sage/numerical/backends/generic_sdp_backend.pxd b/src/sage/numerical/backends/generic_sdp_backend.pxd
index 023f95653d6..d30fa4fc2d6 100644
--- a/src/sage/numerical/backends/generic_sdp_backend.pxd
+++ b/src/sage/numerical/backends/generic_sdp_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2014 Ingolfur Edvardsson
#
diff --git a/src/sage/numerical/backends/generic_sdp_backend.pyx b/src/sage/numerical/backends/generic_sdp_backend.pyx
index 66876c68119..853ca4641fa 100644
--- a/src/sage/numerical/backends/generic_sdp_backend.pyx
+++ b/src/sage/numerical/backends/generic_sdp_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Generic Backend for SDP solvers
diff --git a/src/sage/numerical/backends/glpk_backend.pxd b/src/sage/numerical/backends/glpk_backend.pxd
index 5ff4a90a211..87625876548 100644
--- a/src/sage/numerical/backends/glpk_backend.pxd
+++ b/src/sage/numerical/backends/glpk_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
#*****************************************************************************
# Copyright (C) 2010 Nathann Cohen
#
diff --git a/src/sage/numerical/backends/glpk_backend.pyx b/src/sage/numerical/backends/glpk_backend.pyx
index 10ab452e1fa..2d241955512 100644
--- a/src/sage/numerical/backends/glpk_backend.pyx
+++ b/src/sage/numerical/backends/glpk_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
"""
GLPK Backend
diff --git a/src/sage/numerical/backends/glpk_exact_backend.pxd b/src/sage/numerical/backends/glpk_exact_backend.pxd
index 8207347ce51..2b94d5ad968 100644
--- a/src/sage/numerical/backends/glpk_exact_backend.pxd
+++ b/src/sage/numerical/backends/glpk_exact_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
#*****************************************************************************
# Copyright (C) 2016 Matthias Koeppe
#
diff --git a/src/sage/numerical/backends/glpk_exact_backend.pyx b/src/sage/numerical/backends/glpk_exact_backend.pyx
index 3031748eb42..c50a1c85a87 100644
--- a/src/sage/numerical/backends/glpk_exact_backend.pyx
+++ b/src/sage/numerical/backends/glpk_exact_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
"""
GLPK/exact Backend (simplex method in exact rational arithmetic)
diff --git a/src/sage/numerical/backends/glpk_graph_backend.pxd b/src/sage/numerical/backends/glpk_graph_backend.pxd
index 2e4b29a25a9..3ac3b0b616e 100644
--- a/src/sage/numerical/backends/glpk_graph_backend.pxd
+++ b/src/sage/numerical/backends/glpk_graph_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
#*****************************************************************************
# Copyright (C) 2012 Christian Kuper
# Copyright (C) 2015 Jeroen Demeyer
diff --git a/src/sage/numerical/backends/glpk_graph_backend.pyx b/src/sage/numerical/backends/glpk_graph_backend.pyx
index 63bc2a76305..6398ef4e577 100644
--- a/src/sage/numerical/backends/glpk_graph_backend.pyx
+++ b/src/sage/numerical/backends/glpk_graph_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-glpk
# sage.doctest: needs sage.graphs
"""
GLPK Backend for access to GLPK graph functions
diff --git a/src/sage/numerical/backends/interactivelp_backend.pxd b/src/sage/numerical/backends/interactivelp_backend.pxd
index 07e63a7bb44..c450d6d2353 100644
--- a/src/sage/numerical/backends/interactivelp_backend.pxd
+++ b/src/sage/numerical/backends/interactivelp_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
##############################################################################
# Copyright (C) 2010 Nathann Cohen
# Copyright (C) 2016 Matthias Koeppe
diff --git a/src/sage/numerical/backends/interactivelp_backend.pyx b/src/sage/numerical/backends/interactivelp_backend.pyx
index 64ef561375a..98bc5b553cf 100644
--- a/src/sage/numerical/backends/interactivelp_backend.pyx
+++ b/src/sage/numerical/backends/interactivelp_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
InteractiveLP Backend
diff --git a/src/sage/numerical/backends/interactivelp_backend_test.py b/src/sage/numerical/backends/interactivelp_backend_test.py
index 0f0af51250d..bb18bb4f4f1 100644
--- a/src/sage/numerical/backends/interactivelp_backend_test.py
+++ b/src/sage/numerical/backends/interactivelp_backend_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
import pytest
from sage.numerical.backends.generic_backend_test import GenericBackendTests
from sage.numerical.backends.generic_backend import GenericBackend
diff --git a/src/sage/numerical/backends/logging_backend.py b/src/sage/numerical/backends/logging_backend.py
index 2efb77eaf08..e85fe353254 100644
--- a/src/sage/numerical/backends/logging_backend.py
+++ b/src/sage/numerical/backends/logging_backend.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Logging Backend
diff --git a/src/sage/numerical/backends/matrix_sdp_backend.pxd b/src/sage/numerical/backends/matrix_sdp_backend.pxd
index 9038955f83a..ba209f6fb02 100644
--- a/src/sage/numerical/backends/matrix_sdp_backend.pxd
+++ b/src/sage/numerical/backends/matrix_sdp_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.numerical.backends.generic_sdp_backend cimport GenericSDPBackend
diff --git a/src/sage/numerical/backends/matrix_sdp_backend.pyx b/src/sage/numerical/backends/matrix_sdp_backend.pyx
index f4e7ecb13f0..e20dad1b614 100644
--- a/src/sage/numerical/backends/matrix_sdp_backend.pyx
+++ b/src/sage/numerical/backends/matrix_sdp_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Matrix Backend for SDP solvers
diff --git a/src/sage/numerical/backends/ppl_backend.pyx b/src/sage/numerical/backends/ppl_backend.pyx
index 987842f728c..2d02f3bec71 100644
--- a/src/sage/numerical/backends/ppl_backend.pyx
+++ b/src/sage/numerical/backends/ppl_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: optional - pplpy
"""
PPL Backend
diff --git a/src/sage/numerical/backends/ppl_backend_test.py b/src/sage/numerical/backends/ppl_backend_test.py
index 852c3be82c1..d0c9dea1fb3 100644
--- a/src/sage/numerical/backends/ppl_backend_test.py
+++ b/src/sage/numerical/backends/ppl_backend_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
import pytest
from sage.numerical.backends.generic_backend_test import GenericBackendTests
diff --git a/src/sage/numerical/backends/scip_backend.pxd b/src/sage/numerical/backends/scip_backend.pxd
index 0cd0600f955..634197437ea 100644
--- a/src/sage/numerical/backends/scip_backend.pxd
+++ b/src/sage/numerical/backends/scip_backend.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
#*****************************************************************************
# Copyright (C) 2017 Matthias Koeppe
#
diff --git a/src/sage/numerical/backends/scip_backend.pyx b/src/sage/numerical/backends/scip_backend.pyx
index ad53659857b..c1e226fb971 100644
--- a/src/sage/numerical/backends/scip_backend.pyx
+++ b/src/sage/numerical/backends/scip_backend.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# distutils: language = c++
# sage.doctest: optional - pyscipopt
"""
diff --git a/src/sage/numerical/backends/scip_backend_test.py b/src/sage/numerical/backends/scip_backend_test.py
index 136d3ce914b..3ad30d8a779 100644
--- a/src/sage/numerical/backends/scip_backend_test.py
+++ b/src/sage/numerical/backends/scip_backend_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
import pytest
from sage.numerical.backends.generic_backend_test import GenericBackendTests
from sage.numerical.backends.generic_backend import GenericBackend
diff --git a/src/sage/numerical/gauss_legendre.pyx b/src/sage/numerical/gauss_legendre.pyx
index fceda721c53..bc3b6e76663 100644
--- a/src/sage/numerical/gauss_legendre.pyx
+++ b/src/sage/numerical/gauss_legendre.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Gauss-Legendre Integration for Vector-Valued Functions
diff --git a/src/sage/numerical/interactive_simplex_method.py b/src/sage/numerical/interactive_simplex_method.py
index c2a10d6a4f6..6861c304e27 100644
--- a/src/sage/numerical/interactive_simplex_method.py
+++ b/src/sage/numerical/interactive_simplex_method.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Interactive Simplex Method
diff --git a/src/sage/numerical/knapsack.py b/src/sage/numerical/knapsack.py
index 3f80f517998..fe26317d7a0 100644
--- a/src/sage/numerical/knapsack.py
+++ b/src/sage/numerical/knapsack.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Knapsack Problems
diff --git a/src/sage/numerical/linear_functions.pxd b/src/sage/numerical/linear_functions.pxd
index 568f04b75af..fb0a4b27ee2 100644
--- a/src/sage/numerical/linear_functions.pxd
+++ b/src/sage/numerical/linear_functions.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.structure.parent cimport Parent, Parent_richcmp_element_without_coercion
from sage.structure.element cimport ModuleElement, RingElement, Element
diff --git a/src/sage/numerical/linear_functions.pyx b/src/sage/numerical/linear_functions.pyx
index 9c7e10744f2..1f564fc53f8 100644
--- a/src/sage/numerical/linear_functions.pyx
+++ b/src/sage/numerical/linear_functions.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Linear Functions and Constraints
diff --git a/src/sage/numerical/linear_tensor.py b/src/sage/numerical/linear_tensor.py
index 2402845b896..99774536f32 100644
--- a/src/sage/numerical/linear_tensor.py
+++ b/src/sage/numerical/linear_tensor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Matrix/Vector-Valued Linear Functions: Parents
diff --git a/src/sage/numerical/linear_tensor_constraints.py b/src/sage/numerical/linear_tensor_constraints.py
index 24f94f3b3d6..9cfc62bb323 100644
--- a/src/sage/numerical/linear_tensor_constraints.py
+++ b/src/sage/numerical/linear_tensor_constraints.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Constraints on Linear Functions Tensored with a Free Module
diff --git a/src/sage/numerical/linear_tensor_element.pxd b/src/sage/numerical/linear_tensor_element.pxd
index 1cd84d3e33f..0318924471e 100644
--- a/src/sage/numerical/linear_tensor_element.pxd
+++ b/src/sage/numerical/linear_tensor_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.structure.element cimport Element, ModuleElement
cdef class LinearTensor(ModuleElement):
diff --git a/src/sage/numerical/linear_tensor_element.pyx b/src/sage/numerical/linear_tensor_element.pyx
index c77aa290e21..ceac8708599 100644
--- a/src/sage/numerical/linear_tensor_element.pyx
+++ b/src/sage/numerical/linear_tensor_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
"""
Matrix/Vector-Valued Linear Functions: Elements
diff --git a/src/sage/numerical/mip.pxd b/src/sage/numerical/mip.pxd
index 1422827e1e4..8422f0ade79 100644
--- a/src/sage/numerical/mip.pxd
+++ b/src/sage/numerical/mip.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
cdef extern from *:
cdef int BINARY = 1
cdef int REAL = -1
diff --git a/src/sage/numerical/mip.pyx b/src/sage/numerical/mip.pyx
index 368b9e4b0e3..b8e4bdc7b09 100644
--- a/src/sage/numerical/mip.pyx
+++ b/src/sage/numerical/mip.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Mixed Integer Linear Programming
diff --git a/src/sage/numerical/optimize.py b/src/sage/numerical/optimize.py
index 54262183b1b..d2e47deb97e 100644
--- a/src/sage/numerical/optimize.py
+++ b/src/sage/numerical/optimize.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - scipy
"""
Numerical Root Finding and Optimization
diff --git a/src/sage/numerical/sdp.pxd b/src/sage/numerical/sdp.pxd
index 629e6c83f94..49b7a4d186f 100644
--- a/src/sage/numerical/sdp.pxd
+++ b/src/sage/numerical/sdp.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
from sage.structure.sage_object cimport SageObject
from sage.structure.parent cimport Parent
from sage.structure.element cimport Element
diff --git a/src/sage/numerical/sdp.pyx b/src/sage/numerical/sdp.pyx
index 8701ed22150..1574fcf76b3 100644
--- a/src/sage/numerical/sdp.pyx
+++ b/src/sage/numerical/sdp.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
r"""
Semidefinite Programming
diff --git a/src/sage/parallel/all.py b/src/sage/parallel/all.py
index 85f69c86165..8badd23e060 100644
--- a/src/sage/parallel/all.py
+++ b/src/sage/parallel/all.py
@@ -1,4 +1,6 @@
+# sage_setup: distribution = sagemath-categories
-from .decorate import parallel, fork
+from sage.parallel.decorate import parallel, fork
from sage.misc.lazy_import import lazy_import
lazy_import('sage.parallel.parallelism', 'Parallelism')
+del lazy_import
diff --git a/src/sage/parallel/decorate.py b/src/sage/parallel/decorate.py
index b8ea5e75bb3..00b63dde8f5 100644
--- a/src/sage/parallel/decorate.py
+++ b/src/sage/parallel/decorate.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Decorate interface for parallel computation
"""
diff --git a/src/sage/parallel/map_reduce.py b/src/sage/parallel/map_reduce.py
index 2765764cddf..f5d4b7bbde7 100644
--- a/src/sage/parallel/map_reduce.py
+++ b/src/sage/parallel/map_reduce.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Parallel computations using RecursivelyEnumeratedSet and Map-Reduce
diff --git a/src/sage/parallel/multiprocessing_sage.py b/src/sage/parallel/multiprocessing_sage.py
index 2ccab49ac0f..350c833afed 100644
--- a/src/sage/parallel/multiprocessing_sage.py
+++ b/src/sage/parallel/multiprocessing_sage.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Parallel Iterator built using Python's multiprocessing module
"""
diff --git a/src/sage/parallel/ncpus.py b/src/sage/parallel/ncpus.py
index 24e8c0c5743..44771a9aa49 100644
--- a/src/sage/parallel/ncpus.py
+++ b/src/sage/parallel/ncpus.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
CPU Detection
"""
diff --git a/src/sage/parallel/parallelism.py b/src/sage/parallel/parallelism.py
index 8aafe232fee..cde870e2604 100644
--- a/src/sage/parallel/parallelism.py
+++ b/src/sage/parallel/parallelism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Parallelization control
diff --git a/src/sage/parallel/reference.py b/src/sage/parallel/reference.py
index 36dd7a8bb76..ccde2ebfd97 100644
--- a/src/sage/parallel/reference.py
+++ b/src/sage/parallel/reference.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Reference Parallel Primitives
diff --git a/src/sage/parallel/use_fork.py b/src/sage/parallel/use_fork.py
index 19ee4b0e1d6..2d964811766 100644
--- a/src/sage/parallel/use_fork.py
+++ b/src/sage/parallel/use_fork.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Parallel iterator built using the ``fork()`` system call
"""
diff --git a/src/sage/plot/all.py b/src/sage/plot/all.py
index 1f16e2d6789..00131580f87 100644
--- a/src/sage/plot/all.py
+++ b/src/sage/plot/all.py
@@ -1,39 +1,43 @@
-from .graphics import Graphics
-from .plot import (plot, graphics_array, multi_graphics, list_plot,
- parametric_plot, polar_plot, plot_loglog, plot_semilogx,
- plot_semilogy, list_plot_loglog, list_plot_semilogx,
- list_plot_semilogy)
-from .line import line, line2d
-from .arrow import arrow, arrow2d
-from .bar_chart import bar_chart
-from .histogram import histogram
-from .bezier_path import bezier_path
-from .scatter_plot import scatter_plot
-from .disk import disk
-from .point import point, points, point2d
-from .matrix_plot import matrix_plot
-from .plot_field import plot_vector_field, plot_slope_field
-from .text import text
-from .polygon import polygon, polygon2d
-from .circle import circle
-from .ellipse import ellipse
-from .contour_plot import contour_plot, implicit_plot, region_plot
-from .density_plot import density_plot
-from .streamline_plot import streamline_plot
+# sage_setup: distribution = sagemath-plot
+
+from sage.plot.graphics import Graphics
+from sage.plot.plot import (plot, graphics_array, multi_graphics, list_plot,
+ parametric_plot, polar_plot, plot_loglog, plot_semilogx,
+ plot_semilogy, list_plot_loglog, list_plot_semilogx,
+ list_plot_semilogy)
+from sage.plot.line import line, line2d
+from sage.plot.arrow import arrow, arrow2d
+from sage.plot.bar_chart import bar_chart
+from sage.plot.histogram import histogram
+from sage.plot.bezier_path import bezier_path
+from sage.plot.scatter_plot import scatter_plot
+from sage.plot.disk import disk
+from sage.plot.point import point, points, point2d
+from sage.plot.matrix_plot import matrix_plot
+from sage.plot.plot_field import plot_vector_field, plot_slope_field
+from sage.plot.text import text
+from sage.plot.polygon import polygon, polygon2d
+from sage.plot.circle import circle
+from sage.plot.ellipse import ellipse
+from sage.plot.contour_plot import contour_plot, implicit_plot, region_plot
+from sage.plot.density_plot import density_plot
+from sage.plot.streamline_plot import streamline_plot
from sage.misc.lazy_import import lazy_import
-lazy_import("sage.plot.complex_plot",["complex_plot"])
+lazy_import("sage.plot.complex_plot", ["complex_plot"])
-from .arc import arc
+from sage.plot.arc import arc
-from .animate import animate
+from sage.plot.animate import animate
-from .plot3d.tachyon import Tachyon
+from sage.plot.plot3d.tachyon import Tachyon
-from .colors import Color, hue, rainbow, colors, colormaps
+from sage.plot.colors import Color, hue, rainbow, colors, colormaps
-from .step import plot_step_function
+from sage.plot.step import plot_step_function
-from .hyperbolic_arc import hyperbolic_arc
-from .hyperbolic_polygon import hyperbolic_triangle, hyperbolic_polygon
+lazy_import("sage.plot.hyperbolic_arc", "hyperbolic_arc")
+lazy_import("sage.plot.hyperbolic_polygon", [
+ "hyperbolic_triangle", "hyperbolic_polygon"])
lazy_import("sage.plot.hyperbolic_regular_polygon", "hyperbolic_regular_polygon")
+del lazy_import
diff --git a/src/sage/plot/animate.py b/src/sage/plot/animate.py
index 071bcd92622..328ebb0d30f 100644
--- a/src/sage/plot/animate.py
+++ b/src/sage/plot/animate.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
Animated plots
diff --git a/src/sage/plot/arc.py b/src/sage/plot/arc.py
index 8da333ee12b..f27d2538361 100644
--- a/src/sage/plot/arc.py
+++ b/src/sage/plot/arc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Arcs of circles and ellipses
"""
diff --git a/src/sage/plot/arrow.py b/src/sage/plot/arrow.py
index 74da7b4b4f7..397da59735a 100644
--- a/src/sage/plot/arrow.py
+++ b/src/sage/plot/arrow.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Arrows
"""
diff --git a/src/sage/plot/bar_chart.py b/src/sage/plot/bar_chart.py
index 34ed242af4c..2f1dc0f27c9 100644
--- a/src/sage/plot/bar_chart.py
+++ b/src/sage/plot/bar_chart.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Bar charts
"""
diff --git a/src/sage/plot/bezier_path.py b/src/sage/plot/bezier_path.py
index 14958fbbba8..b801f4a6ede 100644
--- a/src/sage/plot/bezier_path.py
+++ b/src/sage/plot/bezier_path.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Bezier paths
"""
diff --git a/src/sage/plot/circle.py b/src/sage/plot/circle.py
index c7fd3d9dfc0..f2543a7331d 100644
--- a/src/sage/plot/circle.py
+++ b/src/sage/plot/circle.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Circles
"""
diff --git a/src/sage/plot/colors.py b/src/sage/plot/colors.py
index 3322c6cfdbc..2012b32ee1d 100644
--- a/src/sage/plot/colors.py
+++ b/src/sage/plot/colors.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.plot
r"""
Colors
diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
index f1f2671a803..1ad410467fc 100644
--- a/src/sage/plot/complex_plot.pyx
+++ b/src/sage/plot/complex_plot.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Complex plots
diff --git a/src/sage/plot/contour_plot.py b/src/sage/plot/contour_plot.py
index a0d9e2689f1..f526c5de5dd 100644
--- a/src/sage/plot/contour_plot.py
+++ b/src/sage/plot/contour_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Contour plots
diff --git a/src/sage/plot/density_plot.py b/src/sage/plot/density_plot.py
index ff27f2d126b..269fc73ef35 100644
--- a/src/sage/plot/density_plot.py
+++ b/src/sage/plot/density_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Density plots
diff --git a/src/sage/plot/disk.py b/src/sage/plot/disk.py
index 4219cf35155..e60b89a506e 100644
--- a/src/sage/plot/disk.py
+++ b/src/sage/plot/disk.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Disks
"""
diff --git a/src/sage/plot/ellipse.py b/src/sage/plot/ellipse.py
index 788db0fd76b..135bbeee8f6 100644
--- a/src/sage/plot/ellipse.py
+++ b/src/sage/plot/ellipse.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Ellipses
"""
diff --git a/src/sage/plot/graphics.py b/src/sage/plot/graphics.py
index 8a61068887f..376bb2d25fa 100644
--- a/src/sage/plot/graphics.py
+++ b/src/sage/plot/graphics.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-plot
r"""
Graphics objects
diff --git a/src/sage/plot/histogram.py b/src/sage/plot/histogram.py
index e10229417fc..e8de0f7262f 100644
--- a/src/sage/plot/histogram.py
+++ b/src/sage/plot/histogram.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Histograms
"""
diff --git a/src/sage/plot/hyperbolic_arc.py b/src/sage/plot/hyperbolic_arc.py
index 4e7fda8350d..17fdaf90c04 100644
--- a/src/sage/plot/hyperbolic_arc.py
+++ b/src/sage/plot/hyperbolic_arc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
Arcs in hyperbolic geometry
diff --git a/src/sage/plot/hyperbolic_polygon.py b/src/sage/plot/hyperbolic_polygon.py
index efe39697829..446f66f9404 100644
--- a/src/sage/plot/hyperbolic_polygon.py
+++ b/src/sage/plot/hyperbolic_polygon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Polygons and triangles in hyperbolic geometry
diff --git a/src/sage/plot/hyperbolic_regular_polygon.py b/src/sage/plot/hyperbolic_regular_polygon.py
index 9be2169ab63..a48ba7200ca 100644
--- a/src/sage/plot/hyperbolic_regular_polygon.py
+++ b/src/sage/plot/hyperbolic_regular_polygon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Regular polygons in the upper half model for hyperbolic plane
diff --git a/src/sage/plot/line.py b/src/sage/plot/line.py
index 1160ade0825..1c96be6be9c 100644
--- a/src/sage/plot/line.py
+++ b/src/sage/plot/line.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Line plots
"""
diff --git a/src/sage/plot/matrix_plot.py b/src/sage/plot/matrix_plot.py
index 96e966a6513..3bc93640b48 100644
--- a/src/sage/plot/matrix_plot.py
+++ b/src/sage/plot/matrix_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Matrix plots
"""
diff --git a/src/sage/plot/misc.py b/src/sage/plot/misc.py
index 45494f45698..231cc593459 100644
--- a/src/sage/plot/misc.py
+++ b/src/sage/plot/misc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Plotting utilities
diff --git a/src/sage/plot/multigraphics.py b/src/sage/plot/multigraphics.py
index f22febca152..48e6bdb2e2e 100644
--- a/src/sage/plot/multigraphics.py
+++ b/src/sage/plot/multigraphics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
Graphics arrays and insets
diff --git a/src/sage/plot/plot.py b/src/sage/plot/plot.py
index 20a71ef8bd1..9f081e8cfb4 100644
--- a/src/sage/plot/plot.py
+++ b/src/sage/plot/plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
2D plotting
diff --git a/src/sage/plot/plot3d/all.py b/src/sage/plot/plot3d/all.py
index 16c647c6b50..60c9dc491e6 100644
--- a/src/sage/plot/plot3d/all.py
+++ b/src/sage/plot/plot3d/all.py
@@ -1,21 +1,23 @@
+# sage_setup: distribution = sagemath-plot
-from .plot3d import plot3d, cylindrical_plot3d, spherical_plot3d, Spherical, SphericalElevation, Cylindrical
-from .parametric_plot3d import parametric_plot3d
-from .plot_field3d import plot_vector_field3d
+from sage.plot.plot3d.plot3d import plot3d, cylindrical_plot3d, spherical_plot3d, Spherical, SphericalElevation, Cylindrical
+from sage.plot.plot3d.parametric_plot3d import parametric_plot3d
+from sage.plot.plot3d.plot_field3d import plot_vector_field3d
# We lazy_import the following modules since they import numpy which slows down sage startup
from sage.misc.lazy_import import lazy_import
-lazy_import("sage.plot.plot3d.implicit_plot3d",["implicit_plot3d"])
+lazy_import("sage.plot.plot3d.implicit_plot3d", ["implicit_plot3d"])
-from .list_plot3d import list_plot3d
-from .revolution_plot3d import revolution_plot3d
+from sage.plot.plot3d.list_plot3d import list_plot3d
+from sage.plot.plot3d.revolution_plot3d import revolution_plot3d
-from .platonic import tetrahedron, cube, octahedron, dodecahedron, icosahedron
+from sage.plot.plot3d.platonic import tetrahedron, cube, octahedron, dodecahedron, icosahedron
-from .shapes2 import sphere, line3d, polygon3d, polygons3d, point3d, text3d, bezier3d
+from sage.plot.plot3d.shapes2 import sphere, line3d, polygon3d, polygons3d, point3d, text3d, bezier3d
-from .shapes import arrow3d
+from sage.plot.plot3d.shapes import arrow3d
-#from shapes import Box, ColorCube, Cone, Cylinder, LineSegment, Arrow, Sphere, Torus, Text as Text3D
-#from parametric_surface import ParametricSurface, MoebiusStrip
-#from plot3d import plot3d, axes as axes3d
+# from shapes import Box, ColorCube, Cone, Cylinder, LineSegment, Arrow, Sphere, Torus, Text as Text3D
+# from parametric_surface import ParametricSurface, MoebiusStrip
+# from plot3d import plot3d, axes as axes3d
+del lazy_import
diff --git a/src/sage/plot/plot3d/base.pxd b/src/sage/plot/plot3d/base.pxd
index 0b7619ddd44..49c0f9b3d82 100644
--- a/src/sage/plot/plot3d/base.pxd
+++ b/src/sage/plot/plot3d/base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
from sage.structure.sage_object cimport SageObject
diff --git a/src/sage/plot/plot3d/base.pyx b/src/sage/plot/plot3d/base.pyx
index 66694f47a5f..57804b2c979 100644
--- a/src/sage/plot/plot3d/base.pyx
+++ b/src/sage/plot/plot3d/base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Base classes for 3D graphics objects and plotting
diff --git a/src/sage/plot/plot3d/implicit_plot3d.py b/src/sage/plot/plot3d/implicit_plot3d.py
index 89512e2ae87..1b304f9308d 100644
--- a/src/sage/plot/plot3d/implicit_plot3d.py
+++ b/src/sage/plot/plot3d/implicit_plot3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Implicit plots
diff --git a/src/sage/plot/plot3d/implicit_surface.pyx b/src/sage/plot/plot3d/implicit_surface.pyx
index df28f7c6e6b..c508c73e604 100644
--- a/src/sage/plot/plot3d/implicit_surface.pyx
+++ b/src/sage/plot/plot3d/implicit_surface.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
Graphics 3D object for representing and triangulating isosurfaces
diff --git a/src/sage/plot/plot3d/index_face_set.pxd b/src/sage/plot/plot3d/index_face_set.pxd
index 5a81bd32de1..e020fc3c265 100644
--- a/src/sage/plot/plot3d/index_face_set.pxd
+++ b/src/sage/plot/plot3d/index_face_set.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
from sage.plot.plot3d.base cimport PrimitiveObject
from sage.plot.plot3d.transform cimport point_c, face_c, color_c
diff --git a/src/sage/plot/plot3d/index_face_set.pyx b/src/sage/plot/plot3d/index_face_set.pyx
index 4288db70005..4c84d7dfd39 100644
--- a/src/sage/plot/plot3d/index_face_set.pyx
+++ b/src/sage/plot/plot3d/index_face_set.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Indexed face sets
diff --git a/src/sage/plot/plot3d/introduction.py b/src/sage/plot/plot3d/introduction.py
index b297fdd180a..4424bcb2195 100644
--- a/src/sage/plot/plot3d/introduction.py
+++ b/src/sage/plot/plot3d/introduction.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Introduction
diff --git a/src/sage/plot/plot3d/list_plot3d.py b/src/sage/plot/plot3d/list_plot3d.py
index 7bfd84f76a4..ff2b8f85db4 100644
--- a/src/sage/plot/plot3d/list_plot3d.py
+++ b/src/sage/plot/plot3d/list_plot3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
List plots
"""
diff --git a/src/sage/plot/plot3d/parametric_plot3d.py b/src/sage/plot/plot3d/parametric_plot3d.py
index 680cb187787..38b01dc6d73 100644
--- a/src/sage/plot/plot3d/parametric_plot3d.py
+++ b/src/sage/plot/plot3d/parametric_plot3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Parametric plots
diff --git a/src/sage/plot/plot3d/parametric_surface.pxd b/src/sage/plot/plot3d/parametric_surface.pxd
index 82ac1164f8a..a018fc00c27 100644
--- a/src/sage/plot/plot3d/parametric_surface.pxd
+++ b/src/sage/plot/plot3d/parametric_surface.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
from sage.plot.plot3d.index_face_set cimport IndexFaceSet
from sage.plot.plot3d.transform cimport point_c
diff --git a/src/sage/plot/plot3d/parametric_surface.pyx b/src/sage/plot/plot3d/parametric_surface.pyx
index 62e397030cd..c47ed782a23 100644
--- a/src/sage/plot/plot3d/parametric_surface.pyx
+++ b/src/sage/plot/plot3d/parametric_surface.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
Parametric surface
diff --git a/src/sage/plot/plot3d/platonic.py b/src/sage/plot/plot3d/platonic.py
index 491179ede81..1df7fdfdb95 100644
--- a/src/sage/plot/plot3d/platonic.py
+++ b/src/sage/plot/plot3d/platonic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Platonic solids
diff --git a/src/sage/plot/plot3d/plot3d.py b/src/sage/plot/plot3d/plot3d.py
index 2e027e87dd2..1f88e608846 100644
--- a/src/sage/plot/plot3d/plot3d.py
+++ b/src/sage/plot/plot3d/plot3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
r"""
Plotting functions
diff --git a/src/sage/plot/plot3d/plot_field3d.py b/src/sage/plot/plot3d/plot_field3d.py
index a18c49215be..d64cecd237d 100644
--- a/src/sage/plot/plot3d/plot_field3d.py
+++ b/src/sage/plot/plot3d/plot_field3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Plotting 3D fields
diff --git a/src/sage/plot/plot3d/point_c.pxi b/src/sage/plot/plot3d/point_c.pxi
index ba9561ab18c..d8e8cb47f73 100644
--- a/src/sage/plot/plot3d/point_c.pxi
+++ b/src/sage/plot/plot3d/point_c.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# ****************************************************************************
# Copyright (C) 2007 Robert Bradshaw
#
diff --git a/src/sage/plot/plot3d/revolution_plot3d.py b/src/sage/plot/plot3d/revolution_plot3d.py
index f3220dcd1a3..65d2d4820d7 100644
--- a/src/sage/plot/plot3d/revolution_plot3d.py
+++ b/src/sage/plot/plot3d/revolution_plot3d.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.plot sage.symbolic
"""
Surfaces of revolution
diff --git a/src/sage/plot/plot3d/shapes.pxd b/src/sage/plot/plot3d/shapes.pxd
index d01e2a7460d..aa385217dd3 100644
--- a/src/sage/plot/plot3d/shapes.pxd
+++ b/src/sage/plot/plot3d/shapes.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
from sage.plot.plot3d.parametric_surface cimport ParametricSurface
diff --git a/src/sage/plot/plot3d/shapes.pyx b/src/sage/plot/plot3d/shapes.pyx
index 694fca5bb4d..ccbb3d5cff5 100644
--- a/src/sage/plot/plot3d/shapes.pyx
+++ b/src/sage/plot/plot3d/shapes.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Basic objects such as Sphere, Box, Cone, etc.
diff --git a/src/sage/plot/plot3d/shapes2.py b/src/sage/plot/plot3d/shapes2.py
index 96e4646bbc4..4587eaa6a2e 100644
--- a/src/sage/plot/plot3d/shapes2.py
+++ b/src/sage/plot/plot3d/shapes2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Classes for Lines, Frames, Rulers, Spheres, Points, Dots, and Text
diff --git a/src/sage/plot/plot3d/tachyon.py b/src/sage/plot/plot3d/tachyon.py
index 4e8184a7816..f7c80d56bce 100644
--- a/src/sage/plot/plot3d/tachyon.py
+++ b/src/sage/plot/plot3d/tachyon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
The Tachyon 3D Ray Tracer
diff --git a/src/sage/plot/plot3d/texture.py b/src/sage/plot/plot3d/texture.py
index c4dee5d3ad5..5e0b1708594 100644
--- a/src/sage/plot/plot3d/texture.py
+++ b/src/sage/plot/plot3d/texture.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Texture support
diff --git a/src/sage/plot/plot3d/transform.pxd b/src/sage/plot/plot3d/transform.pxd
index 39fd2bb6381..8113d48542c 100644
--- a/src/sage/plot/plot3d/transform.pxd
+++ b/src/sage/plot/plot3d/transform.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
cdef struct point_c:
double x, y, z
diff --git a/src/sage/plot/plot3d/transform.pyx b/src/sage/plot/plot3d/transform.pyx
index ad9aae98278..a2633a4da4c 100644
--- a/src/sage/plot/plot3d/transform.pyx
+++ b/src/sage/plot/plot3d/transform.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Transformations
"""
diff --git a/src/sage/plot/plot3d/tri_plot.py b/src/sage/plot/plot3d/tri_plot.py
index 256b0d348c3..3b2e506d854 100644
--- a/src/sage/plot/plot3d/tri_plot.py
+++ b/src/sage/plot/plot3d/tri_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
r"""
Adaptive refinement code for 3d surface plotting
diff --git a/src/sage/plot/plot_field.py b/src/sage/plot/plot_field.py
index a54a6db185b..adafeb93fd8 100644
--- a/src/sage/plot/plot_field.py
+++ b/src/sage/plot/plot_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Plotting fields
diff --git a/src/sage/plot/point.py b/src/sage/plot/point.py
index 9377d2bec85..bc138f6ddff 100644
--- a/src/sage/plot/point.py
+++ b/src/sage/plot/point.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-plot
r"""
Points
diff --git a/src/sage/plot/polygon.py b/src/sage/plot/polygon.py
index a2159fcfb56..a49477805e0 100644
--- a/src/sage/plot/polygon.py
+++ b/src/sage/plot/polygon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Polygons
"""
diff --git a/src/sage/plot/primitive.py b/src/sage/plot/primitive.py
index 20c2987142f..01e1bf67b86 100644
--- a/src/sage/plot/primitive.py
+++ b/src/sage/plot/primitive.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Plotting primitives
"""
diff --git a/src/sage/plot/scatter_plot.py b/src/sage/plot/scatter_plot.py
index c78b33a5258..e523c3320da 100644
--- a/src/sage/plot/scatter_plot.py
+++ b/src/sage/plot/scatter_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Scatter plots
"""
diff --git a/src/sage/plot/step.py b/src/sage/plot/step.py
index 4023686f9bd..81e3dc56870 100644
--- a/src/sage/plot/step.py
+++ b/src/sage/plot/step.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Step function plots
diff --git a/src/sage/plot/streamline_plot.py b/src/sage/plot/streamline_plot.py
index 663d3aee70b..8d32bedb449 100644
--- a/src/sage/plot/streamline_plot.py
+++ b/src/sage/plot/streamline_plot.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
# sage.doctest: needs sage.symbolic
"""
Streamline plots
diff --git a/src/sage/plot/text.py b/src/sage/plot/text.py
index 602cdfebddf..133f34bade6 100644
--- a/src/sage/plot/text.py
+++ b/src/sage/plot/text.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-plot
"""
Text in plots
"""
diff --git a/src/sage/probability/all.py b/src/sage/probability/all.py
index 689ee7a7934..5e82c1e7525 100644
--- a/src/sage/probability/all.py
+++ b/src/sage/probability/all.py
@@ -1,9 +1,10 @@
+# sage_setup: distribution = sagemath-modules
-from .random_variable import (
- DiscreteRandomVariable,
- DiscreteProbabilitySpace )
+from sage.probability.random_variable import (
+ DiscreteRandomVariable,
+ DiscreteProbabilitySpace)
-from .probability_distribution import (
+from sage.probability.probability_distribution import (
RealDistribution,
SphericalDistribution,
- GeneralDiscreteDistribution )
+ GeneralDiscreteDistribution)
diff --git a/src/sage/probability/probability_distribution.pyx b/src/sage/probability/probability_distribution.pyx
index e2c71af9c25..86c0dd17599 100644
--- a/src/sage/probability/probability_distribution.pyx
+++ b/src/sage/probability/probability_distribution.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Probability Distributions
diff --git a/src/sage/probability/random_variable.py b/src/sage/probability/random_variable.py
index 4a385e55150..5950633e03f 100644
--- a/src/sage/probability/random_variable.py
+++ b/src/sage/probability/random_variable.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Random variables and probability spaces
diff --git a/src/sage/quadratic_forms/all.py b/src/sage/quadratic_forms/all.py
index 81d395f375c..f09471d0416 100644
--- a/src/sage/quadratic_forms/all.py
+++ b/src/sage/quadratic_forms/all.py
@@ -1,19 +1,4 @@
-from .binary_qf import BinaryQF, BinaryQF_reduced_representatives
+# sage_setup: distribution = sagemath-modules
-from .bqf_class_group import BQFClassGroup
-
-from .ternary_qf import TernaryQF, find_all_ternary_qf_by_level_disc, find_a_ternary_qf_by_level_disc
-
-from .quadratic_form import QuadraticForm, DiagonalQuadraticForm, quadratic_form_from_invariants
-
-from .random_quadraticform import (random_quadraticform, random_quadraticform_with_conditions,
- random_ternaryqf, random_ternaryqf_with_conditions)
-
-from .extras import least_quadratic_nonresidue, extend_to_primitive, is_triangular_number
-
-from .special_values import (gamma__exact, zeta__exact, QuadraticBernoulliNumber,
- quadratic_L_function__exact, quadratic_L_function__numerical)
-
-from .genera.genus import Genus
-
-from .constructions import BezoutianQuadraticForm, HyperbolicPlane_quadratic_form
+from sage.quadratic_forms.all__sagemath_modules import *
+from sage.quadratic_forms.all__sagemath_pari import *
diff --git a/src/sage/quadratic_forms/all__sagemath_modules.py b/src/sage/quadratic_forms/all__sagemath_modules.py
new file mode 100644
index 00000000000..62516aead2a
--- /dev/null
+++ b/src/sage/quadratic_forms/all__sagemath_modules.py
@@ -0,0 +1,12 @@
+from sage.quadratic_forms.binary_qf import BinaryQF, BinaryQF_reduced_representatives
+
+from sage.quadratic_forms.ternary_qf import TernaryQF, find_all_ternary_qf_by_level_disc, find_a_ternary_qf_by_level_disc
+
+from sage.quadratic_forms.quadratic_form import QuadraticForm, DiagonalQuadraticForm, quadratic_form_from_invariants
+
+from sage.quadratic_forms.random_quadraticform import (random_quadraticform, random_quadraticform_with_conditions,
+ random_ternaryqf, random_ternaryqf_with_conditions)
+
+from sage.quadratic_forms.extras import least_quadratic_nonresidue, extend_to_primitive, is_triangular_number
+
+from sage.quadratic_forms.constructions import BezoutianQuadraticForm, HyperbolicPlane_quadratic_form
diff --git a/src/sage/quadratic_forms/all__sagemath_pari.py b/src/sage/quadratic_forms/all__sagemath_pari.py
new file mode 100644
index 00000000000..f6235960f54
--- /dev/null
+++ b/src/sage/quadratic_forms/all__sagemath_pari.py
@@ -0,0 +1,6 @@
+from sage.quadratic_forms.bqf_class_group import BQFClassGroup
+
+from sage.quadratic_forms.special_values import (gamma__exact, zeta__exact, QuadraticBernoulliNumber,
+ quadratic_L_function__exact, quadratic_L_function__numerical)
+
+from sage.quadratic_forms.genera.genus import Genus
diff --git a/src/sage/quadratic_forms/binary_qf.py b/src/sage/quadratic_forms/binary_qf.py
index 1bd4e6db030..5a5a16eaae9 100755
--- a/src/sage/quadratic_forms/binary_qf.py
+++ b/src/sage/quadratic_forms/binary_qf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Binary quadratic forms with integer coefficients
@@ -1608,17 +1609,21 @@ def small_prime_value(self, Bmax=1000):
raise ValueError("Unable to find a prime value of %s" % self)
B += 10
- def solve_integer(self, n, *, algorithm="general"):
+ def solve_integer(self, n, *, algorithm="general", _flag=2):
r"""
Solve `Q(x, y) = n` in integers `x` and `y` where `Q` is this
quadratic form.
INPUT:
- - ``n`` -- a positive integer
+ - ``n`` -- a positive integer or a
+ `:sage:`~sage.structure.factorization.Factorization` object
- ``algorithm`` -- ``"general"`` (default) or ``"cornacchia"``
+ - ``_flag`` -- ``1``, ``2`` (default) or ``3``; passed onto the pari
+ function``qfbsolve``. For internal use only.
+
To use the Cornacchia algorithm, the quadratic form must have
`a=1` and `b=0` and `c>0`, and ``n`` must be a prime or four
times a prime (but this is not checked).
@@ -1630,6 +1635,8 @@ def solve_integer(self, n, *, algorithm="general"):
ALGORITHM: :pari:`qfbsolve` or :pari:`qfbcornacchia`
+ TODO:: Replace `_flag` with human-readable parameters c.f. :issue:`37119`
+
EXAMPLES::
sage: Q = BinaryQF([1, 0, 419])
@@ -1665,6 +1672,14 @@ def solve_integer(self, n, *, algorithm="general"):
sage: [Q.solve_integer(6) for Q in Qs]
[(1, -1), (1, -1), (-1, -1)]
+ ::
+
+ sage: # needs sage.libs.pari
+ sage: n = factor(126)
+ sage: Q = BinaryQF([1, 0, 5])
+ sage: Q.solve_integer(n)
+ (11, -1)
+
TESTS:
The returned solutions are correct (random inputs)::
@@ -1714,22 +1729,39 @@ def solve_integer(self, n, *, algorithm="general"):
sage: Q = Q.matrix_action_right(U)
sage: Q.discriminant().is_square()
True
- sage: xy = Q.solve_integer(n) # needs sage.libs.pari
- sage: Q(*xy) == n # needs sage.libs.pari
+ sage: # needs sage.libs.pari
+ sage: xy = Q.solve_integer(n)
+ sage: Q(*xy) == n
True
Also test the `n=0` special case separately::
- sage: xy = Q.solve_integer(0) # needs sage.libs.pari
- sage: Q(*xy) # needs sage.libs.pari
+ sage: # needs sage.libs.pari
+ sage: xy = Q.solve_integer(0)
+ sage: Q(*xy)
0
- """
- n = ZZ(n)
+ Test for different `_flag` values::
+
+ sage: # needs sage.libs.pari
+ sage: Q = BinaryQF([1, 0, 5])
+ sage: Q.solve_integer(126, _flag=1)
+ [(11, -1), (-1, -5), (-1, 5), (-11, -1)]
+ sage: Q.solve_integer(126, _flag=2)
+ (11, -1)
+ sage: Q.solve_integer(126, _flag=3)
+ [(11, -1), (-1, -5), (-1, 5), (-11, -1), (-9, -3), (9, -3)]
+ """
if self.is_negative_definite(): # not supported by PARI
return (-self).solve_integer(-n)
if self.is_reducible(): # square discriminant; not supported by PARI
+ from sage.structure.factorization import Factorization
+ if isinstance(n, Factorization):
+ n = ZZ(n.value())
+ else:
+ n = ZZ(n)
+
if self._a:
# https://math.stackexchange.com/a/980075
w = self.discriminant().sqrt()
@@ -1772,9 +1804,10 @@ def solve_integer(self, n, *, algorithm="general"):
if algorithm != 'general':
raise ValueError(f'algorithm {algorithm!r} is not a valid algorithm')
- flag = 2 # single solution, possibly imprimitive
- sol = self.__pari__().qfbsolve(n, flag)
- return tuple(map(ZZ, sol)) if sol else None
+ sol = self.__pari__().qfbsolve(n, _flag)
+ if _flag == 2:
+ return tuple(map(ZZ, sol)) if sol else None
+ return list(map(lambda tup: tuple(map(ZZ, tup)), sol))
def form_class(self):
r"""
diff --git a/src/sage/quadratic_forms/bqf_class_group.py b/src/sage/quadratic_forms/bqf_class_group.py
index 6d3aefed881..2db1c637336 100644
--- a/src/sage/quadratic_forms/bqf_class_group.py
+++ b/src/sage/quadratic_forms/bqf_class_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Class groups of binary quadratic forms
diff --git a/src/sage/quadratic_forms/constructions.py b/src/sage/quadratic_forms/constructions.py
index 2fe117d2e29..f24148f6d31 100644
--- a/src/sage/quadratic_forms/constructions.py
+++ b/src/sage/quadratic_forms/constructions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Constructions of quadratic forms
"""
diff --git a/src/sage/quadratic_forms/count_local_2.pyx b/src/sage/quadratic_forms/count_local_2.pyx
index 3ce05a3a413..a00f1072d82 100644
--- a/src/sage/quadratic_forms/count_local_2.pyx
+++ b/src/sage/quadratic_forms/count_local_2.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Optimized counting of congruence solutions
"""
diff --git a/src/sage/quadratic_forms/extras.py b/src/sage/quadratic_forms/extras.py
index 7bdba23c32e..e0ef56a2625 100644
--- a/src/sage/quadratic_forms/extras.py
+++ b/src/sage/quadratic_forms/extras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Extra functions for quadratic forms
"""
diff --git a/src/sage/quadratic_forms/genera/all.py b/src/sage/quadratic_forms/genera/all.py
index b1f48b5b8f6..94beebc6290 100644
--- a/src/sage/quadratic_forms/genera/all.py
+++ b/src/sage/quadratic_forms/genera/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# ****************************************************************************
# Copyright (C) 2007 David Kohel
#
@@ -5,4 +6,4 @@
#
# https://www.gnu.org/licenses/
# ****************************************************************************
-from .genus import Genus, LocalGenusSymbol, is_GlobalGenus
+from sage.quadratic_forms.genera.genus import Genus, LocalGenusSymbol, is_GlobalGenus
diff --git a/src/sage/quadratic_forms/genera/genus.py b/src/sage/quadratic_forms/genera/genus.py
index d98b2416c3d..7e9f7a7e557 100644
--- a/src/sage/quadratic_forms/genera/genus.py
+++ b/src/sage/quadratic_forms/genera/genus.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
r"""
Genus
diff --git a/src/sage/quadratic_forms/genera/normal_form.py b/src/sage/quadratic_forms/genera/normal_form.py
index 829b4783226..237caa0ac62 100644
--- a/src/sage/quadratic_forms/genera/normal_form.py
+++ b/src/sage/quadratic_forms/genera/normal_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari sage.rings.padics
r"""
Normal forms for `p`-adic quadratic and bilinear forms
diff --git a/src/sage/quadratic_forms/genera/spinor_genus.py b/src/sage/quadratic_forms/genera/spinor_genus.py
index 4f318a64d44..f3bfebaf6f8 100644
--- a/src/sage/quadratic_forms/genera/spinor_genus.py
+++ b/src/sage/quadratic_forms/genera/spinor_genus.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.groups
r"""
Spinor genus computations.
diff --git a/src/sage/quadratic_forms/qfsolve.py b/src/sage/quadratic_forms/qfsolve.py
index 83720128bfc..5f418226e7c 100644
--- a/src/sage/quadratic_forms/qfsolve.py
+++ b/src/sage/quadratic_forms/qfsolve.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
"""
Solving quadratic equations
diff --git a/src/sage/quadratic_forms/quadratic_form.py b/src/sage/quadratic_forms/quadratic_form.py
index b9a9767a54a..eb7ccc893fe 100644
--- a/src/sage/quadratic_forms/quadratic_form.py
+++ b/src/sage/quadratic_forms/quadratic_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Quadratic forms overview
diff --git a/src/sage/quadratic_forms/quadratic_form__automorphisms.py b/src/sage/quadratic_forms/quadratic_form__automorphisms.py
index 4b6e3594f83..4972cacee14 100644
--- a/src/sage/quadratic_forms/quadratic_form__automorphisms.py
+++ b/src/sage/quadratic_forms/quadratic_form__automorphisms.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
"""
Automorphisms of Quadratic Forms
diff --git a/src/sage/quadratic_forms/quadratic_form__count_local_2.py b/src/sage/quadratic_forms/quadratic_form__count_local_2.py
index b125d8d6840..c98d2f4271e 100644
--- a/src/sage/quadratic_forms/quadratic_form__count_local_2.py
+++ b/src/sage/quadratic_forms/quadratic_form__count_local_2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Counting Congruence Solutions
diff --git a/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py b/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py
index 89d4c281104..78d8a22b509 100644
--- a/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py
+++ b/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Equivalence Testing
diff --git a/src/sage/quadratic_forms/quadratic_form__evaluate.pyx b/src/sage/quadratic_forms/quadratic_form__evaluate.pyx
index 95e82e669dc..ddea5c0c112 100644
--- a/src/sage/quadratic_forms/quadratic_form__evaluate.pyx
+++ b/src/sage/quadratic_forms/quadratic_form__evaluate.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"Evaluation"
diff --git a/src/sage/quadratic_forms/quadratic_form__genus.py b/src/sage/quadratic_forms/quadratic_form__genus.py
index 52468e9889a..7ff275be265 100644
--- a/src/sage/quadratic_forms/quadratic_form__genus.py
+++ b/src/sage/quadratic_forms/quadratic_form__genus.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
"""
Local and Global Genus Symbols
diff --git a/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py b/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py
index a39637df8f0..f02d5aca212 100644
--- a/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py
+++ b/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Local Density Congruence
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py b/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py
index ec39e489494..dac1793a1be 100644
--- a/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py
+++ b/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Local Density Interfaces
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py b/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py
index aff8dad2d62..90341e00ae0 100644
--- a/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py
+++ b/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Local Field Invariants
diff --git a/src/sage/quadratic_forms/quadratic_form__local_normal_form.py b/src/sage/quadratic_forms/quadratic_form__local_normal_form.py
index 5770a3c22f0..fd3cebb8cbd 100644
--- a/src/sage/quadratic_forms/quadratic_form__local_normal_form.py
+++ b/src/sage/quadratic_forms/quadratic_form__local_normal_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Local Normal Form
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py b/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py
index c337d2994a0..e7a1c2607f9 100644
--- a/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py
+++ b/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari sage.rings.number_field
"""
Local Representation Conditions
diff --git a/src/sage/quadratic_forms/quadratic_form__mass.py b/src/sage/quadratic_forms/quadratic_form__mass.py
index 67bf06d888a..e951d8c1b29 100644
--- a/src/sage/quadratic_forms/quadratic_form__mass.py
+++ b/src/sage/quadratic_forms/quadratic_form__mass.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Shimura Mass
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py b/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py
index 894ee68cec9..732e31bff96 100644
--- a/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py
+++ b/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Conway-Sloane masses
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py b/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py
index 9133a84b76f..a82406bce24 100644
--- a/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py
+++ b/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Local Masses and Siegel Densities
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__neighbors.py b/src/sage/quadratic_forms/quadratic_form__neighbors.py
index 0486e0a4acb..19577bd0585 100644
--- a/src/sage/quadratic_forms/quadratic_form__neighbors.py
+++ b/src/sage/quadratic_forms/quadratic_form__neighbors.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Neighbors
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__reduction_theory.py b/src/sage/quadratic_forms/quadratic_form__reduction_theory.py
index 87323962097..1bafe1e2756 100644
--- a/src/sage/quadratic_forms/quadratic_form__reduction_theory.py
+++ b/src/sage/quadratic_forms/quadratic_form__reduction_theory.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Reduction Theory
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__siegel_product.py b/src/sage/quadratic_forms/quadratic_form__siegel_product.py
index b481f5ad073..1aebfabb6bf 100644
--- a/src/sage/quadratic_forms/quadratic_form__siegel_product.py
+++ b/src/sage/quadratic_forms/quadratic_form__siegel_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
"""
Siegel Products
diff --git a/src/sage/quadratic_forms/quadratic_form__split_local_covering.py b/src/sage/quadratic_forms/quadratic_form__split_local_covering.py
index 4db788e5e44..ca265e51056 100644
--- a/src/sage/quadratic_forms/quadratic_form__split_local_covering.py
+++ b/src/sage/quadratic_forms/quadratic_form__split_local_covering.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Split Local Covering
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py b/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py
index cc7a6549312..01fdced1bc1 100644
--- a/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py
+++ b/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Tornaria methods for computing with quadratic forms
"""
diff --git a/src/sage/quadratic_forms/quadratic_form__theta.py b/src/sage/quadratic_forms/quadratic_form__theta.py
index c4f0606df4c..8320c6ac13a 100644
--- a/src/sage/quadratic_forms/quadratic_form__theta.py
+++ b/src/sage/quadratic_forms/quadratic_form__theta.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Theta Series of Quadratic Forms
diff --git a/src/sage/quadratic_forms/quadratic_form__variable_substitutions.py b/src/sage/quadratic_forms/quadratic_form__variable_substitutions.py
index cbcae91d9de..f47efdbdc8f 100644
--- a/src/sage/quadratic_forms/quadratic_form__variable_substitutions.py
+++ b/src/sage/quadratic_forms/quadratic_form__variable_substitutions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Variable Substitution, Multiplication, Division, Scaling
diff --git a/src/sage/quadratic_forms/random_quadraticform.py b/src/sage/quadratic_forms/random_quadraticform.py
index e372c625f57..d0b202dd919 100644
--- a/src/sage/quadratic_forms/random_quadraticform.py
+++ b/src/sage/quadratic_forms/random_quadraticform.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Random quadratic forms
diff --git a/src/sage/quadratic_forms/special_values.py b/src/sage/quadratic_forms/special_values.py
index 2ee775e053d..74f1882a7cb 100644
--- a/src/sage/quadratic_forms/special_values.py
+++ b/src/sage/quadratic_forms/special_values.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Routines for computing special values of `L`-functions
diff --git a/src/sage/quadratic_forms/ternary.pyx b/src/sage/quadratic_forms/ternary.pyx
index 3c1ca8832a8..583f1f1c88d 100644
--- a/src/sage/quadratic_forms/ternary.pyx
+++ b/src/sage/quadratic_forms/ternary.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Helper code for ternary quadratic forms
"""
diff --git a/src/sage/quadratic_forms/ternary_qf.py b/src/sage/quadratic_forms/ternary_qf.py
index d5384632694..fda07dec2bb 100644
--- a/src/sage/quadratic_forms/ternary_qf.py
+++ b/src/sage/quadratic_forms/ternary_qf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Ternary quadratic form with integer coefficients
diff --git a/src/sage/quivers/algebra.py b/src/sage/quivers/algebra.py
index 393caa64f40..fb2211c474a 100644
--- a/src/sage/quivers/algebra.py
+++ b/src/sage/quivers/algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Path Algebras
"""
diff --git a/src/sage/quivers/algebra_elements.pxd b/src/sage/quivers/algebra_elements.pxd
index 3beb69914d0..91645ff60d2 100644
--- a/src/sage/quivers/algebra_elements.pxd
+++ b/src/sage/quivers/algebra_elements.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Cython types for elements of path algebras
"""
diff --git a/src/sage/quivers/algebra_elements.pxi b/src/sage/quivers/algebra_elements.pxi
index 45d18478f60..2ca59dbd40d 100644
--- a/src/sage/quivers/algebra_elements.pxi
+++ b/src/sage/quivers/algebra_elements.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Boilerplate functions for a cython implementation of elements of path algebras
diff --git a/src/sage/quivers/algebra_elements.pyx b/src/sage/quivers/algebra_elements.pyx
index 3d05ba7e270..8e1cbd0b8c6 100644
--- a/src/sage/quivers/algebra_elements.pyx
+++ b/src/sage/quivers/algebra_elements.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Path algebra elements
diff --git a/src/sage/quivers/all.py b/src/sage/quivers/all.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/quivers/all.py
+++ b/src/sage/quivers/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/quivers/homspace.py b/src/sage/quivers/homspace.py
index 414eafa5a89..36e3eea2eca 100644
--- a/src/sage/quivers/homspace.py
+++ b/src/sage/quivers/homspace.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Quiver Homspace
"""
diff --git a/src/sage/quivers/morphism.py b/src/sage/quivers/morphism.py
index b2f3d33e0df..4a67151a580 100644
--- a/src/sage/quivers/morphism.py
+++ b/src/sage/quivers/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Quiver Morphisms
"""
diff --git a/src/sage/quivers/path_semigroup.py b/src/sage/quivers/path_semigroup.py
index 42ff7b0698e..6b42236d314 100644
--- a/src/sage/quivers/path_semigroup.py
+++ b/src/sage/quivers/path_semigroup.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-flint
"""
Path Semigroups
"""
diff --git a/src/sage/quivers/paths.pxd b/src/sage/quivers/paths.pxd
index 5757bf6e219..26e5ad3ccf5 100644
--- a/src/sage/quivers/paths.pxd
+++ b/src/sage/quivers/paths.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.structure.element cimport MonoidElement, Element
from sage.data_structures.bounded_integer_sequences cimport biseq_t
diff --git a/src/sage/quivers/paths.pyx b/src/sage/quivers/paths.pyx
index aead99670ab..984d792621d 100644
--- a/src/sage/quivers/paths.pyx
+++ b/src/sage/quivers/paths.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Quiver Paths
"""
diff --git a/src/sage/quivers/representation.py b/src/sage/quivers/representation.py
index 4d8b3cf7321..6e85af5af76 100644
--- a/src/sage/quivers/representation.py
+++ b/src/sage/quivers/representation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Quiver Representations
diff --git a/src/sage/repl/__init__.py b/src/sage/repl/__init__.py
index 1357b584ef3..dfa0bd2e536 100644
--- a/src/sage/repl/__init__.py
+++ b/src/sage/repl/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# IPython calls this when "%load_ext sage.repl" is used.
# The Sage application loads it when starting up.
def load_ipython_extension(*args):
diff --git a/src/sage/repl/all.py b/src/sage/repl/all.py
index 96fd6de5f6d..bf4b65b10fe 100644
--- a/src/sage/repl/all.py
+++ b/src/sage/repl/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
from sage.misc.lazy_import import lazy_import
from sage.repl.preparse import preparse, implicit_multiplication
@@ -5,9 +6,10 @@
lazy_import('sage.repl.interpreter', 'preparser')
lazy_import('sage.repl.attach', [
- 'attach', 'detach', 'attached_files', 'load_attach_path',
- 'reset_load_attach_path', 'load_attach_mode'])
+ 'attach', 'detach', 'attached_files', 'load_attach_path',
+ 'reset_load_attach_path', 'load_attach_mode'])
from sage.repl.rich_output.display_manager import get_display_manager
from sage.repl.rich_output.pretty_print import pretty_print, show
+del lazy_import
diff --git a/src/sage/repl/attach.py b/src/sage/repl/attach.py
index 689759d50a8..52f3f12fa62 100644
--- a/src/sage/repl/attach.py
+++ b/src/sage/repl/attach.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Keep track of attached files
diff --git a/src/sage/repl/configuration.py b/src/sage/repl/configuration.py
index 90df44bdf81..ad0870cca2e 100644
--- a/src/sage/repl/configuration.py
+++ b/src/sage/repl/configuration.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Sage's IPython Configuration
diff --git a/src/sage/repl/display/__init__.py b/src/sage/repl/display/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/repl/display/__init__.py
+++ b/src/sage/repl/display/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/repl/display/fancy_repr.py b/src/sage/repl/display/fancy_repr.py
index 1cfaf94c45f..c2e88af33f0 100644
--- a/src/sage/repl/display/fancy_repr.py
+++ b/src/sage/repl/display/fancy_repr.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
Representations of objects
"""
diff --git a/src/sage/repl/display/formatter.py b/src/sage/repl/display/formatter.py
index 822a9edfaba..9d6eaf53894 100644
--- a/src/sage/repl/display/formatter.py
+++ b/src/sage/repl/display/formatter.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
IPython Displayhook Formatters
diff --git a/src/sage/repl/display/jsmol_iframe.py b/src/sage/repl/display/jsmol_iframe.py
index f8e69cfcb59..1d1c9c8fb55 100644
--- a/src/sage/repl/display/jsmol_iframe.py
+++ b/src/sage/repl/display/jsmol_iframe.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
HTML Generator for JSmol
diff --git a/src/sage/repl/display/pretty_print.py b/src/sage/repl/display/pretty_print.py
index 95a5f86a520..99bbe5013d0 100644
--- a/src/sage/repl/display/pretty_print.py
+++ b/src/sage/repl/display/pretty_print.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
The Sage pretty printer
diff --git a/src/sage/repl/display/util.py b/src/sage/repl/display/util.py
index a2033c69f4f..8fcc6569a3a 100644
--- a/src/sage/repl/display/util.py
+++ b/src/sage/repl/display/util.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
Utility functions for pretty-printing
diff --git a/src/sage/repl/image.py b/src/sage/repl/image.py
index c9b2001b016..500e60d97b0 100644
--- a/src/sage/repl/image.py
+++ b/src/sage/repl/image.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
Sage Wrapper for Bitmap Images
diff --git a/src/sage/repl/inputhook.py b/src/sage/repl/inputhook.py
index 8d79110ebbf..99fb4a0c871 100644
--- a/src/sage/repl/inputhook.py
+++ b/src/sage/repl/inputhook.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
The Sage Input Hook
diff --git a/src/sage/repl/interface_magic.py b/src/sage/repl/interface_magic.py
index b77bc09e972..b60355f5cae 100644
--- a/src/sage/repl/interface_magic.py
+++ b/src/sage/repl/interface_magic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Magics for each of the Sage interfaces
diff --git a/src/sage/repl/interpreter.py b/src/sage/repl/interpreter.py
index abd2c4fcad1..84af28f8cf7 100644
--- a/src/sage/repl/interpreter.py
+++ b/src/sage/repl/interpreter.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Sage's IPython Modifications
diff --git a/src/sage/repl/ipython_extension.py b/src/sage/repl/ipython_extension.py
index f9b165847d8..a7fccf9aa99 100644
--- a/src/sage/repl/ipython_extension.py
+++ b/src/sage/repl/ipython_extension.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Sage's IPython Extension
diff --git a/src/sage/repl/ipython_kernel/__init__.py b/src/sage/repl/ipython_kernel/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/repl/ipython_kernel/__init__.py
+++ b/src/sage/repl/ipython_kernel/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/repl/ipython_kernel/__main__.py b/src/sage/repl/ipython_kernel/__main__.py
index a1657263bee..8f575facf67 100644
--- a/src/sage/repl/ipython_kernel/__main__.py
+++ b/src/sage/repl/ipython_kernel/__main__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
from ipykernel.kernelapp import IPKernelApp
from sage.repl.ipython_kernel.kernel import SageKernel
IPKernelApp.launch_instance(kernel_class=SageKernel)
diff --git a/src/sage/repl/ipython_kernel/all_jupyter.py b/src/sage/repl/ipython_kernel/all_jupyter.py
index 37899e1c080..2d2677da27d 100644
--- a/src/sage/repl/ipython_kernel/all_jupyter.py
+++ b/src/sage/repl/ipython_kernel/all_jupyter.py
@@ -1,9 +1,10 @@
+# sage_setup: distribution = sagemath-repl
"""
All imports for Jupyter
"""
from sage.all_cmdline import *
-from .widgets_sagenb import (input_box, text_control, slider,
- range_slider, checkbox, selector, input_grid, color_selector)
-from .interact import interact
+from sage.repl.ipython_kernel.widgets_sagenb import (input_box, text_control, slider,
+ range_slider, checkbox, selector, input_grid, color_selector)
+from sage.repl.ipython_kernel.interact import interact
diff --git a/src/sage/repl/ipython_kernel/install.py b/src/sage/repl/ipython_kernel/install.py
index 9b5ab3486c7..d4feb9e06a3 100644
--- a/src/sage/repl/ipython_kernel/install.py
+++ b/src/sage/repl/ipython_kernel/install.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Installing the SageMath Jupyter Kernel and Extensions
diff --git a/src/sage/repl/ipython_kernel/interact.py b/src/sage/repl/ipython_kernel/interact.py
index c9c3d627657..f62cf420fc1 100644
--- a/src/sage/repl/ipython_kernel/interact.py
+++ b/src/sage/repl/ipython_kernel/interact.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Interacts for the Sage Jupyter notebook
diff --git a/src/sage/repl/ipython_kernel/kernel.py b/src/sage/repl/ipython_kernel/kernel.py
index 5398270160e..1de9df5ee44 100644
--- a/src/sage/repl/ipython_kernel/kernel.py
+++ b/src/sage/repl/ipython_kernel/kernel.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
The Sage ZMQ Kernel
diff --git a/src/sage/repl/ipython_kernel/widgets.py b/src/sage/repl/ipython_kernel/widgets.py
index 14c879373a5..93498c7e09a 100644
--- a/src/sage/repl/ipython_kernel/widgets.py
+++ b/src/sage/repl/ipython_kernel/widgets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Widgets to be used for the Sage Jupyter notebook
diff --git a/src/sage/repl/ipython_kernel/widgets_sagenb.py b/src/sage/repl/ipython_kernel/widgets_sagenb.py
index cedf713248a..4d3b1dbdedc 100644
--- a/src/sage/repl/ipython_kernel/widgets_sagenb.py
+++ b/src/sage/repl/ipython_kernel/widgets_sagenb.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Functions to construct widgets, based on the old SageNB interface.
diff --git a/src/sage/repl/ipython_tests.py b/src/sage/repl/ipython_tests.py
index 74a76c84d68..5070fc4fb35 100644
--- a/src/sage/repl/ipython_tests.py
+++ b/src/sage/repl/ipython_tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
'''
Tests for the IPython integration
diff --git a/src/sage/repl/load.py b/src/sage/repl/load.py
index b0f4a269242..ea452873682 100644
--- a/src/sage/repl/load.py
+++ b/src/sage/repl/load.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Load Python, Sage, Cython, Fortran and Magma files in Sage
"""
diff --git a/src/sage/repl/preparse.py b/src/sage/repl/preparse.py
index 9eadcca6fb7..e72d6d013fe 100644
--- a/src/sage/repl/preparse.py
+++ b/src/sage/repl/preparse.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
The Sage Preparser
diff --git a/src/sage/repl/prompts.py b/src/sage/repl/prompts.py
index 4bc2cae68e6..5b1c66bb6f2 100644
--- a/src/sage/repl/prompts.py
+++ b/src/sage/repl/prompts.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Sage Commandline Prompts
"""
diff --git a/src/sage/repl/rich_output/__init__.py b/src/sage/repl/rich_output/__init__.py
index 49e8325ba21..558cd47d827 100644
--- a/src/sage/repl/rich_output/__init__.py
+++ b/src/sage/repl/rich_output/__init__.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
from .display_manager import get_display_manager
from .pretty_print import pretty_print
diff --git a/src/sage/repl/rich_output/backend_base.py b/src/sage/repl/rich_output/backend_base.py
index 40019397733..98da01836cc 100644
--- a/src/sage/repl/rich_output/backend_base.py
+++ b/src/sage/repl/rich_output/backend_base.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Base Class for Backends
diff --git a/src/sage/repl/rich_output/backend_doctest.py b/src/sage/repl/rich_output/backend_doctest.py
index 69905f7b067..430579f3f19 100644
--- a/src/sage/repl/rich_output/backend_doctest.py
+++ b/src/sage/repl/rich_output/backend_doctest.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
The backend used for doctests
diff --git a/src/sage/repl/rich_output/backend_emacs.py b/src/sage/repl/rich_output/backend_emacs.py
index 112650270dd..52e098720c4 100644
--- a/src/sage/repl/rich_output/backend_emacs.py
+++ b/src/sage/repl/rich_output/backend_emacs.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Emacs sage-mode Backend for the Sage Rich Output System
diff --git a/src/sage/repl/rich_output/backend_ipython.py b/src/sage/repl/rich_output/backend_ipython.py
index 7f39e37bf8f..1fe536762d1 100644
--- a/src/sage/repl/rich_output/backend_ipython.py
+++ b/src/sage/repl/rich_output/backend_ipython.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
IPython Backend for the Sage Rich Output System
diff --git a/src/sage/repl/rich_output/buffer.py b/src/sage/repl/rich_output/buffer.py
index 10b861e846e..19681fd1dc9 100644
--- a/src/sage/repl/rich_output/buffer.py
+++ b/src/sage/repl/rich_output/buffer.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Output Buffer
diff --git a/src/sage/repl/rich_output/display_manager.py b/src/sage/repl/rich_output/display_manager.py
index cfece92a810..1a3bb46ee1d 100644
--- a/src/sage/repl/rich_output/display_manager.py
+++ b/src/sage/repl/rich_output/display_manager.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Display Manager
diff --git a/src/sage/repl/rich_output/output_basic.py b/src/sage/repl/rich_output/output_basic.py
index 03f267896e6..ea538ca5c96 100644
--- a/src/sage/repl/rich_output/output_basic.py
+++ b/src/sage/repl/rich_output/output_basic.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Basic Output Types
diff --git a/src/sage/repl/rich_output/output_browser.py b/src/sage/repl/rich_output/output_browser.py
index 3d7cda599a1..00072c96030 100644
--- a/src/sage/repl/rich_output/output_browser.py
+++ b/src/sage/repl/rich_output/output_browser.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Rich Output for the Browser
"""
diff --git a/src/sage/repl/rich_output/output_catalog.py b/src/sage/repl/rich_output/output_catalog.py
index 748941c11fc..542182eee69 100644
--- a/src/sage/repl/rich_output/output_catalog.py
+++ b/src/sage/repl/rich_output/output_catalog.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Catalog of all available output container types.
diff --git a/src/sage/repl/rich_output/output_graphics.py b/src/sage/repl/rich_output/output_graphics.py
index 010ffcb60c8..d8c29c553a7 100644
--- a/src/sage/repl/rich_output/output_graphics.py
+++ b/src/sage/repl/rich_output/output_graphics.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Graphics Output Types
diff --git a/src/sage/repl/rich_output/output_graphics3d.py b/src/sage/repl/rich_output/output_graphics3d.py
index 46ff6d67ad1..3cf42fafb4a 100644
--- a/src/sage/repl/rich_output/output_graphics3d.py
+++ b/src/sage/repl/rich_output/output_graphics3d.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Three-Dimensional Graphics Output Types
diff --git a/src/sage/repl/rich_output/output_video.py b/src/sage/repl/rich_output/output_video.py
index 3a0d718aaab..5171ac058ae 100644
--- a/src/sage/repl/rich_output/output_video.py
+++ b/src/sage/repl/rich_output/output_video.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Video Output Types
diff --git a/src/sage/repl/rich_output/preferences.py b/src/sage/repl/rich_output/preferences.py
index f26962dc29b..ca32aa1ea81 100644
--- a/src/sage/repl/rich_output/preferences.py
+++ b/src/sage/repl/rich_output/preferences.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Display Preferences
diff --git a/src/sage/repl/rich_output/pretty_print.py b/src/sage/repl/rich_output/pretty_print.py
index 65d72068588..00b0c75465d 100644
--- a/src/sage/repl/rich_output/pretty_print.py
+++ b/src/sage/repl/rich_output/pretty_print.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
The ``pretty_print`` command
diff --git a/src/sage/repl/rich_output/test_backend.py b/src/sage/repl/rich_output/test_backend.py
index f0750addb39..a08d75624e1 100644
--- a/src/sage/repl/rich_output/test_backend.py
+++ b/src/sage/repl/rich_output/test_backend.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
Test Backend
diff --git a/src/sage/repl/user_globals.py b/src/sage/repl/user_globals.py
index 75686da1a55..d39b1dd9aad 100644
--- a/src/sage/repl/user_globals.py
+++ b/src/sage/repl/user_globals.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.modules
r"""
User-interface globals
diff --git a/src/sage/rings/abc.pxd b/src/sage/rings/abc.pxd
index a2d2e3f0ce4..991773f0359 100644
--- a/src/sage/rings/abc.pxd
+++ b/src/sage/rings/abc.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.ring cimport CommutativeRing, Field
cdef class RealField(Field):
diff --git a/src/sage/rings/abc.pyx b/src/sage/rings/abc.pyx
index e8078f97743..cfbb74465a2 100644
--- a/src/sage/rings/abc.pyx
+++ b/src/sage/rings/abc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Abstract base classes for rings
"""
diff --git a/src/sage/rings/algebraic_closure_finite_field.py b/src/sage/rings/algebraic_closure_finite_field.py
index 9e97df6517d..7920e04cba7 100644
--- a/src/sage/rings/algebraic_closure_finite_field.py
+++ b/src/sage/rings/algebraic_closure_finite_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
r"""
Algebraic closures of finite fields
diff --git a/src/sage/rings/all.py b/src/sage/rings/all.py
index e3c7167fe12..965f83d02f6 100644
--- a/src/sage/rings/all.py
+++ b/src/sage/rings/all.py
@@ -14,35 +14,22 @@
from sage.rings.all__sagemath_categories import *
-# Ring base classes
-from sage.rings.ring import (Ring, Field, CommutativeRing, IntegralDomain,
- PrincipalIdealDomain)
-
-lazy_import("sage.rings.ring", "DedekindDomain")
-
-# Ring element base classes
-from sage.structure.element import (CommutativeAlgebraElement,
- RingElement, CommutativeRingElement, IntegralDomainElement,
- DedekindDomainElement, PrincipalIdealDomainElement,
- EuclideanDomainElement, FieldElement)
-
-# Ideals
-from sage.rings.ideal import Ideal
-ideal = Ideal
+# Following will go to all__sagemath_categories.py in #36566
# Quotient
from sage.rings.quotient_ring import QuotientRing
# Infinities
from sage.rings.infinity import infinity, Infinity, InfinityRing, unsigned_infinity, UnsignedInfinityRing
+oo = infinity
# Rational integers.
from sage.rings.integer_ring import IntegerRing, ZZ, crt_basis
from sage.rings.integer import Integer
# Rational numbers
-from sage.rings.rational_field import RationalField, QQ
from sage.rings.rational import Rational
+from sage.rings.rational_field import RationalField, QQ
Rationals = RationalField
# Integers modulo n.
@@ -50,70 +37,41 @@
from sage.rings.finite_rings.integer_mod import IntegerMod, Mod, mod
Integers = IntegerModRing
+# up to here (#36566)
+
# Finite fields
from sage.rings.finite_rings.all import *
-# Number field
-from sage.rings.number_field.all import *
+from sage.rings.all__sagemath_combinat import *
+from sage.rings.all__sagemath_flint import *
+from sage.rings.all__sagemath_gap import *
+from sage.rings.all__sagemath_modules import *
+
+try:
+ from sage.rings.all__sagemath_symbolics import *
+except ImportError:
+ pass
# Function field
from sage.rings.function_field.all import *
-# Finite residue fields
-from sage.rings.finite_rings.residue_field import ResidueField
-
-# p-adic field
-from sage.rings.padics.all import *
-from sage.rings.padics.padic_printing import _printer_defaults as padic_printing
-
-# valuations
-from sage.rings.valuation.all import *
+# Following will go to all__sagemath_categories.py in #36566
# Semirings
from sage.rings.semirings.all import *
-# Real numbers
-from sage.rings.real_mpfr import (RealField, RR,
- create_RealNumber as RealNumber) # this is used by the preparser to wrap real literals -- very important.
-Reals = RealField
-
+# Double precision floating point numbers
from sage.rings.real_double import RealDoubleField, RDF, RealDoubleElement
+# Lazy reals
from sage.rings.real_lazy import RealLazyField, RLF, ComplexLazyField, CLF
-from sage.rings.real_arb import RealBallField, RBF
+# up to here (#36566)
# Polynomial Rings and Polynomial Quotient Rings
from sage.rings.polynomial.all import *
-
-# Algebraic numbers
-from sage.rings.qqbar import (AlgebraicRealField, AA,
- AlgebraicReal,
- AlgebraicField, QQbar,
- AlgebraicNumber,
- number_field_elements_from_algebraics)
-from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField, E
-
-# Intervals
-from sage.rings.real_mpfi import (RealIntervalField,
- RIF,
- RealInterval)
-
-# Complex numbers
-from sage.rings.complex_mpfr import ComplexField
-from sage.rings.complex_mpfr import create_ComplexNumber as ComplexNumber
-Complexes = ComplexField
-from sage.rings.complex_interval_field import ComplexIntervalField
-from sage.rings.complex_interval import (create_ComplexIntervalFieldElement as ComplexIntervalFieldElement)
-
-from sage.rings.complex_double import ComplexDoubleField, ComplexDoubleElement, CDF
-
-from sage.rings.complex_mpc import MPComplexField
-
-from sage.rings.complex_arb import ComplexBallField, CBF
-
-lazy_import("sage.rings.imaginary_unit", "I")
+# Following will go to all__sagemath_categories.py in #36566
# Power series rings
from sage.rings.power_series_ring import PowerSeriesRing
@@ -121,19 +79,9 @@
# Laurent series ring in one variable
from sage.rings.laurent_series_ring import LaurentSeriesRing
-# Lazy Laurent series ring
-lazy_import('sage.rings.lazy_series_ring', ['LazyLaurentSeriesRing', 'LazyPowerSeriesRing',
- 'LazySymmetricFunctions', 'LazyDirichletSeriesRing'])
-
-# Tate algebras
-from sage.rings.tate_algebra import TateAlgebra
-
# Puiseux series ring
from sage.rings.puiseux_series_ring import PuiseuxSeriesRing
-# Pseudo-ring of PARI objects.
-from sage.rings.pari_ring import PariRing, Pari
-
# Big-oh notation
from sage.rings.big_oh import O
@@ -144,27 +92,27 @@
# Localization
from sage.rings.localization import Localization
+# up to here (#36566)
+
# c-finite sequences
from sage.rings.cfinite_sequence import CFiniteSequence, CFiniteSequences
-from sage.rings.bernoulli_mod_p import bernoulli_mod_p, bernoulli_mod_p_single
-
-from sage.rings.monomials import monomials
-
-from sage.rings.cc import CC
-from sage.rings.cif import CIF
-
-# invariant theory
-from sage.rings.invariants.all import *
-
from sage.rings.fast_arith import prime_range
+# Following will go to all__sagemath_categories.py in #36566
+
# continued fractions
from sage.rings.continued_fraction import (continued_fraction,
continued_fraction_list)
+# up to here (#36566)
+
# asymptotic ring
-from sage.rings.asymptotic.all import *
+# from sage.rings.asymptotic.all import *
+lazy_import('sage.rings.asymptotic.asymptotic_ring', 'AsymptoticRing')
+lazy_import('sage.rings.asymptotic.asymptotic_expansion_generators',
+ 'asymptotic_expansions')
# Register classes in numbers abc
from sage.rings import numbers_abc
+del lazy_import
diff --git a/src/sage/rings/all__sagemath_brial.py b/src/sage/rings/all__sagemath_brial.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/all__sagemath_categories.py b/src/sage/rings/all__sagemath_categories.py
index d03d1c6b483..99a78aac8df 100644
--- a/src/sage/rings/all__sagemath_categories.py
+++ b/src/sage/rings/all__sagemath_categories.py
@@ -1,6 +1,29 @@
+# sage_setup: distribution = sagemath-categories
+
+from sage.misc.lazy_import import lazy_import
+
# Ring base classes
-from sage.rings.ring import Ring
+from sage.rings.ring import (Ring, Field, CommutativeRing, IntegralDomain,
+ PrincipalIdealDomain)
+
+lazy_import("sage.rings.ring", "DedekindDomain")
+
+# Ring element base classes
+from sage.structure.element import (CommutativeAlgebraElement,
+ RingElement, CommutativeRingElement, IntegralDomainElement,
+ DedekindDomainElement, PrincipalIdealDomainElement,
+ EuclideanDomainElement, FieldElement)
+
# Ideals
from sage.rings.ideal import Ideal
-
ideal = Ideal
+
+# To be added in #36566:
+
+# from sage.rings.finite_rings.all__sagemath_categories import *
+# from sage.rings.function_field.all__sagemath_categories import *
+# from sage.rings.number_field.all__sagemath_categories import *
+# from sage.rings.padics.all__sagemath_categories import *
+# from sage.rings.polynomial.all__sagemath_categories import *
+
+del lazy_import
diff --git a/src/sage/rings/all__sagemath_combinat.py b/src/sage/rings/all__sagemath_combinat.py
new file mode 100644
index 00000000000..3e054b1da0b
--- /dev/null
+++ b/src/sage/rings/all__sagemath_combinat.py
@@ -0,0 +1,9 @@
+from sage.rings.all__sagemath_categories import *
+
+from sage.misc.lazy_import import lazy_import
+
+# Lazy Laurent series ring
+lazy_import('sage.rings.lazy_series_ring', ['LazyLaurentSeriesRing', 'LazyPowerSeriesRing',
+ 'LazySymmetricFunctions', 'LazyDirichletSeriesRing'])
+
+del lazy_import
diff --git a/src/sage/rings/all__sagemath_flint.py b/src/sage/rings/all__sagemath_flint.py
new file mode 100644
index 00000000000..098426b0e9b
--- /dev/null
+++ b/src/sage/rings/all__sagemath_flint.py
@@ -0,0 +1,36 @@
+
+from sage.rings.all__sagemath_ntl import *
+
+# Real numbers
+from sage.rings.real_arb import RealBallField, RBF
+
+from sage.rings.complex_arb import ComplexBallField, CBF
+
+# Number field
+from sage.rings.number_field.all import *
+
+from sage.rings.monomials import monomials
+
+# Algebraic numbers
+from sage.rings.qqbar import (AlgebraicRealField, AA,
+ AlgebraicReal,
+ AlgebraicField, QQbar,
+ AlgebraicNumber,
+ number_field_elements_from_algebraics)
+
+# Intervals
+from sage.rings.real_mpfi import (RealIntervalField,
+ RIF,
+ RealInterval)
+
+# Complex numbers
+from sage.rings.complex_interval_field import ComplexIntervalField
+from sage.rings.complex_interval import (
+ create_ComplexIntervalFieldElement as ComplexIntervalFieldElement)
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import("sage.rings.imaginary_unit", "I")
+
+from sage.rings.cif import CIF
+del lazy_import
diff --git a/src/sage/rings/all__sagemath_gap.py b/src/sage/rings/all__sagemath_gap.py
new file mode 100644
index 00000000000..82933d8cb54
--- /dev/null
+++ b/src/sage/rings/all__sagemath_gap.py
@@ -0,0 +1,6 @@
+
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.rings.universal_cyclotomic_field', ['UniversalCyclotomicField', 'E'])
+
+del lazy_import
diff --git a/src/sage/rings/all__sagemath_linbox.py b/src/sage/rings/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/all__sagemath_modules.py b/src/sage/rings/all__sagemath_modules.py
new file mode 100644
index 00000000000..c82909b5984
--- /dev/null
+++ b/src/sage/rings/all__sagemath_modules.py
@@ -0,0 +1,24 @@
+from sage.rings.all__sagemath_categories import *
+
+from sage.rings.function_field.all__sagemath_modules import *
+from sage.rings.polynomial.all__sagemath_modules import *
+
+# Real numbers
+from sage.rings.real_mpfr import (RealField, RR,
+ create_RealNumber as RealNumber) # this is used by the preparser to wrap real literals -- very important.
+Reals = RealField
+
+# Complex numbers
+
+from sage.rings.complex_mpfr import ComplexField
+from sage.rings.complex_mpfr import create_ComplexNumber as ComplexNumber
+Complexes = ComplexField
+
+from sage.rings.complex_double import ComplexDoubleField, ComplexDoubleElement, CDF
+
+from sage.rings.cc import CC
+
+from sage.rings.complex_mpc import MPComplexField
+
+# invariant theory
+from sage.rings.invariants.all import *
diff --git a/src/sage/rings/all__sagemath_ntl.py b/src/sage/rings/all__sagemath_ntl.py
new file mode 100644
index 00000000000..c64b779350c
--- /dev/null
+++ b/src/sage/rings/all__sagemath_ntl.py
@@ -0,0 +1,6 @@
+
+from sage.rings.all__sagemath_pari import *
+
+from sage.rings.padics.all__sagemath_ntl import *
+
+from sage.rings.bernoulli_mod_p import bernoulli_mod_p, bernoulli_mod_p_single
diff --git a/src/sage/rings/all__sagemath_objects.py b/src/sage/rings/all__sagemath_objects.py
index 38e44245ad3..40da49fdd73 100644
--- a/src/sage/rings/all__sagemath_objects.py
+++ b/src/sage/rings/all__sagemath_objects.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
# The presence of this file ensures that sage_setup for sagemath-objects
# considers this directory as a namespace package
diff --git a/src/sage/rings/all__sagemath_pari.py b/src/sage/rings/all__sagemath_pari.py
new file mode 100644
index 00000000000..73f3230790e
--- /dev/null
+++ b/src/sage/rings/all__sagemath_pari.py
@@ -0,0 +1,12 @@
+
+# Pseudo-ring of PARI objects.
+from sage.rings.pari_ring import PariRing, Pari
+
+# p-adic field
+from sage.rings.padics.all__sagemath_pari import *
+
+# valuations
+from sage.rings.valuation.all import *
+
+# Tate algebras
+from sage.rings.tate_algebra import TateAlgebra
diff --git a/src/sage/rings/all__sagemath_singular.py b/src/sage/rings/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/all__sagemath_symbolics.py b/src/sage/rings/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..be07e478a77
--- /dev/null
+++ b/src/sage/rings/all__sagemath_symbolics.py
@@ -0,0 +1 @@
+from sage.rings.all__sagemath_modules import *
diff --git a/src/sage/rings/asymptotic/all.py b/src/sage/rings/asymptotic/all.py
index 9353f267624..27e4d289212 100644
--- a/src/sage/rings/asymptotic/all.py
+++ b/src/sage/rings/asymptotic/all.py
@@ -1,3 +1,5 @@
from sage.misc.lazy_import import lazy_import
lazy_import('sage.rings.asymptotic.asymptotic_ring', 'AsymptoticRing')
-lazy_import('sage.rings.asymptotic.asymptotic_expansion_generators', 'asymptotic_expansions')
+lazy_import('sage.rings.asymptotic.asymptotic_expansion_generators',
+ 'asymptotic_expansions')
+del lazy_import
diff --git a/src/sage/rings/bernmm.pyx b/src/sage/rings/bernmm.pyx
index 8c6539150a7..d46c53e65f5 100644
--- a/src/sage/rings/bernmm.pyx
+++ b/src/sage/rings/bernmm.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: sources = sage/rings/bernmm/bern_modp.cpp sage/rings/bernmm/bern_modp_util.cpp sage/rings/bernmm/bern_rat.cpp
# distutils: libraries = NTL_LIBRARIES pthread gmp
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/rings/bernoulli_mod_p.pyx b/src/sage/rings/bernoulli_mod_p.pyx
index ee73d6ad209..a9dee686d40 100644
--- a/src/sage/rings/bernoulli_mod_p.pyx
+++ b/src/sage/rings/bernoulli_mod_p.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/big_oh.py b/src/sage/rings/big_oh.py
index 917c81e0a3d..eafb46c83aa 100644
--- a/src/sage/rings/big_oh.py
+++ b/src/sage/rings/big_oh.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Big O for various types (power series, p-adics, etc.)
diff --git a/src/sage/rings/cc.py b/src/sage/rings/cc.py
index 94e3093488b..93ec91d77a2 100644
--- a/src/sage/rings/cc.py
+++ b/src/sage/rings/cc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.complex_mpfr import ComplexField
CC = ComplexField()
diff --git a/src/sage/rings/cif.py b/src/sage/rings/cif.py
index 900c635e87b..98c15bd3d45 100644
--- a/src/sage/rings/cif.py
+++ b/src/sage/rings/cif.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.rings.complex_interval_field import ComplexIntervalField
CIF = ComplexIntervalField()
diff --git a/src/sage/rings/complex_arb.pxd b/src/sage/rings/complex_arb.pxd
index 4cd016d0798..32339dd18a2 100644
--- a/src/sage/rings/complex_arb.pxd
+++ b/src/sage/rings/complex_arb.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
from sage.libs.flint.acb cimport acb_t
from sage.rings.complex_interval cimport ComplexIntervalFieldElement
from sage.rings.real_arb cimport RealBall
diff --git a/src/sage/rings/complex_arb.pyx b/src/sage/rings/complex_arb.pyx
index cb4ee0ff6b8..5ad31f6a4f0 100644
--- a/src/sage/rings/complex_arb.pyx
+++ b/src/sage/rings/complex_arb.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8
+# sage_setup: distribution = sagemath-flint
r"""
Arbitrary precision complex balls
diff --git a/src/sage/rings/complex_conversion.pxd b/src/sage/rings/complex_conversion.pxd
index 2053005e340..da870969874 100644
--- a/src/sage/rings/complex_conversion.pxd
+++ b/src/sage/rings/complex_conversion.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport Element
from sage.categories.map cimport Map
diff --git a/src/sage/rings/complex_conversion.pyx b/src/sage/rings/complex_conversion.pyx
index f601b4d5420..31afe86b5cd 100644
--- a/src/sage/rings/complex_conversion.pyx
+++ b/src/sage/rings/complex_conversion.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.complex_double cimport ComplexDoubleElement
from sage.rings.complex_mpfr cimport ComplexNumber
from sage.libs.mpfr cimport mpfr_get_d, MPFR_RNDN
diff --git a/src/sage/rings/complex_double.pxd b/src/sage/rings/complex_double.pxd
index 7352520c769..4d43ae2b58f 100644
--- a/src/sage/rings/complex_double.pxd
+++ b/src/sage/rings/complex_double.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.gsl.types cimport gsl_complex
cimport sage.structure.element
diff --git a/src/sage/rings/complex_double.pyx b/src/sage/rings/complex_double.pyx
index 1dfa7dbd505..68cc6664478 100644
--- a/src/sage/rings/complex_double.pyx
+++ b/src/sage/rings/complex_double.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# distutils: extra_compile_args = -D_XPG6
# distutils: libraries = m
r"""
diff --git a/src/sage/rings/complex_interval.pxd b/src/sage/rings/complex_interval.pxd
index f5c59de4d7a..2620dc480f5 100644
--- a/src/sage/rings/complex_interval.pxd
+++ b/src/sage/rings/complex_interval.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.mpfr.types cimport mpfr_prec_t
from sage.libs.mpfi.types cimport mpfi_t
diff --git a/src/sage/rings/complex_interval.pyx b/src/sage/rings/complex_interval.pyx
index d272a8e81db..66a28104de4 100644
--- a/src/sage/rings/complex_interval.pyx
+++ b/src/sage/rings/complex_interval.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Arbitrary precision complex intervals
diff --git a/src/sage/rings/complex_interval_field.py b/src/sage/rings/complex_interval_field.py
index 372d84abca8..fccb7d7b1c1 100644
--- a/src/sage/rings/complex_interval_field.py
+++ b/src/sage/rings/complex_interval_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Arbitrary precision complex intervals (parent class)
diff --git a/src/sage/rings/complex_mpc.pxd b/src/sage/rings/complex_mpc.pxd
index 1c65618578b..37c0ee9939a 100644
--- a/src/sage/rings/complex_mpc.pxd
+++ b/src/sage/rings/complex_mpc.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.mpc.types cimport mpc_t, mpc_rnd_t
cimport sage.structure.element
diff --git a/src/sage/rings/complex_mpc.pyx b/src/sage/rings/complex_mpc.pyx
index 79501000200..ba8b8272daf 100644
--- a/src/sage/rings/complex_mpc.pyx
+++ b/src/sage/rings/complex_mpc.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Arbitrary precision floating point complex numbers using GNU MPC
diff --git a/src/sage/rings/complex_mpfr.pxd b/src/sage/rings/complex_mpfr.pxd
index 385feec8c37..a676d407d40 100644
--- a/src/sage/rings/complex_mpfr.pxd
+++ b/src/sage/rings/complex_mpfr.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.mpfr.types cimport mpfr_t, mpfr_prec_t
cimport sage.structure.element
diff --git a/src/sage/rings/complex_mpfr.pyx b/src/sage/rings/complex_mpfr.pyx
index 616a25241b0..3bba71be085 100644
--- a/src/sage/rings/complex_mpfr.pyx
+++ b/src/sage/rings/complex_mpfr.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Arbitrary precision floating point complex numbers using GNU MPFR
diff --git a/src/sage/rings/continued_fraction.py b/src/sage/rings/continued_fraction.py
index 13138a999ac..5c92420d7d8 100644
--- a/src/sage/rings/continued_fraction.py
+++ b/src/sage/rings/continued_fraction.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Continued fractions
diff --git a/src/sage/rings/continued_fraction_gosper.py b/src/sage/rings/continued_fraction_gosper.py
index 5c713ab41c7..c4ea81b0f8e 100644
--- a/src/sage/rings/continued_fraction_gosper.py
+++ b/src/sage/rings/continued_fraction_gosper.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
Gosper iterator for homographic transformations
diff --git a/src/sage/rings/convert/all.py b/src/sage/rings/convert/all.py
index e69de29bb2d..d31bae41036 100644
--- a/src/sage/rings/convert/all.py
+++ b/src/sage/rings/convert/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-flint
diff --git a/src/sage/rings/convert/mpfi.pxd b/src/sage/rings/convert/mpfi.pxd
index ea43d9383f2..4c29da9a896 100644
--- a/src/sage/rings/convert/mpfi.pxd
+++ b/src/sage/rings/convert/mpfi.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.mpfi.types cimport mpfi_ptr
cdef int mpfi_set_sage(mpfi_ptr re, mpfi_ptr im, x, field, int base) except -1
diff --git a/src/sage/rings/convert/mpfi.pyx b/src/sage/rings/convert/mpfi.pyx
index 0d42927740a..e7e54e54d58 100644
--- a/src/sage/rings/convert/mpfi.pyx
+++ b/src/sage/rings/convert/mpfi.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Convert Sage/Python objects to real/complex intervals
"""
diff --git a/src/sage/rings/derivation.py b/src/sage/rings/derivation.py
index 2702f497d66..70da2e3f16f 100644
--- a/src/sage/rings/derivation.py
+++ b/src/sage/rings/derivation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Derivations
diff --git a/src/sage/rings/factorint.pyx b/src/sage/rings/factorint.pyx
index 3571c74bd8d..c1a49b5f3d7 100644
--- a/src/sage/rings/factorint.pyx
+++ b/src/sage/rings/factorint.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-*
+# sage_setup: distribution = sagemath-categories
r"""
Integer factorization functions
diff --git a/src/sage/rings/factorint_flint.pyx b/src/sage/rings/factorint_flint.pyx
index cc50af04a1c..23f110abeec 100644
--- a/src/sage/rings/factorint_flint.pyx
+++ b/src/sage/rings/factorint_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.libs.flint
r"""
Integer factorization using FLINT
diff --git a/src/sage/rings/factorint_pari.pyx b/src/sage/rings/factorint_pari.pyx
index 8dae96b047f..683813aefb6 100644
--- a/src/sage/rings/factorint_pari.pyx
+++ b/src/sage/rings/factorint_pari.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.pari
r"""
Integer factorization using PARI
diff --git a/src/sage/rings/fast_arith.pxd b/src/sage/rings/fast_arith.pxd
index 7a99e658b91..52be135488e 100644
--- a/src/sage/rings/fast_arith.pxd
+++ b/src/sage/rings/fast_arith.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-categories
+
cpdef prime_range(start, stop=*, algorithm=*, bint py_ints=*)
cdef class arith_int:
diff --git a/src/sage/rings/fast_arith.pyx b/src/sage/rings/fast_arith.pyx
index 4796122c1b6..817aadf7e54 100644
--- a/src/sage/rings/fast_arith.pyx
+++ b/src/sage/rings/fast_arith.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.pari
"""
Basic arithmetic with C integers
diff --git a/src/sage/rings/finite_rings/all.py b/src/sage/rings/finite_rings/all.py
index 5d3d3f21c73..a3dbfe5764f 100644
--- a/src/sage/rings/finite_rings/all.py
+++ b/src/sage/rings/finite_rings/all.py
@@ -2,7 +2,7 @@
Finite Fields
"""
-#*****************************************************************************
+# *****************************************************************************
# Copyright (C) 2010 David Roe
# William Stein
#
@@ -15,9 +15,7 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-from .finite_field_constructor import FiniteField
-from .conway_polynomials import conway_polynomial, exists_conway_polynomial
-GF = FiniteField
+from sage.rings.finite_rings.all__sagemath_categories import *
diff --git a/src/sage/rings/finite_rings/all__sagemath_categories.py b/src/sage/rings/finite_rings/all__sagemath_categories.py
new file mode 100644
index 00000000000..a2330a07fe4
--- /dev/null
+++ b/src/sage/rings/finite_rings/all__sagemath_categories.py
@@ -0,0 +1,8 @@
+from sage.rings.finite_rings.finite_field_constructor import FiniteField
+
+GF = FiniteField
+
+from sage.rings.finite_rings.conway_polynomials import conway_polynomial, exists_conway_polynomial
+
+# Finite residue fields
+from sage.rings.finite_rings.residue_field import ResidueField
diff --git a/src/sage/rings/finite_rings/all__sagemath_linbox.py b/src/sage/rings/finite_rings/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/finite_rings/all__sagemath_modules.py b/src/sage/rings/finite_rings/all__sagemath_modules.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/finite_rings/all__sagemath_ntl.py b/src/sage/rings/finite_rings/all__sagemath_ntl.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/finite_rings/all__sagemath_pari.py b/src/sage/rings/finite_rings/all__sagemath_pari.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/finite_rings/conway_polynomials.py b/src/sage/rings/finite_rings/conway_polynomials.py
index 7d6e558f030..cb12034851b 100644
--- a/src/sage/rings/finite_rings/conway_polynomials.py
+++ b/src/sage/rings/finite_rings/conway_polynomials.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Routines for Conway and pseudo-Conway polynomials
diff --git a/src/sage/rings/finite_rings/element_base.pxd b/src/sage/rings/finite_rings/element_base.pxd
index c214e4745a9..55269abe48d 100644
--- a/src/sage/rings/finite_rings/element_base.pxd
+++ b/src/sage/rings/finite_rings/element_base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport CommutativeRingElement
from sage.structure.sage_object cimport SageObject
diff --git a/src/sage/rings/finite_rings/element_base.pyx b/src/sage/rings/finite_rings/element_base.pyx
index f6a450edfa2..2011d066c8b 100755
--- a/src/sage/rings/finite_rings/element_base.pyx
+++ b/src/sage/rings/finite_rings/element_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
"""
Base class for finite field elements
diff --git a/src/sage/rings/finite_rings/element_givaro.pxd b/src/sage/rings/finite_rings/element_givaro.pxd
index 4b1e0430a1c..12b4f9ada34 100644
--- a/src/sage/rings/finite_rings/element_givaro.pxd
+++ b/src/sage/rings/finite_rings/element_givaro.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: extra_compile_args = GIVARO_CFLAGS -std=c++11
# distutils: include_dirs = GIVARO_INCDIR
diff --git a/src/sage/rings/finite_rings/element_givaro.pyx b/src/sage/rings/finite_rings/element_givaro.pyx
index c9b9e323181..6f60aa089dc 100644
--- a/src/sage/rings/finite_rings/element_givaro.pyx
+++ b/src/sage/rings/finite_rings/element_givaro.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = givaro gmp m
# distutils: language = c++
r"""
diff --git a/src/sage/rings/finite_rings/element_ntl_gf2e.pxd b/src/sage/rings/finite_rings/element_ntl_gf2e.pxd
index e98744413b5..e2b1f2cdb1d 100644
--- a/src/sage/rings/finite_rings/element_ntl_gf2e.pxd
+++ b/src/sage/rings/finite_rings/element_ntl_gf2e.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport GF2E_c, GF2EContext_c
from sage.rings.finite_rings.finite_field_base cimport FiniteField
from sage.rings.finite_rings.element_base cimport FinitePolyExtElement, Cache_base
diff --git a/src/sage/rings/finite_rings/element_ntl_gf2e.pyx b/src/sage/rings/finite_rings/element_ntl_gf2e.pyx
index 399bb76815b..3b56b679e6c 100644
--- a/src/sage/rings/finite_rings/element_ntl_gf2e.pyx
+++ b/src/sage/rings/finite_rings/element_ntl_gf2e.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/finite_rings/element_pari_ffelt.pxd b/src/sage/rings/finite_rings/element_pari_ffelt.pxd
index 06aabcaa6d5..9db2a6401e0 100644
--- a/src/sage/rings/finite_rings/element_pari_ffelt.pxd
+++ b/src/sage/rings/finite_rings/element_pari_ffelt.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.types cimport GEN
from sage.rings.finite_rings.element_base cimport FinitePolyExtElement
diff --git a/src/sage/rings/finite_rings/element_pari_ffelt.pyx b/src/sage/rings/finite_rings/element_pari_ffelt.pyx
index 989b0e20b9e..a7013a7f5b4 100644
--- a/src/sage/rings/finite_rings/element_pari_ffelt.pyx
+++ b/src/sage/rings/finite_rings/element_pari_ffelt.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Finite field elements implemented via PARI's FFELT type
diff --git a/src/sage/rings/finite_rings/finite_field_base.pxd b/src/sage/rings/finite_rings/finite_field_base.pxd
index 776c1f40137..2b66bd916aa 100644
--- a/src/sage/rings/finite_rings/finite_field_base.pxd
+++ b/src/sage/rings/finite_rings/finite_field_base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.ring cimport Field
cdef class FiniteField(Field):
diff --git a/src/sage/rings/finite_rings/finite_field_base.pyx b/src/sage/rings/finite_rings/finite_field_base.pyx
index 2c49f3bc9ae..1e512d01cf6 100644
--- a/src/sage/rings/finite_rings/finite_field_base.pyx
+++ b/src/sage/rings/finite_rings/finite_field_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
"""
Base class for finite fields
diff --git a/src/sage/rings/finite_rings/finite_field_constructor.py b/src/sage/rings/finite_rings/finite_field_constructor.py
index 78acc0a8873..1191a37c6fb 100644
--- a/src/sage/rings/finite_rings/finite_field_constructor.py
+++ b/src/sage/rings/finite_rings/finite_field_constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
r"""
Finite fields
diff --git a/src/sage/rings/finite_rings/finite_field_givaro.py b/src/sage/rings/finite_rings/finite_field_givaro.py
index 9f6abdb40b4..096459ddd41 100644
--- a/src/sage/rings/finite_rings/finite_field_givaro.py
+++ b/src/sage/rings/finite_rings/finite_field_givaro.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
"""
Givaro finite fields
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 654f7a2b54b..758c1cedf4b 100644
--- a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py
+++ b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
"""
Finite fields of characteristic 2
"""
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 c60a7a563a7..9c6caca35ca 100644
--- a/src/sage/rings/finite_rings/finite_field_pari_ffelt.py
+++ b/src/sage/rings/finite_rings/finite_field_pari_ffelt.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Finite fields implemented via PARI's FFELT type
diff --git a/src/sage/rings/finite_rings/finite_field_prime_modn.py b/src/sage/rings/finite_rings/finite_field_prime_modn.py
index b51cf9fe7d5..c95a1413bc9 100644
--- a/src/sage/rings/finite_rings/finite_field_prime_modn.py
+++ b/src/sage/rings/finite_rings/finite_field_prime_modn.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Finite prime fields
diff --git a/src/sage/rings/finite_rings/galois_group.py b/src/sage/rings/finite_rings/galois_group.py
index f11b72bc681..e817e2bad44 100644
--- a/src/sage/rings/finite_rings/galois_group.py
+++ b/src/sage/rings/finite_rings/galois_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules sage.rings.finite_rings
r"""
Galois groups of Finite Fields
diff --git a/src/sage/rings/finite_rings/hom_finite_field.pxd b/src/sage/rings/finite_rings/hom_finite_field.pxd
index 199d655d6d6..e1f348b3db4 100644
--- a/src/sage/rings/finite_rings/hom_finite_field.pxd
+++ b/src/sage/rings/finite_rings/hom_finite_field.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.morphism cimport RingHomomorphism_im_gens, FrobeniusEndomorphism_generic
from sage.structure.element cimport Element
from sage.categories.map cimport Section
diff --git a/src/sage/rings/finite_rings/hom_finite_field.pyx b/src/sage/rings/finite_rings/hom_finite_field.pyx
index 8a83bf48766..46aac2d153e 100644
--- a/src/sage/rings/finite_rings/hom_finite_field.pyx
+++ b/src/sage/rings/finite_rings/hom_finite_field.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
"""
Finite field morphisms
diff --git a/src/sage/rings/finite_rings/hom_finite_field_givaro.pxd b/src/sage/rings/finite_rings/hom_finite_field_givaro.pxd
index dc401d526c0..f01918b0267 100644
--- a/src/sage/rings/finite_rings/hom_finite_field_givaro.pxd
+++ b/src/sage/rings/finite_rings/hom_finite_field_givaro.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from sage.rings.finite_rings.hom_finite_field cimport (SectionFiniteFieldHomomorphism_generic,
FiniteFieldHomomorphism_generic, FrobeniusEndomorphism_finite_field)
diff --git a/src/sage/rings/finite_rings/hom_finite_field_givaro.pyx b/src/sage/rings/finite_rings/hom_finite_field_givaro.pyx
index 0e67cb6f123..a110aaad137 100644
--- a/src/sage/rings/finite_rings/hom_finite_field_givaro.pyx
+++ b/src/sage/rings/finite_rings/hom_finite_field_givaro.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = givaro NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/finite_rings/hom_prime_finite_field.pxd b/src/sage/rings/finite_rings/hom_prime_finite_field.pxd
index b146b0c9169..af571b31f84 100644
--- a/src/sage/rings/finite_rings/hom_prime_finite_field.pxd
+++ b/src/sage/rings/finite_rings/hom_prime_finite_field.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.finite_rings.hom_finite_field cimport (SectionFiniteFieldHomomorphism_generic,
FiniteFieldHomomorphism_generic, FrobeniusEndomorphism_finite_field)
diff --git a/src/sage/rings/finite_rings/hom_prime_finite_field.pyx b/src/sage/rings/finite_rings/hom_prime_finite_field.pyx
index e45de1d83f9..7f1f88e2521 100644
--- a/src/sage/rings/finite_rings/hom_prime_finite_field.pyx
+++ b/src/sage/rings/finite_rings/hom_prime_finite_field.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Finite field morphisms for prime fields
diff --git a/src/sage/rings/finite_rings/homset.py b/src/sage/rings/finite_rings/homset.py
index ef72f35a1a5..d0441d2c795 100644
--- a/src/sage/rings/finite_rings/homset.py
+++ b/src/sage/rings/finite_rings/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.finite_rings
"""
Homset for finite fields
diff --git a/src/sage/rings/finite_rings/integer_mod.pxd b/src/sage/rings/finite_rings/integer_mod.pxd
index 34e72472a3e..80dd01e2072 100644
--- a/src/sage/rings/finite_rings/integer_mod.pxd
+++ b/src/sage/rings/finite_rings/integer_mod.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.libs.gmp.types cimport *
from sage.rings.finite_rings.stdint cimport *
from sage.rings.finite_rings.element_base cimport FiniteRingElement
diff --git a/src/sage/rings/finite_rings/integer_mod.pyx b/src/sage/rings/finite_rings/integer_mod.pyx
index 9a3f02b6ef0..da6f6102581 100644
--- a/src/sage/rings/finite_rings/integer_mod.pyx
+++ b/src/sage/rings/finite_rings/integer_mod.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Elements of `\ZZ/n\ZZ`
diff --git a/src/sage/rings/finite_rings/integer_mod_ring.py b/src/sage/rings/finite_rings/integer_mod_ring.py
index 177dd28460a..6b91f4ee58c 100644
--- a/src/sage/rings/finite_rings/integer_mod_ring.py
+++ b/src/sage/rings/finite_rings/integer_mod_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ring `\ZZ/n\ZZ` of integers modulo `n`
diff --git a/src/sage/rings/finite_rings/maps_finite_field.py b/src/sage/rings/finite_rings/maps_finite_field.py
index 0ae08a3d25d..55da94bbd5b 100644
--- a/src/sage/rings/finite_rings/maps_finite_field.py
+++ b/src/sage/rings/finite_rings/maps_finite_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.finite_rings
"""
Structure maps for finite fields
diff --git a/src/sage/rings/finite_rings/residue_field.pxd b/src/sage/rings/finite_rings/residue_field.pxd
index 0acb8da0a9a..dc221970bfe 100644
--- a/src/sage/rings/finite_rings/residue_field.pxd
+++ b/src/sage/rings/finite_rings/residue_field.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.morphism cimport RingHomomorphism
from sage.structure.element cimport Element
from sage.rings.finite_rings.integer_mod cimport NativeIntStruct
diff --git a/src/sage/rings/finite_rings/residue_field.pyx b/src/sage/rings/finite_rings/residue_field.pyx
index 83d78abb2aa..4f503a5195c 100644
--- a/src/sage/rings/finite_rings/residue_field.pyx
+++ b/src/sage/rings/finite_rings/residue_field.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Finite residue fields
diff --git a/src/sage/rings/finite_rings/residue_field_givaro.pyx b/src/sage/rings/finite_rings/residue_field_givaro.pyx
index a00bc5138fd..9d89dabb553 100644
--- a/src/sage/rings/finite_rings/residue_field_givaro.pyx
+++ b/src/sage/rings/finite_rings/residue_field_givaro.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
r"""
Finite residue fields (Givaro implementation)
"""
diff --git a/src/sage/rings/finite_rings/residue_field_ntl_gf2e.pyx b/src/sage/rings/finite_rings/residue_field_ntl_gf2e.pyx
index 5071bc87137..c396ad2e04b 100644
--- a/src/sage/rings/finite_rings/residue_field_ntl_gf2e.pyx
+++ b/src/sage/rings/finite_rings/residue_field_ntl_gf2e.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
r"""
Finite residue fields (NTL implementation)
"""
diff --git a/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx b/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx
index e9962c3ccde..1fcc1fad260 100644
--- a/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx
+++ b/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Finite residue fields (PARI implementation)
"""
diff --git a/src/sage/rings/finite_rings/stdint.pxd b/src/sage/rings/finite_rings/stdint.pxd
index b2b96a90c39..f82d61698aa 100644
--- a/src/sage/rings/finite_rings/stdint.pxd
+++ b/src/sage/rings/finite_rings/stdint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
C Integer Types Used in Finite Rings
"""
diff --git a/src/sage/rings/fraction_field.py b/src/sage/rings/fraction_field.py
index 32c9aed0afd..efabe4960bb 100644
--- a/src/sage/rings/fraction_field.py
+++ b/src/sage/rings/fraction_field.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Fraction Field of Integral Domains
diff --git a/src/sage/rings/fraction_field_FpT.pxd b/src/sage/rings/fraction_field_FpT.pxd
index 7d5d960a0ca..4718131e2f7 100644
--- a/src/sage/rings/fraction_field_FpT.pxd
+++ b/src/sage/rings/fraction_field_FpT.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.flint.types cimport nmod_poly_t
from sage.rings.morphism cimport RingHomomorphism
diff --git a/src/sage/rings/fraction_field_FpT.pyx b/src/sage/rings/fraction_field_FpT.pyx
index 14857c66732..6598a7fe256 100644
--- a/src/sage/rings/fraction_field_FpT.pyx
+++ b/src/sage/rings/fraction_field_FpT.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = gmp NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/fraction_field_element.pyx b/src/sage/rings/fraction_field_element.pyx
index ea323e2709f..84358475fc5 100644
--- a/src/sage/rings/fraction_field_element.pyx
+++ b/src/sage/rings/fraction_field_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Fraction Field Elements
diff --git a/src/sage/rings/function_field/all.py b/src/sage/rings/function_field/all.py
index 455fa9fe19e..e536f198d16 100644
--- a/src/sage/rings/function_field/all.py
+++ b/src/sage/rings/function_field/all.py
@@ -1,5 +1,13 @@
-from .constructor import FunctionField
+# sage_setup: distribution = sagemath-categories
+
+from sage.rings.function_field.all__sagemath_modules import *
+
+try:
+ from sage.rings.function_field.all__sagemath_symbolics import *
+except ImportError:
+ pass
from sage.misc.lazy_import import lazy_import
lazy_import("sage.rings.function_field.drinfeld_modules.drinfeld_module", "DrinfeldModule")
+del lazy_import
diff --git a/src/sage/rings/function_field/all__sagemath_categories.py b/src/sage/rings/function_field/all__sagemath_categories.py
new file mode 100644
index 00000000000..1cc1f1b8b2f
--- /dev/null
+++ b/src/sage/rings/function_field/all__sagemath_categories.py
@@ -0,0 +1 @@
+from sage.rings.function_field.constructor import FunctionField
diff --git a/src/sage/rings/function_field/all__sagemath_modules.py b/src/sage/rings/function_field/all__sagemath_modules.py
new file mode 100644
index 00000000000..f1bd876653e
--- /dev/null
+++ b/src/sage/rings/function_field/all__sagemath_modules.py
@@ -0,0 +1 @@
+from sage.rings.function_field.all__sagemath_categories import *
diff --git a/src/sage/rings/function_field/all__sagemath_pari.py b/src/sage/rings/function_field/all__sagemath_pari.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/function_field/all__sagemath_singular.py b/src/sage/rings/function_field/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/function_field/all__sagemath_symbolics.py b/src/sage/rings/function_field/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..7c97e664309
--- /dev/null
+++ b/src/sage/rings/function_field/all__sagemath_symbolics.py
@@ -0,0 +1 @@
+from sage.rings.function_field.all__sagemath_modules import *
diff --git a/src/sage/rings/function_field/constructor.py b/src/sage/rings/function_field/constructor.py
index 6dff57348a7..4136b72575e 100644
--- a/src/sage/rings/function_field/constructor.py
+++ b/src/sage/rings/function_field/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Factories to construct function fields
diff --git a/src/sage/rings/function_field/derivations.py b/src/sage/rings/function_field/derivations.py
index 9a6f0f613a9..d727fa60843 100644
--- a/src/sage/rings/function_field/derivations.py
+++ b/src/sage/rings/function_field/derivations.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Derivations of function fields
diff --git a/src/sage/rings/function_field/derivations_polymod.py b/src/sage/rings/function_field/derivations_polymod.py
index 2e0fe91a968..ffaefac3d00 100644
--- a/src/sage/rings/function_field/derivations_polymod.py
+++ b/src/sage/rings/function_field/derivations_polymod.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
r"""
Derivations of function fields: extension
"""
diff --git a/src/sage/rings/function_field/derivations_rational.py b/src/sage/rings/function_field/derivations_rational.py
index 777f16d3e08..d6358ee9582 100644
--- a/src/sage/rings/function_field/derivations_rational.py
+++ b/src/sage/rings/function_field/derivations_rational.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Derivations of function fields: rational
"""
diff --git a/src/sage/rings/function_field/differential.py b/src/sage/rings/function_field/differential.py
index 9b6fec9a72d..9e5ca35474c 100644
--- a/src/sage/rings/function_field/differential.py
+++ b/src/sage/rings/function_field/differential.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.modules
"""
Differentials of function fields
diff --git a/src/sage/rings/function_field/divisor.py b/src/sage/rings/function_field/divisor.py
index 79d952e2247..15da31b1804 100644
--- a/src/sage/rings/function_field/divisor.py
+++ b/src/sage/rings/function_field/divisor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - sage.rings.finite_rings (because all doctests use finite fields)
# sage.doctest: optional - sage.rings.function_field (because almost all doctests use function field extensions)
"""
diff --git a/src/sage/rings/function_field/element.pxd b/src/sage/rings/function_field/element.pxd
index 09ac9221e76..79f46a7ccc5 100644
--- a/src/sage/rings/function_field/element.pxd
+++ b/src/sage/rings/function_field/element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport FieldElement
diff --git a/src/sage/rings/function_field/element.pyx b/src/sage/rings/function_field/element.pyx
index 2765b805aba..568dc15e9b2 100644
--- a/src/sage/rings/function_field/element.pyx
+++ b/src/sage/rings/function_field/element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Elements of function fields
diff --git a/src/sage/rings/function_field/element_polymod.pyx b/src/sage/rings/function_field/element_polymod.pyx
index 7a75bfe978e..401f9a896e2 100644
--- a/src/sage/rings/function_field/element_polymod.pyx
+++ b/src/sage/rings/function_field/element_polymod.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# sage.doctest: optional - sage.rings.function_field
r"""
Elements of function fields: extension
diff --git a/src/sage/rings/function_field/element_rational.pyx b/src/sage/rings/function_field/element_rational.pyx
index 40d0d9734ef..8538c9b5659 100644
--- a/src/sage/rings/function_field/element_rational.pyx
+++ b/src/sage/rings/function_field/element_rational.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Elements of function fields: rational
"""
diff --git a/src/sage/rings/function_field/extensions.py b/src/sage/rings/function_field/extensions.py
index 9e42e5bff6b..24df382b34f 100644
--- a/src/sage/rings/function_field/extensions.py
+++ b/src/sage/rings/function_field/extensions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Special extensions of function fields
diff --git a/src/sage/rings/function_field/function_field.py b/src/sage/rings/function_field/function_field.py
index 16f83aaea84..0ef020bad9a 100644
--- a/src/sage/rings/function_field/function_field.py
+++ b/src/sage/rings/function_field/function_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Function Fields
diff --git a/src/sage/rings/function_field/function_field_polymod.py b/src/sage/rings/function_field/function_field_polymod.py
index 9c44f7cb908..0fa7d1f3476 100644
--- a/src/sage/rings/function_field/function_field_polymod.py
+++ b/src/sage/rings/function_field/function_field_polymod.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# sage.doctest: optional - sage.rings.function_field
r"""
Function Fields: extension
diff --git a/src/sage/rings/function_field/function_field_rational.py b/src/sage/rings/function_field/function_field_rational.py
index 2226c086b00..0fef4aa89f9 100644
--- a/src/sage/rings/function_field/function_field_rational.py
+++ b/src/sage/rings/function_field/function_field_rational.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Function Fields: rational
"""
diff --git a/src/sage/rings/function_field/hermite_form_polynomial.pyx b/src/sage/rings/function_field/hermite_form_polynomial.pyx
index 12881615315..6e5323c7518 100644
--- a/src/sage/rings/function_field/hermite_form_polynomial.pyx
+++ b/src/sage/rings/function_field/hermite_form_polynomial.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Hermite form computation for function fields
diff --git a/src/sage/rings/function_field/ideal.py b/src/sage/rings/function_field/ideal.py
index 22aa15299b1..76b568d349c 100644
--- a/src/sage/rings/function_field/ideal.py
+++ b/src/sage/rings/function_field/ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ideals of function fields
diff --git a/src/sage/rings/function_field/ideal_polymod.py b/src/sage/rings/function_field/ideal_polymod.py
index da45bc508cf..dbb2fc1f4ae 100644
--- a/src/sage/rings/function_field/ideal_polymod.py
+++ b/src/sage/rings/function_field/ideal_polymod.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# sage.doctest: optional - sage.rings.function_field
r"""
Ideals of function fields: extension
diff --git a/src/sage/rings/function_field/ideal_rational.py b/src/sage/rings/function_field/ideal_rational.py
index e6abe1ff605..d441d765a6c 100644
--- a/src/sage/rings/function_field/ideal_rational.py
+++ b/src/sage/rings/function_field/ideal_rational.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ideals of function fields: rational
"""
diff --git a/src/sage/rings/function_field/maps.py b/src/sage/rings/function_field/maps.py
index 85377f1c894..d533a42041f 100644
--- a/src/sage/rings/function_field/maps.py
+++ b/src/sage/rings/function_field/maps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Morphisms of function fields
diff --git a/src/sage/rings/function_field/order.py b/src/sage/rings/function_field/order.py
index 615cbab3690..df2a3400655 100644
--- a/src/sage/rings/function_field/order.py
+++ b/src/sage/rings/function_field/order.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Orders of function fields
diff --git a/src/sage/rings/function_field/order_basis.py b/src/sage/rings/function_field/order_basis.py
index eebaeab97d1..b0a2f51fc07 100644
--- a/src/sage/rings/function_field/order_basis.py
+++ b/src/sage/rings/function_field/order_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules (because __init__ constructs a vector space)
r"""
Orders of function fields: basis
diff --git a/src/sage/rings/function_field/order_polymod.py b/src/sage/rings/function_field/order_polymod.py
index d6831fa7248..41c5e44cf35 100644
--- a/src/sage/rings/function_field/order_polymod.py
+++ b/src/sage/rings/function_field/order_polymod.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# sage.doctest: optional - sage.rings.function_field
r"""
Orders of function fields: extension
diff --git a/src/sage/rings/function_field/order_rational.py b/src/sage/rings/function_field/order_rational.py
index 99da2af1ebd..e63db9c9015 100644
--- a/src/sage/rings/function_field/order_rational.py
+++ b/src/sage/rings/function_field/order_rational.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Orders of function fields: rational
"""
diff --git a/src/sage/rings/function_field/place.py b/src/sage/rings/function_field/place.py
index dbc3ab0e767..73a8d145ceb 100644
--- a/src/sage/rings/function_field/place.py
+++ b/src/sage/rings/function_field/place.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Places of function fields
diff --git a/src/sage/rings/function_field/place_polymod.py b/src/sage/rings/function_field/place_polymod.py
index f345c31129e..aac0b9b32b4 100644
--- a/src/sage/rings/function_field/place_polymod.py
+++ b/src/sage/rings/function_field/place_polymod.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
# sage.doctest: optional - sage.rings.function_field
"""
Places of function fields: extension
diff --git a/src/sage/rings/function_field/place_rational.py b/src/sage/rings/function_field/place_rational.py
index 9b98397ba90..181efc08ba5 100644
--- a/src/sage/rings/function_field/place_rational.py
+++ b/src/sage/rings/function_field/place_rational.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: optional - sage.rings.finite_rings (because all doctests use finite fields)
"""
Places of function fields: rational
diff --git a/src/sage/rings/function_field/valuation.py b/src/sage/rings/function_field/valuation.py
index aa127de2069..01644cd1f7a 100644
--- a/src/sage/rings/function_field/valuation.py
+++ b/src/sage/rings/function_field/valuation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Discrete valuations on function fields
diff --git a/src/sage/rings/generic.py b/src/sage/rings/generic.py
index bfcb1d2bc50..f43c0c880fc 100644
--- a/src/sage/rings/generic.py
+++ b/src/sage/rings/generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Generic data structures and algorithms for rings
diff --git a/src/sage/rings/homset.py b/src/sage/rings/homset.py
index b2f24a3800a..d9e1b93f395 100644
--- a/src/sage/rings/homset.py
+++ b/src/sage/rings/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Space of homomorphisms between two rings
"""
diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py
index 4dba8ec9d42..c70495c7cd7 100644
--- a/src/sage/rings/ideal.py
+++ b/src/sage/rings/ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ideals of commutative rings
diff --git a/src/sage/rings/ideal_monoid.py b/src/sage/rings/ideal_monoid.py
index 019348a6afe..438b25b86e6 100644
--- a/src/sage/rings/ideal_monoid.py
+++ b/src/sage/rings/ideal_monoid.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Monoid of ideals in a commutative ring
diff --git a/src/sage/rings/imaginary_unit.py b/src/sage/rings/imaginary_unit.py
index bb29cd32630..cfe6c09bab2 100644
--- a/src/sage/rings/imaginary_unit.py
+++ b/src/sage/rings/imaginary_unit.py
@@ -1,4 +1,4 @@
-# coding: utf-8
+# sage_setup: distribution = sagemath-flint
from sage.rings.number_field.number_field import GaussianField
diff --git a/src/sage/rings/infinity.py b/src/sage/rings/infinity.py
index f37c72c35a0..e9cdab21aca 100644
--- a/src/sage/rings/infinity.py
+++ b/src/sage/rings/infinity.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Signed and Unsigned Infinities
diff --git a/src/sage/rings/integer.pxd b/src/sage/rings/integer.pxd
index 1165895729e..9fb5913b635 100644
--- a/src/sage/rings/integer.pxd
+++ b/src/sage/rings/integer.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.libs.gmp.types cimport __mpz_struct, mpz_t, mpz_ptr
from sage.libs.gmp.mpz cimport mpz_set
diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx
index 70d11efaf7a..349d5efe460 100644
--- a/src/sage/rings/integer.pyx
+++ b/src/sage/rings/integer.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Elements of the ring `\ZZ` of integers
diff --git a/src/sage/rings/integer_fake.pxd b/src/sage/rings/integer_fake.pxd
index 2bd7a91142e..73e9d802462 100644
--- a/src/sage/rings/integer_fake.pxd
+++ b/src/sage/rings/integer_fake.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Fake Integer interface
diff --git a/src/sage/rings/integer_ring.pxd b/src/sage/rings/integer_ring.pxd
index d0af1bc068f..54b05a9c6e1 100644
--- a/src/sage/rings/integer_ring.pxd
+++ b/src/sage/rings/integer_ring.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.ring cimport PrincipalIdealDomain
from sage.rings.integer cimport Integer
from sage.libs.gmp.types cimport mpz_t
diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx
index ab445056cc7..b199f53b819 100644
--- a/src/sage/rings/integer_ring.pyx
+++ b/src/sage/rings/integer_ring.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ring `\ZZ` of Integers
diff --git a/src/sage/rings/invariants/all.py b/src/sage/rings/invariants/all.py
index eb0cce3175f..f9de850093c 100644
--- a/src/sage/rings/invariants/all.py
+++ b/src/sage/rings/invariants/all.py
@@ -1,2 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.rings.invariants.invariant_theory', 'invariant_theory')
+del lazy_import
diff --git a/src/sage/rings/invariants/invariant_theory.py b/src/sage/rings/invariants/invariant_theory.py
index cda4138d5e4..1555d66d58b 100644
--- a/src/sage/rings/invariants/invariant_theory.py
+++ b/src/sage/rings/invariants/invariant_theory.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Classical Invariant Theory
diff --git a/src/sage/rings/invariants/reconstruction.py b/src/sage/rings/invariants/reconstruction.py
index 8e98ad3f20f..5471aee15c9 100644
--- a/src/sage/rings/invariants/reconstruction.py
+++ b/src/sage/rings/invariants/reconstruction.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Reconstruction of Algebraic Forms
diff --git a/src/sage/rings/laurent_series_ring.py b/src/sage/rings/laurent_series_ring.py
index 4e0c6f0d557..1d522366cac 100644
--- a/src/sage/rings/laurent_series_ring.py
+++ b/src/sage/rings/laurent_series_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Laurent Series Rings
diff --git a/src/sage/rings/laurent_series_ring_element.pxd b/src/sage/rings/laurent_series_ring_element.pxd
index 8df5a92c9e7..2e6959c1272 100644
--- a/src/sage/rings/laurent_series_ring_element.pxd
+++ b/src/sage/rings/laurent_series_ring_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport AlgebraElement, ModuleElement
cdef class LaurentSeries(AlgebraElement):
diff --git a/src/sage/rings/laurent_series_ring_element.pyx b/src/sage/rings/laurent_series_ring_element.pyx
index 8bbf227e302..ff350e07daa 100644
--- a/src/sage/rings/laurent_series_ring_element.pyx
+++ b/src/sage/rings/laurent_series_ring_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Laurent Series
diff --git a/src/sage/rings/lazy_series.py b/src/sage/rings/lazy_series.py
index f4c46a03ca5..b582d1025ec 100644
--- a/src/sage/rings/lazy_series.py
+++ b/src/sage/rings/lazy_series.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-combinat
r"""
Lazy Series
diff --git a/src/sage/rings/lazy_series_ring.py b/src/sage/rings/lazy_series_ring.py
index 06fd7a5d595..157454968fb 100644
--- a/src/sage/rings/lazy_series_ring.py
+++ b/src/sage/rings/lazy_series_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
Lazy Series Rings
diff --git a/src/sage/rings/localization.py b/src/sage/rings/localization.py
index c55cfc48b40..b8efa0d025e 100644
--- a/src/sage/rings/localization.py
+++ b/src/sage/rings/localization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Localization
diff --git a/src/sage/rings/monomials.py b/src/sage/rings/monomials.py
index ed154ab8c06..bfa396d79dc 100644
--- a/src/sage/rings/monomials.py
+++ b/src/sage/rings/monomials.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"Monomials"
def _monomials(gens, R, n, i):
diff --git a/src/sage/rings/morphism.pxd b/src/sage/rings/morphism.pxd
index 4b8e8d052df..b310b5381ef 100644
--- a/src/sage/rings/morphism.pxd
+++ b/src/sage/rings/morphism.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.integer cimport Integer
from sage.structure.element cimport Element
from sage.structure.parent cimport Parent
diff --git a/src/sage/rings/morphism.pyx b/src/sage/rings/morphism.pyx
index 6c78460a534..efc6973ac0e 100644
--- a/src/sage/rings/morphism.pyx
+++ b/src/sage/rings/morphism.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Homomorphisms of rings
diff --git a/src/sage/rings/multi_power_series_ring.py b/src/sage/rings/multi_power_series_ring.py
index 0b34dfa003b..739420b280c 100644
--- a/src/sage/rings/multi_power_series_ring.py
+++ b/src/sage/rings/multi_power_series_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Multivariate Power Series Rings
diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py
index a92bb54377a..7cfcacfdccb 100644
--- a/src/sage/rings/multi_power_series_ring_element.py
+++ b/src/sage/rings/multi_power_series_ring_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Multivariate Power Series
diff --git a/src/sage/rings/noncommutative_ideals.pyx b/src/sage/rings/noncommutative_ideals.pyx
index 62484c9326b..bc665c346f1 100644
--- a/src/sage/rings/noncommutative_ideals.pyx
+++ b/src/sage/rings/noncommutative_ideals.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules
"""
Ideals of non-commutative rings
diff --git a/src/sage/rings/number_field/S_unit_solver.py b/src/sage/rings/number_field/S_unit_solver.py
index 1bc9e07d9c0..f1916eeaeae 100644
--- a/src/sage/rings/number_field/S_unit_solver.py
+++ b/src/sage/rings/number_field/S_unit_solver.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.rings.number_field sage.rings.padics
r"""
Solver for the `S`-unit equation `x + y = 1`
diff --git a/src/sage/rings/number_field/all.py b/src/sage/rings/number_field/all.py
index 5c56f8cff58..188951d9126 100644
--- a/src/sage/rings/number_field/all.py
+++ b/src/sage/rings/number_field/all.py
@@ -1,15 +1,20 @@
+# sage_setup: distribution = sagemath-flint
-from .number_field import (NumberField, NumberFieldTower, CyclotomicField, QuadraticField,
- is_fundamental_discriminant, is_real_place)
-from .number_field_element import NumberFieldElement
+from sage.rings.number_field.number_field import (NumberField, NumberFieldTower, CyclotomicField, QuadraticField,
+ is_fundamental_discriminant, is_real_place)
+from sage.rings.number_field.number_field_element import NumberFieldElement
-from .order import EquationOrder, GaussianIntegers, EisensteinIntegers
+from sage.rings.number_field.order import EquationOrder, GaussianIntegers, EisensteinIntegers
-from sage.misc.lazy_import import lazy_import as _lazy_import
+from sage.misc.lazy_import import lazy_import
-_lazy_import('sage.rings.number_field.totallyreal', 'enumerate_totallyreal_fields_prim')
-_lazy_import('sage.rings.number_field.totallyreal_data', 'hermite_constant')
-_lazy_import('sage.rings.number_field.totallyreal_rel', 'enumerate_totallyreal_fields_all')
-_lazy_import('sage.rings.number_field.totallyreal_rel', 'enumerate_totallyreal_fields_rel')
+lazy_import('sage.rings.number_field.totallyreal', 'enumerate_totallyreal_fields_prim')
+lazy_import('sage.rings.number_field.totallyreal_data', 'hermite_constant')
+lazy_import('sage.rings.number_field.totallyreal_rel',
+ 'enumerate_totallyreal_fields_all')
+lazy_import('sage.rings.number_field.totallyreal_rel',
+ 'enumerate_totallyreal_fields_rel')
-from .unit_group import UnitGroup
+from sage.rings.number_field.unit_group import UnitGroup
+
+del lazy_import
diff --git a/src/sage/rings/number_field/all__sagemath_categories.py b/src/sage/rings/number_field/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/number_field/all__sagemath_flint.py b/src/sage/rings/number_field/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/number_field/all__sagemath_pari.py b/src/sage/rings/number_field/all__sagemath_pari.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/number_field/bdd_height.py b/src/sage/rings/number_field/bdd_height.py
index beed9da5e20..747c0f89756 100644
--- a/src/sage/rings/number_field/bdd_height.py
+++ b/src/sage/rings/number_field/bdd_height.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.geometry.polyhedron
r"""
Elements of bounded height in number fields
diff --git a/src/sage/rings/number_field/class_group.py b/src/sage/rings/number_field/class_group.py
index 4f10c8d8f13..2f6c3c3c8cb 100644
--- a/src/sage/rings/number_field/class_group.py
+++ b/src/sage/rings/number_field/class_group.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-flint
r"""
Class groups of number fields
diff --git a/src/sage/rings/number_field/galois_group.py b/src/sage/rings/number_field/galois_group.py
index 999089d49d0..a9ae8f3fd2a 100644
--- a/src/sage/rings/number_field/galois_group.py
+++ b/src/sage/rings/number_field/galois_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.groups sage.rings.number_field
"""
Galois groups of number fields
diff --git a/src/sage/rings/number_field/homset.py b/src/sage/rings/number_field/homset.py
index 4e4a12a9c6f..c3565e4b90b 100644
--- a/src/sage/rings/number_field/homset.py
+++ b/src/sage/rings/number_field/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Sets of homomorphisms between number fields
"""
diff --git a/src/sage/rings/number_field/maps.py b/src/sage/rings/number_field/maps.py
index b14c4ca48f3..ea83eca6e7a 100644
--- a/src/sage/rings/number_field/maps.py
+++ b/src/sage/rings/number_field/maps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Structure maps for number fields
diff --git a/src/sage/rings/number_field/morphism.py b/src/sage/rings/number_field/morphism.py
index a16ccd2bbc6..cc639fe183d 100644
--- a/src/sage/rings/number_field/morphism.py
+++ b/src/sage/rings/number_field/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Morphisms between number fields
diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py
index 1413b1ea057..cd61295310e 100644
--- a/src/sage/rings/number_field/number_field.py
+++ b/src/sage/rings/number_field/number_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.libs.linbox
r"""
Number fields
diff --git a/src/sage/rings/number_field/number_field_base.pxd b/src/sage/rings/number_field/number_field_base.pxd
index ba6a8e98143..52de3655c39 100644
--- a/src/sage/rings/number_field/number_field_base.pxd
+++ b/src/sage/rings/number_field/number_field_base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.ring cimport Field
cdef class NumberField(Field):
diff --git a/src/sage/rings/number_field/number_field_base.pyx b/src/sage/rings/number_field/number_field_base.pyx
index 7f55d887a0f..cf0dc56e9ef 100644
--- a/src/sage/rings/number_field/number_field_base.pyx
+++ b/src/sage/rings/number_field/number_field_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.number_field
"""
Base class of number fields
diff --git a/src/sage/rings/number_field/number_field_element.pxd b/src/sage/rings/number_field/number_field_element.pxd
index df72e703017..610e001dc00 100644
--- a/src/sage/rings/number_field/number_field_element.pxd
+++ b/src/sage/rings/number_field/number_field_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
cimport sage.structure.element
from sage.libs.gmp.types cimport mpz_t
from sage.rings.integer cimport Integer
diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx
index 844a4ec3162..5a5f133c2fc 100644
--- a/src/sage/rings/number_field/number_field_element.pyx
+++ b/src/sage/rings/number_field/number_field_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/number_field/number_field_element_base.pxd b/src/sage/rings/number_field/number_field_element_base.pxd
index 060f0c754c4..7575d280a1e 100644
--- a/src/sage/rings/number_field/number_field_element_base.pxd
+++ b/src/sage/rings/number_field/number_field_element_base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport FieldElement
diff --git a/src/sage/rings/number_field/number_field_element_base.pyx b/src/sage/rings/number_field/number_field_element_base.pyx
index 5fee5817cbc..0b2b17b9064 100644
--- a/src/sage/rings/number_field/number_field_element_base.pyx
+++ b/src/sage/rings/number_field/number_field_element_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Number field elements (abstract base class)
"""
diff --git a/src/sage/rings/number_field/number_field_element_quadratic.pxd b/src/sage/rings/number_field/number_field_element_quadratic.pxd
index 6dce9c04d90..d196e735a99 100644
--- a/src/sage/rings/number_field/number_field_element_quadratic.pxd
+++ b/src/sage/rings/number_field/number_field_element_quadratic.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.gmp.types cimport mpz_t
from sage.libs.flint.types cimport arb_t
from sage.rings.integer cimport Integer
diff --git a/src/sage/rings/number_field/number_field_element_quadratic.pyx b/src/sage/rings/number_field/number_field_element_quadratic.pyx
index f48df864b74..7db9fdbaa81 100644
--- a/src/sage/rings/number_field/number_field_element_quadratic.pyx
+++ b/src/sage/rings/number_field/number_field_element_quadratic.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/number_field/number_field_ideal.py b/src/sage/rings/number_field/number_field_ideal.py
index 1be7a76f46f..fe1ac8cc049 100644
--- a/src/sage/rings/number_field/number_field_ideal.py
+++ b/src/sage/rings/number_field/number_field_ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.pari sage.rings.number_field
"""
Ideals of number fields
diff --git a/src/sage/rings/number_field/number_field_ideal_rel.py b/src/sage/rings/number_field/number_field_ideal_rel.py
index 7c0e4daa7a2..f51c988f646 100644
--- a/src/sage/rings/number_field/number_field_ideal_rel.py
+++ b/src/sage/rings/number_field/number_field_ideal_rel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Ideals of relative number fields
diff --git a/src/sage/rings/number_field/number_field_morphisms.pyx b/src/sage/rings/number_field/number_field_morphisms.pyx
index 94a917b5322..f0512bf28b6 100644
--- a/src/sage/rings/number_field/number_field_morphisms.pyx
+++ b/src/sage/rings/number_field/number_field_morphisms.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.rings.number_field
r"""
Embeddings into ambient fields
diff --git a/src/sage/rings/number_field/number_field_rel.py b/src/sage/rings/number_field/number_field_rel.py
index 0fdc3a8e89c..9009559c3ee 100644
--- a/src/sage/rings/number_field/number_field_rel.py
+++ b/src/sage/rings/number_field/number_field_rel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Relative number fields
diff --git a/src/sage/rings/number_field/order.py b/src/sage/rings/number_field/order.py
index 94d0732704d..74bc0e5de21 100644
--- a/src/sage/rings/number_field/order.py
+++ b/src/sage/rings/number_field/order.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.libs.linbox
"""
Orders in number fields
diff --git a/src/sage/rings/number_field/selmer_group.py b/src/sage/rings/number_field/selmer_group.py
index 87221473348..3eb7246ab25 100644
--- a/src/sage/rings/number_field/selmer_group.py
+++ b/src/sage/rings/number_field/selmer_group.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-flint
r"""
`p`-Selmer groups of number fields
diff --git a/src/sage/rings/number_field/small_primes_of_degree_one.py b/src/sage/rings/number_field/small_primes_of_degree_one.py
index 73f770c34dd..b22217f9d27 100644
--- a/src/sage/rings/number_field/small_primes_of_degree_one.py
+++ b/src/sage/rings/number_field/small_primes_of_degree_one.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Small primes of degree one
diff --git a/src/sage/rings/number_field/splitting_field.py b/src/sage/rings/number_field/splitting_field.py
index 4de3515f161..843fddbb6b0 100644
--- a/src/sage/rings/number_field/splitting_field.py
+++ b/src/sage/rings/number_field/splitting_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Splitting fields of polynomials over number fields
diff --git a/src/sage/rings/number_field/structure.py b/src/sage/rings/number_field/structure.py
index 92be301645b..d092c1fc106 100644
--- a/src/sage/rings/number_field/structure.py
+++ b/src/sage/rings/number_field/structure.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.rings.number_field
r"""
Helper classes for structural embeddings and isomorphisms of number fields
diff --git a/src/sage/rings/number_field/totallyreal.pyx b/src/sage/rings/number_field/totallyreal.pyx
index 3e591fb1baa..3fa8249a662 100644
--- a/src/sage/rings/number_field/totallyreal.pyx
+++ b/src/sage/rings/number_field/totallyreal.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Enumeration of primitive totally real fields
diff --git a/src/sage/rings/number_field/totallyreal_data.pxd b/src/sage/rings/number_field/totallyreal_data.pxd
index 61973829ddb..abd99f90a69 100644
--- a/src/sage/rings/number_field/totallyreal_data.pxd
+++ b/src/sage/rings/number_field/totallyreal_data.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
cdef double eval_seq_as_poly(int *f, int n, double x) noexcept
cdef double newton(int *f, int *df, int n, double x0, double eps) noexcept
cdef void newton_in_intervals(int *f, int *df, int n, double *beta, double eps, double *rts) noexcept
diff --git a/src/sage/rings/number_field/totallyreal_data.pyx b/src/sage/rings/number_field/totallyreal_data.pyx
index 6336b16264b..fd67045b5f8 100644
--- a/src/sage/rings/number_field/totallyreal_data.pyx
+++ b/src/sage/rings/number_field/totallyreal_data.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = gmp
"""
Enumeration of totally real fields: data
diff --git a/src/sage/rings/number_field/totallyreal_phc.py b/src/sage/rings/number_field/totallyreal_phc.py
index e564d760320..7ea5b5fc7d5 100644
--- a/src/sage/rings/number_field/totallyreal_phc.py
+++ b/src/sage/rings/number_field/totallyreal_phc.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Enumeration of totally real fields: PHC interface
diff --git a/src/sage/rings/number_field/totallyreal_rel.py b/src/sage/rings/number_field/totallyreal_rel.py
index e4e96154838..efa4aec9468 100644
--- a/src/sage/rings/number_field/totallyreal_rel.py
+++ b/src/sage/rings/number_field/totallyreal_rel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.geometry.polyhedron sage.libs.linbox sage.modules sage.rings.number_field
r"""
Enumeration of totally real fields: relative extensions
diff --git a/src/sage/rings/number_field/unit_group.py b/src/sage/rings/number_field/unit_group.py
index a98c1dd0907..98368a5fbae 100644
--- a/src/sage/rings/number_field/unit_group.py
+++ b/src/sage/rings/number_field/unit_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Units and `S`-unit groups of number fields
diff --git a/src/sage/rings/padics/CA_template.pxi b/src/sage/rings/padics/CA_template.pxi
index e8d906b01c8..94d02062ae4 100644
--- a/src/sage/rings/padics/CA_template.pxi
+++ b/src/sage/rings/padics/CA_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Capped absolute template for complete discrete valuation rings
diff --git a/src/sage/rings/padics/CA_template_header.pxi b/src/sage/rings/padics/CA_template_header.pxi
index d15a055cb4d..1b1c3262f37 100644
--- a/src/sage/rings/padics/CA_template_header.pxi
+++ b/src/sage/rings/padics/CA_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file provides the declaration for ``CAElement`` and the morphisms to
the integers and rationals.
diff --git a/src/sage/rings/padics/CR_template.pxi b/src/sage/rings/padics/CR_template.pxi
index acdc4803670..7491720c26a 100644
--- a/src/sage/rings/padics/CR_template.pxi
+++ b/src/sage/rings/padics/CR_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Capped relative template for complete discrete valuation rings and their fraction fields
diff --git a/src/sage/rings/padics/CR_template_header.pxi b/src/sage/rings/padics/CR_template_header.pxi
index 54c482f7ff2..ebbe7b0b326 100644
--- a/src/sage/rings/padics/CR_template_header.pxi
+++ b/src/sage/rings/padics/CR_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file provides the declaration for ``CRElement`` and the morphisms
to and from the integers and rationals.
diff --git a/src/sage/rings/padics/FM_template.pxi b/src/sage/rings/padics/FM_template.pxi
index 8ce93d797a8..7a158d50a49 100644
--- a/src/sage/rings/padics/FM_template.pxi
+++ b/src/sage/rings/padics/FM_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Fixed modulus template for complete discrete valuation rings
diff --git a/src/sage/rings/padics/FM_template_header.pxi b/src/sage/rings/padics/FM_template_header.pxi
index bd651167622..5de73d5478a 100644
--- a/src/sage/rings/padics/FM_template_header.pxi
+++ b/src/sage/rings/padics/FM_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file provides the declaration for the ``FMElement`` and the morphisms
to and from the integers and rationals.
diff --git a/src/sage/rings/padics/FP_template.pxi b/src/sage/rings/padics/FP_template.pxi
index 5c7f94051e7..701a7c01298 100644
--- a/src/sage/rings/padics/FP_template.pxi
+++ b/src/sage/rings/padics/FP_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Floating point template for complete discrete valuation rings
diff --git a/src/sage/rings/padics/FP_template_header.pxi b/src/sage/rings/padics/FP_template_header.pxi
index fde598e05fd..d9510add4bf 100644
--- a/src/sage/rings/padics/FP_template_header.pxi
+++ b/src/sage/rings/padics/FP_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file provides the declaration for ``FPElement`` and the morphisms
to and from the integers and rationals.
diff --git a/src/sage/rings/padics/all.py b/src/sage/rings/padics/all.py
index 7014f5622d8..d70d7c2f229 100644
--- a/src/sage/rings/padics/all.py
+++ b/src/sage/rings/padics/all.py
@@ -1,6 +1,3 @@
-from .factory import Zp, Zq, Zp as pAdicRing, ZpCR, ZpCA, ZpFM, ZpFP, ZpLC, ZpLF, ZqCR, ZqCA, ZqFM, ZqFP, ZpER
-from .factory import Qp, Qq, Qp as pAdicField, QpCR, QpFP, QpLC, QpLF, QqCR, QqFP, QpER
-from .factory import pAdicExtension
-from .padic_generic import local_print_mode
-from .pow_computer import PowComputer
-from .pow_computer_ext import PowComputer_ext_maker
+# sage_setup: distribution = sagemath-flint
+
+from sage.rings.padics.all__sagemath_flint import *
diff --git a/src/sage/rings/padics/all__sagemath_categories.py b/src/sage/rings/padics/all__sagemath_categories.py
new file mode 100644
index 00000000000..fec72979f02
--- /dev/null
+++ b/src/sage/rings/padics/all__sagemath_categories.py
@@ -0,0 +1 @@
+from sage.rings.padics.padic_generic import local_print_mode
diff --git a/src/sage/rings/padics/all__sagemath_flint.py b/src/sage/rings/padics/all__sagemath_flint.py
new file mode 100644
index 00000000000..6362a8551f0
--- /dev/null
+++ b/src/sage/rings/padics/all__sagemath_flint.py
@@ -0,0 +1,2 @@
+
+from sage.rings.padics.all__sagemath_ntl import *
diff --git a/src/sage/rings/padics/all__sagemath_ntl.py b/src/sage/rings/padics/all__sagemath_ntl.py
new file mode 100644
index 00000000000..dfa31e55f90
--- /dev/null
+++ b/src/sage/rings/padics/all__sagemath_ntl.py
@@ -0,0 +1,4 @@
+
+from sage.rings.padics.all__sagemath_pari import *
+
+from sage.rings.padics.pow_computer_ext import PowComputer_ext_maker
diff --git a/src/sage/rings/padics/all__sagemath_pari.py b/src/sage/rings/padics/all__sagemath_pari.py
new file mode 100644
index 00000000000..5072418e856
--- /dev/null
+++ b/src/sage/rings/padics/all__sagemath_pari.py
@@ -0,0 +1,10 @@
+
+from sage.rings.padics.all__sagemath_categories import *
+
+from sage.rings.padics.factory import Zp, Zq, Zp as pAdicRing, ZpCR, ZpCA, ZpFM, ZpFP, ZpLC, ZpLF, ZqCR, ZqCA, ZqFM, ZqFP, ZpER
+from sage.rings.padics.factory import Qp, Qq, Qp as pAdicField, QpCR, QpFP, QpLC, QpLF, QqCR, QqFP, QpER
+from sage.rings.padics.factory import pAdicExtension
+
+from sage.rings.padics.padic_printing import _printer_defaults as padic_printing
+
+from sage.rings.padics.pow_computer import PowComputer
diff --git a/src/sage/rings/padics/common_conversion.pxd b/src/sage/rings/padics/common_conversion.pxd
index 4e0edb8f8e6..936b97f105e 100644
--- a/src/sage/rings/padics/common_conversion.pxd
+++ b/src/sage/rings/padics/common_conversion.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.integer cimport Integer
from sage.rings.padics.pow_computer cimport PowComputer_class
from sage.libs.gmp.mpz cimport mpz_t, mpq_t
diff --git a/src/sage/rings/padics/common_conversion.pyx b/src/sage/rings/padics/common_conversion.pyx
index 0afddcc30a4..61196c6e4da 100644
--- a/src/sage/rings/padics/common_conversion.pyx
+++ b/src/sage/rings/padics/common_conversion.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
The functions in this file are used in creating new p-adic elements.
diff --git a/src/sage/rings/padics/eisenstein_extension_generic.py b/src/sage/rings/padics/eisenstein_extension_generic.py
index 10e198abfb9..61db8ce062f 100644
--- a/src/sage/rings/padics/eisenstein_extension_generic.py
+++ b/src/sage/rings/padics/eisenstein_extension_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Eisenstein Extension Generic
diff --git a/src/sage/rings/padics/factory.py b/src/sage/rings/padics/factory.py
index 60c37322bd2..35658ddd459 100644
--- a/src/sage/rings/padics/factory.py
+++ b/src/sage/rings/padics/factory.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Factory
diff --git a/src/sage/rings/padics/generic_nodes.py b/src/sage/rings/padics/generic_nodes.py
index ecee8e4e5f3..4e3f174b55b 100644
--- a/src/sage/rings/padics/generic_nodes.py
+++ b/src/sage/rings/padics/generic_nodes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
`p`-adic Generic Nodes
diff --git a/src/sage/rings/padics/lattice_precision.py b/src/sage/rings/padics/lattice_precision.py
index 51a510a4360..01bd1d00df3 100644
--- a/src/sage/rings/padics/lattice_precision.py
+++ b/src/sage/rings/padics/lattice_precision.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Lattice precision for the parents ``ZpLC``/``QpLC`` and ``ZpLF``/``QpLF``
diff --git a/src/sage/rings/padics/local_generic.py b/src/sage/rings/padics/local_generic.py
index 066459c65a2..cc23c0e0894 100644
--- a/src/sage/rings/padics/local_generic.py
+++ b/src/sage/rings/padics/local_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.padics
r"""
Local Generic
diff --git a/src/sage/rings/padics/local_generic_element.pxd b/src/sage/rings/padics/local_generic_element.pxd
index 9111d2f173c..daf1194956f 100644
--- a/src/sage/rings/padics/local_generic_element.pxd
+++ b/src/sage/rings/padics/local_generic_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport CommutativeRingElement
cdef class LocalGenericElement(CommutativeRingElement):
diff --git a/src/sage/rings/padics/local_generic_element.pyx b/src/sage/rings/padics/local_generic_element.pyx
index e1f5a7a04a0..4a88b75ba87 100644
--- a/src/sage/rings/padics/local_generic_element.pyx
+++ b/src/sage/rings/padics/local_generic_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.padics
"""
Local Generic Element
diff --git a/src/sage/rings/padics/misc.py b/src/sage/rings/padics/misc.py
index 984482bc39c..3bde32a996a 100644
--- a/src/sage/rings/padics/misc.py
+++ b/src/sage/rings/padics/misc.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Miscellaneous Functions
diff --git a/src/sage/rings/padics/morphism.pxd b/src/sage/rings/padics/morphism.pxd
index b6afedd2377..4fd8175c847 100644
--- a/src/sage/rings/padics/morphism.pxd
+++ b/src/sage/rings/padics/morphism.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.morphism cimport RingHomomorphism
from sage.structure.element cimport Element
diff --git a/src/sage/rings/padics/morphism.pyx b/src/sage/rings/padics/morphism.pyx
index c8238bdc9fa..5418878a3ca 100644
--- a/src/sage/rings/padics/morphism.pyx
+++ b/src/sage/rings/padics/morphism.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.ntl
"""
Frobenius endomorphisms on p-adic fields
diff --git a/src/sage/rings/padics/padic_ZZ_pX_CA_element.pxd b/src/sage/rings/padics/padic_ZZ_pX_CA_element.pxd
index 7afe94b1bf3..63b03c15e87 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_CA_element.pxd
+++ b/src/sage/rings/padics/padic_ZZ_pX_CA_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.gmp.types cimport mpq_t
from sage.rings.padics.padic_ZZ_pX_element cimport pAdicZZpXElement
from sage.structure.element cimport RingElement, ModuleElement
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 58f5670aa05..dd3090651b6 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/padic_ZZ_pX_CR_element.pxd b/src/sage/rings/padics/padic_ZZ_pX_CR_element.pxd
index 9744b2a3f62..04f24b78377 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_CR_element.pxd
+++ b/src/sage/rings/padics/padic_ZZ_pX_CR_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.gmp.types cimport mpz_t, mpq_t
from sage.rings.padics.padic_ZZ_pX_element cimport pAdicZZpXElement
from sage.structure.element cimport RingElement, ModuleElement
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 ec86b03535b..94bc504a890 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/padic_ZZ_pX_FM_element.pxd b/src/sage/rings/padics/padic_ZZ_pX_FM_element.pxd
index 90626089442..221b6dba2cb 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_FM_element.pxd
+++ b/src/sage/rings/padics/padic_ZZ_pX_FM_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZ_pX_c
from sage.rings.padics.padic_ZZ_pX_element cimport pAdicZZpXElement
from sage.structure.element cimport RingElement, ModuleElement
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 44d549847a9..910f7a5f3d0 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/padic_ZZ_pX_element.pxd b/src/sage/rings/padics/padic_ZZ_pX_element.pxd
index 1d2f9abcbdb..4fc388fbe36 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_element.pxd
+++ b/src/sage/rings/padics/padic_ZZ_pX_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.rings.padics.padic_ext_element cimport pAdicExtElement
from sage.rings.padics.pow_computer_ext cimport PowComputer_ZZ_pX
diff --git a/src/sage/rings/padics/padic_ZZ_pX_element.pyx b/src/sage/rings/padics/padic_ZZ_pX_element.pyx
index b88bd5053bf..1c77027faee 100644
--- a/src/sage/rings/padics/padic_ZZ_pX_element.pyx
+++ b/src/sage/rings/padics/padic_ZZ_pX_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/padic_base_generic.py b/src/sage/rings/padics/padic_base_generic.py
index 792e99996c5..f3e2ba82fa0 100644
--- a/src/sage/rings/padics/padic_base_generic.py
+++ b/src/sage/rings/padics/padic_base_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
`p`-adic Base Generic
diff --git a/src/sage/rings/padics/padic_base_leaves.py b/src/sage/rings/padics/padic_base_leaves.py
index efd4073c30d..538d30b6b81 100644
--- a/src/sage/rings/padics/padic_base_leaves.py
+++ b/src/sage/rings/padics/padic_base_leaves.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
`p`-adic Base Leaves
diff --git a/src/sage/rings/padics/padic_capped_absolute_element.pxd b/src/sage/rings/padics/padic_capped_absolute_element.pxd
index 48c8500a678..d2193ce373a 100644
--- a/src/sage/rings/padics/padic_capped_absolute_element.pxd
+++ b/src/sage/rings/padics/padic_capped_absolute_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.libs.gmp.types cimport mpz_t
from cypari2.gen cimport Gen as pari_gen
from sage.rings.padics.padic_capped_relative_element cimport CRElement
diff --git a/src/sage/rings/padics/padic_capped_absolute_element.pyx b/src/sage/rings/padics/padic_capped_absolute_element.pyx
index d21b2c18acb..c5e5a235cb9 100644
--- a/src/sage/rings/padics/padic_capped_absolute_element.pyx
+++ b/src/sage/rings/padics/padic_capped_absolute_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
`p`-adic Capped Absolute Elements
diff --git a/src/sage/rings/padics/padic_capped_relative_element.pxd b/src/sage/rings/padics/padic_capped_relative_element.pxd
index 2cf6d5276f5..e1d544ea9d0 100644
--- a/src/sage/rings/padics/padic_capped_relative_element.pxd
+++ b/src/sage/rings/padics/padic_capped_relative_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.libs.gmp.types cimport mpz_t
from cypari2.gen cimport Gen as pari_gen
diff --git a/src/sage/rings/padics/padic_capped_relative_element.pyx b/src/sage/rings/padics/padic_capped_relative_element.pyx
index 701c9575417..ba7e2828429 100644
--- a/src/sage/rings/padics/padic_capped_relative_element.pyx
+++ b/src/sage/rings/padics/padic_capped_relative_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
`p`-adic Capped Relative Elements
diff --git a/src/sage/rings/padics/padic_ext_element.pxd b/src/sage/rings/padics/padic_ext_element.pxd
index d8e2ca0a5a0..62323933199 100644
--- a/src/sage/rings/padics/padic_ext_element.pxd
+++ b/src/sage/rings/padics/padic_ext_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.rings.padics.padic_generic_element cimport pAdicGenericElement
from sage.libs.ntl.types cimport ZZ_pX_c, ZZ_pE_c, ZZ_pEX_c, ZZ_p_c, ZZX_c
from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
diff --git a/src/sage/rings/padics/padic_ext_element.pyx b/src/sage/rings/padics/padic_ext_element.pyx
index 2327c8085a0..ea2d2bc46bb 100644
--- a/src/sage/rings/padics/padic_ext_element.pyx
+++ b/src/sage/rings/padics/padic_ext_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/padic_extension_generic.py b/src/sage/rings/padics/padic_extension_generic.py
index 42d58e9d229..995f3ed2d06 100644
--- a/src/sage/rings/padics/padic_extension_generic.py
+++ b/src/sage/rings/padics/padic_extension_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.ntl
"""
`p`-adic Extension Generic
diff --git a/src/sage/rings/padics/padic_extension_leaves.py b/src/sage/rings/padics/padic_extension_leaves.py
index d6450039a82..1bd9acd8e04 100644
--- a/src/sage/rings/padics/padic_extension_leaves.py
+++ b/src/sage/rings/padics/padic_extension_leaves.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
`p`-adic Extension Leaves
diff --git a/src/sage/rings/padics/padic_fixed_mod_element.pxd b/src/sage/rings/padics/padic_fixed_mod_element.pxd
index cd619a1bcb2..105fe481850 100644
--- a/src/sage/rings/padics/padic_fixed_mod_element.pxd
+++ b/src/sage/rings/padics/padic_fixed_mod_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.libs.gmp.types cimport mpz_t
from cypari2.gen cimport Gen as pari_gen
from sage.rings.padics.padic_floating_point_element cimport FPElement
diff --git a/src/sage/rings/padics/padic_fixed_mod_element.pyx b/src/sage/rings/padics/padic_fixed_mod_element.pyx
index bb4b8f3e0db..5fb895c4aad 100644
--- a/src/sage/rings/padics/padic_fixed_mod_element.pyx
+++ b/src/sage/rings/padics/padic_fixed_mod_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
`p`-adic Fixed-Mod Element
diff --git a/src/sage/rings/padics/padic_floating_point_element.pxd b/src/sage/rings/padics/padic_floating_point_element.pxd
index 721c471d253..434a4cc83f9 100644
--- a/src/sage/rings/padics/padic_floating_point_element.pxd
+++ b/src/sage/rings/padics/padic_floating_point_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.libs.gmp.types cimport mpz_t
from cypari2.gen cimport Gen as pari_gen
diff --git a/src/sage/rings/padics/padic_floating_point_element.pyx b/src/sage/rings/padics/padic_floating_point_element.pyx
index ed80e7c853d..4d0d4ee6620 100644
--- a/src/sage/rings/padics/padic_floating_point_element.pyx
+++ b/src/sage/rings/padics/padic_floating_point_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
`p`-adic Floating Point Elements
diff --git a/src/sage/rings/padics/padic_generic.py b/src/sage/rings/padics/padic_generic.py
index 6452d77db22..28e80ad59b1 100644
--- a/src/sage/rings/padics/padic_generic.py
+++ b/src/sage/rings/padics/padic_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.padics
r"""
`p`-adic Generic
diff --git a/src/sage/rings/padics/padic_generic_element.pxd b/src/sage/rings/padics/padic_generic_element.pxd
index dadf7099c00..b3b04c85e86 100644
--- a/src/sage/rings/padics/padic_generic_element.pxd
+++ b/src/sage/rings/padics/padic_generic_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cpython cimport array
cimport sage.structure.element
diff --git a/src/sage/rings/padics/padic_generic_element.pyx b/src/sage/rings/padics/padic_generic_element.pyx
index b8f02e31970..9e81dbb9d09 100644
--- a/src/sage/rings/padics/padic_generic_element.pyx
+++ b/src/sage/rings/padics/padic_generic_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
`p`-adic Generic Element
diff --git a/src/sage/rings/padics/padic_lattice_element.py b/src/sage/rings/padics/padic_lattice_element.py
index d1b75efe6d6..49e70df3fe5 100644
--- a/src/sage/rings/padics/padic_lattice_element.py
+++ b/src/sage/rings/padics/padic_lattice_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
`p`-adic Elements with lattice precision.
diff --git a/src/sage/rings/padics/padic_printing.pxd b/src/sage/rings/padics/padic_printing.pxd
index 44698b3d73d..1a238054efa 100644
--- a/src/sage/rings/padics/padic_printing.pxd
+++ b/src/sage/rings/padics/padic_printing.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.structure.sage_object cimport SageObject
from sage.rings.padics.pow_computer cimport PowComputer_class
from sage.rings.padics.padic_generic_element cimport pAdicGenericElement
diff --git a/src/sage/rings/padics/padic_printing.pyx b/src/sage/rings/padics/padic_printing.pyx
index fc9f15b07b1..e18ce08d5c4 100644
--- a/src/sage/rings/padics/padic_printing.pyx
+++ b/src/sage/rings/padics/padic_printing.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/padic_relaxed_element.pxd b/src/sage/rings/padics/padic_relaxed_element.pxd
index 991af951643..d21d4a2a88c 100644
--- a/src/sage/rings/padics/padic_relaxed_element.pxd
+++ b/src/sage/rings/padics/padic_relaxed_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.flint.types cimport fmpz, fmpz_t, fmpz_poly_t, flint_rand_t
ctypedef fmpz_t cdigit
diff --git a/src/sage/rings/padics/padic_relaxed_element.pyx b/src/sage/rings/padics/padic_relaxed_element.pyx
index 88b5003b0eb..f696dde41e3 100644
--- a/src/sage/rings/padics/padic_relaxed_element.pyx
+++ b/src/sage/rings/padics/padic_relaxed_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
cdef inline type element_class_zero = pAdicRelaxedElement_zero
cdef inline type element_class_one = pAdicRelaxedElement_one
cdef inline type element_class_bound = pAdicRelaxedElement_bound
diff --git a/src/sage/rings/padics/padic_relaxed_errors.pxd b/src/sage/rings/padics/padic_relaxed_errors.pxd
index bfe375b8eee..f0c31369c93 100644
--- a/src/sage/rings/padics/padic_relaxed_errors.pxd
+++ b/src/sage/rings/padics/padic_relaxed_errors.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
cdef inline int ERROR_ABANDON
cdef inline int ERROR_NOTDEFINED
cdef inline int ERROR_PRECISION
diff --git a/src/sage/rings/padics/padic_relaxed_errors.pyx b/src/sage/rings/padics/padic_relaxed_errors.pyx
index 2157234f62b..dce83aaec65 100644
--- a/src/sage/rings/padics/padic_relaxed_errors.pyx
+++ b/src/sage/rings/padics/padic_relaxed_errors.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# ****************************************************************************
# Copyright (C) 2021 Xavier Caruso
#
diff --git a/src/sage/rings/padics/padic_template_element.pxi b/src/sage/rings/padics/padic_template_element.pxi
index 4b5b9c6dbe9..2c25ff6c0b4 100644
--- a/src/sage/rings/padics/padic_template_element.pxi
+++ b/src/sage/rings/padics/padic_template_element.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file gives a class from which all the `p`-adic templates inherit.
diff --git a/src/sage/rings/padics/padic_template_element_header.pxi b/src/sage/rings/padics/padic_template_element_header.pxi
index 11e1cc7fab7..08c9592e69c 100644
--- a/src/sage/rings/padics/padic_template_element_header.pxi
+++ b/src/sage/rings/padics/padic_template_element_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file provides the declaration for the pAdicTemplateElement class,
which collects common functionality for the different p-adic template
diff --git a/src/sage/rings/padics/padic_valuation.py b/src/sage/rings/padics/padic_valuation.py
index 7b162228fbb..457555bd5da 100644
--- a/src/sage/rings/padics/padic_valuation.py
+++ b/src/sage/rings/padics/padic_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
`p`-adic Valuations on Number Fields and Their Subrings and Completions
diff --git a/src/sage/rings/padics/pow_computer.pxd b/src/sage/rings/padics/pow_computer.pxd
index 5cb6a474849..ada2533961b 100644
--- a/src/sage/rings/padics/pow_computer.pxd
+++ b/src/sage/rings/padics/pow_computer.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.libs.gmp.types cimport mpz_t, mpz_srcptr
from sage.structure.sage_object cimport SageObject
from sage.rings.integer cimport Integer
diff --git a/src/sage/rings/padics/pow_computer.pyx b/src/sage/rings/padics/pow_computer.pyx
index dda423f4a0f..d26fe7d5b14 100644
--- a/src/sage/rings/padics/pow_computer.pyx
+++ b/src/sage/rings/padics/pow_computer.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/pow_computer_ext.pxd b/src/sage/rings/padics/pow_computer_ext.pxd
index 5d31790e02e..1899c40057f 100644
--- a/src/sage/rings/padics/pow_computer_ext.pxd
+++ b/src/sage/rings/padics/pow_computer_ext.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.rings.padics.pow_computer cimport PowComputer_class
from sage.libs.ntl.ntl_ZZ_pContext cimport ntl_ZZ_pContext_class
from sage.libs.ntl.types cimport *
diff --git a/src/sage/rings/padics/pow_computer_ext.pyx b/src/sage/rings/padics/pow_computer_ext.pyx
index 89a073550f5..06b08444439 100644
--- a/src/sage/rings/padics/pow_computer_ext.pyx
+++ b/src/sage/rings/padics/pow_computer_ext.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/pow_computer_flint.pxd b/src/sage/rings/padics/pow_computer_flint.pxd
index 7b0d042115d..a2c853eca89 100644
--- a/src/sage/rings/padics/pow_computer_flint.pxd
+++ b/src/sage/rings/padics/pow_computer_flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.gmp.mpz cimport mpz_t
from sage.libs.flint.types cimport padic_ctx_t, fmpz_t, fmpz_poly_t
from sage.rings.padics.pow_computer cimport PowComputer_class
diff --git a/src/sage/rings/padics/pow_computer_flint.pyx b/src/sage/rings/padics/pow_computer_flint.pyx
index 2a9c937923f..de95d6b6955 100644
--- a/src/sage/rings/padics/pow_computer_flint.pyx
+++ b/src/sage/rings/padics/pow_computer_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = gmp NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/padics/pow_computer_relative.pxd b/src/sage/rings/padics/pow_computer_relative.pxd
index df989768720..0b99bc4b65a 100644
--- a/src/sage/rings/padics/pow_computer_relative.pxd
+++ b/src/sage/rings/padics/pow_computer_relative.pxd
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
from sage.rings.padics.pow_computer cimport PowComputer_class
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense
diff --git a/src/sage/rings/padics/pow_computer_relative.pyx b/src/sage/rings/padics/pow_computer_relative.pyx
index 98b3a6f5fa4..ff43b4b7082 100644
--- a/src/sage/rings/padics/pow_computer_relative.pyx
+++ b/src/sage/rings/padics/pow_computer_relative.pyx
@@ -1,10 +1,10 @@
+# sage_setup: distribution = sagemath-pari
# distutils: libraries = NTL_LIBRARIES gmp m
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
# distutils: library_dirs = NTL_LIBDIR
# distutils: extra_link_args = NTL_LIBEXTRA
# distutils: language = c++
-# -*- coding: utf-8 -*-
r"""
A ``PowComputer`` for relative extensions
diff --git a/src/sage/rings/padics/precision_error.py b/src/sage/rings/padics/precision_error.py
index a536fa1a104..fa5d577936a 100644
--- a/src/sage/rings/padics/precision_error.py
+++ b/src/sage/rings/padics/precision_error.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Precision Error
diff --git a/src/sage/rings/padics/qadic_flint_CA.pxd b/src/sage/rings/padics/qadic_flint_CA.pxd
index 56cd4dbc03d..95ea3145a31 100644
--- a/src/sage/rings/padics/qadic_flint_CA.pxd
+++ b/src/sage/rings/padics/qadic_flint_CA.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from cypari2.gen cimport Gen as pari_gen
from sage.libs.flint.types cimport fmpz_poly_t
from sage.rings.padics.pow_computer_flint cimport PowComputer_flint_unram
diff --git a/src/sage/rings/padics/qadic_flint_CA.pyx b/src/sage/rings/padics/qadic_flint_CA.pyx
index a2a65359edc..58e37de3141 100644
--- a/src/sage/rings/padics/qadic_flint_CA.pyx
+++ b/src/sage/rings/padics/qadic_flint_CA.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
include "sage/libs/linkages/padics/fmpz_poly_unram.pxi"
include "sage/libs/linkages/padics/unram_shared.pxi"
include "CA_template.pxi"
diff --git a/src/sage/rings/padics/qadic_flint_CR.pxd b/src/sage/rings/padics/qadic_flint_CR.pxd
index 1f1765bc61c..b70f7bfe01e 100644
--- a/src/sage/rings/padics/qadic_flint_CR.pxd
+++ b/src/sage/rings/padics/qadic_flint_CR.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from cypari2.gen cimport Gen as pari_gen
from sage.libs.flint.types cimport fmpz_poly_t
from sage.rings.padics.pow_computer_flint cimport PowComputer_flint_unram
diff --git a/src/sage/rings/padics/qadic_flint_CR.pyx b/src/sage/rings/padics/qadic_flint_CR.pyx
index 8f7f268b60e..fc3f59d908e 100644
--- a/src/sage/rings/padics/qadic_flint_CR.pyx
+++ b/src/sage/rings/padics/qadic_flint_CR.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
include "sage/libs/linkages/padics/fmpz_poly_unram.pxi"
include "sage/libs/linkages/padics/unram_shared.pxi"
include "CR_template.pxi"
diff --git a/src/sage/rings/padics/qadic_flint_FM.pxd b/src/sage/rings/padics/qadic_flint_FM.pxd
index 7c2facd3aaa..ded2ef8b970 100644
--- a/src/sage/rings/padics/qadic_flint_FM.pxd
+++ b/src/sage/rings/padics/qadic_flint_FM.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from cypari2.gen cimport Gen as pari_gen
from sage.libs.flint.types cimport fmpz_poly_t
from sage.rings.padics.qadic_flint_FP cimport FPElement
diff --git a/src/sage/rings/padics/qadic_flint_FM.pyx b/src/sage/rings/padics/qadic_flint_FM.pyx
index 0a5e0563101..526873888cf 100644
--- a/src/sage/rings/padics/qadic_flint_FM.pyx
+++ b/src/sage/rings/padics/qadic_flint_FM.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
include "sage/libs/linkages/padics/fmpz_poly_unram.pxi"
include "sage/libs/linkages/padics/unram_shared.pxi"
include "FM_template.pxi"
diff --git a/src/sage/rings/padics/qadic_flint_FP.pxd b/src/sage/rings/padics/qadic_flint_FP.pxd
index 1a25be2fc08..5526168e40a 100644
--- a/src/sage/rings/padics/qadic_flint_FP.pxd
+++ b/src/sage/rings/padics/qadic_flint_FP.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from cypari2.gen cimport Gen as pari_gen
from sage.libs.flint.fmpz_poly cimport fmpz_poly_t
from sage.rings.padics.pow_computer_flint cimport PowComputer_flint_unram
diff --git a/src/sage/rings/padics/qadic_flint_FP.pyx b/src/sage/rings/padics/qadic_flint_FP.pyx
index 2d080dba429..4faf12cbc83 100644
--- a/src/sage/rings/padics/qadic_flint_FP.pyx
+++ b/src/sage/rings/padics/qadic_flint_FP.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
include "sage/libs/linkages/padics/fmpz_poly_unram.pxi"
diff --git a/src/sage/rings/padics/relative_extension_leaves.py b/src/sage/rings/padics/relative_extension_leaves.py
index 0310f2b21c3..c2ff4c399c2 100644
--- a/src/sage/rings/padics/relative_extension_leaves.py
+++ b/src/sage/rings/padics/relative_extension_leaves.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Relative extensions of `p`-adic rings
diff --git a/src/sage/rings/padics/relative_ramified_CA.pxd b/src/sage/rings/padics/relative_ramified_CA.pxd
index e87d051a24e..794f6305a7d 100644
--- a/src/sage/rings/padics/relative_ramified_CA.pxd
+++ b/src/sage/rings/padics/relative_ramified_CA.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
from sage.rings.padics.relative_ramified_CR cimport CRElement
diff --git a/src/sage/rings/padics/relative_ramified_CA.pyx b/src/sage/rings/padics/relative_ramified_CA.pyx
index 42337d04979..907110c5196 100644
--- a/src/sage/rings/padics/relative_ramified_CA.pyx
+++ b/src/sage/rings/padics/relative_ramified_CA.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.flint
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
include "CA_template.pxi"
diff --git a/src/sage/rings/padics/relative_ramified_CR.pxd b/src/sage/rings/padics/relative_ramified_CR.pxd
index e7c5cdc04ca..10607fa8a19 100644
--- a/src/sage/rings/padics/relative_ramified_CR.pxd
+++ b/src/sage/rings/padics/relative_ramified_CR.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
diff --git a/src/sage/rings/padics/relative_ramified_CR.pyx b/src/sage/rings/padics/relative_ramified_CR.pyx
index 5263c190966..633464e9968 100644
--- a/src/sage/rings/padics/relative_ramified_CR.pyx
+++ b/src/sage/rings/padics/relative_ramified_CR.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.ntl
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
include "CR_template.pxi"
diff --git a/src/sage/rings/padics/relative_ramified_FM.pxd b/src/sage/rings/padics/relative_ramified_FM.pxd
index cf2e1238463..5e19bfde27a 100644
--- a/src/sage/rings/padics/relative_ramified_FM.pxd
+++ b/src/sage/rings/padics/relative_ramified_FM.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
from sage.rings.padics.relative_ramified_FP cimport FPElement
diff --git a/src/sage/rings/padics/relative_ramified_FM.pyx b/src/sage/rings/padics/relative_ramified_FM.pyx
index 27d18035ccb..93f734d084c 100644
--- a/src/sage/rings/padics/relative_ramified_FM.pyx
+++ b/src/sage/rings/padics/relative_ramified_FM.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.flint
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
include "FM_template.pxi"
diff --git a/src/sage/rings/padics/relative_ramified_FP.pxd b/src/sage/rings/padics/relative_ramified_FP.pxd
index d060fbe1a3a..7528f6802f5 100644
--- a/src/sage/rings/padics/relative_ramified_FP.pxd
+++ b/src/sage/rings/padics/relative_ramified_FP.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
diff --git a/src/sage/rings/padics/relative_ramified_FP.pyx b/src/sage/rings/padics/relative_ramified_FP.pyx
index 3cbae5e55d3..38b4e61fe67 100644
--- a/src/sage/rings/padics/relative_ramified_FP.pyx
+++ b/src/sage/rings/padics/relative_ramified_FP.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.flint
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
include "FP_template.pxi"
diff --git a/src/sage/rings/padics/relaxed_template.pxi b/src/sage/rings/padics/relaxed_template.pxi
index 7068a1425a2..f7e2e376d22 100644
--- a/src/sage/rings/padics/relaxed_template.pxi
+++ b/src/sage/rings/padics/relaxed_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.flint
r"""
Template for relaxed `p`-adic rings and fields.
diff --git a/src/sage/rings/padics/relaxed_template_header.pxi b/src/sage/rings/padics/relaxed_template_header.pxi
index 7a57141e922..740c508d7ad 100644
--- a/src/sage/rings/padics/relaxed_template_header.pxi
+++ b/src/sage/rings/padics/relaxed_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
This file provides the declaration for the RelaxedElement class,
which collects common functionality for the different relaxed p-adic
diff --git a/src/sage/rings/padics/tests.py b/src/sage/rings/padics/tests.py
index 1d0e3f3c5d6..55d786b8701 100644
--- a/src/sage/rings/padics/tests.py
+++ b/src/sage/rings/padics/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
TESTS::
diff --git a/src/sage/rings/padics/tutorial.py b/src/sage/rings/padics/tutorial.py
index 45459711382..b4f502440a9 100644
--- a/src/sage/rings/padics/tutorial.py
+++ b/src/sage/rings/padics/tutorial.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Introduction to the `p`-adics
==========================================
diff --git a/src/sage/rings/padics/unramified_extension_generic.py b/src/sage/rings/padics/unramified_extension_generic.py
index 3ca4d07b2b0..049253423d4 100644
--- a/src/sage/rings/padics/unramified_extension_generic.py
+++ b/src/sage/rings/padics/unramified_extension_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Unramified Extension Generic
diff --git a/src/sage/rings/pari_ring.py b/src/sage/rings/pari_ring.py
index f34a45829a0..20856a69849 100644
--- a/src/sage/rings/pari_ring.py
+++ b/src/sage/rings/pari_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Ring of pari objects
diff --git a/src/sage/rings/polynomial/all.py b/src/sage/rings/polynomial/all.py
index 853f422bdc7..78e29ac0bb9 100644
--- a/src/sage/rings/polynomial/all.py
+++ b/src/sage/rings/polynomial/all.py
@@ -18,18 +18,8 @@
from sage.misc.lazy_import import lazy_import
-# Quotient of polynomial ring
-from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing
-from sage.rings.polynomial.polynomial_quotient_ring_element import PolynomialQuotientRingElement
-
-# Univariate Polynomial Rings
-from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
-from sage.rings.polynomial.polynomial_ring import polygen, polygens
-from sage.rings.polynomial.polynomial_element import Polynomial
-
-# Multivariate Polynomial Rings
-from sage.rings.polynomial.term_order import TermOrder
-from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function
+from sage.rings.polynomial.all__sagemath_categories import *
+from sage.rings.polynomial.all__sagemath_modules import *
# Generic convolution
from sage.rings.polynomial.convolution import convolution
@@ -38,19 +28,9 @@
from sage.rings.polynomial.polynomial_ring_constructor import BooleanPolynomialRing_constructor as BooleanPolynomialRing
# Laurent Polynomial Rings
-from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
lazy_import('sage.rings.polynomial.omega', 'MacMahonOmega')
-# Infinite Polynomial Rings
-from sage.rings.polynomial.infinite_polynomial_ring import InfinitePolynomialRing
-
-# Ore Polynomial Rings
-lazy_import('sage.rings.polynomial.ore_polynomial_ring', 'OrePolynomialRing')
-SkewPolynomialRing = OrePolynomialRing
-
-# Evaluation of cyclotomic polynomials
-from sage.rings.polynomial.cyclotomic import cyclotomic_value
-
# Integer-valued Univariate Polynomial Ring
lazy_import('sage.rings.polynomial.integer_valued_polynomials',
'IntegerValuedPolynomialRing')
+del lazy_import
diff --git a/src/sage/rings/polynomial/all__sagemath_brial.py b/src/sage/rings/polynomial/all__sagemath_brial.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/all__sagemath_categories.py b/src/sage/rings/polynomial/all__sagemath_categories.py
new file mode 100644
index 00000000000..2b79da92a4c
--- /dev/null
+++ b/src/sage/rings/polynomial/all__sagemath_categories.py
@@ -0,0 +1,21 @@
+# Quotient of polynomial ring
+from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing
+from sage.rings.polynomial.polynomial_quotient_ring_element import PolynomialQuotientRingElement
+
+# Univariate Polynomial Rings
+from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
+from sage.rings.polynomial.polynomial_ring import polygen, polygens
+from sage.rings.polynomial.polynomial_element import Polynomial
+
+# Multivariate Polynomial Rings
+from sage.rings.polynomial.term_order import TermOrder
+from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function
+
+# Infinite Polynomial Rings
+from sage.rings.polynomial.infinite_polynomial_ring import InfinitePolynomialRing
+
+# Laurent Polynomial Rings
+from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
+
+# Evaluation of cyclotomic polynomials
+from sage.rings.polynomial.cyclotomic import cyclotomic_value
diff --git a/src/sage/rings/polynomial/all__sagemath_flint.py b/src/sage/rings/polynomial/all__sagemath_flint.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/all__sagemath_linbox.py b/src/sage/rings/polynomial/all__sagemath_linbox.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/all__sagemath_modules.py b/src/sage/rings/polynomial/all__sagemath_modules.py
new file mode 100644
index 00000000000..647d682eb84
--- /dev/null
+++ b/src/sage/rings/polynomial/all__sagemath_modules.py
@@ -0,0 +1,7 @@
+
+from sage.misc.lazy_import import lazy_import
+
+# Ore Polynomial Rings
+lazy_import('sage.rings.polynomial.ore_polynomial_ring', 'OrePolynomialRing')
+SkewPolynomialRing = OrePolynomialRing
+del lazy_import
diff --git a/src/sage/rings/polynomial/all__sagemath_ntl.py b/src/sage/rings/polynomial/all__sagemath_ntl.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/all__sagemath_pari.py b/src/sage/rings/polynomial/all__sagemath_pari.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/all__sagemath_singular.py b/src/sage/rings/polynomial/all__sagemath_singular.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/all__sagemath_symbolics.py b/src/sage/rings/polynomial/all__sagemath_symbolics.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/rings/polynomial/binary_form_reduce.py b/src/sage/rings/polynomial/binary_form_reduce.py
index bb6b4296d1a..79f39cdd78d 100644
--- a/src/sage/rings/polynomial/binary_form_reduce.py
+++ b/src/sage/rings/polynomial/binary_form_reduce.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
r"""
Helper functions for reduction of binary forms.
diff --git a/src/sage/rings/polynomial/commutative_polynomial.pxd b/src/sage/rings/polynomial/commutative_polynomial.pxd
index c4a8956daa5..ec6d99c1208 100644
--- a/src/sage/rings/polynomial/commutative_polynomial.pxd
+++ b/src/sage/rings/polynomial/commutative_polynomial.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport CommutativeAlgebraElement
diff --git a/src/sage/rings/polynomial/commutative_polynomial.pyx b/src/sage/rings/polynomial/commutative_polynomial.pyx
index dc9f2cab8b7..1fb3de6b803 100644
--- a/src/sage/rings/polynomial/commutative_polynomial.pyx
+++ b/src/sage/rings/polynomial/commutative_polynomial.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef class CommutativePolynomial(CommutativeAlgebraElement):
r"""
Abstract base class for commutative polynomials in any number of variables
diff --git a/src/sage/rings/polynomial/complex_roots.py b/src/sage/rings/polynomial/complex_roots.py
index 602ba9ffc27..351a49cdada 100644
--- a/src/sage/rings/polynomial/complex_roots.py
+++ b/src/sage/rings/polynomial/complex_roots.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Isolate Complex Roots of Polynomials
diff --git a/src/sage/rings/polynomial/cyclotomic.pyx b/src/sage/rings/polynomial/cyclotomic.pyx
index a7339d23604..04cf7ad635b 100644
--- a/src/sage/rings/polynomial/cyclotomic.pyx
+++ b/src/sage/rings/polynomial/cyclotomic.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Fast calculation of cyclotomic polynomials
diff --git a/src/sage/rings/polynomial/evaluation_flint.pxd b/src/sage/rings/polynomial/evaluation_flint.pxd
index b699871ba0c..c8f9832b1d0 100644
--- a/src/sage/rings/polynomial/evaluation_flint.pxd
+++ b/src/sage/rings/polynomial/evaluation_flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.flint.types cimport fmpz_poly_t
from sage.libs.mpfr.types cimport mpfr_t
from sage.libs.mpfi.types cimport mpfi_t
diff --git a/src/sage/rings/polynomial/evaluation_flint.pyx b/src/sage/rings/polynomial/evaluation_flint.pyx
index 1c5909c37b0..7e5d2b6fb38 100644
--- a/src/sage/rings/polynomial/evaluation_flint.pyx
+++ b/src/sage/rings/polynomial/evaluation_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
r"""
Fast evaluation of polynomials (Horner's rule)
diff --git a/src/sage/rings/polynomial/evaluation_ntl.pxd b/src/sage/rings/polynomial/evaluation_ntl.pxd
index 9af0a0b9d40..f0e5e5d35c3 100644
--- a/src/sage/rings/polynomial/evaluation_ntl.pxd
+++ b/src/sage/rings/polynomial/evaluation_ntl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZX_c
from sage.libs.mpfr.types cimport mpfr_t
from sage.libs.mpfi.types cimport mpfi_t
diff --git a/src/sage/rings/polynomial/evaluation_ntl.pyx b/src/sage/rings/polynomial/evaluation_ntl.pyx
index 28b3917d3a1..e30a4dfd79b 100644
--- a/src/sage/rings/polynomial/evaluation_ntl.pyx
+++ b/src/sage/rings/polynomial/evaluation_ntl.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/polynomial/flatten.py b/src/sage/rings/polynomial/flatten.py
index ca2a491b94d..9f4e3661dcf 100644
--- a/src/sage/rings/polynomial/flatten.py
+++ b/src/sage/rings/polynomial/flatten.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Class to flatten polynomial rings over polynomial ring
diff --git a/src/sage/rings/polynomial/hilbert.pyx b/src/sage/rings/polynomial/hilbert.pyx
index 439d2ed893e..8acf82c1ca9 100644
--- a/src/sage/rings/polynomial/hilbert.pyx
+++ b/src/sage/rings/polynomial/hilbert.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-flint
r"""
Compute Hilbert series of monomial ideals
diff --git a/src/sage/rings/polynomial/ideal.py b/src/sage/rings/polynomial/ideal.py
index 9719c81ba41..7637a067d9c 100644
--- a/src/sage/rings/polynomial/ideal.py
+++ b/src/sage/rings/polynomial/ideal.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
Ideals in Univariate Polynomial Rings
diff --git a/src/sage/rings/polynomial/infinite_polynomial_element.py b/src/sage/rings/polynomial/infinite_polynomial_element.py
index b135404a020..67c6d819ad5 100644
--- a/src/sage/rings/polynomial/infinite_polynomial_element.py
+++ b/src/sage/rings/polynomial/infinite_polynomial_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Elements of Infinite Polynomial Rings
diff --git a/src/sage/rings/polynomial/infinite_polynomial_ring.py b/src/sage/rings/polynomial/infinite_polynomial_ring.py
index dbb71289f89..02e2949b1f9 100644
--- a/src/sage/rings/polynomial/infinite_polynomial_ring.py
+++ b/src/sage/rings/polynomial/infinite_polynomial_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Infinite Polynomial Rings
diff --git a/src/sage/rings/polynomial/laurent_polynomial.pxd b/src/sage/rings/polynomial/laurent_polynomial.pxd
index 8e9107aeb47..7ebefd0ba0e 100644
--- a/src/sage/rings/polynomial/laurent_polynomial.pxd
+++ b/src/sage/rings/polynomial/laurent_polynomial.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport CommutativeAlgebraElement, ModuleElement, RingElement, Element
diff --git a/src/sage/rings/polynomial/laurent_polynomial.pyx b/src/sage/rings/polynomial/laurent_polynomial.pyx
index a830ef7f510..831916cc804 100644
--- a/src/sage/rings/polynomial/laurent_polynomial.pyx
+++ b/src/sage/rings/polynomial/laurent_polynomial.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Elements of Laurent polynomial rings
"""
diff --git a/src/sage/rings/polynomial/laurent_polynomial_ideal.py b/src/sage/rings/polynomial/laurent_polynomial_ideal.py
index d569dc06101..5ebd560c0c0 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_ideal.py
+++ b/src/sage/rings/polynomial/laurent_polynomial_ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.singular sage.modules (because all doctests need laurent_polynomial_mpair, Groebner bases)
r"""
Ideals in Laurent polynomial rings.
diff --git a/src/sage/rings/polynomial/laurent_polynomial_mpair.pxd b/src/sage/rings/polynomial/laurent_polynomial_mpair.pxd
index 79f09def6aa..a93da987a1c 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_mpair.pxd
+++ b/src/sage/rings/polynomial/laurent_polynomial_mpair.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.polynomial.laurent_polynomial cimport LaurentPolynomial
from sage.rings.polynomial.multi_polynomial cimport MPolynomial
from sage.rings.polynomial.polydict cimport ETuple, PolyDict
diff --git a/src/sage/rings/polynomial/laurent_polynomial_mpair.pyx b/src/sage/rings/polynomial/laurent_polynomial_mpair.pyx
index c03239cebde..0122ba41ea2 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_mpair.pyx
+++ b/src/sage/rings/polynomial/laurent_polynomial_mpair.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements of multivariate Laurent polynomial rings
"""
diff --git a/src/sage/rings/polynomial/laurent_polynomial_ring.py b/src/sage/rings/polynomial/laurent_polynomial_ring.py
index 6d24de9f96f..b93926101a6 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_ring.py
+++ b/src/sage/rings/polynomial/laurent_polynomial_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Ring of Laurent Polynomials
diff --git a/src/sage/rings/polynomial/laurent_polynomial_ring_base.py b/src/sage/rings/polynomial/laurent_polynomial_ring_base.py
index 21cc29329e6..47ed7486875 100644
--- a/src/sage/rings/polynomial/laurent_polynomial_ring_base.py
+++ b/src/sage/rings/polynomial/laurent_polynomial_ring_base.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.modules
r"""
Ring of Laurent Polynomials (base class)
diff --git a/src/sage/rings/polynomial/msolve.py b/src/sage/rings/polynomial/msolve.py
index 47775f9bd8c..d15d498c040 100644
--- a/src/sage/rings/polynomial/msolve.py
+++ b/src/sage/rings/polynomial/msolve.py
@@ -1,4 +1,3 @@
-# coding: utf-8
r"""
Solution of polynomial systems using msolve
diff --git a/src/sage/rings/polynomial/multi_polynomial.pxd b/src/sage/rings/polynomial/multi_polynomial.pxd
index 9c96ce7a505..e6792991411 100644
--- a/src/sage/rings/polynomial/multi_polynomial.pxd
+++ b/src/sage/rings/polynomial/multi_polynomial.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.polynomial.commutative_polynomial cimport CommutativePolynomial
diff --git a/src/sage/rings/polynomial/multi_polynomial.pyx b/src/sage/rings/polynomial/multi_polynomial.pyx
index 37247f36571..2227d050886 100644
--- a/src/sage/rings/polynomial/multi_polynomial.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Base class for elements of multivariate polynomial rings
"""
diff --git a/src/sage/rings/polynomial/multi_polynomial_element.py b/src/sage/rings/polynomial/multi_polynomial_element.py
index d2355aa257b..a2320652bbd 100644
--- a/src/sage/rings/polynomial/multi_polynomial_element.py
+++ b/src/sage/rings/polynomial/multi_polynomial_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Generic Multivariate Polynomials
diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py
index f80f7b141a7..817f62b0f95 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ideal.py
+++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.singular
r"""
Ideals in multivariate polynomial rings
diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd b/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd
index 58f853973dc..8eb858d329f 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd
+++ b/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.libs.singular.decl cimport ideal, ring
cdef object singular_ideal_to_sage_sequence(ideal *i, ring *r, object parent)
diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx
index 14820418454..af6c00bd02e 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
"""
Direct low-level access to SINGULAR's Groebner basis engine via libSINGULAR
diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pxd b/src/sage/rings/polynomial/multi_polynomial_libsingular.pxd
index 5cc546112c9..c71bc792d00 100644
--- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pxd
+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.libs.singular.decl cimport poly, ring
from sage.rings.polynomial.multi_polynomial cimport MPolynomial_libsingular as MPolynomial_libsingular_base
diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
index 40fbc8c69aa..c314072f338 100644
--- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
r"""
Multivariate Polynomials via libSINGULAR
diff --git a/src/sage/rings/polynomial/multi_polynomial_ring.py b/src/sage/rings/polynomial/multi_polynomial_ring.py
index daed8502cdf..0b2761293ca 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ring.py
+++ b/src/sage/rings/polynomial/multi_polynomial_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Multivariate Polynomial Rings over Generic Rings
diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pxd b/src/sage/rings/polynomial/multi_polynomial_ring_base.pxd
index 4ce9033dadb..5e83879afab 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pxd
+++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-categories
+
from sage.rings.ring cimport CommutativeRing, Ring
from sage.structure.parent cimport Parent
diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx
index 4ad2a3f1fa9..2d52adf36e7 100644
--- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Base class for multivariate polynomial rings
"""
diff --git a/src/sage/rings/polynomial/multi_polynomial_sequence.py b/src/sage/rings/polynomial/multi_polynomial_sequence.py
index e9476061b57..214743af282 100644
--- a/src/sage/rings/polynomial/multi_polynomial_sequence.py
+++ b/src/sage/rings/polynomial/multi_polynomial_sequence.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Polynomial Sequences
diff --git a/src/sage/rings/polynomial/ore_function_element.py b/src/sage/rings/polynomial/ore_function_element.py
index f44dd8ad880..2f74a939c6b 100644
--- a/src/sage/rings/polynomial/ore_function_element.py
+++ b/src/sage/rings/polynomial/ore_function_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Fraction field elements of Ore polynomial rings
diff --git a/src/sage/rings/polynomial/ore_function_field.py b/src/sage/rings/polynomial/ore_function_field.py
index 8bb86d0dba8..aea971b1689 100644
--- a/src/sage/rings/polynomial/ore_function_field.py
+++ b/src/sage/rings/polynomial/ore_function_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Fraction fields of Ore polynomial rings
diff --git a/src/sage/rings/polynomial/ore_polynomial_element.pxd b/src/sage/rings/polynomial/ore_polynomial_element.pxd
index f38bcb0f0c5..f706b47fd7a 100644
--- a/src/sage/rings/polynomial/ore_polynomial_element.pxd
+++ b/src/sage/rings/polynomial/ore_polynomial_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport AlgebraElement
from sage.structure.parent cimport Parent
from sage.rings.integer cimport Integer
diff --git a/src/sage/rings/polynomial/ore_polynomial_element.pyx b/src/sage/rings/polynomial/ore_polynomial_element.pyx
index 47b5b7e6ad7..7cf35766986 100644
--- a/src/sage/rings/polynomial/ore_polynomial_element.pyx
+++ b/src/sage/rings/polynomial/ore_polynomial_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Univariate Ore polynomials
diff --git a/src/sage/rings/polynomial/ore_polynomial_ring.py b/src/sage/rings/polynomial/ore_polynomial_ring.py
index c8af00da1ad..c3452e5b7f3 100644
--- a/src/sage/rings/polynomial/ore_polynomial_ring.py
+++ b/src/sage/rings/polynomial/ore_polynomial_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Univariate Ore polynomial rings
diff --git a/src/sage/rings/polynomial/padics/all.py b/src/sage/rings/polynomial/padics/all.py
index e69de29bb2d..01c9cb07cd5 100644
--- a/src/sage/rings/polynomial/padics/all.py
+++ b/src/sage/rings/polynomial/padics/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-pari
diff --git a/src/sage/rings/polynomial/padics/polynomial_padic.py b/src/sage/rings/polynomial/padics/polynomial_padic.py
index 2e9e1f36da1..0ed7179909f 100644
--- a/src/sage/rings/polynomial/padics/polynomial_padic.py
+++ b/src/sage/rings/polynomial/padics/polynomial_padic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Base class for generic `p`-adic polynomials
diff --git a/src/sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py b/src/sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py
index ebae8acfcff..8bfb7270eeb 100644
--- a/src/sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py
+++ b/src/sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
# sage.doctest: needs sage.libs.ntl
"""
p-adic Capped Relative Dense Polynomials
diff --git a/src/sage/rings/polynomial/padics/polynomial_padic_flat.py b/src/sage/rings/polynomial/padics/polynomial_padic_flat.py
index 6d25e6a0a5f..a4fced39029 100644
--- a/src/sage/rings/polynomial/padics/polynomial_padic_flat.py
+++ b/src/sage/rings/polynomial/padics/polynomial_padic_flat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
p-adic Flat Polynomials
"""
diff --git a/src/sage/rings/polynomial/pbori/PyPolyBoRi.py b/src/sage/rings/polynomial/pbori/PyPolyBoRi.py
index 18ca366fb85..a33da76b252 100644
--- a/src/sage/rings/polynomial/pbori/PyPolyBoRi.py
+++ b/src/sage/rings/polynomial/pbori/PyPolyBoRi.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
r"""
PolyBoRi's interface to libpolybori/BRiAL
diff --git a/src/sage/rings/polynomial/pbori/__init__.py b/src/sage/rings/polynomial/pbori/__init__.py
index 325ed646516..257a9b7d6a7 100644
--- a/src/sage/rings/polynomial/pbori/__init__.py
+++ b/src/sage/rings/polynomial/pbori/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
"""The PolyBoRi package implements a framework for computations with Polynomials in Boolean Ring.
The core of PolyBoRi is a C++ library, which provides high-level data types for Boolean polynomials and monomials,
diff --git a/src/sage/rings/polynomial/pbori/blocks.py b/src/sage/rings/polynomial/pbori/blocks.py
index ba6b9c7b493..fac47ac31e6 100644
--- a/src/sage/rings/polynomial/pbori/blocks.py
+++ b/src/sage/rings/polynomial/pbori/blocks.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
import sys
from itertools import chain, islice
diff --git a/src/sage/rings/polynomial/pbori/cnf.py b/src/sage/rings/polynomial/pbori/cnf.py
index 266a6f0f8a8..f09c33e7f78 100644
--- a/src/sage/rings/polynomial/pbori/cnf.py
+++ b/src/sage/rings/polynomial/pbori/cnf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from random import Random
from sage.rings.polynomial.pbori.pbori import if_then_else as ite
from .PyPolyBoRi import Polynomial
diff --git a/src/sage/rings/polynomial/pbori/easy_polynomials.py b/src/sage/rings/polynomial/pbori/easy_polynomials.py
index 8451e7536ee..0b24da41ded 100644
--- a/src/sage/rings/polynomial/pbori/easy_polynomials.py
+++ b/src/sage/rings/polynomial/pbori/easy_polynomials.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .interpolate import variety_lex_leading_terms, nf_lex_points
from .pbori import easy_linear_factors
diff --git a/src/sage/rings/polynomial/pbori/fglm.py b/src/sage/rings/polynomial/pbori/fglm.py
index 60559b31b85..f9e0d3a4fe4 100644
--- a/src/sage/rings/polynomial/pbori/fglm.py
+++ b/src/sage/rings/polynomial/pbori/fglm.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .pbori import BooleSet, FGLMStrategy
from .PyPolyBoRi import BoolePolynomialVector, Polynomial
diff --git a/src/sage/rings/polynomial/pbori/frontend.py b/src/sage/rings/polynomial/pbori/frontend.py
index b0072cd5abf..94f03a44490 100644
--- a/src/sage/rings/polynomial/pbori/frontend.py
+++ b/src/sage/rings/polynomial/pbori/frontend.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
# Import basic functionality
r"""
This module defines an initial ring, and patches the declare_ring to use
diff --git a/src/sage/rings/polynomial/pbori/gbcore.py b/src/sage/rings/polynomial/pbori/gbcore.py
index 3eb6a73ff25..c33556d132b 100644
--- a/src/sage/rings/polynomial/pbori/gbcore.py
+++ b/src/sage/rings/polynomial/pbori/gbcore.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from copy import copy
from itertools import chain
from inspect import getfullargspec as getargspec
diff --git a/src/sage/rings/polynomial/pbori/gbrefs.py b/src/sage/rings/polynomial/pbori/gbrefs.py
index 70dc795cbab..2f617e3192a 100644
--- a/src/sage/rings/polynomial/pbori/gbrefs.py
+++ b/src/sage/rings/polynomial/pbori/gbrefs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
import gzip
from io import StringIO
import base64 as uu
diff --git a/src/sage/rings/polynomial/pbori/heuristics.py b/src/sage/rings/polynomial/pbori/heuristics.py
index 5dcfca16f87..053694a7ba2 100644
--- a/src/sage/rings/polynomial/pbori/heuristics.py
+++ b/src/sage/rings/polynomial/pbori/heuristics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .PyPolyBoRi import Polynomial, gauss_on_polys
diff --git a/src/sage/rings/polynomial/pbori/interpolate.py b/src/sage/rings/polynomial/pbori/interpolate.py
index 68f25d57bb2..a804ccc8ae7 100644
--- a/src/sage/rings/polynomial/pbori/interpolate.py
+++ b/src/sage/rings/polynomial/pbori/interpolate.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
# Copyright (c) 2005-2007 by The PolyBoRi Team
from time import process_time as clock
from random import Random
diff --git a/src/sage/rings/polynomial/pbori/interred.py b/src/sage/rings/polynomial/pbori/interred.py
index fe59be30896..8d7c3608284 100644
--- a/src/sage/rings/polynomial/pbori/interred.py
+++ b/src/sage/rings/polynomial/pbori/interred.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .pbori import ReductionStrategy
from .PyPolyBoRi import Polynomial
diff --git a/src/sage/rings/polynomial/pbori/ll.py b/src/sage/rings/polynomial/pbori/ll.py
index 71a01bd3b50..581e61f24d6 100644
--- a/src/sage/rings/polynomial/pbori/ll.py
+++ b/src/sage/rings/polynomial/pbori/ll.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .pbori import (top_index, if_then_else,
substitute_variables, BooleSet,
ll_red_nf_redsb, ll_red_nf_noredsb,
diff --git a/src/sage/rings/polynomial/pbori/nf.py b/src/sage/rings/polynomial/pbori/nf.py
index ac6e447c525..d35208f814f 100644
--- a/src/sage/rings/polynomial/pbori/nf.py
+++ b/src/sage/rings/polynomial/pbori/nf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from sage.rings.polynomial.pbori.pbori import mod_mon_set
from .pbori import (BooleSet, GroebnerStrategy, ReductionStrategy,
parallel_reduce, easy_linear_factors)
diff --git a/src/sage/rings/polynomial/pbori/parallel.py b/src/sage/rings/polynomial/pbori/parallel.py
index be10865dd50..8bd7ca89e8e 100644
--- a/src/sage/rings/polynomial/pbori/parallel.py
+++ b/src/sage/rings/polynomial/pbori/parallel.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
# coding=utf-8
r"""
parallel.py
diff --git a/src/sage/rings/polynomial/pbori/pbori.pxd b/src/sage/rings/polynomial/pbori/pbori.pxd
index ae4ac1353d2..1cb2e136f8b 100644
--- a/src/sage/rings/polynomial/pbori/pbori.pxd
+++ b/src/sage/rings/polynomial/pbori/pbori.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from libcpp.memory cimport unique_ptr, shared_ptr, make_shared
from sage.rings.polynomial.multi_polynomial_ring_base cimport MPolynomialRing_base, BooleanPolynomialRing_base
diff --git a/src/sage/rings/polynomial/pbori/pbori.pyx b/src/sage/rings/polynomial/pbori/pbori.pyx
index 702847ba332..426506e500f 100644
--- a/src/sage/rings/polynomial/pbori/pbori.pyx
+++ b/src/sage/rings/polynomial/pbori/pbori.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
# distutils: libraries = brial brial_groebner M4RI_LIBRARIES LIBPNG_LIBRARIES
# distutils: library_dirs = M4RI_LIBDIR LIBPNG_LIBDIR
# distutils: include_dirs = M4RI_INCDIR LIBPNG_INCDIR
diff --git a/src/sage/rings/polynomial/pbori/randompoly.py b/src/sage/rings/polynomial/pbori/randompoly.py
index 1e0dcd56189..bc9729c4749 100644
--- a/src/sage/rings/polynomial/pbori/randompoly.py
+++ b/src/sage/rings/polynomial/pbori/randompoly.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from random import Random
from pprint import pformat
diff --git a/src/sage/rings/polynomial/pbori/rank.py b/src/sage/rings/polynomial/pbori/rank.py
index bf16e6220ce..ec7160cb73c 100644
--- a/src/sage/rings/polynomial/pbori/rank.py
+++ b/src/sage/rings/polynomial/pbori/rank.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
def input_signals(p):
return list((p + p.lex_lead()).vars_as_monomial().variables())
diff --git a/src/sage/rings/polynomial/pbori/specialsets.py b/src/sage/rings/polynomial/pbori/specialsets.py
index 74f56c2faf5..5fbe7ae560f 100644
--- a/src/sage/rings/polynomial/pbori/specialsets.py
+++ b/src/sage/rings/polynomial/pbori/specialsets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .pbori import (top_index, if_then_else,
mod_mon_set, BooleSet, BooleConstant)
from .PyPolyBoRi import (Polynomial, Monomial, Variable)
diff --git a/src/sage/rings/polynomial/pbori/statistics.py b/src/sage/rings/polynomial/pbori/statistics.py
index 93cced307a7..ad6563c6a99 100644
--- a/src/sage/rings/polynomial/pbori/statistics.py
+++ b/src/sage/rings/polynomial/pbori/statistics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-brial
from .pbori import top_index, BooleConstant
from .PyPolyBoRi import Monomial, Polynomial
diff --git a/src/sage/rings/polynomial/plural.pxd b/src/sage/rings/polynomial/plural.pxd
index 90b79947592..0c1eaa5ec53 100644
--- a/src/sage/rings/polynomial/plural.pxd
+++ b/src/sage/rings/polynomial/plural.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
from sage.libs.singular.decl cimport *
from sage.rings.ring cimport Ring
from sage.structure.element cimport RingElement, Element
diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx
index 23dd2a11179..78e076c41cd 100644
--- a/src/sage/rings/polynomial/plural.pyx
+++ b/src/sage/rings/polynomial/plural.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-singular
r"""
Noncommutative polynomials via libSINGULAR/Plural
diff --git a/src/sage/rings/polynomial/polydict.pxd b/src/sage/rings/polynomial/polydict.pxd
index 69ddc888378..12c8f77843a 100644
--- a/src/sage/rings/polynomial/polydict.pxd
+++ b/src/sage/rings/polynomial/polydict.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef class PolyDict:
cdef dict __repn
diff --git a/src/sage/rings/polynomial/polydict.pyx b/src/sage/rings/polynomial/polydict.pyx
index e579052df95..c66babde7cf 100644
--- a/src/sage/rings/polynomial/polydict.pyx
+++ b/src/sage/rings/polynomial/polydict.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Generic data structures for multivariate polynomials
diff --git a/src/sage/rings/polynomial/polynomial_compiled.pxd b/src/sage/rings/polynomial/polynomial_compiled.pxd
index e1b11ec1a41..b0fee780414 100644
--- a/src/sage/rings/polynomial/polynomial_compiled.pxd
+++ b/src/sage/rings/polynomial/polynomial_compiled.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.misc.binary_tree import BinaryTree
from sage.misc.binary_tree cimport BinaryTree
diff --git a/src/sage/rings/polynomial/polynomial_compiled.pyx b/src/sage/rings/polynomial/polynomial_compiled.pyx
index 1a140067ad3..fd54f9117bb 100644
--- a/src/sage/rings/polynomial/polynomial_compiled.pyx
+++ b/src/sage/rings/polynomial/polynomial_compiled.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Polynomial Compilers
diff --git a/src/sage/rings/polynomial/polynomial_complex_arb.pxd b/src/sage/rings/polynomial/polynomial_complex_arb.pxd
index bda5cc66008..4c198a4b945 100644
--- a/src/sage/rings/polynomial/polynomial_complex_arb.pxd
+++ b/src/sage/rings/polynomial/polynomial_complex_arb.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
from sage.libs.flint.acb_poly cimport *
from sage.rings.polynomial.polynomial_element cimport Polynomial
diff --git a/src/sage/rings/polynomial/polynomial_complex_arb.pyx b/src/sage/rings/polynomial/polynomial_complex_arb.pyx
index da1ade2edcb..305bae3595f 100644
--- a/src/sage/rings/polynomial/polynomial_complex_arb.pyx
+++ b/src/sage/rings/polynomial/polynomial_complex_arb.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8
+# sage_setup: distribution = sagemath-flint
r"""
Univariate polynomials over `\CC` with Arb ball coefficients.
diff --git a/src/sage/rings/polynomial/polynomial_element.pxd b/src/sage/rings/polynomial/polynomial_element.pxd
index a8f2cf3057b..f5b9363cc4c 100644
--- a/src/sage/rings/polynomial/polynomial_element.pxd
+++ b/src/sage/rings/polynomial/polynomial_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element import Element
from sage.structure.element cimport Element, CommutativeAlgebraElement, ModuleElement
from sage.structure.parent cimport Parent
diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx
index e9b09e8f2b7..0c49f638fcf 100644
--- a/src/sage/rings/polynomial/polynomial_element.pyx
+++ b/src/sage/rings/polynomial/polynomial_element.pyx
@@ -1,4 +1,4 @@
-# coding: utf-8
+# sage_setup: distribution = sagemath-categories
"""
Univariate polynomial base class
diff --git a/src/sage/rings/polynomial/polynomial_element_generic.py b/src/sage/rings/polynomial/polynomial_element_generic.py
index 370d8f22fc6..ad49cf7aa7c 100644
--- a/src/sage/rings/polynomial/polynomial_element_generic.py
+++ b/src/sage/rings/polynomial/polynomial_element_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Univariate Polynomials over domains and fields
diff --git a/src/sage/rings/polynomial/polynomial_fateman.py b/src/sage/rings/polynomial/polynomial_fateman.py
index 8ccf13eba09..4270fb68c16 100644
--- a/src/sage/rings/polynomial/polynomial_fateman.py
+++ b/src/sage/rings/polynomial/polynomial_fateman.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"Polynomial multiplication by Kronecker substitution"
################################################################################
# Copyright (C) 2007 William Stein
diff --git a/src/sage/rings/polynomial/polynomial_gf2x.pxd b/src/sage/rings/polynomial/polynomial_gf2x.pxd
index 293715c0379..74ae9d5c08f 100644
--- a/src/sage/rings/polynomial/polynomial_gf2x.pxd
+++ b/src/sage/rings/polynomial/polynomial_gf2x.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
from sage.libs.ntl.GF2X cimport GF2X_c
ctypedef GF2X_c celement
diff --git a/src/sage/rings/polynomial/polynomial_gf2x.pyx b/src/sage/rings/polynomial/polynomial_gf2x.pyx
index c3bafe951ca..074a1d699e8 100644
--- a/src/sage/rings/polynomial/polynomial_gf2x.pyx
+++ b/src/sage/rings/polynomial/polynomial_gf2x.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-linbox
# distutils: libraries = gmp NTL_LIBRARIES
# distutils: library_dirs = NTL_LIBDIR
# distutils: extra_link_args = NTL_LIBEXTRA
diff --git a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pxd b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pxd
index b1b593d6a26..21feeec6c95 100644
--- a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pxd
+++ b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.flint.types cimport fmpz_poly_t
from sage.rings.polynomial.polynomial_element cimport Polynomial
diff --git a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx
index 3f38f23ffdc..39552eb8939 100644
--- a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx
+++ b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pxd b/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pxd
index fcd907e1abe..7df59e9bc75 100644
--- a/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pxd
+++ b/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.types cimport ZZX_c
from sage.rings.polynomial.polynomial_element cimport Polynomial
diff --git a/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pyx b/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pyx
index 6a0747d40e9..02591322bdc 100644
--- a/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pyx
+++ b/src/sage/rings/polynomial/polynomial_integer_dense_ntl.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pxd b/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pxd
index 6934acfee8d..96409fb31d5 100644
--- a/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pxd
+++ b/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.structure.element cimport Element, ModuleElement, RingElement
from sage.rings.polynomial.polynomial_element cimport Polynomial
diff --git a/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx b/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx
index 31dc850e982..454d70e3406 100644
--- a/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx
+++ b/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/polynomial/polynomial_number_field.pyx b/src/sage/rings/polynomial/polynomial_number_field.pyx
index 5bd458e5d12..835e899c76e 100644
--- a/src/sage/rings/polynomial/polynomial_number_field.pyx
+++ b/src/sage/rings/polynomial/polynomial_number_field.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Univariate polynomials over number fields
diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring.py b/src/sage/rings/polynomial/polynomial_quotient_ring.py
index 9560ffc6ddc..a8d17323190 100644
--- a/src/sage/rings/polynomial/polynomial_quotient_ring.py
+++ b/src/sage/rings/polynomial/polynomial_quotient_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.pari
"""
Quotients of Univariate Polynomial Rings
diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring_element.py b/src/sage/rings/polynomial/polynomial_quotient_ring_element.py
index b1414f7e715..ecc619159ee 100644
--- a/src/sage/rings/polynomial/polynomial_quotient_ring_element.py
+++ b/src/sage/rings/polynomial/polynomial_quotient_ring_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.pari
r"""
Elements of Quotients of Univariate Polynomial Rings
diff --git a/src/sage/rings/polynomial/polynomial_rational_flint.pxd b/src/sage/rings/polynomial/polynomial_rational_flint.pxd
index f4644f19d04..b5983a1b8e1 100644
--- a/src/sage/rings/polynomial/polynomial_rational_flint.pxd
+++ b/src/sage/rings/polynomial/polynomial_rational_flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
###############################################################################
# Copyright (C) 2010 Sebastian Pancratz #
# #
diff --git a/src/sage/rings/polynomial/polynomial_rational_flint.pyx b/src/sage/rings/polynomial/polynomial_rational_flint.pyx
index c67ddf1a4c5..1f813eba8b6 100644
--- a/src/sage/rings/polynomial/polynomial_rational_flint.pyx
+++ b/src/sage/rings/polynomial/polynomial_rational_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/polynomial/polynomial_real_mpfr_dense.pyx b/src/sage/rings/polynomial/polynomial_real_mpfr_dense.pyx
index 9aae84a3143..57ab881c523 100644
--- a/src/sage/rings/polynomial/polynomial_real_mpfr_dense.pyx
+++ b/src/sage/rings/polynomial/polynomial_real_mpfr_dense.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Dense univariate polynomials over `\RR`, implemented using MPFR
diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py
index d2dab0db512..ac97b65130c 100644
--- a/src/sage/rings/polynomial/polynomial_ring.py
+++ b/src/sage/rings/polynomial/polynomial_ring.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
Univariate Polynomial Rings
diff --git a/src/sage/rings/polynomial/polynomial_ring_constructor.py b/src/sage/rings/polynomial/polynomial_ring_constructor.py
index 2a1fb99131f..3e1b6eaad2d 100644
--- a/src/sage/rings/polynomial/polynomial_ring_constructor.py
+++ b/src/sage/rings/polynomial/polynomial_ring_constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Constructors for polynomial rings
diff --git a/src/sage/rings/polynomial/polynomial_ring_homomorphism.pxd b/src/sage/rings/polynomial/polynomial_ring_homomorphism.pxd
index eccb83b1ec2..5d6b14623c3 100644
--- a/src/sage/rings/polynomial/polynomial_ring_homomorphism.pxd
+++ b/src/sage/rings/polynomial/polynomial_ring_homomorphism.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.morphism cimport RingHomomorphism_from_base
cdef class PolynomialRingHomomorphism_from_base(RingHomomorphism_from_base):
diff --git a/src/sage/rings/polynomial/polynomial_ring_homomorphism.pyx b/src/sage/rings/polynomial/polynomial_ring_homomorphism.pyx
index 7e3e27dd520..a4476e0eec6 100644
--- a/src/sage/rings/polynomial/polynomial_ring_homomorphism.pyx
+++ b/src/sage/rings/polynomial/polynomial_ring_homomorphism.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Ring homomorphisms from a polynomial ring to another ring
diff --git a/src/sage/rings/polynomial/polynomial_singular_interface.py b/src/sage/rings/polynomial/polynomial_singular_interface.py
index 761fb0f0d69..399b50f6d79 100644
--- a/src/sage/rings/polynomial/polynomial_singular_interface.py
+++ b/src/sage/rings/polynomial/polynomial_singular_interface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Polynomial Interfaces to Singular
diff --git a/src/sage/rings/polynomial/polynomial_template.pxi b/src/sage/rings/polynomial/polynomial_template.pxi
index 6d9621eac67..8c73afa0e74 100644
--- a/src/sage/rings/polynomial/polynomial_template.pxi
+++ b/src/sage/rings/polynomial/polynomial_template.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
"""
Polynomial Template for C/C++ Library Interfaces
"""
diff --git a/src/sage/rings/polynomial/polynomial_template_header.pxi b/src/sage/rings/polynomial/polynomial_template_header.pxi
index 64ab106f314..091f92a9d05 100644
--- a/src/sage/rings/polynomial/polynomial_template_header.pxi
+++ b/src/sage/rings/polynomial/polynomial_template_header.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
"""
Polynomial Template for C/C++ Library Interfaces
"""
diff --git a/src/sage/rings/polynomial/polynomial_zmod_flint.pxd b/src/sage/rings/polynomial/polynomial_zmod_flint.pxd
index c6a92f3df6c..bfee3e8a037 100644
--- a/src/sage/rings/polynomial/polynomial_zmod_flint.pxd
+++ b/src/sage/rings/polynomial/polynomial_zmod_flint.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.libs.flint.types cimport nmod_poly_t, nmod_poly_struct, fmpz_poly_t
from sage.structure.parent cimport Parent
from sage.rings.polynomial.polynomial_integer_dense_flint cimport Polynomial_integer_dense_flint
diff --git a/src/sage/rings/polynomial/polynomial_zmod_flint.pyx b/src/sage/rings/polynomial/polynomial_zmod_flint.pyx
index d08395dc8e8..ad4ac79fa5b 100644
--- a/src/sage/rings/polynomial/polynomial_zmod_flint.pyx
+++ b/src/sage/rings/polynomial/polynomial_zmod_flint.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: libraries = gmp NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/polynomial/polynomial_zz_pex.pxd b/src/sage/rings/polynomial/polynomial_zz_pex.pxd
index ca60398ef68..3107ef76a39 100644
--- a/src/sage/rings/polynomial/polynomial_zz_pex.pxd
+++ b/src/sage/rings/polynomial/polynomial_zz_pex.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.ntl.ZZ_pEX cimport ZZ_pEX_c
from sage.libs.ntl.ntl_ZZ_pEContext cimport ZZ_pEContext_ptrs
diff --git a/src/sage/rings/polynomial/polynomial_zz_pex.pyx b/src/sage/rings/polynomial/polynomial_zz_pex.pyx
index b8c9d0bcbd8..006953f182f 100644
--- a/src/sage/rings/polynomial/polynomial_zz_pex.pyx
+++ b/src/sage/rings/polynomial/polynomial_zz_pex.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# sage.doctest: needs sage.libs.ntl sage.rings.finite_rings
# distutils: libraries = NTL_LIBRARIES gmp
# distutils: extra_compile_args = NTL_CFLAGS
diff --git a/src/sage/rings/polynomial/real_roots.pxd b/src/sage/rings/polynomial/real_roots.pxd
index 17b3ef6d8b8..e625d82b2b7 100644
--- a/src/sage/rings/polynomial/real_roots.pxd
+++ b/src/sage/rings/polynomial/real_roots.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.rings.rational cimport Rational
from sage.modules.vector_integer_dense cimport Vector_integer_dense
from sage.modules.vector_real_double_dense cimport Vector_real_double_dense
diff --git a/src/sage/rings/polynomial/real_roots.pyx b/src/sage/rings/polynomial/real_roots.pyx
index 99587194f5f..4952aa4a51a 100644
--- a/src/sage/rings/polynomial/real_roots.pyx
+++ b/src/sage/rings/polynomial/real_roots.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs numpy sage.libs.linbox
"""
Isolate Real Roots of Real Polynomials
diff --git a/src/sage/rings/polynomial/refine_root.pyx b/src/sage/rings/polynomial/refine_root.pyx
index 32a9ce8c8e4..1d5b806abd3 100644
--- a/src/sage/rings/polynomial/refine_root.pyx
+++ b/src/sage/rings/polynomial/refine_root.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
"""
Refine polynomial roots using Newton--Raphson
diff --git a/src/sage/rings/polynomial/skew_polynomial_element.pxd b/src/sage/rings/polynomial/skew_polynomial_element.pxd
index 1eb38b5b474..aad3d2791f9 100644
--- a/src/sage/rings/polynomial/skew_polynomial_element.pxd
+++ b/src/sage/rings/polynomial/skew_polynomial_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.polynomial.ore_polynomial_element cimport OrePolynomial_generic_dense
cdef class SkewPolynomial_generic_dense(OrePolynomial_generic_dense):
diff --git a/src/sage/rings/polynomial/skew_polynomial_element.pyx b/src/sage/rings/polynomial/skew_polynomial_element.pyx
index cf5fd9bd090..80d29f54703 100644
--- a/src/sage/rings/polynomial/skew_polynomial_element.pyx
+++ b/src/sage/rings/polynomial/skew_polynomial_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Univariate skew polynomials
diff --git a/src/sage/rings/polynomial/skew_polynomial_finite_field.pxd b/src/sage/rings/polynomial/skew_polynomial_finite_field.pxd
index f27cfdd6ff1..acb0e1bfe5e 100644
--- a/src/sage/rings/polynomial/skew_polynomial_finite_field.pxd
+++ b/src/sage/rings/polynomial/skew_polynomial_finite_field.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.polynomial.skew_polynomial_finite_order cimport SkewPolynomial_finite_order_dense
cdef class SkewPolynomial_finite_field_dense (SkewPolynomial_finite_order_dense):
diff --git a/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx b/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx
index b9538d07263..35a8f87f910 100644
--- a/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx
+++ b/src/sage/rings/polynomial/skew_polynomial_finite_field.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.rings.finite_rings
r"""
Univariate dense skew polynomials over finite fields
diff --git a/src/sage/rings/polynomial/skew_polynomial_finite_order.pxd b/src/sage/rings/polynomial/skew_polynomial_finite_order.pxd
index 438773a39ef..876c15e505c 100644
--- a/src/sage/rings/polynomial/skew_polynomial_finite_order.pxd
+++ b/src/sage/rings/polynomial/skew_polynomial_finite_order.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.polynomial.skew_polynomial_element cimport SkewPolynomial_generic_dense
cdef class SkewPolynomial_finite_order_dense (SkewPolynomial_generic_dense):
diff --git a/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx b/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx
index fcda4420378..28ed9e7e3fb 100644
--- a/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx
+++ b/src/sage/rings/polynomial/skew_polynomial_finite_order.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat sage.rings.finite_rings
r"""
Univariate dense skew polynomials over a field with a finite order automorphism
diff --git a/src/sage/rings/polynomial/skew_polynomial_ring.py b/src/sage/rings/polynomial/skew_polynomial_ring.py
index db5285ff66f..f962fd1add5 100644
--- a/src/sage/rings/polynomial/skew_polynomial_ring.py
+++ b/src/sage/rings/polynomial/skew_polynomial_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.combinat
r"""
Univariate skew polynomial rings
diff --git a/src/sage/rings/polynomial/symmetric_ideal.py b/src/sage/rings/polynomial/symmetric_ideal.py
index b8a5c2dea6f..927e0f95bbb 100644
--- a/src/sage/rings/polynomial/symmetric_ideal.py
+++ b/src/sage/rings/polynomial/symmetric_ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.singular
"""
Symmetric Ideals of Infinite Polynomial Rings
diff --git a/src/sage/rings/polynomial/symmetric_reduction.pxd b/src/sage/rings/polynomial/symmetric_reduction.pxd
index 49bd292f995..5b6a616ca54 100644
--- a/src/sage/rings/polynomial/symmetric_reduction.pxd
+++ b/src/sage/rings/polynomial/symmetric_reduction.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
cdef class SymmetricReductionStrategy:
cdef list _lm
cdef list _lengths
diff --git a/src/sage/rings/polynomial/symmetric_reduction.pyx b/src/sage/rings/polynomial/symmetric_reduction.pyx
index e873fcc5397..ddac28e3431 100644
--- a/src/sage/rings/polynomial/symmetric_reduction.pyx
+++ b/src/sage/rings/polynomial/symmetric_reduction.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.libs.singular
r"""
Symmetric Reduction of Infinite Polynomials
diff --git a/src/sage/rings/polynomial/term_order.py b/src/sage/rings/polynomial/term_order.py
index 4a3e78fe879..b8cd7e3615e 100644
--- a/src/sage/rings/polynomial/term_order.py
+++ b/src/sage/rings/polynomial/term_order.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Term orders
diff --git a/src/sage/rings/polynomial/toy_buchberger.py b/src/sage/rings/polynomial/toy_buchberger.py
index 4edd2491b6d..1e63c1cdc35 100644
--- a/src/sage/rings/polynomial/toy_buchberger.py
+++ b/src/sage/rings/polynomial/toy_buchberger.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Educational versions of Groebner basis algorithms
diff --git a/src/sage/rings/polynomial/toy_d_basis.py b/src/sage/rings/polynomial/toy_d_basis.py
index ec783625140..5a5f79169d4 100644
--- a/src/sage/rings/polynomial/toy_d_basis.py
+++ b/src/sage/rings/polynomial/toy_d_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Educational version of the `d`-Groebner basis algorithm over PIDs
diff --git a/src/sage/rings/polynomial/toy_variety.py b/src/sage/rings/polynomial/toy_variety.py
index 7a393595b61..d413a6a9892 100644
--- a/src/sage/rings/polynomial/toy_variety.py
+++ b/src/sage/rings/polynomial/toy_variety.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Educational versions of Groebner basis algorithms: triangular factorization
diff --git a/src/sage/rings/polynomial/weil/all.py b/src/sage/rings/polynomial/weil/all.py
index 6b00c9bee88..94578021f15 100644
--- a/src/sage/rings/polynomial/weil/all.py
+++ b/src/sage/rings/polynomial/weil/all.py
@@ -1,2 +1,4 @@
+# sage_setup: distribution = sagemath-flint
from sage.misc.lazy_import import lazy_import
lazy_import('sage.rings.polynomial.weil.weil_polynomials', 'WeilPolynomials')
+del lazy_import
diff --git a/src/sage/rings/polynomial/weil/weil_polynomials.pyx b/src/sage/rings/polynomial/weil/weil_polynomials.pyx
index 6a73e2748e4..8ba5b96d431 100755
--- a/src/sage/rings/polynomial/weil/weil_polynomials.pyx
+++ b/src/sage/rings/polynomial/weil/weil_polynomials.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Iterator for Weil polynomials.
diff --git a/src/sage/rings/power_series_mpoly.pxd b/src/sage/rings/power_series_mpoly.pxd
index d8816e694b7..ad0723ed59c 100644
--- a/src/sage/rings/power_series_mpoly.pxd
+++ b/src/sage/rings/power_series_mpoly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport ModuleElement
from sage.rings.power_series_ring_element cimport PowerSeries
diff --git a/src/sage/rings/power_series_mpoly.pyx b/src/sage/rings/power_series_mpoly.pyx
index 714d939c30b..5da16c563f0 100644
--- a/src/sage/rings/power_series_mpoly.pyx
+++ b/src/sage/rings/power_series_mpoly.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# NOT ready to be used -- possibly should be deleted.
from sage.rings.power_series_ring_element cimport PowerSeries
diff --git a/src/sage/rings/power_series_pari.pxd b/src/sage/rings/power_series_pari.pxd
index 35b37929c33..d421ff4eda0 100644
--- a/src/sage/rings/power_series_pari.pxd
+++ b/src/sage/rings/power_series_pari.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from cypari2.gen cimport Gen as pari_gen
from sage.rings.power_series_ring_element cimport PowerSeries
diff --git a/src/sage/rings/power_series_pari.pyx b/src/sage/rings/power_series_pari.pyx
index 24792c94123..dae90e27970 100644
--- a/src/sage/rings/power_series_pari.pyx
+++ b/src/sage/rings/power_series_pari.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Power series implemented using PARI
diff --git a/src/sage/rings/power_series_poly.pxd b/src/sage/rings/power_series_poly.pxd
index e37e1fb26cf..e31c8bf6feb 100644
--- a/src/sage/rings/power_series_poly.pxd
+++ b/src/sage/rings/power_series_poly.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.power_series_ring_element cimport PowerSeries
from sage.rings.polynomial.polynomial_element cimport Polynomial
from sage.categories.action cimport Action
diff --git a/src/sage/rings/power_series_poly.pyx b/src/sage/rings/power_series_poly.pyx
index e1c45ff5d51..17cbdc8a6b8 100644
--- a/src/sage/rings/power_series_poly.pyx
+++ b/src/sage/rings/power_series_poly.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
Power Series Methods
diff --git a/src/sage/rings/power_series_ring.py b/src/sage/rings/power_series_ring.py
index f4f97428011..757d77007ee 100644
--- a/src/sage/rings/power_series_ring.py
+++ b/src/sage/rings/power_series_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Power Series Rings
diff --git a/src/sage/rings/power_series_ring_element.pxd b/src/sage/rings/power_series_ring_element.pxd
index e5c031ee147..d9b04b287ed 100644
--- a/src/sage/rings/power_series_ring_element.pxd
+++ b/src/sage/rings/power_series_ring_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport AlgebraElement, RingElement
cdef class PowerSeries(AlgebraElement):
diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx
index 1505a49a995..dd213ed786d 100644
--- a/src/sage/rings/power_series_ring_element.pyx
+++ b/src/sage/rings/power_series_ring_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Power Series
diff --git a/src/sage/rings/puiseux_series_ring.py b/src/sage/rings/puiseux_series_ring.py
index f5e02b28f82..ab91427ce67 100644
--- a/src/sage/rings/puiseux_series_ring.py
+++ b/src/sage/rings/puiseux_series_ring.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Puiseux Series Ring
diff --git a/src/sage/rings/puiseux_series_ring_element.pxd b/src/sage/rings/puiseux_series_ring_element.pxd
index 50852a42d33..1719cd3e118 100644
--- a/src/sage/rings/puiseux_series_ring_element.pxd
+++ b/src/sage/rings/puiseux_series_ring_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport AlgebraElement, ModuleElement
from sage.rings.laurent_series_ring_element cimport LaurentSeries
diff --git a/src/sage/rings/puiseux_series_ring_element.pyx b/src/sage/rings/puiseux_series_ring_element.pyx
index 21b1cb5b70f..b685ecf3335 100644
--- a/src/sage/rings/puiseux_series_ring_element.pyx
+++ b/src/sage/rings/puiseux_series_ring_element.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Puiseux Series Ring Element
diff --git a/src/sage/rings/qqbar.py b/src/sage/rings/qqbar.py
index 4e4454988ca..1d29cd444d3 100644
--- a/src/sage/rings/qqbar.py
+++ b/src/sage/rings/qqbar.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: needs sage.libs.linbox
r"""
Algebraic numbers
diff --git a/src/sage/rings/qqbar_decorators.py b/src/sage/rings/qqbar_decorators.py
index 13d6d562824..32d05130a4e 100644
--- a/src/sage/rings/qqbar_decorators.py
+++ b/src/sage/rings/qqbar_decorators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.number_field
"""
QQbar decorators
diff --git a/src/sage/rings/quotient_ring.py b/src/sage/rings/quotient_ring.py
index de336620a34..df14fe04a86 100644
--- a/src/sage/rings/quotient_ring.py
+++ b/src/sage/rings/quotient_ring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Quotient Rings
diff --git a/src/sage/rings/quotient_ring_element.py b/src/sage/rings/quotient_ring_element.py
index cbedaf6ecdf..e94005cf7c6 100644
--- a/src/sage/rings/quotient_ring_element.py
+++ b/src/sage/rings/quotient_ring_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Quotient Ring Elements
diff --git a/src/sage/rings/rational.pxd b/src/sage/rings/rational.pxd
index f42f86515d3..aeb8ab68841 100644
--- a/src/sage/rings/rational.pxd
+++ b/src/sage/rings/rational.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.libs.gmp.types cimport mpq_t
cimport sage.structure.element
diff --git a/src/sage/rings/rational.pyx b/src/sage/rings/rational.pyx
index 92fa6fd8fc3..bd0522a959e 100644
--- a/src/sage/rings/rational.pyx
+++ b/src/sage/rings/rational.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# distutils: libraries = NTL_LIBRARIES
# distutils: extra_compile_args = NTL_CFLAGS
# distutils: include_dirs = NTL_INCDIR
diff --git a/src/sage/rings/rational_field.py b/src/sage/rings/rational_field.py
index 7efb5e963d6..c9849d68de9 100644
--- a/src/sage/rings/rational_field.py
+++ b/src/sage/rings/rational_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Field `\QQ` of Rational Numbers
diff --git a/src/sage/rings/real_arb.pxd b/src/sage/rings/real_arb.pxd
index 6743fa1c80b..2ff63e73623 100644
--- a/src/sage/rings/real_arb.pxd
+++ b/src/sage/rings/real_arb.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-flint
+
from sage.libs.flint.arb cimport arb_t
from sage.libs.mpfi.types cimport mpfi_t
from sage.rings.real_mpfi cimport RealIntervalField_class, RealIntervalFieldElement
diff --git a/src/sage/rings/real_arb.pyx b/src/sage/rings/real_arb.pyx
index 4e989f23695..fc919571eab 100644
--- a/src/sage/rings/real_arb.pyx
+++ b/src/sage/rings/real_arb.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8
+# sage_setup: distribution = sagemath-flint
r"""
Arbitrary precision real balls
diff --git a/src/sage/rings/real_double.pxd b/src/sage/rings/real_double.pxd
index 06d4121ef26..8eb81cb039d 100644
--- a/src/sage/rings/real_double.pxd
+++ b/src/sage/rings/real_double.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.element cimport RingElement, ModuleElement, Element, FieldElement
from sage.rings.ring cimport Field
cimport sage.rings.abc
diff --git a/src/sage/rings/real_double.pyx b/src/sage/rings/real_double.pyx
index 17842e7e80e..fcfac14a96e 100644
--- a/src/sage/rings/real_double.pyx
+++ b/src/sage/rings/real_double.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Double precision floating point real numbers
diff --git a/src/sage/rings/real_double_element_gsl.pxd b/src/sage/rings/real_double_element_gsl.pxd
index 8025174d15c..7cc9786efa5 100644
--- a/src/sage/rings/real_double_element_gsl.pxd
+++ b/src/sage/rings/real_double_element_gsl.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.real_double cimport RealDoubleElement
diff --git a/src/sage/rings/real_double_element_gsl.pyx b/src/sage/rings/real_double_element_gsl.pyx
index 9d5f2d9a93b..d75682fe467 100644
--- a/src/sage/rings/real_double_element_gsl.pyx
+++ b/src/sage/rings/real_double_element_gsl.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Double Precision Real Numbers, implementation using GSL
"""
diff --git a/src/sage/rings/real_field.py b/src/sage/rings/real_field.py
index 7b8e17eb5b9..97e039fa20a 100644
--- a/src/sage/rings/real_field.py
+++ b/src/sage/rings/real_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
def create_RealField(prec=53, type="MPFR", rnd="RNDN", sci_not=0):
"""
Create a real field with given precision, type, rounding mode and
diff --git a/src/sage/rings/real_interval_absolute.pyx b/src/sage/rings/real_interval_absolute.pyx
index d190329872e..e8011bacb5a 100644
--- a/src/sage/rings/real_interval_absolute.pyx
+++ b/src/sage/rings/real_interval_absolute.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# sage.doctest: # needs sage.symbolic
"""
Real intervals with a fixed absolute precision
diff --git a/src/sage/rings/real_lazy.pxd b/src/sage/rings/real_lazy.pxd
index 60a6580a550..18dcaded7cc 100644
--- a/src/sage/rings/real_lazy.pxd
+++ b/src/sage/rings/real_lazy.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.rings.ring cimport Field
from sage.structure.element cimport RingElement, ModuleElement, Element, FieldElement
diff --git a/src/sage/rings/real_lazy.pyx b/src/sage/rings/real_lazy.pyx
index 1ba394741fa..331a1d008b0 100644
--- a/src/sage/rings/real_lazy.pyx
+++ b/src/sage/rings/real_lazy.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.real_interval_field sage.rings.real_mpfr
"""
Lazy real and complex numbers
diff --git a/src/sage/rings/real_mpfi.pxd b/src/sage/rings/real_mpfi.pxd
index f107dbdd89a..d1275e93e6e 100644
--- a/src/sage/rings/real_mpfi.pxd
+++ b/src/sage/rings/real_mpfi.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
from sage.libs.mpfr.types cimport mpfr_prec_t
from sage.libs.mpfi.types cimport mpfi_t
diff --git a/src/sage/rings/real_mpfi.pyx b/src/sage/rings/real_mpfi.pyx
index da282aceb3b..9ef9464e93c 100644
--- a/src/sage/rings/real_mpfi.pyx
+++ b/src/sage/rings/real_mpfi.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
r"""
Arbitrary precision real intervals using MPFI
diff --git a/src/sage/rings/real_mpfr.pxd b/src/sage/rings/real_mpfr.pxd
index 785d402836c..25be80603e3 100644
--- a/src/sage/rings/real_mpfr.pxd
+++ b/src/sage/rings/real_mpfr.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.libs.mpfr.types cimport mpfr_rnd_t, mpfr_t, mpfr_prec_t
cimport sage.rings.abc
diff --git a/src/sage/rings/real_mpfr.pyx b/src/sage/rings/real_mpfr.pyx
index 1100a63e3fe..6d60172f2a7 100644
--- a/src/sage/rings/real_mpfr.pyx
+++ b/src/sage/rings/real_mpfr.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Arbitrary precision floating point real numbers using GNU MPFR
diff --git a/src/sage/rings/ring.pxd b/src/sage/rings/ring.pxd
index e74638b91e2..9dcfcf56ef8 100644
--- a/src/sage/rings/ring.pxd
+++ b/src/sage/rings/ring.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.parent_gens cimport ParentWithGens
cpdef bint _is_Field(x) except -2
diff --git a/src/sage/rings/ring.pyx b/src/sage/rings/ring.pyx
index fe346931ce5..b0920479290 100644
--- a/src/sage/rings/ring.pyx
+++ b/src/sage/rings/ring.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Rings
diff --git a/src/sage/rings/ring_extension.pxd b/src/sage/rings/ring_extension.pxd
index 478bd6eef75..917cd952430 100644
--- a/src/sage/rings/ring_extension.pxd
+++ b/src/sage/rings/ring_extension.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.categories.map cimport Map
from sage.rings.ring cimport CommutativeRing
diff --git a/src/sage/rings/ring_extension.pyx b/src/sage/rings/ring_extension.pyx
index 9c214a1ffee..4bd09913c03 100644
--- a/src/sage/rings/ring_extension.pyx
+++ b/src/sage/rings/ring_extension.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Extension of rings
diff --git a/src/sage/rings/ring_extension_conversion.pxd b/src/sage/rings/ring_extension_conversion.pxd
index e3815a411ba..11c2b2b291c 100644
--- a/src/sage/rings/ring_extension_conversion.pxd
+++ b/src/sage/rings/ring_extension_conversion.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.ring_extension cimport RingExtension_generic
diff --git a/src/sage/rings/ring_extension_conversion.pyx b/src/sage/rings/ring_extension_conversion.pyx
index eeb6077cd0a..dbe7d65954b 100644
--- a/src/sage/rings/ring_extension_conversion.pyx
+++ b/src/sage/rings/ring_extension_conversion.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.finite_rings
#############################################################################
diff --git a/src/sage/rings/ring_extension_element.pxd b/src/sage/rings/ring_extension_element.pxd
index 6b62ad58c06..af53fd9876e 100644
--- a/src/sage/rings/ring_extension_element.pxd
+++ b/src/sage/rings/ring_extension_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.ring cimport CommutativeRing
from sage.structure.element cimport Element
from sage.structure.element cimport CommutativeAlgebraElement
diff --git a/src/sage/rings/ring_extension_element.pyx b/src/sage/rings/ring_extension_element.pyx
index 729793d3bfa..c6785d71b39 100644
--- a/src/sage/rings/ring_extension_element.pyx
+++ b/src/sage/rings/ring_extension_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements lying in extension of rings
diff --git a/src/sage/rings/ring_extension_homset.py b/src/sage/rings/ring_extension_homset.py
index d2c13a11f0e..df9e3fd149b 100644
--- a/src/sage/rings/ring_extension_homset.py
+++ b/src/sage/rings/ring_extension_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.rings.finite_rings
r"""
Homset between extensions of rings
diff --git a/src/sage/rings/ring_extension_morphism.pxd b/src/sage/rings/ring_extension_morphism.pxd
index a02aff31a50..ad62ba49a81 100644
--- a/src/sage/rings/ring_extension_morphism.pxd
+++ b/src/sage/rings/ring_extension_morphism.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.structure.element cimport Element
from sage.categories.map cimport Map
from sage.rings.morphism cimport RingMap
diff --git a/src/sage/rings/ring_extension_morphism.pyx b/src/sage/rings/ring_extension_morphism.pyx
index f861d015a35..2049aa2dabc 100644
--- a/src/sage/rings/ring_extension_morphism.pyx
+++ b/src/sage/rings/ring_extension_morphism.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Morphisms between extension of rings
diff --git a/src/sage/rings/semirings/all.py b/src/sage/rings/semirings/all.py
index b14da38328a..d186e4b9fc7 100644
--- a/src/sage/rings/semirings/all.py
+++ b/src/sage/rings/semirings/all.py
@@ -1,2 +1,4 @@
-from .non_negative_integer_semiring import NonNegativeIntegerSemiring, NN
-from .tropical_semiring import TropicalSemiring
+# sage_setup: distribution = sagemath-categories
+
+from sage.rings.semirings.non_negative_integer_semiring import NonNegativeIntegerSemiring, NN
+from sage.rings.semirings.tropical_semiring import TropicalSemiring
diff --git a/src/sage/rings/semirings/non_negative_integer_semiring.py b/src/sage/rings/semirings/non_negative_integer_semiring.py
index 1c01fc47eb5..b07e35ee970 100644
--- a/src/sage/rings/semirings/non_negative_integer_semiring.py
+++ b/src/sage/rings/semirings/non_negative_integer_semiring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Non Negative Integer Semiring
"""
diff --git a/src/sage/rings/semirings/tropical_semiring.pyx b/src/sage/rings/semirings/tropical_semiring.pyx
index 2922298e286..d7c21b95a09 100644
--- a/src/sage/rings/semirings/tropical_semiring.pyx
+++ b/src/sage/rings/semirings/tropical_semiring.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Tropical Semirings
diff --git a/src/sage/rings/sum_of_squares.pxd b/src/sage/rings/sum_of_squares.pxd
index d9f2e5ae4fd..a091a030d36 100644
--- a/src/sage/rings/sum_of_squares.pxd
+++ b/src/sage/rings/sum_of_squares.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-categories
from libc.stdint cimport uint_fast32_t, uint32_t
cdef int two_squares_c(uint_fast32_t n, uint_fast32_t res[2]) noexcept
diff --git a/src/sage/rings/sum_of_squares.pyx b/src/sage/rings/sum_of_squares.pyx
index 5cd916690de..c296e2f58c9 100644
--- a/src/sage/rings/sum_of_squares.pyx
+++ b/src/sage/rings/sum_of_squares.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# distutils: libraries = m
r"""
Fast decomposition of small integers into sums of squares
diff --git a/src/sage/rings/tate_algebra.py b/src/sage/rings/tate_algebra.py
index 61563f71497..1fed9d9a386 100644
--- a/src/sage/rings/tate_algebra.py
+++ b/src/sage/rings/tate_algebra.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Tate algebras
diff --git a/src/sage/rings/tate_algebra_element.pxd b/src/sage/rings/tate_algebra_element.pxd
index 3cafe330fb0..b6b3642bb55 100644
--- a/src/sage/rings/tate_algebra_element.pxd
+++ b/src/sage/rings/tate_algebra_element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.structure.element cimport Element
from sage.structure.element cimport MonoidElement
from sage.structure.element cimport CommutativeAlgebraElement
diff --git a/src/sage/rings/tate_algebra_element.pyx b/src/sage/rings/tate_algebra_element.pyx
index ffd400d5159..5fc24fe4010 100644
--- a/src/sage/rings/tate_algebra_element.pyx
+++ b/src/sage/rings/tate_algebra_element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Tate algebra element
diff --git a/src/sage/rings/tate_algebra_ideal.pxd b/src/sage/rings/tate_algebra_ideal.pxd
index e5581e06b8c..010c29201f1 100644
--- a/src/sage/rings/tate_algebra_ideal.pxd
+++ b/src/sage/rings/tate_algebra_ideal.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.rings.tate_algebra_element cimport TateAlgebraTerm
from sage.rings.tate_algebra_element cimport TateAlgebraElement
diff --git a/src/sage/rings/tate_algebra_ideal.pyx b/src/sage/rings/tate_algebra_ideal.pyx
index 802984874b7..45e427280b5 100644
--- a/src/sage/rings/tate_algebra_ideal.pyx
+++ b/src/sage/rings/tate_algebra_ideal.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
"""
Ideals in Tate algebra
diff --git a/src/sage/rings/tests.py b/src/sage/rings/tests.py
index c7a00f83bc2..6830c1bf96a 100644
--- a/src/sage/rings/tests.py
+++ b/src/sage/rings/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Tests for rings
diff --git a/src/sage/rings/universal_cyclotomic_field.py b/src/sage/rings/universal_cyclotomic_field.py
index a9b558bdb02..1868f019600 100644
--- a/src/sage/rings/universal_cyclotomic_field.py
+++ b/src/sage/rings/universal_cyclotomic_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-gap
# sage.doctest: needs sage.libs.gap
r"""
Universal cyclotomic field
diff --git a/src/sage/rings/valuation/all.py b/src/sage/rings/valuation/all.py
index 3f90ef9daa0..052f7265e1f 100644
--- a/src/sage/rings/valuation/all.py
+++ b/src/sage/rings/valuation/all.py
@@ -1,5 +1,7 @@
+# sage_setup: distribution = sagemath-pari
from sage.misc.lazy_import import lazy_import
lazy_import('sage.rings.valuation.gauss_valuation', 'GaussValuation')
lazy_import('sage.rings.valuation', 'valuations_catalog', 'valuations')
lazy_import('sage.rings.valuation.value_group', 'DiscreteValueGroup')
+del lazy_import
diff --git a/src/sage/rings/valuation/augmented_valuation.py b/src/sage/rings/valuation/augmented_valuation.py
index 3c98e082bc4..75094ab06ca 100644
--- a/src/sage/rings/valuation/augmented_valuation.py
+++ b/src/sage/rings/valuation/augmented_valuation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
r"""
Augmented valuations on polynomial rings
diff --git a/src/sage/rings/valuation/developing_valuation.py b/src/sage/rings/valuation/developing_valuation.py
index d7724642415..88e48f7626a 100644
--- a/src/sage/rings/valuation/developing_valuation.py
+++ b/src/sage/rings/valuation/developing_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Valuations on polynomial rings based on `\phi`-adic expansions
diff --git a/src/sage/rings/valuation/gauss_valuation.py b/src/sage/rings/valuation/gauss_valuation.py
index a69977ae4b3..a9d135bfd49 100644
--- a/src/sage/rings/valuation/gauss_valuation.py
+++ b/src/sage/rings/valuation/gauss_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
"""
Gauss valuations on polynomial rings
diff --git a/src/sage/rings/valuation/inductive_valuation.py b/src/sage/rings/valuation/inductive_valuation.py
index 9991aaac2e1..5d5d6977ef0 100644
--- a/src/sage/rings/valuation/inductive_valuation.py
+++ b/src/sage/rings/valuation/inductive_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Inductive valuations on polynomial rings
diff --git a/src/sage/rings/valuation/limit_valuation.py b/src/sage/rings/valuation/limit_valuation.py
index fa23e2c0a69..947581cb120 100644
--- a/src/sage/rings/valuation/limit_valuation.py
+++ b/src/sage/rings/valuation/limit_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Valuations which are defined as limits of valuations.
diff --git a/src/sage/rings/valuation/mapped_valuation.py b/src/sage/rings/valuation/mapped_valuation.py
index 2c4aa42799d..098ea95fd01 100644
--- a/src/sage/rings/valuation/mapped_valuation.py
+++ b/src/sage/rings/valuation/mapped_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Valuations which are implemented through a map to another valuation
diff --git a/src/sage/rings/valuation/scaled_valuation.py b/src/sage/rings/valuation/scaled_valuation.py
index 84249392e3a..6a22cd18dc0 100644
--- a/src/sage/rings/valuation/scaled_valuation.py
+++ b/src/sage/rings/valuation/scaled_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Valuations which are scaled versions of another valuation
diff --git a/src/sage/rings/valuation/trivial_valuation.py b/src/sage/rings/valuation/trivial_valuation.py
index ddbf9d7e1b7..03fc43be725 100644
--- a/src/sage/rings/valuation/trivial_valuation.py
+++ b/src/sage/rings/valuation/trivial_valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Trivial valuations
diff --git a/src/sage/rings/valuation/valuation.py b/src/sage/rings/valuation/valuation.py
index 0121f6a6b25..e432478220d 100644
--- a/src/sage/rings/valuation/valuation.py
+++ b/src/sage/rings/valuation/valuation.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Discrete valuations
diff --git a/src/sage/rings/valuation/valuation_space.py b/src/sage/rings/valuation/valuation_space.py
index 485a622f33c..1fee27025c7 100644
--- a/src/sage/rings/valuation/valuation_space.py
+++ b/src/sage/rings/valuation/valuation_space.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Spaces of valuations
diff --git a/src/sage/rings/valuation/valuations_catalog.py b/src/sage/rings/valuation/valuations_catalog.py
index 64effaf13a6..86227c4cf6b 100644
--- a/src/sage/rings/valuation/valuations_catalog.py
+++ b/src/sage/rings/valuation/valuations_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-pari
from sage.misc.lazy_import import lazy_import
lazy_import('sage.rings.padics.padic_valuation', 'pAdicValuation')
diff --git a/src/sage/rings/valuation/value_group.py b/src/sage/rings/valuation/value_group.py
index b39eec60bdd..6939504a732 100644
--- a/src/sage/rings/valuation/value_group.py
+++ b/src/sage/rings/valuation/value_group.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-pari
r"""
Value groups of discrete valuations
diff --git a/src/sage/sandpiles/all.py b/src/sage/sandpiles/all.py
index 7ddccbf3869..32bf34baaa4 100644
--- a/src/sage/sandpiles/all.py
+++ b/src/sage/sandpiles/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
from sage.misc.lazy_import import lazy_import
lazy_import('sage.sandpiles.sandpile', 'Sandpile')
@@ -9,3 +10,4 @@
lazy_import('sage.sandpiles.sandpile', 'triangle_sandpile')
lazy_import('sage.sandpiles.examples', 'sandpiles')
+del lazy_import
diff --git a/src/sage/sandpiles/examples.py b/src/sage/sandpiles/examples.py
index 980dec77036..1b55dfd3a18 100644
--- a/src/sage/sandpiles/examples.py
+++ b/src/sage/sandpiles/examples.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-graphs
"""
Examples of Sandpile
diff --git a/src/sage/sandpiles/sandpile.py b/src/sage/sandpiles/sandpile.py
index 57838f7647b..198322b341d 100644
--- a/src/sage/sandpiles/sandpile.py
+++ b/src/sage/sandpiles/sandpile.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Sandpiles
diff --git a/src/sage/sat/all.py b/src/sage/sat/all.py
index d4beeb2a9a1..a3300520490 100644
--- a/src/sage/sat/all.py
+++ b/src/sage/sat/all.py
@@ -1,2 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.misc.lazy_import import lazy_import
lazy_import('sage.sat.solvers.satsolver', 'SAT')
+del lazy_import
diff --git a/src/sage/sat/boolean_polynomials.py b/src/sage/sat/boolean_polynomials.py
index 08cf03cf18c..3cbbaa4d81e 100644
--- a/src/sage/sat/boolean_polynomials.py
+++ b/src/sage/sat/boolean_polynomials.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: optional - pycryptosat, needs sage.modules sage.rings.polynomial.pbori
"""
SAT Functions for Boolean Polynomials
diff --git a/src/sage/sat/converters/__init__.py b/src/sage/sat/converters/__init__.py
index bb7b60bbb9c..1a945d09d04 100644
--- a/src/sage/sat/converters/__init__.py
+++ b/src/sage/sat/converters/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from sage.misc.lazy_import import lazy_import
from .anf2cnf import ANF2CNFConverter
diff --git a/src/sage/sat/converters/anf2cnf.py b/src/sage/sat/converters/anf2cnf.py
index e6dd330feff..220be966e1e 100644
--- a/src/sage/sat/converters/anf2cnf.py
+++ b/src/sage/sat/converters/anf2cnf.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Abstract ANF to CNF Converter
diff --git a/src/sage/sat/converters/polybori.py b/src/sage/sat/converters/polybori.py
index a159c7434f4..b23ff65496d 100644
--- a/src/sage/sat/converters/polybori.py
+++ b/src/sage/sat/converters/polybori.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.rings.polynomial.pbori
"""
An ANF to CNF Converter using a Dense/Sparse Strategy
diff --git a/src/sage/sat/solvers/__init__.py b/src/sage/sat/solvers/__init__.py
index 27b47db2d51..d3dbc2f9a75 100644
--- a/src/sage/sat/solvers/__init__.py
+++ b/src/sage/sat/solvers/__init__.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
from .satsolver import SatSolver
from .cryptominisat import CryptoMiniSat
diff --git a/src/sage/sat/solvers/cryptominisat.py b/src/sage/sat/solvers/cryptominisat.py
index 82f1ffd9086..ecc8281d72f 100644
--- a/src/sage/sat/solvers/cryptominisat.py
+++ b/src/sage/sat/solvers/cryptominisat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
CryptoMiniSat Solver
diff --git a/src/sage/sat/solvers/dimacs.py b/src/sage/sat/solvers/dimacs.py
index 0c3060eb4c3..b23a1c19ead 100644
--- a/src/sage/sat/solvers/dimacs.py
+++ b/src/sage/sat/solvers/dimacs.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
SAT-Solvers via DIMACS Files
diff --git a/src/sage/sat/solvers/picosat.py b/src/sage/sat/solvers/picosat.py
index a88f69da883..01b1997d085 100644
--- a/src/sage/sat/solvers/picosat.py
+++ b/src/sage/sat/solvers/picosat.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
r"""
PicoSAT Solver
diff --git a/src/sage/sat/solvers/sat_lp.py b/src/sage/sat/solvers/sat_lp.py
index 9b65b1d241d..e7a50b6aee5 100644
--- a/src/sage/sat/solvers/sat_lp.py
+++ b/src/sage/sat/solvers/sat_lp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
# sage.doctest: needs sage.numerical.mip
r"""
Solve SAT problems Integer Linear Programming
diff --git a/src/sage/sat/solvers/satsolver.pxd b/src/sage/sat/solvers/satsolver.pxd
index 7fd0ac7e798..14d8d2cf880 100644
--- a/src/sage/sat/solvers/satsolver.pxd
+++ b/src/sage/sat/solvers/satsolver.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-combinat
cdef class SatSolver:
pass
diff --git a/src/sage/sat/solvers/satsolver.pyx b/src/sage/sat/solvers/satsolver.pyx
index 521577fda71..6c82fb247db 100644
--- a/src/sage/sat/solvers/satsolver.pyx
+++ b/src/sage/sat/solvers/satsolver.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-combinat
"""
Abstract SAT Solver
diff --git a/src/sage/schemes/affine/affine_homset.py b/src/sage/schemes/affine/affine_homset.py
index b6570bd6f6d..ccba02e4d92 100644
--- a/src/sage/schemes/affine/affine_homset.py
+++ b/src/sage/schemes/affine/affine_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Set of homomorphisms between two affine schemes
diff --git a/src/sage/schemes/affine/affine_morphism.py b/src/sage/schemes/affine/affine_morphism.py
index e55f75b4e18..4a4335df7d9 100644
--- a/src/sage/schemes/affine/affine_morphism.py
+++ b/src/sage/schemes/affine/affine_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Morphisms on affine schemes
diff --git a/src/sage/schemes/affine/affine_point.py b/src/sage/schemes/affine/affine_point.py
index 00779dbb2d6..b271656bf90 100644
--- a/src/sage/schemes/affine/affine_point.py
+++ b/src/sage/schemes/affine/affine_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Points on affine varieties
diff --git a/src/sage/schemes/affine/affine_rational_point.py b/src/sage/schemes/affine/affine_rational_point.py
index 4ac17a60d79..8b6837a63ef 100644
--- a/src/sage/schemes/affine/affine_rational_point.py
+++ b/src/sage/schemes/affine/affine_rational_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumeration of rational points on affine schemes
diff --git a/src/sage/schemes/affine/affine_space.py b/src/sage/schemes/affine/affine_space.py
index 05d3c5b59e3..766d7b34ea4 100644
--- a/src/sage/schemes/affine/affine_space.py
+++ b/src/sage/schemes/affine/affine_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Affine `n` space over a ring
"""
diff --git a/src/sage/schemes/affine/affine_subscheme.py b/src/sage/schemes/affine/affine_subscheme.py
index c32b2d29e7c..5618c7b538f 100644
--- a/src/sage/schemes/affine/affine_subscheme.py
+++ b/src/sage/schemes/affine/affine_subscheme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subschemes of affine space
diff --git a/src/sage/schemes/affine/all.py b/src/sage/schemes/affine/all.py
index 68a540a9f1f..ac08e989715 100644
--- a/src/sage/schemes/affine/all.py
+++ b/src/sage/schemes/affine/all.py
@@ -1,8 +1,9 @@
+# sage_setup: distribution = sagemath-categories
"""nodoctest
all.py -- export of affine to Sage
"""
-#*****************************************************************************
+# *****************************************************************************
#
# Sage: Open Source Mathematical Software
#
@@ -17,8 +18,8 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-from .affine_space import AffineSpace
-from .affine_rational_point import enum_affine_rational_field, enum_affine_finite_field
+from sage.schemes.affine.affine_space import AffineSpace
+from sage.schemes.affine.affine_rational_point import enum_affine_rational_field, enum_affine_finite_field
diff --git a/src/sage/schemes/all.py b/src/sage/schemes/all.py
index 23858c6f0c8..412ade4da0d 100644
--- a/src/sage/schemes/all.py
+++ b/src/sage/schemes/all.py
@@ -1,8 +1,9 @@
+# sage_setup: distribution = sagemath-schemes
"""
all.py -- export of schemes to Sage
"""
-#*****************************************************************************
+# *****************************************************************************
#
# Sage: Open Source Mathematical Software
#
@@ -17,31 +18,24 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-from .jacobians.all import *
+from sage.schemes.all__sagemath_categories import *
+from sage.schemes.all__sagemath_polyhedra import *
-from .hyperelliptic_curves.all import *
+from sage.schemes.jacobians.all import *
-from .curves.all import *
+from sage.schemes.hyperelliptic_curves.all import *
-from .plane_conics.all import *
+from sage.schemes.curves.all import *
-from .elliptic_curves.all import *
+from sage.schemes.plane_conics.all import *
-from .plane_quartics.all import *
+from sage.schemes.elliptic_curves.all import *
-from .generic.all import *
+from sage.schemes.plane_quartics.all import *
-from .toric.all import *
+from sage.schemes.cyclic_covers.all import *
-from .affine.all import *
-
-from .projective.all import *
-
-from .product_projective.all import *
-
-from .cyclic_covers.all import *
-
-from .berkovich.all import *
+from sage.schemes.berkovich.all import *
diff --git a/src/sage/schemes/all__sagemath_categories.py b/src/sage/schemes/all__sagemath_categories.py
new file mode 100644
index 00000000000..02c6722874e
--- /dev/null
+++ b/src/sage/schemes/all__sagemath_categories.py
@@ -0,0 +1,4 @@
+from sage.schemes.generic.all import *
+from sage.schemes.affine.all import *
+from sage.schemes.projective.all import *
+from sage.schemes.product_projective.all import *
diff --git a/src/sage/schemes/all__sagemath_ntl.py b/src/sage/schemes/all__sagemath_ntl.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/schemes/all__sagemath_polyhedra.py b/src/sage/schemes/all__sagemath_polyhedra.py
new file mode 100644
index 00000000000..2dc39d42014
--- /dev/null
+++ b/src/sage/schemes/all__sagemath_polyhedra.py
@@ -0,0 +1 @@
+from sage.schemes.toric.all import *
diff --git a/src/sage/schemes/berkovich/all.py b/src/sage/schemes/berkovich/all.py
index cc7af01a057..ca838f75500 100644
--- a/src/sage/schemes/berkovich/all.py
+++ b/src/sage/schemes/berkovich/all.py
@@ -1,5 +1,6 @@
+# sage_setup: distribution = sagemath-schemes
"""nodoctest
all.py -- export of Berkovich spaces to all of Sage
"""
-from .berkovich_space import Berkovich_Cp_Affine, Berkovich_Cp_Projective
+from sage.schemes.berkovich.berkovich_space import Berkovich_Cp_Affine, Berkovich_Cp_Projective
diff --git a/src/sage/schemes/berkovich/berkovich_cp_element.py b/src/sage/schemes/berkovich/berkovich_cp_element.py
index bc8307f29e5..637d30f491d 100644
--- a/src/sage/schemes/berkovich/berkovich_cp_element.py
+++ b/src/sage/schemes/berkovich/berkovich_cp_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Elements of Berkovich space.
diff --git a/src/sage/schemes/berkovich/berkovich_space.py b/src/sage/schemes/berkovich/berkovich_space.py
index 100c2807b9d..fb915f6d85b 100644
--- a/src/sage/schemes/berkovich/berkovich_space.py
+++ b/src/sage/schemes/berkovich/berkovich_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Berkovich Space over `\CC_p`
diff --git a/src/sage/schemes/curves/affine_curve.py b/src/sage/schemes/curves/affine_curve.py
index 992cd528803..f0786bf4a04 100644
--- a/src/sage/schemes/curves/affine_curve.py
+++ b/src/sage/schemes/curves/affine_curve.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.singular
r"""
Affine curves
diff --git a/src/sage/schemes/curves/all.py b/src/sage/schemes/curves/all.py
index 147c2e1e6fe..a9177144f01 100644
--- a/src/sage/schemes/curves/all.py
+++ b/src/sage/schemes/curves/all.py
@@ -1,8 +1,9 @@
+# sage_setup: distribution = sagemath-schemes
"""
Plane curves
"""
-#*****************************************************************************
+# *****************************************************************************
#
# Sage: Open Source Mathematical Software
#
@@ -17,9 +18,9 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-from .constructor import Curve
+from sage.schemes.curves.constructor import Curve
-from .projective_curve import Hasse_bounds
+from sage.schemes.curves.projective_curve import Hasse_bounds
diff --git a/src/sage/schemes/curves/closed_point.py b/src/sage/schemes/curves/closed_point.py
index 147d60b200a..d7d04b9ae86 100644
--- a/src/sage/schemes/curves/closed_point.py
+++ b/src/sage/schemes/curves/closed_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Closed points of integral curves
diff --git a/src/sage/schemes/curves/constructor.py b/src/sage/schemes/curves/constructor.py
index 3564cfd73cc..7b70740e5e9 100644
--- a/src/sage/schemes/curves/constructor.py
+++ b/src/sage/schemes/curves/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.singular
"""
Curve constructor
diff --git a/src/sage/schemes/curves/curve.py b/src/sage/schemes/curves/curve.py
index cacc05f884b..a4c353d097e 100644
--- a/src/sage/schemes/curves/curve.py
+++ b/src/sage/schemes/curves/curve.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.singular
"""
Base class of curves
diff --git a/src/sage/schemes/curves/point.py b/src/sage/schemes/curves/point.py
index 373dc6ce19f..e379b73c813 100644
--- a/src/sage/schemes/curves/point.py
+++ b/src/sage/schemes/curves/point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.singular
"""
Rational points of curves
diff --git a/src/sage/schemes/curves/projective_curve.py b/src/sage/schemes/curves/projective_curve.py
index bb19979b3c4..2c95365167b 100644
--- a/src/sage/schemes/curves/projective_curve.py
+++ b/src/sage/schemes/curves/projective_curve.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.singular
r"""
Projective curves
diff --git a/src/sage/schemes/curves/zariski_vankampen.py b/src/sage/schemes/curves/zariski_vankampen.py
index 0fc01b81347..af7703b62cc 100644
--- a/src/sage/schemes/curves/zariski_vankampen.py
+++ b/src/sage/schemes/curves/zariski_vankampen.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.geometry.polyhedron sage.graphs sage.groups sage.rings.number_field
r"""
Zariski-Van Kampen method implementation
diff --git a/src/sage/schemes/cyclic_covers/all.py b/src/sage/schemes/cyclic_covers/all.py
index b1fcd806e7a..1cb47c3ca74 100644
--- a/src/sage/schemes/cyclic_covers/all.py
+++ b/src/sage/schemes/cyclic_covers/all.py
@@ -1 +1,3 @@
-from .constructor import CyclicCover
+# sage_setup: distribution = sagemath-schemes
+
+from sage.schemes.cyclic_covers.constructor import CyclicCover
diff --git a/src/sage/schemes/cyclic_covers/charpoly_frobenius.py b/src/sage/schemes/cyclic_covers/charpoly_frobenius.py
index e28289e1d84..853fb442419 100644
--- a/src/sage/schemes/cyclic_covers/charpoly_frobenius.py
+++ b/src/sage/schemes/cyclic_covers/charpoly_frobenius.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
Computation of the Frobenius polynomial using Newton's identities
diff --git a/src/sage/schemes/cyclic_covers/constructor.py b/src/sage/schemes/cyclic_covers/constructor.py
index 99250257121..8e20721651f 100644
--- a/src/sage/schemes/cyclic_covers/constructor.py
+++ b/src/sage/schemes/cyclic_covers/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Cyclic cover curve constructor
"""
diff --git a/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py b/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py
index 1f92bb1b0b7..df47239e67e 100644
--- a/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py
+++ b/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.finite_rings
r"""
diff --git a/src/sage/schemes/cyclic_covers/cycliccover_generic.py b/src/sage/schemes/cyclic_covers/cycliccover_generic.py
index 9bca8814dad..b8a921ad788 100644
--- a/src/sage/schemes/cyclic_covers/cycliccover_generic.py
+++ b/src/sage/schemes/cyclic_covers/cycliccover_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Cyclic covers curves over a general ring
diff --git a/src/sage/schemes/elliptic_curves/BSD.py b/src/sage/schemes/elliptic_curves/BSD.py
index 90b4fdaad7f..c4c0beaf9af 100644
--- a/src/sage/schemes/elliptic_curves/BSD.py
+++ b/src/sage/schemes/elliptic_curves/BSD.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"Birch and Swinnerton-Dyer formulas"
from sage.arith.misc import prime_divisors
diff --git a/src/sage/schemes/elliptic_curves/Qcurves.py b/src/sage/schemes/elliptic_curves/Qcurves.py
index e0f55597f90..41c3edb19b9 100644
--- a/src/sage/schemes/elliptic_curves/Qcurves.py
+++ b/src/sage/schemes/elliptic_curves/Qcurves.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Testing whether elliptic curves over number fields are `\QQ`-curves
diff --git a/src/sage/schemes/elliptic_curves/all.py b/src/sage/schemes/elliptic_curves/all.py
index f4abce51a62..5010cebcdce 100644
--- a/src/sage/schemes/elliptic_curves/all.py
+++ b/src/sage/schemes/elliptic_curves/all.py
@@ -1,8 +1,9 @@
+# sage_setup: distribution = sagemath-schemes
"""
Exported elliptic curves functionality
"""
-#*****************************************************************************
+# *****************************************************************************
# Copyright (C) 2005 William Stein
#
# Distributed under the terms of the GNU General Public License (GPL)
@@ -14,34 +15,35 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-from .constructor import (EllipticCurve,
- EllipticCurve_from_c4c6,
- EllipticCurve_from_j,
- EllipticCurve_from_cubic,
- EllipticCurves_with_good_reduction_outside_S)
+from sage.schemes.elliptic_curves.constructor import (EllipticCurve,
+ EllipticCurve_from_c4c6,
+ EllipticCurve_from_j,
+ EllipticCurve_from_cubic,
+ EllipticCurves_with_good_reduction_outside_S)
from sage.misc.lazy_import import lazy_import
lazy_import('sage.schemes.elliptic_curves.jacobian', 'Jacobian')
+lazy_import('sage.schemes.elliptic_curves.ell_finite_field', 'special_supersingular_curve')
+
lazy_import('sage.schemes.elliptic_curves.ell_rational_field',
['cremona_curves', 'cremona_optimal_curves'])
-lazy_import('sage.schemes.elliptic_curves.ell_finite_field', 'special_supersingular_curve')
-
-from .cm import ( cm_orders,
- cm_j_invariants,
- cm_j_invariants_and_orders,
- hilbert_class_polynomial )
+from sage.schemes.elliptic_curves.cm import (cm_orders,
+ cm_j_invariants,
+ cm_j_invariants_and_orders,
+ hilbert_class_polynomial)
lazy_import('sage.schemes.elliptic_curves.ec_database', 'elliptic_curves')
-from .kodaira_symbol import KodairaSymbol
+from sage.schemes.elliptic_curves.kodaira_symbol import KodairaSymbol
-from .ell_curve_isogeny import EllipticCurveIsogeny, isogeny_codomain_from_kernel
+from sage.schemes.elliptic_curves.ell_curve_isogeny import EllipticCurveIsogeny, isogeny_codomain_from_kernel
lazy_import('sage.schemes.elliptic_curves.mod_poly', 'classical_modular_polynomial')
-from .heegner import heegner_points, heegner_point
+from sage.schemes.elliptic_curves.heegner import heegner_points, heegner_point
+del lazy_import
diff --git a/src/sage/schemes/elliptic_curves/cardinality.py b/src/sage/schemes/elliptic_curves/cardinality.py
index aaa1cf85542..da502f50767 100644
--- a/src/sage/schemes/elliptic_curves/cardinality.py
+++ b/src/sage/schemes/elliptic_curves/cardinality.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.finite_rings
"""
Specific algorithms to compute cardinality of elliptic curves over a finite field
diff --git a/src/sage/schemes/elliptic_curves/cm.py b/src/sage/schemes/elliptic_curves/cm.py
index e893b07051f..143ebee91f0 100644
--- a/src/sage/schemes/elliptic_curves/cm.py
+++ b/src/sage/schemes/elliptic_curves/cm.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Complex multiplication for elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/constructor.py b/src/sage/schemes/elliptic_curves/constructor.py
index b99e0ab3458..9e242437756 100644
--- a/src/sage/schemes/elliptic_curves/constructor.py
+++ b/src/sage/schemes/elliptic_curves/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Elliptic curve constructor
diff --git a/src/sage/schemes/elliptic_curves/ec_database.py b/src/sage/schemes/elliptic_curves/ec_database.py
index 34099d620bb..21402f62d5e 100644
--- a/src/sage/schemes/elliptic_curves/ec_database.py
+++ b/src/sage/schemes/elliptic_curves/ec_database.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Tables of elliptic curves of given rank
diff --git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
index 3dc8ea0f11e..b9bd9167195 100644
--- a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
+++ b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Isogenies
diff --git a/src/sage/schemes/elliptic_curves/ell_egros.py b/src/sage/schemes/elliptic_curves/ell_egros.py
index 42c8d0738be..aca2cdca48f 100644
--- a/src/sage/schemes/elliptic_curves/ell_egros.py
+++ b/src/sage/schemes/elliptic_curves/ell_egros.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Elliptic curves with prescribed good reduction
diff --git a/src/sage/schemes/elliptic_curves/ell_field.py b/src/sage/schemes/elliptic_curves/ell_field.py
index 3efa79ff759..a4a76d1b2ba 100644
--- a/src/sage/schemes/elliptic_curves/ell_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Elliptic curves over a general field
diff --git a/src/sage/schemes/elliptic_curves/ell_finite_field.py b/src/sage/schemes/elliptic_curves/ell_finite_field.py
index 6d97f3094b4..bbe54ddb55a 100644
--- a/src/sage/schemes/elliptic_curves/ell_finite_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_finite_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Elliptic curves over finite fields
@@ -1369,22 +1370,18 @@ def set_order(self, value, *, check=True, num_checks=8):
EXAMPLES:
- This example illustrates basic usage.
+ This example illustrates basic usage::
- ::
-
- sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 6
- sage: E.set_order(6)
+ sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 12
+ sage: E.set_order(12)
sage: E.order()
- 6
+ 12
sage: E.order() * E.random_point()
(0 : 1 : 0)
We now give a more interesting case, the NIST-P521 curve. Its
order is too big to calculate with Sage, and takes a long time
- using other packages, so it is very useful here.
-
- ::
+ using other packages, so it is very useful here::
sage: p = 2^521 - 1
sage: prev_proof_state = proof.arithmetic()
@@ -1403,7 +1400,7 @@ def set_order(self, value, *, check=True, num_checks=8):
It is an error to pass a value which is not an integer in the
Hasse-Weil range::
- sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 6
+ sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 12
sage: E.set_order("hi")
Traceback (most recent call last):
...
@@ -1422,40 +1419,50 @@ def set_order(self, value, *, check=True, num_checks=8):
``num_checks``, the factorization of the actual order, and the
actual group structure::
- sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 6
+ sage: E = EllipticCurve(GF(1009), [0, 1]) # This curve has order 948
+ sage: E.set_order(947)
+ Traceback (most recent call last):
+ ...
+ ValueError: Value 947 illegal (multiple of random point not the identity)
+
+ For curves over small finite fields, the order is cheap to compute, so it is computed
+ directly and compared::
+
+ sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 12
sage: E.set_order(11)
Traceback (most recent call last):
...
- ValueError: Value 11 illegal (multiple of random point not the identity)
+ ValueError: Value 11 illegal (correct order is 12)
- However, set_order can be fooled, though it's not likely in
- "real cases of interest". For instance, the order can be set
- to a multiple of the actual order::
+ TESTS:
- sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 6
- sage: E.set_order(12) # 12 just fits in the Hasse range
- sage: E.order()
- 12
+ The previous version's random tests are not strong enough. In particular, the following used
+ to work::
+
+ sage: E = EllipticCurve(GF(2), [0, 0, 1, 1, 1]) # This curve has order 1
+ sage: E.set_order(3)
+ Traceback (most recent call last):
+ ...
+ ValueError: Value 3 illegal (correct order is 1)
- Or, the order can be set incorrectly along with ``num_checks`` set
- too small::
+ ::
- sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 6
+ sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 12
sage: E.set_order(4, num_checks=0)
+ Traceback (most recent call last):
+ ...
+ ValueError: Value 4 illegal (correct order is 12)
sage: E.order()
- 4
-
- The value of ``num_checks`` must be an integer. Negative values
- are interpreted as zero, which means don't do any checking::
+ 12
- sage: E = EllipticCurve(GF(7), [0, 1]) # This curve has order 6
- sage: E.set_order(4, num_checks=-12)
- sage: E.order()
- 4
+ .. TODO:: Add provable correctness check by computing the abelian group structure and
+ comparing.
AUTHORS:
- - Mariah Lenox (2011-02-16)
+ - Mariah Lenox (2011-02-16): Initial implementation
+
+ - Gareth Ma (2024-01-21): Fix bug for small curves
"""
value = Integer(value)
@@ -1464,12 +1471,19 @@ def set_order(self, value, *, check=True, num_checks=8):
q = self.base_field().order()
a,b = Hasse_bounds(q,1)
if not a <= value <= b:
- raise ValueError('Value %s illegal (not an integer in the Hasse range)' % value)
+ raise ValueError(f"Value {value} illegal (not an integer in the Hasse range)")
+
+ # For really small values, the random tests are too weak to detect wrong orders
+ # So we go with computing directly instead.
+ if q <= 100:
+ if self.order() != value:
+ raise ValueError(f"Value {value} illegal (correct order is {self.order()})")
+
# Is value*random == identity?
- for i in range(num_checks):
+ for _ in range(num_checks):
G = self.random_point()
if value * G != self(0):
- raise ValueError('Value %s illegal (multiple of random point not the identity)' % value)
+ raise ValueError(f"Value {value} illegal (multiple of random point not the identity)")
# TODO: It might help some of PARI's algorithms if we
# could copy this over to the .pari_curve() as well.
@@ -1564,10 +1578,9 @@ def height_above_floor(self, ell, e):
F = j.parent()
x = polygen(F)
from sage.rings.polynomial.polynomial_ring import polygens
- from sage.libs.pari.convert_sage import gen_to_sage
- from sage.libs.pari.all import pari
- X,Y = polygens(F,['X', 'Y'],2)
- phi = gen_to_sage(pari.polmodular(ell),{'x':X, 'y':Y})
+ from sage.schemes.elliptic_curves.mod_poly import classical_modular_polynomial
+ X, Y = polygens(F, "X, Y", 2)
+ phi = classical_modular_polynomial(ell)(X, Y)
j1 = phi([x,j]).roots(multiplicities=False)
nj1 = len(j1)
on_floor = self.two_torsion_rank() < 2 if ell == 2 else nj1 <= ell
@@ -1836,9 +1849,10 @@ def twists(self):
twists = curves_with_j_0(K)
elif j == 1728:
twists = curves_with_j_1728(K)
- if twists: # i.e. if j=0 or 1728
+
+ if twists: # i.e. if j=0 or 1728
# replace the one isomorphic to self with self and move to front
- for i,t in enumerate(twists):
+ for i, t in enumerate(twists):
if self.is_isomorphic(t):
twists[i] = twists[0]
twists[0] = self
@@ -1847,15 +1861,20 @@ def twists(self):
# Now j is not 0 or 1728, and we only have a quadratic twist
- if K.characteristic() == 2: # find D with trace 1 for the additive twist
- D = K.one() # will work if degree is odd
- while D.trace() == 0:
+ if K.characteristic() == 2:
+ # find D with trace 1 for the additive twist
+ D = K.one()
+ while not D or D.trace() == 0:
D = K.random_element()
- else: # find a nonsquare D
+ else:
+ # find a nonsquare D.
D = K.gen()
- q2 = (K.cardinality()-1)//2
+ q2 = (K.cardinality() - 1) // 2
while not D or D**q2 == 1:
D = K.random_element()
+ # assert D and D**q2 != 1
+ # assert not D.is_square()
+
return [self, self.quadratic_twist(D)]
def curves_with_j_0(K):
@@ -1872,6 +1891,7 @@ def curves_with_j_0(K):
For `K=\GF{q}` where `q\equiv1\mod{6}` there are six curves, the sextic twists of `y^2=x^3+1`::
+ sage: # needs sage.rings.finite_rings
sage: from sage.schemes.elliptic_curves.ell_finite_field import curves_with_j_0
sage: sorted(curves_with_j_0(GF(7)), key = lambda E: E.a_invariants())
[Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7,
@@ -1880,13 +1900,12 @@ def curves_with_j_0(K):
Elliptic Curve defined by y^2 = x^3 + 4 over Finite Field of size 7,
Elliptic Curve defined by y^2 = x^3 + 5 over Finite Field of size 7,
Elliptic Curve defined by y^2 = x^3 + 6 over Finite Field of size 7]
- sage: curves_with_j_0(GF(25)) # needs sage.rings.finite_rings
- [Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in z2 of size 5^2,
- Elliptic Curve defined by y^2 = x^3 + z2 over Finite Field in z2 of size 5^2,
- Elliptic Curve defined by y^2 = x^3 + (z2+3) over Finite Field in z2 of size 5^2,
- Elliptic Curve defined by y^2 = x^3 + (4*z2+3) over Finite Field in z2 of size 5^2,
- Elliptic Curve defined by y^2 = x^3 + (2*z2+2) over Finite Field in z2 of size 5^2,
- Elliptic Curve defined by y^2 = x^3 + (4*z2+1) over Finite Field in z2 of size 5^2]
+ sage: curves = curves_with_j_0(GF(25)); len(curves)
+ 6
+ sage: all(not curves[i].is_isomorphic(curves[j]) for i in range(6) for j in range(i + 1, 6))
+ True
+ sage: set(E.j_invariant() for E in curves)
+ {0}
For `K=\GF{q}` where `q\equiv5\mod{6}` there are two curves,
quadratic twists of each other by `-3`: `y^2=x^3+1` and
@@ -1910,14 +1929,22 @@ def curves_with_j_0(K):
q = K.cardinality()
if q % 3 == 2:
# Then we only have two quadratic twists (and -3 is non-square)
- return [EllipticCurve(K, [0,a]) for a in [1,-27]]
+ return [EllipticCurve(K, [0, a]) for a in [1, -27]]
# Now we have genuine sextic twists, find D generating K* mod 6th powers
- q2 = (q-1)//2
- q3 = (q-1)//3
+ q2 = (q - 1) // 2
+ q3 = (q - 1) // 3
D = K.gen()
while not D or D**q2 == 1 or D**q3 == 1:
D = K.random_element()
- return [EllipticCurve(K, [0,D**i]) for i in range(6)]
+
+ curves = [EllipticCurve(K, [0, D**i]) for i in range(6)]
+ # TODO: issue 37110, Precompute orders of sextic twists + docs
+ # The idea should be to evaluate the character (D / q) or something
+ # Probably reference [RS2010]_ and [Connell1999]_
+ # Also a necessary change is `curves_with_j_0` should take in an optional "starting curve"
+ # (passed from the original .twists call), because if you start twisting from that curve,
+ # then you can also compute the orders!
+ return curves
def curves_with_j_1728(K):
r"""
@@ -1939,7 +1966,7 @@ def curves_with_j_1728(K):
Elliptic Curve defined by y^2 = x^3 + 2*x over Finite Field of size 5,
Elliptic Curve defined by y^2 = x^3 + 3*x over Finite Field of size 5,
Elliptic Curve defined by y^2 = x^3 + 4*x over Finite Field of size 5]
- sage: curves_with_j_1728(GF(49)) # needs sage.rings.finite_rings
+ sage: curves_with_j_1728(GF(49)) # random # needs sage.rings.finite_rings
[Elliptic Curve defined by y^2 = x^3 + x over Finite Field in z2 of size 7^2,
Elliptic Curve defined by y^2 = x^3 + z2*x over Finite Field in z2 of size 7^2,
Elliptic Curve defined by y^2 = x^3 + (z2+4)*x over Finite Field in z2 of size 7^2,
@@ -1968,11 +1995,12 @@ def curves_with_j_1728(K):
if q % 4 == 3:
return [EllipticCurve(K, [a,0]) for a in [1,-1]]
# Now we have genuine quartic twists, find D generating K* mod 4th powers
- q2 = (q-1)//2
+ q2 = (q - 1) // 2
D = K.gen()
while not D or D**q2 == 1:
D = K.random_element()
- return [EllipticCurve(K, [D**i,0]) for i in range(4)]
+ curves = [EllipticCurve(K, [D**i, 0]) for i in range(4)]
+ return curves
def curves_with_j_0_char2(K):
r"""
@@ -2644,3 +2672,119 @@ def special_supersingular_curve(F, *, endomorphism=False):
endo._degree = ZZ(q)
endo.trace.set_cache(ZZ.zero())
return E, endo
+
+def EllipticCurve_with_order(m, *, D=None):
+ r"""
+ Return an iterator for elliptic curves over finite fields with the given order. The curves are
+ computed using the Complex Multiplication (CM) method.
+
+ A `:sage:`~sage.structure.factorization.Factorization` can be passed for ``m``, in which case
+ the algorithm is more efficient.
+
+ If ``D`` is specified, it is used as the discriminant.
+
+ EXAMPLES::
+
+ sage: from sage.schemes.elliptic_curves.ell_finite_field import EllipticCurve_with_order
+ sage: E = next(EllipticCurve_with_order(1234)); E # random
+ Elliptic Curve defined by y^2 = x^3 + 1142*x + 1209 over Finite Field of size 1237
+ sage: E.order() == 1234
+ True
+
+ When ``iter`` is set, the function returns an iterator of all elliptic curves with the given
+ order::
+
+ sage: from sage.schemes.elliptic_curves.ell_finite_field import EllipticCurve_with_order
+ sage: it = EllipticCurve_with_order(21); it
+
+ sage: E = next(it); E # random
+ Elliptic Curve defined by y^2 = x^3 + 6*x + 14 over Finite Field of size 23
+ sage: E.order() == 21
+ True
+ sage: Es = [E] + list(it); Es # random
+ [Elliptic Curve defined by y^2 = x^3 + 6*x + 14 over Finite Field of size 23,
+ Elliptic Curve defined by y^2 = x^3 + 12*x + 4 over Finite Field of size 23,
+ Elliptic Curve defined by y^2 = x^3 + 5*x + 2 over Finite Field of size 23,
+ Elliptic Curve defined by y^2 = x^3 + (z2+3) over Finite Field in z2 of size 5^2,
+ Elliptic Curve defined by y^2 = x^3 + (2*z2+2) over Finite Field in z2 of size 5^2,
+ Elliptic Curve defined by y^2 = x^3 + 7*x + 1 over Finite Field of size 19,
+ Elliptic Curve defined by y^2 = x^3 + 17*x + 10 over Finite Field of size 19,
+ Elliptic Curve defined by y^2 = x^3 + 5*x + 12 over Finite Field of size 17,
+ Elliptic Curve defined by y^2 = x^3 + 9*x + 1 over Finite Field of size 17,
+ Elliptic Curve defined by y^2 = x^3 + 7*x + 6 over Finite Field of size 17,
+ Elliptic Curve defined by y^2 = x^3 + z3^2*x^2 + (2*z3^2+z3) over Finite Field in z3 of size 3^3,
+ Elliptic Curve defined by y^2 = x^3 + (z3^2+2*z3+1)*x^2 + (2*z3^2+2*z3) over Finite Field in z3 of size 3^3,
+ Elliptic Curve defined by y^2 = x^3 + (z3^2+z3+1)*x^2 + (2*z3^2+1) over Finite Field in z3 of size 3^3,
+ Elliptic Curve defined by y^2 + (z4^2+z4+1)*y = x^3 over Finite Field in z4 of size 2^4,
+ Elliptic Curve defined by y^2 + (z4^2+z4)*y = x^3 over Finite Field in z4 of size 2^4,
+ Elliptic Curve defined by y^2 = x^3 + 18*x + 26 over Finite Field of size 29,
+ Elliptic Curve defined by y^2 = x^3 + 11*x + 19 over Finite Field of size 29,
+ Elliptic Curve defined by y^2 = x^3 + 4 over Finite Field of size 19,
+ Elliptic Curve defined by y^2 = x^3 + 19 over Finite Field of size 31,
+ Elliptic Curve defined by y^2 = x^3 + 4 over Finite Field of size 13]
+ sage: all(E.order() == 21 for E in Es)
+ True
+
+ Indeed, we can verify that this is correct. Hasse's bounds tell us that $p \leq 50$
+ (approximately), and the rest can be checked via bruteforce::
+
+ sage: for p in prime_range(50):
+ ....: for j in range(p):
+ ....: E0 = EllipticCurve(GF(p), j=j)
+ ....: for Et in E0.twists():
+ ....: if Et.order() == 21:
+ ....: assert any(Et.is_isomorphic(E) for E in Es)
+
+ .. NOTE::
+
+ The output curves are not deterministic, as :func:`EllipticCurve_finite_field.twists` is not
+ deterministic. However, the order of the j-invariants and base fields is fixed.
+
+ AUTHORS:
+
+ - Gareth Ma and Giacomo Pope (Sage Days 123): initial version
+ """
+ from sage.arith.misc import is_prime_power, factor
+ from sage.quadratic_forms.binary_qf import BinaryQF
+ from sage.structure.factorization import Factorization
+ from sage.schemes.elliptic_curves.cm import hilbert_class_polynomial
+
+ def find_q(m, m4_fac, D):
+ for t, _ in BinaryQF(1, 0, -D).solve_integer(m4_fac, _flag=3):
+ yield m + 1 - t
+ yield m + 1 + t
+
+ if isinstance(m, Factorization):
+ m4_fac = m * factor(4)
+ m_val = m.value()
+ else:
+ m4_fac = factor(m * 4)
+ m_val = m
+
+ if D is None:
+ Ds = (D for D in range(-4 * m_val, 0) if D % 4 in [0, 1])
+ else:
+ assert D < 0 and D % 4 in [0, 1]
+ Ds = [D]
+
+ seen = set()
+ for D in Ds:
+ for q in find_q(m_val, m4_fac, D):
+ if not is_prime_power(q):
+ continue
+
+ H = hilbert_class_polynomial(D)
+ K = GF(q)
+ roots = H.roots(ring=K)
+ for j0, _ in roots:
+ E = EllipticCurve(j=j0)
+ for Et in E.twists():
+ if any(Et.is_isomorphic(E) for E in seen):
+ continue
+ try:
+ # This tests whether the curve has given order
+ Et.set_order(m_val)
+ seen.add(Et)
+ yield Et
+ except ValueError:
+ pass
diff --git a/src/sage/schemes/elliptic_curves/ell_generic.py b/src/sage/schemes/elliptic_curves/ell_generic.py
index 4719b914bde..79fafe6a151 100644
--- a/src/sage/schemes/elliptic_curves/ell_generic.py
+++ b/src/sage/schemes/elliptic_curves/ell_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Elliptic curves over a general ring
diff --git a/src/sage/schemes/elliptic_curves/ell_local_data.py b/src/sage/schemes/elliptic_curves/ell_local_data.py
index 8192b8ce84c..9fb84815993 100644
--- a/src/sage/schemes/elliptic_curves/ell_local_data.py
+++ b/src/sage/schemes/elliptic_curves/ell_local_data.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Local data for elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/ell_modular_symbols.py b/src/sage/schemes/elliptic_curves/ell_modular_symbols.py
index 6fc75d2cabb..bc16fea7a3d 100644
--- a/src/sage/schemes/elliptic_curves/ell_modular_symbols.py
+++ b/src/sage/schemes/elliptic_curves/ell_modular_symbols.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Modular symbols attached to elliptic curves over `\QQ`
diff --git a/src/sage/schemes/elliptic_curves/ell_number_field.py b/src/sage/schemes/elliptic_curves/ell_number_field.py
index b0c07df78b6..95ae59642ef 100644
--- a/src/sage/schemes/elliptic_curves/ell_number_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_number_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
Elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/ell_padic_field.py b/src/sage/schemes/elliptic_curves/ell_padic_field.py
index 2867ff51d23..fb18afdaca7 100644
--- a/src/sage/schemes/elliptic_curves/ell_padic_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_padic_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
"""
Elliptic curves over padic fields
diff --git a/src/sage/schemes/elliptic_curves/ell_point.py b/src/sage/schemes/elliptic_curves/ell_point.py
index a1c1ff796ed..64a4d8cdc0d 100644
--- a/src/sage/schemes/elliptic_curves/ell_point.py
+++ b/src/sage/schemes/elliptic_curves/ell_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Points on elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py
index f49ccfbc568..38be45180b0 100644
--- a/src/sage/schemes/elliptic_curves/ell_rational_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Elliptic curves over the rational numbers
diff --git a/src/sage/schemes/elliptic_curves/ell_tate_curve.py b/src/sage/schemes/elliptic_curves/ell_tate_curve.py
index 70697a4b036..c5fbe595f40 100644
--- a/src/sage/schemes/elliptic_curves/ell_tate_curve.py
+++ b/src/sage/schemes/elliptic_curves/ell_tate_curve.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Tate's parametrisation of `p`-adic curves with multiplicative reduction
diff --git a/src/sage/schemes/elliptic_curves/ell_torsion.py b/src/sage/schemes/elliptic_curves/ell_torsion.py
index cc543b339a4..49d1e0470b5 100644
--- a/src/sage/schemes/elliptic_curves/ell_torsion.py
+++ b/src/sage/schemes/elliptic_curves/ell_torsion.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Torsion subgroups of elliptic curves over number fields (including `\QQ`)
diff --git a/src/sage/schemes/elliptic_curves/ell_wp.py b/src/sage/schemes/elliptic_curves/ell_wp.py
index e421b2c285c..28725bfc84b 100644
--- a/src/sage/schemes/elliptic_curves/ell_wp.py
+++ b/src/sage/schemes/elliptic_curves/ell_wp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Weierstrass `\wp`-function for elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/formal_group.py b/src/sage/schemes/elliptic_curves/formal_group.py
index ae3dceb8555..4eb070d2047 100644
--- a/src/sage/schemes/elliptic_curves/formal_group.py
+++ b/src/sage/schemes/elliptic_curves/formal_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Formal groups of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/gal_reps.py b/src/sage/schemes/elliptic_curves/gal_reps.py
index e5b5c9bbe03..b5d50b30627 100644
--- a/src/sage/schemes/elliptic_curves/gal_reps.py
+++ b/src/sage/schemes/elliptic_curves/gal_reps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Galois representations attached to elliptic curves
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 ea9d3bdc2ed..69f40a8083b 100644
--- a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py
+++ b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
Galois representations for elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/gp_simon.py b/src/sage/schemes/elliptic_curves/gp_simon.py
index 39a60361ec6..96dad566b71 100644
--- a/src/sage/schemes/elliptic_curves/gp_simon.py
+++ b/src/sage/schemes/elliptic_curves/gp_simon.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.libs.pari
"""
Denis Simon's PARI scripts
diff --git a/src/sage/schemes/elliptic_curves/heegner.py b/src/sage/schemes/elliptic_curves/heegner.py
index df91b74b280..c8d51392338 100644
--- a/src/sage/schemes/elliptic_curves/heegner.py
+++ b/src/sage/schemes/elliptic_curves/heegner.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
Heegner points on elliptic curves over the rational numbers
diff --git a/src/sage/schemes/elliptic_curves/height.py b/src/sage/schemes/elliptic_curves/height.py
index 7ddd080d5b1..3dee2ee4a01 100644
--- a/src/sage/schemes/elliptic_curves/height.py
+++ b/src/sage/schemes/elliptic_curves/height.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Canonical heights for elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/hom.py b/src/sage/schemes/elliptic_curves/hom.py
index fe450c89c5c..bf1b187c0e7 100644
--- a/src/sage/schemes/elliptic_curves/hom.py
+++ b/src/sage/schemes/elliptic_curves/hom.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Elliptic-curve morphisms
diff --git a/src/sage/schemes/elliptic_curves/hom_composite.py b/src/sage/schemes/elliptic_curves/hom_composite.py
index b9dcc197616..76e289fe5bd 100644
--- a/src/sage/schemes/elliptic_curves/hom_composite.py
+++ b/src/sage/schemes/elliptic_curves/hom_composite.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Composite morphisms of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/hom_frobenius.py b/src/sage/schemes/elliptic_curves/hom_frobenius.py
index 66aa3a5b5a4..2daa4348905 100644
--- a/src/sage/schemes/elliptic_curves/hom_frobenius.py
+++ b/src/sage/schemes/elliptic_curves/hom_frobenius.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.finite_rings
r"""
Frobenius isogenies of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/hom_scalar.py b/src/sage/schemes/elliptic_curves/hom_scalar.py
index de3a02c9b9d..8b9eb2292d2 100644
--- a/src/sage/schemes/elliptic_curves/hom_scalar.py
+++ b/src/sage/schemes/elliptic_curves/hom_scalar.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Scalar-multiplication morphisms of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/hom_sum.py b/src/sage/schemes/elliptic_curves/hom_sum.py
index ab10ec0d530..1492d0409d4 100644
--- a/src/sage/schemes/elliptic_curves/hom_sum.py
+++ b/src/sage/schemes/elliptic_curves/hom_sum.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Sums of morphisms of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/hom_velusqrt.py b/src/sage/schemes/elliptic_curves/hom_velusqrt.py
index 769611c61cd..f12cfa9cdab 100644
--- a/src/sage/schemes/elliptic_curves/hom_velusqrt.py
+++ b/src/sage/schemes/elliptic_curves/hom_velusqrt.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Square‑root Vélu algorithm for elliptic-curve isogenies
diff --git a/src/sage/schemes/elliptic_curves/isogeny_class.py b/src/sage/schemes/elliptic_curves/isogeny_class.py
index b20e173cff9..008c61856b5 100644
--- a/src/sage/schemes/elliptic_curves/isogeny_class.py
+++ b/src/sage/schemes/elliptic_curves/isogeny_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
Isogeny class of elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/isogeny_small_degree.py b/src/sage/schemes/elliptic_curves/isogeny_small_degree.py
index 4623828ccc5..3299d407039 100644
--- a/src/sage/schemes/elliptic_curves/isogeny_small_degree.py
+++ b/src/sage/schemes/elliptic_curves/isogeny_small_degree.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Isogenies of small prime degree
diff --git a/src/sage/schemes/elliptic_curves/jacobian.py b/src/sage/schemes/elliptic_curves/jacobian.py
index 23151109453..16bdf2d11b4 100644
--- a/src/sage/schemes/elliptic_curves/jacobian.py
+++ b/src/sage/schemes/elliptic_curves/jacobian.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Construct elliptic curves as Jacobians
diff --git a/src/sage/schemes/elliptic_curves/kodaira_symbol.py b/src/sage/schemes/elliptic_curves/kodaira_symbol.py
index 3b3b976fa66..c07e1d825e0 100644
--- a/src/sage/schemes/elliptic_curves/kodaira_symbol.py
+++ b/src/sage/schemes/elliptic_curves/kodaira_symbol.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Kodaira symbols
diff --git a/src/sage/schemes/elliptic_curves/kraus.py b/src/sage/schemes/elliptic_curves/kraus.py
index b117e8f7ba7..3420569f896 100644
--- a/src/sage/schemes/elliptic_curves/kraus.py
+++ b/src/sage/schemes/elliptic_curves/kraus.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Global and semi-global minimal models for elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/lseries_ell.py b/src/sage/schemes/elliptic_curves/lseries_ell.py
index 26d9042908f..65208647631 100644
--- a/src/sage/schemes/elliptic_curves/lseries_ell.py
+++ b/src/sage/schemes/elliptic_curves/lseries_ell.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
`L`-series for elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/mod5family.py b/src/sage/schemes/elliptic_curves/mod5family.py
index 64069c342b7..19943d6cf55 100644
--- a/src/sage/schemes/elliptic_curves/mod5family.py
+++ b/src/sage/schemes/elliptic_curves/mod5family.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Elliptic curves with congruent mod-5 representation
diff --git a/src/sage/schemes/elliptic_curves/mod_poly.py b/src/sage/schemes/elliptic_curves/mod_poly.py
index 580e2aa7598..c139742a6d8 100644
--- a/src/sage/schemes/elliptic_curves/mod_poly.py
+++ b/src/sage/schemes/elliptic_curves/mod_poly.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Modular polynomials for elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/mod_sym_num.pyx b/src/sage/schemes/elliptic_curves/mod_sym_num.pyx
index a131dc8a47c..ee40b5daceb 100644
--- a/src/sage/schemes/elliptic_curves/mod_sym_num.pyx
+++ b/src/sage/schemes/elliptic_curves/mod_sym_num.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-schemes
#cdivision=False
#cython: cdivision_warnings=False
#cython: profile=False
diff --git a/src/sage/schemes/elliptic_curves/modular_parametrization.py b/src/sage/schemes/elliptic_curves/modular_parametrization.py
index 2ed663e31cb..0f3e4d4bc04 100644
--- a/src/sage/schemes/elliptic_curves/modular_parametrization.py
+++ b/src/sage/schemes/elliptic_curves/modular_parametrization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Modular parametrization of elliptic curves over `\QQ`
diff --git a/src/sage/schemes/elliptic_curves/padic_lseries.py b/src/sage/schemes/elliptic_curves/padic_lseries.py
index 113d7e16104..9e6e76c538f 100644
--- a/src/sage/schemes/elliptic_curves/padic_lseries.py
+++ b/src/sage/schemes/elliptic_curves/padic_lseries.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
r"""
`p`-adic `L`-functions of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/padics.py b/src/sage/schemes/elliptic_curves/padics.py
index 63974e617f1..c2f72ad18f9 100644
--- a/src/sage/schemes/elliptic_curves/padics.py
+++ b/src/sage/schemes/elliptic_curves/padics.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
#
# All these methods are imported in EllipticCurve_rational_field,
diff --git a/src/sage/schemes/elliptic_curves/period_lattice.py b/src/sage/schemes/elliptic_curves/period_lattice.py
index 7cdc5dd6eee..799863a93c2 100644
--- a/src/sage/schemes/elliptic_curves/period_lattice.py
+++ b/src/sage/schemes/elliptic_curves/period_lattice.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Period lattices of elliptic curves and related functions
diff --git a/src/sage/schemes/elliptic_curves/period_lattice_region.pyx b/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
index 60c132db2d1..e26f87a1d75 100644
--- a/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
+++ b/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.complex_double sage.symbolic
r"""
Regions in fundamental domains of period lattices
diff --git a/src/sage/schemes/elliptic_curves/saturation.py b/src/sage/schemes/elliptic_curves/saturation.py
index 5f3e1dcd629..f7149ffc198 100644
--- a/src/sage/schemes/elliptic_curves/saturation.py
+++ b/src/sage/schemes/elliptic_curves/saturation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.finite_rings sage.rings.number_field
r"""
Saturation of Mordell-Weil groups of elliptic curves over number fields
diff --git a/src/sage/schemes/elliptic_curves/sha_tate.py b/src/sage/schemes/elliptic_curves/sha_tate.py
index 16bbf1d4a72..0c9f0c541cb 100644
--- a/src/sage/schemes/elliptic_curves/sha_tate.py
+++ b/src/sage/schemes/elliptic_curves/sha_tate.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Tate-Shafarevich group
diff --git a/src/sage/schemes/elliptic_curves/weierstrass_morphism.py b/src/sage/schemes/elliptic_curves/weierstrass_morphism.py
index 422b28b67fe..376a833a0bc 100644
--- a/src/sage/schemes/elliptic_curves/weierstrass_morphism.py
+++ b/src/sage/schemes/elliptic_curves/weierstrass_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Isomorphisms between Weierstrass models of elliptic curves
diff --git a/src/sage/schemes/elliptic_curves/weierstrass_transform.py b/src/sage/schemes/elliptic_curves/weierstrass_transform.py
index 07f897fb315..b5f1aab85fa 100644
--- a/src/sage/schemes/elliptic_curves/weierstrass_transform.py
+++ b/src/sage/schemes/elliptic_curves/weierstrass_transform.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Morphism to bring a genus-one curve into Weierstrass form
diff --git a/src/sage/schemes/generic/algebraic_scheme.py b/src/sage/schemes/generic/algebraic_scheme.py
index 172256fa6a1..d9dd66a23dd 100644
--- a/src/sage/schemes/generic/algebraic_scheme.py
+++ b/src/sage/schemes/generic/algebraic_scheme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Algebraic schemes
diff --git a/src/sage/schemes/generic/all.py b/src/sage/schemes/generic/all.py
index b8ba9585bfa..58686520213 100644
--- a/src/sage/schemes/generic/all.py
+++ b/src/sage/schemes/generic/all.py
@@ -1,4 +1,5 @@
+# sage_setup: distribution = sagemath-categories
# code exports
-from .spec import Spec
-from .hypersurface import ProjectiveHypersurface, AffineHypersurface
+from sage.schemes.generic.spec import Spec
+from sage.schemes.generic.hypersurface import ProjectiveHypersurface, AffineHypersurface
diff --git a/src/sage/schemes/generic/ambient_space.py b/src/sage/schemes/generic/ambient_space.py
index 52b3f1e0e39..d99e17921b6 100644
--- a/src/sage/schemes/generic/ambient_space.py
+++ b/src/sage/schemes/generic/ambient_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Ambient spaces
"""
diff --git a/src/sage/schemes/generic/divisor.py b/src/sage/schemes/generic/divisor.py
index c6d99b12204..b8a9c0c32ca 100644
--- a/src/sage/schemes/generic/divisor.py
+++ b/src/sage/schemes/generic/divisor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.schemes
"""
Divisors on schemes
diff --git a/src/sage/schemes/generic/divisor_group.py b/src/sage/schemes/generic/divisor_group.py
index 5dfd66a1bb9..775bc38927a 100644
--- a/src/sage/schemes/generic/divisor_group.py
+++ b/src/sage/schemes/generic/divisor_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Divisor groups
diff --git a/src/sage/schemes/generic/glue.py b/src/sage/schemes/generic/glue.py
index e70aafa0507..bef3adf9009 100644
--- a/src/sage/schemes/generic/glue.py
+++ b/src/sage/schemes/generic/glue.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Scheme obtained by gluing two other schemes
"""
diff --git a/src/sage/schemes/generic/homset.py b/src/sage/schemes/generic/homset.py
index 6fca9c1e257..55906516985 100644
--- a/src/sage/schemes/generic/homset.py
+++ b/src/sage/schemes/generic/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Set of homomorphisms between two schemes
diff --git a/src/sage/schemes/generic/hypersurface.py b/src/sage/schemes/generic/hypersurface.py
index f4991527c78..07b9683ec66 100644
--- a/src/sage/schemes/generic/hypersurface.py
+++ b/src/sage/schemes/generic/hypersurface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.schemes
r"""
Hypersurfaces in affine and projective space
diff --git a/src/sage/schemes/generic/morphism.py b/src/sage/schemes/generic/morphism.py
index 7d91214e32a..f680193977c 100644
--- a/src/sage/schemes/generic/morphism.py
+++ b/src/sage/schemes/generic/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Scheme morphism
diff --git a/src/sage/schemes/generic/point.py b/src/sage/schemes/generic/point.py
index 7ef85645f56..0eb63567253 100644
--- a/src/sage/schemes/generic/point.py
+++ b/src/sage/schemes/generic/point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Points on schemes
"""
diff --git a/src/sage/schemes/generic/scheme.py b/src/sage/schemes/generic/scheme.py
index 2c0e3100c86..4865a5c1782 100644
--- a/src/sage/schemes/generic/scheme.py
+++ b/src/sage/schemes/generic/scheme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Schemes
diff --git a/src/sage/schemes/generic/spec.py b/src/sage/schemes/generic/spec.py
index 93fc8b7e43c..2a85eaa447e 100644
--- a/src/sage/schemes/generic/spec.py
+++ b/src/sage/schemes/generic/spec.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
The Spec functor
diff --git a/src/sage/schemes/hyperelliptic_curves/all.py b/src/sage/schemes/hyperelliptic_curves/all.py
index 88733235129..01603fb4b66 100644
--- a/src/sage/schemes/hyperelliptic_curves/all.py
+++ b/src/sage/schemes/hyperelliptic_curves/all.py
@@ -1,4 +1,7 @@
-from .constructor import HyperellipticCurve
-from .kummer_surface import KummerSurface
-from .mestre import (Mestre_conic, HyperellipticCurve_from_invariants)
-from . import monsky_washnitzer
+# sage_setup: distribution = sagemath-schemes
+
+from sage.schemes.hyperelliptic_curves.constructor import HyperellipticCurve
+from sage.schemes.hyperelliptic_curves.kummer_surface import KummerSurface
+from sage.schemes.hyperelliptic_curves.mestre import (
+ Mestre_conic, HyperellipticCurve_from_invariants)
+from sage.schemes.hyperelliptic_curves import monsky_washnitzer
diff --git a/src/sage/schemes/hyperelliptic_curves/all__sagemath_ntl.py b/src/sage/schemes/hyperelliptic_curves/all__sagemath_ntl.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/schemes/hyperelliptic_curves/constructor.py b/src/sage/schemes/hyperelliptic_curves/constructor.py
index 8ed20d9ce5a..60856b8cc2f 100644
--- a/src/sage/schemes/hyperelliptic_curves/constructor.py
+++ b/src/sage/schemes/hyperelliptic_curves/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Hyperelliptic curve constructor
diff --git a/src/sage/schemes/hyperelliptic_curves/hypellfrob.pyx b/src/sage/schemes/hyperelliptic_curves/hypellfrob.pyx
index 9f9bb04d0ea..cffccdfaabd 100644
--- a/src/sage/schemes/hyperelliptic_curves/hypellfrob.pyx
+++ b/src/sage/schemes/hyperelliptic_curves/hypellfrob.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-ntl
# distutils: language = c++
# distutils: sources = sage/schemes/hyperelliptic_curves/hypellfrob/hypellfrob.cpp sage/schemes/hyperelliptic_curves/hypellfrob/recurrences_ntl.cpp
# distutils: depends = sage/schemes/hyperelliptic_curves/hypellfrob/hypellfrob.h sage/schemes/hyperelliptic_curves/hypellfrob/recurrences_ntl.h
diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py
index f461132b1d1..05480eee5f3 100644
--- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py
+++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.finite_rings
r"""
Hyperelliptic curves over a finite field
diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py
index b2850e39cbd..900327c2e54 100644
--- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py
+++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Hyperelliptic curves of genus 2 over a general ring
"""
diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py
index c18732064d4..3b243677e18 100644
--- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py
+++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Hyperelliptic curves over a general ring
diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py
index 018d60c22f8..44e08e87627 100644
--- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py
+++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.padics
"""
Hyperelliptic curves over a `p`-adic field
diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py
index f9337b0fbc0..a46d8a81cec 100644
--- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py
+++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Hyperelliptic curves over the rationals
"""
@@ -20,21 +21,48 @@ class HyperellipticCurve_rational_field(hyperelliptic_generic.HyperellipticCurve
ProjectivePlaneCurve_field):
def matrix_of_frobenius(self, p, prec=20):
+ """
+ Compute the matrix of Frobenius on Monsky-Washnitzer cohomology using
+ the `p`-adic field with precision ``prec``.
+
+ This function is essentially a wrapper function of
+ :meth:`sage.schemes.hyperelliptic_curves.monsky_washnitzer.matrix_of_frobenius_hyperelliptic`.
+
+ INPUT:
- # BUG: should get this method from HyperellipticCurve_generic
- def my_chage_ring(self, R):
- from .constructor import HyperellipticCurve
- f, h = self._hyperelliptic_polynomials
- y = self._printing_ring.gen()
- x = self._printing_ring.base_ring().gen()
- return HyperellipticCurve(f.change_ring(R), h, "%s,%s" % (x,y))
+ - ``p`` (prime integer or pAdic ring / field) -- if ``p`` is an integer,
+ constructs a ``pAdicField`` with ``p`` to compute the matrix of
+ Frobenius, otherwise uses the supplied pAdic ring or field.
+ - ``prec`` (optional) -- if ``p`` is an prime integer, the `p`-adic
+ precision of the coefficient ring constructed.
+
+ EXAMPLES::
+
+ sage: K = pAdicField(5, prec=3)
+ sage: R. = QQ['x']
+ sage: H = HyperellipticCurve(x^5 - 2*x + 3)
+ sage: H.matrix_of_frobenius(K)
+ [ 4*5 + O(5^3) 5 + 2*5^2 + O(5^3) 2 + 3*5 + 2*5^2 + O(5^3) 2 + 5 + 5^2 + O(5^3)]
+ [ 3*5 + 5^2 + O(5^3) 3*5 + O(5^3) 4*5 + O(5^3) 2 + 5^2 + O(5^3)]
+ [ 4*5 + 4*5^2 + O(5^3) 3*5 + 2*5^2 + O(5^3) 5 + 3*5^2 + O(5^3) 2*5 + 2*5^2 + O(5^3)]
+ [ 5^2 + O(5^3) 5 + 4*5^2 + O(5^3) 4*5 + 3*5^2 + O(5^3) 2*5 + O(5^3)]
+
+ You can also pass directly a prime `p` with to construct a pAdic field with precision
+ ``prec``::
+
+ sage: H.matrix_of_frobenius(3, prec=2)
+ [ O(3^2) 3 + O(3^2) O(3^2) O(3^2)]
+ [ 3 + O(3^2) O(3^2) O(3^2) 2 + 3 + O(3^2)]
+ [ 2*3 + O(3^2) O(3^2) O(3^2) 3^-1 + O(3)]
+ [ O(3^2) O(3^2) 3 + O(3^2) O(3^2)]
+ """
import sage.schemes.hyperelliptic_curves.monsky_washnitzer as monsky_washnitzer
if isinstance(p, (sage.rings.abc.pAdicField, sage.rings.abc.pAdicRing)):
K = p
else:
K = pAdicField(p, prec)
- frob_p, forms = monsky_washnitzer.matrix_of_frobenius_hyperelliptic(my_chage_ring(self, K))
+ frob_p, _ = monsky_washnitzer.matrix_of_frobenius_hyperelliptic(self.change_ring(K))
return frob_p
def lseries(self, prec=53):
diff --git a/src/sage/schemes/hyperelliptic_curves/invariants.py b/src/sage/schemes/hyperelliptic_curves/invariants.py
index 258775c7bc6..d1cf58258a0 100644
--- a/src/sage/schemes/hyperelliptic_curves/invariants.py
+++ b/src/sage/schemes/hyperelliptic_curves/invariants.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Compute invariants of quintics and sextics via 'Ueberschiebung'
diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py b/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py
index 2ceb709b646..a073444055c 100644
--- a/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py
+++ b/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Some functions regarding geometric endomorphism rings of Jacobians of
hyperelliptic curves.
diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_g2.py b/src/sage/schemes/hyperelliptic_curves/jacobian_g2.py
index b4b4259326e..9b17869dde1 100644
--- a/src/sage/schemes/hyperelliptic_curves/jacobian_g2.py
+++ b/src/sage/schemes/hyperelliptic_curves/jacobian_g2.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Jacobian of a hyperelliptic curve of genus 2
"""
diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_generic.py b/src/sage/schemes/hyperelliptic_curves/jacobian_generic.py
index 2e91a96e02a..015efdd184d 100644
--- a/src/sage/schemes/hyperelliptic_curves/jacobian_generic.py
+++ b/src/sage/schemes/hyperelliptic_curves/jacobian_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Jacobian of a general hyperelliptic curve
"""
diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py b/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py
index a5f4f63876c..46cdca7851c 100644
--- a/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py
+++ b/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Rational point sets on a Jacobian
diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py b/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py
index 72024866cb6..daab2d2259e 100644
--- a/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py
+++ b/src/sage/schemes/hyperelliptic_curves/jacobian_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Jacobian 'morphism' as a class in the Picard group
diff --git a/src/sage/schemes/hyperelliptic_curves/kummer_surface.py b/src/sage/schemes/hyperelliptic_curves/kummer_surface.py
index dadf1200f01..ead0f84dba6 100644
--- a/src/sage/schemes/hyperelliptic_curves/kummer_surface.py
+++ b/src/sage/schemes/hyperelliptic_curves/kummer_surface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Kummer surfaces over a general ring
"""
diff --git a/src/sage/schemes/hyperelliptic_curves/mestre.py b/src/sage/schemes/hyperelliptic_curves/mestre.py
index 9da4995bcf3..bccee0596ef 100644
--- a/src/sage/schemes/hyperelliptic_curves/mestre.py
+++ b/src/sage/schemes/hyperelliptic_curves/mestre.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Mestre's algorithm
diff --git a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py
index 03b795a4704..da9a6029d50 100644
--- a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py
+++ b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Computation of Frobenius matrix on Monsky-Washnitzer cohomology
diff --git a/src/sage/schemes/jacobians/abstract_jacobian.py b/src/sage/schemes/jacobians/abstract_jacobian.py
index 9ab2ef283ae..d5e7c831515 100644
--- a/src/sage/schemes/jacobians/abstract_jacobian.py
+++ b/src/sage/schemes/jacobians/abstract_jacobian.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Jacobians of curves
diff --git a/src/sage/schemes/jacobians/all.py b/src/sage/schemes/jacobians/all.py
index ec769450947..9179802b171 100644
--- a/src/sage/schemes/jacobians/all.py
+++ b/src/sage/schemes/jacobians/all.py
@@ -1 +1,3 @@
-#from abstract_jacobian import is_Jacobian, Jacobian
+# sage_setup: distribution = sagemath-schemes
+
+# from abstract_jacobian import is_Jacobian, Jacobian
diff --git a/src/sage/schemes/overview.py b/src/sage/schemes/overview.py
index bd83daafac0..ed71a5993a1 100644
--- a/src/sage/schemes/overview.py
+++ b/src/sage/schemes/overview.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Scheme implementation overview
diff --git a/src/sage/schemes/plane_conics/all.py b/src/sage/schemes/plane_conics/all.py
index b0237ba2e7c..c3b1170b6b4 100644
--- a/src/sage/schemes/plane_conics/all.py
+++ b/src/sage/schemes/plane_conics/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Plane conics
"""
@@ -18,4 +19,4 @@
#
# https://www.gnu.org/licenses/
# ****************************************************************************
-from .constructor import Conic
+from sage.schemes.plane_conics.constructor import Conic
diff --git a/src/sage/schemes/plane_conics/con_field.py b/src/sage/schemes/plane_conics/con_field.py
index edb6cc82eb4..f7e213d57cc 100644
--- a/src/sage/schemes/plane_conics/con_field.py
+++ b/src/sage/schemes/plane_conics/con_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Projective plane conics over a field
diff --git a/src/sage/schemes/plane_conics/con_finite_field.py b/src/sage/schemes/plane_conics/con_finite_field.py
index e62d8db828f..30b2a19357d 100644
--- a/src/sage/schemes/plane_conics/con_finite_field.py
+++ b/src/sage/schemes/plane_conics/con_finite_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.finite_rings
r"""
Projective plane conics over finite fields
diff --git a/src/sage/schemes/plane_conics/con_number_field.py b/src/sage/schemes/plane_conics/con_number_field.py
index 3f1c7c90414..b419664ee12 100644
--- a/src/sage/schemes/plane_conics/con_number_field.py
+++ b/src/sage/schemes/plane_conics/con_number_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs sage.rings.number_field
r"""
Projective plane conics over a number field
diff --git a/src/sage/schemes/plane_conics/con_rational_field.py b/src/sage/schemes/plane_conics/con_rational_field.py
index f59468d3b90..51cd9e8248b 100644
--- a/src/sage/schemes/plane_conics/con_rational_field.py
+++ b/src/sage/schemes/plane_conics/con_rational_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Projective plane conics over `\QQ`
diff --git a/src/sage/schemes/plane_conics/con_rational_function_field.py b/src/sage/schemes/plane_conics/con_rational_function_field.py
index fec1a50fdbb..8caad318aa4 100644
--- a/src/sage/schemes/plane_conics/con_rational_function_field.py
+++ b/src/sage/schemes/plane_conics/con_rational_function_field.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Projective plane conics over a rational function field
diff --git a/src/sage/schemes/plane_conics/constructor.py b/src/sage/schemes/plane_conics/constructor.py
index a078bc07d22..293a8baf6fd 100644
--- a/src/sage/schemes/plane_conics/constructor.py
+++ b/src/sage/schemes/plane_conics/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
r"""
Plane conic constructor
diff --git a/src/sage/schemes/plane_quartics/all.py b/src/sage/schemes/plane_quartics/all.py
index 6986f1ec1fa..d0e58a36de1 100644
--- a/src/sage/schemes/plane_quartics/all.py
+++ b/src/sage/schemes/plane_quartics/all.py
@@ -1 +1,3 @@
-from .quartic_constructor import QuarticCurve
+# sage_setup: distribution = sagemath-schemes
+
+from sage.schemes.plane_quartics.quartic_constructor import QuarticCurve
diff --git a/src/sage/schemes/plane_quartics/quartic_constructor.py b/src/sage/schemes/plane_quartics/quartic_constructor.py
index 37c06a1f5c9..d091cce9731 100644
--- a/src/sage/schemes/plane_quartics/quartic_constructor.py
+++ b/src/sage/schemes/plane_quartics/quartic_constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Quartic curve constructor
"""
diff --git a/src/sage/schemes/plane_quartics/quartic_generic.py b/src/sage/schemes/plane_quartics/quartic_generic.py
index ac2cdd84d82..fcdf38f3abf 100644
--- a/src/sage/schemes/plane_quartics/quartic_generic.py
+++ b/src/sage/schemes/plane_quartics/quartic_generic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
"""
Plane quartic curves over a general ring
diff --git a/src/sage/schemes/product_projective/all.py b/src/sage/schemes/product_projective/all.py
index c9ee0d6b51f..56ec5181f39 100644
--- a/src/sage/schemes/product_projective/all.py
+++ b/src/sage/schemes/product_projective/all.py
@@ -1,4 +1,6 @@
+# sage_setup: distribution = sagemath-categories
from sage.misc.lazy_import import lazy_import
lazy_import('sage.schemes.product_projective.space', 'ProductProjectiveSpaces')
lazy_import('sage.schemes.product_projective.space', 'is_ProductProjectiveSpaces')
+del lazy_import
diff --git a/src/sage/schemes/product_projective/homset.py b/src/sage/schemes/product_projective/homset.py
index b0b8655a0ec..0072d3eb97f 100644
--- a/src/sage/schemes/product_projective/homset.py
+++ b/src/sage/schemes/product_projective/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Set of homomorphisms
diff --git a/src/sage/schemes/product_projective/morphism.py b/src/sage/schemes/product_projective/morphism.py
index d5b1974164b..1326f3ea358 100644
--- a/src/sage/schemes/product_projective/morphism.py
+++ b/src/sage/schemes/product_projective/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Polynomial morphisms for products of projective spaces
diff --git a/src/sage/schemes/product_projective/point.py b/src/sage/schemes/product_projective/point.py
index 6de7cf74d7d..456755d5c03 100644
--- a/src/sage/schemes/product_projective/point.py
+++ b/src/sage/schemes/product_projective/point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Points for products of projective spaces
diff --git a/src/sage/schemes/product_projective/rational_point.py b/src/sage/schemes/product_projective/rational_point.py
index a4488647063..f4d55e60bbc 100644
--- a/src/sage/schemes/product_projective/rational_point.py
+++ b/src/sage/schemes/product_projective/rational_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumeration of rational points on product projective schemes
diff --git a/src/sage/schemes/product_projective/space.py b/src/sage/schemes/product_projective/space.py
index 3fee46cc15a..0dea77c2f2f 100644
--- a/src/sage/schemes/product_projective/space.py
+++ b/src/sage/schemes/product_projective/space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Products of projective spaces
diff --git a/src/sage/schemes/product_projective/subscheme.py b/src/sage/schemes/product_projective/subscheme.py
index 35433ba565b..0627823f6b1 100644
--- a/src/sage/schemes/product_projective/subscheme.py
+++ b/src/sage/schemes/product_projective/subscheme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subschemes of products of projective spaces
diff --git a/src/sage/schemes/projective/all.py b/src/sage/schemes/projective/all.py
index 44e92ee5f23..4dcc66d77da 100644
--- a/src/sage/schemes/projective/all.py
+++ b/src/sage/schemes/projective/all.py
@@ -1,8 +1,9 @@
+# sage_setup: distribution = sagemath-categories
"""nodoctest
all.py -- export of projective schemes to Sage
"""
-#*****************************************************************************
+# *****************************************************************************
#
# Sage: Open Source Mathematical Software
#
@@ -17,7 +18,7 @@
#
# The full text of the GPL is available at:
#
-# http://www.gnu.org/licenses/
-#*****************************************************************************
+# https://www.gnu.org/licenses/
+# *****************************************************************************
-from .projective_space import ProjectiveSpace, is_ProjectiveSpace
+from sage.schemes.projective.projective_space import ProjectiveSpace, is_ProjectiveSpace
diff --git a/src/sage/schemes/projective/proj_bdd_height.py b/src/sage/schemes/projective/proj_bdd_height.py
index 0ea174ddc4d..4ae7afd0ab6 100644
--- a/src/sage/schemes/projective/proj_bdd_height.py
+++ b/src/sage/schemes/projective/proj_bdd_height.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Points of bounded height in projective spaces
diff --git a/src/sage/schemes/projective/projective_homset.py b/src/sage/schemes/projective/projective_homset.py
index 91c01a51128..c7a747dd0fe 100644
--- a/src/sage/schemes/projective/projective_homset.py
+++ b/src/sage/schemes/projective/projective_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Set of homomorphisms between two projective schemes
diff --git a/src/sage/schemes/projective/projective_morphism.py b/src/sage/schemes/projective/projective_morphism.py
index 6d81b47abc2..dfed249e18d 100644
--- a/src/sage/schemes/projective/projective_morphism.py
+++ b/src/sage/schemes/projective/projective_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Morphisms on projective schemes
diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py
index 2f5576e6a12..6e420bb8309 100644
--- a/src/sage/schemes/projective/projective_point.py
+++ b/src/sage/schemes/projective/projective_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Points on projective varieties
diff --git a/src/sage/schemes/projective/projective_rational_point.py b/src/sage/schemes/projective/projective_rational_point.py
index 8c2fa76599a..48f94508f1c 100644
--- a/src/sage/schemes/projective/projective_rational_point.py
+++ b/src/sage/schemes/projective/projective_rational_point.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumeration of rational points on projective schemes
diff --git a/src/sage/schemes/projective/projective_space.py b/src/sage/schemes/projective/projective_space.py
index 5c55a62106e..d4d041550cf 100644
--- a/src/sage/schemes/projective/projective_space.py
+++ b/src/sage/schemes/projective/projective_space.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Projective `n` space over a ring
diff --git a/src/sage/schemes/projective/projective_subscheme.py b/src/sage/schemes/projective/projective_subscheme.py
index 3ea963e0e04..7ea3a3ab251 100644
--- a/src/sage/schemes/projective/projective_subscheme.py
+++ b/src/sage/schemes/projective/projective_subscheme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subschemes of projective space
diff --git a/src/sage/schemes/riemann_surfaces/all.py b/src/sage/schemes/riemann_surfaces/all.py
index e69de29bb2d..c05f67159dc 100644
--- a/src/sage/schemes/riemann_surfaces/all.py
+++ b/src/sage/schemes/riemann_surfaces/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-schemes
diff --git a/src/sage/schemes/riemann_surfaces/riemann_surface.py b/src/sage/schemes/riemann_surfaces/riemann_surface.py
index fb6715f5f87..e3847b57038 100644
--- a/src/sage/schemes/riemann_surfaces/riemann_surface.py
+++ b/src/sage/schemes/riemann_surfaces/riemann_surface.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-schemes
# sage.doctest: needs scipy sage.graphs sage.groups
r"""
Riemann matrices and endomorphism rings of algebraic Riemann surfaces
diff --git a/src/sage/schemes/toric/all.py b/src/sage/schemes/toric/all.py
index 71ad52ef5c6..95b4c41f292 100644
--- a/src/sage/schemes/toric/all.py
+++ b/src/sage/schemes/toric/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
from sage.misc.lazy_import import lazy_import
@@ -6,3 +7,4 @@
lazy_import('sage.schemes.toric.library', 'toric_varieties')
lazy_import('sage.schemes.toric.fano_variety', 'CPRFanoToricVariety')
lazy_import('sage.schemes.toric.ideal', 'ToricIdeal')
+del lazy_import
diff --git a/src/sage/schemes/toric/chow_group.py b/src/sage/schemes/toric/chow_group.py
index 9b612ece0eb..b10ebba78f5 100644
--- a/src/sage/schemes/toric/chow_group.py
+++ b/src/sage/schemes/toric/chow_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
The Chow group of a toric variety
@@ -230,12 +231,14 @@ def _repr_(self) -> str:
def degree(self) -> int:
r"""
- The degree of the Chow cycle.
+ Return the degree of the Chow cycle.
OUTPUT:
Integer. The complex dimension of the subvariety representing
- the Chow cycle. Raises a ``ValueError`` if the Chow cycle is a
+ the Chow cycle.
+
+ This raises a :class:`ValueError` if the Chow cycle is a
sum of mixed degree cycles.
EXAMPLES::
@@ -354,7 +357,7 @@ def intersection_with_divisor(self, divisor):
OUTPUT:
A new :class:`ChowCycle`. If the divisor is not Cartier then
- this method potentially raises a ``ValueError``, indicating
+ this method potentially raises a :class:`ValueError`, indicating
that the divisor cannot be made transversal to the Chow cycle.
EXAMPLES::
@@ -471,7 +474,7 @@ def cohomology_class(self):
If the toric variety is not simplicial, that is, has worse
than orbifold singularities, there is no way to associate a
cohomology class of the correct degree. In this case,
- :meth:`cohomology_class` raises a ``ValueError``.
+ :meth:`cohomology_class` raises a :class:`ValueError`.
EXAMPLES::
diff --git a/src/sage/schemes/toric/divisor.py b/src/sage/schemes/toric/divisor.py
index a67312516fa..223894f2e4f 100644
--- a/src/sage/schemes/toric/divisor.py
+++ b/src/sage/schemes/toric/divisor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Toric divisors and divisor classes
@@ -567,7 +568,7 @@ def m(self, cone):
returned.
- If there is no such vector (i.e. ``self`` is not even a
- `\QQ`-Cartier divisor), a ``ValueError`` is raised.
+ `\QQ`-Cartier divisor), a :class:`ValueError` is raised.
EXAMPLES::
@@ -773,7 +774,7 @@ def move_away_from(self, cone):
.. NOTE::
A divisor that is Weil but not Cartier might be impossible
- to move away. In this case, a ``ValueError`` is raised.
+ to move away. In this case, a :class:`ValueError` is raised.
EXAMPLES::
diff --git a/src/sage/schemes/toric/divisor_class.pyx b/src/sage/schemes/toric/divisor_class.pyx
index 5a92fe5b38d..e333ee713ff 100644
--- a/src/sage/schemes/toric/divisor_class.pyx
+++ b/src/sage/schemes/toric/divisor_class.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Toric rational divisor classes
@@ -204,7 +205,7 @@ cdef class ToricRationalDivisorClass(Vector_rational_dense):
cpdef _dot_product_(self, Vector right):
r"""
- Raise a ``TypeError`` exception.
+ Raise a :class:`TypeError` exception.
Dot product is not defined on toric rational divisor classes.
@@ -214,7 +215,7 @@ cdef class ToricRationalDivisorClass(Vector_rational_dense):
OUTPUT:
- - ``TypeError`` exception is raised.
+ A :class:`TypeError` exception is raised.
TESTS::
diff --git a/src/sage/schemes/toric/fano_variety.py b/src/sage/schemes/toric/fano_variety.py
index d6cbe751274..cae84527c8c 100644
--- a/src/sage/schemes/toric/fano_variety.py
+++ b/src/sage/schemes/toric/fano_variety.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Fano toric varieties
diff --git a/src/sage/schemes/toric/homset.py b/src/sage/schemes/toric/homset.py
index e02d0b92078..1c9bf503313 100644
--- a/src/sage/schemes/toric/homset.py
+++ b/src/sage/schemes/toric/homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Set of homomorphisms between two toric varieties
diff --git a/src/sage/schemes/toric/ideal.py b/src/sage/schemes/toric/ideal.py
index 6d611719c14..1129a115feb 100644
--- a/src/sage/schemes/toric/ideal.py
+++ b/src/sage/schemes/toric/ideal.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs sage.libs.singular
r"""
Toric ideals
@@ -161,7 +162,7 @@ class ToricIdeal(MPolynomialIdeal):
You may specify the ambient polynomial ring via the
``polynomial_ring`` parameter or via the ``names`` and
- ``base_ring`` parameter. A ``ValueError`` is raised if you
+ ``base_ring`` parameter. A :class:`ValueError` is raised if you
specify both.
- ``algorithm`` -- string (optional). The algorithm to use. For
diff --git a/src/sage/schemes/toric/library.py b/src/sage/schemes/toric/library.py
index c09c404d64a..800ed825f85 100644
--- a/src/sage/schemes/toric/library.py
+++ b/src/sage/schemes/toric/library.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Library of toric varieties
diff --git a/src/sage/schemes/toric/morphism.py b/src/sage/schemes/toric/morphism.py
index b5d11c0d808..c53f5016579 100644
--- a/src/sage/schemes/toric/morphism.py
+++ b/src/sage/schemes/toric/morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Morphisms of toric varieties
@@ -521,7 +522,8 @@ def as_fan_morphism(self):
OUTPUT: A :class:`SchemeMorphism_polynomial_toric_variety`.
- Raises a ``TypeError`` if the morphism cannot be written in such a way.
+ This raises a :class:`TypeError` if the morphism cannot be written
+ in such a way.
EXAMPLES::
@@ -680,9 +682,10 @@ def as_polynomial_map(self):
OUTPUT:
- A :class:`SchemeMorphism_polynomial_toric_variety`. Raises a
- ``TypeError`` if the morphism cannot be written in terms of
- homogeneous polynomials.
+ A :class:`SchemeMorphism_polynomial_toric_variety`.
+
+ This raises a :class:`TypeError` if the morphism cannot be
+ written in terms of homogeneous polynomials.
The defining polynomials are not necessarily unique. There are
choices if multiple ambient space ray generators project to
@@ -716,7 +719,7 @@ def as_polynomial_map(self):
orbit = self.domain()
codomain_fan = self.codomain().fan()
R = orbit.coordinate_ring()
- polys = [ R.one() ] * codomain_fan.nrays()
+ polys = [R.one()] * codomain_fan.nrays()
for i in self._defining_cone.ambient_ray_indices():
polys[i] = R.zero()
ray_index_map = self._reverse_ray_map()
@@ -1070,8 +1073,8 @@ def as_polynomial_map(self):
OUTPUT: A :class:`SchemeMorphism_polynomial_toric_variety`.
- Raises a ``TypeError`` if the morphism cannot be written in terms of
- homogeneous polynomials.
+ This raises a :class:`TypeError` if the morphism cannot be written
+ in terms of homogeneous polynomials.
EXAMPLES::
@@ -1104,8 +1107,8 @@ def as_polynomial_map(self):
'homogeneous polynomials')
polys[i] *= x**d
if phi.domain_fan().virtual_rays():
- raise NotImplementedError("polynomial representations for fans "
- "with virtual rays are not implemented yet")
+ raise NotImplementedError("polynomial representations for fans with"
+ " virtual rays are not implemented yet")
return SchemeMorphism_polynomial_toric_variety(self.parent(), polys)
def is_bundle(self):
@@ -1477,7 +1480,7 @@ def fiber_component(self, domain_cone, multiplicity=False):
embedding = SchemeMorphism_fan_fiber_component_toric_variety(self, domain_cone)
if multiplicity:
return embedding.domain(), \
- self.fan_morphism().index(embedding.base_cone())
+ self.fan_morphism().index(embedding.base_cone())
else:
return embedding.domain()
@@ -1609,7 +1612,7 @@ def is_union_in_fan(self, c0, c1):
except ValueError:
return False
- m = matrix(ZZ, n, n, lambda i,j:is_union_in_fan(self,prim[i], prim[j]))
+ m = matrix(ZZ, n, n, lambda i, j: is_union_in_fan(self, prim[i], prim[j]))
for i in range(n):
m[i, i] = 0
@@ -1727,9 +1730,10 @@ def as_polynomial_map(self):
OUTPUT:
- A :class:`SchemeMorphism_polynomial_toric_variety`. Raises a
- ``ValueError`` if the morphism cannot be written in terms of
- homogeneous polynomials.
+ A :class:`SchemeMorphism_polynomial_toric_variety`.
+
+ This raises a :class:`ValueError` if the morphism cannot be
+ written in terms of homogeneous polynomials.
EXAMPLES::
@@ -1830,7 +1834,7 @@ def projection(ray):
star_rays = set()
for cone in fm.relative_star_generators(defining_cone):
star_rays.update(cone.rays())
- projected_rays = [ projection(r) for r in cone.rays() ]
+ projected_rays = [projection(r) for r in cone.rays()]
cones.append(Cone(projected_rays))
fiber_fan = Fan(cones)
diff --git a/src/sage/schemes/toric/points.py b/src/sage/schemes/toric/points.py
index 20507e5c0af..ce7dd62a7fb 100644
--- a/src/sage/schemes/toric/points.py
+++ b/src/sage/schemes/toric/points.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
"""
Enumerate points of a toric variety
diff --git a/src/sage/schemes/toric/sheaf/all.py b/src/sage/schemes/toric/sheaf/all.py
index e69de29bb2d..ca4c26e905d 100644
--- a/src/sage/schemes/toric/sheaf/all.py
+++ b/src/sage/schemes/toric/sheaf/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-polyhedra
diff --git a/src/sage/schemes/toric/sheaf/constructor.py b/src/sage/schemes/toric/sheaf/constructor.py
index 72ed52a0115..dccf6a9ff58 100644
--- a/src/sage/schemes/toric/sheaf/constructor.py
+++ b/src/sage/schemes/toric/sheaf/constructor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Construct sheaves on toric varieties
diff --git a/src/sage/schemes/toric/sheaf/klyachko.py b/src/sage/schemes/toric/sheaf/klyachko.py
index 4325e77f186..9db9dacc014 100644
--- a/src/sage/schemes/toric/sheaf/klyachko.py
+++ b/src/sage/schemes/toric/sheaf/klyachko.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
"""
Klyachko bundles and sheaves
diff --git a/src/sage/schemes/toric/toric_subscheme.py b/src/sage/schemes/toric/toric_subscheme.py
index 8d3bd985ed2..7f3684833b9 100644
--- a/src/sage/schemes/toric/toric_subscheme.py
+++ b/src/sage/schemes/toric/toric_subscheme.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Subschemes of toric space
diff --git a/src/sage/schemes/toric/variety.py b/src/sage/schemes/toric/variety.py
index ac2adcfdb30..84ad819a1df 100644
--- a/src/sage/schemes/toric/variety.py
+++ b/src/sage/schemes/toric/variety.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Toric varieties
@@ -666,7 +667,8 @@ def _check_satisfies_equations(self, coordinates):
OUTPUT:
- ``True`` if ``coordinates`` do define a valid point of ``self``,
- otherwise a ``TypeError`` or ``ValueError`` exception is raised.
+ otherwise a :class:`TypeError` or :class:`ValueError` exception
+ is raised.
TESTS::
@@ -927,7 +929,7 @@ def _validate(self, polynomials):
- ``polynomials`` (the input parameter without any modifications) if
``polynomials`` do define valid polynomial functions on ``self``,
- otherwise a ``ValueError`` exception is raised.
+ otherwise a :class:`ValueError` exception is raised.
TESTS:
@@ -1102,7 +1104,7 @@ def embedding_morphism(self):
- :class:`scheme morphism
`
if the default embedding morphism was defined for ``self``,
- otherwise a ``ValueError`` exception is raised.
+ otherwise a :class:`ValueError` exception is raised.
EXAMPLES::
@@ -1196,7 +1198,7 @@ def inject_coefficients(self, scope=None, verbose=True):
while True:
scope = sys._getframe(depth).f_globals
if (scope["__name__"] == "__main__"
- and scope.get("__package__", None) is None):
+ and scope.get("__package__", None) is None):
break
depth += 1
try:
@@ -1216,7 +1218,7 @@ def dimension_singularities(self):
this method will return the dimension of the
largest-dimensional component.
- Returns -1 if the toric variety is smooth.
+ This returns `-1` if the toric variety is smooth.
EXAMPLES::
@@ -1227,7 +1229,7 @@ def dimension_singularities(self):
sage: toric_varieties.P2().dimension_singularities()
-1
"""
- for codim in range(self.dimension()+1):
+ for codim in range(self.dimension() + 1):
if any(not cone.is_smooth() for cone in self.fan(codim)):
return self.dimension() - codim
return -1
@@ -1291,7 +1293,7 @@ def is_homogeneous(self, polynomial):
from sage.modules.free_module import FreeModule
rays = fan.rays() + fan.virtual_rays()
degrees_group = FreeModule(ZZ, len(rays)).quotient(
- rays.matrix().columns())
+ rays.matrix().columns())
self._homogeneous_degrees_group = degrees_group
degrees_group = self._homogeneous_degrees_group
S = self.coordinate_ring()
@@ -1303,9 +1305,9 @@ def is_homogeneous(self, polynomial):
monomials = polynomial.monomials()
if not monomials:
return True
- degree = degrees_group(vector(ZZ,monomials[0].degrees()))
+ degree = degrees_group(vector(ZZ, monomials[0].degrees()))
for monomial in monomials:
- if degrees_group(vector(ZZ,monomial.degrees())) != degree:
+ if degrees_group(vector(ZZ, monomial.degrees())) != degree:
return False
return True
@@ -1464,12 +1466,12 @@ def Kaehler_cone(self):
from sage.schemes.toric.divisor import \
ToricRationalDivisorClassGroup_basis_lattice
L = ToricRationalDivisorClassGroup_basis_lattice(
- self.rational_class_group())
+ self.rational_class_group())
n = fan.nrays()
K = None
for cone in fan:
sigma = Cone([GT[i] for i in range(n)
- if i not in cone.ambient_ray_indices()],
+ if i not in cone.ambient_ray_indices()],
lattice=L)
K = K.intersection(sigma) if K is not None else sigma
return K
@@ -1477,7 +1479,7 @@ def Kaehler_cone(self):
@cached_method
def Mori_cone(self):
r"""
- Returns the Mori cone of ``self``.
+ Return the Mori cone of ``self``.
OUTPUT: :class:`cone `.
@@ -1515,7 +1517,7 @@ def Mori_cone(self):
# so far this is not the case.
rays = (ray * self._fan.Gale_transform()
for ray in self.Kaehler_cone().dual().rays())
- return Cone(rays, lattice=ZZ**(self._fan.nrays()+1))
+ return Cone(rays, lattice=ZZ**(self._fan.nrays() + 1))
def plot(self, **options):
r"""
@@ -1604,7 +1606,7 @@ def Chow_group(self, base_ring=ZZ):
(( 0 | 0 | 1 ), ( 0 | 1 | 0 ), ( 1 | 0 | 0 ))
"""
from sage.schemes.toric.chow_group import ChowGroup
- return ChowGroup(self,base_ring)
+ return ChowGroup(self, base_ring)
def cartesian_product(self, other,
coordinate_names=None, coordinate_indices=None):
@@ -2001,7 +2003,7 @@ def volume_class(self):
A :class:`CohomologyClass`. If it exists, it is the class of
the (properly normalized) volume form, that is, it is the
Poincaré dual of a single point. If it does not exist, a
- ``ValueError`` is raised.
+ :class:`ValueError` is raised.
EXAMPLES::
@@ -2177,11 +2179,9 @@ def Chern_class(self, deg=None):
True
"""
assert self.is_orbifold(), "Requires the toric variety to be an orbifold."
- c = prod([ 1+self.cohomology_ring().gen(i) for i in range(self._fan.nrays()) ])
- if deg is None:
- return c
- else:
- return c.part_of_degree(deg)
+ c = prod([1 + self.cohomology_ring().gen(i)
+ for i in range(self._fan.nrays())])
+ return c if deg is None else c.part_of_degree(deg)
@cached_method
def Chern_character(self, deg=None):
@@ -2218,12 +2218,9 @@ def Chern_character(self, deg=None):
"""
assert self.is_orbifold(), "Requires the toric variety to be an orbifold."
n_rels = self._fan.nrays() - self.dimension()
- ch = sum([ self.cohomology_ring().gen(i).exp()
- for i in range(self._fan.nrays()) ]) - n_rels
- if deg is None:
- return ch
- else:
- return ch.part_of_degree(deg)
+ ch = sum([self.cohomology_ring().gen(i).exp()
+ for i in range(self._fan.nrays())]) - n_rels
+ return ch if deg is None else ch.part_of_degree(deg)
@cached_method
def Todd_class(self, deg=None):
@@ -2265,17 +2262,14 @@ def Todd_class(self, deg=None):
c2 = self.Chern_class(2)
Td += QQ.one() / 12 * (c1**2 + c2)
if dim >= 3:
- Td += QQ.one() / 24 * c1*c2
+ Td += QQ.one() / 24 * c1 * c2
if dim >= 4:
c3 = self.Chern_class(3)
c4 = self.Chern_class(4)
Td += -QQ.one() / 720 * (c1**4 - 4*c1**2*c2 - 3*c2**2 - c1*c3 + c4)
if dim >= 5:
raise NotImplementedError('Todd class is currently only implemented up to degree 4')
- if deg is None:
- return Td
- else:
- return Td.part_of_degree(deg)
+ return Td if deg is None else Td.part_of_degree(deg)
c = Chern_class
ch = Chern_character
@@ -2308,7 +2302,7 @@ def Euler_number(self):
else:
chi = 0
H = self.cohomology_basis()
- for d in range(self.dimension()+1):
+ for d in range(self.dimension() + 1):
chi += (-1)**d * len(H[d])
self._chi = chi
return self._chi
@@ -2317,7 +2311,7 @@ def Euler_number(self):
def K(self):
r"""
- Returns the canonical divisor of the toric variety.
+ Return the canonical divisor of the toric variety.
EXAMPLES:
@@ -2331,7 +2325,7 @@ def K(self):
6
"""
from sage.schemes.toric.divisor import ToricDivisor
- return ToricDivisor(self, [-1]*self._fan.nrays())
+ return ToricDivisor(self, [-1] * self._fan.nrays())
def divisor(self, arg, base_ring=None, check=True, reduce=True):
r"""
@@ -2632,8 +2626,8 @@ def _orbit_closure_projection(self, cone, x):
This quotient lattice is the ambient lattice for the fan of the orbit
closure corresponding to ``cone``.
- If ``x`` is a cone not in the star of ``cone``, an ``IndexError`` is
- raised.
+ If ``x`` is a cone not in the star of ``cone``, an :class:`IndexError`
+ is raised.
See :meth:`orbit_closure` for more details.
@@ -2719,11 +2713,10 @@ def orbit_closure(self, cone):
sage: A2.orbit_closure(A2.fan(2)[0])
0-d affine toric variety
"""
- cone = self.fan().embed(cone)
- cones = []
- for star_cone in cone.star_generators():
- cones.append( self._orbit_closure_projection(cone, star_cone) )
from sage.geometry.fan import discard_faces
+ cone = self.fan().embed(cone)
+ cones = [self._orbit_closure_projection(cone, star_cone)
+ for star_cone in cone.star_generators()]
fan = Fan(discard_faces(cones), check=False)
orbit_closure = ToricVariety(fan)
@@ -2809,7 +2802,7 @@ def Demazure_roots(self):
antiK = -self.K()
fan_rays = self.fan().rays()
roots = [m for m in antiK.sections()
- if [ray*m for ray in fan_rays].count(-1) == 1]
+ if [ray * m for ray in fan_rays].count(-1) == 1]
return tuple(roots)
def Aut_dimension(self):
@@ -2984,7 +2977,7 @@ def normalize_names(names=None, ngens=None, prefix=None, indices=None,
names = list(names)
except TypeError:
raise TypeError(
- "names must be a string or a list or tuple of them")
+ "names must be a string or a list or tuple of them")
for name in names:
if not isinstance(name, str):
raise TypeError(
@@ -3137,7 +3130,7 @@ def _latex_(self):
"""
return fr'H^\ast\left({self._variety._latex_()},{latex(QQ)}\right)'
- def _element_constructor_(self,x):
+ def _element_constructor_(self, x):
r"""
Construct a :class:`CohomologyClass`.
@@ -3260,7 +3253,8 @@ def gens(self):
([z], [z], [z])
"""
if "_gens" not in self.__dict__:
- self._gens = tuple( self.gen(i) for i in range(self._variety.fan().nrays()) )
+ self._gens = tuple(self.gen(i)
+ for i in range(self._variety.fan().nrays()))
return self._gens
def gen(self, i):
@@ -3469,7 +3463,7 @@ def exp(self):
OUTPUT:
The cohomology class `\exp(` ``self`` `)` if the constant part
- vanishes, otherwise a ``ValueError`` is raised.
+ vanishes, otherwise a :class:`ValueError` is raised.
EXAMPLES::
@@ -3484,6 +3478,6 @@ def exp(self):
if not self.part_of_degree(0).is_zero():
raise ValueError('must not have a constant part')
exp_x = self.parent().one()
- for d in range(1, self.parent()._variety.dimension()+1):
+ for d in range(1, self.parent()._variety.dimension() + 1):
exp_x += self**d / factorial(d)
return exp_x
diff --git a/src/sage/schemes/toric/weierstrass.py b/src/sage/schemes/toric/weierstrass.py
index b727e586141..46afd489cc3 100644
--- a/src/sage/schemes/toric/weierstrass.py
+++ b/src/sage/schemes/toric/weierstrass.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Weierstrass form of a toric elliptic curve
@@ -176,8 +177,8 @@ def Discriminant(polynomial, variables=None):
sage: Discriminant([quadratic1, quadratic2])
-1/16
"""
- (f, g) = WeierstrassForm(polynomial, variables)
- return 4*f**3+27*g**2
+ f, g = WeierstrassForm(polynomial, variables)
+ return 4*f**3 + 27*g**2
######################################################################
@@ -199,7 +200,7 @@ def j_invariant(polynomial, variables=None):
* A nodal cubic: `j(-y^2 + x^2 + x^3) = \infty`
* A cuspidal cubic `y^2=x^3` has undefined `j`-invariant. In this
- case, a ``ValueError`` is raised.
+ case, a :class:`ValueError` is raised.
EXAMPLES::
@@ -220,10 +221,10 @@ def j_invariant(polynomial, variables=None):
...
ValueError: curve is singular and has no well-defined j-invariant
"""
- (f, g) = WeierstrassForm(polynomial, variables)
- disc = 4*f**3+27*g**2
+ f, g = WeierstrassForm(polynomial, variables)
+ disc = 4*f**3 + 27*g**2
if disc != 0:
- return 1728 * 4*f**3/disc
+ return 1728 * 4 * f**3 / disc
if f != 0:
return Infinity
raise ValueError('curve is singular and has no well-defined j-invariant')
@@ -505,7 +506,7 @@ def WeierstrassForm(polynomial, variables=None, transformation=False):
######################################################################
def _check_homogeneity(polynomial, variables, weights, total_weight=None):
"""
- Raise ``ValueError`` if the polynomial is not weighted
+ Raise :class:`ValueError` if the polynomial is not weighted
homogeneous.
INPUT:
@@ -526,7 +527,7 @@ def _check_homogeneity(polynomial, variables, weights, total_weight=None):
OUTPUT:
This function returns nothing. If the polynomial is not weighted
- homogeneous, a ``ValueError`` is raised.
+ homogeneous, a :class:`ValueError` is raised.
EXAMPLES::
@@ -552,8 +553,8 @@ def _check_homogeneity(polynomial, variables, weights, total_weight=None):
total_weight = weight_e
else:
if weight_e != total_weight:
- raise ValueError('the polynomial is not homogeneous with '
- 'weights '+str(weights))
+ msg = f'the polynomial is not homogeneous with weights {weights}'
+ raise ValueError(msg)
######################################################################
@@ -602,8 +603,8 @@ def index(monomial):
coeffs[i] = c*m + coeffs.pop(i, R.zero())
result = tuple(coeffs.pop(index(m), R.zero()) // m for m in monomials)
if coeffs:
- raise ValueError('the polynomial contains more monomials than '
- 'given: ' + str(coeffs))
+ msg = f'the polynomial contains more monomials than given: {coeffs}'
+ raise ValueError(msg)
return result
@@ -623,7 +624,7 @@ def _check_polynomial_P2(cubic, variables):
OUTPUT:
This functions returns ``variables``, potentially guessed from the
- polynomial ring. A ``ValueError`` is raised if the polynomial is
+ polynomial ring. A :class:`ValueError` is raised if the polynomial is
not homogeneous.
EXAMPLES::
@@ -757,7 +758,7 @@ def WeierstrassForm_P2(polynomial, variables=None):
F = polynomial.base_ring()
S = cubic.S_invariant()
T = cubic.T_invariant()
- return (27*S, -27/F(4)*T)
+ return (27 * S, -27 / F(4) * T)
######################################################################
@@ -780,7 +781,7 @@ def _check_polynomial_P1xP1(biquadric, variables):
OUTPUT:
This functions returns ``variables``, potentially guessed from the
- polynomial ring. A ``ValueError`` is raised if the polynomial is
+ polynomial ring. A :class:`ValueError` is raised if the polynomial is
not homogeneous.
EXAMPLES::
@@ -853,7 +854,7 @@ def _partial_discriminant(quadric, y0, y1=None):
monomials = (quadric.parent().one(), y0, y0**2)
variables = [y0]
else:
- monomials = (y1**2, y0*y1, y0**2)
+ monomials = (y1**2, y0 * y1, y0**2)
variables = [y0, y1]
c = _extract_coefficients(quadric, monomials, variables)
return c[1]**2 - 4*c[0]*c[2]
@@ -941,7 +942,7 @@ def WeierstrassForm_P1xP1(biquadric, variables=None):
Q = invariant_theory.binary_quartic(delta, x, y)
g2 = Q.EisensteinD()
g3 = -Q.EisensteinE()
- return (-g2/4, -g3/4)
+ return (-g2 / 4, -g3 / 4)
######################################################################
@@ -964,7 +965,7 @@ def _check_polynomial_P2_112(polynomial, variables):
OUTPUT:
This functions returns ``variables``, potentially guessed from the
- polynomial ring. A ``ValueError`` is raised if the polynomial is
+ polynomial ring. A :class:`ValueError` is raised if the polynomial is
not homogeneous.
EXAMPLES::
@@ -1076,4 +1077,4 @@ def WeierstrassForm_P2_112(polynomial, variables=None):
Q = invariant_theory.binary_quartic(delta, x, z)
g2 = Q.EisensteinD()
g3 = -Q.EisensteinE()
- return (-g2/4, -g3/4)
+ return (-g2 / 4, -g3 / 4)
diff --git a/src/sage/schemes/toric/weierstrass_covering.py b/src/sage/schemes/toric/weierstrass_covering.py
index 128c30d33a8..b5a743210a7 100644
--- a/src/sage/schemes/toric/weierstrass_covering.py
+++ b/src/sage/schemes/toric/weierstrass_covering.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Map to the Weierstrass form of a toric elliptic curve
diff --git a/src/sage/schemes/toric/weierstrass_higher.py b/src/sage/schemes/toric/weierstrass_higher.py
index 6e2cc57e59d..0c0fb57489d 100644
--- a/src/sage/schemes/toric/weierstrass_higher.py
+++ b/src/sage/schemes/toric/weierstrass_higher.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-polyhedra
# sage.doctest: needs sage.geometry.polyhedron sage.graphs
r"""
Weierstrass for elliptic curves in higher codimension
@@ -81,7 +82,7 @@ def _check_polynomials_P3(quadratic1, quadratic2, variables):
OUTPUT:
This function returns ``variables``, potentially guessed from the
- polynomial ring. A ``ValueError`` is raised if the polynomial is
+ polynomial ring. A :class:`ValueError` is raised if the polynomial is
not homogeneous.
EXAMPLES::
diff --git a/src/sage/sets/all.py b/src/sage/sets/all.py
index 1c1a69e57a7..ce54f9cf6b1 100644
--- a/src/sage/sets/all.py
+++ b/src/sage/sets/all.py
@@ -1,15 +1,17 @@
+# sage_setup: distribution = sagemath-categories
from sage.misc.lazy_import import lazy_import
lazy_import('sage.sets.real_set', 'RealSet')
-from .set import Set
-from .integer_range import IntegerRange
-from .non_negative_integers import NonNegativeIntegers
-from .positive_integers import PositiveIntegers
-from .finite_enumerated_set import FiniteEnumeratedSet
-lazy_import('sage.sets.recursively_enumerated_set','RecursivelyEnumeratedSet')
-from .totally_ordered_finite_set import TotallyOrderedFiniteSet
-from .disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
-from .primes import Primes
-from .family import Family
-from .disjoint_set import DisjointSet
-from .condition_set import ConditionSet
-from .finite_set_maps import FiniteSetMaps
+from sage.sets.set import Set
+from sage.sets.integer_range import IntegerRange
+from sage.sets.non_negative_integers import NonNegativeIntegers
+from sage.sets.positive_integers import PositiveIntegers
+from sage.sets.finite_enumerated_set import FiniteEnumeratedSet
+lazy_import('sage.sets.recursively_enumerated_set', 'RecursivelyEnumeratedSet')
+from sage.sets.totally_ordered_finite_set import TotallyOrderedFiniteSet
+from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
+from sage.sets.primes import Primes
+from sage.sets.family import Family
+from sage.sets.disjoint_set import DisjointSet
+from sage.sets.condition_set import ConditionSet
+from sage.sets.finite_set_maps import FiniteSetMaps
+del lazy_import
diff --git a/src/sage/sets/all__sagemath_objects.py b/src/sage/sets/all__sagemath_objects.py
index 38e44245ad3..40da49fdd73 100644
--- a/src/sage/sets/all__sagemath_objects.py
+++ b/src/sage/sets/all__sagemath_objects.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
# The presence of this file ensures that sage_setup for sagemath-objects
# considers this directory as a namespace package
diff --git a/src/sage/sets/cartesian_product.py b/src/sage/sets/cartesian_product.py
index 47b94b6d222..9dd9263a804 100644
--- a/src/sage/sets/cartesian_product.py
+++ b/src/sage/sets/cartesian_product.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Cartesian products
diff --git a/src/sage/sets/condition_set.py b/src/sage/sets/condition_set.py
index e29f0124224..10e05f9ce1d 100644
--- a/src/sage/sets/condition_set.py
+++ b/src/sage/sets/condition_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Subsets of a Universe Defined by Predicates
"""
diff --git a/src/sage/sets/disjoint_set.pxd b/src/sage/sets/disjoint_set.pxd
index 1ec38f5966b..381af463cdf 100644
--- a/src/sage/sets/disjoint_set.pxd
+++ b/src/sage/sets/disjoint_set.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2009 Sebastien Labbe
#
diff --git a/src/sage/sets/disjoint_set.pyx b/src/sage/sets/disjoint_set.pyx
index e8ae11fc3a1..703c443e9ec 100644
--- a/src/sage/sets/disjoint_set.pyx
+++ b/src/sage/sets/disjoint_set.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Disjoint-set data structure
diff --git a/src/sage/sets/disjoint_union_enumerated_sets.py b/src/sage/sets/disjoint_union_enumerated_sets.py
index 030834993fa..d20af8caf4b 100644
--- a/src/sage/sets/disjoint_union_enumerated_sets.py
+++ b/src/sage/sets/disjoint_union_enumerated_sets.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Disjoint union of enumerated sets
diff --git a/src/sage/sets/family.pxd b/src/sage/sets/family.pxd
index f5d8f755ecc..5459ef38e0b 100644
--- a/src/sage/sets/family.pxd
+++ b/src/sage/sets/family.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.parent cimport Parent
diff --git a/src/sage/sets/family.pyx b/src/sage/sets/family.pyx
index 36a6b0d6b1f..f4d4ab16b34 100644
--- a/src/sage/sets/family.pyx
+++ b/src/sage/sets/family.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Families
diff --git a/src/sage/sets/finite_enumerated_set.py b/src/sage/sets/finite_enumerated_set.py
index 6f205e5b70e..e67ae5dd886 100644
--- a/src/sage/sets/finite_enumerated_set.py
+++ b/src/sage/sets/finite_enumerated_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Finite Enumerated Sets
"""
diff --git a/src/sage/sets/finite_set_map_cy.pxd b/src/sage/sets/finite_set_map_cy.pxd
index daa46c099e0..2a18a9ff2f8 100644
--- a/src/sage/sets/finite_set_map_cy.pxd
+++ b/src/sage/sets/finite_set_map_cy.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2010 Florent Hivert ,
#
diff --git a/src/sage/sets/finite_set_map_cy.pyx b/src/sage/sets/finite_set_map_cy.pyx
index a06dc0a2bd9..9825e8502de 100644
--- a/src/sage/sets/finite_set_map_cy.pyx
+++ b/src/sage/sets/finite_set_map_cy.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Data structures for maps between finite sets
diff --git a/src/sage/sets/finite_set_maps.py b/src/sage/sets/finite_set_maps.py
index b0faa1ddd95..9429eee92ed 100644
--- a/src/sage/sets/finite_set_maps.py
+++ b/src/sage/sets/finite_set_maps.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Maps between finite sets
diff --git a/src/sage/sets/image_set.py b/src/sage/sets/image_set.py
index 0472d793c19..43650511660 100644
--- a/src/sage/sets/image_set.py
+++ b/src/sage/sets/image_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Image Sets
"""
diff --git a/src/sage/sets/integer_range.py b/src/sage/sets/integer_range.py
index 31602abb5a6..9706facafc5 100644
--- a/src/sage/sets/integer_range.py
+++ b/src/sage/sets/integer_range.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Integer Range
diff --git a/src/sage/sets/non_negative_integers.py b/src/sage/sets/non_negative_integers.py
index a7995ff3e1e..f76b8e6c6b0 100644
--- a/src/sage/sets/non_negative_integers.py
+++ b/src/sage/sets/non_negative_integers.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Non Negative Integers
"""
diff --git a/src/sage/sets/positive_integers.py b/src/sage/sets/positive_integers.py
index 70625fb53b7..cfb44167fe2 100644
--- a/src/sage/sets/positive_integers.py
+++ b/src/sage/sets/positive_integers.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Positive Integers
"""
diff --git a/src/sage/sets/primes.py b/src/sage/sets/primes.py
index ac33901a73b..fc4e8b02d29 100644
--- a/src/sage/sets/primes.py
+++ b/src/sage/sets/primes.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
The set of prime numbers
diff --git a/src/sage/sets/pythonclass.pxd b/src/sage/sets/pythonclass.pxd
index 4346d918386..cb59baca759 100644
--- a/src/sage/sets/pythonclass.pxd
+++ b/src/sage/sets/pythonclass.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.parent cimport Set_generic
diff --git a/src/sage/sets/pythonclass.pyx b/src/sage/sets/pythonclass.pyx
index bfa7f3bc617..7b75bd7bf26 100644
--- a/src/sage/sets/pythonclass.pyx
+++ b/src/sage/sets/pythonclass.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Set of all objects of a given Python class
"""
diff --git a/src/sage/sets/real_set.py b/src/sage/sets/real_set.py
index 168521ce6a8..11f4aae9f78 100644
--- a/src/sage/sets/real_set.py
+++ b/src/sage/sets/real_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
# sage.doctest: needs sage.rings.real_interval_field sage.rings.real_mpfr
"""
Subsets of the Real Line
diff --git a/src/sage/sets/recursively_enumerated_set.pxd b/src/sage/sets/recursively_enumerated_set.pxd
index 48c8312456c..68ba0914c7b 100644
--- a/src/sage/sets/recursively_enumerated_set.pxd
+++ b/src/sage/sets/recursively_enumerated_set.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
#*****************************************************************************
# Copyright (C) 2014 Sage
#
diff --git a/src/sage/sets/recursively_enumerated_set.pyx b/src/sage/sets/recursively_enumerated_set.pyx
index 56bd8d16850..cc388339b65 100644
--- a/src/sage/sets/recursively_enumerated_set.pyx
+++ b/src/sage/sets/recursively_enumerated_set.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Recursively Enumerated Sets
diff --git a/src/sage/sets/set.py b/src/sage/sets/set.py
index fe351298d0a..adb8f2e9dbe 100644
--- a/src/sage/sets/set.py
+++ b/src/sage/sets/set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Sets
diff --git a/src/sage/sets/set_from_iterator.py b/src/sage/sets/set_from_iterator.py
index 81cb4f11bbc..0a758dd5f77 100644
--- a/src/sage/sets/set_from_iterator.py
+++ b/src/sage/sets/set_from_iterator.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Enumerated set from iterator
diff --git a/src/sage/sets/totally_ordered_finite_set.py b/src/sage/sets/totally_ordered_finite_set.py
index 7efba359dc0..51b0f67539a 100644
--- a/src/sage/sets/totally_ordered_finite_set.py
+++ b/src/sage/sets/totally_ordered_finite_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
"""
Totally Ordered Finite Sets
diff --git a/src/sage/stats/all.py b/src/sage/stats/all.py
index 3b4c8c4ff52..2636682e270 100644
--- a/src/sage/stats/all.py
+++ b/src/sage/stats/all.py
@@ -1,11 +1,16 @@
+# sage_setup: distribution = sagemath-modules
+
+from sage.stats.basic_stats import (mean, mode, std, variance, median, moving_average)
+from sage.stats.hmm import all as hmm
import sage.stats.distributions.catalog as distributions
-from .r import ttest
-from .basic_stats import (mean, mode, std, variance, median, moving_average)
-from .hmm import all as hmm
+from sage.misc.lazy_import import lazy_import
+
+lazy_import("sage.stats.r", "ttest")
# We lazy_import the following modules since they import numpy which
# slows down sage startup
-from sage.misc.lazy_import import lazy_import
+
lazy_import("sage.stats.time_series", ["TimeSeries", "autoregressive_fit"])
lazy_import("sage.stats.intlist", ["IntList"])
+del lazy_import
diff --git a/src/sage/stats/basic_stats.py b/src/sage/stats/basic_stats.py
index 83dc50b4e89..a3c8bbfe47f 100644
--- a/src/sage/stats/basic_stats.py
+++ b/src/sage/stats/basic_stats.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
Basic Statistics
diff --git a/src/sage/stats/distributions/all.py b/src/sage/stats/distributions/all.py
index d37a8563ec6..22eb34f328c 100644
--- a/src/sage/stats/distributions/all.py
+++ b/src/sage/stats/distributions/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# We lazy_import the following modules since they import numpy which
# slows down sage startup
from sage.misc.lazy_import import lazy_import
diff --git a/src/sage/stats/distributions/dgs.pxd b/src/sage/stats/distributions/dgs.pxd
index 614db1388b5..328ae8d90d2 100644
--- a/src/sage/stats/distributions/dgs.pxd
+++ b/src/sage/stats/distributions/dgs.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
AUTHOR: Martin Albrecht
"""
diff --git a/src/sage/stats/distributions/discrete_gaussian_integer.pxd b/src/sage/stats/distributions/discrete_gaussian_integer.pxd
index d6edbe88d43..cadbd33f27f 100644
--- a/src/sage/stats/distributions/discrete_gaussian_integer.pxd
+++ b/src/sage/stats/distributions/discrete_gaussian_integer.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.rings.integer cimport Integer
from sage.rings.real_mpfr cimport RealNumber
from sage.stats.distributions.dgs cimport dgs_disc_gauss_mp_t, dgs_disc_gauss_dp_t
diff --git a/src/sage/stats/distributions/discrete_gaussian_integer.pyx b/src/sage/stats/distributions/discrete_gaussian_integer.pyx
index 6d50074102b..55625af5320 100644
--- a/src/sage/stats/distributions/discrete_gaussian_integer.pyx
+++ b/src/sage/stats/distributions/discrete_gaussian_integer.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.symbolic
#
# distutils: sources = sage/stats/distributions/dgs_gauss_mp.c sage/stats/distributions/dgs_gauss_dp.c sage/stats/distributions/dgs_bern.c
diff --git a/src/sage/stats/distributions/discrete_gaussian_lattice.py b/src/sage/stats/distributions/discrete_gaussian_lattice.py
index 6667b2fb5cf..fff0418624a 100644
--- a/src/sage/stats/distributions/discrete_gaussian_lattice.py
+++ b/src/sage/stats/distributions/discrete_gaussian_lattice.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
r"""
Discrete Gaussian Samplers over Lattices
diff --git a/src/sage/stats/distributions/discrete_gaussian_polynomial.py b/src/sage/stats/distributions/discrete_gaussian_polynomial.py
index 63c8f5b800a..713d8b1264d 100644
--- a/src/sage/stats/distributions/discrete_gaussian_polynomial.py
+++ b/src/sage/stats/distributions/discrete_gaussian_polynomial.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-modules
r"""
Discrete Gaussian Samplers for `\ZZ[x]`
diff --git a/src/sage/stats/hmm/all.py b/src/sage/stats/hmm/all.py
index 2e1bcacd23d..1bea3cdd941 100644
--- a/src/sage/stats/hmm/all.py
+++ b/src/sage/stats/hmm/all.py
@@ -1,12 +1,15 @@
+# sage_setup: distribution = sagemath-modules
#############################################################################
# Copyright (C) 2010 William Stein
# Distributed under the terms of the GNU General Public License (GPL), v2+.
# The full text of the GPL is available at:
-# http://www.gnu.org/licenses/
+# https://www.gnu.org/licenses/
#############################################################################
# We lazy_import the following modules since they import numpy which slows down sage startup
from sage.misc.lazy_import import lazy_import
lazy_import("sage.stats.hmm.hmm", ["DiscreteHiddenMarkovModel"])
-lazy_import("sage.stats.hmm.chmm", ["GaussianHiddenMarkovModel","GaussianMixtureHiddenMarkovModel"])
+lazy_import("sage.stats.hmm.chmm", [
+ "GaussianHiddenMarkovModel", "GaussianMixtureHiddenMarkovModel"])
lazy_import("sage.stats.hmm.distributions", ["GaussianMixtureDistribution"])
+del lazy_import
diff --git a/src/sage/stats/hmm/chmm.pyx b/src/sage/stats/hmm/chmm.pyx
index f0940c5849d..0b189692a3f 100644
--- a/src/sage/stats/hmm/chmm.pyx
+++ b/src/sage/stats/hmm/chmm.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs numpy
r"""
Continuous Emission Hidden Markov Models
diff --git a/src/sage/stats/hmm/distributions.pxd b/src/sage/stats/hmm/distributions.pxd
index 73e4dbc6a9b..c29cb5cf85a 100644
--- a/src/sage/stats/hmm/distributions.pxd
+++ b/src/sage/stats/hmm/distributions.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################################
# Copyright (C) 2010 William Stein
# Distributed under the terms of the GNU General Public License (GPL)
diff --git a/src/sage/stats/hmm/distributions.pyx b/src/sage/stats/hmm/distributions.pyx
index dd4860317e1..4bc3803094a 100644
--- a/src/sage/stats/hmm/distributions.pyx
+++ b/src/sage/stats/hmm/distributions.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Distributions used in implementing Hidden Markov Models
diff --git a/src/sage/stats/hmm/hmm.pxd b/src/sage/stats/hmm/hmm.pxd
index 1abcb95392b..db69471b83a 100644
--- a/src/sage/stats/hmm/hmm.pxd
+++ b/src/sage/stats/hmm/hmm.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################################
# Copyright (C) 2010 William Stein
# Distributed under the terms of the GNU General Public License (GPL) v2+.
diff --git a/src/sage/stats/hmm/hmm.pyx b/src/sage/stats/hmm/hmm.pyx
index 0935c9398ee..8b607a1d0be 100644
--- a/src/sage/stats/hmm/hmm.pyx
+++ b/src/sage/stats/hmm/hmm.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs numpy sage.modules
r"""
Hidden Markov Models
diff --git a/src/sage/stats/hmm/util.pxd b/src/sage/stats/hmm/util.pxd
index b0d399d9aaf..31a65495e31 100644
--- a/src/sage/stats/hmm/util.pxd
+++ b/src/sage/stats/hmm/util.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
from sage.stats.time_series cimport TimeSeries
cdef class HMM_Util:
diff --git a/src/sage/stats/hmm/util.pyx b/src/sage/stats/hmm/util.pyx
index 553eb997364..02fcf1b7855 100644
--- a/src/sage/stats/hmm/util.pyx
+++ b/src/sage/stats/hmm/util.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
"""
Hidden Markov Models -- Utility functions
diff --git a/src/sage/stats/intlist.pxd b/src/sage/stats/intlist.pxd
index d63971aac14..e6708c7aaf0 100644
--- a/src/sage/stats/intlist.pxd
+++ b/src/sage/stats/intlist.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
#############################################################################
# Copyright (C) 2010 William Stein
# Distributed under the terms of the GNU General Public License (GPL) v2+.
diff --git a/src/sage/stats/intlist.pyx b/src/sage/stats/intlist.pyx
index fccbb56e680..e8ab5c4a360 100644
--- a/src/sage/stats/intlist.pyx
+++ b/src/sage/stats/intlist.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
"""
C Int Lists
diff --git a/src/sage/stats/r.py b/src/sage/stats/r.py
index 47f492eff61..5a9d5313de4 100644
--- a/src/sage/stats/r.py
+++ b/src/sage/stats/r.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
"""
T-test using R
diff --git a/src/sage/stats/time_series.pxd b/src/sage/stats/time_series.pxd
index 86a9095ba75..e127c87d15d 100644
--- a/src/sage/stats/time_series.pxd
+++ b/src/sage/stats/time_series.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
cdef class TimeSeries:
cdef double* _values
cdef Py_ssize_t _length
diff --git a/src/sage/stats/time_series.pyx b/src/sage/stats/time_series.pyx
index d6823f85add..632c6c57fe8 100644
--- a/src/sage/stats/time_series.pyx
+++ b/src/sage/stats/time_series.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: optional - numpy
r"""
Time Series
diff --git a/src/sage/structure/__init__.py b/src/sage/structure/__init__.py
index 8689eb1717f..bf977ccc379 100644
--- a/src/sage/structure/__init__.py
+++ b/src/sage/structure/__init__.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
# Resolve a cyclic import
import sage.structure.element
diff --git a/src/sage/structure/all.py b/src/sage/structure/all.py
index df0114c8382..40b9daa67e8 100644
--- a/src/sage/structure/all.py
+++ b/src/sage/structure/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.factorization import Factorization
from sage.structure.sequence import Sequence, seq
@@ -12,7 +13,7 @@
get_coercion_model,
coercion_traceback,
parent
- )
+)
from sage.structure.parent import Parent
diff --git a/src/sage/structure/category_object.pxd b/src/sage/structure/category_object.pxd
index 83d3d4967d4..0f629e245ac 100644
--- a/src/sage/structure/category_object.pxd
+++ b/src/sage/structure/category_object.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
#*****************************************************************************
# Copyright (C) 2006 William Stein
#
diff --git a/src/sage/structure/category_object.pyx b/src/sage/structure/category_object.pyx
index 48cee10c2bc..1f84a2ed2dc 100644
--- a/src/sage/structure/category_object.pyx
+++ b/src/sage/structure/category_object.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# cython: old_style_globals=True
r"""
Base class for objects of a category
diff --git a/src/sage/structure/coerce.pxd b/src/sage/structure/coerce.pxd
index 71d519cf185..0d2cd13f1d8 100644
--- a/src/sage/structure/coerce.pxd
+++ b/src/sage/structure/coerce.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.parent cimport Parent
from sage.structure.coerce_dict cimport TripleDict
diff --git a/src/sage/structure/coerce.pyx b/src/sage/structure/coerce.pyx
index 888643314f5..003af5718d1 100644
--- a/src/sage/structure/coerce.pyx
+++ b/src/sage/structure/coerce.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
The coercion model
diff --git a/src/sage/structure/coerce_actions.pxd b/src/sage/structure/coerce_actions.pxd
index 81a52ff5ad6..dc681f5a075 100644
--- a/src/sage/structure/coerce_actions.pxd
+++ b/src/sage/structure/coerce_actions.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.categories.action cimport Action
from sage.categories.map cimport Map
diff --git a/src/sage/structure/coerce_actions.pyx b/src/sage/structure/coerce_actions.pyx
index e1ff3b378e7..1c54d7624ab 100644
--- a/src/sage/structure/coerce_actions.pyx
+++ b/src/sage/structure/coerce_actions.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Coerce actions
"""
diff --git a/src/sage/structure/coerce_dict.pxd b/src/sage/structure/coerce_dict.pxd
index 2f7f8d3aef4..13d9e3ad0f1 100644
--- a/src/sage/structure/coerce_dict.pxd
+++ b/src/sage/structure/coerce_dict.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cimport cython
from cpython.object cimport PyObject
diff --git a/src/sage/structure/coerce_dict.pyx b/src/sage/structure/coerce_dict.pyx
index bdec7ec97cd..ce9ea7811b5 100644
--- a/src/sage/structure/coerce_dict.pyx
+++ b/src/sage/structure/coerce_dict.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Containers for storing coercion data
diff --git a/src/sage/structure/coerce_exceptions.py b/src/sage/structure/coerce_exceptions.py
index 5859831e4fa..e60984f25ee 100644
--- a/src/sage/structure/coerce_exceptions.py
+++ b/src/sage/structure/coerce_exceptions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"Exceptions raised by the coercion model"
###############################################################################
diff --git a/src/sage/structure/coerce_maps.pxd b/src/sage/structure/coerce_maps.pxd
index 0afc1a96adb..cf8e1f6f51a 100644
--- a/src/sage/structure/coerce_maps.pxd
+++ b/src/sage/structure/coerce_maps.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.categories.map cimport Map
diff --git a/src/sage/structure/coerce_maps.pyx b/src/sage/structure/coerce_maps.pyx
index aabeafa6bc8..272f4d9baf0 100644
--- a/src/sage/structure/coerce_maps.pyx
+++ b/src/sage/structure/coerce_maps.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Coerce maps
"""
diff --git a/src/sage/structure/debug_options.pxd b/src/sage/structure/debug_options.pxd
index 55db2332ed4..42a3411e76b 100644
--- a/src/sage/structure/debug_options.pxd
+++ b/src/sage/structure/debug_options.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
cdef class DebugOptions_class:
cdef public bint unique_parent_warnings
cdef public bint refine_category_hash_check
diff --git a/src/sage/structure/debug_options.pyx b/src/sage/structure/debug_options.pyx
index 05d7835f869..3afe5ca835a 100644
--- a/src/sage/structure/debug_options.pyx
+++ b/src/sage/structure/debug_options.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Debug options for the :mod:`sage.structure` modules
diff --git a/src/sage/structure/dynamic_class.py b/src/sage/structure/dynamic_class.py
index f8df20a02ae..51a2c333186 100644
--- a/src/sage/structure/dynamic_class.py
+++ b/src/sage/structure/dynamic_class.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Dynamic classes
diff --git a/src/sage/structure/element.pxd b/src/sage/structure/element.pxd
index 2d360905783..cc1bf225710 100644
--- a/src/sage/structure/element.pxd
+++ b/src/sage/structure/element.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.sage_object cimport SageObject
from sage.structure.parent cimport Parent
from sage.misc.inherit_comparison cimport InheritComparisonMetaclass
diff --git a/src/sage/structure/element.pyx b/src/sage/structure/element.pyx
index 6ee4d7c8201..a536004aba5 100644
--- a/src/sage/structure/element.pyx
+++ b/src/sage/structure/element.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# Compile this with -Os because it works around a bug with
# GCC-4.7.3 + Cython 0.19 on Itanium, see Issue #14452. Moreover, it
# actually results in faster code than -O3.
diff --git a/src/sage/structure/element_wrapper.pxd b/src/sage/structure/element_wrapper.pxd
index f8689c57947..dda6630c84d 100644
--- a/src/sage/structure/element_wrapper.pxd
+++ b/src/sage/structure/element_wrapper.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from sage.structure.element cimport Element
diff --git a/src/sage/structure/element_wrapper.pyx b/src/sage/structure/element_wrapper.pyx
index 0f0c25bdd8d..f7fc4e38bad 100644
--- a/src/sage/structure/element_wrapper.pyx
+++ b/src/sage/structure/element_wrapper.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
"""
Element Wrapper
diff --git a/src/sage/structure/factorization.py b/src/sage/structure/factorization.py
index 00ad9658e59..e699266caed 100644
--- a/src/sage/structure/factorization.py
+++ b/src/sage/structure/factorization.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Factorizations
diff --git a/src/sage/structure/factorization_integer.py b/src/sage/structure/factorization_integer.py
index 139a3580e48..542daf538dd 100644
--- a/src/sage/structure/factorization_integer.py
+++ b/src/sage/structure/factorization_integer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"IntegerFactorization objects"
from sage.structure.factorization import Factorization
diff --git a/src/sage/structure/factory.pyx b/src/sage/structure/factory.pyx
index 75a043250c2..7484acc0e2c 100644
--- a/src/sage/structure/factory.pyx
+++ b/src/sage/structure/factory.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Factory for cached representations
diff --git a/src/sage/structure/formal_sum.py b/src/sage/structure/formal_sum.py
index f8f9b4d16de..b11865373b4 100644
--- a/src/sage/structure/formal_sum.py
+++ b/src/sage/structure/formal_sum.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Formal sums
diff --git a/src/sage/structure/gens_py.py b/src/sage/structure/gens_py.py
index 22555a74c92..6d3fcae2520 100644
--- a/src/sage/structure/gens_py.py
+++ b/src/sage/structure/gens_py.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Pure python code for abstract base class for objects with generators
"""
diff --git a/src/sage/structure/global_options.py b/src/sage/structure/global_options.py
index 01bbfd79ad9..9d27e826f2d 100644
--- a/src/sage/structure/global_options.py
+++ b/src/sage/structure/global_options.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Global options
diff --git a/src/sage/structure/indexed_generators.py b/src/sage/structure/indexed_generators.py
index f0d521bee87..de3a703baf9 100644
--- a/src/sage/structure/indexed_generators.py
+++ b/src/sage/structure/indexed_generators.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
"""
Indexed Generators
"""
diff --git a/src/sage/structure/list_clone.pxd b/src/sage/structure/list_clone.pxd
index ef1d20f4bd3..4366d7494e3 100644
--- a/src/sage/structure/list_clone.pxd
+++ b/src/sage/structure/list_clone.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
#*****************************************************************************
# Copyright (C) 2009-2010 Florent Hivert
#
diff --git a/src/sage/structure/list_clone.pyx b/src/sage/structure/list_clone.pyx
index 8ae709adc45..ae8cb0de103 100644
--- a/src/sage/structure/list_clone.pyx
+++ b/src/sage/structure/list_clone.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Elements, Array and Lists With Clone Protocol
diff --git a/src/sage/structure/list_clone_demo.pyx b/src/sage/structure/list_clone_demo.pyx
index 0bd018f57c0..df9cf81cd70 100644
--- a/src/sage/structure/list_clone_demo.pyx
+++ b/src/sage/structure/list_clone_demo.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Elements, Array and Lists With Clone Protocol, demonstration classes
diff --git a/src/sage/structure/list_clone_timings.py b/src/sage/structure/list_clone_timings.py
index efe5d20efc7..05320d6bc77 100644
--- a/src/sage/structure/list_clone_timings.py
+++ b/src/sage/structure/list_clone_timings.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
"""
Performance Test for Clone Protocol
diff --git a/src/sage/structure/list_clone_timings_cy.pyx b/src/sage/structure/list_clone_timings_cy.pyx
index 46152f1e68b..87039d3f94a 100644
--- a/src/sage/structure/list_clone_timings_cy.pyx
+++ b/src/sage/structure/list_clone_timings_cy.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Cython Functions for Timing Clone Protocol
"""
diff --git a/src/sage/structure/mutability.pxd b/src/sage/structure/mutability.pxd
index f5df8b89892..bb16ece621c 100644
--- a/src/sage/structure/mutability.pxd
+++ b/src/sage/structure/mutability.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Mutability -- Pyrex Implementation
"""
@@ -17,4 +18,4 @@ cdef class Mutability:
cpdef _require_mutable(self)
cpdef _require_immutable(self)
cpdef bint is_immutable(self) noexcept
- cpdef bint is_mutable(self) noexcept
\ No newline at end of file
+ cpdef bint is_mutable(self) noexcept
diff --git a/src/sage/structure/mutability.pyx b/src/sage/structure/mutability.pyx
index c61fd06c3dc..e33c2bf6b38 100644
--- a/src/sage/structure/mutability.pyx
+++ b/src/sage/structure/mutability.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Mutability Cython Implementation
"""
diff --git a/src/sage/structure/nonexact.py b/src/sage/structure/nonexact.py
index ffb39e5f579..cef7a641f26 100644
--- a/src/sage/structure/nonexact.py
+++ b/src/sage/structure/nonexact.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Precision management for non-exact objects
diff --git a/src/sage/structure/parent.pxd b/src/sage/structure/parent.pxd
index 1635ef8b36e..691bd78eb2a 100644
--- a/src/sage/structure/parent.pxd
+++ b/src/sage/structure/parent.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
#*****************************************************************************
# 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
diff --git a/src/sage/structure/parent.pyx b/src/sage/structure/parent.pyx
index 2b579cdc60a..7c4737d8d7d 100644
--- a/src/sage/structure/parent.pyx
+++ b/src/sage/structure/parent.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Base class for parent objects
diff --git a/src/sage/structure/parent_base.pxd b/src/sage/structure/parent_base.pxd
index 8ffac64eff2..3683c39d827 100644
--- a/src/sage/structure/parent_base.pxd
+++ b/src/sage/structure/parent_base.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
###############################################################################
# Sage: Open Source Mathematical Software
# Copyright (C) 2006 William Stein
diff --git a/src/sage/structure/parent_base.pyx b/src/sage/structure/parent_base.pyx
index b41175b5bff..7cef8f692c5 100644
--- a/src/sage/structure/parent_base.pyx
+++ b/src/sage/structure/parent_base.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Base class for old-style parent objects with a base ring
"""
diff --git a/src/sage/structure/parent_gens.pxd b/src/sage/structure/parent_gens.pxd
index cf3b416317f..573db0c52fa 100644
--- a/src/sage/structure/parent_gens.pxd
+++ b/src/sage/structure/parent_gens.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Parent objects with generators
"""
diff --git a/src/sage/structure/parent_gens.pyx b/src/sage/structure/parent_gens.pyx
index 3f69b9daee4..6f12c36670f 100644
--- a/src/sage/structure/parent_gens.pyx
+++ b/src/sage/structure/parent_gens.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Base class for old-style parent objects with generators
diff --git a/src/sage/structure/parent_old.pxd b/src/sage/structure/parent_old.pxd
index 54bb4753970..6a26fba915e 100644
--- a/src/sage/structure/parent_old.pxd
+++ b/src/sage/structure/parent_old.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
# ****************************************************************************
# Copyright (C) 2006 William Stein
#
diff --git a/src/sage/structure/parent_old.pyx b/src/sage/structure/parent_old.pyx
index 7b8ce70b5a5..a34928ff8a2 100644
--- a/src/sage/structure/parent_old.pyx
+++ b/src/sage/structure/parent_old.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Base class for old-style parent objects
diff --git a/src/sage/structure/proof/__init__.py b/src/sage/structure/proof/__init__.py
index e69de29bb2d..f9b8167c3cd 100644
--- a/src/sage/structure/proof/__init__.py
+++ b/src/sage/structure/proof/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-objects
diff --git a/src/sage/structure/proof/all.py b/src/sage/structure/proof/all.py
index c006c56c36d..d3a72dc1400 100644
--- a/src/sage/structure/proof/all.py
+++ b/src/sage/structure/proof/all.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
def arithmetic(t=None):
@@ -35,7 +36,7 @@ def arithmetic(t=None):
sage: proof.arithmetic()
True
"""
- from .proof import _proof_prefs
+ from sage.structure.proof.proof import _proof_prefs
return _proof_prefs.arithmetic(t)
@@ -73,7 +74,7 @@ def elliptic_curve(t=None):
sage: proof.elliptic_curve()
True
"""
- from .proof import _proof_prefs
+ from sage.structure.proof.proof import _proof_prefs
return _proof_prefs.elliptic_curve(t)
@@ -111,7 +112,7 @@ def linear_algebra(t=None):
sage: proof.linear_algebra()
True
"""
- from .proof import _proof_prefs
+ from sage.structure.proof.proof import _proof_prefs
return _proof_prefs.linear_algebra(t)
@@ -148,7 +149,7 @@ def number_field(t=None):
sage: proof.number_field()
True
"""
- from .proof import _proof_prefs
+ from sage.structure.proof.proof import _proof_prefs
return _proof_prefs.number_field(t)
@@ -185,7 +186,7 @@ def polynomial(t=None):
sage: proof.polynomial()
True
"""
- from .proof import _proof_prefs
+ from sage.structure.proof.proof import _proof_prefs
return _proof_prefs.polynomial(t)
@@ -234,11 +235,11 @@ def all(t=None):
sage: proof.number_field()
True
"""
- from .proof import _proof_prefs
+ from sage.structure.proof.proof import _proof_prefs
if t is None:
return _proof_prefs._require_proof.copy()
for s in _proof_prefs._require_proof:
_proof_prefs._require_proof[s] = bool(t)
-from .proof import WithProof
+from sage.structure.proof.proof import WithProof
diff --git a/src/sage/structure/proof/proof.py b/src/sage/structure/proof/proof.py
index 49d4ecebe5a..bb02b6dce54 100644
--- a/src/sage/structure/proof/proof.py
+++ b/src/sage/structure/proof/proof.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"Global proof preferences"
from sage.structure.sage_object import SageObject
diff --git a/src/sage/structure/richcmp.pxd b/src/sage/structure/richcmp.pxd
index 98bda696ec7..ecbeaef391e 100644
--- a/src/sage/structure/richcmp.pxd
+++ b/src/sage/structure/richcmp.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
from libc.stdint cimport uint32_t
from cpython.object cimport (Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT, Py_GE,
PyObject_RichCompare)
diff --git a/src/sage/structure/richcmp.pyx b/src/sage/structure/richcmp.pyx
index 465f16e8274..934a49e7600 100644
--- a/src/sage/structure/richcmp.pyx
+++ b/src/sage/structure/richcmp.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Cython-like rich comparisons in Python
diff --git a/src/sage/structure/sage_object.pxd b/src/sage/structure/sage_object.pxd
index 5e3e442c896..40b753d1aa3 100644
--- a/src/sage/structure/sage_object.pxd
+++ b/src/sage/structure/sage_object.pxd
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-objects
cdef class SageObject:
pass
diff --git a/src/sage/structure/sage_object.pyx b/src/sage/structure/sage_object.pyx
index b5b9f59334d..4c4bd56678e 100644
--- a/src/sage/structure/sage_object.pyx
+++ b/src/sage/structure/sage_object.pyx
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-objects
r"""
Abstract base class for Sage objects
"""
diff --git a/src/sage/structure/sage_object_test.py b/src/sage/structure/sage_object_test.py
index 721c1ad7719..644543e99f8 100644
--- a/src/sage/structure/sage_object_test.py
+++ b/src/sage/structure/sage_object_test.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
import pytest
from sage.structure.sage_object import SageObject
diff --git a/src/sage/structure/sequence.py b/src/sage/structure/sequence.py
index 92d464241e6..5bbcfc1798a 100644
--- a/src/sage/structure/sequence.py
+++ b/src/sage/structure/sequence.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Finite Homogeneous Sequences
diff --git a/src/sage/structure/set_factories.py b/src/sage/structure/set_factories.py
index f8b8e3643c9..46d8870379c 100644
--- a/src/sage/structure/set_factories.py
+++ b/src/sage/structure/set_factories.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Set factories
=============
diff --git a/src/sage/structure/set_factories_example.py b/src/sage/structure/set_factories_example.py
index df1d7d7f49c..8212f7ce525 100644
--- a/src/sage/structure/set_factories_example.py
+++ b/src/sage/structure/set_factories_example.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
An example of set factory
=========================
diff --git a/src/sage/structure/support_view.py b/src/sage/structure/support_view.py
index 0778f2a47ed..bebae1a31f5 100644
--- a/src/sage/structure/support_view.py
+++ b/src/sage/structure/support_view.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Iterable of the keys of a Mapping associated with nonzero values
"""
diff --git a/src/sage/structure/test_factory.py b/src/sage/structure/test_factory.py
index 145311b9dd3..9835a06f909 100644
--- a/src/sage/structure/test_factory.py
+++ b/src/sage/structure/test_factory.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
"""
Test of the :mod:`~sage.structure.factory` module
"""
diff --git a/src/sage/structure/unique_representation.py b/src/sage/structure/unique_representation.py
index bef7563001e..5dd5072b45f 100644
--- a/src/sage/structure/unique_representation.py
+++ b/src/sage/structure/unique_representation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-objects
r"""
Unique Representation
diff --git a/src/sage/symbolic/all.py b/src/sage/symbolic/all.py
index b5a0883d202..1ff2a51a3f8 100644
--- a/src/sage/symbolic/all.py
+++ b/src/sage/symbolic/all.py
@@ -1,14 +1,16 @@
-from .ring import SR
-from .constants import (pi, e, NaN, golden_ratio, log2, euler_gamma, catalan,
- khinchin, twinprime, mertens, glaisher)
-from .expression import Expression, solve_diophantine, hold
-from .callable import CallableSymbolicExpressionRing
+# sage_setup: distribution = sagemath-symbolics
+
+from sage.symbolic.ring import SR
+from sage.symbolic.constants import (pi, e, NaN, golden_ratio, log2, euler_gamma, catalan,
+ khinchin, twinprime, mertens, glaisher)
+from sage.symbolic.expression import Expression, solve_diophantine, hold
+from sage.symbolic.callable import CallableSymbolicExpressionRing
from sage.symbolic.relation import solve, solve_mod, solve_ineq
from sage.symbolic.assumptions import assume, forget, assumptions, assuming
-from .units import units
+from sage.symbolic.units import units
π = pi
-from .operators import D
+from sage.symbolic.operators import D
diff --git a/src/sage/symbolic/all__sagemath_categories.py b/src/sage/symbolic/all__sagemath_categories.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/symbolic/all__sagemath_standard_no_symbolics.py b/src/sage/symbolic/all__sagemath_standard_no_symbolics.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/symbolic/assumptions.py b/src/sage/symbolic/assumptions.py
index 9ef8dd39212..9503aa9786f 100644
--- a/src/sage/symbolic/assumptions.py
+++ b/src/sage/symbolic/assumptions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Assumptions
diff --git a/src/sage/symbolic/benchmark.py b/src/sage/symbolic/benchmark.py
index 66d8217e315..f5aea55e97b 100644
--- a/src/sage/symbolic/benchmark.py
+++ b/src/sage/symbolic/benchmark.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Benchmarks
diff --git a/src/sage/symbolic/callable.py b/src/sage/symbolic/callable.py
index f578454706a..44b5d8c957c 100644
--- a/src/sage/symbolic/callable.py
+++ b/src/sage/symbolic/callable.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Callable Symbolic Expressions
diff --git a/src/sage/symbolic/comparison_impl.pxi b/src/sage/symbolic/comparison_impl.pxi
index a1ef76bd778..6dc61c2bab3 100644
--- a/src/sage/symbolic/comparison_impl.pxi
+++ b/src/sage/symbolic/comparison_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Comparison of Symbolic Expressions
diff --git a/src/sage/symbolic/complexity_measures.py b/src/sage/symbolic/complexity_measures.py
index 528d1bf6906..dc6211f6486 100644
--- a/src/sage/symbolic/complexity_measures.py
+++ b/src/sage/symbolic/complexity_measures.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Complexity Measures
diff --git a/src/sage/symbolic/constants.py b/src/sage/symbolic/constants.py
index 043a55aa0e4..3b4bb3375c2 100644
--- a/src/sage/symbolic/constants.py
+++ b/src/sage/symbolic/constants.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Mathematical constants
diff --git a/src/sage/symbolic/constants_c_impl.pxi b/src/sage/symbolic/constants_c_impl.pxi
index 63a90c71fd9..901dabb8772 100644
--- a/src/sage/symbolic/constants_c_impl.pxi
+++ b/src/sage/symbolic/constants_c_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
The constant `e`
"""
diff --git a/src/sage/symbolic/expression.pxd b/src/sage/symbolic/expression.pxd
index 33e352b7f3d..afd28c1d25c 100644
--- a/src/sage/symbolic/expression.pxd
+++ b/src/sage/symbolic/expression.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-symbolics
+
cpdef _repr_Expression(x)
cpdef _latex_Expression(x)
cpdef new_Expression(parent, x)
diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx
index e14674678a0..053ad77b6e6 100644
--- a/src/sage/symbolic/expression.pyx
+++ b/src/sage/symbolic/expression.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
# distutils: sources = sage/symbolic/ginac/add.cpp sage/symbolic/ginac/archive.cpp sage/symbolic/ginac/assume.cpp sage/symbolic/ginac/basic.cpp sage/symbolic/ginac/cmatcher.cpp sage/symbolic/ginac/constant.cpp sage/symbolic/ginac/context.cpp sage/symbolic/ginac/ex.cpp sage/symbolic/ginac/expair.cpp sage/symbolic/ginac/expairseq.cpp sage/symbolic/ginac/exprseq.cpp sage/symbolic/ginac/fderivative.cpp sage/symbolic/ginac/function.cpp sage/symbolic/ginac/function_info.cpp sage/symbolic/ginac/infinity.cpp sage/symbolic/ginac/infoflagbase.cpp sage/symbolic/ginac/inifcns.cpp sage/symbolic/ginac/inifcns_comb.cpp sage/symbolic/ginac/inifcns_gamma.cpp sage/symbolic/ginac/inifcns_hyperb.cpp sage/symbolic/ginac/inifcns_hyperg.cpp sage/symbolic/ginac/inifcns_nstdsums.cpp sage/symbolic/ginac/inifcns_orthopoly.cpp sage/symbolic/ginac/inifcns_trans.cpp sage/symbolic/ginac/inifcns_trig.cpp sage/symbolic/ginac/inifcns_zeta.cpp sage/symbolic/ginac/lst.cpp sage/symbolic/ginac/matrix.cpp sage/symbolic/ginac/mpoly-giac.cpp sage/symbolic/ginac/mpoly-ginac.cpp sage/symbolic/ginac/mpoly-singular.cpp sage/symbolic/ginac/mpoly.cpp sage/symbolic/ginac/mul.cpp sage/symbolic/ginac/normal.cpp sage/symbolic/ginac/numeric.cpp sage/symbolic/ginac/operators.cpp sage/symbolic/ginac/order.cpp sage/symbolic/ginac/power.cpp sage/symbolic/ginac/print.cpp sage/symbolic/ginac/pseries.cpp sage/symbolic/ginac/py_funcs.cpp sage/symbolic/ginac/registrar.cpp sage/symbolic/ginac/relational.cpp sage/symbolic/ginac/remember.cpp sage/symbolic/ginac/sum.cpp sage/symbolic/ginac/symbol.cpp sage/symbolic/ginac/templates.cpp sage/symbolic/ginac/upoly-ginac.cpp sage/symbolic/ginac/useries.cpp sage/symbolic/ginac/utils.cpp sage/symbolic/ginac/wildcard.cpp
# distutils: language = c++
# distutils: libraries = flint gmp SINGULAR_LIBRARIES
diff --git a/src/sage/symbolic/expression_conversion_algebraic.py b/src/sage/symbolic/expression_conversion_algebraic.py
index d5764cb2421..0a4e6b926cb 100644
--- a/src/sage/symbolic/expression_conversion_algebraic.py
+++ b/src/sage/symbolic/expression_conversion_algebraic.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Conversion of symbolic expressions to algebraic numbers
"""
diff --git a/src/sage/symbolic/expression_conversion_sympy.py b/src/sage/symbolic/expression_conversion_sympy.py
index e7aaf3bd656..00c7dae8bbc 100644
--- a/src/sage/symbolic/expression_conversion_sympy.py
+++ b/src/sage/symbolic/expression_conversion_sympy.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
# sage.doctest: needs sympy
r"""
Conversion of symbolic expressions to SymPy
diff --git a/src/sage/symbolic/expression_conversions.py b/src/sage/symbolic/expression_conversions.py
index 3944390c746..fb29ef525c0 100644
--- a/src/sage/symbolic/expression_conversions.py
+++ b/src/sage/symbolic/expression_conversions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Conversion of symbolic expressions to other types
diff --git a/src/sage/symbolic/function.pxd b/src/sage/symbolic/function.pxd
index db1ba6c5d54..a3235c3f4c0 100644
--- a/src/sage/symbolic/function.pxd
+++ b/src/sage/symbolic/function.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
from sage.structure.sage_object cimport SageObject
cdef class Function(SageObject):
diff --git a/src/sage/symbolic/function.pyx b/src/sage/symbolic/function.pyx
index f33b8eb47e6..02dd2bffc19 100644
--- a/src/sage/symbolic/function.pyx
+++ b/src/sage/symbolic/function.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Classes for symbolic functions
diff --git a/src/sage/symbolic/function_factory.py b/src/sage/symbolic/function_factory.py
index 43779c4fb42..25686ba839d 100644
--- a/src/sage/symbolic/function_factory.py
+++ b/src/sage/symbolic/function_factory.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Factory for symbolic functions
"""
diff --git a/src/sage/symbolic/getitem_impl.pxi b/src/sage/symbolic/getitem_impl.pxi
index c20cf1e6e31..48b0097995f 100644
--- a/src/sage/symbolic/getitem_impl.pxi
+++ b/src/sage/symbolic/getitem_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"Operands"
# ****************************************************************************
diff --git a/src/sage/symbolic/integration/all.py b/src/sage/symbolic/integration/all.py
index e69de29bb2d..332eaf1cdb6 100644
--- a/src/sage/symbolic/integration/all.py
+++ b/src/sage/symbolic/integration/all.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-symbolics
diff --git a/src/sage/symbolic/integration/external.py b/src/sage/symbolic/integration/external.py
index ea73c69ff74..bf4ea9c180d 100644
--- a/src/sage/symbolic/integration/external.py
+++ b/src/sage/symbolic/integration/external.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""Symbolic Integration via External Software
TESTS::
diff --git a/src/sage/symbolic/integration/integral.py b/src/sage/symbolic/integration/integral.py
index 61e1513d87f..66105f0357e 100644
--- a/src/sage/symbolic/integration/integral.py
+++ b/src/sage/symbolic/integration/integral.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Symbolic Integration
"""
diff --git a/src/sage/symbolic/maxima_wrapper.py b/src/sage/symbolic/maxima_wrapper.py
index ca30af3efcf..3868ee20ad4 100644
--- a/src/sage/symbolic/maxima_wrapper.py
+++ b/src/sage/symbolic/maxima_wrapper.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"Access to Maxima methods"
###############################################################################
diff --git a/src/sage/symbolic/operators.py b/src/sage/symbolic/operators.py
index 07add13f71e..000f889da3a 100644
--- a/src/sage/symbolic/operators.py
+++ b/src/sage/symbolic/operators.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"Operators"
import operator
diff --git a/src/sage/symbolic/pynac.pxi b/src/sage/symbolic/pynac.pxi
index 4bdbcd99526..885f4aef621 100644
--- a/src/sage/symbolic/pynac.pxi
+++ b/src/sage/symbolic/pynac.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Declarations for pynac, a Python frontend for ginac
diff --git a/src/sage/symbolic/pynac_constant_impl.pxi b/src/sage/symbolic/pynac_constant_impl.pxi
index 442afbafbc3..5ee32344043 100644
--- a/src/sage/symbolic/pynac_constant_impl.pxi
+++ b/src/sage/symbolic/pynac_constant_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Wrapper around Pynac's constants
"""
diff --git a/src/sage/symbolic/pynac_function_impl.pxi b/src/sage/symbolic/pynac_function_impl.pxi
index f20c8faf91a..218db113423 100644
--- a/src/sage/symbolic/pynac_function_impl.pxi
+++ b/src/sage/symbolic/pynac_function_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
cpdef call_registered_function(unsigned serial,
int nargs,
list args,
diff --git a/src/sage/symbolic/pynac_impl.pxi b/src/sage/symbolic/pynac_impl.pxi
index f31a5498218..de896a0adee 100644
--- a/src/sage/symbolic/pynac_impl.pxi
+++ b/src/sage/symbolic/pynac_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Pynac interface
"""
diff --git a/src/sage/symbolic/random_tests.py b/src/sage/symbolic/random_tests.py
index 552cf61a5b6..609f3a42ef3 100644
--- a/src/sage/symbolic/random_tests.py
+++ b/src/sage/symbolic/random_tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Randomized tests of GiNaC / PyNaC
"""
diff --git a/src/sage/symbolic/relation.py b/src/sage/symbolic/relation.py
index 6d2e4ec79be..dc567ec4b03 100644
--- a/src/sage/symbolic/relation.py
+++ b/src/sage/symbolic/relation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Symbolic Equations and Inequalities
diff --git a/src/sage/symbolic/ring.pxd b/src/sage/symbolic/ring.pxd
index 9e628098dd1..7f5a96be693 100644
--- a/src/sage/symbolic/ring.pxd
+++ b/src/sage/symbolic/ring.pxd
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
cimport sage.rings.abc
cdef class SymbolicRing(sage.rings.abc.SymbolicRing):
diff --git a/src/sage/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx
index 32a22e6f861..a380d091ed3 100644
--- a/src/sage/symbolic/ring.pyx
+++ b/src/sage/symbolic/ring.pyx
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-symbolics
"""
The symbolic ring
"""
diff --git a/src/sage/symbolic/series_impl.pxi b/src/sage/symbolic/series_impl.pxi
index 3f869920d6b..739da937d81 100644
--- a/src/sage/symbolic/series_impl.pxi
+++ b/src/sage/symbolic/series_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Symbolic Series
diff --git a/src/sage/symbolic/subring.py b/src/sage/symbolic/subring.py
index 2db60e8f915..5bde515595b 100644
--- a/src/sage/symbolic/subring.py
+++ b/src/sage/symbolic/subring.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
Subrings of the Symbolic Ring
diff --git a/src/sage/symbolic/substitution_map_impl.pxi b/src/sage/symbolic/substitution_map_impl.pxi
index 7d9e35cf630..2484748c2c3 100644
--- a/src/sage/symbolic/substitution_map_impl.pxi
+++ b/src/sage/symbolic/substitution_map_impl.pxi
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Substitution Maps
diff --git a/src/sage/symbolic/symbols.py b/src/sage/symbolic/symbols.py
index 7fe7cdb4472..239e4912228 100644
--- a/src/sage/symbolic/symbols.py
+++ b/src/sage/symbolic/symbols.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Symbol table
"""
diff --git a/src/sage/symbolic/symengine.py b/src/sage/symbolic/symengine.py
index 5c3a46eb8b0..5954616e336 100644
--- a/src/sage/symbolic/symengine.py
+++ b/src/sage/symbolic/symengine.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
r"""
EXAMPLES::
diff --git a/src/sage/symbolic/tests.py b/src/sage/symbolic/tests.py
index a7c6a9a6cb2..2c7a1ba6f24 100644
--- a/src/sage/symbolic/tests.py
+++ b/src/sage/symbolic/tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Tests for the Sage/Pynac interaction
"""
diff --git a/src/sage/symbolic/units.py b/src/sage/symbolic/units.py
index 5e1abf675c9..25837199d42 100644
--- a/src/sage/symbolic/units.py
+++ b/src/sage/symbolic/units.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-symbolics
"""
Units of measurement
diff --git a/src/sage/tensor/all.py b/src/sage/tensor/all.py
index dc52f0b09ed..15ed68111f2 100644
--- a/src/sage/tensor/all.py
+++ b/src/sage/tensor/all.py
@@ -1 +1,3 @@
-from .modules.all import *
+# sage_setup: distribution = sagemath-modules
+
+from sage.tensor.modules.all import *
diff --git a/src/sage/tensor/modules/all.py b/src/sage/tensor/modules/all.py
index 92b555136b4..98108a4359d 100644
--- a/src/sage/tensor/modules/all.py
+++ b/src/sage/tensor/modules/all.py
@@ -1,6 +1,8 @@
+# sage_setup: distribution = sagemath-modules
from sage.misc.lazy_import import lazy_import
lazy_import('sage.tensor.modules.finite_rank_free_module',
'FiniteRankFreeModule')
# NB: in Sage 8.8.beta2, the lazy import of FiniteRankFreeModule is necessary
# to avoid some import order issue when Chart is imported in
# free_module_tensor, see comments 12 to 18 in :issue:`27655`.
+del lazy_import
diff --git a/src/sage/tensor/modules/alternating_contr_tensor.py b/src/sage/tensor/modules/alternating_contr_tensor.py
index 3ef51967bc6..c0ef91fae35 100644
--- a/src/sage/tensor/modules/alternating_contr_tensor.py
+++ b/src/sage/tensor/modules/alternating_contr_tensor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Alternating contravariant tensors on free modules
diff --git a/src/sage/tensor/modules/comp.py b/src/sage/tensor/modules/comp.py
index 7912b9269f8..0e2da3c8953 100644
--- a/src/sage/tensor/modules/comp.py
+++ b/src/sage/tensor/modules/comp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Components as indexed sets of ring elements
diff --git a/src/sage/tensor/modules/ext_pow_free_module.py b/src/sage/tensor/modules/ext_pow_free_module.py
index 785b4ecc6bd..789d7f36ea0 100644
--- a/src/sage/tensor/modules/ext_pow_free_module.py
+++ b/src/sage/tensor/modules/ext_pow_free_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Exterior powers of free modules
diff --git a/src/sage/tensor/modules/finite_rank_free_module.py b/src/sage/tensor/modules/finite_rank_free_module.py
index 0434ed84c53..7b524054ab9 100644
--- a/src/sage/tensor/modules/finite_rank_free_module.py
+++ b/src/sage/tensor/modules/finite_rank_free_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free modules of finite rank
diff --git a/src/sage/tensor/modules/format_utilities.py b/src/sage/tensor/modules/format_utilities.py
index 139fee85310..381eb470dbf 100644
--- a/src/sage/tensor/modules/format_utilities.py
+++ b/src/sage/tensor/modules/format_utilities.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Formatting utilities
diff --git a/src/sage/tensor/modules/free_module_alt_form.py b/src/sage/tensor/modules/free_module_alt_form.py
index 4285b90cb41..934a7e1a3bd 100644
--- a/src/sage/tensor/modules/free_module_alt_form.py
+++ b/src/sage/tensor/modules/free_module_alt_form.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Alternating forms on free modules
diff --git a/src/sage/tensor/modules/free_module_automorphism.py b/src/sage/tensor/modules/free_module_automorphism.py
index ebe30d6255b..0bb0e208433 100644
--- a/src/sage/tensor/modules/free_module_automorphism.py
+++ b/src/sage/tensor/modules/free_module_automorphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free module automorphisms
diff --git a/src/sage/tensor/modules/free_module_basis.py b/src/sage/tensor/modules/free_module_basis.py
index 9d112ef48d7..0e58585a48e 100644
--- a/src/sage/tensor/modules/free_module_basis.py
+++ b/src/sage/tensor/modules/free_module_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free module bases
diff --git a/src/sage/tensor/modules/free_module_element.py b/src/sage/tensor/modules/free_module_element.py
index d4e3f42a390..96eec08c27b 100644
--- a/src/sage/tensor/modules/free_module_element.py
+++ b/src/sage/tensor/modules/free_module_element.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Elements of free modules of finite rank
diff --git a/src/sage/tensor/modules/free_module_homset.py b/src/sage/tensor/modules/free_module_homset.py
index 509ae146d49..7f1da1fe73f 100644
--- a/src/sage/tensor/modules/free_module_homset.py
+++ b/src/sage/tensor/modules/free_module_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Sets of morphisms between free modules
diff --git a/src/sage/tensor/modules/free_module_linear_group.py b/src/sage/tensor/modules/free_module_linear_group.py
index a58bd3a8a72..0e328a78ee1 100644
--- a/src/sage/tensor/modules/free_module_linear_group.py
+++ b/src/sage/tensor/modules/free_module_linear_group.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
General linear group of a free module
diff --git a/src/sage/tensor/modules/free_module_morphism.py b/src/sage/tensor/modules/free_module_morphism.py
index 073cb91e60c..9c1ed019974 100644
--- a/src/sage/tensor/modules/free_module_morphism.py
+++ b/src/sage/tensor/modules/free_module_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free module morphisms
diff --git a/src/sage/tensor/modules/free_module_tensor.py b/src/sage/tensor/modules/free_module_tensor.py
index 2dd54a64c1a..36d000435ab 100644
--- a/src/sage/tensor/modules/free_module_tensor.py
+++ b/src/sage/tensor/modules/free_module_tensor.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Tensors on free modules
diff --git a/src/sage/tensor/modules/reflexive_module.py b/src/sage/tensor/modules/reflexive_module.py
index 073f76e4659..82646094800 100644
--- a/src/sage/tensor/modules/reflexive_module.py
+++ b/src/sage/tensor/modules/reflexive_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Base classes for reflexive modules
"""
diff --git a/src/sage/tensor/modules/tensor_free_module.py b/src/sage/tensor/modules/tensor_free_module.py
index 8e56dbc0b76..d89fbce1245 100644
--- a/src/sage/tensor/modules/tensor_free_module.py
+++ b/src/sage/tensor/modules/tensor_free_module.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Tensor products of free modules
diff --git a/src/sage/tensor/modules/tensor_free_submodule.py b/src/sage/tensor/modules/tensor_free_submodule.py
index 97d0446bc55..36e32ae9e8c 100644
--- a/src/sage/tensor/modules/tensor_free_submodule.py
+++ b/src/sage/tensor/modules/tensor_free_submodule.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Free submodules of tensor modules defined by monoterm symmetries
diff --git a/src/sage/tensor/modules/tensor_free_submodule_basis.py b/src/sage/tensor/modules/tensor_free_submodule_basis.py
index 6c88b05af23..da1b1c78979 100644
--- a/src/sage/tensor/modules/tensor_free_submodule_basis.py
+++ b/src/sage/tensor/modules/tensor_free_submodule_basis.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
r"""
Standard bases of free submodules of tensor modules defined by some monoterm symmetries
diff --git a/src/sage/tensor/modules/tensor_with_indices.py b/src/sage/tensor/modules/tensor_with_indices.py
index 8a637315af8..cf590f83a96 100644
--- a/src/sage/tensor/modules/tensor_with_indices.py
+++ b/src/sage/tensor/modules/tensor_with_indices.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-modules
# sage.doctest: needs sage.groups
r"""
Index notation for tensors
diff --git a/src/sage/tests/__init__.py b/src/sage/tests/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/tests/__init__.py
+++ b/src/sage/tests/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/tests/all.py b/src/sage/tests/all.py
index c0f6f2877d5..382623d080e 100644
--- a/src/sage/tests/all.py
+++ b/src/sage/tests/all.py
@@ -1,2 +1,3 @@
+# sage_setup: distribution = sagemath-repl
"""
"""
diff --git a/src/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py b/src/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py
index d0a51a55eff..f03f58a1517 100644
--- a/src/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py
+++ b/src/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.graphs sage.modules
r"""
This file contains doctests of the article ::
diff --git a/src/sage/tests/arxiv_0812_2725.py b/src/sage/tests/arxiv_0812_2725.py
index 62217b3e8d8..b162a303708 100644
--- a/src/sage/tests/arxiv_0812_2725.py
+++ b/src/sage/tests/arxiv_0812_2725.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.combinat
r"""
Sage code for computing k-distant crossing numbers.
diff --git a/src/sage/tests/benchmark.py b/src/sage/tests/benchmark.py
index 9445a3f7633..4e6f6c4ede0 100644
--- a/src/sage/tests/benchmark.py
+++ b/src/sage/tests/benchmark.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.symbolic
"""
Benchmarks
diff --git a/src/sage/tests/book_schilling_zabrocki_kschur_primer.py b/src/sage/tests/book_schilling_zabrocki_kschur_primer.py
index 4f91b77e036..3a0b26c36d1 100644
--- a/src/sage/tests/book_schilling_zabrocki_kschur_primer.py
+++ b/src/sage/tests/book_schilling_zabrocki_kschur_primer.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.combinat sage.graphs sage.groups
r"""
This file contains doctests for the Chapter "k-Schur function primer"
diff --git a/src/sage/tests/book_stein_ent.py b/src/sage/tests/book_stein_ent.py
index e7dbcaf37a1..ef63d9104a7 100644
--- a/src/sage/tests/book_stein_ent.py
+++ b/src/sage/tests/book_stein_ent.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.libs.pari
"""
This file contains all the example code from the published book
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/__init__.py b/src/sage/tests/books/computational-mathematics-with-sagemath/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/__init__.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py
index 976b912de2a..567174fc49c 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./calculus_doctest.sage) was *autogenerated* from ./calculus.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py
index 864549d1958..b3349620ce6 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./combinat_doctest.sage) was *autogenerated* from ./combinat.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py
index 94c50977d79..cee1d36e208 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./domaines_doctest.sage) was *autogenerated* from ./domaines.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py
index aa3eed32f3b..7addbc668be 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./float_doctest.sage) was *autogenerated* from ./float.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py
index bdf2f5b1e1e..6b4d06a09dc 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./graphique_doctest.sage) was *autogenerated* from ./graphique.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py
index c1d8fa977e5..0f2c5270912 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./graphtheory_doctest.sage) was *autogenerated* from ./graphtheory.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py
index dbe787aa5ff..298aa799d79 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./integration_doctest.sage) was *autogenerated* from ./integration.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py
index b01729aa7b3..cc4fce4af6f 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./linalg_doctest.sage) was *autogenerated* from ./linalg.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py
index 7c5b83423ea..2fa092c2136 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
r"""
This file (./linsolve_doctest.sage) was *autogenerated* from ./linsolve.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py
index da89f065214..9467c2c0daa 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./lp_doctest.sage) was *autogenerated* from ./lp.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py
index bef4a2b6c62..163208bfbbf 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./mpoly_doctest.sage) was *autogenerated* from ./mpoly.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py
index 3a7104637ec..53877a43bf8 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./nonlinear_doctest.sage) was *autogenerated* from ./nonlinear.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py
index 46a4d4d2bec..24b9588008f 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./numbertheory_doctest.sage) was *autogenerated* from ./numbertheory.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py
index 5ac636c433a..0dfd1c5156e 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./polynomes_doctest.sage) was *autogenerated* from ./polynomes.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py
index 42121f2f815..ba9f281957b 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./premierspas_doctest.sage) was *autogenerated* from ./premierspas.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py
index 3f036d5d362..7c7c78dfcf6 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./programmation_doctest.sage) was *autogenerated* from ./programmation.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py
index 95a6367dcee..2de80122ed5 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./recequadiff_doctest.sage) was *autogenerated* from ./recequadiff.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/__init__.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/__init__.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py
index 947f9f53a22..44306633eef 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/calculus_doctest.sage) was *autogenerated* from ./sol/calculus.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py
index 5f372f505b0..3fa0c2fb145 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/combinat_doctest.sage) was *autogenerated* from ./sol/combinat.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py
index df3eb03d8fe..39468adf6e3 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/domaines_doctest.sage) was *autogenerated* from ./sol/domaines.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py
index 5d5d4686ec7..7475406ba08 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/float_doctest.sage) was *autogenerated* from ./sol/float.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py
index a939dc4471c..1a828013596 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/graphique_doctest.sage) was *autogenerated* from ./sol/graphique.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py
index 27013d35ae8..42b6cd5a1a3 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/graphtheory_doctest.sage) was *autogenerated* from ./sol/graphtheory.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py
index bb9550918bf..321e43ca881 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/integration_doctest.sage) was *autogenerated* from ./sol/integration.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py
index 7f7053fe39d..2a3431985e3 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/linalg_doctest.sage) was *autogenerated* from ./sol/linalg.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py
index e89d7c06fb5..bcb2bdda88c 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/linsolve_doctest.sage) was *autogenerated* from ./sol/linsolve.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py
index d60adc9dd8b..8cdf67654cc 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/lp_doctest.sage) was *autogenerated* from ./sol/lp.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py
index d4b92c1dfd6..434065a5e6c 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/mpoly_doctest.sage) was *autogenerated* from ./sol/mpoly.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py
index f99860f7b9c..0f18ca3696c 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/nonlinear_doctest.sage) was *autogenerated* from ./sol/nonlinear.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py
index 2dbd0b018e5..f335c0bbf9e 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/numbertheory_doctest.sage) was *autogenerated* from ./sol/numbertheory.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py
index f8cefd2f6e8..8e674bc6e1e 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/polynomes_doctest.sage) was *autogenerated* from ./sol/polynomes.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py
index 01d0e1bc143..a28a4de5c7f 100644
--- a/src/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py
+++ b/src/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py
@@ -1,4 +1,4 @@
-## -*- encoding: utf-8 -*-
+# sage_setup: distribution = sagemath-repl
"""
This file (./sol/recequadiff_doctest.sage) was *autogenerated* from ./sol/recequadiff.tex,
with sagetex.sty version 2011/05/27 v2.3.1.
diff --git a/src/sage/tests/books/judson-abstract-algebra/__init__.py b/src/sage/tests/books/judson-abstract-algebra/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/tests/books/judson-abstract-algebra/__init__.py
+++ b/src/sage/tests/books/judson-abstract-algebra/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py b/src/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py
index eb93e40815f..08d4cdaf852 100644
--- a/src/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py
+++ b/src/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/actions-sage.py b/src/sage/tests/books/judson-abstract-algebra/actions-sage.py
index 98eb03fcc64..5f8395655c1 100644
--- a/src/sage/tests/books/judson-abstract-algebra/actions-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/actions-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/algcodes-sage.py b/src/sage/tests/books/judson-abstract-algebra/algcodes-sage.py
index 816ae050b95..bf1b76f8371 100644
--- a/src/sage/tests/books/judson-abstract-algebra/algcodes-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/algcodes-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/boolean-sage.py b/src/sage/tests/books/judson-abstract-algebra/boolean-sage.py
index 2d7b13c00f7..b7861db1e3d 100644
--- a/src/sage/tests/books/judson-abstract-algebra/boolean-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/boolean-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py b/src/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py
index 57ab9ff0acf..788070ab821 100644
--- a/src/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py
+++ b/src/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/cosets-sage.py b/src/sage/tests/books/judson-abstract-algebra/cosets-sage.py
index 028dd8cb33c..734995be178 100644
--- a/src/sage/tests/books/judson-abstract-algebra/cosets-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/cosets-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/crypt-sage.py b/src/sage/tests/books/judson-abstract-algebra/crypt-sage.py
index 510761ddb6c..947b40be364 100644
--- a/src/sage/tests/books/judson-abstract-algebra/crypt-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/crypt-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/cyclic-sage.py b/src/sage/tests/books/judson-abstract-algebra/cyclic-sage.py
index 5f8cd284b52..6ae22a7a184 100644
--- a/src/sage/tests/books/judson-abstract-algebra/cyclic-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/cyclic-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/domains-sage.py b/src/sage/tests/books/judson-abstract-algebra/domains-sage.py
index 965fe31b21e..d3836d3bf8e 100644
--- a/src/sage/tests/books/judson-abstract-algebra/domains-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/domains-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/fields-sage.py b/src/sage/tests/books/judson-abstract-algebra/fields-sage.py
index de12e97030c..191267d14d4 100644
--- a/src/sage/tests/books/judson-abstract-algebra/fields-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/fields-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/finite-sage.py b/src/sage/tests/books/judson-abstract-algebra/finite-sage.py
index d6d85490a87..d8682a18a38 100644
--- a/src/sage/tests/books/judson-abstract-algebra/finite-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/finite-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/galois-sage.py b/src/sage/tests/books/judson-abstract-algebra/galois-sage.py
index b1ecf0d8d48..084fe28ae68 100644
--- a/src/sage/tests/books/judson-abstract-algebra/galois-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/galois-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/groups-sage.py b/src/sage/tests/books/judson-abstract-algebra/groups-sage.py
index 71e0ee12eba..9543f68ea9e 100644
--- a/src/sage/tests/books/judson-abstract-algebra/groups-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/groups-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py b/src/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py
index 31c4f1818fe..cd8c6877675 100644
--- a/src/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py
+++ b/src/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/homomorph-sage.py b/src/sage/tests/books/judson-abstract-algebra/homomorph-sage.py
index dbc7bca8d96..c374f29b3f2 100644
--- a/src/sage/tests/books/judson-abstract-algebra/homomorph-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/homomorph-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/integers-sage.py b/src/sage/tests/books/judson-abstract-algebra/integers-sage.py
index 20a8228035e..ec4ba89521a 100644
--- a/src/sage/tests/books/judson-abstract-algebra/integers-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/integers-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/isomorph-sage.py b/src/sage/tests/books/judson-abstract-algebra/isomorph-sage.py
index 43333ac1ea1..7e360a62ff7 100644
--- a/src/sage/tests/books/judson-abstract-algebra/isomorph-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/isomorph-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/normal-sage.py b/src/sage/tests/books/judson-abstract-algebra/normal-sage.py
index 3db475d41b0..6d4aeffe31d 100644
--- a/src/sage/tests/books/judson-abstract-algebra/normal-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/normal-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/permute-sage.py b/src/sage/tests/books/judson-abstract-algebra/permute-sage.py
index 625fb080a06..90267f518f7 100644
--- a/src/sage/tests/books/judson-abstract-algebra/permute-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/permute-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/poly-sage.py b/src/sage/tests/books/judson-abstract-algebra/poly-sage.py
index 0333425266d..3af6f81117e 100644
--- a/src/sage/tests/books/judson-abstract-algebra/poly-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/poly-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/rings-sage.py b/src/sage/tests/books/judson-abstract-algebra/rings-sage.py
index 6d9571d00cd..a76cea542bd 100644
--- a/src/sage/tests/books/judson-abstract-algebra/rings-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/rings-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/sets-sage.py b/src/sage/tests/books/judson-abstract-algebra/sets-sage.py
index 0825b227669..8d5491f86dc 100644
--- a/src/sage/tests/books/judson-abstract-algebra/sets-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/sets-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/struct-sage.py b/src/sage/tests/books/judson-abstract-algebra/struct-sage.py
index ce825b56c3c..6c30b93df29 100644
--- a/src/sage/tests/books/judson-abstract-algebra/struct-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/struct-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/sylow-sage.py b/src/sage/tests/books/judson-abstract-algebra/sylow-sage.py
index cd78b147ca3..c5d89ed0b14 100644
--- a/src/sage/tests/books/judson-abstract-algebra/sylow-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/sylow-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py b/src/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py
index 45786b72a36..8dba35d0b27 100644
--- a/src/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py
+++ b/src/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/books/judson-abstract-algebra/vect-sage.py b/src/sage/tests/books/judson-abstract-algebra/vect-sage.py
index 46a9bd7cb68..3af215cb318 100644
--- a/src/sage/tests/books/judson-abstract-algebra/vect-sage.py
+++ b/src/sage/tests/books/judson-abstract-algebra/vect-sage.py
@@ -1,4 +1,4 @@
-## -*- coding: utf-8 -*- ##
+# sage_setup: distribution = sagemath-repl
## Sage Doctest File ##
#**************************************#
#* Generated from PreTeXt source *#
diff --git a/src/sage/tests/cmdline.py b/src/sage/tests/cmdline.py
index 523cbef436c..c35e716f93a 100644
--- a/src/sage/tests/cmdline.py
+++ b/src/sage/tests/cmdline.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
This file contains some tests that Sage command line options actually
do something.
diff --git a/src/sage/tests/combinatorial_hopf_algebras.py b/src/sage/tests/combinatorial_hopf_algebras.py
index 33c0472f404..7e5010f22ea 100644
--- a/src/sage/tests/combinatorial_hopf_algebras.py
+++ b/src/sage/tests/combinatorial_hopf_algebras.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.combinat sage.modules
r"""
Tests For Combinatorial Hopf Algebras
diff --git a/src/sage/tests/cython.pyx b/src/sage/tests/cython.pyx
index 431de078431..fd028dc2901 100644
--- a/src/sage/tests/cython.pyx
+++ b/src/sage/tests/cython.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
This file collects tests requiring Cython.
"""
diff --git a/src/sage/tests/finite_poset.py b/src/sage/tests/finite_poset.py
index d04221dcc13..8f69c933628 100644
--- a/src/sage/tests/finite_poset.py
+++ b/src/sage/tests/finite_poset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.graphs sage.modules
"""
This file contains test functions that can be used to search
diff --git a/src/sage/tests/functools_partial_src.py b/src/sage/tests/functools_partial_src.py
index d352d160230..92044eccc01 100644
--- a/src/sage/tests/functools_partial_src.py
+++ b/src/sage/tests/functools_partial_src.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Ensure that ``functools.partial`` is correctly handled by
:func:`~sage.misc.sageinspect.sage_getsourcelines`.
diff --git a/src/sage/tests/gosper-sum.py b/src/sage/tests/gosper-sum.py
index 84679ac0ff3..6c0f43340a2 100644
--- a/src/sage/tests/gosper-sum.py
+++ b/src/sage/tests/gosper-sum.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.symbolic
"""
Some tests about Gosper sums.
diff --git a/src/sage/tests/lazy_imports.py b/src/sage/tests/lazy_imports.py
index a1c72e64468..63e015ebcc6 100644
--- a/src/sage/tests/lazy_imports.py
+++ b/src/sage/tests/lazy_imports.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.all
r"""
TESTS:
diff --git a/src/sage/tests/memcheck/__init__.py b/src/sage/tests/memcheck/__init__.py
index e69de29bb2d..62acb4df510 100644
--- a/src/sage/tests/memcheck/__init__.py
+++ b/src/sage/tests/memcheck/__init__.py
@@ -0,0 +1 @@
+# sage_setup: distribution = sagemath-repl
diff --git a/src/sage/tests/memcheck/run_tests.py b/src/sage/tests/memcheck/run_tests.py
index 6ff4503a81b..69554601383 100644
--- a/src/sage/tests/memcheck/run_tests.py
+++ b/src/sage/tests/memcheck/run_tests.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
import types
diff --git a/src/sage/tests/memcheck/run_tests_in_valgrind.py b/src/sage/tests/memcheck/run_tests_in_valgrind.py
index df5ad0e92b2..307154c11f2 100644
--- a/src/sage/tests/memcheck/run_tests_in_valgrind.py
+++ b/src/sage/tests/memcheck/run_tests_in_valgrind.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Launch valgrind and run the memory leak tests
diff --git a/src/sage/tests/memcheck/symbolic_expression.py b/src/sage/tests/memcheck/symbolic_expression.py
index 52182fbe62d..80ae3b32fee 100644
--- a/src/sage/tests/memcheck/symbolic_expression.py
+++ b/src/sage/tests/memcheck/symbolic_expression.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
from sage.tests.memcheck.verify_no_leak import verify_no_leak
diff --git a/src/sage/tests/memcheck/verify_no_leak.py b/src/sage/tests/memcheck/verify_no_leak.py
index 89ca90cf89c..b1671de64b4 100644
--- a/src/sage/tests/memcheck/verify_no_leak.py
+++ b/src/sage/tests/memcheck/verify_no_leak.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
from typing import Tuple, Sequence, List, Callable, Any
import valgrind
diff --git a/src/sage/tests/modular_group_cohomology.py b/src/sage/tests/modular_group_cohomology.py
index 35bc8b5387f..db03cfb80e7 100644
--- a/src/sage/tests/modular_group_cohomology.py
+++ b/src/sage/tests/modular_group_cohomology.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: optional - p_group_cohomology
r"""
Tests for the optional ``p_group_cohomology`` package.
diff --git a/src/sage/tests/numpy.py b/src/sage/tests/numpy.py
index e6dd28afb5a..a532a9ea40b 100644
--- a/src/sage/tests/numpy.py
+++ b/src/sage/tests/numpy.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs numpy
r"""
TESTS:
diff --git a/src/sage/tests/parigp.py b/src/sage/tests/parigp.py
index c7cf9ab5b96..fba3fcef411 100644
--- a/src/sage/tests/parigp.py
+++ b/src/sage/tests/parigp.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.libs.pari sage.modules
r"""
This file is meant to catch errors in the PARI/GP package which are not
diff --git a/src/sage/tests/startup.py b/src/sage/tests/startup.py
index 00142bc6ba7..69627375dd2 100644
--- a/src/sage/tests/startup.py
+++ b/src/sage/tests/startup.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
r"""
Ensure that certain modules are not loaded on startup.
diff --git a/src/sage/tests/stl_vector.pyx b/src/sage/tests/stl_vector.pyx
index f3b29b30dfe..17ff9ab1331 100644
--- a/src/sage/tests/stl_vector.pyx
+++ b/src/sage/tests/stl_vector.pyx
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# distutils: language = c++
"""
diff --git a/src/sage/tests/symbolic-series.py b/src/sage/tests/symbolic-series.py
index 5e53d1e07af..0fdaa6b1ce5 100644
--- a/src/sage/tests/symbolic-series.py
+++ b/src/sage/tests/symbolic-series.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: needs sage.symbolic
"""
Tests for the fast univariate series expansion in Pynac
diff --git a/src/sage/tests/sympy.py b/src/sage/tests/sympy.py
index 6ff569cae57..e18f61074b5 100644
--- a/src/sage/tests/sympy.py
+++ b/src/sage/tests/sympy.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
# sage.doctest: optional - sympy
r"""
TESTS:
diff --git a/src/sage/tests/test_deprecation.py b/src/sage/tests/test_deprecation.py
index a8e6ff9c99b..a79e1a2bc79 100644
--- a/src/sage/tests/test_deprecation.py
+++ b/src/sage/tests/test_deprecation.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-repl
"""
Tests Deprecation
diff --git a/src/sage/topology/all.py b/src/sage/topology/all.py
index 53b89564daa..16dfcf79d17 100644
--- a/src/sage/topology/all.py
+++ b/src/sage/topology/all.py
@@ -1,11 +1,12 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
-from .simplicial_complex import SimplicialComplex, Simplex
+from sage.topology.simplicial_complex import SimplicialComplex, Simplex
-from .simplicial_complex_morphism import SimplicialComplexMorphism
+from sage.topology.simplicial_complex_morphism import SimplicialComplexMorphism
-from .delta_complex import DeltaComplex, delta_complexes
+from sage.topology.delta_complex import DeltaComplex, delta_complexes
-from .cubical_complex import CubicalComplex, cubical_complexes
+from sage.topology.cubical_complex import CubicalComplex, cubical_complexes
from sage.misc.lazy_import import lazy_import
lazy_import('sage.topology.filtered_simplicial_complex', 'FilteredSimplicialComplex')
@@ -18,3 +19,4 @@
# # For taking care of old pickles
# from sage.misc.persist import register_unpickle_override
# register_unpickle_override('sage.topology.simplicial_complex_examples', 'SimplicialSurface', SimplicialComplex)
+del lazy_import
diff --git a/src/sage/topology/cell_complex.py b/src/sage/topology/cell_complex.py
index c1f016ab34d..a752e2653da 100644
--- a/src/sage/topology/cell_complex.py
+++ b/src/sage/topology/cell_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Generic cell complexes
diff --git a/src/sage/topology/cubical_complex.py b/src/sage/topology/cubical_complex.py
index 4e8e80a564b..3d53f3b1a4b 100644
--- a/src/sage/topology/cubical_complex.py
+++ b/src/sage/topology/cubical_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Finite cubical complexes
diff --git a/src/sage/topology/delta_complex.py b/src/sage/topology/delta_complex.py
index d2b1bfd6931..731d916c269 100644
--- a/src/sage/topology/delta_complex.py
+++ b/src/sage/topology/delta_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Finite Delta-complexes
diff --git a/src/sage/topology/filtered_simplicial_complex.py b/src/sage/topology/filtered_simplicial_complex.py
index 95191dd1cd4..70e10d13770 100644
--- a/src/sage/topology/filtered_simplicial_complex.py
+++ b/src/sage/topology/filtered_simplicial_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Finite filtered complexes
diff --git a/src/sage/topology/moment_angle_complex.py b/src/sage/topology/moment_angle_complex.py
index b4c4231d835..d5a9a223a95 100644
--- a/src/sage/topology/moment_angle_complex.py
+++ b/src/sage/topology/moment_angle_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
"""
Moment-angle complexes
diff --git a/src/sage/topology/simplicial_complex.py b/src/sage/topology/simplicial_complex.py
index aba3289607e..625e270436d 100644
--- a/src/sage/topology/simplicial_complex.py
+++ b/src/sage/topology/simplicial_complex.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Finite simplicial complexes
diff --git a/src/sage/topology/simplicial_complex_catalog.py b/src/sage/topology/simplicial_complex_catalog.py
index dff18de22a0..8a0b547e2c2 100644
--- a/src/sage/topology/simplicial_complex_catalog.py
+++ b/src/sage/topology/simplicial_complex_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
"""
Catalog of simplicial complexes
diff --git a/src/sage/topology/simplicial_complex_examples.py b/src/sage/topology/simplicial_complex_examples.py
index 9f5a4185eb2..c9e5ee66062 100644
--- a/src/sage/topology/simplicial_complex_examples.py
+++ b/src/sage/topology/simplicial_complex_examples.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
"""
Examples of simplicial complexes
diff --git a/src/sage/topology/simplicial_complex_homset.py b/src/sage/topology/simplicial_complex_homset.py
index 255e905a990..c5c8b872788 100644
--- a/src/sage/topology/simplicial_complex_homset.py
+++ b/src/sage/topology/simplicial_complex_homset.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Homsets between simplicial complexes
diff --git a/src/sage/topology/simplicial_complex_morphism.py b/src/sage/topology/simplicial_complex_morphism.py
index a043429ead7..4b1ad9c994e 100644
--- a/src/sage/topology/simplicial_complex_morphism.py
+++ b/src/sage/topology/simplicial_complex_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Morphisms of simplicial complexes
diff --git a/src/sage/topology/simplicial_set.py b/src/sage/topology/simplicial_set.py
index 904d79ab11c..9ae9bfd8e98 100644
--- a/src/sage/topology/simplicial_set.py
+++ b/src/sage/topology/simplicial_set.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Simplicial sets
diff --git a/src/sage/topology/simplicial_set_catalog.py b/src/sage/topology/simplicial_set_catalog.py
index 0269c8f6628..927cf7a3103 100644
--- a/src/sage/topology/simplicial_set_catalog.py
+++ b/src/sage/topology/simplicial_set_catalog.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Catalog of simplicial sets
diff --git a/src/sage/topology/simplicial_set_constructions.py b/src/sage/topology/simplicial_set_constructions.py
index 13f7c27e4f6..3e8e8d92699 100644
--- a/src/sage/topology/simplicial_set_constructions.py
+++ b/src/sage/topology/simplicial_set_constructions.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Methods of constructing simplicial sets
diff --git a/src/sage/topology/simplicial_set_examples.py b/src/sage/topology/simplicial_set_examples.py
index 1fc85df3f6e..c0cb1e2fb32 100644
--- a/src/sage/topology/simplicial_set_examples.py
+++ b/src/sage/topology/simplicial_set_examples.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Examples of simplicial sets.
diff --git a/src/sage/topology/simplicial_set_morphism.py b/src/sage/topology/simplicial_set_morphism.py
index 3db0f1d7df1..fa1ee4a540a 100644
--- a/src/sage/topology/simplicial_set_morphism.py
+++ b/src/sage/topology/simplicial_set_morphism.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-graphs
# sage.doctest: needs sage.graphs
r"""
Morphisms and homsets for simplicial sets
diff --git a/src/sage/typeset/all.py b/src/sage/typeset/all.py
index f2327dfdb20..c9a5d04d850 100644
--- a/src/sage/typeset/all.py
+++ b/src/sage/typeset/all.py
@@ -1,4 +1,6 @@
+# sage_setup: distribution = sagemath-categories
from sage.misc.lazy_import import lazy_import
lazy_import('sage.typeset.ascii_art', 'ascii_art')
lazy_import('sage.typeset.unicode_art', 'unicode_art')
+del lazy_import
diff --git a/src/sage/typeset/ascii_art.py b/src/sage/typeset/ascii_art.py
index 395245c0df5..28024405d27 100644
--- a/src/sage/typeset/ascii_art.py
+++ b/src/sage/typeset/ascii_art.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
ASCII Art
diff --git a/src/sage/typeset/character_art.py b/src/sage/typeset/character_art.py
index d9ada8ac1c7..389584f3bcf 100644
--- a/src/sage/typeset/character_art.py
+++ b/src/sage/typeset/character_art.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Base Class for Character-Based Art
diff --git a/src/sage/typeset/character_art_factory.py b/src/sage/typeset/character_art_factory.py
index 4439f7b7144..cbde3611858 100644
--- a/src/sage/typeset/character_art_factory.py
+++ b/src/sage/typeset/character_art_factory.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Factory for Character-Based Art
"""
diff --git a/src/sage/typeset/symbols.py b/src/sage/typeset/symbols.py
index 00ddf81e63a..1701603b408 100644
--- a/src/sage/typeset/symbols.py
+++ b/src/sage/typeset/symbols.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
"""
Symbols for Character Art
diff --git a/src/sage/typeset/unicode_art.py b/src/sage/typeset/unicode_art.py
index d9218e1df30..1d8e0933b5b 100644
--- a/src/sage/typeset/unicode_art.py
+++ b/src/sage/typeset/unicode_art.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-categories
r"""
Unicode Art
diff --git a/src/sage/typeset/unicode_characters.py b/src/sage/typeset/unicode_characters.py
index c4aa7bdd5fb..bedea90565c 100644
--- a/src/sage/typeset/unicode_characters.py
+++ b/src/sage/typeset/unicode_characters.py
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-categories
r"""
Unicode Characters
diff --git a/src/sage/version.py b/src/sage/version.py
index d7de8c78611..c398930ba19 100644
--- a/src/sage/version.py
+++ b/src/sage/version.py
@@ -1,5 +1,5 @@
# Sage version information for Python scripts
# This file is auto-generated by the sage-update-version script, do not edit!
-version = '10.4.beta2'
-date = '2024-04-08'
-banner = 'SageMath version 10.4.beta2, Release Date: 2024-04-08'
+version = '10.4.beta3'
+date = '2024-04-12'
+banner = 'SageMath version 10.4.beta3, Release Date: 2024-04-12'
diff --git a/src/sage_setup/autogen/flint/templates/flint_sage.pyx.template b/src/sage_setup/autogen/flint/templates/flint_sage.pyx.template
index af50c1b256d..806614f1a74 100644
--- a/src/sage_setup/autogen/flint/templates/flint_sage.pyx.template
+++ b/src/sage_setup/autogen/flint/templates/flint_sage.pyx.template
@@ -1,3 +1,4 @@
+# sage_setup: distribution = sagemath-flint
# distutils: extra_compile_args = -D_XPG6
# WARNING: src/sage/libs/flint/flint_sage.pyx is generated from
diff --git a/src/sage_setup/find.py b/src/sage_setup/find.py
index 61d91abc2eb..53681c1f1c5 100644
--- a/src/sage_setup/find.py
+++ b/src/sage_setup/find.py
@@ -115,7 +115,9 @@ def find_python_sources(src_dir, modules=['sage'], distributions=None,
Filtering by distribution (distribution package)::
sage: find_python_sources(SAGE_SRC, distributions=['sagemath-tdlib'])
- ([], [], [])
+ ([],
+ [...],
+ [])
Benchmarking::
diff --git a/src/setup.cfg.m4 b/src/setup.cfg.m4
deleted file mode 100644
index e2a3330518d..00000000000
--- a/src/setup.cfg.m4
+++ /dev/null
@@ -1,133 +0,0 @@
-include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
-[metadata]
-name = sagemath-standard
-version = file: VERSION.txt
-description = Sage: Open Source Mathematics Software: Standard Python Library
-long_description = file: README.rst
-long_description_content_type = text/x-rst
-license_files = LICENSE.txt
-include(`setup_cfg_metadata.m4')dnl'
-
-[options]
-python_requires = >=3.9, <3.13
-install_requires =
- SPKG_INSTALL_REQUIRES_sage_conf
- SPKG_INSTALL_REQUIRES_six
-dnl From build/pkgs/sagelib/dependencies
- SPKG_INSTALL_REQUIRES_conway_polynomials
- SPKG_INSTALL_REQUIRES_cypari
- SPKG_INSTALL_REQUIRES_cysignals
- SPKG_INSTALL_REQUIRES_cython
- SPKG_INSTALL_REQUIRES_gmpy2
- SPKG_INSTALL_REQUIRES_importlib_metadata
- SPKG_INSTALL_REQUIRES_importlib_resources
- SPKG_INSTALL_REQUIRES_jupyter_core
- SPKG_INSTALL_REQUIRES_lrcalc_python
- SPKG_INSTALL_REQUIRES_memory_allocator
- SPKG_INSTALL_REQUIRES_numpy
- SPKG_INSTALL_REQUIRES_pkgconfig
- SPKG_INSTALL_REQUIRES_pplpy
- SPKG_INSTALL_REQUIRES_primecountpy
- SPKG_INSTALL_REQUIRES_requests
- SPKG_INSTALL_REQUIRES_typing_extensions
-dnl From Makefile.in: SAGERUNTIME
- SPKG_INSTALL_REQUIRES_ipython
- SPKG_INSTALL_REQUIRES_pexpect
-dnl From Makefile.in: DOC_DEPENDENCIES
- SPKG_INSTALL_REQUIRES_sphinx
- SPKG_INSTALL_REQUIRES_networkx
- SPKG_INSTALL_REQUIRES_scipy
- SPKG_INSTALL_REQUIRES_sympy
- SPKG_INSTALL_REQUIRES_matplotlib
- SPKG_INSTALL_REQUIRES_pillow
- SPKG_INSTALL_REQUIRES_mpmath
- SPKG_INSTALL_REQUIRES_ipykernel
- SPKG_INSTALL_REQUIRES_jupyter_client
- SPKG_INSTALL_REQUIRES_ipywidgets
- SPKG_INSTALL_REQUIRES_fpylll
-dnl pycryptosat # Sage distribution installs it as part of cryptominisat. According to its README on https://pypi.org/project/pycryptosat/: "The pycryptosat python package compiles while compiling CryptoMiniSat. It cannot be compiled on its own, it must be compiled at the same time as CryptoMiniSat."
-dnl Packages with important upper version bounds
- SPKG_INSTALL_REQUIRES_ptyprocess
-
-scripts =
- # The sage script
- bin/sage
- # Other scripts that should be in the path also for OS packaging of sage:
- bin/sage-eval
- # Included because it is useful for doctesting/coverage testing user scripts too:
- bin/sage-runtests
- bin/sage-fixdoctests
- bin/sage-coverage
- # The following is deprecated but might still be used in user package install scripts
- bin/sage-cython
- # Helper scripts invoked by sage script
- # (they would actually belong to something like libexec)
- bin/sage-cachegrind
- bin/sage-callgrind
- bin/sage-massif
- bin/sage-omega
- bin/sage-valgrind
- bin/sage-venv-config
- bin/sage-version.sh
- bin/sage-cleaner
- # Only makes sense in sage-the-distribution. TODO: Move to another installation script.
- bin/sage-list-packages
- # Uncategorized scripts in alphabetical order
- bin/math-readline
- bin/sage-env
- # sage-env-config -- installed by sage_conf
- # sage-env-config.in -- not to be installed
- bin/sage-grep
- bin/sage-grepdoc
- bin/sage-inline-fortran
- bin/sage-ipynb2rst
- bin/sage-ipython
- bin/sage-notebook
- bin/sage-num-threads.py
- bin/sage-preparse
- bin/sage-python
- bin/sage-run
- bin/sage-run-cython
- bin/sage-startuptime.py
- bin/sage-update-version
-
-[options.package_data]
-
-sage.libs.gap =
- sage.gaprc
-
-sage.interfaces =
- sage-maxima.lisp
-
-sage.doctest =
- tests/*
-
-sage.repl.rich_output =
- example*
-
-sage =
- ext_data/*
- ext_data/kenzo/*
- ext_data/singular/*
- ext_data/singular/function_field/*
- ext_data/images/*
- ext_data/doctest/*
- ext_data/doctest/invalid/*
- ext_data/gap/*
- ext_data/gap/joyner/*
- ext_data/mwrank/*
- ext_data/notebook-ipython/*
- ext_data/nbconvert/*
- ext_data/graphs/*
- ext_data/pari/*
- ext_data/pari/dokchitser/*
- ext_data/pari/buzzard/*
- ext_data/pari/simon/*
- ext_data/magma/*
- ext_data/magma/latex/*
- ext_data/magma/sage/*
- ext_data/valgrind/*
- ext_data/threejs/*
-
-[options.extras_require]
-R = SPKG_INSTALL_REQUIRES_rpy2
diff --git a/tox.ini b/tox.ini
index df7ec10f674..837764e6441 100644
--- a/tox.ini
+++ b/tox.ini
@@ -205,8 +205,9 @@ setenv =
docker: BASE_TAG=latest
#
# https://hub.docker.com/_/ubuntu?tab=description
- # as of 2023-05, latest=jammy=22.04, rolling=lunar=23.04, devel=mantic=23.10
+ # as of 2024-02, latest=jammy=22.04, rolling=mantic=23.10, devel=noble=24.04
# ubuntu-focal does not have libgap-dev
+ # ubuntu-noble does not have libbrial-dev
#
ubuntu: SYSTEM=debian
ubuntu: BASE_IMAGE=ubuntu
@@ -226,6 +227,8 @@ setenv =
ubuntu-jammy: BASE_TAG=jammy
ubuntu-lunar: BASE_TAG=lunar
ubuntu-mantic: BASE_TAG=mantic
+ ubuntu-noble: BASE_TAG=noble
+ ubuntu-noble: IGNORE_MISSING_SYSTEM_PACKAGES=yes
#
# https://hub.docker.com/_/debian
# debian-buster does not have libfreetype-dev (it only has libfreetype6-dev)
@@ -264,6 +267,7 @@ setenv =
linuxmint-21: BASE_IMAGE=linuxmintd/mint21
linuxmint-21.1: BASE_IMAGE=linuxmintd/mint21.1
linuxmint-21.2: BASE_IMAGE=linuxmintd/mint21.2
+ linuxmint-21.3: BASE_IMAGE=linuxmintd/mint21.3
#
# https://hub.docker.com/_/fedora
# as of 2024-01, latest=39, rawhide=40
@@ -848,16 +852,16 @@ setenv =
# Master list of platforms tested in CI Linux
#
DEFAULT_SYSTEM_FACTORS=\
- ubuntu-{trusty-toolchain-gcc_9,xenial-toolchain-gcc_9,bionic-gcc_8,focal,jammy,lunar,mantic} \
+ ubuntu-{xenial-toolchain-gcc_9,bionic-gcc_8,focal,jammy,lunar,mantic,noble} \
debian-{buster-gcc_spkg,bullseye,bookworm,trixie,sid} \
- linuxmint-{20.1,20.2,20.3,21,21.1,21.2} \
- fedora-{30,31,32,33,34,35,36,37,38,39} \
+ linuxmint-{20.1,20.2,20.3,21,21.1,21.2,21.3} \
+ fedora-{30,31,32,33,34,35,36,37,38,39,40} \
centos-7-devtoolset-gcc_11 \
centos-stream-{8,9}-python3.9 \
almalinux-{8-python3.9,9-python3.11} \
- gentoo-python{3.10,3.11} \
+ gentoo-python{3.10,3.11,3.12} \
archlinux-latest \
- opensuse-{15.3-gcc_11-python3.9,15.4-gcc_11-python3.10,15.5-gcc_11-python3.11} \
+ opensuse-15.5-gcc_11-python3.11 \
opensuse-tumbleweed{-python3.10,} \
conda-forge-python3.11 \
ubuntu-bionic-gcc_8-i386 \