passagemath-environment 10.4.61__py3-none-any.whl → 10.4.63__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -386,12 +386,15 @@ if [ -n "$SAGE_LOCAL" ]; then
386
386
  # "Toolchains/XcodeDefault.xctoolchain/usr/bin/". (See #37237.)
387
387
  if [ -z "$LD" ]; then
388
388
  # Running xcode-select on a system with no toolchain writes an
389
- # error message to stderr, so redirect stderr to /dev/null.
389
+ # error message to stderr, so redirect stderr to /dev/null.
390
390
  XCODE_PATH=$(/usr/bin/xcode-select -p 2> /dev/null)
391
391
  if [ -n $XCODE_PATH ]; then
392
392
  if [ -x "$XCODE_PATH/usr/bin/ld-classic" -o \
393
393
  -x "$XCODE_PATH/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld-classic" ]; then
394
- LDFLAGS="$LDFLAGS -Wl,-ld_classic"
394
+ # Add -ld_classic only if -ld_classic is not deprecated.
395
+ if [ -z "$(ld -ld_classic 2>&1 | grep 'ld_classic is deprecated')" ]; then
396
+ LDFLAGS="$LDFLAGS -Wl,-ld_classic"
397
+ fi
395
398
  fi
396
399
  else
397
400
  # On a macOS system with no toolchain we don't want this script
@@ -4,6 +4,6 @@
4
4
  # which stops "setup.py develop" from rewriting it as a Python file.
5
5
  :
6
6
  # This file is auto-generated by the sage-update-version script, do not edit!
7
- SAGE_VERSION='10.4.61'
8
- SAGE_RELEASE_DATE='2024-11-15'
9
- SAGE_VERSION_BANNER='passagemath version 10.4.61, Release Date: 2024-11-15'
7
+ SAGE_VERSION='10.4.63'
8
+ SAGE_RELEASE_DATE='2024-11-18'
9
+ SAGE_VERSION_BANNER='passagemath version 10.4.63, Release Date: 2024-11-18'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: passagemath-environment
3
- Version: 10.4.61
3
+ Version: 10.4.63
4
4
  Summary: passagemath: System and software environment
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  Maintainer: Matthias Köppe, passagemath contributors
@@ -29,20 +29,20 @@ Classifier: Topic :: Scientific/Engineering :: Mathematics
29
29
  Requires-Python: <3.13,>=3.9
30
30
  Description-Content-Type: text/x-rst
31
31
  Provides-Extra: conf
32
- Requires-Dist: passagemath-conf~=10.4.61.0; extra == "conf"
32
+ Requires-Dist: passagemath-conf~=10.4.63.0; extra == "conf"
33
33
  Provides-Extra: cython
34
34
  Requires-Dist: cython!=3.0.3,<4.0,>=3.0; extra == "cython"
35
35
  Requires-Dist: cython<3.1.0,>=3.0.8; extra == "cython"
36
36
  Provides-Extra: docbuild
37
- Requires-Dist: passagemath-docbuild~=10.4.61.0; extra == "docbuild"
37
+ Requires-Dist: passagemath-docbuild~=10.4.63.0; extra == "docbuild"
38
38
  Provides-Extra: pytest
39
39
  Requires-Dist: pytest; extra == "pytest"
40
40
  Provides-Extra: rst2ipynb
41
41
  Requires-Dist: rst2ipynb>=0.2.2; extra == "rst2ipynb"
42
42
  Provides-Extra: sage
43
- Requires-Dist: passagemath-standard~=10.4.61.0; extra == "sage"
43
+ Requires-Dist: passagemath-standard~=10.4.63.0; extra == "sage"
44
44
  Provides-Extra: sws2rst
45
- Requires-Dist: passagemath-sws2rst~=10.4.61.0; extra == "sws2rst"
45
+ Requires-Dist: passagemath-sws2rst~=10.4.63.0; extra == "sws2rst"
46
46
  Provides-Extra: tox
47
47
  Requires-Dist: tox>=4.11; extra == "tox"
48
48
 
