As we are making progress on preparing the Sage library for modularization 
(https://trac.sagemath.org/ticket/29705), here's a discussion of three 
things that need to be decided whenever a portion of the Sage library is 
modularized:

*(1) Namespace:* Will it be imported as (+) "from sage.hermeneutics.quantum 
import QuantumGravity" or (-) "from transformative_hermeneutics.quantum 
import QuantumGravity"?

*(2)* *Distribution name (= project name):* Will it be installed using "pip 
install transformative-hermeneutics" or "pip install sagemath-hermeneutics"?

*(3) Source repository:* Is the source maintained as part of the Sage 
repository using Trac tickets (MONOREPO); or in a separate repository on 
GitHub, GitLab, ... (MULTIREPO)?

This post is dedicated to the relation between (1) and (2).

There is no technical restriction that links (1) and (2). However, 
https://packaging.python.org/tutorials/packaging-projects/ provides some 
guidance. The informational PEP https://www.python.org/dev/peps/pep-0423/ 
("Naming conventions and recipes related to packaging") is outdated, but 
the section https://www.python.org/dev/peps/pep-0423/#id87 still provides 
good additional guidance.

Note that the distribution name is not required to be a Python identifier. 
In fact, using dashes (-) is preferred to underscores in distribution 
names; setuptools and other parts of Python's packaging infrastructure 
normalize underscores to dashes. (Using dots in distribution names, to 
indicate ownership by organizations, still mentioned in 
https://www.python.org/dev/peps/pep-0423/, appears to have largely fallen 
out of favor.) 

*Recommendation:* A distribution that provides functionality that does not 
need to import anything from the sage namespace (from sage.*PAC*.*KAGE**.MODULE 
*import* ...*) should not use the sage namespace for its packages/modules.

*Examples (existing):* 
- The distribution https://pypi.org/project/*pplpy*/ provides the Python 
package ppl [according to PEP 423, this should have been "pplpy"]. pplpy is 
a much extended version of what used to be sage.libs.ppl 
(https://trac.sagemath.org/ticket/23024), a part of the Sage library. 
sage.libs.ppl had dependencies on sage.rings to convert to/from Sage number 
types. pplpy has no such dependencies and is therefore usable in a wider 
range of Python projects.
- The distribution https://pypi.org/project/*memory-allocator*/ provides 
the Python package memory_allocator. This used to be 
sage.ext.memory_allocator, a part of the Sage library; it was split out in 
https://trac.sagemath.org/ticket/31591

*Recommendation:* A distribution that provides Python modules in the sage 
namespace (sage.*PAC*.*KAGE.MODULE*) should be named 
*sagemath-DISTRI-BUTION*. Other distributions should not use the prefix 
*sagemath-* in the distribution name.

*Examples (existing):* 
- The distribution https://pypi.org/project/*sage-conf*/ provides the 
Python module sage_conf.
- The distribution https://pypi.org/project/*sage-sws2rst*/ provides the 
Python package sage_sws2rst.
- The distribution https://pypi.org/project/*sagemath-standard*/ currently 
provides the entirety of the Python package sage (i.e., sage.categories, 
sage.combinat, sage.rings, ...) - representing the status quo before 
modularization.
- The distribution https://pypi.org/project/*sagemath-categories*/ provides 
a small subset of the modules of the Sage library, mostly from the Python 
packages sage.structure, sage.categories, and sage.misc (from 
https://trac.sagemath.org/ticket/29865, needs review)
- The distribution *sagemath-polyhedra *provides a self-contained subset of 
the modules of the Sage library for linear algebra and polyhedral geometry 
over ℚ, mostly from sage.rings, sage.modules, sage.matrix, sage.geometry 
(https://trac.sagemath.org/ticket/32432, under development)
- The distribution https://github.com/mkoeppe/
*sage-numerical-interactive-mip* is a user package, not part of the Sage 
library, providing the Python package sage_numerical_interactive_mip.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/01d89bc6-2cb4-4f7d-ae4e-48840e49ee90n%40googlegroups.com.

Reply via email to