From 4b2452404c3259367679129ed70730a3cfd40c1c Mon Sep 17 00:00:00 2001 From: user202729 <25191436+user202729@users.noreply.github.com> Date: Wed, 12 Feb 2025 09:42:39 +0700 Subject: [PATCH] Apply sort and filter of walk_packages consistently --- src/sage/misc/package_dir.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/sage/misc/package_dir.py b/src/sage/misc/package_dir.py index 6b6ca12803f..d84b896f6e5 100644 --- a/src/sage/misc/package_dir.py +++ b/src/sage/misc/package_dir.py @@ -370,9 +370,9 @@ def iter_modules(path=None, prefix=''): yielded[name] = 1 yield ModuleInfo(i, name, ispkg) - def iter_importer_modules(importer, prefix=''): + def _iter_importer_modules_helper(importer, prefix=''): r""" - Yield :class:`ModuleInfo` for all modules of ``importer``. + Helper function for :func:`iter_importer_modules`. """ from importlib.machinery import FileFinder @@ -391,11 +391,6 @@ def iter_importer_modules(importer, prefix=''): for fn in filenames: modname = inspect.getmodulename(fn) - if modname and (modname in ['__init__', 'all'] - or modname.startswith('all__') - or modname in yielded): - continue - path = os.path.join(importer.path, fn) ispkg = False @@ -414,6 +409,18 @@ def iter_importer_modules(importer, prefix=''): else: yield from importer.iter_modules(prefix) + def iter_importer_modules(importer, prefix=''): + r""" + Yield :class:`ModuleInfo` for all modules of ``importer``. + """ + for name, ispkg in sorted(list(_iter_importer_modules_helper(importer, prefix))): + # we sort again for consistency of output ordering if importer is not + # a FileFinder (needed in doctest of :func:`sage.misc.dev_tools/load_submodules`) + modname = name.rsplit('.', 1)[-1] + if modname in ['__init__', 'all'] or modname.startswith('all__'): + continue + yield name, ispkg + def seen(p, m={}): if p in m: return True