From 0835297dabe53d7a955b037f33600c40782b2769 Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 17:50:05 +0800 Subject: [PATCH 1/8] Fix FriCAS doctest pickling failures Replace problematic doctest 'fricas == loads(dumps(fricas))' with 'isinstance(loads(dumps(a)), FriCAS)' where a is a fresh FriCAS instance. The original test was failing because the global 'fricas' object contains module-level lazy imports that cannot be pickled. Using a fresh instance and checking type instead of equality avoids the LazyImport pickling issue while still validating serialization round-trip functionality. Fixes doctest failures in sage.interfaces.fricas.FriCAS.__init__ and sage.interfaces.fricas.FriCAS._quit_string methods. --- src/sage/interfaces/fricas.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 47cd5570355..21236f80db6 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -288,8 +288,9 @@ def __init__(self, name='fricas', command=None, Create an instance of the FriCAS interpreter. TESTS:: - - sage: fricas == loads(dumps(fricas)) + + sage: a = FriCAS() + sage: isinstance(loads(dumps(a)), FriCAS) True Check that :issue:`25174` is fixed:: @@ -389,10 +390,11 @@ def _quit_string(self): sage: a.is_running() False - TESTS: - - Ensure that a new process is started after ``quit()``:: - + TESTS:: + sage: from sage.interfaces.fricas import FriCAS + sage: a = FriCAS() + sage: isinstance(loads(dumps(a)), FriCAS) + True sage: p = fricas.pid() sage: fricas.quit() sage: fricas.pid() == p From 4ef41f0f1d161538f4fbe692c3c5215f52faa663 Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 17:58:22 +0800 Subject: [PATCH 2/8] Ensure a new process is started before `quit()` in FriCAS interface tests --- src/sage/interfaces/fricas.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 21236f80db6..7023cfafaed 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -390,8 +390,10 @@ def _quit_string(self): sage: a.is_running() False - TESTS:: - sage: from sage.interfaces.fricas import FriCAS + Ensure that a new process is started after ``quit()``:: + + TEST:: + sage: a = FriCAS() sage: isinstance(loads(dumps(a)), FriCAS) True From b12af57cf61564e419ad5d55ab9329a9d142db96 Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 18:00:55 +0800 Subject: [PATCH 3/8] Ensure a new process is started BEFORE `quit()` in FriCAS interface tests --- src/sage/interfaces/fricas.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 7023cfafaed..38f655fe9b1 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -390,10 +390,10 @@ def _quit_string(self): sage: a.is_running() False + TEST:: + Ensure that a new process is started after ``quit()``:: - TEST:: - sage: a = FriCAS() sage: isinstance(loads(dumps(a)), FriCAS) True From 16b6d19b4a77f05667eb221f3c560191a98857d9 Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 18:01:47 +0800 Subject: [PATCH 4/8] fix a typo --- src/sage/interfaces/fricas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 38f655fe9b1..1e13e3f8104 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -390,7 +390,7 @@ def _quit_string(self): sage: a.is_running() False - TEST:: + TESTS:: Ensure that a new process is started after ``quit()``:: From b8f6597a11f40023b2ee8b1281365ebbaa41b49c Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 18:09:35 +0800 Subject: [PATCH 5/8] Fix W293: Remove whitespace from blank line Fix ruff linting error W293 by removing trailing whitespace from blank line in doctest. --- src/sage/interfaces/fricas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 1e13e3f8104..8efde2b856d 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -288,7 +288,7 @@ def __init__(self, name='fricas', command=None, Create an instance of the FriCAS interpreter. TESTS:: - + sage: a = FriCAS() sage: isinstance(loads(dumps(a)), FriCAS) True From 5e7702b093550702bfc9d9ce7e8f590f773714b6 Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 18:13:33 +0800 Subject: [PATCH 6/8] Fix RST218: Fix docstring literal block formatting Remove malformed literal block structure in TESTS section that was causing RST218 error. Properly format the doctest examples. --- src/sage/interfaces/fricas.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 8efde2b856d..ad4ccd48d76 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -391,9 +391,7 @@ def _quit_string(self): False TESTS:: - - Ensure that a new process is started after ``quit()``:: - + sage: from sage.interfaces.fricas import FriCAS sage: a = FriCAS() sage: isinstance(loads(dumps(a)), FriCAS) True From 43c7cf61f8fb9672e29607893aaa6e9340ceecc1 Mon Sep 17 00:00:00 2001 From: cxzhong Date: Mon, 11 Aug 2025 18:17:58 +0800 Subject: [PATCH 7/8] Fix RST218 linting error in FriCAS interface Remove TESTS:: header that was causing RST218 literal block formatting error while preserving the meaningful doctest that verifies new process starts after quit(). This addresses linting compliance while maintaining documentation quality. --- src/sage/interfaces/fricas.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index ad4ccd48d76..061c9a9afce 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -390,11 +390,8 @@ def _quit_string(self): sage: a.is_running() False - TESTS:: - sage: from sage.interfaces.fricas import FriCAS - sage: a = FriCAS() - sage: isinstance(loads(dumps(a)), FriCAS) - True + Ensure that a new process is started after ``quit()``:: + sage: p = fricas.pid() sage: fricas.quit() sage: fricas.pid() == p From b38bf8d4c17d9d71a7c1bc14f5c4ca358135ae5f Mon Sep 17 00:00:00 2001 From: Chenxin Zhong Date: Mon, 11 Aug 2025 21:27:18 +0800 Subject: [PATCH 8/8] Add TESTS: --- src/sage/interfaces/fricas.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py index 061c9a9afce..0e7c039ec6d 100644 --- a/src/sage/interfaces/fricas.py +++ b/src/sage/interfaces/fricas.py @@ -390,6 +390,8 @@ def _quit_string(self): sage: a.is_running() False + TESTS: + Ensure that a new process is started after ``quit()``:: sage: p = fricas.pid()