@@ -1,12 +1,12 @@
1
- passagemath_environment-10.4.61.data/scripts/sage,sha256=IjVLatRQBOGrVkqum1vDra9CZ0N7fkT0qfZNqJQRews,43367
2
- passagemath_environment-10.4.61.data/scripts/sage-env,sha256=jW_ZPd3IL6fLTXVT08ZCMvP0PLseo1QM-bb5gV5fPhc,23302
3
- passagemath_environment-10.4.61.data/scripts/sage-num-threads.py,sha256=U09CpRe4aXkHNWHoZSYoQwYRASrvoT-l-zslRiGVbWc,3128
4
- passagemath_environment-10.4.61.data/scripts/sage-python,sha256=gXVskicH9NJtE5apMm1U-ZWDzWiz3Rm6dFBND2y60gI,28
5
- passagemath_environment-10.4.61.data/scripts/sage-venv-config,sha256=XeQOA2wIaIfUaEf9aPFUMQvr2s-aKKSLaBZORoSpP3Y,1371
6
- passagemath_environment-10.4.61.data/scripts/sage-version.sh,sha256=RAcu6KUnRRSPk7otvG0Xg8fQefkkqEGkU9A3zj8Q_6s,403
1
+ passagemath_environment-10.4.63.data/scripts/sage,sha256=IjVLatRQBOGrVkqum1vDra9CZ0N7fkT0qfZNqJQRews,43367
2
+ passagemath_environment-10.4.63.data/scripts/sage-env,sha256=bJMK-CihfTEImHt86_rR8vAlhTHpuzCNKvdv9MsDM6A,23497
3
+ passagemath_environment-10.4.63.data/scripts/sage-num-threads.py,sha256=U09CpRe4aXkHNWHoZSYoQwYRASrvoT-l-zslRiGVbWc,3128
4
+ passagemath_environment-10.4.63.data/scripts/sage-python,sha256=gXVskicH9NJtE5apMm1U-ZWDzWiz3Rm6dFBND2y60gI,28
5
+ passagemath_environment-10.4.63.data/scripts/sage-venv-config,sha256=XeQOA2wIaIfUaEf9aPFUMQvr2s-aKKSLaBZORoSpP3Y,1371
6
+ passagemath_environment-10.4.63.data/scripts/sage-version.sh,sha256=cPiqNLwf-voMFvRI3hw5Naalg5kH2rUYaaSjTfCtVHM,403
7
7
  sage/all__sagemath_environment.py,sha256=d44XIAz0tXfPdQxa3dGJvF2WEf6stMQxLUFL0GC1Sv4,188
8
- sage/env.py,sha256=GT0_wO_jQVj5Vb20v0-d1Q5lOqBXhoeGEBkOWxDEXDU,19337
9
- sage/version.py,sha256=Szfc1yY5rXxCkMw_kQNS8ISgyLRU3nwQF8-X9XSGogs,279
8
+ sage/env.py,sha256=QkNRMUzt5UqKIHmZrNSe4F9tzKUIzrKse77GwXUPlWU,19317
9
+ sage/version.py,sha256=hDqyvvFtIp6jtHJzB9-VcAovrQ2pUJxi3EFA6ElWgSE,279
10
10
  sage/features/__init__.py,sha256=xBqjHj-K85olQ5HVmNq1oSPn2W9ol1a1-FjElSb0sGQ,36977
11
11
  sage/features/all.py,sha256=6YQEvdLvw6Ipb0u-PLsB97wWnHj28qBYoz3fGbgrFmg,4236
12
12
  sage/features/bliss.py,sha256=SeLzXDEH30tgup593E42VJGGpR2gpRRI4lBt0ufCaGc,2447
@@ -16,18 +16,20 @@ sage/features/csdp.py,sha256=gen-XGjD-BcbOojILWv9L-T1zamb0_qFRlshk0k_j-k,2849
16
16
  sage/features/cython.py,sha256=iCIV3-Btwv6vX2L15cbCyHuNx71-xcLcpwt6wCYC1Xc,1291
17
17
  sage/features/databases.py,sha256=oiQN0Bo2QwfOTibcsF8vXRZXmAlE6Lh5IihT0KUrTK4,10992
18
18
  sage/features/dvipng.py,sha256=SJCwJNUamQuPL2-bOzT3JrA8QMdJ0t20EB9n5ogXnHE,1330
19
- sage/features/ecm.py,sha256=qMnrunufXVKz104N-eY_3fy4Sgdzd0ohs1kXOeHvXFI,1313
19
+ sage/features/eclib.py,sha256=tP9rUZ2_vTe02cI49hV3WeTgwVvJ1VkJmzTN9VEOPtc,1499
20
+ sage/features/ecm.py,sha256=LdvVZwAmzD0wx2qOJIvcHo2HHCwDg_xk2x7jWRumnWA,1627
20
21
  sage/features/ffmpeg.py,sha256=wtJL6t56Oe1D4k1ChZjZ6LP_kx3pGPOFkYCjvr28JPM,4762
