Skip to content

Commit 729f337

Browse files
author
Release Manager
committed
gh-37648: `sage.doctest`: Remove most uses of SAGE_SRC in doctests <!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes #12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes #12345". --> Using `sage.doctest.forker.__file__` whenever Python files are used as inputs for the doctester, instead of going through `SAGE_SRC`. This makes more of the doctests testable in installations where no source tree is available. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - #12345: short description why this is a dependency --> <!-- - #34567: ... --> URL: #37648 Reported by: Matthias Köppe Reviewer(s): Antonio Rojas
2 parents adb7605 + 0072e85 commit 729f337

File tree

5 files changed

+138
-199
lines changed

5 files changed

+138
-199
lines changed

src/sage/doctest/control.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,9 +1103,7 @@ def source_baseline(self, source):
11031103
EXAMPLES::
11041104
11051105
sage: from sage.doctest.control import DocTestDefaults, DocTestController
1106-
sage: from sage.env import SAGE_SRC
1107-
sage: import os
1108-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
1106+
sage: filename = sage.doctest.util.__file__
11091107
sage: DD = DocTestDefaults()
11101108
sage: DC = DocTestController(DD, [filename])
11111109
sage: DC.expand_files_into_sources()

src/sage/doctest/forker.py

Lines changed: 34 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -576,11 +576,10 @@ def _run(self, test, compileflags, out):
576576
sage: from sage.doctest.forker import SageDocTestRunner
577577
sage: from sage.doctest.sources import FileDocTestSource
578578
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
579-
sage: from sage.env import SAGE_SRC
580579
sage: import doctest, sys, os
581580
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
582-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
583-
sage: FDS = FileDocTestSource(filename,DD)
581+
sage: filename = sage.doctest.forker.__file__
582+
sage: FDS = FileDocTestSource(filename, DD)
584583
sage: doctests, extras = FDS.create_doctests(globals())
585584
sage: DTR.run(doctests[0], clear_globs=False) # indirect doctest
586585
TestResults(failed=0, attempted=4)
@@ -877,12 +876,11 @@ def run(self, test, compileflags=0, out=None, clear_globs=True):
877876
sage: from sage.doctest.forker import SageDocTestRunner
878877
sage: from sage.doctest.sources import FileDocTestSource
879878
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
880-
sage: from sage.env import SAGE_SRC
881879
sage: import doctest, sys, os
882880
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,
883881
....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
884-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
885-
sage: FDS = FileDocTestSource(filename,DD)
882+
sage: filename = sage.doctest.forker.__file__
883+
sage: FDS = FileDocTestSource(filename, DD)
886884
sage: doctests, extras = FDS.create_doctests(globals())
887885
sage: DTR.run(doctests[0], clear_globs=False)
888886
TestResults(failed=0, attempted=4)
@@ -1022,11 +1020,10 @@ def update_digests(self, example):
10221020
sage: from sage.doctest.forker import SageDocTestRunner
10231021
sage: from sage.doctest.sources import FileDocTestSource
10241022
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1025-
sage: from sage.env import SAGE_SRC
10261023
sage: import doctest, sys, os, hashlib
10271024
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1028-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1029-
sage: FDS = FileDocTestSource(filename,DD)
1025+
sage: filename = sage.doctest.forker.__file__
1026+
sage: FDS = FileDocTestSource(filename, DD)
10301027
sage: doctests, extras = FDS.create_doctests(globals())
10311028
sage: DTR.running_global_digest.hexdigest()
10321029
'd41d8cd98f00b204e9800998ecf8427e'
@@ -1084,12 +1081,11 @@ def compile_and_execute(self, example, compiler, globs):
10841081
sage: from sage.doctest.sources import FileDocTestSource
10851082
sage: from sage.doctest.util import RecordingDict
10861083
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1087-
sage: from sage.env import SAGE_SRC
10881084
sage: import doctest, sys, os, hashlib
10891085
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD,
10901086
....: optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
10911087
sage: DTR.running_doctest_digest = hashlib.md5()
1092-
sage: filename = os.path.join(SAGE_SRC, 'sage', 'doctest', 'forker.py')
1088+
sage: filename = sage.doctest.forker.__file__
10931089
sage: FDS = FileDocTestSource(filename, DD)
10941090
sage: globs = RecordingDict(globals())
10951091
sage: 'doctest_var' in globs
@@ -1204,11 +1200,10 @@ def _failure_header(self, test, example, message='Failed example:'):
12041200
sage: from sage.doctest.forker import SageDocTestRunner
12051201
sage: from sage.doctest.sources import FileDocTestSource
12061202
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1207-
sage: from sage.env import SAGE_SRC
12081203
sage: import doctest, sys, os
12091204
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1210-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1211-
sage: FDS = FileDocTestSource(filename,DD)
1205+
sage: filename = sage.doctest.forker.__file__
1206+
sage: FDS = FileDocTestSource(filename, DD)
12121207
sage: doctests, extras = FDS.create_doctests(globals())
12131208
sage: ex = doctests[0].examples[0]
12141209
sage: print(DTR._failure_header(doctests[0], ex))
@@ -1316,11 +1311,10 @@ def report_start(self, out, test, example):
13161311
sage: from sage.doctest.forker import SageDocTestRunner
13171312
sage: from sage.doctest.sources import FileDocTestSource
13181313
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1319-
sage: from sage.env import SAGE_SRC
13201314
sage: import doctest, sys, os
13211315
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1322-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1323-
sage: FDS = FileDocTestSource(filename,DD)
1316+
sage: filename = sage.doctest.forker.__file__
1317+
sage: FDS = FileDocTestSource(filename, DD)
13241318
sage: doctests, extras = FDS.create_doctests(globals())
13251319
sage: ex = doctests[0].examples[0]
13261320
sage: DTR.report_start(sys.stdout.write, doctests[0], ex)
@@ -1370,11 +1364,10 @@ def report_success(self, out, test, example, got, *, check_duration=0):
13701364
sage: from sage.doctest.sources import FileDocTestSource
13711365
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
13721366
sage: from sage.misc.timing import walltime
1373-
sage: from sage.env import SAGE_SRC
13741367
sage: import doctest, sys, os
13751368
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1376-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1377-
sage: FDS = FileDocTestSource(filename,DD)
1369+
sage: filename = sage.doctest.forker.__file__
1370+
sage: FDS = FileDocTestSource(filename, DD)
13781371
sage: doctests, extras = FDS.create_doctests(globals())
13791372
sage: ex = doctests[0].examples[0]
13801373
sage: ex.walltime = 0.0
@@ -1411,11 +1404,10 @@ def report_failure(self, out, test, example, got, globs):
14111404
sage: from sage.doctest.forker import SageDocTestRunner
14121405
sage: from sage.doctest.sources import FileDocTestSource
14131406
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1414-
sage: from sage.env import SAGE_SRC
14151407
sage: import doctest, sys, os
14161408
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1417-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1418-
sage: FDS = FileDocTestSource(filename,DD)
1409+
sage: filename = sage.doctest.forker.__file__
1410+
sage: FDS = FileDocTestSource(filename, DD)
14191411
sage: doctests, extras = FDS.create_doctests(globals())
14201412
sage: ex = doctests[0].examples[0]
14211413
sage: DTR.no_failure_yet = True
@@ -1545,11 +1537,10 @@ def report_overtime(self, out, test, example, got, *, check_duration=0):
15451537
sage: from sage.doctest.sources import FileDocTestSource
15461538
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
15471539
sage: from sage.misc.timing import walltime
1548-
sage: from sage.env import SAGE_SRC
15491540
sage: import doctest, sys, os
15501541
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1551-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1552-
sage: FDS = FileDocTestSource(filename,DD)
1542+
sage: filename = sage.doctest.forker.__file__
1543+
sage: FDS = FileDocTestSource(filename, DD)
15531544
sage: doctests, extras = FDS.create_doctests(globals())
15541545
sage: ex = doctests[0].examples[0]
15551546
sage: ex.walltime = 1.23
@@ -1673,11 +1664,10 @@ def update_results(self, D):
16731664
sage: from sage.doctest.forker import SageDocTestRunner
16741665
sage: from sage.doctest.sources import FileDocTestSource, DictAsObject
16751666
sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1676-
sage: from sage.env import SAGE_SRC
16771667
sage: import doctest, sys, os
16781668
sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1679-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','forker.py')
1680-
sage: FDS = FileDocTestSource(filename,DD)
1669+
sage: filename = sage.doctest.forker.__file__
1670+
sage: FDS = FileDocTestSource(filename, DD)
16811671
sage: doctests, extras = FDS.create_doctests(globals())
16821672
sage: from sage.doctest.util import Timer
16831673
sage: T = Timer().start()
@@ -1755,7 +1745,6 @@ def serial_dispatch(self):
17551745
sage: from sage.doctest.forker import DocTestDispatcher
17561746
sage: from sage.doctest.reporting import DocTestReporter
17571747
sage: from sage.doctest.util import Timer
1758-
sage: from sage.env import SAGE_SRC
17591748
sage: import os
17601749
sage: homset = os.path.join(SAGE_SRC, 'sage', 'rings', 'homset.py')
17611750
sage: ideal = os.path.join(SAGE_SRC, 'sage', 'rings', 'ideal.py')
@@ -1802,7 +1791,6 @@ def parallel_dispatch(self):
18021791
sage: from sage.doctest.forker import DocTestDispatcher
18031792
sage: from sage.doctest.reporting import DocTestReporter
18041793
sage: from sage.doctest.util import Timer
1805-
sage: from sage.env import SAGE_SRC
18061794
sage: import os
18071795
sage: crem = os.path.join(SAGE_SRC, 'sage', 'databases', 'cremona.py')
18081796
sage: bigo = os.path.join(SAGE_SRC, 'sage', 'rings', 'big_oh.py')
@@ -2137,7 +2125,6 @@ def dispatch(self):
21372125
sage: from sage.doctest.forker import DocTestDispatcher
21382126
sage: from sage.doctest.reporting import DocTestReporter
21392127
sage: from sage.doctest.util import Timer
2140-
sage: from sage.env import SAGE_SRC
21412128
sage: import os
21422129
sage: freehom = os.path.join(SAGE_SRC, 'sage', 'modules', 'free_module_homspace.py')
21432130
sage: bigo = os.path.join(SAGE_SRC, 'sage', 'rings', 'big_oh.py')
@@ -2192,10 +2179,9 @@ class should be accessed by the child process.
21922179
sage: from sage.doctest.sources import FileDocTestSource
21932180
sage: from sage.doctest.reporting import DocTestReporter
21942181
sage: from sage.doctest.control import DocTestController, DocTestDefaults
2195-
sage: from sage.env import SAGE_SRC
2196-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
2182+
sage: filename = sage.doctest.util.__file__
21972183
sage: DD = DocTestDefaults()
2198-
sage: FDS = FileDocTestSource(filename,DD)
2184+
sage: FDS = FileDocTestSource(filename, DD)
21992185
sage: W = DocTestWorker(FDS, DD)
22002186
sage: W.start()
22012187
sage: DC = DocTestController(DD, filename)
@@ -2317,10 +2303,9 @@ def start(self):
23172303
sage: from sage.doctest.sources import FileDocTestSource
23182304
sage: from sage.doctest.reporting import DocTestReporter
23192305
sage: from sage.doctest.control import DocTestController, DocTestDefaults
2320-
sage: from sage.env import SAGE_SRC
2321-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
2306+
sage: filename = sage.doctest.util.__file__
23222307
sage: DD = DocTestDefaults()
2323-
sage: FDS = FileDocTestSource(filename,DD)
2308+
sage: FDS = FileDocTestSource(filename, DD)
23242309
sage: W = DocTestWorker(FDS, DD)
23252310
sage: W.start()
23262311
sage: try:
@@ -2357,10 +2342,9 @@ def read_messages(self):
23572342
sage: from sage.doctest.sources import FileDocTestSource
23582343
sage: from sage.doctest.reporting import DocTestReporter
23592344
sage: from sage.doctest.control import DocTestController, DocTestDefaults
2360-
sage: from sage.env import SAGE_SRC
2361-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
2345+
sage: filename = sage.doctest.util.__file__
23622346
sage: DD = DocTestDefaults(verbose=True,nthreads=2)
2363-
sage: FDS = FileDocTestSource(filename,DD)
2347+
sage: FDS = FileDocTestSource(filename, DD)
23642348
sage: W = DocTestWorker(FDS, DD)
23652349
sage: W.start()
23662350
sage: while W.rmessages is not None:
@@ -2392,10 +2376,9 @@ def save_result_output(self):
23922376
sage: from sage.doctest.sources import FileDocTestSource
23932377
sage: from sage.doctest.reporting import DocTestReporter
23942378
sage: from sage.doctest.control import DocTestController, DocTestDefaults
2395-
sage: from sage.env import SAGE_SRC
2396-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','util.py')
2379+
sage: filename = sage.doctest.util.__file__
23972380
sage: DD = DocTestDefaults()
2398-
sage: FDS = FileDocTestSource(filename,DD)
2381+
sage: FDS = FileDocTestSource(filename, DD)
23992382
sage: W = DocTestWorker(FDS, DD)
24002383
sage: W.start()
24012384
sage: W.join()
@@ -2453,10 +2436,9 @@ def kill(self):
24532436
sage: from sage.doctest.sources import FileDocTestSource
24542437
sage: from sage.doctest.reporting import DocTestReporter
24552438
sage: from sage.doctest.control import DocTestController, DocTestDefaults
2456-
sage: from sage.env import SAGE_SRC
24572439
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','tests','99seconds.rst')
24582440
sage: DD = DocTestDefaults()
2459-
sage: FDS = FileDocTestSource(filename,DD)
2441+
sage: FDS = FileDocTestSource(filename, DD)
24602442
24612443
We set up the worker to start by blocking ``SIGQUIT``, such that
24622444
killing will fail initially::
@@ -2523,11 +2505,10 @@ class DocTestTask():
25232505
sage: from sage.doctest.forker import DocTestTask
25242506
sage: from sage.doctest.sources import FileDocTestSource
25252507
sage: from sage.doctest.control import DocTestDefaults, DocTestController
2526-
sage: from sage.env import SAGE_SRC
25272508
sage: import os
2528-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
2509+
sage: filename = sage.doctest.sources.__file__
25292510
sage: DD = DocTestDefaults()
2530-
sage: FDS = FileDocTestSource(filename,DD)
2511+
sage: FDS = FileDocTestSource(filename, DD)
25312512
sage: DTT = DocTestTask(FDS)
25322513
sage: DC = DocTestController(DD,[filename])
25332514
sage: ntests, results = DTT(options=DD)
@@ -2546,10 +2527,9 @@ def __init__(self, source):
25462527
sage: from sage.doctest.forker import DocTestTask
25472528
sage: from sage.doctest.sources import FileDocTestSource
25482529
sage: from sage.doctest.control import DocTestDefaults
2549-
sage: from sage.env import SAGE_SRC
25502530
sage: import os
2551-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','sources.py')
2552-
sage: FDS = FileDocTestSource(filename,DocTestDefaults())
2531+
sage: filename = sage.doctest.sources.__file__
2532+
sage: FDS = FileDocTestSource(filename, DocTestDefaults())
25532533
sage: DocTestTask(FDS)
25542534
<sage.doctest.forker.DocTestTask object at ...>
25552535
"""
@@ -2589,11 +2569,10 @@ def __call__(self, options, outtmpfile=None, msgfile=None, result_queue=None, *,
25892569
sage: from sage.doctest.forker import DocTestTask
25902570
sage: from sage.doctest.sources import FileDocTestSource
25912571
sage: from sage.doctest.control import DocTestDefaults, DocTestController
2592-
sage: from sage.env import SAGE_SRC
25932572
sage: import os
2594-
sage: filename = os.path.join(SAGE_SRC,'sage','doctest','parsing.py')
2573+
sage: filename = sage.doctest.parsing.__file__
25952574
sage: DD = DocTestDefaults()
2596-
sage: FDS = FileDocTestSource(filename,DD)
2575+
sage: FDS = FileDocTestSource(filename, DD)
25972576
sage: DTT = DocTestTask(FDS)
25982577
sage: DC = DocTestController(DD, [filename])
25992578
sage: ntests, runner = DTT(options=DD)

0 commit comments

Comments
 (0)