passagemath-environment 10.4.60__py3-none-any.whl → 10.4.62__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.
@@ -173,7 +173,7 @@ if [ -x "${SELF}-venv-config" ]; then
173
173
  if [ -z "$SAGE_VENV" ]; then
174
174
  export SAGE_VENV=$("${SELF}-venv-config" SAGE_VENV)
175
175
  fi
176
- SAGE_WHEELS_PATH=$("${SELF}-venv-config" SAGE_WHEELS_PATH)
176
+ SAGE_WHEELS_PATH=$("${SELF}-venv-config" SAGE_WHEELS_PATH 2>/dev/null)
177
177
  fi
178
178
  if [ -f "${SELF}-env-config" ]; then
179
179
  # As of Issue #22731, sage-env-config is optional.
@@ -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.60'
8
- SAGE_RELEASE_DATE='2024-11-12'
9
- SAGE_VERSION_BANNER='passagemath version 10.4.60, Release Date: 2024-11-12'
7
+ SAGE_VERSION='10.4.62'
8
+ SAGE_RELEASE_DATE='2024-11-17'
9
+ SAGE_VERSION_BANNER='passagemath version 10.4.62, Release Date: 2024-11-17'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: passagemath-environment
3
- Version: 10.4.60
3
+ Version: 10.4.62
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.60.0; extra == "conf"
32
+ Requires-Dist: passagemath-conf~=10.4.62.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.60.0; extra == "docbuild"
37
+ Requires-Dist: passagemath-docbuild~=10.4.62.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.60.0; extra == "sage"
43
+ Requires-Dist: passagemath-standard~=10.4.62.0; extra == "sage"
44
44
  Provides-Extra: sws2rst
45
- Requires-Dist: passagemath-sws2rst~=10.4.60.0; extra == "sws2rst"
45
+ Requires-Dist: passagemath-sws2rst~=10.4.62.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.60.data/scripts/sage,sha256=1wBJj1KSiLkBtjqU2Uh6yNRLKPThtk9dGe6uLaB_Xog,43355
2
- passagemath_environment-10.4.60.data/scripts/sage-env,sha256=jW_ZPd3IL6fLTXVT08ZCMvP0PLseo1QM-bb5gV5fPhc,23302
3
- passagemath_environment-10.4.60.data/scripts/sage-num-threads.py,sha256=U09CpRe4aXkHNWHoZSYoQwYRASrvoT-l-zslRiGVbWc,3128
4
- passagemath_environment-10.4.60.data/scripts/sage-python,sha256=gXVskicH9NJtE5apMm1U-ZWDzWiz3Rm6dFBND2y60gI,28
5
- passagemath_environment-10.4.60.data/scripts/sage-venv-config,sha256=XeQOA2wIaIfUaEf9aPFUMQvr2s-aKKSLaBZORoSpP3Y,1371
6
- passagemath_environment-10.4.60.data/scripts/sage-version.sh,sha256=bCXQFA0PenQyfex6rJsts9ujZI254UiUifOnuB2J7u8,403
1
+ passagemath_environment-10.4.62.data/scripts/sage,sha256=IjVLatRQBOGrVkqum1vDra9CZ0N7fkT0qfZNqJQRews,43367
2
+ passagemath_environment-10.4.62.data/scripts/sage-env,sha256=bJMK-CihfTEImHt86_rR8vAlhTHpuzCNKvdv9MsDM6A,23497
3
+ passagemath_environment-10.4.62.data/scripts/sage-num-threads.py,sha256=U09CpRe4aXkHNWHoZSYoQwYRASrvoT-l-zslRiGVbWc,3128
4
+ passagemath_environment-10.4.62.data/scripts/sage-python,sha256=gXVskicH9NJtE5apMm1U-ZWDzWiz3Rm6dFBND2y60gI,28
5
+ passagemath_environment-10.4.62.data/scripts/sage-venv-config,sha256=XeQOA2wIaIfUaEf9aPFUMQvr2s-aKKSLaBZORoSpP3Y,1371
6
+ passagemath_environment-10.4.62.data/scripts/sage-version.sh,sha256=hF-Y53LB-FjMFaaAzo4BN2OwtbqqcX9TXMl15a7KJAY,403
7
7
  sage/all__sagemath_environment.py,sha256=d44XIAz0tXfPdQxa3dGJvF2WEf6stMQxLUFL0GC1Sv4,188