21
22
  sage/features/four_ti_2.py,sha256=fKuKtWscuOCF4T1v8iNAlkRxSfyfp_1M-W4l9xaG6gg,1723
22
- sage/features/fricas.py,sha256=bhHt-RDXipIISzHvdkvMwGPOzC-qpD9eDIxSlkyW624,2333
23
- sage/features/frobby.py,sha256=wlYZEodbX3iAdj5RvOceSqMlmttVpBkhyr9fDPsBzv0,1276
23
+ sage/features/fricas.py,sha256=-oLnwQ3W5eFxH7cyah-t0SjKlU2C6mG5rh4z9dCP85c,2571
24
+ sage/features/frobby.py,sha256=ITL0J4N4MKN2yuBKS6c-1vw_R7nZr72ZoPKeXi3JJVg,1500
24
25
  sage/features/gap.py,sha256=DsJciQ5FIlYXkIGKtfxdag5vyl9Gei8aZJg7C3N7vjM,3374
25
- sage/features/gfan.py,sha256=KTLsGqregD8zzIRtfzJva40lFbPJLyLFzVXwJb5jqdE,1187
26
- sage/features/giac.py,sha256=N4OflOOBhAy3eRDQsq-qt50sBfjKQS4TvWnQmr4oYaw,776
26
+ sage/features/gfan.py,sha256=VXzxylL_LdtG-rqIOToE81wUhXmBgojal-NB1LxjRAg,1474
27
+ sage/features/giac.py,sha256=xq7xSO8bqIx9CjVVTCU62OlWePfAx8YQzaEzZqGLYlo,1024
27
28
  sage/features/graph_generators.py,sha256=LSoVbz7yMZDur68qz-s-YVz3xT72rhePpg8s9GJt92w,6175
28
29
  sage/features/graphviz.py,sha256=BY9LU2-p9a3uvw8L07CVDDMiznyzJajFi1W7fb0T2pQ,3516
29
30
  sage/features/igraph.py,sha256=1Vf1Fo_e4iFoihBYqKxNQL70Mhokir9xX6ADd3XGudU,1492
30
31
  sage/features/imagemagick.py,sha256=GMTEXzGKkfIzVVwuX6JH-EREvHy_Z-XowN5SWd8pjgU,5236
32
+ sage/features/info.py,sha256=bTnbU8R626KyK6QNO5kt2_Gah-w2QFZ2HrNGHd9KbA8,729
31
33
  sage/features/interfaces.py,sha256=5XPbHGOtH3khvXe2zl7kjR67YPq1Bhf7a6fv1d9s1z4,8295
32
34
  sage/features/internet.py,sha256=he6OLOrLihRrkWCCKVwyBGZyXmU7XRP-ZWfUPR_A1C4,2074
33
35
  sage/features/jmol.py,sha256=Gg7vTzNRJoPIQSbF25gifJvqHJDn0dm5HZTEA4TMdNA,1135
@@ -36,11 +38,11 @@ sage/features/kenzo.py,sha256=sHqSeagK7_p0RmSjQ8q-1kxIRxRsNa7jFSexAsr80Ks,2672
36
38
  sage/features/latex.py,sha256=pyj57wpTfdTXFFsbIxr6OuOl0j5Sg1CrU_ZhxLIeLsI,9616
37
39
  sage/features/latte.py,sha256=lmVKos8_f9UJjU1nSVuAWURM80fsYIv1n1do-5pCbd4,2787
38
40
  sage/features/lrs.py,sha256=ru_VDo0Y6am54FQd9zqanhqoXnZXP2hudnkjD9GNNlI,5963
39
- sage/features/macaulay2.py,sha256=gVj4F0oPKIcl7oOWTvwh2yVIvtS5adn9x9jKCDdP0C4,1320
41
+ sage/features/macaulay2.py,sha256=cv3imBr1VSwglrlrbYzIOymAcXF7p5FOhBxrm5sjDSo,1565
40
42
  sage/features/mcqd.py,sha256=GfllBC9A170B0z64bE3AZ9yLfUF8aTdQDgGhRwCnYGc,1397
41
43
  sage/features/meataxe.py,sha256=9uYHmPzED2RGmK5ge56zJlnHDhKVQidPEbxLThSdiaw,1458
42
44
  sage/features/mip_backends.py,sha256=vnTIYLCUy0XoM93OepBDl3cejJsMooLwRszO-3xAswg,3952
43
- sage/features/msolve.py,sha256=kgFa-TsgZHUkIlVoJqq3cyz58gq2xWuz45ppoOFNzqw,2285
45
+ sage/features/msolve.py,sha256=lLYnqTZdExGMOL5YvfVEHz-QMfX7mHkfcfdFXyyfHJU,2493
44
46
  sage/features/nauty.py,sha256=RxY4q1skVUYFNYl00mNb93Z2W9wQHYPVxB46B7rDIcY,2341
45
47
  sage/features/normaliz.py,sha256=cWmDeu3tMfyUOLA3IlqI6sYwRhSz0dv2tQhIClvvqcw,1384
46
48
  sage/features/palp.py,sha256=kn34lTsCndDFlmpZdxsh0U1CxPpk8pF93FlUM9uP3ag,2254
@@ -52,14 +54,14 @@ sage/features/polymake.py,sha256=Ix2qM0izHhBFa-IGTWjcbW9ofutbRP6FTL5p4buSgPU,142
52
54
  sage/features/poppler.py,sha256=hNdYa03BxYYiFTk70RAzJtCYxp0VEjGqrWMDpDosp5w,2231
53
55
  sage/features/qepcad.py,sha256=uCNCtBrBA3M6mTl8jQtE8yNfNombzq6FUDNCQAs3-OA,1276
54
56
  sage/features/rubiks.py,sha256=8N54u2kShVqke1eRjLHBwqkENgc3vvfspI3h5gkPNKw,5261
55
- sage/features/sagemath.py,sha256=rheZfPlQn2oBzvZJ-Q7rk_iiBRinjYpeLZIoiOoaT3w,55171
57
+ sage/features/sagemath.py,sha256=B57gyY4xzaHcJmqX49M86B4SUGdcvYjmrQISjFoiXH0,55206
56
58
  sage/features/sat.py,sha256=XJXQPFU9PQRDwXVezC9j3iRJoDQSkWsI2b8F_fNNagk,2951
57
59
  sage/features/singular.py,sha256=jyX5Pl-Zpo-I5kG0aKDFdPawMcM_S_Jv0QN7dsENNRg,1611
58
60
  sage/features/sirocco.py,sha256=wWG1tWXFnUPY5XVL5eQXKSQiX4g-bwsMXekIltbVQFs,1452
59
61
  sage/features/sphinx.py,sha256=52lO3muIkTYhmd_gdVsHEPMQeFWsbTHiky5z2E9mSPM,2299
60
62
  sage/features/standard.py,sha256=Eh95Xj-swHqPvORXCntVmz0U1XxXqv7KpYdrUKJAdac,2036
61
63
  sage/features/symengine_py.py,sha256=acVpHvjDe_Opl8iUAMbGaG13ROIjPEF9Fyn4HSn61Ek,1523
62
- sage/features/sympow.py,sha256=QWKec1LKAHrFoFZSo3cK3-1PlBWDoVjKTSjosxMmyVk,1290
64
+ sage/features/sympow.py,sha256=YtZbWqqdzeXaJ88ae4eX6SQI1VaggXV8OnrghVqS5nY,1543
63
65
  sage/features/tdlib.py,sha256=Lij2GGLbh0ja_fNYAff4ZozVi6lcD_5Dzn005IAgWBg,1260
64
66
  sage/features/threejs.py,sha256=6oanR1omSvCAEDmwh1xiiPjFM648K66_oLQT6nyz_Q0,2368
65
67
  sage/features/topcom.py,sha256=swLvRxLgXZ3zg6-y0Pbh9ci6vGqsVEoTXJXf-UI_8nA,2211
@@ -67,8 +69,8 @@ sage/misc/all__sagemath_environment.py,sha256=LG7rw2H1bgnbQpXTph34n1ULnjE3vu4jVi
67
69
  sage/misc/package.py,sha256=xZF5iijW69X9DblpnLcYXQiRdjE7Uhu1MJ5eeq12T9o,19191
68
70
  sage/misc/package_dir.py,sha256=zzL-ASJSn8oX_gejqMrHrTfesVt31vAp3g-ouZKiOks,26899
