Skip to content

autodoc and autosummary failing when class and module have the same name #11362

@larsoner

Description

@larsoner

Describe the bug

We have mne/dipole.py in which there is a Dipole class defined. We import this class (and .dipole) in mne/__init__.py, and document with autosummary/autodoc the mne.Dipole class in the root namespace. On Windows (case-insensitive), we have the following problem, which just started show up on April 17th-ish in our builds:

C:\Users\larsoner\python\mne-python\mne\dipole.py:docstring of mne.dipole.Dipole:98: WARNING: autosummary: failed to import crop.
Possible hints:
* ValueError: not enough values to unpack (expected 2, got 1)
* ModuleNotFoundError: No module named 'crop'
* ModuleNotFoundError: No module named 'mne.Dipole.crop'; 'mne.Dipole' is not a package
* KeyError: 'crop'
* AttributeError: module 'mne' has no attribute 'crop'
* ModuleNotFoundError: No module named 'mne.crop'
* AttributeError: module 'mne.Dipole' has no attribute 'crop'

mne.Dipole.crop is a valid method and is documented properly on Linux. I think it's driven by the following behavior on Windows -- namely, that if you try import mne.Dipole Python imports mne/dipole.py module as mne.Dipole:

>>> import mne
>>> mne.Dipole   # correct!
<class 'mne.dipole.Dipole'>
>>> import mne.Dipole
>>> mne.Dipole  # bad!
<module 'mne.Dipole' from 'C:\\Users\\larsoner\\python\\mne-python\\mne\\Dipole.py'>
>>> from mne import Dipole  # bad enough, but continue...
>>> Dipole  # also bad!
<module 'mne.Dipole' from 'C:\\Users\\larsoner\\python\\mne-python\\mne\\Dipole.py'>

I think autosummary is doing some module importing under the hood here that is having this effect. I'm not sure if it's possible to directly try mne.dipole.Dipole or mne.Dipole before trying to import mne.Dipole, as that would fix the problem...?

How to Reproduce

I can try to come up with a MWE if it's not obvious that there is some existing workaround or what the problem is. I'm not sure it will be easy, though, as which errors we get for which classes appears to change run-to-run :(

Environment Information

At least sphinx 5.3 and the latest release (tested both).

Sphinx extensions

autodoc, autosummary

Additional context

  • I've looked at autodoc&autosummary fails for uppercase/lowercase class/function #4874 and changing the stub name does not help.
  • I've considered documenting mne.Dipole at mne.dipole.Dipole in the docs instead, but we really want this (and other classes with the same problem) in the root namespace. We also want mne.dipole to be public because some dipole-related functions live there and shouldn't live in the root mne namespace.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions