sagemath / sage

Main repository of SageMath. Now open for Issues and Pull Requests.
https://www.sagemath.org
Other
1.12k stars 398 forks source link

Meta-ticket: Modularize sagelib into separate distributions (pip-installable packages) sagemath-... for Sage 10.x #29705

Open mkoeppe opened 4 years ago

mkoeppe commented 4 years ago

We modularize sagelib into separate distributions (pip-installable packages), so that these can be built and run with a much smaller set of dependencies. The packages are made available individually on PyPI in source and wheel form. The modularization is done without changing the overall structure of the source tree by means of PEP 420 implicit namespace packages.

Mega-PR #35095 (not for merging; changes are being cherry-picked from here for integration in Sage) adds the new distributions. Instead of defining a distribution package for every possible community or subfield of mathematics that Sage supports, the modularization project introduces three types of distribution packages:

Distributions named after a basic mathematical structure: The packages may also cover a wide range of generalizations/applications of the structure after which they are named. Users who work in a specialized research area will, of course, recognize what structures they need. The down-to-earth naming also creates discoverability by a broader audience. Not many more distribution packages than these 7 are needed:

Distributions named after a third-party non-Python dependency: This makes technical sense because the dependencies will be localized to this distribution package, but it also helps give attribution and visibility to these libraries and projects that Sage depends on. Standard packages Optional Packages
sagemath-flint sagemath-bliss
sagemath-gap sagemath-brial
sagemath-glpk sagemath-coxeter3
sagemath-giac sagemath-mcqd
sagemath-homfly sagemath-meataxe
sagemath-lcalc sagemath-sirocco
sagemath-libbraiding sagemath-tdlib
sagemath-libecm
sagemath-linbox
sagemath-ntl
sagemath-pari
sagemath-singular

Distributions named after a technical functionality:


Older posts and presentations:


Initial steps: (2020)

  1. In particular, create a package sagemath-objects that makes Sage objects, the element/parent framework, categories, the coercion system and the related metaclasses available. This package would, for example, not provide or know about integers, polynomials, or matrices (thus avoiding all the dependencies on the various libraries implementing these). Ideally it would only have a build dependency on Cython and no runtime dependencies.

    (Doctesting sagemath-objects would still need more of Sage, but some it could also be done by mocking instead of with the real classes.)

    a) These facilities could see a wider use in the mathematical Python community, and in this way we could hope to benefit from a larger developer base. For example, we would hope that sagemath-objects could be ported for use with PyPy instead of CPython.

    b) Building and deploying a user package would be easier if it could depend on a small package such as sagemath-objects only instead of the whole multigigabyteness of Sage.

    This has been completed in Sage 9.6 (#29865).

  2. Remove the mechanism of OptionalExtensions from sagelib.

    Currently, a user would install, for example, the optional package tdlib and then rebuild sagelib so that the OptionalExtension sage.graphs.graph_decompositions.tdlib is built and installed.

    With this ticket, the user would instead install a new optional package sagemath-tdlib (which has tdlib as a dependency); this installs the Extension sage.graphs.graph_decompositions.tdlib (as a namespace package).

    This has been completed in Sage 9.2 (#29701).

Not within the scope of this ticket:

Initially noted constraints and challenges: (2020)

Tickets for Sage 9.2: (2020)

see also Modularization changes in Sage 9.2 (release tour)

Tickets for Sage 9.3: (2021)

see also Modularization changes in Sage 9.3 (release tour)

Tickets for Sage 9.4: (2021)

see also Modularization changes in Sage 9.4 (release tour)

Tickets for Sage 9.5: (2022)

see also Modularization changes in Sage 9.5 (release tour)

Tickets for Sage 9.6: (2022)

see also Modularization changes in Sage 9.6 (release tour)

Tickets for Sage 9.7: (2022)

see also Modularization changes in Sage 9.7 (release tour)

Tickets for Sage 9.8: (2023)

see also Modularization changes in Sage 9.8 (release tour)

Tickets for Sage 10.0 (2023)

Tickets for Sage 10.1 (2023)

Tickets for Sage 10.2 (2023)

Tickets for Sage 10.3 (2023–2024)

Tickets for Sage 10.4 (2024)

Tickets for Sage 10.x (2024)

Wishlist tickets, loose ends

Related:

CC: @videlec @orlitzky @kiwifb @isuruf @tscrim @kliem @jhpalmieri @tobiasdiez @defeo @thierry-FreeBSD @anneschilling

Component: refactoring

Keywords: sd109, sd110, sd111

Issue created by migration from https://trac.sagemath.org/ticket/29705

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 3 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

90b33d8Install sagelib, sage_tdlib via sdist defined by MANIFEST.in
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 3 years ago

Changed commit from 7042564 to 90b33d8

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 3 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

2ccf6b7Merge tag '9.2.beta1' into t/29705/META-modularize-sagelib
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 3 years ago

Changed commit from 90b33d8 to 2ccf6b7

mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -56,9 +56,10 @@
 - #28197: upgrade to ipython 7 (old ipython completer crashes on namespace packages)
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
 - #29803: Upgrade `setuptools`, `setuptools_scm`, `pip` (2020-06), add package `wheel`; remove `zope_interface`
+- Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
+   - #29864: Modularization of sagelib: Break out a separate package sage-tdlib
 - #13190: make `sagelib` use `setuptools` instead of `distutils`
 - #29845: PEP 517 `buildapi` for `sage_setup`
-- Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`; or use our `sage_install` command, which installs in the same format.
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #21516: Fix sagelib sdist (src/setup.py sdist)
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -2,13 +2,13 @@

 Modularize sagelib into separate distutils packages, so that these can be built and run with a much smaller set of libraries. The packages can be made available individually on PyPI. The goal would be to do this **without changing the overall structure of the source tree**.

-1. In particular, create a package `sage_objects` that makes Sage objects, the element/parent framework, categories, the coercion system and the related metaclasses available. This package would, for example, not provide or know about integers, polynomials, or matrices (thus avoiding all the dependencies on the various libraries implementing these). Ideally it would only have a build dependency on Cython and no runtime dependencies. 
+1. In particular, create a package `sage-objects` that makes Sage objects, the element/parent framework, categories, the coercion system and the related metaclasses available. This package would, for example, not provide or know about integers, polynomials, or matrices (thus avoiding all the dependencies on the various libraries implementing these). Ideally it would only have a build dependency on Cython and no runtime dependencies. 

-   (Doctesting `sage_objects` would still need more of Sage, but some it could also be done by mocking instead of with the real classes.)
+   (Doctesting `sage-objects` would still need more of Sage, but some it could also be done by mocking instead of with the real classes.)

-   a) These facilities could see a wider use in the mathematical Python community, and in this way we could hope to benefit from a larger developer base. For example, we would hope that `sage_objects` could be ported for use with PyPy instead of CPython.
+   a) These facilities could see a wider use in the mathematical Python community, and in this way we could hope to benefit from a larger developer base. For example, we would hope that `sage-objects` could be ported for use with PyPy instead of CPython.

-   b) Building and deploying a user package would be easier if it could depend on a small package such as `sage_objects` only instead of the whole multigigabyteness of Sage.
+   b) Building and deploying a user package would be easier if it could depend on a small package such as `sage-objects` only instead of the whole multigigabyteness of Sage.

 2. Remove the mechanism of `OptionalExtension`s from `sagelib`.

@@ -57,7 +57,8 @@
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
 - #29803: Upgrade `setuptools`, `setuptools_scm`, `pip` (2020-06), add package `wheel`; remove `zope_interface`
 - Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
-   - #29864: Modularization of sagelib: Break out a separate package sage-tdlib
+   - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
+   - #29865: Modularization of sagelib: Break out a separate package `sage-objects`
 - #13190: make `sagelib` use `setuptools` instead of `distutils`
 - #29845: PEP 517 `buildapi` for `sage_setup`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -35,7 +35,13 @@

 - The category framework cannot live without the integers (e.g. the output of `.cardinality()` expects an integer). 

-  Possible solution: The coercion system already has the notion of a global coercion model - which is determined at runtime, not compile time (`sage.structure.element.get_coercion_model`). When methods in `sage_objects` need to create an integer, they should obtain the appropriate class of integers in the same way.
+  Possible solution: The coercion system already has the notion of a global coercion model - which is determined at runtime, not compile time (`sage.structure.element.get_coercion_model`). When methods in `sage_objects` need to create an integer, they should obtain the appropriate class of integers in the same way. An existing function provides this interface already (but has a static implementation):
+
+   ```
+   sage: py_scalar_parent(int)
+   Integer Ring
+   ```
+  #29875 will make this implementation dynamic.

 - Imports in `sage.categories`:

@@ -63,6 +69,8 @@
 - #29845: PEP 517 `buildapi` for `sage_setup`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #21516: Fix sagelib sdist (src/setup.py sdist)
+- #29874: Mock integer class
+- #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic

 **Related:**
 - #21508 Meta-ticket: Clean up `src/setup.py` to bring it to standard distutils behavior
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -71,6 +71,7 @@
 - #21516: Fix sagelib sdist (src/setup.py sdist)
 - #29874: Mock integer class
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
+- #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`

 **Related:**
 - #21508 Meta-ticket: Clean up `src/setup.py` to bring it to standard distutils behavior
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -65,6 +65,7 @@
 - Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
    - #29865: Modularization of sagelib: Break out a separate package `sage-objects`
+   - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
 - #13190: make `sagelib` use `setuptools` instead of `distutils`
 - #29845: PEP 517 `buildapi` for `sage_setup`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -64,7 +64,7 @@
 - #29803: Upgrade `setuptools`, `setuptools_scm`, `pip` (2020-06), add package `wheel`; remove `zope_interface`
 - Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
-   - #29865: Modularization of sagelib: Break out a separate package `sage-objects`
+   - #29865: Modularization of sagelib: Break out separate packages `sage-objects`, `sage-categories`
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
 - #13190: make `sagelib` use `setuptools` instead of `distutils`
 - #29845: PEP 517 `buildapi` for `sage_setup`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -66,6 +66,7 @@
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
    - #29865: Modularization of sagelib: Break out separate packages `sage-objects`, `sage-categories`
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
+   - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
 - #13190: make `sagelib` use `setuptools` instead of `distutils`
 - #29845: PEP 517 `buildapi` for `sage_setup`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -53,24 +53,31 @@

   One can try to not populate the whole category system.

-**Tickets and steps:**
+**Tickets for Sage 9.2:**

 - #29411: make sagelib a script package
 - #29702: Move all code from `src/setup.py` to `sage_setup`
 - #29706, #29720, #29721, #29785, #29786, #29790, #29791: Move `Extension` options from `src/module_list.py` to `distutils:` directives in the individual files
 - #29701 (depends on all of the above): Replace use of `module_list` and `OptionalExtension` by extending `sage_setup.find_python_sources`
 - #28197: upgrade to ipython 7 (old ipython completer crashes on namespace packages)
+- #29803: Upgrade `setuptools`, `setuptools_scm`, `pip` (2020-06), add package `wheel`; remove `zope_interface`
+- #21559: Install `src/bin` scripts by sagelib's `setup.py`, not make
+- #29850: Install `sage-env-config` as part of `sage_conf`
+- Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
+- #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts"
+- #29950: Build sagelib using the installed `sage_setup`, add `spkg-src` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist))
+- #29865: Modularization of sagelib: Break out separate experimental packages `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
+- #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
+- #13190: make `sagelib` use `setuptools` instead of `distutils`
+
+**Tickets for Sage 9.3:**
+
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
-- #29803: Upgrade `setuptools`, `setuptools_scm`, `pip` (2020-06), add package `wheel`; remove `zope_interface`
 - Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
-   - #29865: Modularization of sagelib: Break out separate packages `sage-objects`, `sage-categories`
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
    - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
-- #13190: make `sagelib` use `setuptools` instead of `distutils`
 - #29845: PEP 517 `buildapi` for `sage_setup`
-- Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
-- #21516: Fix sagelib sdist (src/setup.py sdist)
 - #29874: Mock integer class
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
 - #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -74,6 +74,7 @@

 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
 - Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
+   - Rework `sage-objects`, `sage-categories`, and `sagelib` as namespace packages.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
    - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -77,7 +77,9 @@
    - Rework `sage-objects`, `sage-categories`, and `sagelib` as namespace packages.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
+   - Modularization of sagelib: Break out a separate package `sage-flint-arb-e_antic`
    - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
+   - Modularization of sagelib: Break out a separate package `sage-maxima` (depends on ecl and maxima, packages `sage.interfaces.maxima*`, `sage.libs.ecl`)
 - #29845: PEP 517 `buildapi` for `sage_setup`
 - #29874: Mock integer class
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -65,7 +65,7 @@
 - #29850: Install `sage-env-config` as part of `sage_conf`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts"
-- #29950: Build sagelib using the installed `sage_setup`, add `spkg-src` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist))
+- #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist))
 - #29865: Modularization of sagelib: Break out separate experimental packages `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
 - #13190: make `sagelib` use `setuptools` instead of `distutils`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -76,10 +76,11 @@
 - Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
    - Rework `sage-objects`, `sage-categories`, and `sagelib` as namespace packages.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
+   - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
    - Modularization of sagelib: Break out a separate package `sage-flint-arb-e_antic`
    - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
-   - Modularization of sagelib: Break out a separate package `sage-maxima` (depends on ecl and maxima, packages `sage.interfaces.maxima*`, `sage.libs.ecl`)
+   - Modularization of sagelib: Break out a separate package `sage-maxima` (depends on ecl and maxima, packages `sage.interfaces.maxima*`, `sage.libs.ecl`)... or `sage-calculus`(?)
 - #29845: PEP 517 `buildapi` for `sage_setup`
 - #29874: Mock integer class
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -64,11 +64,12 @@
 - #21559: Install `src/bin` scripts by sagelib's `setup.py`, not make
 - #29850: Install `sage-env-config` as part of `sage_conf`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
+- #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts"
-- #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist))
+- #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist), #13190: make `sagelib` use `setuptools` instead of `distutils`)
 - #29865: Modularization of sagelib: Break out separate experimental packages `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
-- #13190: make `sagelib` use `setuptools` instead of `distutils`
+ 

 **Tickets for Sage 9.3:**
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -65,27 +65,37 @@
 - #29850: Install `sage-env-config` as part of `sage_conf`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
-- #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts"
 - #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist), #13190: make `sagelib` use `setuptools` instead of `distutils`)
-- #29865: Modularization of sagelib: Break out separate experimental packages `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
+- #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.

 **Tickets for Sage 9.3:**

-- #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
-- Install native namespace packages. Do not use eggs (does not seem to be compatible with native namespace packages).  Either install `sagelib` and, e.g., `sage_tdlib` using pip -- this writes into one shared directory `site-packages/sage/`, or use distutils, or disable egg building with setuptools using --single-version-externally-managed.
-   - Rework `sage-objects`, `sage-categories`, and `sagelib` as namespace packages.
+- #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
+- Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
+- #29039: Deploy `sage_bootstrap` to PyPI
+- #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
+- #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
+- #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`
+
+
+**Tickets for Sage 9.4:**
+
+- #30152: `sage_setup`: Modify `clean_stale_files` to support out-of-tree namespace packages
+- Further modularization:
+   - Rework `sage-objects`, `sage-categories` as namespace packages.
    - #29912: Modularization of sagelib: Break out a separate package `sage-ntl`
    - Modularization of sagelib: Break out a separate package `sage-flint-arb-e_antic`
    - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
    - Modularization of sagelib: Break out a separate package `sage-maxima` (depends on ecl and maxima, packages `sage.interfaces.maxima*`, `sage.libs.ecl`)... or `sage-calculus`(?)
+   - `sage-singular`
+- #29874: Mock integer class
 - #29845: PEP 517 `buildapi` for `sage_setup`
-- #29874: Mock integer class
-- #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
-- #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`
+
+

 **Related:**
 - #21508 Meta-ticket: Clean up `src/setup.py` to bring it to standard distutils behavior
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -74,7 +74,7 @@

 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
-   - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib`
+   - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -76,6 +76,7 @@
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
+   - #29171: `sage-giac` (ex `giacpy_sage` + `sage.libs.giac` + dependency on `libgiac`)
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -65,6 +65,7 @@
 - #29850: Install `sage-env-config` as part of `sage_conf`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
+- #29868: pip-installable packages `sage-doc-html`, `sage-doc-pdf`
 - #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist), #13190: make `sagelib` use `setuptools` instead of `distutils`)
 - #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -78,6 +78,7 @@
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
    - #29171: `sage-giac` (ex `giacpy_sage` + `sage.libs.giac` + dependency on `libgiac`)
+   - #30332: `sage-brial` (`sage.rings.polynomial.pbori`, `sage.libs.polybori`, `sage.crypto.boolean_function`)
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -64,8 +64,6 @@
 - #21559: Install `src/bin` scripts by sagelib's `setup.py`, not make
 - #29850: Install `sage-env-config` as part of `sage_conf`
 - Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
-- #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
-- #29868: pip-installable packages `sage-doc-html`, `sage-doc-pdf`
 - #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist), #13190: make `sagelib` use `setuptools` instead of `distutils`)
 - #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
@@ -73,6 +71,8 @@

 **Tickets for Sage 9.3:**

+- #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
+- #29868: pip-installable packages `sage-doc-html`, `sage-doc-pdf`
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
mkoeppe commented 3 years ago

Changed commit from 2ccf6b7 to none

mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -106,7 +106,3 @@

-The branch on this meta-ticket is not intended for merging.
-It is an integration branch to facilitate testing. See https://github.com/mkoeppe/sage/pull/35 for automated tests
-
-
mkoeppe commented 3 years ago

Changed branch from u/mkoeppe/META-modularize-sagelib to none

mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -62,17 +62,16 @@
 - #28197: upgrade to ipython 7 (old ipython completer crashes on namespace packages)
 - #29803: Upgrade `setuptools`, `setuptools_scm`, `pip` (2020-06), add package `wheel`; remove `zope_interface`
 - #21559: Install `src/bin` scripts by sagelib's `setup.py`, not make
-- #29850: Install `sage-env-config` as part of `sage_conf`
-- Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist), #13190: make `sagelib` use `setuptools` instead of `distutils`)
-- #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
- 
+

 **Tickets for Sage 9.3:**

+- #29500 Install all Python packages via `pip wheel`, create PEP 503 simple repository for wheels
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
-- #29868: pip-installable packages `sage-doc-html`, `sage-doc-pdf`
+- #29868: pip-installable package `sage-doc`
+- #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
@@ -81,6 +80,7 @@
    - #30332: `sage-brial` (`sage.rings.polynomial.pbori`, `sage.libs.polybori`, `sage.crypto.boolean_function`)
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
+- #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
 - #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -64,7 +64,8 @@
 - #21559: Install `src/bin` scripts by sagelib's `setup.py`, not make
 - #29950: Build sagelib from build/pkgs/sagelib/src, fix `setup.py sdist`, add `spkg-src` and `tox.ini` (supersedes: #21516: Fix sagelib sdist (src/setup.py sdist), #13190: make `sagelib` use `setuptools` instead of `distutils`)
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
-
+- #29171: Move `giacpy_sage` into sage source code
+- #30332: Merge `sage_brial` into sagelib

 **Tickets for Sage 9.3:**

@@ -76,8 +77,8 @@
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
-   - #29171: `sage-giac` (ex `giacpy_sage` + `sage.libs.giac` + dependency on `libgiac`)
-   - #30332: `sage-brial` (`sage.rings.polynomial.pbori`, `sage.libs.polybori`, `sage.crypto.boolean_function`)
+   - `sage-giac` (ex `giacpy_sage` in `sage.libs.giac` + dependency on `libgiac`)
+   - `sage-brial` (ex `sage-brial` in `sage.rings.polynomial.pbori` +  `sage.libs.polybori`, `sage.crypto.boolean_function`)
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
 - #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -27,7 +27,7 @@

 - Inconsistent handling of symlinks by `pip`/`setuptools`. We cannot simply create a distribution of a subset of the files in `src` by creating a flock of symlinks (see #29850) and expect everything to work; notably, pip fails because of longstanding issues with installs from local directories (see discussion in #29854).

-  Solution: Do not use pip for installations from local source directories.  Use `setup.py install` (distutils) directly; or use `setup.py sdist`, followed by `pip install` of the sdist; or use a custom PEP 517 backend (#29845) for making an sdist, followed by `pip install` of the sdist.
+  Solution: Do not use pip for installations from local source directories.  Use `setup.py install` (distutils) directly; or use `setup.py sdist`, followed by `pip install` of the sdist; or use `setup.py bdist_wheel`, followed by `pip install` of the wheel; or use a custom PEP 517 backend (#29845) for making an sdist, followed by `pip install` of the sdist.

 - The category framework can not really be separated from the `Parent`/`Element`/`CategoryObject` (e.g. coercion is involved in comparisons and binary operations).
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -69,7 +69,8 @@

 **Tickets for Sage 9.3:**

-- #29500 Install all Python packages via `pip wheel`, create PEP 503 simple repository for wheels
+- #29500 Install all Python packages via `pip wheel`, store wheels in $SAGE_LOCAL/var/lib/sage/wheels
+- #30527 Create PEP 503 simple repository for wheels built during installation
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -82,6 +82,7 @@
    - `sage-brial` (ex `sage-brial` in `sage.rings.polynomial.pbori` +  `sage.libs.polybori`, `sage.crypto.boolean_function`)
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
+- #30036: pip-installable sage
 - #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
 - #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -98,6 +98,7 @@
    - #29941: Modularization of sagelib: Break out a separate package `sage-repl`
    - Modularization of sagelib: Break out a separate package `sage-maxima` (depends on ecl and maxima, packages `sage.interfaces.maxima*`, `sage.libs.ecl`)... or `sage-calculus`(?)
    - `sage-singular`
+- #30534 Repackage `pynac` as a pip-installable package
 - #29874: Mock integer class
 - #29845: PEP 517 `buildapi` for `sage_setup`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -72,6 +72,7 @@
 - #29500 Install all Python packages via `pip wheel`, store wheels in $SAGE_LOCAL/var/lib/sage/wheels
 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
+- #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -84,6 +84,7 @@
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
 - #30036: pip-installable sage
+- #30587: Remove import of `ppl` at startup
 - #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
 - #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -72,6 +72,7 @@
 - #29500 Install all Python packages via `pip wheel`, store wheels in $SAGE_LOCAL/var/lib/sage/wheels
 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
+- #30606: `sage.features.Feature.resolution`: If `SAGE_ROOT` is available, recommend system packages
 - #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -77,6 +77,7 @@
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
+- #30666 Add "sage_setup: distribution" directives to all Cython modules needing external libraries
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -73,6 +73,8 @@
 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
 - #30606: `sage.features.Feature.resolution`: If `SAGE_ROOT` is available, recommend system packages
+- #30647: Make `lazy_import` more friendly to pyflakes and other static checkers
+- #30616: Replace use of `sage.misc.package.PackageNotFoundError` (2); lazy_import: Add keyword argument 'feature'
 - #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -66,10 +66,10 @@
 - #29869, #29873, #29892, #29883, #16351, #29881, #29880, #29916, #29922: Improve/repair filtered structure of sagelib.
 - #29171: Move `giacpy_sage` into sage source code
 - #30332: Merge `sage_brial` into sagelib
+- #29500 Install all Python packages via `pip wheel`, store wheels in $SAGE_LOCAL/var/lib/sage/wheels

 **Tickets for Sage 9.3:**

-- #29500 Install all Python packages via `pip wheel`, store wheels in $SAGE_LOCAL/var/lib/sage/wheels
 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
 - #30606: `sage.features.Feature.resolution`: If `SAGE_ROOT` is available, recommend system packages
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -71,6 +71,7 @@
 **Tickets for Sage 9.3:**

 - #30527 Create PEP 503 simple repository for wheels built during installation
+- #30715 Remove a few `.all` imports
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
 - #30606: `sage.features.Feature.resolution`: If `SAGE_ROOT` is available, recommend system packages
 - #30647: Make `lazy_import` more friendly to pyflakes and other static checkers
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -86,6 +86,7 @@
    - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
    - `sage-giac` (ex `giacpy_sage` in `sage.libs.giac` + dependency on `libgiac`)
    - `sage-brial` (ex `sage-brial` in `sage.rings.polynomial.pbori` +  `sage.libs.polybori`, `sage.crypto.boolean_function`)
+   - #30716 Towards making Arb library optional
 - #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
 - #30036: pip-installable sage
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -67,15 +67,15 @@
 - #29171: Move `giacpy_sage` into sage source code
 - #30332: Merge `sage_brial` into sagelib
 - #29500 Install all Python packages via `pip wheel`, store wheels in $SAGE_LOCAL/var/lib/sage/wheels
+- #30606: `sage.features.Feature.resolution`: If `SAGE_ROOT` is available, recommend system packages
+- #30616: Replace use of `sage.misc.package.PackageNotFoundError` (2); lazy_import: Add keyword argument 'feature'

 **Tickets for Sage 9.3:**

 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30715 Remove a few `.all` imports
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
-- #30606: `sage.features.Feature.resolution`: If `SAGE_ROOT` is available, recommend system packages
 - #30647: Make `lazy_import` more friendly to pyflakes and other static checkers
-- #30616: Replace use of `sage.misc.package.PackageNotFoundError` (2); lazy_import: Add keyword argument 'feature'
 - #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -74,16 +74,19 @@

 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30715 Remove a few `.all` imports
+- #30739 Remove a few more `.all` imports
+- #30779 Duplicate `src/setup.py`
+- #30780 `sage_setup`: Separate installing and cleaning
+- #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
+- #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
 - #30647: Make `lazy_import` more friendly to pyflakes and other static checkers
 - #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
 - #29868: pip-installable package `sage-doc`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
-- #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420). Keep monolithic package `sagelib` for use in sage-the-distribution. 
 - #30666 Add "sage_setup: distribution" directives to all Cython modules needing external libraries
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
-   - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
    - `sage-giac` (ex `giacpy_sage` in `sage.libs.giac` + dependency on `libgiac`)
    - `sage-brial` (ex `sage-brial` in `sage.rings.polynomial.pbori` +  `sage.libs.polybori`, `sage.crypto.boolean_function`)
    - #30716 Towards making Arb library optional
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -75,6 +75,7 @@
 - #30527 Create PEP 503 simple repository for wheels built during installation
 - #30715 Remove a few `.all` imports
 - #30739 Remove a few more `.all` imports
+- #30784 `sage.matrix`: Resolve circular imports without using `__init__.py`
 - #30779 Duplicate `src/setup.py`
 - #30780 `sage_setup`: Separate installing and cleaning
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
mkoeppe commented 3 years ago

Changed keywords from sd109 to sd109, sd110

mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -16,6 +16,7 @@

    With this ticket, the user would instead install a new optional package `sage-tdlib` (which has `tdlib` as a dependency); this installs the `Extension` `sage.graphs.graph_decompositions.tdlib` (as a namespace package).

+   This has been completed in Sage 9.2 (#29701).

 **Not** within the scope of this ticket:

@@ -27,7 +28,7 @@

 - Inconsistent handling of symlinks by `pip`/`setuptools`. We cannot simply create a distribution of a subset of the files in `src` by creating a flock of symlinks (see #29850) and expect everything to work; notably, pip fails because of longstanding issues with installs from local directories (see discussion in #29854).

-  Solution: Do not use pip for installations from local source directories.  Use `setup.py install` (distutils) directly; or use `setup.py sdist`, followed by `pip install` of the sdist; or use `setup.py bdist_wheel`, followed by `pip install` of the wheel; or use a custom PEP 517 backend (#29845) for making an sdist, followed by `pip install` of the sdist.
+  Solution (implemented in Sage 9.2, #29500): Do not use pip for installations from local source directories.  Use `setup.py bdist_wheel`, followed by `pip install` of the wheel.

 - The category framework can not really be separated from the `Parent`/`Element`/`CategoryObject` (e.g. coercion is involved in comparisons and binary operations).
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -1,6 +1,9 @@
 (From https://groups.google.com/d/msg/sage-devel/M9QTWtln6zU/UHwkrmTKBQAJ)

 Modularize sagelib into separate distutils packages, so that these can be built and run with a much smaller set of libraries. The packages can be made available individually on PyPI. The goal would be to do this **without changing the overall structure of the source tree**.
+
+Presentation video: https://researchseminars.org/talk/SageDays110/11/
+

 1. In particular, create a package `sage-objects` that makes Sage objects, the element/parent framework, categories, the coercion system and the related metaclasses available. This package would, for example, not provide or know about integers, polynomials, or matrices (thus avoiding all the dependencies on the various libraries implementing these). Ideally it would only have a build dependency on Cython and no runtime dependencies. 
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -76,35 +76,42 @@

 **Tickets for Sage 9.3:**

-- #30527 Create PEP 503 simple repository for wheels built during installation
 - #30715 Remove a few `.all` imports
 - #30739 Remove a few more `.all` imports
 - #30784 `sage.matrix`: Resolve circular imports without using `__init__.py`
 - #30779 Duplicate `src/setup.py`
 - #30780 `sage_setup`: Separate installing and cleaning
+- #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
+- #30013: src/bin/sage-env: Make sure $SAGE_VENV/bin is at the beginning of the PATH       
+- #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
+- #30527: Create PEP 503 simple repository for wheels built during installation
+- #30578: Add src/requirements.txt and src/setup.cfg [install_requires] for installation of sagelib in a venv
+- #30371: In-place (editable) installs of sagelib in a venv
+- #30896: `./configure --without-python`
+- #29039: Deploy `sage_bootstrap` to PyPI
+- #30036: pip-installable sage
+
+**Tickets for Sage 9.4:**
+
+- #30666 Add "sage_setup: distribution" directives to all Cython modules needing external libraries
+- #30647: Make `lazy_import` more friendly to pyflakes and other static checkers
+- #29868: pip-installable package `sage-doc`
 - #28925 Modify `find_python_sources`, `clean_stale_files` to support modularization of `sagelib` by native namespace packages (PEP 420)
 - #30151: Modularization of sagelib: Break out a separate package `sage-meataxe`
 - #30010: Split sage_setup.docbuild out to a separate distribution (distutils package)
-- #30647: Make `lazy_import` more friendly to pyflakes and other static checkers
-- #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
-- #29868: pip-installable package `sage-doc`
-- #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
-- #30666 Add "sage_setup: distribution" directives to all Cython modules needing external libraries
 - Deploy mildly modularized distributions `sage-core`, `sage-tdlib`, ... to PyPI.
    - #29864: Modularization of sagelib: Break out a separate package `sage-tdlib` (and create `sage-core`)
    - `sage-giac` (ex `giacpy_sage` in `sage.libs.giac` + dependency on `libgiac`)
    - `sage-brial` (ex `sage-brial` in `sage.rings.polynomial.pbori` +  `sage.libs.polybori`, `sage.crypto.boolean_function`)
    - #30716 Towards making Arb library optional
-- #29039: Deploy `sage_bootstrap` to PyPI
 - #29847: Install `sage_setup` with `setuptools` as a prerequisite for building/installing sagelib, install sage-the-distribution scripts as "scripts". Deploy `sage_setup` to PyPI.
-- #30036: pip-installable sage
 - #30587: Remove import of `ppl` at startup
 - #29865: Modularization of sagelib: Prepare experimental subset distributions `sage-objects`, `sage-categories`, depending on Cython, pkgconfig, cysignals, gmpy2.  Use them as a testsuite for testing the filtered structure of sagelib.
 - #29875: `sage.structure.coerce.py_scalar_parent`, `py_scalar_to_element`: Make dynamic
 - #29877: `sage.categories`: Replace import of `ZZ` by `py_scalar_parent(int)`

-**Tickets for Sage 9.4:**
+**Tickets for Sage 9.5:**

 - #30152: `sage_setup`: Modify `clean_stale_files` to support out-of-tree namespace packages
 - Further modularization:
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -82,14 +82,14 @@
 - #30779 Duplicate `src/setup.py`
 - #30780 `sage_setup`: Separate installing and cleaning
 - #22731: Replace `$SAGE_LOCAL/bin` by more specific variables to make Sage easier to package, use in venvs
-- #30013: src/bin/sage-env: Make sure $SAGE_VENV/bin is at the beginning of the PATH       
+- #30013: `src/bin/sage-env`: Make sure `$SAGE_VENV/bin` is at the beginning of the `PATH`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #30527: Create PEP 503 simple repository for wheels built during installation
-- #30578: Add src/requirements.txt and src/setup.cfg [install_requires] for installation of sagelib in a venv
+- #30578: Add `src/requirements.txt` and `src/setup.cfg` [install_requires] for installation of sagelib in a venv
 - #30371: In-place (editable) installs of sagelib in a venv
 - #30896: `./configure --without-python`
 - #29039: Deploy `sage_bootstrap` to PyPI
-- #30036: pip-installable sage
+- #30036: Deploy `sagelib` to PyPI

 **Tickets for Sage 9.4:**
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -86,6 +86,7 @@
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #30527: Create PEP 503 simple repository for wheels built during installation
 - #30578: Add `src/requirements.txt` and `src/setup.cfg` [install_requires] for installation of sagelib in a venv
+- #30912: sagelib: Update metadata for PyPI deployment
 - #30371: In-place (editable) installs of sagelib in a venv
 - #30896: `./configure --without-python`
 - #29039: Deploy `sage_bootstrap` to PyPI
mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -85,7 +85,7 @@
 - #30013: `src/bin/sage-env`: Make sure `$SAGE_VENV/bin` is at the beginning of the `PATH`
 - #29850: Install `sage-env-config` as part of `sage_conf`; Move `build/pkgs/sage_conf/src/sage_conf.py[.in]` into `src/`, mark it (and also `src/bin/sage-env-config[.in]`) `# sage_setup: distribution = sage_conf`.
 - #30527: Create PEP 503 simple repository for wheels built during installation
-- #30578: Add `src/requirements.txt` and `src/setup.cfg` [install_requires] for installation of sagelib in a venv
+- #30578: Add `src/requirements.txt` for installation of sagelib in a venv
 - #30912: sagelib: Update metadata for PyPI deployment
 - #30371: In-place (editable) installs of sagelib in a venv
 - #30896: `./configure --without-python`