From 70a6b6037684a3467b956a025fa657f19ef584b0 Mon Sep 17 00:00:00 2001 From: lverweijen Date: Mon, 1 Apr 2024 23:32:19 +0200 Subject: [PATCH 1/8] Add documentation to test with --- .github/workflows/sphinx.yml | 24 +++ docs/Makefile | 20 +++ docs/source/api.rst | 45 ++++++ docs/source/conf.py | 33 ++++ docs/source/images/_abstracttree.png | Bin 0 -> 11987 bytes docs/source/images/abstracttree.png | Bin 0 -> 19146 bytes docs/source/images/latex_img.png | Bin 0 -> 26740 bytes docs/source/images/str_mermaid.png | Bin 0 -> 13306 bytes docs/source/images/tree_calc_plot.png | Bin 0 -> 36910 bytes docs/source/images/tree_dot.png | Bin 0 -> 9355 bytes docs/source/img_1.png | Bin 0 -> 4974 bytes docs/source/img_2.png | Bin 0 -> 4974 bytes docs/source/index.rst | 28 ++++ docs/source/installation.rst | 17 ++ docs/source/usage_bundled.rst | 221 ++++++++++++++++++++++++++ 15 files changed, 388 insertions(+) create mode 100644 .github/workflows/sphinx.yml create mode 100644 docs/Makefile create mode 100644 docs/source/api.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/images/_abstracttree.png create mode 100644 docs/source/images/abstracttree.png create mode 100644 docs/source/images/latex_img.png create mode 100644 docs/source/images/str_mermaid.png create mode 100644 docs/source/images/tree_calc_plot.png create mode 100644 docs/source/images/tree_dot.png create mode 100644 docs/source/img_1.png create mode 100644 docs/source/img_2.png create mode 100644 docs/source/index.rst create mode 100644 docs/source/installation.rst create mode 100644 docs/source/usage_bundled.rst diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml new file mode 100644 index 0000000..77afde6 --- /dev/null +++ b/.github/workflows/sphinx.yml @@ -0,0 +1,24 @@ +name: "Sphinx: Render docs" + +on: push + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - name: Build HTML + uses: ammaraskar/sphinx-action@master + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: html-docs + path: docs/build/html/ + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: github.ref == 'refs/heads/main' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/build/html diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/api.rst b/docs/source/api.rst new file mode 100644 index 0000000..d3acd49 --- /dev/null +++ b/docs/source/api.rst @@ -0,0 +1,45 @@ +API +================== + +Abstract base classes +--------------------- + +.. automodule:: abstracttree.treeclasses + :members: + :show-inheritance: + +.. automodule:: abstracttree.binarytree + :members: + :show-inheritance: + +Conversions +------------------ + +.. automodule:: abstracttree.conversions + :members: astree, convert_tree + :show-inheritance: + +Export +------------------ + +.. automodule:: abstracttree.export + :members: + :show-inheritance: + +Predicates +------------------ +.. automodule:: abstracttree.predicates + :members: + :show-inheritance: + +HeapTree +------------------ +.. automodule:: abstracttree.heaptree + :members: HeapTree + :show-inheritance: + +Route +------------------ +.. automodule:: abstracttree.route + :members: Route + :show-inheritance: diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..6375e18 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,33 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'AbstractTree' +copyright = '2024, Laurent Verweijen' +author = 'Laurent Verweijen' +release = '0.0.4' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.githubpages', + 'sphinx.ext.viewcode', +] + +templates_path = ['_templates'] +exclude_patterns = [] + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'alabaster' +html_static_path = ['_static'] diff --git a/docs/source/images/_abstracttree.png b/docs/source/images/_abstracttree.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb4b8b69bf20f687fa41b00134976b700d72475 GIT binary patch literal 11987 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 E00@+ZTmS$7 literal 0 HcmV?d00001 diff --git a/docs/source/images/latex_img.png b/docs/source/images/latex_img.png new file mode 100644 index 0000000000000000000000000000000000000000..134625b7a6644a085256c7897b4887624aab56cd GIT binary patch literal 26740 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 literal 0 HcmV?d00001 diff --git a/docs/source/images/str_mermaid.png b/docs/source/images/str_mermaid.png new file mode 100644 index 0000000000000000000000000000000000000000..ccccaf50ea939db14d36d6536533c17fd6df279b GIT binary patch literal 13306 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 f8@i_dA*R literal 0 HcmV?d00001 diff --git a/docs/source/images/tree_calc_plot.png b/docs/source/images/tree_calc_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..eaaab7ed447019a6df33a4847ee1171cdb4ea3f2 GIT binary patch literal 36910 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 literal 0 HcmV?d00001 diff --git a/docs/source/images/tree_dot.png b/docs/source/images/tree_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..515b0ac674ff4e53261834e8dda47df7b45e2eea GIT binary patch literal 9355 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 to install littletree:: + + $ pip install --upgrade littletree + +In addition you may want to install the following for some export functions:: + + $ pip install --upgrade matplotlib + $ pip install --upgrade pillow + +For some export functions it might help to install: + +- `Graphviz `_ +- `Mermaid `_ +- `LaTeX `_ diff --git a/docs/source/usage_bundled.rst b/docs/source/usage_bundled.rst new file mode 100644 index 0000000..bc40755 --- /dev/null +++ b/docs/source/usage_bundled.rst @@ -0,0 +1,221 @@ +Usage +================== + +Abstract tree classes +--------------------- + +.. image:: images/abstracttree.png + +Downtrees are trees that have links to their direct children. +Uptrees are trees that link to their parent. +A Tree has links in both directions. + ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ABC | Inherits from | Abstract Methods | Mixin Methods | ++=====================+===============================+=====================================+====================================================================================+ +| ``AbstractTree`` | | | ``nid``, ``eqv()`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``UpTree`` | ``AbstractTree`` | ``parent`` | ``root``, ``is_root``, ``ancestors``, ``path`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``DownTree`` | ``AbstractTree`` | ``children`` | ``nodes``, ``descendants``, ``leaves``, ``levels``, ``is_leaf``, ``transform()`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``Tree`` | ``UpTree``, ``DownTree`` | | ``siblings`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``MutableDownTree`` | ``DownTree`` | ``add_child()``, ``remove_child()`` | ``add_children()`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``MutableTree`` | ``Tree``, ``MutableDownTree`` | | ``detach()`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``BinaryDownTree`` | ``DownTree`` | ``left_child``, ``right_child`` | ``children`` | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ +| ``BinaryTree`` | ``BinaryDownTree``, ``Tree`` | | | ++---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ + +In your own code, you can inherit from these trees. +For example, if your tree only has links to children:: + + import abstracttree + from abstracttree import print_tree + + class MyTree(abstracttree.DownTree): + def __init__(self, value, children=()): + self.value = value + self._children = children + + def __str__(self): + return "MyTree " + str(self.value) + + @property + def children(self): + return self._children + + +You can now use this class in the following way to generate output:: + + tree = MyTree(1, children=[MyTree(2), MyTree(3)]) + print_tree(tree) + + # MyTree 1 + # ├─ MyTree 2 + # └─ MyTree 3 + +Adapter +------------------ + +In practice, not all existing tree data structures implement one of the abstract classes specified in `Abstract classes `_. +As a bridge, you can use ``Tree.convert`` to convert these trees to a ``Tree`` instance. +However, whenever possible, it's recommended to inherit from ``Tree`` directly for minimal overhead. + +``Tree.convert`` already does the right thing on many objects of the standard library:: + + # Inheritance hierarchy + Tree.convert(int) + + # Abstract syntax tree + Tree.convert(ast.parse("1 + 1 == 2")) + + # Filesystem + Tree.convert(pathlib.Path("abstracttree")) + + # Zipfile + Tree.convert(zipfile.ZipFile("eclipse.jar")) + + # Nested list + Tree.convert([[1, 2, 3], [4, 5, 6]]) + +It can also construct a tree by ducktyping on ``parent`` and ``children`` attributes:: + + # Works on objects by anytree, bigtree and littletree + Tree.convert(anytree.Node('node')) + +Alternatively, you can use ``astree`` and explicitly specify how to find ``children`` and ``parent``:: + + # Tree from json-data + data = {"name": "a", + "children": [ + {"name": "b", "children": []}, + {"name": "c", "children": []} + ]} + astree(data, children=operator.itemgetter["children"]) + + # pyqt.QtWidget + astree(widget, children=lambda w: w.children(), parent = lambda w: w.parent()) + + # Tree from treelib + astree(tree.root, children=lambda nid: tree.children(nid), parent=lambda nid: tree.parent(nid)) + + # itertree + astree(tree, children=iter, parent=lambda t: t.parent) + + # Infinite binary tree + inf_binary = astree(0, children=lambda n: (2*n + 1, 2*n + 2)) + +Traversal +---------------------------------------- + +There are 3 common ways to traverse a tree: + +Pre-order + The parent is iterated over before its children. + +Post-order + The children are iterated over before their parent. + +Post-order + Nodes closer to root are iterated over before nodes further from the root. + +All these are possible by writing one of:: + + for node, item in tree.nodes.preorder(): + ... + + for node, item in tree.nodes.postorder(): + ... + + for node, item in tree.nodes.levelorder(): + ... + +These methods return an item in addition to a node. +This item is a tuple of the following fields: + +depth + This indicates how deep the node is relative to the root of the (sub)tree iterated over. + The root of the (sub)tree always has depth 0. + To find the absolute depth of a node, use ``node.ancestors.count()``. + +index + The index of this node among its siblings in relation to its direct parent. + The first child of a parent gets index 0, the second gets index 1. + The root of the (sub)tree always gets an index of ``0`` even if it has prior siblings. + +To iterate over the descendants (the nodes without the root), similar methods are defined:: + + for descendant, item in tree.descendants.preorder(): + ... + +If the order of iteration doesn't matter an alternative way to iterate is as follows:: + + for node in tree.nodes: + ... + + for descendant in tree.descendants: + ... + + +Export +---------------------------------------- + +Pretty printing:: + + print_tree(Path()) + # . + # ├─ abstracttree + # │ ├─ abstracttree\conversions.py + # │ ├─ abstracttree\export.py + # │ ├─ abstracttree\predicates.py + # │ ├─ abstracttree\treeclasses.py + # │ └─ abstracttree\__init__.py + # ├─ LICENSE + # ├─ Makefile + # ├─ manual.txt + # ├─ pyproject.toml + # ├─ README.md + # └─ tests + # ├─ tests\test_downtree.py + # ├─ tests\test_export.py + # ├─ tests\test_mutabletree.py + # ├─ tests\test_tree.py + # ├─ tests\test_uptree.py + # └─ tests\tree_instances.py + + + +Plotting with matplotlib:: + + import matplotlib.pyplot as plt + + plot_tree(ast.parse("y = x*x + 1")) + plt.show() + +.. image:: images/tree_calc_plot.png + +Export to graphviz:: + + tree = astree(seq, children=lambda x: [x[:-2], x[1:]] if x else []) + to_graphviz(tree) + + +.. image:: images/tree_dot.png + +Export to mermaid:: + + to_mermaid(str) + +.. image:: images/str_mermaid.png + +Export to latex:: + + data = [["james", "steve"], + ["patrick", "mike", "bod", "piet"]] + to_latex(data) + +.. image:: images/latex_img.png From 2fb4ff6da36989f2305593af981a15617802be47 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Fri, 6 Dec 2024 01:16:38 +0100 Subject: [PATCH 2/8] Add sphinx tools as dev dependencies - Set ref to doctest for testing - Add permission for id-token --- .github/workflows/sphinx.yml | 3 ++- pyproject.toml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml index 77afde6..8ba7360 100644 --- a/.github/workflows/sphinx.yml +++ b/.github/workflows/sphinx.yml @@ -7,6 +7,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write steps: - uses: actions/checkout@v4 - name: Build HTML @@ -18,7 +19,7 @@ jobs: path: docs/build/html/ - name: Deploy uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/main' + if: github.ref == 'refs/heads/doctest' with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: docs/build/html diff --git a/pyproject.toml b/pyproject.toml index 66f8440..0c6f960 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ preview = true [dependency-groups] dev = [ "ruff>=0.8.2", + "sphinx>=7.4.7", ] [build-system] From 35b9486c542c664ddb3a04a51899172d0042abe7 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Fri, 6 Dec 2024 16:58:32 +0100 Subject: [PATCH 3/8] Change theme --- docs/source/conf.py | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 6375e18..88dd769 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -29,5 +29,5 @@ # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = 'alabaster' +html_theme = 'sphinx_rtd_theme' html_static_path = ['_static'] diff --git a/pyproject.toml b/pyproject.toml index 0c6f960..5e3200a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ preview = true [dependency-groups] dev = [ "ruff>=0.8.2", + "sphinx-rtd-theme>=3.0.2", "sphinx>=7.4.7", ] From 5618f0e91a08580094a5e3a5f4b405e865daccc1 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Fri, 6 Dec 2024 17:04:07 +0100 Subject: [PATCH 4/8] Add requirements.txt to docs --- docs/requirements.txt | 1 + docs/source/api.rst | 6 +++--- docs/source/conf.py | 8 ++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 docs/requirements.txt diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..9f8b735 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1 @@ +sphinx-rtd-theme>=3.0.2 \ No newline at end of file diff --git a/docs/source/api.rst b/docs/source/api.rst index d3acd49..af8fcc0 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -4,7 +4,7 @@ API Abstract base classes --------------------- -.. automodule:: abstracttree.treeclasses +.. automodule:: abstracttree.tree :members: :show-inheritance: @@ -12,10 +12,10 @@ Abstract base classes :members: :show-inheritance: -Conversions +Adapters ------------------ -.. automodule:: abstracttree.conversions +.. automodule:: abstracttree.adapters :members: astree, convert_tree :show-inheritance: diff --git a/docs/source/conf.py b/docs/source/conf.py index 88dd769..9b4f7f3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -31,3 +31,11 @@ html_theme = 'sphinx_rtd_theme' html_static_path = ['_static'] + + +# Code is in src. Make sure sphinx can find it +import sys +from pathlib import Path +src_folder = Path(__file__).parent.parent.parent / "src" +print(src_folder) +sys.path.insert(0, str(src_folder.resolve(strict=True))) From 1f4558b30b66287a8586df5ebe83199223581635 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Sat, 14 Dec 2024 00:44:16 +0100 Subject: [PATCH 5/8] Move changelog to sphinx --- CHANGES.md | 23 ---------------------- docs/requirements.txt | 5 ++++- docs/source/conf.py | 21 +++++++++++++------- docs/source/index.rst | 1 + docs/source/usage_bundled.rst | 36 ++++++++++++++++++++++++++--------- pyproject.toml | 4 ++++ 6 files changed, 50 insertions(+), 40 deletions(-) delete mode 100644 CHANGES.md diff --git a/CHANGES.md b/CHANGES.md deleted file mode 100644 index 28b52e1..0000000 --- a/CHANGES.md +++ /dev/null @@ -1,23 +0,0 @@ -## Version 0.1.1 - -* Make it possible to pass options like `file_format` to `to_image`. -* `to_image` returns bytes if no filename is given, not bytesIO. -* Add function `to_reportlab`. This requires [svglib](https://pypi.org/project/svglib/) to be installed. -* Classes can define `_abstracttree_` to override their conversion to tree. - -## Version 0.1.0 - -* `UpTree` is no longer exported by default, although it can still be imported. - It has been removed from the documentation and is considered for deletion. -* Add `AbstractTree.convert(obj)` as a type-aware replacement for `astree(obj)`. - For instance, `DownTree.convert(obj)` can be used if `obj.parent` doesn't exist. -* Rename `treeclasses.py` to `tree.py` -* Rename `conversions.py` to `adapters.py` -* Don't special-case `x in node.ancestors` to use identity comparison. -* `to_dot` and `to_mermaid` now generate nodes in levelorder (breadth first), instead of preorder (depth-first) - -## Version 0.0.5 - -* Add `reversed(Route(node_1 ... node_n).edges)` to walk through nodes backwards. -* Add `BinaryTree` and `BinaryDownTree` abstract classes. -* Add `tree.levels.zigzag()` method to iterate through levels in [zigzag-order](https://www.geeksforgeeks.org/zigzag-tree-traversal/). diff --git a/docs/requirements.txt b/docs/requirements.txt index 9f8b735..e4b1afb 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,4 @@ -sphinx-rtd-theme>=3.0.2 \ No newline at end of file +sphinx-rtd-theme>=3.0.2 +myst-parser>=3.0.1 +myst>=1.0.4 +sphinxcontrib-mermaid>=1.0.0 \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 9b4f7f3..e9df4c6 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -6,10 +6,19 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information +# Code is in src. Make sure sphinx can find it +import sys +from pathlib import Path +src_folder = Path(__file__).parent.parent.parent / "src" +print(src_folder) +sys.path.insert(0, str(src_folder.resolve(strict=True))) + +from setuptools_scm import get_version + project = 'AbstractTree' copyright = '2024, Laurent Verweijen' author = 'Laurent Verweijen' -release = '0.0.4' +release = get_version('abstracttree') # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -19,6 +28,8 @@ 'sphinx.ext.autosummary', 'sphinx.ext.githubpages', 'sphinx.ext.viewcode', + 'myst_parser', + 'sphinxcontrib.mermaid' ] templates_path = ['_templates'] @@ -33,9 +44,5 @@ html_static_path = ['_static'] -# Code is in src. Make sure sphinx can find it -import sys -from pathlib import Path -src_folder = Path(__file__).parent.parent.parent / "src" -print(src_folder) -sys.path.insert(0, str(src_folder.resolve(strict=True))) +myst_enable_extensions = ["colon_fence"] + diff --git a/docs/source/index.rst b/docs/source/index.rst index 340fd82..779f5d7 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -18,6 +18,7 @@ Finally, it provides many exports that even work on objects that don't inherit f installation usage_bundled api + CHANGES Indices and tables diff --git a/docs/source/usage_bundled.rst b/docs/source/usage_bundled.rst index bc40755..f5dbc75 100644 --- a/docs/source/usage_bundled.rst +++ b/docs/source/usage_bundled.rst @@ -4,22 +4,40 @@ Usage Abstract tree classes --------------------- -.. image:: images/abstracttree.png - -Downtrees are trees that have links to their direct children. -Uptrees are trees that link to their parent. -A Tree has links in both directions. +.. mermaid:: + + graph TD; + Tree[Tree]; + MutableTree[MutableTree]; + DownTree[DownTree]; + Tree[Tree]; + MutableTree[MutableTree]; + MutableDownTree[MutableDownTree]; + MutableTree[MutableTree]; + BinaryDownTree[BinaryDownTree]; + BinaryTree[BinaryTree]; + Tree-->MutableTree; + DownTree-->Tree; + DownTree-->MutableDownTree; + MutableDownTree-->MutableTree; + DownTree-->BinaryDownTree; + BinaryDownTree-->BinaryTree; + Tree-->BinaryTree; + + +A Downtrees is an object that has links to its direct children. +A Tree is has links to both its children and its parent. +A binary tree has exactly two children (left and right). +A mutable tree can change its structure once created. +---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ | ABC | Inherits from | Abstract Methods | Mixin Methods | +=====================+===============================+=====================================+====================================================================================+ | ``AbstractTree`` | | | ``nid``, ``eqv()`` | +---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ -| ``UpTree`` | ``AbstractTree`` | ``parent`` | ``root``, ``is_root``, ``ancestors``, ``path`` | -+---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ | ``DownTree`` | ``AbstractTree`` | ``children`` | ``nodes``, ``descendants``, ``leaves``, ``levels``, ``is_leaf``, ``transform()`` | +---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ -| ``Tree`` | ``UpTree``, ``DownTree`` | | ``siblings`` | +| ``Tree`` | ``DownTree`` | | ``siblings`` | +---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ | ``MutableDownTree`` | ``DownTree`` | ``add_child()``, ``remove_child()`` | ``add_children()`` | +---------------------+-------------------------------+-------------------------------------+------------------------------------------------------------------------------------+ @@ -120,7 +138,7 @@ Pre-order Post-order The children are iterated over before their parent. -Post-order +Level-order Nodes closer to root are iterated over before nodes further from the root. All these are possible by writing one of:: diff --git a/pyproject.toml b/pyproject.toml index 5e3200a..9eb673e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ export = [ [project.urls] Homepage = "https://github.com/lverweijen/abstracttree" Repository = "https://github.com/lverweijen/abstracttree" +Documentation = "https://lverweijen.github.io/AbstractTree/" Issues = "https://github.com/lverweijen/abstracttree/issues" Changelog = "https://github.com/lverweijen/abstracttree/blob/main/changes.md" @@ -60,6 +61,9 @@ dev = [ "ruff>=0.8.2", "sphinx-rtd-theme>=3.0.2", "sphinx>=7.4.7", + "myst-parser>=3.0.1", + "myst>=1.0.4", + "sphinxcontrib-mermaid>=1.0.0", ] [build-system] From 36d2f4ab9e9d9ae9b523ceefdd375e793e9f26f0 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Sat, 14 Dec 2024 00:52:21 +0100 Subject: [PATCH 6/8] Make it work on github --- .github/workflows/sphinx.yml | 2 +- docs/source/CHANGES.md | 25 +++++++++++++++++++++++++ docs/source/conf.py | 16 +++++++--------- 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 docs/source/CHANGES.md diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml index 8ba7360..4d87bdc 100644 --- a/.github/workflows/sphinx.yml +++ b/.github/workflows/sphinx.yml @@ -11,7 +11,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Build HTML - uses: ammaraskar/sphinx-action@master + uses: ammaraskar/sphinx-action@dev - name: Upload artifacts uses: actions/upload-artifact@v4 with: diff --git a/docs/source/CHANGES.md b/docs/source/CHANGES.md new file mode 100644 index 0000000..50088a7 --- /dev/null +++ b/docs/source/CHANGES.md @@ -0,0 +1,25 @@ +# Changelog + +## Version 0.1.1 + +* Make it possible to pass options like `file_format` to `to_image`. +* `to_image` returns bytes if no filename is given, not bytesIO. +* Add function `to_reportlab`. This requires [svglib](https://pypi.org/project/svglib/) to be installed. +* Classes can define `_abstracttree_` to override their conversion to tree. + +## Version 0.1.0 + +* `UpTree` is no longer exported by default, although it can still be imported. + It has been removed from the documentation and is considered for deletion. +* Add `AbstractTree.convert(obj)` as a type-aware replacement for `astree(obj)`. + For instance, `DownTree.convert(obj)` can be used if `obj.parent` doesn't exist. +* Rename `treeclasses.py` to `tree.py` +* Rename `conversions.py` to `adapters.py` +* Don't special-case `x in node.ancestors` to use identity comparison. +* `to_dot` and `to_mermaid` now generate nodes in levelorder (breadth first), instead of preorder (depth-first) + +## Version 0.0.5 + +* Add `reversed(Route(node_1 ... node_n).edges)` to walk through nodes backwards. +* Add `BinaryTree` and `BinaryDownTree` abstract classes. +* Add `tree.levels.zigzag()` method to iterate through levels in [zigzag-order](https://www.geeksforgeeks.org/zigzag-tree-traversal/). diff --git a/docs/source/conf.py b/docs/source/conf.py index e9df4c6..f02d496 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -6,19 +6,11 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -# Code is in src. Make sure sphinx can find it -import sys -from pathlib import Path -src_folder = Path(__file__).parent.parent.parent / "src" -print(src_folder) -sys.path.insert(0, str(src_folder.resolve(strict=True))) - -from setuptools_scm import get_version project = 'AbstractTree' copyright = '2024, Laurent Verweijen' author = 'Laurent Verweijen' -release = get_version('abstracttree') +release = 'stable' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -46,3 +38,9 @@ myst_enable_extensions = ["colon_fence"] +# Code is in src. Make sure sphinx can find it +import sys +from pathlib import Path +src_folder = Path(__file__).parent.parent.parent / "src" +print(src_folder) +sys.path.insert(0, str(src_folder.resolve(strict=True))) From e899e62d40951bb2e5c054fd43ccd3d69c41f137 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Thu, 19 Dec 2024 11:26:14 +0100 Subject: [PATCH 7/8] Read documentation from main instead --- .github/workflows/sphinx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml index 4d87bdc..978038c 100644 --- a/.github/workflows/sphinx.yml +++ b/.github/workflows/sphinx.yml @@ -19,7 +19,7 @@ jobs: path: docs/build/html/ - name: Deploy uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/doctest' + if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: docs/build/html From e3850ac3608d5138c70ba38057aebf0128b35436 Mon Sep 17 00:00:00 2001 From: Verweijen Date: Thu, 19 Dec 2024 11:40:03 +0100 Subject: [PATCH 8/8] Verander documentatiebranch --- docs/source/images/_abstracttree.png | Bin 11987 -> 0 bytes docs/source/images/abstracttree.png | Bin 19146 -> 0 bytes pyproject.toml | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 docs/source/images/_abstracttree.png delete mode 100644 docs/source/images/abstracttree.png diff --git a/docs/source/images/_abstracttree.png b/docs/source/images/_abstracttree.png deleted file mode 100644 index 4fb4b8b69bf20f687fa41b00134976b700d72475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11987 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 E00@+ZTmS$7 diff --git a/pyproject.toml b/pyproject.toml index 9eb673e..61313d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ Homepage = "https://github.com/lverweijen/abstracttree" Repository = "https://github.com/lverweijen/abstracttree" Documentation = "https://lverweijen.github.io/AbstractTree/" Issues = "https://github.com/lverweijen/abstracttree/issues" -Changelog = "https://github.com/lverweijen/abstracttree/blob/main/changes.md" +Changelog = "https://lverweijen.github.io/AbstractTree/CHANGES.html" [tool.ruff] line-length = 100