Closed jgarte closed 1 year ago
Do you need sphinx-testing to support older Sphinx versions like 5.3.0
?
I need you to slow down. You're spamming me with trivial issues.
What do you mean "not supported"?
I don't know anything about the sphinx-testing
package except that it hasn't been updated in years.
I edited my initial issue post with more context. Running make test
fails for me in a virtualenv. I think it is because Sphinx 5.3.0
doesn't support line 6 that I linked above from conftest.py
. I may be wrong but see the exception I update/posted above. That's why I asked what version of Sphinx you're using for local development to see if it is/is not reproducible. I think this answers your point 2.
Just sharing my experience with trying to build the docs for uqbar in a venv
and not being able to because of incompatibilities with what is in the latest commit of the code versus the versions you're declaring in the pyproject.toml
. Sphinx 5.3.0 might not be supported by line 6 in conftest.py
.
I'll stop "spamming trivialities" if that's how you're experiencing it. That was not my intent.
Read the error again. ModuleNotFoundError: No module named 'sphinx'
. That indicates that you don't have Sphinx installed at all.
That's not the issue because I do have Sphinx 5.3.0 installed. That error that you're reading is a false positive.
I made sure to check that with the following command while in the venv
:
.venv) $ sphinx-quickstart --version
sphinx-quickstart 5.3.0
See just above that error line:
from sphinx.testing.path import path
in
ImportError while loading conftest '/home/jgart/uqbar/tests/conftest.py'.
tests/conftest.py:6: in <module>
from sphinx.testing.path import path
E ModuleNotFoundError: No module named 'sphinx'
and what I mentioned regarding Sphinx 5.3.0 versus later versions of Sphinx.
import sphinx
which sphinx-build
to see where that's coming fromimport sphinx
imports silently/successfully in my python interpreter if that's what you wanted me to test.
As for 3 that you listed:
(.venv) $ which sphinx-build
/home/jgart/uqbar/.venv/bin/sphinx-build
The above which
output looks correct to me.
As for 1:
https://pypi.org/project/Sphinx/: Sphinx 5.3.0 is the latest version of Sphinx.
That's the latest version on PyPi but the latest release from the project is
https://github.com/sphinx-doc/sphinx/releases/tag/v6.0.0b2
And the doc I mentioned above says the following:
New in version 1.6: sphinx.testing is added as a experimental.
And what you're using on line 6 seems to be from a version that is higher than 5.3.0
:
from sphinx.testing.path import path
because of the following mention in Sphinx's release changelog:
New in version 1.6: sphinx.testing is added as a experimental.
I don't understand what you're saying about the versions. New in version 1.6
just means they added the sphinx.testing
package then. It's been around for multiple years. And sphinx.testing.path
was added 4 years ago: https://github.com/sphinx-doc/sphinx/blame/master/sphinx/testing/path.py#L21
That line in my conftest.py is also 4 years old, back when Uqbar pinned Sphinx 1.7: https://github.com/josiah-wolf-oberholtzer/uqbar/blob/c32ab411a1e1565afa764b49af0c7164752d00b2/setup.py#L33
It's been around for multiple years. And sphinx.testing.path was added 4 years ago: https://github.com/sphinx-doc/sphinx/blame/master/sphinx/testing/path.py#L21
Ok, thanks for clarifying that. I'm not sure why make test
fails to build and reports the above mentioned error then 🦆
Given that info then I have no idea what the issue here might be. It might be some obscure discrepancy between my dev environment and yours that we/I haven't been able to identify yet.
I'm going to close this issue for now. Maybe someone else will run into it in the future and report it if they fail to run the tests like I did.
Here's some more info about my system FTR that might or might not be relevant:
OS: Void Linux x86_64
Shell: bash 5.1.16
Kernel: 6.0.13_1
Yeah, I dunno. Everything works fine on my OSX machine on Python 3.8, 3.9, 3.10 with fresh virtualenvs. And every commit to Uqbar is tested against OSX, Ubuntu and Windows, with Python 3.7 through 3.10. You can always look at the Actions
for this repo to see exactly what gets installed and run. The versions of everything are printed out in the logs there.
I got the tests to run on my machine with pytest --cov uqbar
:
============================= test session starts ==============================
platform linux -- Python 3.11.1, pytest-7.2.0, pluggy-1.0.0 -- /home/jgart/uqbar/.venv/bin/python
cachedir: .pytest_cache
rootdir: /home/jgart/uqbar, configfile: pyproject.toml, testpaths: tests, uqbar
plugins: cov-4.0.0
collecting ... collected 141 items
tests/test_apis_APIBuilder.py::test_collection_01 PASSED [ 0%]
tests/test_apis_APIBuilder.py::test_collection_02 PASSED [ 1%]
tests/test_apis_APIBuilder.py::test_collection_03 PASSED [ 2%]
tests/test_apis_APIBuilder.py::test_collection_04 PASSED [ 2%]
tests/test_apis_APIBuilder.py::test_output_01 PASSED [ 3%]
tests/test_apis_APIBuilder.py::test_output_02 PASSED [ 4%]
tests/test_apis_APIBuilder.py::test_output_03 PASSED [ 4%]
tests/test_apis_ClassDocumenter.py::test_str_01 PASSED [ 5%]
tests/test_apis_ClassDocumenter.py::test_str_02 PASSED [ 6%]
tests/test_apis_ClassDocumenter.py::test_str_03 PASSED [ 7%]
tests/test_apis_InheritanceGraph.py::test_01 PASSED [ 7%]
tests/test_apis_InheritanceGraph.py::test_02 PASSED [ 8%]
tests/test_apis_InheritanceGraph.py::test_03 FAILED [ 9%]
tests/test_apis_InheritanceGraph.py::test_04 PASSED [ 9%]
tests/test_apis_SummarizingClassDocumenter.py::test_str_01 PASSED [ 10%]
tests/test_apis_SummarizingClassDocumenter.py::test_str_02 PASSED [ 11%]
tests/test_apis_SummarizingClassDocumenter.py::test_str_03 PASSED [ 12%]
tests/test_apis_SummarizingClassDocumenter.py::test_str_04 FAILED [ 12%]
tests/test_apis_SummarizingModuleDocumenter.py::test_str_01 PASSED [ 13%]
tests/test_apis_SummarizingModuleDocumenter.py::test_str_02 PASSED [ 14%]
tests/test_apis_SummarizingModuleDocumenter.py::test_str_03 PASSED [ 14%]
tests/test_apis_SummarizingRootDocumenter.py::test_str_01 PASSED [ 15%]
tests/test_book_sphinx.py::test_parse_rst_01 PASSED [ 16%]
tests/test_book_sphinx.py::test_parse_rst_02 PASSED [ 17%]
tests/test_book_sphinx.py::test_collect_literal_blocks_01 PASSED [ 17%]
tests/test_book_sphinx.py::test_collect_literal_blocks_02 PASSED [ 18%]
tests/test_book_sphinx.py::test_interpret_code_blocks_01 PASSED [ 19%]
tests/test_book_sphinx.py::test_interpret_code_blocks_02 PASSED [ 19%]
tests/test_book_sphinx.py::test_rebuild_document_01 PASSED [ 20%]
tests/test_book_sphinx.py::test_rebuild_document_02 PASSED [ 21%]
tests/test_book_sphinx.py::test_rebuild_document_03 PASSED [ 21%]
tests/test_book_sphinx.py::test_rebuild_document_04 PASSED [ 22%]
tests/test_containers_DependencyGraph.py::test___contains__ PASSED [ 23%]
tests/test_containers_DependencyGraph.py::test___eq__ PASSED [ 24%]
tests/test_containers_DependencyGraph.py::test___getitem__ PASSED [ 24%]
tests/test_containers_DependencyGraph.py::test___iter__ PASSED [ 25%]
tests/test_containers_DependencyGraph.py::test___len__ PASSED [ 26%]
tests/test_containers_DependencyGraph.py::test_add PASSED [ 26%]
tests/test_containers_DependencyGraph.py::test_children PASSED [ 27%]
tests/test_containers_DependencyGraph.py::test_copy PASSED [ 28%]
tests/test_containers_DependencyGraph.py::test_is_acyclic PASSED [ 29%]
tests/test_containers_DependencyGraph.py::test_parents PASSED [ 29%]
tests/test_containers_DependencyGraph.py::test_remove PASSED [ 30%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___delitem___01 PASSED [ 31%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___delitem___02 PASSED [ 31%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___getitem___named PASSED [ 32%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___getitem___numbered PASSED [ 33%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___init___01 PASSED [ 34%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___init___02 PASSED [ 34%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___iter__ PASSED [ 35%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___len__ PASSED [ 36%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test___setitem__ PASSED [ 36%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_append_01 PASSED [ 37%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_append_02 PASSED [ 38%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_extend_01 PASSED [ 39%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_extend_02 PASSED [ 39%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_forbid_circular_parentage PASSED [ 40%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_insert PASSED [ 41%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_pop PASSED [ 41%]
tests/test_containers_UniqueTreeContainer.py::TestCase::test_remove PASSED [ 42%]
tests/test_containers_UniqueTreeNode.py::TestCase::test___init___01 PASSED [ 43%]
tests/test_containers_UniqueTreeNode.py::TestCase::test___init___02 PASSED [ 43%]
tests/test_containers_UniqueTreeNode.py::TestCase::test_name_01 PASSED [ 44%]
tests/test_containers_UniqueTreeNode.py::TestCase::test_name_02 PASSED [ 45%]
tests/test_graphs_Attributes.py::TestCase::test___format___graphviz_01 PASSED [ 46%]
tests/test_graphs_Attributes.py::TestCase::test___format___graphviz_02 PASSED [ 46%]
tests/test_graphs_Attributes.py::TestCase::test___format___str_01 PASSED [ 47%]
tests/test_graphs_Attributes.py::TestCase::test___format___str_02 PASSED [ 48%]
tests/test_graphs_Attributes.py::TestCase::test_mode PASSED [ 48%]
tests/test_graphs_Edge.py::TestCase::test___format___graphviz PASSED [ 49%]
tests/test_graphs_Edge.py::TestCase::test___format___str PASSED [ 50%]
tests/test_graphs_Edge.py::TestCase::test___init__ PASSED [ 51%]
tests/test_graphs_Graph.py::TestCase::test___format___graphviz_01 PASSED [ 51%]
tests/test_graphs_Graph.py::TestCase::test_functional PASSED [ 52%]
tests/test_graphs_Graph.py::TestCase::test_initialized_with_attributes PASSED [ 53%]
tests/test_graphs_Grapher.py::test_01 PASSED [ 53%]
tests/test_graphs_Node.py::TestCase::test___format___graphviz PASSED [ 54%]
tests/test_graphs_Node.py::TestCase::test___format___str PASSED [ 55%]
tests/test_graphs_Node.py::TestCase::test___init__ PASSED [ 56%]
tests/test_graphs_Node.py::TestCase::test__get_canonical_name PASSED [ 56%]
tests/test_graphs_RecordField.py::test_graphs_RecordField PASSED [ 57%]
tests/test_graphs_Table.py::test_graphs_Table PASSED [ 58%]
tests/test_io_find_executable.py::test_find_executable PASSED [ 58%]
tests/test_objects_get_hash.py::test_objects_get_hash_01 PASSED [ 59%]
tests/test_objects_get_repr.py::test_objects_get_repr_01 PASSED [ 60%]
tests/test_objects_get_repr.py::test_objects_get_repr_02 PASSED [ 60%]
tests/test_objects_get_repr.py::test_objects_get_repr_03 PASSED [ 61%]
tests/test_objects_get_repr.py::test_objects_get_repr_04 PASSED [ 62%]
tests/test_objects_get_repr.py::test_objects_get_repr_05 PASSED [ 63%]
tests/test_objects_get_vars.py::test_objects_get_vars_01 PASSED [ 63%]
tests/test_objects_get_vars.py::test_objects_get_vars_02 PASSED [ 64%]
tests/test_objects_new.py::test_objects_new_01 PASSED [ 65%]
tests/test_sphinx_api.py::test_sphinx_api_1 PASSED [ 65%]
tests/test_sphinx_api.py::test_sphinx_api_2 FAILED [ 66%]
tests/test_sphinx_book.py::test_sphinx_book_html_cached PASSED [ 67%]
tests/test_sphinx_book.py::test_sphinx_book_latex_cached PASSED [ 68%]
tests/test_sphinx_book.py::test_sphinx_book_text_cached PASSED [ 68%]
tests/test_sphinx_book.py::test_sphinx_book_text_uncached PASSED [ 69%]
tests/test_sphinx_book.py::test_sphinx_book_text_broken_strict PASSED [ 70%]
tests/test_sphinx_book.py::test_sphinx_book_text_broken_setup PASSED [ 70%]
tests/test_sphinx_book.py::test_sphinx_book_text_broken_teardown PASSED [ 71%]
tests/test_sphinx_inheritance.py::test_sphinx_style_html FAILED [ 72%]
tests/test_sphinx_inheritance.py::test_sphinx_style_latex PASSED [ 73%]
tests/test_sphinx_style.py::test_sphinx_style_1 PASSED [ 73%]
uqbar/enums.py::uqbar.enums.IntEnumeration PASSED [ 74%]
uqbar/enums.py::uqbar.enums.IntEnumeration.from_expr PASSED [ 75%]
uqbar/enums.py::uqbar.enums.StrictEnumeration PASSED [ 75%]
uqbar/enums.py::uqbar.enums.StrictEnumeration.from_expr PASSED [ 76%]
uqbar/io.py::uqbar.io.RedirectedStreams PASSED [ 77%]
uqbar/io.py::uqbar.io.Timer PASSED [ 78%]
uqbar/io.py::uqbar.io.find_common_prefix PASSED [ 78%]
uqbar/io.py::uqbar.io.relative_to PASSED [ 79%]
uqbar/objects.py::uqbar.objects.get_repr PASSED [ 80%]
uqbar/objects.py::uqbar.objects.get_vars PASSED [ 80%]
uqbar/objects.py::uqbar.objects.new PASSED [ 81%]
uqbar/strings.py::uqbar.strings.delimit_words PASSED [ 82%]
uqbar/strings.py::uqbar.strings.to_dash_case PASSED [ 82%]
uqbar/strings.py::uqbar.strings.to_snake_case PASSED [ 83%]
uqbar/apis/builders.py::uqbar.apis.builders.APIBuilder PASSED [ 84%]
uqbar/apis/documenters.py::uqbar.apis.documenters.ClassDocumenter PASSED [ 85%]
uqbar/apis/documenters.py::uqbar.apis.documenters.FunctionDocumenter PASSED [ 85%]
uqbar/apis/documenters.py::uqbar.apis.documenters.ModuleDocumenter PASSED [ 86%]
uqbar/apis/documenters.py::uqbar.apis.documenters.RootDocumenter PASSED [ 87%]
uqbar/apis/graphs.py::uqbar.apis.graphs.InheritanceGraph PASSED [ 87%]
uqbar/apis/summarizers.py::uqbar.apis.summarizers.SummarizingClassDocumenter PASSED [ 88%]
uqbar/apis/summarizers.py::uqbar.apis.summarizers.SummarizingModuleDocumenter PASSED [ 89%]
uqbar/apis/summarizers.py::uqbar.apis.summarizers.SummarizingRootDocumenter PASSED [ 90%]
uqbar/book/console.py::uqbar.book.console.Console PASSED [ 90%]
uqbar/containers/dependency_graph.py::uqbar.containers.dependency_graph.DependencyGraph PASSED [ 91%]
uqbar/containers/unique_tree.py::uqbar.containers.unique_tree.UniqueTreeNode.graph_order PASSED [ 92%]
uqbar/graphs/attrs.py::uqbar.graphs.attrs.Attributes PASSED [ 92%]
uqbar/graphs/core.py::uqbar.graphs.core.Node PASSED [ 93%]
uqbar/graphs/html.py::uqbar.graphs.html.HRule PASSED [ 94%]
uqbar/graphs/html.py::uqbar.graphs.html.LineBreak PASSED [ 95%]
uqbar/graphs/html.py::uqbar.graphs.html.Table PASSED [ 95%]
uqbar/graphs/html.py::uqbar.graphs.html.TableCell PASSED [ 96%]
uqbar/graphs/html.py::uqbar.graphs.html.TableRow PASSED [ 97%]
uqbar/graphs/html.py::uqbar.graphs.html.Text PASSED [ 97%]
uqbar/graphs/html.py::uqbar.graphs.html.VRule PASSED [ 98%]
uqbar/graphs/records.py::uqbar.graphs.records.RecordField PASSED [ 99%]
uqbar/graphs/records.py::uqbar.graphs.records.RecordGroup PASSED [100%]
=================================== FAILURES ===================================
___________________________________ test_03 ____________________________________
def test_03():
inheritance_graph = uqbar.apis.InheritanceGraph(
package_paths=["uqbar"], lineage_paths=["uqbar"]
)
> assert str(inheritance_graph) == uqbar.strings.normalize(
r"""
digraph InheritanceGraph {
graph [bgcolor=transparent,
color=lightsteelblue2,
fontname=Arial,
fontsize=10,
outputorder=edgesfirst,
overlap=prism,
penwidth=2,
rankdir=LR,
splines=spline,
style="dashed, rounded",
truecolor=true];
node [colorscheme=pastel19,
fontname=Arial,
fontsize=10,
height=0,
penwidth=2,
shape=box,
style="filled, rounded",
width=0];
edge [color=lightslategrey,
penwidth=1];
subgraph cluster_builtins {
graph [label=builtins];
node [color=1];
"builtins.BaseException" [label="Base\nException"];
"builtins.Exception" [label=Exception];
"builtins.int" [label=int];
"builtins.object" [label=object];
"builtins.BaseException" -> "builtins.Exception";
"builtins.object" -> "builtins.BaseException";
"builtins.object" -> "builtins.int";
}
subgraph cluster_code {
graph [label=code];
node [color=2];
"code.InteractiveConsole" [label="Interactive\nConsole"];
"code.InteractiveInterpreter" [label="Interactive\nInterpreter"];
"code.InteractiveInterpreter" -> "code.InteractiveConsole";
}
subgraph "cluster_collections.abc" {
graph [label="collections.abc"];
node [color=3];
"collections.abc.Collection" [label=Collection,
shape=oval,
style=bold];
"collections.abc.Container" [label=Container,
shape=oval,
style=bold];
"collections.abc.Iterable" [label=Iterable,
shape=oval,
style=bold];
"collections.abc.Mapping" [label=Mapping,
shape=oval,
style=bold];
"collections.abc.MutableMapping" [label="Mutable\nMapping",
shape=oval,
style=bold];
"collections.abc.Sized" [label=Sized,
shape=oval,
style=bold];
"collections.abc.Collection" -> "collections.abc.Mapping";
"collections.abc.Container" -> "collections.abc.Collection";
"collections.abc.Iterable" -> "collections.abc.Collection";
"collections.abc.Mapping" -> "collections.abc.MutableMapping";
"collections.abc.Sized" -> "collections.abc.Collection";
}
subgraph "cluster_docutils.nodes" {
graph [label="docutils.nodes"];
node [color=4];
"docutils.nodes.Body" [label=Body];
"docutils.nodes.Element" [label=Element];
"docutils.nodes.General" [label=General];
"docutils.nodes.Node" [label="Node"];
"docutils.nodes.Body" -> "docutils.nodes.General";
"docutils.nodes.Node" -> "docutils.nodes.Element";
}
subgraph "cluster_docutils.parsers.rst" {
graph [label="docutils.parsers.rst"];
node [color=5];
"docutils.parsers.rst.Directive" [label=Directive];
}
subgraph cluster_enum {
graph [label=enum];
node [color=6];
"enum.Enum" [label=Enum];
"enum.IntEnum" [label="Int\nEnum"];
"enum.Enum" -> "enum.IntEnum";
}
subgraph "cluster_uqbar.apis.builders" {
graph [label="uqbar.apis.builders"];
node [color=7];
"uqbar.apis.builders.APIBuilder" [label=APIBuilder];
}
subgraph "cluster_uqbar.apis.documenters" {
graph [label="uqbar.apis.documenters"];
node [color=8];
"uqbar.apis.documenters.ClassDocumenter" [label="Class\nDocumenter"];
"uqbar.apis.documenters.FunctionDocumenter" [label="Function\nDocumenter"];
"uqbar.apis.documenters.MemberDocumenter" [label="Member\nDocumenter"];
"uqbar.apis.documenters.ModuleDocumenter" [label="Module\nDocumenter"];
"uqbar.apis.documenters.RootDocumenter" [label="Root\nDocumenter"];
"uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.ClassDocumenter";
"uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.FunctionDocumenter";
}
subgraph "cluster_uqbar.apis.dummy" {
graph [label="uqbar.apis.dummy"];
node [color=9];
"uqbar.apis.dummy.MyChildClass" [label="My\nChild\nClass"];
"uqbar.apis.dummy.MyParentClass" [label="My\nParent\nClass"];
"uqbar.apis.dummy.MyParentClass" -> "uqbar.apis.dummy.MyChildClass";
}
subgraph "cluster_uqbar.apis.graphs" {
graph [label="uqbar.apis.graphs"];
node [color=1];
"uqbar.apis.graphs.InheritanceGraph" [label="Inheritance\nGraph"];
}
subgraph "cluster_uqbar.apis.nodes" {
graph [label="uqbar.apis.nodes"];
node [color=2];
"uqbar.apis.nodes.ModuleNode" [label="Module\nNode"];
"uqbar.apis.nodes.PackageNode" [label="Package\nNode"];
}
subgraph "cluster_uqbar.apis.summarizers" {
graph [label="uqbar.apis.summarizers"];
node [color=3];
"uqbar.apis.summarizers.ImmaterialClassDocumenter" [label="Immaterial\nClass\nDocumenter"];
"uqbar.apis.summarizers.ImmaterialModuleDocumenter" [label="Immaterial\nModule\nDocumenter"];
"uqbar.apis.summarizers.SummarizingClassDocumenter" [label="Summarizing\nClass\nDocumenter"];
"uqbar.apis.summarizers.SummarizingModuleDocumenter" [label="Summarizing\nModule\nDocumenter"];
"uqbar.apis.summarizers.SummarizingRootDocumenter" [label="Summarizing\nRoot\nDocumenter"];
"uqbar.apis.summarizers.SummarizingClassDocumenter" -> "uqbar.apis.summarizers.ImmaterialClassDocumenter";
}
subgraph "cluster_uqbar.book.console" {
graph [label="uqbar.book.console"];
node [color=4];
"uqbar.book.console.Console" [label=Console];
"uqbar.book.console.ConsoleError" [label="Console\nError"];
"uqbar.book.console.ConsoleInput" [label="Console\nInput"];
"uqbar.book.console.ConsoleOutput" [label="Console\nOutput"];
"uqbar.book.console.MonkeyPatch" [label="Monkey\nPatch"];
}
subgraph "cluster_uqbar.book.extensions" {
graph [label="uqbar.book.extensions"];
node [color=5];
"uqbar.book.extensions.Extension" [label=Extension];
"uqbar.book.extensions.GraphExtension" [label="Graph\nExtension"];
"uqbar.book.extensions.Extension" -> "uqbar.book.extensions.GraphExtension";
}
subgraph "cluster_uqbar.book.sphinx" {
graph [label="uqbar.book.sphinx"];
node [color=6];
"uqbar.book.sphinx.UqbarBookDefaultsDirective" [label="Uqbar\nBook\nDefaults\nDirective"];
"uqbar.book.sphinx.UqbarBookDirective" [label="Uqbar\nBook\nDirective"];
"uqbar.book.sphinx.UqbarBookImportDirective" [label="Uqbar\nBook\nImport\nDirective"];
"uqbar.book.sphinx.uqbar_book_defaults_block" [label="uqbar\nbook\ndefaults\nblock"];
"uqbar.book.sphinx.uqbar_book_import_block" [label="uqbar\nbook\nimport\nblock"];
}
subgraph "cluster_uqbar.containers.dependency_graph" {
graph [label="uqbar.containers.dependency_graph"];
node [color=7];
"uqbar.containers.dependency_graph.DependencyGraph" [label="Dependency\nGraph"];
}
subgraph "cluster_uqbar.containers.unique_tree" {
graph [label="uqbar.containers.unique_tree"];
node [color=8];
"uqbar.containers.unique_tree.UniqueTreeContainer" [label="Unique\nTree\nContainer"];
"uqbar.containers.unique_tree.UniqueTreeDict" [label="Unique\nTree\nDict"];
"uqbar.containers.unique_tree.UniqueTreeList" [label="Unique\nTree\nList"];
"uqbar.containers.unique_tree.UniqueTreeNode" [label="Unique\nTree\nNode"];
"uqbar.containers.unique_tree.UniqueTreeSet" [label="Unique\nTree\nSet"];
"uqbar.containers.unique_tree.UniqueTreeTuple" [label="Unique\nTree\nTuple"];
"uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeDict";
"uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeList";
"uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeSet";
"uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeTuple";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.containers.unique_tree.UniqueTreeContainer";
}
subgraph "cluster_uqbar.enums" {
graph [label="uqbar.enums"];
node [color=9];
"uqbar.enums.IntEnumeration" [label="Int\nEnumeration"];
"uqbar.enums.StrictEnumeration" [label="Strict\nEnumeration"];
}
subgraph "cluster_uqbar.graphs.attrs" {
graph [label="uqbar.graphs.attrs"];
node [color=1];
"uqbar.graphs.attrs.Attributes" [label=Attributes];
}
subgraph "cluster_uqbar.graphs.core" {
graph [label="uqbar.graphs.core"];
node [color=2];
"uqbar.graphs.core.Attachable" [label=Attachable];
"uqbar.graphs.core.Edge" [label="Edge"];
"uqbar.graphs.core.Graph" [label="Graph"];
"uqbar.graphs.core.Node" [label="Node"];
}
subgraph "cluster_uqbar.graphs.graphers" {
graph [label="uqbar.graphs.graphers"];
node [color=3];
"uqbar.graphs.graphers.Grapher" [label=Grapher];
}
subgraph "cluster_uqbar.graphs.html" {
graph [label="uqbar.graphs.html"];
node [color=4];
"uqbar.graphs.html.HRule" [label=HRule];
"uqbar.graphs.html.LineBreak" [label="Line\nBreak"];
"uqbar.graphs.html.Table" [label=Table];
"uqbar.graphs.html.TableCell" [label="Table\nCell"];
"uqbar.graphs.html.TableRow" [label="Table\nRow"];
"uqbar.graphs.html.Text" [label=Text];
"uqbar.graphs.html.VRule" [label=VRule];
}
subgraph "cluster_uqbar.graphs.records" {
graph [label="uqbar.graphs.records"];
node [color=5];
"uqbar.graphs.records.RecordField" [label="Record\nField"];
"uqbar.graphs.records.RecordGroup" [label="Record\nGroup"];
}
subgraph "cluster_uqbar.io" {
graph [label="uqbar.io"];
node [color=6];
"uqbar.io.DirectoryChange" [color=black,
fontcolor=white,
label="Directory\nChange"];
"uqbar.io.Profiler" [color=black,
fontcolor=white,
label=Profiler];
"uqbar.io.RedirectedStreams" [color=black,
fontcolor=white,
label="Redirected\nStreams"];
"uqbar.io.Timer" [color=black,
fontcolor=white,
label=Timer];
}
subgraph "cluster_uqbar.sphinx.inheritance" {
graph [label="uqbar.sphinx.inheritance"];
node [color=7];
"uqbar.sphinx.inheritance.InheritanceDiagram" [label="Inheritance\nDiagram"];
"uqbar.sphinx.inheritance.inheritance_diagram" [label="inheritance\ndiagram"];
}
"builtins.Exception" -> "uqbar.book.console.ConsoleError";
"builtins.int" -> "enum.IntEnum";
"builtins.object" -> "code.InteractiveInterpreter";
"builtins.object" -> "collections.abc.Container";
"builtins.object" -> "collections.abc.Iterable";
"builtins.object" -> "collections.abc.Sized";
"builtins.object" -> "docutils.nodes.Body";
"builtins.object" -> "docutils.nodes.Node";
"builtins.object" -> "docutils.parsers.rst.Directive";
"builtins.object" -> "enum.Enum";
"builtins.object" -> "uqbar.apis.builders.APIBuilder";
"builtins.object" -> "uqbar.apis.documenters.MemberDocumenter";
"builtins.object" -> "uqbar.apis.documenters.ModuleDocumenter";
"builtins.object" -> "uqbar.apis.documenters.RootDocumenter";
"builtins.object" -> "uqbar.apis.dummy.MyParentClass";
"builtins.object" -> "uqbar.apis.graphs.InheritanceGraph";
"builtins.object" -> "uqbar.book.console.ConsoleInput";
"builtins.object" -> "uqbar.book.console.ConsoleOutput";
"builtins.object" -> "uqbar.book.console.MonkeyPatch";
"builtins.object" -> "uqbar.book.extensions.Extension";
"builtins.object" -> "uqbar.containers.dependency_graph.DependencyGraph";
"builtins.object" -> "uqbar.containers.unique_tree.UniqueTreeNode";
"builtins.object" -> "uqbar.graphs.core.Edge";
"builtins.object" -> "uqbar.graphs.graphers.Grapher";
"builtins.object" -> "uqbar.io.DirectoryChange";
"builtins.object" -> "uqbar.io.Profiler";
"builtins.object" -> "uqbar.io.RedirectedStreams";
"builtins.object" -> "uqbar.io.Timer";
"code.InteractiveConsole" -> "uqbar.book.console.Console";
"collections.abc.MutableMapping" -> "uqbar.graphs.attrs.Attributes";
"docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_defaults_block";
"docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_import_block";
"docutils.nodes.Element" -> "uqbar.sphinx.inheritance.inheritance_diagram";
"docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_defaults_block";
"docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_import_block";
"docutils.nodes.General" -> "uqbar.sphinx.inheritance.inheritance_diagram";
"docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDefaultsDirective";
"docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDirective";
"docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookImportDirective";
"docutils.parsers.rst.Directive" -> "uqbar.sphinx.inheritance.InheritanceDiagram";
"enum.Enum" -> "uqbar.enums.StrictEnumeration";
"enum.IntEnum" -> "uqbar.enums.IntEnumeration";
"uqbar.apis.documenters.ClassDocumenter" -> "uqbar.apis.summarizers.SummarizingClassDocumenter";
"uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.ImmaterialModuleDocumenter";
"uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.SummarizingModuleDocumenter";
"uqbar.apis.documenters.RootDocumenter" -> "uqbar.apis.summarizers.SummarizingRootDocumenter";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.apis.nodes.PackageNode";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Graph";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Node";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.Table";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableCell";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableRow";
"uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.records.RecordGroup";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.apis.nodes.ModuleNode";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.core.Attachable";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.HRule";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.LineBreak";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.Text";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.VRule";
"uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.records.RecordField";
"uqbar.graphs.core.Attachable" -> "uqbar.graphs.html.TableCell";
"uqbar.graphs.core.Attachable" -> "uqbar.graphs.records.RecordField";
}
"""
)
E assert 'digraph InheritanceGraph {\n graph [bgcolor=transparent,\n color=lightsteelblue2,\n fontname=Arial,\n fontsize=10,\n outputorder=edgesfirst,\n overlap=prism,\n penwidth=2,\n rankdir=LR,\n splines=spline,\n style="dashed, rounded",\n truecolor=true];\n node [colorscheme=pastel19,\n fontname=Arial,\n fontsize=10,\n height=0,\n penwidth=2,\n shape=box,\n style="filled, rounded",\n width=0];\n edge [color=lightslategrey,\n penwidth=1];\n subgraph cluster_builtins {\n graph [label=builtins];\n node [color=1];\n "builtins.BaseException" [label="Base\\nException"];\n "builtins.Exception" [label=Exception];\n "builtins.int" [label=int];\n "builtins.object" [label=object];\n "builtins.BaseException" -> "builtins.Exception";\n "builtins.object" -> "builtins.BaseException";\n "builtins.object" -> "builtins.int";\n }\n subgraph cluster_code {\n graph [label=code];\n node [color=2];\n "code.InteractiveConsole" [label="Interactive\\nConsole"];\n "code.InteractiveInterpreter" [label="Interactive\\nInterpreter"];\n "code.InteractiveInterpreter" -> "code.InteractiveConsole";\n }\n subgraph "cluster_collections.abc" {\n graph [label="collections.abc"];\n node [color=3];\n "collections.abc.Collection" [label=Collection,\n shape=oval,\n style=bold];\n "collections.abc.Container" [label=Container,\n shape=oval,\n style=bold];\n "collections.abc.Iterable" [label=Iterable,\n shape=oval,\n style=bold];\n "collections.abc.Mapping" [label=Mapping,\n shape=oval,\n style=bold];\n "collections.abc.MutableMapping" [label="Mutable\\nMapping",\n shape=oval,\n style=bold];\n "collections.abc.Sized" [label=Sized,\n shape=oval,\n style=bold];\n "collections.abc.Collection" -> "collections.abc.Mapping";\n "collections.abc.Container" -> "collections.abc.Collection";\n "collections.abc.Iterable" -> "collections.abc.Collection";\n "collections.abc.Mapping" -> "collections.abc.MutableMapping";\n "collections.abc.Sized" -> "collections.abc.Collection";\n }\n subgraph "cluster_docutils.nodes" {\n graph [label="docutils.nodes"];\n node [color=4];\n "docutils.nodes.Body" [label=Body];\n "docutils.nodes.Element" [label=Element];\n "docutils.nodes.General" [label=General];\n "docutils.nodes.Node" [label="Node"];\n "docutils.nodes.Body" -> "docutils.nodes.General";\n "docutils.nodes.Node" -> "docutils.nodes.Element";\n }\n subgraph "cluster_docutils.parsers.rst" {\n graph [label="docutils.parsers.rst"];\n node [color=5];\n "docutils.parsers.rst.Directive" [label=Directive];\n }\n subgraph cluster_enum {\n graph [label=enum];\n node [color=6];\n "enum.Enum" [label=Enum];\n "enum.IntEnum" [label="Int\\nEnum"];\n "enum.ReprEnum" [label="Repr\\nEnum"];\n "enum.Enum" -> "enum.ReprEnum";\n "enum.ReprEnum" -> "enum.IntEnum";\n }\n subgraph "cluster_uqbar.apis.builders" {\n graph [label="uqbar.apis.builders"];\n node [color=7];\n "uqbar.apis.builders.APIBuilder" [label=APIBuilder];\n }\n subgraph "cluster_uqbar.apis.documenters" {\n graph [label="uqbar.apis.documenters"];\n node [color=8];\n "uqbar.apis.documenters.ClassDocumenter" [label="Class\\nDocumenter"];\n "uqbar.apis.documenters.FunctionDocumenter" [label="Function\\nDocumenter"];\n "uqbar.apis.documenters.MemberDocumenter" [label="Member\\nDocumenter"];\n "uqbar.apis.documenters.ModuleDocumenter" [label="Module\\nDocumenter"];\n "uqbar.apis.documenters.RootDocumenter" [label="Root\\nDocumenter"];\n "uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.ClassDocumenter";\n "uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.FunctionDocumenter";\n }\n subgraph "cluster_uqbar.apis.dummy" {\n graph [label="uqbar.apis.dummy"];\n node [color=9];\n "uqbar.apis.dummy.MyChildClass" [label="My\\nChild\\nClass"];\n "uqbar.apis.dummy.MyParentClass" [label="My\\nParent\\nClass"];\n "uqbar.apis.dummy.MyParentClass" -> "uqbar.apis.dummy.MyChildClass";\n }\n subgraph "cluster_uqbar.apis.graphs" {\n graph [label="uqbar.apis.graphs"];\n node [color=1];\n "uqbar.apis.graphs.InheritanceGraph" [label="Inheritance\\nGraph"];\n }\n subgraph "cluster_uqbar.apis.nodes" {\n graph [label="uqbar.apis.nodes"];\n node [color=2];\n "uqbar.apis.nodes.ModuleNode" [label="Module\\nNode"];\n "uqbar.apis.nodes.PackageNode" [label="Package\\nNode"];\n }\n subgraph "cluster_uqbar.apis.summarizers" {\n graph [label="uqbar.apis.summarizers"];\n node [color=3];\n "uqbar.apis.summarizers.ImmaterialClassDocumenter" [label="Immaterial\\nClass\\nDocumenter"];\n "uqbar.apis.summarizers.ImmaterialModuleDocumenter" [label="Immaterial\\nModule\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingClassDocumenter" [label="Summarizing\\nClass\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingModuleDocumenter" [label="Summarizing\\nModule\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingRootDocumenter" [label="Summarizing\\nRoot\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingClassDocumenter" -> "uqbar.apis.summarizers.ImmaterialClassDocumenter";\n }\n subgraph "cluster_uqbar.book.console" {\n graph [label="uqbar.book.console"];\n node [color=4];\n "uqbar.book.console.Console" [label=Console];\n "uqbar.book.console.ConsoleError" [label="Console\\nError"];\n "uqbar.book.console.ConsoleInput" [label="Console\\nInput"];\n "uqbar.book.console.ConsoleOutput" [label="Console\\nOutput"];\n "uqbar.book.console.MonkeyPatch" [label="Monkey\\nPatch"];\n }\n subgraph "cluster_uqbar.book.extensions" {\n graph [label="uqbar.book.extensions"];\n node [color=5];\n "uqbar.book.extensions.Extension" [label=Extension];\n "uqbar.book.extensions.GraphExtension" [label="Graph\\nExtension"];\n "uqbar.book.extensions.Extension" -> "uqbar.book.extensions.GraphExtension";\n }\n subgraph "cluster_uqbar.book.sphinx" {\n graph [label="uqbar.book.sphinx"];\n node [color=6];\n "uqbar.book.sphinx.UqbarBookDefaultsDirective" [label="Uqbar\\nBook\\nDefaults\\nDirective"];\n "uqbar.book.sphinx.UqbarBookDirective" [label="Uqbar\\nBook\\nDirective"];\n "uqbar.book.sphinx.UqbarBookImportDirective" [label="Uqbar\\nBook\\nImport\\nDirective"];\n "uqbar.book.sphinx.uqbar_book_defaults_block" [label="uqbar\\nbook\\ndefaults\\nblock"];\n "uqbar.book.sphinx.uqbar_book_import_block" [label="uqbar\\nbook\\nimport\\nblock"];\n }\n subgraph "cluster_uqbar.containers.dependency_graph" {\n graph [label="uqbar.containers.dependency_graph"];\n node [color=7];\n "uqbar.containers.dependency_graph.DependencyGraph" [label="Dependency\\nGraph"];\n }\n subgraph "cluster_uqbar.containers.unique_tree" {\n graph [label="uqbar.containers.unique_tree"];\n node [color=8];\n "uqbar.containers.unique_tree.UniqueTreeContainer" [label="Unique\\nTree\\nContainer"];\n "uqbar.containers.unique_tree.UniqueTreeDict" [label="Unique\\nTree\\nDict"];\n "uqbar.containers.unique_tree.UniqueTreeList" [label="Unique\\nTree\\nList"];\n "uqbar.containers.unique_tree.UniqueTreeNode" [label="Unique\\nTree\\nNode"];\n "uqbar.containers.unique_tree.UniqueTreeSet" [label="Unique\\nTree\\nSet"];\n "uqbar.containers.unique_tree.UniqueTreeTuple" [label="Unique\\nTree\\nTuple"];\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeDict";\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeList";\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeSet";\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeTuple";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.containers.unique_tree.UniqueTreeContainer";\n }\n subgraph "cluster_uqbar.enums" {\n graph [label="uqbar.enums"];\n node [color=9];\n "uqbar.enums.IntEnumeration" [label="Int\\nEnumeration"];\n "uqbar.enums.StrictEnumeration" [label="Strict\\nEnumeration"];\n }\n subgraph "cluster_uqbar.graphs.attrs" {\n graph [label="uqbar.graphs.attrs"];\n node [color=1];\n "uqbar.graphs.attrs.Attributes" [label=Attributes];\n }\n subgraph "cluster_uqbar.graphs.core" {\n graph [label="uqbar.graphs.core"];\n node [color=2];\n "uqbar.graphs.core.Attachable" [label=Attachable];\n "uqbar.graphs.core.Edge" [label="Edge"];\n "uqbar.graphs.core.Graph" [label="Graph"];\n "uqbar.graphs.core.Node" [label="Node"];\n }\n subgraph "cluster_uqbar.graphs.graphers" {\n graph [label="uqbar.graphs.graphers"];\n node [color=3];\n "uqbar.graphs.graphers.Grapher" [label=Grapher];\n }\n subgraph "cluster_uqbar.graphs.html" {\n graph [label="uqbar.graphs.html"];\n node [color=4];\n "uqbar.graphs.html.HRule" [label=HRule];\n "uqbar.graphs.html.LineBreak" [label="Line\\nBreak"];\n "uqbar.graphs.html.Table" [label=Table];\n "uqbar.graphs.html.TableCell" [label="Table\\nCell"];\n "uqbar.graphs.html.TableRow" [label="Table\\nRow"];\n "uqbar.graphs.html.Text" [label=Text];\n "uqbar.graphs.html.VRule" [label=VRule];\n }\n subgraph "cluster_uqbar.graphs.records" {\n graph [label="uqbar.graphs.records"];\n node [color=5];\n "uqbar.graphs.records.RecordField" [label="Record\\nField"];\n "uqbar.graphs.records.RecordGroup" [label="Record\\nGroup"];\n }\n subgraph "cluster_uqbar.io" {\n graph [label="uqbar.io"];\n node [color=6];\n "uqbar.io.DirectoryChange" [color=black,\n fontcolor=white,\n label="Directory\\nChange"];\n "uqbar.io.Profiler" [color=black,\n fontcolor=white,\n label=Profiler];\n "uqbar.io.RedirectedStreams" [color=black,\n fontcolor=white,\n label="Redirected\\nStreams"];\n "uqbar.io.Timer" [color=black,\n fontcolor=white,\n label=Timer];\n }\n subgraph "cluster_uqbar.sphinx.inheritance" {\n graph [label="uqbar.sphinx.inheritance"];\n node [color=7];\n "uqbar.sphinx.inheritance.InheritanceDiagram" [label="Inheritance\\nDiagram"];\n "uqbar.sphinx.inheritance.inheritance_diagram" [label="inheritance\\ndiagram"];\n }\n "builtins.Exception" -> "uqbar.book.console.ConsoleError";\n "builtins.int" -> "enum.IntEnum";\n "builtins.object" -> "code.InteractiveInterpreter";\n "builtins.object" -> "collections.abc.Container";\n "builtins.object" -> "collections.abc.Iterable";\n "builtins.object" -> "collections.abc.Sized";\n "builtins.object" -> "docutils.nodes.Body";\n "builtins.object" -> "docutils.nodes.Node";\n "builtins.object" -> "docutils.parsers.rst.Directive";\n "builtins.object" -> "enum.Enum";\n "builtins.object" -> "uqbar.apis.builders.APIBuilder";\n "builtins.object" -> "uqbar.apis.documenters.MemberDocumenter";\n "builtins.object" -> "uqbar.apis.documenters.ModuleDocumenter";\n "builtins.object" -> "uqbar.apis.documenters.RootDocumenter";\n "builtins.object" -> "uqbar.apis.dummy.MyParentClass";\n "builtins.object" -> "uqbar.apis.graphs.InheritanceGraph";\n "builtins.object" -> "uqbar.book.console.ConsoleInput";\n "builtins.object" -> "uqbar.book.console.ConsoleOutput";\n "builtins.object" -> "uqbar.book.console.MonkeyPatch";\n "builtins.object" -> "uqbar.book.extensions.Extension";\n "builtins.object" -> "uqbar.containers.dependency_graph.DependencyGraph";\n "builtins.object" -> "uqbar.containers.unique_tree.UniqueTreeNode";\n "builtins.object" -> "uqbar.graphs.core.Edge";\n "builtins.object" -> "uqbar.graphs.graphers.Grapher";\n "builtins.object" -> "uqbar.io.DirectoryChange";\n "builtins.object" -> "uqbar.io.Profiler";\n "builtins.object" -> "uqbar.io.RedirectedStreams";\n "builtins.object" -> "uqbar.io.Timer";\n "code.InteractiveConsole" -> "uqbar.book.console.Console";\n "collections.abc.MutableMapping" -> "uqbar.graphs.attrs.Attributes";\n "docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_defaults_block";\n "docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_import_block";\n "docutils.nodes.Element" -> "uqbar.sphinx.inheritance.inheritance_diagram";\n "docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_defaults_block";\n "docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_import_block";\n "docutils.nodes.General" -> "uqbar.sphinx.inheritance.inheritance_diagram";\n "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDefaultsDirective";\n "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDirective";\n "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookImportDirective";\n "docutils.parsers.rst.Directive" -> "uqbar.sphinx.inheritance.InheritanceDiagram";\n "enum.Enum" -> "uqbar.enums.StrictEnumeration";\n "enum.IntEnum" -> "uqbar.enums.IntEnumeration";\n "uqbar.apis.documenters.ClassDocumenter" -> "uqbar.apis.summarizers.SummarizingClassDocumenter";\n "uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.ImmaterialModuleDocumenter";\n "uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.SummarizingModuleDocumenter";\n "uqbar.apis.documenters.RootDocumenter" -> "uqbar.apis.summarizers.SummarizingRootDocumenter";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.apis.nodes.PackageNode";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Graph";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Node";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.Table";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableCell";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableRow";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.records.RecordGroup";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.apis.nodes.ModuleNode";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.core.Attachable";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.HRule";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.LineBreak";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.Text";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.VRule";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.records.RecordField";\n "uqbar.graphs.core.Attachable" -> "uqbar.graphs.html.TableCell";\n "uqbar.graphs.core.Attachable" -> "uqbar.graphs.records.RecordField";\n}' == 'digraph InheritanceGraph {\n graph [bgcolor=transparent,\n color=lightsteelblue2,\n fontname=Arial,\n fontsize=10,\n outputorder=edgesfirst,\n overlap=prism,\n penwidth=2,\n rankdir=LR,\n splines=spline,\n style="dashed, rounded",\n truecolor=true];\n node [colorscheme=pastel19,\n fontname=Arial,\n fontsize=10,\n height=0,\n penwidth=2,\n shape=box,\n style="filled, rounded",\n width=0];\n edge [color=lightslategrey,\n penwidth=1];\n subgraph cluster_builtins {\n graph [label=builtins];\n node [color=1];\n "builtins.BaseException" [label="Base\\nException"];\n "builtins.Exception" [label=Exception];\n "builtins.int" [label=int];\n "builtins.object" [label=object];\n "builtins.BaseException" -> "builtins.Exception";\n "builtins.object" -> "builtins.BaseException";\n "builtins.object" -> "builtins.int";\n }\n subgraph cluster_code {\n graph [label=code];\n node [color=2];\n "code.InteractiveConsole" [label="Interactive\\nConsole"];\n "code.InteractiveInterpreter" [label="Interactive\\nInterpreter"];\n "code.InteractiveInterpreter" -> "code.InteractiveConsole";\n }\n subgraph "cluster_collections.abc" {\n graph [label="collections.abc"];\n node [color=3];\n "collections.abc.Collection" [label=Collection,\n shape=oval,\n style=bold];\n "collections.abc.Container" [label=Container,\n shape=oval,\n style=bold];\n "collections.abc.Iterable" [label=Iterable,\n shape=oval,\n style=bold];\n "collections.abc.Mapping" [label=Mapping,\n shape=oval,\n style=bold];\n "collections.abc.MutableMapping" [label="Mutable\\nMapping",\n shape=oval,\n style=bold];\n "collections.abc.Sized" [label=Sized,\n shape=oval,\n style=bold];\n "collections.abc.Collection" -> "collections.abc.Mapping";\n "collections.abc.Container" -> "collections.abc.Collection";\n "collections.abc.Iterable" -> "collections.abc.Collection";\n "collections.abc.Mapping" -> "collections.abc.MutableMapping";\n "collections.abc.Sized" -> "collections.abc.Collection";\n }\n subgraph "cluster_docutils.nodes" {\n graph [label="docutils.nodes"];\n node [color=4];\n "docutils.nodes.Body" [label=Body];\n "docutils.nodes.Element" [label=Element];\n "docutils.nodes.General" [label=General];\n "docutils.nodes.Node" [label="Node"];\n "docutils.nodes.Body" -> "docutils.nodes.General";\n "docutils.nodes.Node" -> "docutils.nodes.Element";\n }\n subgraph "cluster_docutils.parsers.rst" {\n graph [label="docutils.parsers.rst"];\n node [color=5];\n "docutils.parsers.rst.Directive" [label=Directive];\n }\n subgraph cluster_enum {\n graph [label=enum];\n node [color=6];\n "enum.Enum" [label=Enum];\n "enum.IntEnum" [label="Int\\nEnum"];\n "enum.Enum" -> "enum.IntEnum";\n }\n subgraph "cluster_uqbar.apis.builders" {\n graph [label="uqbar.apis.builders"];\n node [color=7];\n "uqbar.apis.builders.APIBuilder" [label=APIBuilder];\n }\n subgraph "cluster_uqbar.apis.documenters" {\n graph [label="uqbar.apis.documenters"];\n node [color=8];\n "uqbar.apis.documenters.ClassDocumenter" [label="Class\\nDocumenter"];\n "uqbar.apis.documenters.FunctionDocumenter" [label="Function\\nDocumenter"];\n "uqbar.apis.documenters.MemberDocumenter" [label="Member\\nDocumenter"];\n "uqbar.apis.documenters.ModuleDocumenter" [label="Module\\nDocumenter"];\n "uqbar.apis.documenters.RootDocumenter" [label="Root\\nDocumenter"];\n "uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.ClassDocumenter";\n "uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.FunctionDocumenter";\n }\n subgraph "cluster_uqbar.apis.dummy" {\n graph [label="uqbar.apis.dummy"];\n node [color=9];\n "uqbar.apis.dummy.MyChildClass" [label="My\\nChild\\nClass"];\n "uqbar.apis.dummy.MyParentClass" [label="My\\nParent\\nClass"];\n "uqbar.apis.dummy.MyParentClass" -> "uqbar.apis.dummy.MyChildClass";\n }\n subgraph "cluster_uqbar.apis.graphs" {\n graph [label="uqbar.apis.graphs"];\n node [color=1];\n "uqbar.apis.graphs.InheritanceGraph" [label="Inheritance\\nGraph"];\n }\n subgraph "cluster_uqbar.apis.nodes" {\n graph [label="uqbar.apis.nodes"];\n node [color=2];\n "uqbar.apis.nodes.ModuleNode" [label="Module\\nNode"];\n "uqbar.apis.nodes.PackageNode" [label="Package\\nNode"];\n }\n subgraph "cluster_uqbar.apis.summarizers" {\n graph [label="uqbar.apis.summarizers"];\n node [color=3];\n "uqbar.apis.summarizers.ImmaterialClassDocumenter" [label="Immaterial\\nClass\\nDocumenter"];\n "uqbar.apis.summarizers.ImmaterialModuleDocumenter" [label="Immaterial\\nModule\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingClassDocumenter" [label="Summarizing\\nClass\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingModuleDocumenter" [label="Summarizing\\nModule\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingRootDocumenter" [label="Summarizing\\nRoot\\nDocumenter"];\n "uqbar.apis.summarizers.SummarizingClassDocumenter" -> "uqbar.apis.summarizers.ImmaterialClassDocumenter";\n }\n subgraph "cluster_uqbar.book.console" {\n graph [label="uqbar.book.console"];\n node [color=4];\n "uqbar.book.console.Console" [label=Console];\n "uqbar.book.console.ConsoleError" [label="Console\\nError"];\n "uqbar.book.console.ConsoleInput" [label="Console\\nInput"];\n "uqbar.book.console.ConsoleOutput" [label="Console\\nOutput"];\n "uqbar.book.console.MonkeyPatch" [label="Monkey\\nPatch"];\n }\n subgraph "cluster_uqbar.book.extensions" {\n graph [label="uqbar.book.extensions"];\n node [color=5];\n "uqbar.book.extensions.Extension" [label=Extension];\n "uqbar.book.extensions.GraphExtension" [label="Graph\\nExtension"];\n "uqbar.book.extensions.Extension" -> "uqbar.book.extensions.GraphExtension";\n }\n subgraph "cluster_uqbar.book.sphinx" {\n graph [label="uqbar.book.sphinx"];\n node [color=6];\n "uqbar.book.sphinx.UqbarBookDefaultsDirective" [label="Uqbar\\nBook\\nDefaults\\nDirective"];\n "uqbar.book.sphinx.UqbarBookDirective" [label="Uqbar\\nBook\\nDirective"];\n "uqbar.book.sphinx.UqbarBookImportDirective" [label="Uqbar\\nBook\\nImport\\nDirective"];\n "uqbar.book.sphinx.uqbar_book_defaults_block" [label="uqbar\\nbook\\ndefaults\\nblock"];\n "uqbar.book.sphinx.uqbar_book_import_block" [label="uqbar\\nbook\\nimport\\nblock"];\n }\n subgraph "cluster_uqbar.containers.dependency_graph" {\n graph [label="uqbar.containers.dependency_graph"];\n node [color=7];\n "uqbar.containers.dependency_graph.DependencyGraph" [label="Dependency\\nGraph"];\n }\n subgraph "cluster_uqbar.containers.unique_tree" {\n graph [label="uqbar.containers.unique_tree"];\n node [color=8];\n "uqbar.containers.unique_tree.UniqueTreeContainer" [label="Unique\\nTree\\nContainer"];\n "uqbar.containers.unique_tree.UniqueTreeDict" [label="Unique\\nTree\\nDict"];\n "uqbar.containers.unique_tree.UniqueTreeList" [label="Unique\\nTree\\nList"];\n "uqbar.containers.unique_tree.UniqueTreeNode" [label="Unique\\nTree\\nNode"];\n "uqbar.containers.unique_tree.UniqueTreeSet" [label="Unique\\nTree\\nSet"];\n "uqbar.containers.unique_tree.UniqueTreeTuple" [label="Unique\\nTree\\nTuple"];\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeDict";\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeList";\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeSet";\n "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeTuple";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.containers.unique_tree.UniqueTreeContainer";\n }\n subgraph "cluster_uqbar.enums" {\n graph [label="uqbar.enums"];\n node [color=9];\n "uqbar.enums.IntEnumeration" [label="Int\\nEnumeration"];\n "uqbar.enums.StrictEnumeration" [label="Strict\\nEnumeration"];\n }\n subgraph "cluster_uqbar.graphs.attrs" {\n graph [label="uqbar.graphs.attrs"];\n node [color=1];\n "uqbar.graphs.attrs.Attributes" [label=Attributes];\n }\n subgraph "cluster_uqbar.graphs.core" {\n graph [label="uqbar.graphs.core"];\n node [color=2];\n "uqbar.graphs.core.Attachable" [label=Attachable];\n "uqbar.graphs.core.Edge" [label="Edge"];\n "uqbar.graphs.core.Graph" [label="Graph"];\n "uqbar.graphs.core.Node" [label="Node"];\n }\n subgraph "cluster_uqbar.graphs.graphers" {\n graph [label="uqbar.graphs.graphers"];\n node [color=3];\n "uqbar.graphs.graphers.Grapher" [label=Grapher];\n }\n subgraph "cluster_uqbar.graphs.html" {\n graph [label="uqbar.graphs.html"];\n node [color=4];\n "uqbar.graphs.html.HRule" [label=HRule];\n "uqbar.graphs.html.LineBreak" [label="Line\\nBreak"];\n "uqbar.graphs.html.Table" [label=Table];\n "uqbar.graphs.html.TableCell" [label="Table\\nCell"];\n "uqbar.graphs.html.TableRow" [label="Table\\nRow"];\n "uqbar.graphs.html.Text" [label=Text];\n "uqbar.graphs.html.VRule" [label=VRule];\n }\n subgraph "cluster_uqbar.graphs.records" {\n graph [label="uqbar.graphs.records"];\n node [color=5];\n "uqbar.graphs.records.RecordField" [label="Record\\nField"];\n "uqbar.graphs.records.RecordGroup" [label="Record\\nGroup"];\n }\n subgraph "cluster_uqbar.io" {\n graph [label="uqbar.io"];\n node [color=6];\n "uqbar.io.DirectoryChange" [color=black,\n fontcolor=white,\n label="Directory\\nChange"];\n "uqbar.io.Profiler" [color=black,\n fontcolor=white,\n label=Profiler];\n "uqbar.io.RedirectedStreams" [color=black,\n fontcolor=white,\n label="Redirected\\nStreams"];\n "uqbar.io.Timer" [color=black,\n fontcolor=white,\n label=Timer];\n }\n subgraph "cluster_uqbar.sphinx.inheritance" {\n graph [label="uqbar.sphinx.inheritance"];\n node [color=7];\n "uqbar.sphinx.inheritance.InheritanceDiagram" [label="Inheritance\\nDiagram"];\n "uqbar.sphinx.inheritance.inheritance_diagram" [label="inheritance\\ndiagram"];\n }\n "builtins.Exception" -> "uqbar.book.console.ConsoleError";\n "builtins.int" -> "enum.IntEnum";\n "builtins.object" -> "code.InteractiveInterpreter";\n "builtins.object" -> "collections.abc.Container";\n "builtins.object" -> "collections.abc.Iterable";\n "builtins.object" -> "collections.abc.Sized";\n "builtins.object" -> "docutils.nodes.Body";\n "builtins.object" -> "docutils.nodes.Node";\n "builtins.object" -> "docutils.parsers.rst.Directive";\n "builtins.object" -> "enum.Enum";\n "builtins.object" -> "uqbar.apis.builders.APIBuilder";\n "builtins.object" -> "uqbar.apis.documenters.MemberDocumenter";\n "builtins.object" -> "uqbar.apis.documenters.ModuleDocumenter";\n "builtins.object" -> "uqbar.apis.documenters.RootDocumenter";\n "builtins.object" -> "uqbar.apis.dummy.MyParentClass";\n "builtins.object" -> "uqbar.apis.graphs.InheritanceGraph";\n "builtins.object" -> "uqbar.book.console.ConsoleInput";\n "builtins.object" -> "uqbar.book.console.ConsoleOutput";\n "builtins.object" -> "uqbar.book.console.MonkeyPatch";\n "builtins.object" -> "uqbar.book.extensions.Extension";\n "builtins.object" -> "uqbar.containers.dependency_graph.DependencyGraph";\n "builtins.object" -> "uqbar.containers.unique_tree.UniqueTreeNode";\n "builtins.object" -> "uqbar.graphs.core.Edge";\n "builtins.object" -> "uqbar.graphs.graphers.Grapher";\n "builtins.object" -> "uqbar.io.DirectoryChange";\n "builtins.object" -> "uqbar.io.Profiler";\n "builtins.object" -> "uqbar.io.RedirectedStreams";\n "builtins.object" -> "uqbar.io.Timer";\n "code.InteractiveConsole" -> "uqbar.book.console.Console";\n "collections.abc.MutableMapping" -> "uqbar.graphs.attrs.Attributes";\n "docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_defaults_block";\n "docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_import_block";\n "docutils.nodes.Element" -> "uqbar.sphinx.inheritance.inheritance_diagram";\n "docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_defaults_block";\n "docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_import_block";\n "docutils.nodes.General" -> "uqbar.sphinx.inheritance.inheritance_diagram";\n "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDefaultsDirective";\n "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDirective";\n "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookImportDirective";\n "docutils.parsers.rst.Directive" -> "uqbar.sphinx.inheritance.InheritanceDiagram";\n "enum.Enum" -> "uqbar.enums.StrictEnumeration";\n "enum.IntEnum" -> "uqbar.enums.IntEnumeration";\n "uqbar.apis.documenters.ClassDocumenter" -> "uqbar.apis.summarizers.SummarizingClassDocumenter";\n "uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.ImmaterialModuleDocumenter";\n "uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.SummarizingModuleDocumenter";\n "uqbar.apis.documenters.RootDocumenter" -> "uqbar.apis.summarizers.SummarizingRootDocumenter";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.apis.nodes.PackageNode";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Graph";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Node";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.Table";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableCell";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableRow";\n "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.records.RecordGroup";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.apis.nodes.ModuleNode";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.core.Attachable";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.HRule";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.LineBreak";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.Text";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.VRule";\n "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.records.RecordField";\n "uqbar.graphs.core.Attachable" -> "uqbar.graphs.html.TableCell";\n "uqbar.graphs.core.Attachable" -> "uqbar.graphs.records.RecordField";\n}'
E digraph InheritanceGraph {
E graph [bgcolor=transparent,
E color=lightsteelblue2,
E fontname=Arial,
E fontsize=10,
E outputorder=edgesfirst,
E overlap=prism,
E penwidth=2,
E rankdir=LR,
E splines=spline,
E style="dashed, rounded",
E truecolor=true];
E node [colorscheme=pastel19,
E fontname=Arial,
E fontsize=10,
E height=0,
E penwidth=2,
E shape=box,
E style="filled, rounded",
E width=0];
E edge [color=lightslategrey,
E penwidth=1];
E subgraph cluster_builtins {
E graph [label=builtins];
E node [color=1];
E "builtins.BaseException" [label="Base\nException"];
E "builtins.Exception" [label=Exception];
E "builtins.int" [label=int];
E "builtins.object" [label=object];
E "builtins.BaseException" -> "builtins.Exception";
E "builtins.object" -> "builtins.BaseException";
E "builtins.object" -> "builtins.int";
E }
E subgraph cluster_code {
E graph [label=code];
E node [color=2];
E "code.InteractiveConsole" [label="Interactive\nConsole"];
E "code.InteractiveInterpreter" [label="Interactive\nInterpreter"];
E "code.InteractiveInterpreter" -> "code.InteractiveConsole";
E }
E subgraph "cluster_collections.abc" {
E graph [label="collections.abc"];
E node [color=3];
E "collections.abc.Collection" [label=Collection,
E shape=oval,
E style=bold];
E "collections.abc.Container" [label=Container,
E shape=oval,
E style=bold];
E "collections.abc.Iterable" [label=Iterable,
E shape=oval,
E style=bold];
E "collections.abc.Mapping" [label=Mapping,
E shape=oval,
E style=bold];
E "collections.abc.MutableMapping" [label="Mutable\nMapping",
E shape=oval,
E style=bold];
E "collections.abc.Sized" [label=Sized,
E shape=oval,
E style=bold];
E "collections.abc.Collection" -> "collections.abc.Mapping";
E "collections.abc.Container" -> "collections.abc.Collection";
E "collections.abc.Iterable" -> "collections.abc.Collection";
E "collections.abc.Mapping" -> "collections.abc.MutableMapping";
E "collections.abc.Sized" -> "collections.abc.Collection";
E }
E subgraph "cluster_docutils.nodes" {
E graph [label="docutils.nodes"];
E node [color=4];
E "docutils.nodes.Body" [label=Body];
E "docutils.nodes.Element" [label=Element];
E "docutils.nodes.General" [label=General];
E "docutils.nodes.Node" [label="Node"];
E "docutils.nodes.Body" -> "docutils.nodes.General";
E "docutils.nodes.Node" -> "docutils.nodes.Element";
E }
E subgraph "cluster_docutils.parsers.rst" {
E graph [label="docutils.parsers.rst"];
E node [color=5];
E "docutils.parsers.rst.Directive" [label=Directive];
E }
E subgraph cluster_enum {
E graph [label=enum];
E node [color=6];
E "enum.Enum" [label=Enum];
E "enum.IntEnum" [label="Int\nEnum"];
E + "enum.ReprEnum" [label="Repr\nEnum"];
E + "enum.Enum" -> "enum.ReprEnum";
E - "enum.Enum" -> "enum.IntEnum";
E + "enum.ReprEnum" -> "enum.IntEnum";
E ? ++++
E }
E subgraph "cluster_uqbar.apis.builders" {
E graph [label="uqbar.apis.builders"];
E node [color=7];
E "uqbar.apis.builders.APIBuilder" [label=APIBuilder];
E }
E subgraph "cluster_uqbar.apis.documenters" {
E graph [label="uqbar.apis.documenters"];
E node [color=8];
E "uqbar.apis.documenters.ClassDocumenter" [label="Class\nDocumenter"];
E "uqbar.apis.documenters.FunctionDocumenter" [label="Function\nDocumenter"];
E "uqbar.apis.documenters.MemberDocumenter" [label="Member\nDocumenter"];
E "uqbar.apis.documenters.ModuleDocumenter" [label="Module\nDocumenter"];
E "uqbar.apis.documenters.RootDocumenter" [label="Root\nDocumenter"];
E "uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.ClassDocumenter";
E "uqbar.apis.documenters.MemberDocumenter" -> "uqbar.apis.documenters.FunctionDocumenter";
E }
E subgraph "cluster_uqbar.apis.dummy" {
E graph [label="uqbar.apis.dummy"];
E node [color=9];
E "uqbar.apis.dummy.MyChildClass" [label="My\nChild\nClass"];
E "uqbar.apis.dummy.MyParentClass" [label="My\nParent\nClass"];
E "uqbar.apis.dummy.MyParentClass" -> "uqbar.apis.dummy.MyChildClass";
E }
E subgraph "cluster_uqbar.apis.graphs" {
E graph [label="uqbar.apis.graphs"];
E node [color=1];
E "uqbar.apis.graphs.InheritanceGraph" [label="Inheritance\nGraph"];
E }
E subgraph "cluster_uqbar.apis.nodes" {
E graph [label="uqbar.apis.nodes"];
E node [color=2];
E "uqbar.apis.nodes.ModuleNode" [label="Module\nNode"];
E "uqbar.apis.nodes.PackageNode" [label="Package\nNode"];
E }
E subgraph "cluster_uqbar.apis.summarizers" {
E graph [label="uqbar.apis.summarizers"];
E node [color=3];
E "uqbar.apis.summarizers.ImmaterialClassDocumenter" [label="Immaterial\nClass\nDocumenter"];
E "uqbar.apis.summarizers.ImmaterialModuleDocumenter" [label="Immaterial\nModule\nDocumenter"];
E "uqbar.apis.summarizers.SummarizingClassDocumenter" [label="Summarizing\nClass\nDocumenter"];
E "uqbar.apis.summarizers.SummarizingModuleDocumenter" [label="Summarizing\nModule\nDocumenter"];
E "uqbar.apis.summarizers.SummarizingRootDocumenter" [label="Summarizing\nRoot\nDocumenter"];
E "uqbar.apis.summarizers.SummarizingClassDocumenter" -> "uqbar.apis.summarizers.ImmaterialClassDocumenter";
E }
E subgraph "cluster_uqbar.book.console" {
E graph [label="uqbar.book.console"];
E node [color=4];
E "uqbar.book.console.Console" [label=Console];
E "uqbar.book.console.ConsoleError" [label="Console\nError"];
E "uqbar.book.console.ConsoleInput" [label="Console\nInput"];
E "uqbar.book.console.ConsoleOutput" [label="Console\nOutput"];
E "uqbar.book.console.MonkeyPatch" [label="Monkey\nPatch"];
E }
E subgraph "cluster_uqbar.book.extensions" {
E graph [label="uqbar.book.extensions"];
E node [color=5];
E "uqbar.book.extensions.Extension" [label=Extension];
E "uqbar.book.extensions.GraphExtension" [label="Graph\nExtension"];
E "uqbar.book.extensions.Extension" -> "uqbar.book.extensions.GraphExtension";
E }
E subgraph "cluster_uqbar.book.sphinx" {
E graph [label="uqbar.book.sphinx"];
E node [color=6];
E "uqbar.book.sphinx.UqbarBookDefaultsDirective" [label="Uqbar\nBook\nDefaults\nDirective"];
E "uqbar.book.sphinx.UqbarBookDirective" [label="Uqbar\nBook\nDirective"];
E "uqbar.book.sphinx.UqbarBookImportDirective" [label="Uqbar\nBook\nImport\nDirective"];
E "uqbar.book.sphinx.uqbar_book_defaults_block" [label="uqbar\nbook\ndefaults\nblock"];
E "uqbar.book.sphinx.uqbar_book_import_block" [label="uqbar\nbook\nimport\nblock"];
E }
E subgraph "cluster_uqbar.containers.dependency_graph" {
E graph [label="uqbar.containers.dependency_graph"];
E node [color=7];
E "uqbar.containers.dependency_graph.DependencyGraph" [label="Dependency\nGraph"];
E }
E subgraph "cluster_uqbar.containers.unique_tree" {
E graph [label="uqbar.containers.unique_tree"];
E node [color=8];
E "uqbar.containers.unique_tree.UniqueTreeContainer" [label="Unique\nTree\nContainer"];
E "uqbar.containers.unique_tree.UniqueTreeDict" [label="Unique\nTree\nDict"];
E "uqbar.containers.unique_tree.UniqueTreeList" [label="Unique\nTree\nList"];
E "uqbar.containers.unique_tree.UniqueTreeNode" [label="Unique\nTree\nNode"];
E "uqbar.containers.unique_tree.UniqueTreeSet" [label="Unique\nTree\nSet"];
E "uqbar.containers.unique_tree.UniqueTreeTuple" [label="Unique\nTree\nTuple"];
E "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeDict";
E "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeList";
E "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeSet";
E "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeTuple";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.containers.unique_tree.UniqueTreeContainer";
E }
E subgraph "cluster_uqbar.enums" {
E graph [label="uqbar.enums"];
E node [color=9];
E "uqbar.enums.IntEnumeration" [label="Int\nEnumeration"];
E "uqbar.enums.StrictEnumeration" [label="Strict\nEnumeration"];
E }
E subgraph "cluster_uqbar.graphs.attrs" {
E graph [label="uqbar.graphs.attrs"];
E node [color=1];
E "uqbar.graphs.attrs.Attributes" [label=Attributes];
E }
E subgraph "cluster_uqbar.graphs.core" {
E graph [label="uqbar.graphs.core"];
E node [color=2];
E "uqbar.graphs.core.Attachable" [label=Attachable];
E "uqbar.graphs.core.Edge" [label="Edge"];
E "uqbar.graphs.core.Graph" [label="Graph"];
E "uqbar.graphs.core.Node" [label="Node"];
E }
E subgraph "cluster_uqbar.graphs.graphers" {
E graph [label="uqbar.graphs.graphers"];
E node [color=3];
E "uqbar.graphs.graphers.Grapher" [label=Grapher];
E }
E subgraph "cluster_uqbar.graphs.html" {
E graph [label="uqbar.graphs.html"];
E node [color=4];
E "uqbar.graphs.html.HRule" [label=HRule];
E "uqbar.graphs.html.LineBreak" [label="Line\nBreak"];
E "uqbar.graphs.html.Table" [label=Table];
E "uqbar.graphs.html.TableCell" [label="Table\nCell"];
E "uqbar.graphs.html.TableRow" [label="Table\nRow"];
E "uqbar.graphs.html.Text" [label=Text];
E "uqbar.graphs.html.VRule" [label=VRule];
E }
E subgraph "cluster_uqbar.graphs.records" {
E graph [label="uqbar.graphs.records"];
E node [color=5];
E "uqbar.graphs.records.RecordField" [label="Record\nField"];
E "uqbar.graphs.records.RecordGroup" [label="Record\nGroup"];
E }
E subgraph "cluster_uqbar.io" {
E graph [label="uqbar.io"];
E node [color=6];
E "uqbar.io.DirectoryChange" [color=black,
E fontcolor=white,
E label="Directory\nChange"];
E "uqbar.io.Profiler" [color=black,
E fontcolor=white,
E label=Profiler];
E "uqbar.io.RedirectedStreams" [color=black,
E fontcolor=white,
E label="Redirected\nStreams"];
E "uqbar.io.Timer" [color=black,
E fontcolor=white,
E label=Timer];
E }
E subgraph "cluster_uqbar.sphinx.inheritance" {
E graph [label="uqbar.sphinx.inheritance"];
E node [color=7];
E "uqbar.sphinx.inheritance.InheritanceDiagram" [label="Inheritance\nDiagram"];
E "uqbar.sphinx.inheritance.inheritance_diagram" [label="inheritance\ndiagram"];
E }
E "builtins.Exception" -> "uqbar.book.console.ConsoleError";
E "builtins.int" -> "enum.IntEnum";
E "builtins.object" -> "code.InteractiveInterpreter";
E "builtins.object" -> "collections.abc.Container";
E "builtins.object" -> "collections.abc.Iterable";
E "builtins.object" -> "collections.abc.Sized";
E "builtins.object" -> "docutils.nodes.Body";
E "builtins.object" -> "docutils.nodes.Node";
E "builtins.object" -> "docutils.parsers.rst.Directive";
E "builtins.object" -> "enum.Enum";
E "builtins.object" -> "uqbar.apis.builders.APIBuilder";
E "builtins.object" -> "uqbar.apis.documenters.MemberDocumenter";
E "builtins.object" -> "uqbar.apis.documenters.ModuleDocumenter";
E "builtins.object" -> "uqbar.apis.documenters.RootDocumenter";
E "builtins.object" -> "uqbar.apis.dummy.MyParentClass";
E "builtins.object" -> "uqbar.apis.graphs.InheritanceGraph";
E "builtins.object" -> "uqbar.book.console.ConsoleInput";
E "builtins.object" -> "uqbar.book.console.ConsoleOutput";
E "builtins.object" -> "uqbar.book.console.MonkeyPatch";
E "builtins.object" -> "uqbar.book.extensions.Extension";
E "builtins.object" -> "uqbar.containers.dependency_graph.DependencyGraph";
E "builtins.object" -> "uqbar.containers.unique_tree.UniqueTreeNode";
E "builtins.object" -> "uqbar.graphs.core.Edge";
E "builtins.object" -> "uqbar.graphs.graphers.Grapher";
E "builtins.object" -> "uqbar.io.DirectoryChange";
E "builtins.object" -> "uqbar.io.Profiler";
E "builtins.object" -> "uqbar.io.RedirectedStreams";
E "builtins.object" -> "uqbar.io.Timer";
E "code.InteractiveConsole" -> "uqbar.book.console.Console";
E "collections.abc.MutableMapping" -> "uqbar.graphs.attrs.Attributes";
E "docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_defaults_block";
E "docutils.nodes.Element" -> "uqbar.book.sphinx.uqbar_book_import_block";
E "docutils.nodes.Element" -> "uqbar.sphinx.inheritance.inheritance_diagram";
E "docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_defaults_block";
E "docutils.nodes.General" -> "uqbar.book.sphinx.uqbar_book_import_block";
E "docutils.nodes.General" -> "uqbar.sphinx.inheritance.inheritance_diagram";
E "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDefaultsDirective";
E "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookDirective";
E "docutils.parsers.rst.Directive" -> "uqbar.book.sphinx.UqbarBookImportDirective";
E "docutils.parsers.rst.Directive" -> "uqbar.sphinx.inheritance.InheritanceDiagram";
E "enum.Enum" -> "uqbar.enums.StrictEnumeration";
E "enum.IntEnum" -> "uqbar.enums.IntEnumeration";
E "uqbar.apis.documenters.ClassDocumenter" -> "uqbar.apis.summarizers.SummarizingClassDocumenter";
E "uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.ImmaterialModuleDocumenter";
E "uqbar.apis.documenters.ModuleDocumenter" -> "uqbar.apis.summarizers.SummarizingModuleDocumenter";
E "uqbar.apis.documenters.RootDocumenter" -> "uqbar.apis.summarizers.SummarizingRootDocumenter";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.apis.nodes.PackageNode";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Graph";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.core.Node";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.Table";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableCell";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.html.TableRow";
E "uqbar.containers.unique_tree.UniqueTreeList" -> "uqbar.graphs.records.RecordGroup";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.apis.nodes.ModuleNode";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.core.Attachable";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.HRule";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.LineBreak";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.Text";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.html.VRule";
E "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.graphs.records.RecordField";
E "uqbar.graphs.core.Attachable" -> "uqbar.graphs.html.TableCell";
E "uqbar.graphs.core.Attachable" -> "uqbar.graphs.records.RecordField";
E }
tests/test_apis_InheritanceGraph.py:181: AssertionError
_________________________________ test_str_04 __________________________________
test_path = None
def test_str_04(test_path):
documenter = uqbar.apis.SummarizingClassDocumenter("fake_package.enums.FakeEnum")
> assert normalize(str(documenter)) == normalize(
"""
.. autoclass:: FakeEnum
:members:
:undoc-members:
"""
)
E AssertionError: assert '.. autoclass:: FakeEnum\n :members:\n :undoc-members:\n\n .. raw:: html\n\n <hr/>\n\n .. rubric:: Special methods\n :class: class-header\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__abs__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__add__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__and__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__bool__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__ceil__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__contains__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__dir__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__divmod__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__eq__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__float__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__floor__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__floordiv__\n\n .. automethod:: FakeEnum.__format__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__ge__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__getitem__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__gt__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__hash__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__index__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__int__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__invert__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__iter__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__le__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__len__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__lshift__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__lt__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__mod__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__mul__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__ne__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__neg__\n\n .. automethod:: FakeEnum.__new__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__or__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__pos__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__pow__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__radd__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rand__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rdivmod__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__repr__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rfloordiv__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rlshift__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rmod__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rmul__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__ror__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__round__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rpow__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rrshift__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rshift__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rsub__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rtruediv__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__rxor__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__str__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__sub__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__truediv__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__trunc__\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.__xor__\n\n .. raw:: html\n\n <hr/>\n\n .. rubric:: Methods\n :class: class-header\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.as_integer_ratio\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.bit_count\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.bit_length\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.conjugate\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.to_bytes\n\n .. raw:: html\n\n <hr/>\n\n .. rubric:: Class & static methods\n :class: class-header\n\n .. container:: inherited\n\n .. automethod:: FakeEnum.from_bytes' == '.. autoclass:: FakeEnum\n :members:\n :undoc-members:'
E .. autoclass:: FakeEnum
E :members:
E - :undoc-members:
E + :undoc-members:
E ? +
E +
E + .. raw:: html
E +
E + <hr/>
E +
E + .. rubric:: Special methods
E + :class: class-header
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__abs__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__add__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__and__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__bool__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__ceil__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__contains__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__dir__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__divmod__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__eq__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__float__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__floor__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__floordiv__
E +
E + .. automethod:: FakeEnum.__format__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__ge__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__getitem__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__gt__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__hash__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__index__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__int__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__invert__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__iter__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__le__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__len__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__lshift__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__lt__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__mod__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__mul__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__ne__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__neg__
E +
E + .. automethod:: FakeEnum.__new__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__or__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__pos__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__pow__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__radd__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rand__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rdivmod__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__repr__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rfloordiv__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rlshift__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rmod__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rmul__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__ror__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__round__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rpow__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rrshift__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rshift__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rsub__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rtruediv__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__rxor__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__str__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__sub__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__truediv__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__trunc__
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.__xor__
E +
E + .. raw:: html
E +
E + <hr/>
E +
E + .. rubric:: Methods
E + :class: class-header
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.as_integer_ratio
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.bit_count
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.bit_length
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.conjugate
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.to_bytes
E +
E + .. raw:: html
E +
E + <hr/>
E +
E + .. rubric:: Class & static methods
E + :class: class-header
E +
E + .. container:: inherited
E +
E + .. automethod:: FakeEnum.from_bytes
tests/test_apis_SummarizingClassDocumenter.py:200: AssertionError
______________________________ test_sphinx_api_2 _______________________________
app = <SphinxTestApp buildername='text'>
status = <_io.StringIO object at 0x7fbb311de440>
warning = <_io.StringIO object at 0x7fbb339afeb0>
@pytest.mark.sphinx("text", testroot="uqbar-sphinx-api-2")
def test_sphinx_api_2(app, status, warning):
app.build()
index_source = pathlib.Path(app.srcdir) / "api" / "index.rst"
assert index_source.exists()
assert "build succeeded" in status.getvalue()
assert "8 added, 0 changed, 0 removed" in status.getvalue()
assert "0 added, 0 changed, 0 removed" not in status.getvalue()
> assert not warning.getvalue().strip()
E AssertionError: assert not '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m'
E + where '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m' = <built-in method strip of str object at 0x7fbb30d5e0d0>()
E + where <built-in method strip of str object at 0x7fbb30d5e0d0> = '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n'.strip
E + where '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n' = <built-in method getvalue of _io.StringIO object at 0x7fbb339afeb0>()
E + where <built-in method getvalue of _io.StringIO object at 0x7fbb339afeb0> = <_io.StringIO object at 0x7fbb339afeb0>.getvalue
tests/test_sphinx_api.py:95: AssertionError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: text
# srcdir: /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2
# outdir: /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/_build/text
# status:
[01mRunning Sphinx v5.3.0[39;49;00m
[autosummary] generating autosummary for: index.rst
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/index.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/fake_package/index.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/fake_package/enums.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/fake_package/module.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/fake_package/multi/index.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/fake_package/multi/one.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/api/fake_package/multi/two.rst[39;49;00m
[01mbuilding [mo]: [39;49;00mtargets for 0 po files that are out of date
[01mbuilding [text]: [39;49;00mtargets for 1 source files that are out of date
[01mupdating environment: [39;49;00m[new config] 8 added, 0 changed, 0 removed
[01mreading sources... [39;49;00m[ 12%] [35mapi/fake_package/enums[39;49;00m
[01mreading sources... [39;49;00m[ 25%] [35mapi/fake_package/index[39;49;00m
[01mreading sources... [39;49;00m[ 37%] [35mapi/fake_package/module[39;49;00m
[01mreading sources... [39;49;00m[ 50%] [35mapi/fake_package/multi/index[39;49;00m
[01mreading sources... [39;49;00m[ 62%] [35mapi/fake_package/multi/one[39;49;00m
[01mreading sources... [39;49;00m[ 75%] [35mapi/fake_package/multi/two[39;49;00m
[01mreading sources... [39;49;00m[ 87%] [35mapi/index[39;49;00m
[01mreading sources... [39;49;00m[100%] [35mindex[39;49;00m
[01mlooking for now-outdated files... [39;49;00mnone found
[01mpickling environment... [39;49;00mdone
[01mchecking consistency... [39;49;00mdone
[01mpreparing documents... [39;49;00mdone
[01mwriting output... [39;49;00m[ 12%] [32mapi/fake_package/enums[39;49;00m
[01mwriting output... [39;49;00m[ 25%] [32mapi/fake_package/index[39;49;00m
[01mwriting output... [39;49;00m[ 37%] [32mapi/fake_package/module[39;49;00m
[01mwriting output... [39;49;00m[ 50%] [32mapi/fake_package/multi/index[39;49;00m
[01mwriting output... [39;49;00m[ 62%] [32mapi/fake_package/multi/one[39;49;00m
[01mwriting output... [39;49;00m[ 75%] [32mapi/fake_package/multi/two[39;49;00m
[01mwriting output... [39;49;00m[ 87%] [32mapi/index[39;49;00m
[01mwriting output... [39;49;00m[100%] [32mindex[39;49;00m
[01mbuild succeeded, 2 warnings.[39;49;00m
The text files are in ../../../tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-api-2/_build/text.
# warning:
[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.[39;49;00m
[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.[39;49;00m
____________________________ test_sphinx_style_html ____________________________
app = <SphinxTestApp buildername='html'>
status = <_io.StringIO object at 0x7fbb3057e830>
warning = <_io.StringIO object at 0x7fbb3011a3b0>
@pytest.mark.sphinx("html", testroot="uqbar-sphinx-style")
def test_sphinx_style_html(app, status, warning):
app.build()
assert "build succeeded" in status.getvalue()
> assert not warning.getvalue().strip()
E AssertionError: assert not '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m'
E + where '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m' = <built-in method strip of str object at 0x7fbb2f928eb0>()
E + where <built-in method strip of str object at 0x7fbb2f928eb0> = '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n'.strip
E + where '\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n\x1b[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.\x1b[39;49;00m\n' = <built-in method getvalue of _io.StringIO object at 0x7fbb3011a3b0>()
E + where <built-in method getvalue of _io.StringIO object at 0x7fbb3011a3b0> = <_io.StringIO object at 0x7fbb3011a3b0>.getvalue
tests/test_sphinx_inheritance.py:8: AssertionError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style
# outdir: /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/_build/html
# status:
[01mRunning Sphinx v5.3.0[39;49;00m
[autosummary] generating autosummary for: index.rst
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/index.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/fake_package/index.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/fake_package/enums.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/fake_package/module.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/fake_package/multi/index.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/fake_package/multi/one.rst[39;49;00m
[01m[uqbar-api][39;49;00m [32mwrote /tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/api/fake_package/multi/two.rst[39;49;00m
[01mbuilding [mo]: [39;49;00mtargets for 0 po files that are out of date
[01mbuilding [html]: [39;49;00mtargets for 1 source files that are out of date
[01mupdating environment: [39;49;00m[new config] 8 added, 0 changed, 0 removed
[01mreading sources... [39;49;00m[ 12%] [35mapi/fake_package/enums[39;49;00m
[01mreading sources... [39;49;00m[ 25%] [35mapi/fake_package/index[39;49;00m
[01mreading sources... [39;49;00m[ 37%] [35mapi/fake_package/module[39;49;00m
[01mreading sources... [39;49;00m[ 50%] [35mapi/fake_package/multi/index[39;49;00m
[01mreading sources... [39;49;00m[ 62%] [35mapi/fake_package/multi/one[39;49;00m
[01mreading sources... [39;49;00m[ 75%] [35mapi/fake_package/multi/two[39;49;00m
[01mreading sources... [39;49;00m[ 87%] [35mapi/index[39;49;00m
[01mreading sources... [39;49;00m[100%] [35mindex[39;49;00m
[01mlooking for now-outdated files... [39;49;00mnone found
[01mpickling environment... [39;49;00mdone
[01mchecking consistency... [39;49;00mdone
[01mpreparing documents... [39;49;00mdone
[01mwriting output... [39;49;00m[ 12%] [32mapi/fake_package/enums[39;49;00m
[01mwriting output... [39;49;00m[ 25%] [32mapi/fake_package/index[39;49;00m
[01mwriting output... [39;49;00m[ 37%] [32mapi/fake_package/module[39;49;00m
[01mwriting output... [39;49;00m[ 50%] [32mapi/fake_package/multi/index[39;49;00m
[01mwriting output... [39;49;00m[ 62%] [32mapi/fake_package/multi/one[39;49;00m
[01mwriting output... [39;49;00m[ 75%] [32mapi/fake_package/multi/two[39;49;00m
[01mwriting output... [39;49;00m[ 87%] [32mapi/index[39;49;00m
[01mwriting output... [39;49;00m[100%] [32mindex[39;49;00m
[01mgenerating indices... [39;49;00mgenindex py-modindex done
[01mwriting additional pages... [39;49;00msearch done
[01mcopying static files... [39;49;00mdone
[01mcopying extra files... [39;49;00mdone
[01mdumping search index in English (code: en)... [39;49;00mdone
[01mdumping object inventory... [39;49;00mdone
[01mbuild succeeded, 2 warnings.[39;49;00m
The HTML pages are in ../../../tmp/pytest-of-jgart/pytest-3/uqbar-sphinx-style/_build/html.
# warning:
[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.to_bytes:4: WARNING: Inline interpreted text or phrase reference start-string without end-string.[39;49;00m
[91m/home/jgart/uqbar/tests/fake_package/enums.py:docstring of fake_package.enums.FakeEnum.from_bytes:5: WARNING: Inline interpreted text or phrase reference start-string without end-string.[39;49;00m
=============================== warnings summary ===============================
.venv/lib/python3.11/site-packages/sphinx/util/images.py:4
/home/jgart/uqbar/.venv/lib/python3.11/site-packages/sphinx/util/images.py:4: DeprecationWarning: 'imghdr' is deprecated and slated for removal in Python 3.13
import imghdr
tests/test_book_sphinx.py: 11 warnings
/home/jgart/uqbar/uqbar/book/sphinx.py:360: DeprecationWarning: The frontend.OptionParser class will be replaced by a subclass of argparse.ArgumentParser in Docutils 0.21 or later.
settings = OptionParser(components=(Parser,)).get_default_values()
tests/test_book_sphinx.py: 748 warnings
/usr/lib/python3.11/optparse.py:1000: DeprecationWarning: The frontend.Option class will be removed in Docutils 0.21 or later.
option = self.option_class(*args, **kwargs)
tests/test_book_sphinx.py::test_interpret_code_blocks_02
tests/test_book_sphinx.py::test_interpret_code_blocks_02
/home/jgart/uqbar/tests/test_book_sphinx.py:207: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
if LooseVersion(sys.version.split()[0]) < LooseVersion("3.7"):
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
---------- coverage: platform linux, python 3.11.1-final-0 -----------
Name Stmts Miss Branch BrPart Cover
------------------------------------------------------------------------
uqbar/__init__.py 2 0 0 0 100%
uqbar/_version.py 2 0 2 0 100%
uqbar/apis/__init__.py 54 4 36 5 90%
uqbar/apis/builders.py 150 19 82 6 88%
uqbar/apis/documenters.py 208 15 114 11 91%
uqbar/apis/dummy.py 7 0 0 0 100%
uqbar/apis/graphs.py 226 16 125 8 93%
uqbar/apis/nodes.py 54 4 26 0 95%
uqbar/apis/summarizers.py 230 40 139 12 79%
uqbar/book/__init__.py 3 0 0 0 100%
uqbar/book/console.py 103 15 35 5 86%
uqbar/book/extensions.py 92 8 44 3 92%
uqbar/book/sphinx.py 256 24 110 14 89%
uqbar/containers/__init__.py 3 0 0 0 100%
uqbar/containers/dependency_graph.py 78 3 36 5 93%
uqbar/containers/unique_tree.py 411 165 220 12 56%
uqbar/enums.py 70 34 22 4 52%
uqbar/ext/__init__.py 0 0 0 0 100%
uqbar/ext/ipython.py 30 26 10 0 10%
uqbar/graphs/__init__.py 6 0 0 0 100%
uqbar/graphs/attrs.py 266 49 130 6 83%
uqbar/graphs/core.py 304 38 169 16 86%
uqbar/graphs/graphers.py 85 5 18 3 92%
uqbar/graphs/html.py 127 7 48 8 91%
uqbar/graphs/records.py 40 2 16 3 91%
uqbar/io.py 192 36 90 14 79%
uqbar/iterables.py 34 21 20 0 28%
uqbar/objects.py 192 43 115 21 77%
uqbar/sphinx/__init__.py 0 0 0 0 100%
uqbar/sphinx/api.py 69 11 28 6 76%
uqbar/sphinx/book.py 79 1 24 1 98%
uqbar/sphinx/inheritance.py 89 8 20 3 88%
uqbar/sphinx/style.py 99 13 34 6 84%
uqbar/strings.py 61 7 36 4 85%
------------------------------------------------------------------------
TOTAL 3622 614 1749 176 81%
Coverage HTML written to dir htmlcov
=========================== short test summary info ============================
FAILED tests/test_apis_InheritanceGraph.py::test_03 - assert 'digraph Inherit...
FAILED tests/test_apis_SummarizingClassDocumenter.py::test_str_04 - Assertion...
FAILED tests/test_sphinx_api.py::test_sphinx_api_2 - AssertionError: assert n...
FAILED tests/test_sphinx_inheritance.py::test_sphinx_style_html - AssertionEr...
================= 4 failed, 137 passed, 762 warnings in 14.10s =================
Right. You're testing on 3.11 and there are known test failures for that Python version.
See https://github.com/josiah-wolf-oberholtzer/uqbar/pull/72 from last week. On my to-do to fix.
I tested on Ubuntu with Python 3.8 and the tests passed after I installed graphviz
so yeah that's probably was it on that run.
If you wanted to make a welcome contribution, a simple PR that gets Python 3.11 working alongside all of the other versions would be appreciated.
If you wanted to make a welcome contribution, a simple PR that gets Python 3.11 working alongside all of the other versions would be appreciated.
What do you think that involves besides just adding the version string here on line 70?
https://github.com/josiah-wolf-oberholtzer/uqbar/blob/main/.github/workflows/test.yml#L70
It involves getting the tests you saw fail above passing under 3.11 without breaking behavior for any of the other supported Python versions. I don't believe it involves any changes to the Uqbar package code, just changes to the test code's assumptions.
My best guess:
enum.ReprEnum
class that was added in Python 3.11from_bytes()
and to_bytes()
methods (presumably on int) are not proper ReST. solution is to break the warning output into lines and filter out lines mentioning those two methods. probably also worth fixing in Python itself: https://github.com/python/cpython/blob/main/Objects/longobject.c#L6057. the backtick around sys.byteorder
is not matched.... but someone would have to study the test output and give it a try.
Hi,
In this doc it mentions the following:
That feature is used here:
https://github.com/josiah-wolf-oberholtzer/uqbar/blob/main/tests/conftest.py#L6
But when I
pip install -e .
in a venv I get Sphinx 5.3.0 as listed as supported in the pyproject.toml semver declaration and when I runmake test
I get the following error which I think is related to line 6 not being supported in Sphinx 5.3.0:Which version of Sphinx are you using for local development in order to use the newer
sphinx.testing
feature?