8
- sage/env.py,sha256=WEhgwRRT24fb4mb8GBhOzNLEYQ1-jba260Khu-WGJx8,19063
9
- sage/version.py,sha256=3DZCoTT4jarTiLfS_XKuArgF65awqbzxRS1NeVWqK7w,279
8
+ sage/env.py,sha256=QkNRMUzt5UqKIHmZrNSe4F9tzKUIzrKse77GwXUPlWU,19317
9
+ sage/version.py,sha256=hJY5wyH6gDnrKhqIr-ohps0vdYSj6bECeV3N3DFHwWQ,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
@@ -14,7 +14,7 @@ sage/features/cddlib.py,sha256=FWpGnOTB6W0tFbd62olqpbG4IzImhuxOWB7rkGgjwIw,1381
14
14
  sage/features/coxeter3.py,sha256=FwmbW2JsER7j8KGonUEDe0Mfn-5QndDY2gGLcS84gso,1475
15
15
  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
- sage/features/databases.py,sha256=WxthCcHovRjauGnvDuylbOqZytGJ9SZ_Dek65CBdBlw,10683
17
+ sage/features/databases.py,sha256=oiQN0Bo2QwfOTibcsF8vXRZXmAlE6Lh5IihT0KUrTK4,10992
18
18
  sage/features/dvipng.py,sha256=SJCwJNUamQuPL2-bOzT3JrA8QMdJ0t20EB9n5ogXnHE,1330
19
19
  sage/features/ecm.py,sha256=qMnrunufXVKz104N-eY_3fy4Sgdzd0ohs1kXOeHvXFI,1313
20
20
  sage/features/ffmpeg.py,sha256=wtJL6t56Oe1D4k1ChZjZ6LP_kx3pGPOFkYCjvr28JPM,4762
@@ -28,6 +28,7 @@ sage/features/graph_generators.py,sha256=LSoVbz7yMZDur68qz-s-YVz3xT72rhePpg8s9GJ
28
28
  sage/features/graphviz.py,sha256=BY9LU2-p9a3uvw8L07CVDDMiznyzJajFi1W7fb0T2pQ,3516
29
29
  sage/features/igraph.py,sha256=1Vf1Fo_e4iFoihBYqKxNQL70Mhokir9xX6ADd3XGudU,1492
30
30
  sage/features/imagemagick.py,sha256=GMTEXzGKkfIzVVwuX6JH-EREvHy_Z-XowN5SWd8pjgU,5236
31
+ sage/features/info.py,sha256=bTnbU8R626KyK6QNO5kt2_Gah-w2QFZ2HrNGHd9KbA8,729
31
32
  sage/features/interfaces.py,sha256=5XPbHGOtH3khvXe2zl7kjR67YPq1Bhf7a6fv1d9s1z4,8295
32
33
  sage/features/internet.py,sha256=he6OLOrLihRrkWCCKVwyBGZyXmU7XRP-ZWfUPR_A1C4,2074
33
34
  sage/features/jmol.py,sha256=Gg7vTzNRJoPIQSbF25gifJvqHJDn0dm5HZTEA4TMdNA,1135
@@ -36,7 +37,7 @@ sage/features/kenzo.py,sha256=sHqSeagK7_p0RmSjQ8q-1kxIRxRsNa7jFSexAsr80Ks,2672
36
37
  sage/features/latex.py,sha256=pyj57wpTfdTXFFsbIxr6OuOl0j5Sg1CrU_ZhxLIeLsI,9616
37
38
  sage/features/latte.py,sha256=lmVKos8_f9UJjU1nSVuAWURM80fsYIv1n1do-5pCbd4,2787
38
39
  sage/features/lrs.py,sha256=ru_VDo0Y6am54FQd9zqanhqoXnZXP2hudnkjD9GNNlI,5963
39
- sage/features/macaulay2.py,sha256=gVj4F0oPKIcl7oOWTvwh2yVIvtS5adn9x9jKCDdP0C4,1320
40
+ sage/features/macaulay2.py,sha256=cv3imBr1VSwglrlrbYzIOymAcXF7p5FOhBxrm5sjDSo,1565
40
41
  sage/features/mcqd.py,sha256=GfllBC9A170B0z64bE3AZ9yLfUF8aTdQDgGhRwCnYGc,1397
41
42
  sage/features/meataxe.py,sha256=9uYHmPzED2RGmK5ge56zJlnHDhKVQidPEbxLThSdiaw,1458
42
43
  sage/features/mip_backends.py,sha256=vnTIYLCUy0XoM93OepBDl3cejJsMooLwRszO-3xAswg,3952
@@ -52,13 +53,14 @@ sage/features/polymake.py,sha256=Ix2qM0izHhBFa-IGTWjcbW9ofutbRP6FTL5p4buSgPU,142
52
53
  sage/features/poppler.py,sha256=hNdYa03BxYYiFTk70RAzJtCYxp0VEjGqrWMDpDosp5w,2231
53
54
  sage/features/qepcad.py,sha256=uCNCtBrBA3M6mTl8jQtE8yNfNombzq6FUDNCQAs3-OA,1276
54
55
  sage/features/rubiks.py,sha256=8N54u2kShVqke1eRjLHBwqkENgc3vvfspI3h5gkPNKw,5261
55
- sage/features/sagemath.py,sha256=9t6cnbB0A3y-rwkoVEHXbLIQ8-HaM1fpKt2ES0WcqJ8,55171
56
+ sage/features/sagemath.py,sha256=B57gyY4xzaHcJmqX49M86B4SUGdcvYjmrQISjFoiXH0,55206
56
57
  sage/features/sat.py,sha256=XJXQPFU9PQRDwXVezC9j3iRJoDQSkWsI2b8F_fNNagk,2951
57
58
  sage/features/singular.py,sha256=jyX5Pl-Zpo-I5kG0aKDFdPawMcM_S_Jv0QN7dsENNRg,1611
58
59
  sage/features/sirocco.py,sha256=wWG1tWXFnUPY5XVL5eQXKSQiX4g-bwsMXekIltbVQFs,1452
59
60
  sage/features/sphinx.py,sha256=52lO3muIkTYhmd_gdVsHEPMQeFWsbTHiky5z2E9mSPM,2299
60
61
  sage/features/standard.py,sha256=Eh95Xj-swHqPvORXCntVmz0U1XxXqv7KpYdrUKJAdac,2036
61
62
  sage/features/symengine_py.py,sha256=acVpHvjDe_Opl8iUAMbGaG13ROIjPEF9Fyn4HSn61Ek,1523
63
+ sage/features/sympow.py,sha256=QWKec1LKAHrFoFZSo3cK3-1PlBWDoVjKTSjosxMmyVk,1290
62
64
  sage/features/tdlib.py,sha256=Lij2GGLbh0ja_fNYAff4ZozVi6lcD_5Dzn005IAgWBg,1260
63
65
  sage/features/threejs.py,sha256=6oanR1omSvCAEDmwh1xiiPjFM648K66_oLQT6nyz_Q0,2368
64
66
  sage/features/topcom.py,sha256=swLvRxLgXZ3zg6-y0Pbh9ci6vGqsVEoTXJXf-UI_8nA,2211
@@ -66,8 +68,8 @@ sage/misc/all__sagemath_environment.py,sha256=LG7rw2H1bgnbQpXTph34n1ULnjE3vu4jVi
66
68
  sage/misc/package.py,sha256=xZF5iijW69X9DblpnLcYXQiRdjE7Uhu1MJ5eeq12T9o,19191
67
69
  sage/misc/package_dir.py,sha256=zzL-ASJSn8oX_gejqMrHrTfesVt31vAp3g-ouZKiOks,26899
68
70
  sage/misc/temporary_file.py,sha256=Z-0blAIrU1MAdpl3z8M_6n7-zj4Ac3NA-ULSIIKmCWU,19138
69
- sage/misc/viewer.py,sha256=T7DRgW07qYcKQPJ0nG-N1KoVRHz3xrL7LxkVAZ7dvOo,11554
70
- passagemath_environment-10.4.60.dist-info/METADATA,sha256=5BJx6GiXm2VJXz5ACnjLNcdP9vXr9j6s8mQ8mOHyUKc,4126
71
- passagemath_environment-10.4.60.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
72
- passagemath_environment-10.4.60.dist-info/top_level.txt,sha256=hibFyzQHiLOMK68qL1OWsNKaXOmSXqZjeLTBem6Yy7I,5
73
- passagemath_environment-10.4.60.dist-info/RECORD,,
71
+ sage/misc/viewer.py,sha256=Jm4pABqyMs1hvggLA0JZAiZ_26uaBtPpaRKQUTddVE4,11574
72
+ passagemath_environment-10.4.62.dist-info/METADATA,sha256=RHSVg2zAUTKeKvNp-FBygUMk6P0oV6peHwUCL266rVg,4126
73
+ passagemath_environment-10.4.62.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
74
+ passagemath_environment-10.4.62.dist-info/top_level.txt,sha256=hibFyzQHiLOMK68qL1OWsNKaXOmSXqZjeLTBem6Yy7I,5
75
+ passagemath_environment-10.4.62.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
 
@@ -207,12 +207,22 @@ SAGE_STARTUP_FILE = var("SAGE_STARTUP_FILE", join(DOT_SAGE, "init.sage"))
207
207
  SAGE_ARCHFLAGS = var("SAGE_ARCHFLAGS", "unset")
208
208
  SAGE_PKG_CONFIG_PATH = var("SAGE_PKG_CONFIG_PATH")
209
209
 
210
+ try:
211
+ import sage_wheels
212
+ except ImportError:
213
+ _sage_wheels_path = []
214
+ else:
215
+ _sage_wheels_path = sage_wheels.__path__
216
+
210
217
  # colon-separated search path for databases.
211
218
  SAGE_DATA_PATH = var("SAGE_DATA_PATH",
212
219
  os.pathsep.join(filter(None, [
213
- join(DOT_SAGE, "db"),
214
- join(SAGE_SHARE, "sagemath"),
215
- SAGE_SHARE,
220
+ join(DOT_SAGE, "db"),
221
+ ] + [
222
+ join(p, "share") for p in _sage_wheels_path
223
+ ] + [
224
+ join(SAGE_SHARE, "sagemath"),
225
+ SAGE_SHARE,
216
226
  ])))
217
227
 
218
228
  # database directories, the default is to search in SAGE_DATA_PATH
@@ -69,7 +69,7 @@ class DatabaseCremona(StaticFile):
69
69
  from sage.env import CREMONA_MINI_DATA_DIR, CREMONA_LARGE_DATA_DIR
70
70
  CREMONA_DATA_DIRS = set([CREMONA_MINI_DATA_DIR, CREMONA_LARGE_DATA_DIR])
71
71
  CREMONA_DATA_DIRS.discard(None)
72
- search_path = CREMONA_DATA_DIRS or sage_data_path("cremona")
72
+ search_path = list(CREMONA_DATA_DIRS) + sage_data_path("cremona")
73
73
 
74
74
  spkg = "database_cremona_ellcurve"
75
75
  spkg_type = "optional"
@@ -106,7 +106,10 @@ class DatabaseEllcurves(StaticFile):
106
106
  True
107
107
  """
108
108
  from sage.env import ELLCURVE_DATA_DIR
109
- search_path = ELLCURVE_DATA_DIR or sage_data_path("ellcurves")
109
+ search_path = []
110
+ if ELLCURVE_DATA_DIR is not None:
111
+ search_path.append(ELLCURVE_DATA_DIR)
112
+ search_path.extend(sage_data_path("ellcurves"))
110
113
 
111
114
  StaticFile.__init__(self, "database_ellcurves",
112
115
  filename='rank0',
@@ -136,7 +139,10 @@ class DatabaseGraphs(StaticFile):
136
139
  True
137
140
  """
138
141
  from sage.env import GRAPHS_DATA_DIR
139
- search_path = GRAPHS_DATA_DIR or sage_data_path("graphs")
142
+ search_path = []
143
+ if GRAPHS_DATA_DIR is not None:
144
+ search_path.append(GRAPHS_DATA_DIR)
145
+ search_path.extend(sage_data_path("graphs"))
140
146
 
141
147
  StaticFile.__init__(self, "database_graphs",
142
148
  filename='graphs.db',
@@ -277,7 +283,10 @@ class DatabaseReflexivePolytopes(StaticFile):
277
283
  'Hodge4d'
278
284
  """
279
285
  from sage.env import POLYTOPE_DATA_DIR
280
- search_path = POLYTOPE_DATA_DIR or sage_data_path("reflexive_polytopes")
286
+ search_path = []
287
+ if POLYTOPE_DATA_DIR is not None:
288
+ search_path.append(POLYTOPE_DATA_DIR)
289
+ search_path.extend(sage_data_path("reflexive_polytopes"))
281
290
 
282
291
  dirname = "Full3d"
283
292
  if name == "polytopes_db_4d":
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/sagemath.py CHANGED
@@ -102,7 +102,7 @@ class sagemath_doc_html(StaticFile):
102
102
  filename='html',
103
103
  search_path=(SAGE_DOC,),
104
104
  spkg='sagemath_doc_html',
105
- type='standard')
105
+ type='optional')
106
106
 
107
107
 
108
108
  class sage__all(PythonModule):
@@ -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
@@ -0,0 +1,44 @@
1
+ # sage_setup: distribution = sagemath-environment
2
+ r"""
3
+ Feature for testing the presence of ``sympow``
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
+
17
+ from . import Executable
18
+
19
+
20
+ class Sympow(Executable):
21
+ r"""
22
+ A :class:`~sage.features.Feature` describing the presence of the ``sympow``
23
+ binary.
24
+
25
+ EXAMPLES::
26
+
27
+ sage: from sage.features.sympow import Sympow
28
+ sage: Sympow().is_present() # needs sympow
29
+ FeatureTestResult('sympow', True)
30
+ """
31
+ def __init__(self):
32
+ r"""
33
+ TESTS::
34
+
35
+ sage: from sage.features.sympow import Sympow
36
+ sage: isinstance(Sympow(), Sympow)
37
+ True
38
+ """
39
+ Executable.__init__(self, "sympow", executable='sympow',
40
+ spkg='sympow', type='standard')
41
+
42
+
43
+ def all_features():
44
+ return [Sympow()]
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.60'
5
- date = '2024-11-12'
6
- banner = 'passagemath version 10.4.60, Release Date: 2024-11-12'
4
+ version = '10.4.62'
5
+ date = '2024-11-17'
6
+ banner = 'passagemath version 10.4.62, Release Date: 2024-11-17'