-
-
Notifications
You must be signed in to change notification settings - Fork 479
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Distributions sagemath-{flint-arb,homfly,giac,gap}, add "sage_setup: distribution" to Cython modules #30666
Comments
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
comment:5
Good idea to separate this into a new ticket. While working on #30371, I noticed that most cython files using singular cannot be compiled without pynac. So maybe these should be combined. Also, I think, there should be distributions for GAP, CCObject, linbox, ratpoints, zn_poly and mari. What do you think about renaming sage_setup: distribution to sage_setup: dependency? I think this better reflects the purpose. The distribution is then generated based on which dependencies are available. Another idea would be to use |
comment:6
Replying to @tobiasdiez:
I think they should be separate because I really want to be able to make singular optional. pynac, on the other hand, is essential for our symbolics implementation.
Yes, please add to the list in the ticket description with explanation (what is CCObject?)
No, I wouldn't like that. As soon as you start with declaring "dependencies", there will be combinatorial explosion from the combinations of such dependencies. I really want a well-designed partition of the source files into (relatively few) disjoint distributions. This is crucial for the modularization -- each distribution will eventually be separately compilable and installable package on PyPI. |
This comment has been minimized.
This comment has been minimized.
comment:8
Ok, makes sense. My idea was that the cython file declares which dependencies it has, and in the setup.py file you have a list of distributions and their dependencies. If all dependencies are met, that particular distribution is built. E.g. distribution "sage-singular" relies on "pynac" and "singular". (That's only a feeling, but it feels strange to have distributions determined by dependencies and not by a theme or subject, e.g. "sage-singular" vs "sage-symbolic calculation". But you have a better overview, so I trust you there.) I've added the above distributions to the list. |
comment:9
Replying to @tobiasdiez:
Distributions can certainly depend on other distributions. Also, often it is relatively easy to remove some of these dependencies by small changes to a few source files, moving a few methods around. See for example #29911. We can take work on this in follow-up tickets.
Perhaps, but there is actually an important "political" (open source community) reason for this design too. By naming these components after major libraries that provide the features, we make these libraries and their important role for Sage more visible to end users. Attribution tends to be an important motivating factor to developers of these libraries. |
comment:10
To expand on this a little bit: I wouldn't rule out distributions named after topics. The present ticket only provides a "skeleton" of distributions that are (1) technically needed to take care of compile-time dependencies, (2) provides attribution. Later on (in follow-up tickets), for example, there could be a distribution |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
comment:13
Replying to @mkoeppe:
When I wrote this, I didn't recall that singular's |
Changed keywords from none to sd111 |
This comment has been minimized.
This comment has been minimized.
Dependencies: #31031 |
comment:17
Setting new milestone based on a cursory review of ticket status, priority, and last modification date. |
comment:53
there are a number of files with |
comment:54
They are processed by m4, see |
comment:55
Imho they should have .in suffix. Otherwise, looks OK. |
comment:56
The .in files in use with autotools are not processed by m4. These .m4 files are processed by m4. For example, in setup.cfg.m4 you'll see the m4 macro call |
comment:57
ah, OK. I misunderstood what "processed" means in this context. |
comment:58
Thanks! |
Reviewer: Dima Pasechnik |
comment:60
When I build the full sagelib with this ticket included (but I do not build those sub distribution yet) in sage-on-gentoo, building the documentation fails. After inspection, I have the sources installed for |
comment:61
Are you building from |
comment:62
|
comment:63
I also delete |
comment:64
OK, that's something that I'll have to fix in |
Branch pushed to git repo; I updated commit sha1. New commits:
|
Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
|
Removed branch from issue description; replaced by PR #35663 |
Basically, we are making all external libraries optional, except for a minimal set of "core" libraries such as
cysignals
andgmpy2
(see #29865).(from #30371): See #29705 under the items titled "Deploy mildly modularized distributions", "Further modularization" for a sketch of such distributions. Basically, one distribution for each major C/C++ library (such as
sagemath-ntl
) - but some libraries come in packs that would not make much sense to separate (such assagemath-flint-arb-e_antic
).List of distributions:
- 'sage/libs/arb/arb_version.pyx',
- 'sage/libs/arb/arith.pyx',
- 'sage/matrix/matrix_complex_ball_dense.pyx',
- 'sage/rings/complex_arb.pyx',
- 'sage/rings/number_field/number_field_element_quadratic.pyx',
- 'sage/rings/polynomial/polynomial_complex_arb.pyx',
- 'sage/rings/real_arb.pyx'
- etc.
giacpy_sage
insage.libs.giac
+ dependency onlibgiac
)- sage/libs/giac/giac.pyx
- 'sage/coding/codecan/codecan.pyx',
- 'sage/combinat/enumeration_mod_permgroup.pyx',
- 'sage/combinat/root_system/reflection_group_c.pyx',
- 'sage/combinat/root_system/reflection_group_element.pyx',
- 'sage/graphs/spanning_tree.pyx',
- 'sage/groups/libgap_wrapper.pyx',
- 'sage/groups/matrix_gps/group_element.pyx',
- 'sage/groups/perm_gps/permgroup_element.pyx',
- 'sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx',
- 'sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx',
- 'sage/groups/perm_gps/partn_ref/data_structures.pyx',
- 'sage/groups/perm_gps/partn_ref/double_coset.pyx',
- 'sage/groups/perm_gps/partn_ref/refinement_binary.pyx',
- 'sage/groups/perm_gps/partn_ref/refinement_graphs.pyx',
- 'sage/groups/perm_gps/partn_ref/refinement_lists.pyx',
- 'sage/groups/perm_gps/partn_ref/refinement_matrices.pyx',
- 'sage/groups/perm_gps/partn_ref/refinement_python.pyx',
- 'sage/groups/perm_gps/partn_ref/refinement_sets.pyx',
- 'sage/groups/perm_gps/partn_ref2/refinement_generic.pyx',
- 'sage/libs/gap/element.pyx',
- 'sage/libs/gap/libgap.pyx',
- 'sage/libs/gap/util.pyx',
- 'sage/matrix/matrix_gap.pyx',
- 'sage/sets/disjoint_set.pyx'
To test:
make SAGE_WHEELS=yes SAGE_CHECK=yes sagemath_flint_arb
make SAGE_WHEELS=yes SAGE_CHECK=yes sagemath_gap
make SAGE_WHEELS=yes SAGE_CHECK=yes sagemath_giac
make SAGE_WHEELS=yes SAGE_CHECK=yes sagemath_homfly
In follow-up tickets:
sagemath-brial
(exsage-brial
insage.rings.polynomial.pbori
+sage.libs.polybori
,sage.crypto.boolean_function
)sagemath-ntl
sagemath-ecl
(sage.libs.ecl
)sagemath-maxima
: requires sage-eclsagemath-singular
: (some of these files actually may be better put in the pynac distribution)- 'sage/algebras/letterplace/free_algebra_element_letterplace.pyx',
- 'sage/algebras/letterplace/free_algebra_letterplace.pyx',
- 'sage/algebras/letterplace/letterplace_ideal.pyx',
- 'sage/libs/pynac/constant.pyx',
- 'sage/libs/pynac/pynac.pyx',
- 'sage/libs/singular/function.pyx',
- 'sage/libs/singular/groebner_strategy.pyx',
- 'sage/libs/singular/option.pyx',
- 'sage/libs/singular/polynomial.pyx',
- 'sage/libs/singular/ring.pyx',
- 'sage/libs/singular/singular.pyx',
- 'sage/matrix/matrix_mpolynomial_dense.pyx',
- 'sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx',
- 'sage/rings/polynomial/multi_polynomial_libsingular.pyx',
- 'sage/rings/polynomial/plural.pyx',
- 'sage/symbolic/comparison.pyx',
- 'sage/symbolic/constants_c.pyx',
- 'sage/symbolic/expression.pyx',
- 'sage/symbolic/function.pyx',
- 'sage/symbolic/getitem.pyx',
- 'sage/symbolic/ring.pyx',
- 'sage/symbolic/series.pyx',
- 'sage/symbolic/substitution_map.pyx',
sagemath-pynac
sagemath-linbox
:- 'sage/libs/linbox/linbox_flint_interface.pyx',
- 'sage/matrix/matrix_integer_sparse.pyx',
- 'sage/matrix/matrix_modn_dense_double.pyx',
- 'sage/matrix/matrix_modn_dense_float.pyx',
- 'sage/matrix/matrix_modn_sparse.pyx'
sagemath-znpoly
(subject to removal in zn_poly removal #32841?)- 'sage/modular/modsym/p1list.pyx',
- 'sage/modular/pollack_stevens/dist.pyx',
- 'sage/rings/fraction_field_FpT.pyx',
- 'sage/rings/polynomial/polynomial_zmod_flint.pyx',
- 'sage/schemes/hyperelliptic_curves/hypellfrob.pyx',
sagemath-mari
(also requiring pbori and pbori-groebner):- 'sage/matrix/matrix_gf2e_dense.pyx',
- 'sage/matrix/matrix_integer_dense.pyx',
- 'sage/matrix/matrix_mod2_dense.pyx',
- 'sage/matrix/matrix_rational_dense.pyx',
- 'sage/modules/vector_mod2_dense.pyx',
- 'sage/rings/polynomial/pbori/pbori.pyx',
- 'sage/rings/polynomial/polynomial_gf2x.pyx'
This is preparation for Meta-ticket #29705 (Modularization) and #30371.
Depends on #31031
Depends on #34855
Depends on #34839
CC: @tobiasdiez @dimpase
Component: refactoring
Keywords: sd111
Author: Matthias Koeppe
Reviewer: Dima Pasechnik
Issue created by migration from https://trac.sagemath.org/ticket/30666
The text was updated successfully, but these errors were encountered: