Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4.1.0, autodoc_class_signature = "separated" set bug #9436

Closed
PhilipVinc opened this issue Jul 12, 2021 · 1 comment
Closed

4.1.0, autodoc_class_signature = "separated" set bug #9436

PhilipVinc opened this issue Jul 12, 2021 · 1 comment

Comments

@PhilipVinc
Copy link

PhilipVinc commented Jul 12, 2021

Describe the bug

this shows up when setting autodoc_class_signature = "separated"

# Sphinx version: 4.1.0
# Python version: 3.8.10 (CPython)
# Docutils version: 0.16 release
# Jinja2 version: 2.11.3
# Last messages:
#   reading sources... [ 81%] docs/_generated/samplers/netket.sampler.samples
#   reading sources... [ 82%] docs/_generated/utils/netket.utils.HashableArray
#   Didn't find HashableArray.wrapped in netket.utils
#   reading sources... [ 83%] docs/_generated/variational/netket.vqs.MCMixedState
#   Didn't find MCMixedState.sampler_state in netket.vqs
#   reading sources... [ 83%] docs/_generated/variational/netket.vqs.MCState
#   Didn't find MCState.sampler_state in netket.vqs
#   reading sources... [ 84%] docs/_generated/variational/netket.vqs.VariationalState
#   reading sources... [ 85%] docs/api
#   Creating redirect file 'documentation.html' pointing to '{new_target}'.
# Loaded extensions:
#   sphinx.ext.mathjax (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/mathjax.py
#   sphinxcontrib.applehelp (1.0.2) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinxcontrib/applehelp/__init__.py
#   sphinxcontrib.devhelp (1.0.2) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinxcontrib/devhelp/__init__.py
#   sphinxcontrib.htmlhelp (2.0.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinxcontrib/htmlhelp/__init__.py
#   sphinxcontrib.serializinghtml (1.1.5) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinxcontrib/serializinghtml/__init__.py
#   sphinxcontrib.qthelp (1.0.3) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinxcontrib/qthelp/__init__.py
#   alabaster (0.7.12) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/alabaster/__init__.py
#   sphinx.ext.autodoc.preserve_defaults (1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autodoc/preserve_defaults.py
#   sphinx.ext.autodoc.type_comment (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autodoc/type_comment.py
#   sphinx.ext.autodoc (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autodoc/__init__.py
#   sphinx.ext.napoleon (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/napoleon/__init__.py
#   sphinx_autodoc_typehints (unknown version) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx_autodoc_typehints.py
#   sphinx.ext.autosummary (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autosummary/__init__.py
#   sphinx.ext.doctest (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/doctest.py
#   sphinx.ext.intersphinx (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/intersphinx.py
#   sphinx.ext.viewcode (4.1.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/viewcode.py
#   sphinx_reredirects (unknown version) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx_reredirects/__init__.py
#   sphinx_panels (0.6.0) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx_panels/__init__.py
#   nbsphinx (0.8.6) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/nbsphinx.py
#   myst_parser (0.15.1) from /home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/myst_parser/__init__.py
Traceback (most recent call last):
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/cmd/build.py", line 280, in build_main
    app.build(args.force_all, filenames)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/application.py", line 343, in build
    self.builder.build_update()
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/builders/__init__.py", line 293, in build_update
    self.build(to_build,
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/builders/__init__.py", line 307, in build
    updated_docnames = set(self.read())
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/builders/__init__.py", line 414, in read
    self._read_serial(docnames)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/builders/__init__.py", line 435, in _read_serial
    self.read_doc(docname)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/builders/__init__.py", line 475, in read_doc
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/io.py", line 188, in read_doc
    pub.publish()
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/core.py", line 217, in publish
    self.document = self.reader.read(self.source, self.parser,
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/io.py", line 108, in read
    self.parse()
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/readers/__init__.py", line 77, in parse
    self.parser.parse(self.input, document)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/parsers.py", line 100, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 170, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/statemachine.py", line 241, in run
    context, next_state, result = self.check_line(
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/statemachine.py", line 459, in check_line
    return method(match, context, next_state)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 3005, in text
    self.section(title.lstrip(), source, style, lineno + 1, messages)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 281, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/statemachine.py", line 241, in run
    context, next_state, result = self.check_line(
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/statemachine.py", line 459, in check_line
    return method(match, context, next_state)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 2769, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 281, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/statemachine.py", line 241, in run
    context, next_state, result = self.check_line(
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/statemachine.py", line 459, in check_line
    return method(match, context, next_state)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 2342, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 2354, in explicit_construct
    return method(self, expmatch)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 2096, in directive
    return self.run_directive(
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/docutils/parsers/rst/states.py", line 2146, in run_directive
    result = directive_instance.run()
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autosummary/__init__.py", line 262, in run
    items = self.get_items(names)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autosummary/__init__.py", line 358, in get_items
    documenter = self.create_documenter(self.env.app, obj, parent, full_name)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autosummary/__init__.py", line 325, in create_documenter
    return doccls(self.bridge, full_name)
  File "/home/filippovicentini/Documents/pythonenvs/netket_env/lib64/python3.8/site-packages/sphinx/ext/autodoc/__init__.py", line 1452, in __init__
    self.options.special_members.append('__new__')
AttributeError: 'set' object has no attribute 'append'

How to Reproduce

$ git clone https://github.com/netket/netket
$ cd netket
$ pip install -r docs/requirements.txt
$ pip install -U sphinxcontrib-htmlhelp
$ pip install -U sphinxcontrib-serializinghtml
$ cd docs
$ echo "autoclass_content = 'class' >> conf.py
$ echo "autodoc_class_signature = 'separated' >> conf.py
$ make html
 

Expected behavior

The build not to fail

Your project

https://github.com/netket/netket/tree/master/docs

Screenshots

No response

OS

Fedora

Python version

3.8.10

Sphinx version

4.1.0

Sphinx extensions

No response

Extra tools

No response

Additional context

No response

@PhilipVinc
Copy link
Author

The bug can be fixed by replacing the two lines in sphinx/ext/autodoc/_init__.py

class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):  # type: ignore
...
    def __init__(self, *args: Any) -> None:
        super().__init__(*args)

        if self.config.autodoc_class_signature == 'separated':
            # show __init__() method
            if self.options.special_members is None:
                self.options['special-members'] = {'__new__', '__init__'}
            else:
                self.options.special_members.append('__new__')   # this line
                self.options.special_members.append('__init__')     # and this line

with

                self.options.special_members.add('__new__')
                self.options.special_members.add('__init__')

because they are sets and not lists

@tk0miya tk0miya added this to the 4.1.2 milestone Jul 24, 2021
tk0miya added a commit to tk0miya/sphinx that referenced this issue Jul 24, 2021
…ss_signature = "separated"

A list should be used for special-members option instead of set.
tk0miya added a commit to tk0miya/sphinx that referenced this issue Jul 24, 2021
…ss_signature = "separated"

A list should be used for special-members option instead of set.
tk0miya added a commit that referenced this issue Jul 25, 2021
Fix #9436, #9471: autodoc: crashed if autodoc_class_signature = "separated"
@tk0miya tk0miya closed this as completed Jul 25, 2021
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 25, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants