Skip to main content

A Interval Tree Library

Project description

🌳 iTree - an Interval Tree library

itree

In computer science, an interval tree is a tree data structure to hold intervals. Every node in itree has a start and an end value.

Installation

itree supports Linux, MacOS and Windows operating systems.

Installation With pip

You can install itree by running:

  pip install py-itree

Build From Source With cmake

🍀 For MacOS with M1 Chip, some Windows OS, embedded systems, or different python versions where the method above doesn't work, please use the following workaround.

  • Install cmake (version>3.4)
  • Run the following command to build it locally:
pip install https://github.com/juncongmoo/itree/archive/refs/tags/v0.0.18.tar.gz

Quick Start

  • Symbol For Node And Tree
  🟢  - normal node; 
  🔵  - zero interval node; 
  🍁  - leaf node, which means no child node
  🌳  - a tree
  • Create Some Nodes
  >>> import itree
  >>> itree.Node('fruit', 0, 40)
  [🍁 n=fruit,s=0.00,e=40.00,x=0,c=0]
  >>> itree.Node('fruit')
  [🔵 n=fruit]
  >>> a=itree.Node('fruit', 0, 200)
  >>> b=itree.Node('apple', 10, 20)
  >>> print(a)
  [🍁 n=fruit,s=0.00,e=40.00,x=0,c=0]
  >>> a.append(b)
  >>> print(a)
  [🟢 n=fruit,s=0.00,e=200.00,x=0,c=1]
  >>> print(b)
  [🍁 n=apple,s=10.00,e=20.00,x=0,c=0]
  >>> print(a.nodes)
  [[🍁 n=apple,s=10.00,e=20.00,x=0,c=0]]
  >>> 
  • Create And Render A Tree
  >>> from itree import Tree
  >>> def demo_tree():
        t = Tree(tid="123", extra={"img": "1241241313.png"})
        t.start("root", 1, {"name": "itree"})
        t.start("math", 2, {"age": 10})
        t.start("music", 3, {"location": [1, 2, 3]})
        t.end("music", 4, {"price": 12.3})
        t.end("math", 16284000, {"memory": (1, 2, 3)})
        t.start("music", 122840057.8713503)
        t.end("music", 1228400500)
        t.start("music", 32840057.8713503)
        t.start("egg", 3284.8713503)
        t.start("icecream", 32843.8713503)
        t.start("pizza", 32843.8713503)
        t.end("pizza", 62845003)
        t.end("icecream", 62845003)
        t.end("egg", 6284500)
        t.end("music", 628400500)
        t.start("piggy", 3284.8713503)
        t.start("unicorn", 32843.8713503)
        t.start("monkey", 32843.8713503)
        t.end("monkey", 62845003)
        t.end("unicorn", 62845003)
        t.end("piggy", 6284500)
        t.end("root", 1628400570.8713503)
        print(f"{t.count},{t.depth}")
        t.consolidate()
        img_path = t.to_img()
        return img_path, t
  >>> img_path, t = demo_tree()
  >>> t
  (🌳 id=123,c=11,x=1,d=6,m=0,o=1)

Run the demo_tree() function, a tree digraph will be generated:

demo_tree

The green circle node is a virtual node. The yellow record box is the node with the longest interval.

A virtual node is a conceptual node which could have many subnodes/subtrees.

vnode

Development

Turn on local build to ON in itree/CMakeLists.txt:

option(LOCAL_BUILD "build locally" OFF)
  • Test
$python -m unittest discover
...............
----------------------------------------------------------------------
Ran 15 tests in 1.209s

OK
  • Format
find itree -path itree/pybind11 -prune -o -iname *.h -o -iname *.cpp | xargs clang-format -i
black -S . --exclude '(\.history|\.vscode|\.git|\.VSCodeCounter|venv|workspace|pybind11)'
  • Build
rm -fr itree/build/ && ./release.sh && yes | cp itree/build/_itree.* itree/
pip install --editable .

License

Tree is licensed under the Apache 2.0 License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_itree-0.0.21.tar.gz (486.0 kB view details)

Uploaded Source

File details

Details for the file py_itree-0.0.21.tar.gz.

File metadata

  • Download URL: py_itree-0.0.21.tar.gz
  • Upload date:
  • Size: 486.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for py_itree-0.0.21.tar.gz
Algorithm Hash digest
SHA256 7a00e1ba221b72f9f239eb336dbc7422e957fb8a8d026fc07e2d99b52327cf01
MD5 8a8f2fc69c0e22feb1f1fdc470fb4806
BLAKE2b-256 a281df4ca915d83cbaccea7d68e3e137bb46d5fd71c7df682c5817ef41c10d88

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page