69
71
  sage/misc/temporary_file.py,sha256=Z-0blAIrU1MAdpl3z8M_6n7-zj4Ac3NA-ULSIIKmCWU,19138
70
- sage/misc/viewer.py,sha256=T7DRgW07qYcKQPJ0nG-N1KoVRHz3xrL7LxkVAZ7dvOo,11554
71
- passagemath_environment-10.4.61.dist-info/METADATA,sha256=w0Qm6nhovde_YzCfvAvhyOHKLWt-aDYLVTtUTeZvK8g,4126
72
- passagemath_environment-10.4.61.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
73
- passagemath_environment-10.4.61.dist-info/top_level.txt,sha256=hibFyzQHiLOMK68qL1OWsNKaXOmSXqZjeLTBem6Yy7I,5
74
- passagemath_environment-10.4.61.dist-info/RECORD,,
72
+ sage/misc/viewer.py,sha256=Jm4pABqyMs1hvggLA0JZAiZ_26uaBtPpaRKQUTddVE4,11574
73
+ passagemath_environment-10.4.63.dist-info/METADATA,sha256=AR3eL-Uqqw5T0nTSyERSKRQqPsq-o1dTHr0i_2Jox2s,4126
74
+ passagemath_environment-10.4.63.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
75
+ passagemath_environment-10.4.63.dist-info/top_level.txt,sha256=hibFyzQHiLOMK68qL1OWsNKaXOmSXqZjeLTBem6Yy7I,5
76
+ passagemath_environment-10.4.63.dist-info/RECORD,,
sage/env.py CHANGED
@@ -36,6 +36,7 @@ AUTHORS:
36
36
 
37
37
  from typing import Optional
38
38
  import sage
39
+ import platform
39
40
  import os
40
41
  import socket
41
42
  import sys
@@ -165,7 +166,6 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
165
166
 
166
167
 
167
168
  # system info
168
- UNAME = var("UNAME", os.uname()[0])
169
169
  HOSTNAME = var("HOSTNAME", socket.gethostname())
170
170
  LOCAL_IDENTIFIER = var("LOCAL_IDENTIFIER", "{}.{}".format(HOSTNAME, os.getpid()))
171
171
 
sage/features/eclib.py ADDED
@@ -0,0 +1,46 @@
1
+ # sage_setup: distribution = sagemath-environment
2
+ r"""
3
+ Feature for testing the presence of eclib
4
+ """
5
+
6
+ # *****************************************************************************
7
+ # Copyright (C) 2024 Matthias Koeppe
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ # as published by the Free Software Foundation; either version 2 of
11
+ # the License, or (at your option) any later version.
12
+ # https://www.gnu.org/licenses/
13
+ # *****************************************************************************
14
+
15
+ import subprocess
16
+ from . import Executable, FeatureTestResult, PythonModule
17
+ from .join_feature import JoinFeature
18
+
19
+
20
+ class Mwrank(Executable):
21
+ r"""
22
+ A :class:`~sage.features.Feature` describing the presence of mwrank.
23
+
24
+ EXAMPLES::
25
+
26
+ sage: from sage.features.eclib import Mwrank
27
+ sage: Mwrank().is_present() # needs eclib
28
+ FeatureTestResult('mwrank', True)
29
+ """
30
+ def __init__(self):
31
+ r"""
32
+ TESTS::
33
+
34
+ sage: from sage.features.eclib import Mwrank
35
+ sage: isinstance(Mwrank(), Mwrank)
36
+ True
37
+ """
38
+ Executable.__init__(self, "mwrank", executable='mwrank',
39
+ spkg='eclib', type='standard')
40
+
41
+
42
+ def all_features():
43
+ return [JoinFeature("eclib",
44
+ (Mwrank(),
45
+ PythonModule('sage.libs.eclib')),
46
+ spkg='sagemath_eclib', type='standard')]
sage/features/ecm.py CHANGED
@@ -12,7 +12,8 @@ Feature for testing the presence of ``ecm`` or ``gmp-ecm``
12
12
  # https://www.gnu.org/licenses/
13
13
  # ****************************************************************************
14
14
 
15
- from . import Executable
15
+ from . import Executable, PythonModule
16
+ from .join_feature import JoinFeature
16
17
  from sage.env import SAGE_ECMBIN
17
18
 
18
19
 
@@ -23,8 +24,8 @@ class Ecm(Executable):
23
24
  EXAMPLES::
24
25
 
25
26
  sage: from sage.features.ecm import Ecm
