From 241c55ee1ecd40ac77ff76f642740bc21a740f5c Mon Sep 17 00:00:00 2001 From: Himanshu21035 Date: Sat, 6 Dec 2025 06:32:11 +0530 Subject: [PATCH 1/5] Fix #40355: Document shortest_vector() exactness Add detailed notes on shortest_vector method's algorithms and behavior. Clarify that both 'pari' and 'fplll' algorithms compute exact solutions by default, unlike approximate_closest_vector(). Addresses issue #40355 where the documentation didn't specify whether the method returns exact or approximate solutions. --- src/sage/modules/free_module_integer.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/sage/modules/free_module_integer.py b/src/sage/modules/free_module_integer.py index 1200942e30c..ffa929c4bf4 100644 --- a/src/sage/modules/free_module_integer.py +++ b/src/sage/modules/free_module_integer.py @@ -535,6 +535,25 @@ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, * r""" Return a shortest vector. + .. NOTE:: + + This method attempts to find an **exact** solution to the + Shortest Vector Problem (SVP) for both algorithms. However: + + - The ``'pari'`` algorithm uses PARI's ``qfminim()`` function + which computes exact solutions but may be slow for large + dimensions. + + - The ``'fplll'`` algorithm uses fpylll's SVP solver which by + default uses enumeration to find exact solutions. The behavior + can be modified by passing additional parameters through + ``*args`` and ``**kwds`` (e.g., ``pruning=True`` for + approximate solutions). + + Unlike :meth:`approximate_closest_vector`, this method + prioritizes exactness over speed, which may result in long + computation times for high-dimensional lattices. + INPUT: - ``update_reduced_basis`` -- boolean (default: ``True``); set this @@ -547,7 +566,9 @@ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, * - ``**kwds`` -- passed through to underlying implementation - OUTPUT: a shortest nonzero vector for this lattice + OUTPUT: + A shortest nonzero vector for this lattice (exact solution to + SVP with default parameters). EXAMPLES:: From dc96c7866a402eb679b977395005e3e29d81f6f9 Mon Sep 17 00:00:00 2001 From: Himanshu21035 Date: Tue, 16 Dec 2025 10:21:09 +0530 Subject: [PATCH 2/5] Update src/sage/modules/free_module_integer.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/sage/modules/free_module_integer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sage/modules/free_module_integer.py b/src/sage/modules/free_module_integer.py index ffa929c4bf4..5c7db535943 100644 --- a/src/sage/modules/free_module_integer.py +++ b/src/sage/modules/free_module_integer.py @@ -553,7 +553,6 @@ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, * Unlike :meth:`approximate_closest_vector`, this method prioritizes exactness over speed, which may result in long computation times for high-dimensional lattices. - INPUT: - ``update_reduced_basis`` -- boolean (default: ``True``); set this From 52d0b5914d7b25147db3e8b6e826e29c49f402de Mon Sep 17 00:00:00 2001 From: Himanshu21035 Date: Tue, 16 Dec 2025 10:21:44 +0530 Subject: [PATCH 3/5] Update src/sage/modules/free_module_integer.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/sage/modules/free_module_integer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/modules/free_module_integer.py b/src/sage/modules/free_module_integer.py index 5c7db535943..21e2562349d 100644 --- a/src/sage/modules/free_module_integer.py +++ b/src/sage/modules/free_module_integer.py @@ -537,7 +537,7 @@ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, * .. NOTE:: - This method attempts to find an **exact** solution to the + This method attempts to find an **exact** solution to the Shortest Vector Problem (SVP) for both algorithms. However: - The ``'pari'`` algorithm uses PARI's ``qfminim()`` function From 6afaf0056e5d135ea139795782796787466ec90f Mon Sep 17 00:00:00 2001 From: Himanshu21035 Date: Tue, 16 Dec 2025 10:21:56 +0530 Subject: [PATCH 4/5] Update src/sage/modules/free_module_integer.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/sage/modules/free_module_integer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sage/modules/free_module_integer.py b/src/sage/modules/free_module_integer.py index 21e2562349d..1989cf41545 100644 --- a/src/sage/modules/free_module_integer.py +++ b/src/sage/modules/free_module_integer.py @@ -539,7 +539,6 @@ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, * This method attempts to find an **exact** solution to the Shortest Vector Problem (SVP) for both algorithms. However: - - The ``'pari'`` algorithm uses PARI's ``qfminim()`` function which computes exact solutions but may be slow for large dimensions. From 4010ac2da811a37612fa7c548a7356fdc7c7b908 Mon Sep 17 00:00:00 2001 From: Himanshu21035 Date: Tue, 16 Dec 2025 10:22:05 +0530 Subject: [PATCH 5/5] Update src/sage/modules/free_module_integer.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/sage/modules/free_module_integer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sage/modules/free_module_integer.py b/src/sage/modules/free_module_integer.py index 1989cf41545..ce818c3f5c5 100644 --- a/src/sage/modules/free_module_integer.py +++ b/src/sage/modules/free_module_integer.py @@ -542,7 +542,6 @@ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, * - The ``'pari'`` algorithm uses PARI's ``qfminim()`` function which computes exact solutions but may be slow for large dimensions. - - The ``'fplll'`` algorithm uses fpylll's SVP solver which by default uses enumeration to find exact solutions. The behavior can be modified by passing additional parameters through