Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

BUG: test_lazy_load raises RecursionError with Python 3.13.0a5 #26093

Copy link
Copy link
Closed
@befeleme

Description

@befeleme
Issue body actions

Describe the issue:

I try to build numpy 1.26.4 in Fedora Linux with Python 3.13.0a5 containing the fix for @LIBPYTHON@ usage (python/cpython#116746). test_lazy_load unexpectedly raises Recursion Error.

Reproduce the code example:

none

Error message:

________________________________ test_lazy_load ________________________________

    @pytest.mark.filterwarnings("ignore:The NumPy module was reloaded")
    def test_lazy_load():
        # gh-22045. lazyload doesn't import submodule names into the namespace
        # muck with sys.modules to test the importing system
        old_numpy = sys.modules.pop("numpy")
    
        numpy_modules = {}
        for mod_name, mod in list(sys.modules.items()):
            if mod_name[:6] == "numpy.":
                numpy_modules[mod_name] = mod
                sys.modules.pop(mod_name)
    
        try:
            # create lazy load of numpy as np
            spec = find_spec("numpy")
            module = module_from_spec(spec)
            sys.modules["numpy"] = module
            loader = LazyLoader(spec.loader)
            loader.exec_module(module)
            np = module
    
            # test a subpackage import
>           from numpy.lib import recfunctions

loader     = <importlib.util.LazyLoader object at 0x7f07a3f64c80>
mod        = <module 'pydoc' from '/usr/lib64/python3.13/pydoc.py'>
mod_name   = 'pydoc'
module     = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
np         = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
numpy_modules = {'numpy.__config__': <module 'numpy.__config__' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/p...lddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/core/_dtype_ctypes.py'>, ...}
old_numpy  = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
spec       = ModuleSpec(name='numpy', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, origin='/build...ule_search_locations=['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy'])

../../../../BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/tests/test_lazyloading.py:30: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
<frozen importlib._bootstrap>:1360: in _find_and_load
    ???
        import_    = <built-in function __import__>
        module     = <object object at 0x7f07ea940060>
        name       = 'numpy.lib'
<frozen importlib._bootstrap>:1316: in _find_and_load_unlocked
    ???
        import_    = <built-in function __import__>
        name       = 'numpy.lib'
        parent     = 'numpy'
        parent_module = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
        parent_spec = None
        path       = None
<frozen importlib.util>:209: in __getattribute__
    ???
        __dict__   = {'AxisError': <class 'numpy.exceptions.AxisError'>, 'ComplexWarning': <class 'numpy.exceptions.ComplexWarning'>, 'Modu...ng': <class 'numpy.exceptions.ModuleDeprecationWarning'>, 'TooHardError': <class 'numpy.exceptions.TooHardError'>, ...}
        __spec__   = ModuleSpec(name='numpy', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, origin='/build...ule_search_locations=['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy'])
        attr       = '__path__'
        attrs_now  = {'AxisError': <class 'numpy.exceptions.AxisError'>, 'ComplexWarning': <class 'numpy.exceptions.ComplexWarning'>, 'Modu...ng': <class 'numpy.exceptions.ModuleDeprecationWarning'>, 'TooHardError': <class 'numpy.exceptions.TooHardError'>, ...}
        attrs_then = {'__cached__': '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__pycach...packages/numpy/__init__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, ...}
        attrs_updated = {}
        key        = '__cached__'
        loader_state = {'__class__': <class 'module'>, '__dict__': {'__cached__': '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/l...t 0x7f07a3e33c20>, ...}, 'is_loading': True, 'lock': <unlocked _thread.RLock object owner=0 count=0 at 0x7f07a3492740>}
        original_name = 'numpy'
        self       = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
        value      = '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__pycache__/__init__.cpython-313.pyc'
../../../../BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py:113: in <module>
    from . import version
        AxisError  = <class 'numpy.exceptions.AxisError'>
        ComplexWarning = <class 'numpy.exceptions.ComplexWarning'>
        ModuleDeprecationWarning = <class 'numpy.exceptions.ModuleDeprecationWarning'>
        TooHardError = <class 'numpy.exceptions.TooHardError'>
        VisibleDeprecationWarning = <class 'numpy.exceptions.VisibleDeprecationWarning'>
        _CopyMode  = <enum '_CopyMode'>
        _NoValue   = <no value>
        __builtins__ = <builtins>
        __cached__ = '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__pycache__/__init__.cpython-313.pyc'
        __doc__    = '\nNumPy\n=====\n\nProvides\n  1. An array object of arbitrary homogeneous items\n  2. Fast mathematical operations ov...en\navailable as array methods, i.e. ``x = np.array([1,2,3]); x.sort()``.\nExceptions to this rule are documented.\n\n'
        __file__   = '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>
        __name__   = 'numpy'
        __package__ = 'numpy'
        __path__   = ['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy']
        __spec__   = ModuleSpec(name='numpy', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, origin='/build...ule_search_locations=['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy'])
        _globals   = <module 'numpy._globals' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/_globals.py'>
        _utils     = <module 'numpy._utils' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/_utils/__init__.py'>
        exceptions = <module 'numpy.exceptions' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/exceptions.py'>
        sys        = <module 'sys' (built-in)>
        warnings   = <module 'warnings' from '/usr/lib64/python3.13/warnings.py'>
<frozen importlib._bootstrap>:1412: in _handle_fromlist
    ???
        fromlist   = ('version',)
        import_    = <built-in function __import__>
        module     = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
        recursive  = False
        x          = 'version'
<frozen importlib.util>:209: in __getattribute__
    ???
        __dict__   = {'AxisError': <class 'numpy.exceptions.AxisError'>, 'ComplexWarning': <class 'numpy.exceptions.ComplexWarning'>, 'Modu...ng': <class 'numpy.exceptions.ModuleDeprecationWarning'>, 'TooHardError': <class 'numpy.exceptions.TooHardError'>, ...}
        __spec__   = ModuleSpec(name='numpy', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, origin='/build...ule_search_locations=['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy'])
        attr       = 'version'
        attrs_now  = {'AxisError': <class 'numpy.exceptions.AxisError'>, 'ComplexWarning': <class 'numpy.exceptions.ComplexWarning'>, 'Modu...ng': <class 'numpy.exceptions.ModuleDeprecationWarning'>, 'TooHardError': <class 'numpy.exceptions.TooHardError'>, ...}
        attrs_then = {'__cached__': '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__pycach...packages/numpy/__init__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, ...}
        attrs_updated = {'AxisError': <class 'numpy.exceptions.AxisError'>, 'ComplexWarning': <class 'numpy.exceptions.ComplexWarning'>, 'Modu...ng': <class 'numpy.exceptions.ModuleDeprecationWarning'>, 'TooHardError': <class 'numpy.exceptions.TooHardError'>, ...}
        key        = 'AxisError'
        loader_state = {'__class__': <class 'module'>, '__dict__': {'__cached__': '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/l...t 0x7f07a3e33c20>, ...}, 'is_loading': True, 'lock': <unlocked _thread.RLock object owner=0 count=0 at 0x7f07a3492740>}
        original_name = 'numpy'
        self       = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
        value      = <class 'numpy.exceptions.AxisError'>
../../../../BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py:113: in <module>
    from . import version
        AxisError  = <class 'numpy.exceptions.AxisError'>
        ComplexWarning = <class 'numpy.exceptions.ComplexWarning'>
        ModuleDeprecationWarning = <class 'numpy.exceptions.ModuleDeprecationWarning'>
        TooHardError = <class 'numpy.exceptions.TooHardError'>
        VisibleDeprecationWarning = <class 'numpy.exceptions.VisibleDeprecationWarning'>
        _CopyMode  = <enum '_CopyMode'>
        _NoValue   = <no value>
        __builtins__ = <builtins>
        __cached__ = '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__pycache__/__init__.cpython-313.pyc'
        __doc__    = '\nNumPy\n=====\n\nProvides\n  1. An array object of arbitrary homogeneous items\n  2. Fast mathematical operations ov...en\navailable as array methods, i.e. ``x = np.array([1,2,3]); x.sort()``.\nExceptions to this rule are documented.\n\n'
        __file__   = '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>
        __name__   = 'numpy'
        __package__ = 'numpy'
        __path__   = ['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy']
        __spec__   = ModuleSpec(name='numpy', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f07a3e33c20>, origin='/build...ule_search_locations=['/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy'])
        _globals   = <module 'numpy._globals' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/_globals.py'>
        _utils     = <module 'numpy._utils' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/_utils/__init__.py'>
        exceptions = <module 'numpy.exceptions' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/exceptions.py'>
        sys        = <module 'sys' (built-in)>
        warnings   = <module 'warnings' from '/usr/lib64/python3.13/warnings.py'>
<frozen importlib._bootstrap>:1412: in _handle_fromlist
    ???
E   RecursionError: maximum recursion depth exceeded
        fromlist   = ('version',)
        import_    = <built-in function __import__>
        module     = <module 'numpy' from '/builddir/build/BUILDROOT/numpy-1.26.4-2.fc41.x86_64/usr/lib64/python3.13/site-packages/numpy/__init__.py'>
        recursive  = False
        x          = 'version'
!!! Recursion detected (same locals & position)

Python and NumPy Versions:

Python 3.13.0a5, numpy 1.26.4 (from Fedora)

Runtime Environment:

No response

Context for the issue:

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.