26
- sage: Ecm().is_present()
27
- FeatureTestResult('ecm', True)
27
+ sage: Ecm().is_present() # needs ecm
28
+ FeatureTestResult('ecm_executable', True)
28
29
  """
29
30
  def __init__(self):
30
31
  r"""
@@ -34,9 +35,12 @@ class Ecm(Executable):
34
35
  sage: isinstance(Ecm(), Ecm)
35
36
  True
36
37
  """
37
- Executable.__init__(self, name='ecm', executable=SAGE_ECMBIN,
38
+ Executable.__init__(self, name='ecm_executable', executable=SAGE_ECMBIN,
38
39
  spkg='ecm', type='standard')
39
40
 
40
41
 
41
42
  def all_features():
42
- return [Ecm()]
43
+ return [JoinFeature("ecm",
44
+ (Ecm(),
45
+ PythonModule('sage.interfaces.ecm')),
46
+ spkg='sagemath_libecm', type='standard')]
sage/features/fricas.py CHANGED
@@ -14,7 +14,9 @@ Features for testing the presence of ``fricas``
14
14
 
15
15
  import os
16
16
  import subprocess
17
- from . import Executable, FeatureTestResult
17
+ from . import Executable, FeatureTestResult, PythonModule
18
+ from .join_feature import JoinFeature
19
+
18
20
 
19
21
  class FriCAS(Executable):
20
22
  r"""
@@ -24,7 +26,7 @@ class FriCAS(Executable):
24
26
 
25
27
  sage: from sage.features.fricas import FriCAS
26
28
  sage: FriCAS().is_present() # optional - fricas
27
- FeatureTestResult('fricas', True)
29
+ FeatureTestResult('fricas_executable', True)
28
30
  """
29
31
  def __init__(self):
30
32
  r"""
@@ -34,7 +36,7 @@ class FriCAS(Executable):
34
36
  sage: isinstance(FriCAS(), FriCAS)
35
37
  True
36
38
  """
37
- Executable.__init__(self, name='fricas', spkg='fricas',
39
+ Executable.__init__(self, name='fricas_executable', spkg='fricas',
38
40
  executable='fricas',
39
41
  url='https://fricas.github.io')
40
42
 
@@ -62,5 +64,9 @@ class FriCAS(Executable):
62
64
 
63
65
  return FeatureTestResult(self, True)
64
66
 
67
+
65
68
  def all_features():
66
- return [FriCAS()]
69
+ return [JoinFeature("fricas",
70
+ (FriCAS(),
71
+ PythonModule('sage.interfaces.fricas')),
72
+ spkg='sagemath_fricas')]
sage/features/frobby.py CHANGED
@@ -13,8 +13,9 @@ Feature for testing the presence of FROBBY
13
13
  # *****************************************************************************
14
14
 
15
15
  import subprocess
16
- from . import Executable
17
- from . import FeatureTestResult
16
+ from . import Executable, FeatureTestResult, PythonModule
17
+ from .join_feature import JoinFeature
18
+
18
19
 
19
20
  class Frobby(Executable):
20
21
  r"""
@@ -24,7 +25,7 @@ class Frobby(Executable):
24
25
 
25
26
  sage: from sage.features.frobby import Frobby
26
27
  sage: Frobby().is_present() # optional - frobby
27
- FeatureTestResult('frobby', True)
28
+ FeatureTestResult('frobby_executable', True)
28
29
  """
29
30
  def __init__(self):
30
31
  r"""
@@ -34,9 +35,12 @@ class Frobby(Executable):
34
35
  sage: isinstance(Frobby(), Frobby)
35
36
  True
36
37
  """
37
- Executable.__init__(self, "frobby", executable='frobby',
38
+ Executable.__init__(self, "frobby_executable", executable='frobby',
38
39
  spkg='frobby')
39
40
 
40
41
 
41
42
  def all_features():
42
- return [Frobby()]
43
+ return [JoinFeature("frobby",
44
+ (Frobby(),
45
+ PythonModule('sage.interfaces.frobby')),
46
+ spkg='sagemath_frobby')]
sage/features/gfan.py CHANGED
@@ -12,7 +12,8 @@ Features for testing the presence of ``gfan``
12
12
  # https://www.gnu.org/licenses/
13
13
  # *****************************************************************************
14
14
 
15
- from . import Executable
15
+ from . import Executable, PythonModule
16
+ from .join_feature import JoinFeature
16
17
 
17
18
 
18
19
  class GfanExecutable(Executable):
@@ -28,11 +29,15 @@ class GfanExecutable(Executable):
28
29
  True
29
30
  """
30
31
  if cmd is None:
31
- name = "gfan"
32
+ name = "gfan_executable"
33
+ executable = "gfan"
32
34
  else:
33
- name = f"gfan_{cmd}"
34
- Executable.__init__(self, name, executable=name, spkg='gfan', type='standard')
35
+ executable = name = f"gfan_{cmd}"
36
+ Executable.__init__(self, name, executable=executable, spkg='gfan', type='standard')
35
37
 
36
38
 
37
39
  def all_features():
38
- return [GfanExecutable()]
40
+ return [JoinFeature("gfan",
41
+ (GfanExecutable(),
42
+ PythonModule('sage.interfaces.gfan')),
43
+ spkg='sagemath_gfan', type='standard')]
sage/features/giac.py CHANGED
@@ -3,7 +3,9 @@ r"""
3
3
  Feature for testing the presence of ``giac``
4
4
  """
5
5
 
6
- from . import Executable, FeatureTestResult
6
+ from . import Executable, FeatureTestResult, PythonModule
7
+ from .join_feature import JoinFeature
8
+
7
9
 
8
10
  class Giac(Executable):
9
11
  r"""
@@ -13,7 +15,7 @@ class Giac(Executable):
13
15
 
14
16
  sage: from sage.features.giac import Giac
15
17
  sage: Giac().is_present() # needs giac
16
- FeatureTestResult('giac', True)
18
+ FeatureTestResult('giac_executable', True)
17
19
  """
18
20
  def __init__(self):
19
21
  r"""
@@ -23,8 +25,11 @@ class Giac(Executable):
23
25
  sage: isinstance(Giac(), Giac)
24
26
  True
25
27
  """
26
- Executable.__init__(self, 'giac', executable='giac',
28
+ Executable.__init__(self, 'giac_executable', executable='giac',
27
29
  spkg='giac', type='standard')
28
30
 
29
31
  def all_features():
30
- return [Giac()]
32
+ return [JoinFeature("giac",
33
+ (Giac(),
34
+ PythonModule('sage.interfaces.giac')),
35
+ spkg='sagemath_giac', type='standard')]
sage/features/info.py ADDED
@@ -0,0 +1,30 @@
1
+ # sage_setup: distribution = sagemath-environment
2
+ r"""
3
+ Feature for testing the presence of ``info``, from GNU Info
4
+ """
5
+
6
+ from . import Executable
7
+
8
+ class Info(Executable):
9
+ r"""
10
+ A :class:`~sage.features.Feature` describing the presence of :ref:`info <spkg_info>`.
11
+
12
+ EXAMPLES::
13
+
14
+ sage: from sage.features.info import Info
15
+ sage: Info()
16
+ Feature('info')
17
+ """
18
+ def __init__(self):
19
+ r"""
20
+ TESTS::
21
+
22
+ sage: from sage.features.info import Info
23
+ sage: isinstance(Info(), Info)
24
+ True
25
+ """
26
+ Executable.__init__(self, 'info', executable='info',
27
+ spkg='info', type='standard')
28
+
29
+ def all_features():
30
+ return [Info()]
@@ -13,8 +13,9 @@ Feature for testing the presence of MACAULAY2
13
13
  # *****************************************************************************
14
14
 
15
15
  import subprocess
16
- from . import Executable
16
+ from . import Executable, PythonModule
17
17
  from . import FeatureTestResult
18
+ from .join_feature import JoinFeature
18
19
 
19
20
  class Macaulay2(Executable):
20
21
  r"""
@@ -24,7 +25,7 @@ class Macaulay2(Executable):
24
25
 
25
26
  sage: from sage.features.macaulay2 import Macaulay2
26
27
  sage: Macaulay2().is_present() # optional - macaulay2
27
- FeatureTestResult('macaulay2', True)
28
+ FeatureTestResult('macaulay2_executable', True)
28
29
  """
29
30
  def __init__(self):
30
31
  r"""
@@ -34,9 +35,12 @@ class Macaulay2(Executable):
34
35
  sage: isinstance(Macaulay2(), Macaulay2)
35
36
  True
36
37
  """
37
- Executable.__init__(self, "macaulay2", executable='M2',
38
+ Executable.__init__(self, "macaulay2_executable", executable='M2',
38
39
  spkg='macaulay2')
39
40
 
40
41
 
41
42
  def all_features():
42
- return [Macaulay2()]
43
+ return [JoinFeature("macaulay2",
44
+ (Macaulay2(),
45
+ PythonModule('sage.interfaces.macaulay2')),
46
+ spkg='sagemath_macaulay2')]
sage/features/msolve.py CHANGED
@@ -19,8 +19,9 @@ Feature for testing the presence of msolve
19
19
  # *****************************************************************************
20
20
 
21
21
  import subprocess
22
- from . import Executable
23
- from . import FeatureTestResult
22
+ from . import Executable, FeatureTestResult, PythonModule
23
+ from .join_feature import JoinFeature
24
+
24
25
 
25
26
  class msolve(Executable):
26
27
  r"""
@@ -65,4 +66,7 @@ class msolve(Executable):
65
66
  return FeatureTestResult(self, True)
66
67
 
67
68
  def all_features():
68
- return [msolve()]
69
+ return [JoinFeature("msolve",
70
+ (msolve(),
71
+ PythonModule('sage.rings.polynomial.msolve')),
72
+ spkg='sagemath_msolve')]
sage/features/sagemath.py CHANGED
@@ -955,6 +955,7 @@ class sage__rings__number_field(JoinFeature):
955
955
  Doctests that construct algebraic number fields should be marked ``# needs sage.rings.number_field``::
956
956
 
957
957
  sage: # needs sage.rings.number_field
958
+ sage: x = polygen(ZZ, 'x')
958
959
  sage: K.<cuberoot2> = NumberField(x^3 - 2)
959
960
  sage: L.<cuberoot3> = K.extension(x^3 - 3)
960
961
  sage: S.<sqrt2> = L.extension(x^2 - 2); S
sage/features/sympow.py CHANGED
@@ -14,7 +14,8 @@ Feature for testing the presence of ``sympow``
14
14
 
15
15
  import subprocess
16
16
 
17
- from . import Executable
17
+ from . import Executable, PythonModule
18
+ from .join_feature import JoinFeature
18
19
 
19
20
 
20
21
  class Sympow(Executable):
@@ -26,7 +27,7 @@ class Sympow(Executable):
26
27
 
27
28
  sage: from sage.features.sympow import Sympow
28
29
  sage: Sympow().is_present() # needs sympow
29
- FeatureTestResult('sympow', True)
30
+ FeatureTestResult('sympow_executable', True)
30
31
  """
31
32
  def __init__(self):
32
33
  r"""
@@ -36,9 +37,12 @@ class Sympow(Executable):
36
37
  sage: isinstance(Sympow(), Sympow)
37
38
  True
38
39
  """
39
- Executable.__init__(self, "sympow", executable='sympow',
40
+ Executable.__init__(self, "sympow_executable", executable='sympow',
40
41
  spkg='sympow', type='standard')
41
42
 
42
43
 
43
44
  def all_features():
44
- return [Sympow()]
45
+ return [JoinFeature("sympow",
46
+ (Sympow(),
47
+ PythonModule('sage.lfunctions.sympow')),
48
+ spkg='sagemath_sympow', type='standard')]
sage/misc/viewer.py CHANGED
@@ -26,6 +26,7 @@ Functions and classes
26
26
  ---------------------
27
27
  """
28
28
 
29
+ import platform
29
30
  from sage.structure.sage_object import SageObject
30
31
 
31
32
 
@@ -66,7 +67,7 @@ def default_viewer(viewer=None):
66
67
  PDF_VIEWER = BROWSER
67
68
  PNG_VIEWER = BROWSER
68
69
 
69
- elif os.uname()[0] == 'Darwin':
70
+ elif platform.system() == 'Darwin':
70
71
  # Simple on OS X, since there is an open command that opens
71
72
  # anything, using the user's preferences.
72
73
  BROWSER = 'open -W'
sage/version.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # sage_setup: distribution = sagemath-environment
2
2
  # Sage version information for Python scripts
3
3
  # This file is auto-generated by the sage-update-version script, do not edit!
4
- version = '10.4.61'
5
- date = '2024-11-15'
6
- banner = 'passagemath version 10.4.61, Release Date: 2024-11-15'
4
+ version = '10.4.63'
5
+ date = '2024-11-18'
6
+ banner = 'passagemath version 10.4.63, Release Date: 2024-11-18'