memory-graph 0.3.33__tar.gz → 0.3.35__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {memory_graph-0.3.33/memory_graph.egg-info → memory_graph-0.3.35}/PKG-INFO +20 -13
- {memory_graph-0.3.33 → memory_graph-0.3.35}/README.md +18 -11
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/add_one.gv +18 -18
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_key_value.gv +12 -12
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_leaf.gv +5 -5
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_linear.gv +12 -12
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_table.gv +12 -12
- memory_graph-0.3.35/images/bin_search.py +31 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/bin_tree.gv +35 -35
- memory_graph-0.3.35/images/call_stack.txt +24 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/copies.gv +20 -20
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/copy_method.gv +16 -16
- memory_graph-0.3.35/images/debug.gv +15 -0
- memory_graph-0.3.35/images/debug.pdf +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging01.gv +8 -8
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging01.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging02.gv +11 -11
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging02.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging03.gv +13 -13
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging03.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging04.gv +15 -15
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging04.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging05.gv +17 -17
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging05.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging06.gv +17 -17
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging06.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/extension_numpy.gv +8 -8
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/extension_pandas.gv +8 -8
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial0.gv +3 -3
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial0.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial1.gv +6 -6
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial1.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial2.gv +8 -8
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial2.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial3.gv +10 -10
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial3.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial4.gv +10 -10
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial4.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial5.gv +8 -8
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial5.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial6.gv +6 -6
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial6.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hash_set.gv +29 -29
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/highlight.gv +16 -16
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/immutable1.gv +4 -4
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/immutable2.gv +6 -6
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/introspect_depth.gv +56 -56
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/linked_list.gv +20 -20
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/many_types.gv +12 -12
- memory_graph-0.3.35/images/memory_graph.gv +43 -0
- memory_graph-0.3.35/images/memory_graph.pdf +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/mutable1.gv +4 -4
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/mutable2.gv +4 -4
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/not_node_types1.gv +6 -6
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/not_node_types2.gv +14 -14
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set0.gv +11 -11
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set0.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set1.gv +17 -17
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set1.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set10.gv +36 -36
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set10.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set11.gv +31 -31
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set11.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set12.gv +31 -31
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set12.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set13.gv +36 -36
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set13.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set14.gv +41 -41
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set14.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set15.gv +43 -43
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set15.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set16.gv +40 -40
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set16.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set17.gv +40 -40
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set17.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set18.gv +45 -45
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set18.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set19.gv +47 -47
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set19.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set2.gv +22 -22
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set2.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set20.gv +44 -44
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set20.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set21.gv +39 -39
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set21.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set22.gv +34 -34
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set22.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set23.gv +28 -28
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set23.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set3.gv +27 -27
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set3.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set4.gv +32 -32
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set4.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set5.gv +34 -34
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set5.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set6.gv +32 -32
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set6.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set7.gv +32 -32
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set7.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set8.gv +37 -37
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set8.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set9.gv +39 -39
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set9.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/rebinding1.gv +4 -4
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/rebinding2.gv +6 -6
- memory_graph-0.3.35/images/stack.txt +21 -0
- memory_graph-0.3.35/images/test.py +20 -0
- memory_graph-0.3.35/images/test.py~ +18 -0
- memory_graph-0.3.35/images/vsc.py +23 -0
- memory_graph-0.3.35/images/vsc.py~ +22 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/__init__.py +80 -43
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/utils.py +0 -17
- {memory_graph-0.3.33 → memory_graph-0.3.35/memory_graph.egg-info}/PKG-INFO +20 -13
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph.egg-info/SOURCES.txt +9 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/pyproject.toml +2 -2
- memory_graph-0.3.33/images/memory_graph.gv +0 -70
- memory_graph-0.3.33/images/memory_graph.pdf +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/LICENSE.txt +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/MANIFEST.in +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/-0 +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/.gif +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/add_one.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/add_one.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree.py~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_dir.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_dir.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_fail.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_fail.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_key_value.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_leaf.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_linear.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/avltree_table.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/bin_tree.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/bin_tree.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/bin_tree2.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/bin_tree2.py~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/colab_example.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/copies.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/copies.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/copy_method.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/copy_method.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/create_gif.sh +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/create_images.sh +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debug_vscode.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging.gif +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/debugging.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/depth.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/depth.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/extension_numpy.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/extension_numpy.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/extension_pandas.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/extension_pandas.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial.gif +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial01.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial02.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial03.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial04.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial05.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial06.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/factorial07.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hash_set.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hash_set.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hidden_edges.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hidden_edges.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hidden_edges.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/hidden_edges.py~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/highlight.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/highlight.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/immutable.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/immutable1.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/immutable2.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/introspect_depth.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/introspect_depth.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/introspect_depth.py~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/ipython.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/jupyter_example.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/linked_list.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/linked_list.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/log.txt +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/many_types.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/many_types.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/memory_graph.gv.pdf +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/mutable.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/mutable1.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/mutable2.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/my_graph.gv +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/my_graph.pdf +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/name_rebinding.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/not_node_types.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/not_node_types.py~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/not_node_types1.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/not_node_types2.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set.gif +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set19.png~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/power_set8.png~ +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/pyodide.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/rebinding1.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/rebinding2.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/uva.png +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/images/vscode_copying.gif +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/call_stack.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/config.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/config_default.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/config_helpers.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/extension_numpy.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/extension_pandas.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/html_table.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/list_view.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/memory_to_nodes.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/node_base.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/node_key_value.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/node_leaf.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/node_linear.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/node_table.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/sequence.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/slicer.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/slices.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/slices_iterator.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/slices_table_iterator.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_max_graph_depth.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_memory_graph.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_memory_to_nodes.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_sequence.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_slicer.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_slices.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph/test_slices_iterator.py +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph.egg-info/dependency_links.txt +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph.egg-info/requires.txt +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/memory_graph.egg-info/top_level.txt +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/setup.cfg +0 -0
- {memory_graph-0.3.33 → memory_graph-0.3.35}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
|
-
Name:
|
|
3
|
-
Version: 0.3.
|
|
2
|
+
Name: memory_graph
|
|
3
|
+
Version: 0.3.35
|
|
4
4
|
Summary: Teaching tool and debugging aid in context of references, mutable data types, and shallow and deep copy.
|
|
5
5
|
Author-email: Bas Terwijn <bterwijn@gmail.com>
|
|
6
6
|
License-Expression: BSD-2-Clause
|
|
@@ -25,10 +25,13 @@ pip install --upgrade memory_graph
|
|
|
25
25
|
```
|
|
26
26
|
Additionally [Graphviz](https://graphviz.org/download/) needs to be installed.
|
|
27
27
|
|
|
28
|
+
# Highlight #
|
|
29
|
+

|
|
30
|
+
|
|
28
31
|
# Videos #
|
|
29
32
|
| [](https://www.youtube.com/watch?v=23_bHcr7hqo) | [](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
30
33
|
|:--:|:--:|
|
|
31
|
-
| [Quick Intro](https://www.youtube.com/watch?v=23_bHcr7hqo) | [Mutability](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
34
|
+
| [Quick Intro (3:49)](https://www.youtube.com/watch?v=23_bHcr7hqo) | [Mutability (17:29)](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
32
35
|
|
|
33
36
|
# Memory Graph #
|
|
34
37
|
For program understanding and debugging, the [memory_graph](https://pypi.org/project/memory-graph/) package can visualize your data, supporting many different data types, including but not limited to:
|
|
@@ -365,11 +368,11 @@ The ```mg.stack()``` doesn't work well in *watch* context in most debuggers beca
|
|
|
365
368
|
|
|
366
369
|
| debugger | function to get the call stack |
|
|
367
370
|
|:---|:---|
|
|
368
|
-
|
|
|
369
|
-
|
|
|
370
|
-
|
|
|
371
|
-
|
|
|
372
|
-
|
|
|
371
|
+
| [pdb](https://docs.python.org/3/library/pdb.html), [pudb](https://pypi.org/project/pudb/) | `mg.stack_pdb()` |
|
|
372
|
+
| [Visual Studio Code](https://code.visualstudio.com/docs/languages/python) | `mg.stack_vscode()` |
|
|
373
|
+
| [Cursor AI](https://www.cursor.com/) | `mg.stack_cursor()` |
|
|
374
|
+
| [PyCharm](https://www.jetbrains.com/pycharm/) | `mg.stack_pycharm()` |
|
|
375
|
+
| [Wing](https://wingware.com/) | `mg.stack_wing()` |
|
|
373
376
|
|
|
374
377
|

|
|
375
378
|
|
|
@@ -378,12 +381,16 @@ For other debuggers, invoke this function within the *watch* context. Then, in t
|
|
|
378
381
|
```
|
|
379
382
|
mg.save_call_stack("call_stack.txt")
|
|
380
383
|
```
|
|
381
|
-
|
|
384
|
+
Then to get the call stack use:
|
|
382
385
|
```
|
|
383
|
-
mg.stack_after_through(after_functions : list[str],
|
|
384
|
-
|
|
385
|
-
|
|
386
|
+
mg.stack_after_through(after_functions : list[(str,int)],
|
|
387
|
+
through_functions : list[str] = ["<module>"],
|
|
388
|
+
stack_index: int = 0)
|
|
386
389
|
```
|
|
390
|
+
with parameters:
|
|
391
|
+
* after_functions: list of (function-name, offset), begins at the index of the first 'function-name' that is found in the call stack with additional 'offset'
|
|
392
|
+
* through_functions: list of function-names, ends at the index of the first 'function-name' that is found in the call stack after begin index, inclusive
|
|
393
|
+
* stack_index: number of frames removed at the beginning
|
|
387
394
|
|
|
388
395
|
## Debugging without Debugger Tool ##
|
|
389
396
|
|
|
@@ -419,7 +426,7 @@ and pressing <Enter> a number of times, results in:
|
|
|
419
426
|

|
|
420
427
|
|
|
421
428
|
# Data Structure Examples #
|
|
422
|
-
|
|
429
|
+
Package memory_graph can be very useful in a data structures course, some examples:
|
|
423
430
|
|
|
424
431
|
## Circular Doubly Linked List ##
|
|
425
432
|
```python
|
|
@@ -5,10 +5,13 @@ pip install --upgrade memory_graph
|
|
|
5
5
|
```
|
|
6
6
|
Additionally [Graphviz](https://graphviz.org/download/) needs to be installed.
|
|
7
7
|
|
|
8
|
+
# Highlight #
|
|
9
|
+

|
|
10
|
+
|
|
8
11
|
# Videos #
|
|
9
12
|
| [](https://www.youtube.com/watch?v=23_bHcr7hqo) | [](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
10
13
|
|:--:|:--:|
|
|
11
|
-
| [Quick Intro](https://www.youtube.com/watch?v=23_bHcr7hqo) | [Mutability](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
14
|
+
| [Quick Intro (3:49)](https://www.youtube.com/watch?v=23_bHcr7hqo) | [Mutability (17:29)](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
12
15
|
|
|
13
16
|
# Memory Graph #
|
|
14
17
|
For program understanding and debugging, the [memory_graph](https://pypi.org/project/memory-graph/) package can visualize your data, supporting many different data types, including but not limited to:
|
|
@@ -345,11 +348,11 @@ The ```mg.stack()``` doesn't work well in *watch* context in most debuggers beca
|
|
|
345
348
|
|
|
346
349
|
| debugger | function to get the call stack |
|
|
347
350
|
|:---|:---|
|
|
348
|
-
|
|
|
349
|
-
|
|
|
350
|
-
|
|
|
351
|
-
|
|
|
352
|
-
|
|
|
351
|
+
| [pdb](https://docs.python.org/3/library/pdb.html), [pudb](https://pypi.org/project/pudb/) | `mg.stack_pdb()` |
|
|
352
|
+
| [Visual Studio Code](https://code.visualstudio.com/docs/languages/python) | `mg.stack_vscode()` |
|
|
353
|
+
| [Cursor AI](https://www.cursor.com/) | `mg.stack_cursor()` |
|
|
354
|
+
| [PyCharm](https://www.jetbrains.com/pycharm/) | `mg.stack_pycharm()` |
|
|
355
|
+
| [Wing](https://wingware.com/) | `mg.stack_wing()` |
|
|
353
356
|
|
|
354
357
|

|
|
355
358
|
|
|
@@ -358,12 +361,16 @@ For other debuggers, invoke this function within the *watch* context. Then, in t
|
|
|
358
361
|
```
|
|
359
362
|
mg.save_call_stack("call_stack.txt")
|
|
360
363
|
```
|
|
361
|
-
|
|
364
|
+
Then to get the call stack use:
|
|
362
365
|
```
|
|
363
|
-
mg.stack_after_through(after_functions : list[str],
|
|
364
|
-
|
|
365
|
-
|
|
366
|
+
mg.stack_after_through(after_functions : list[(str,int)],
|
|
367
|
+
through_functions : list[str] = ["<module>"],
|
|
368
|
+
stack_index: int = 0)
|
|
366
369
|
```
|
|
370
|
+
with parameters:
|
|
371
|
+
* after_functions: list of (function-name, offset), begins at the index of the first 'function-name' that is found in the call stack with additional 'offset'
|
|
372
|
+
* through_functions: list of function-names, ends at the index of the first 'function-name' that is found in the call stack after begin index, inclusive
|
|
373
|
+
* stack_index: number of frames removed at the beginning
|
|
367
374
|
|
|
368
375
|
## Debugging without Debugger Tool ##
|
|
369
376
|
|
|
@@ -399,7 +406,7 @@ and pressing <Enter> a number of times, results in:
|
|
|
399
406
|

|
|
400
407
|
|
|
401
408
|
# Data Structure Examples #
|
|
402
|
-
|
|
409
|
+
Package memory_graph can be very useful in a data structures course, some examples:
|
|
403
410
|
|
|
404
411
|
## Circular Doubly Linked List ##
|
|
405
412
|
```python
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node126282060615232 [label=<
|
|
4
4
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="lightcoral" PORT="table">
|
|
5
5
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
|
|
6
6
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
|
|
@@ -8,30 +8,30 @@ digraph memory_graph {
|
|
|
8
8
|
<TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 1 </TD></TR>
|
|
9
9
|
</TABLE>
|
|
10
10
|
> xlabel=list]
|
|
11
|
-
|
|
11
|
+
node126282059347520 [label=<
|
|
12
12
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="orange" PORT="table">
|
|
13
13
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
|
|
14
14
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
|
|
15
15
|
<TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
|
|
16
16
|
</TABLE>
|
|
17
17
|
> xlabel=tuple]
|
|
18
|
-
|
|
18
|
+
node126282058704000 [label=<
|
|
19
19
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="lightcoral" PORT="table">
|
|
20
20
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
|
|
21
21
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
|
|
22
22
|
<TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
|
|
23
23
|
</TABLE>
|
|
24
24
|
> xlabel=list]
|
|
25
|
-
|
|
25
|
+
node126282059262656 [label=<
|
|
26
26
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
27
27
|
<TR><TD BORDER="1" STYLE="ROUNDED"> a </TD><TD BORDER="1" STYLE="ROUNDED"> b </TD><TD BORDER="1" STYLE="ROUNDED"> c </TD></TR>
|
|
28
28
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD><TD BORDER="1" PORT="ref2"> </TD></TR>
|
|
29
29
|
</TABLE>
|
|
30
30
|
> xlabel=dict]
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
node126282059262656:ref0 -> node126282060615232:table [style=solid]
|
|
32
|
+
node126282059262656:ref1 -> node126282059347520:table [style=solid]
|
|
33
|
+
node126282059262656:ref2 -> node126282058704000:table [style=solid]
|
|
34
|
+
node126282054174976 [label=<
|
|
35
35
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="orange" PORT="table">
|
|
36
36
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
|
|
37
37
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
|
|
@@ -39,7 +39,7 @@ digraph memory_graph {
|
|
|
39
39
|
<TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 1 </TD></TR>
|
|
40
40
|
</TABLE>
|
|
41
41
|
> xlabel=tuple]
|
|
42
|
-
|
|
42
|
+
node126282059346752 [label=<
|
|
43
43
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="lightcoral" PORT="table">
|
|
44
44
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
|
|
45
45
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
|
|
@@ -47,23 +47,23 @@ digraph memory_graph {
|
|
|
47
47
|
<TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 1 </TD></TR>
|
|
48
48
|
</TABLE>
|
|
49
49
|
> xlabel=list]
|
|
50
|
-
|
|
50
|
+
node126282059717312 [label=<
|
|
51
51
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
52
52
|
<TR><TD BORDER="1" STYLE="ROUNDED"> a </TD><TD BORDER="1" STYLE="ROUNDED"> b </TD><TD BORDER="1" STYLE="ROUNDED"> c </TD></TR>
|
|
53
53
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD><TD BORDER="1" PORT="ref2"> </TD></TR>
|
|
54
54
|
</TABLE>
|
|
55
55
|
> xlabel=dict]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
node126282059717312:ref0 -> node126282060615232:table [style=solid]
|
|
57
|
+
node126282059717312:ref1 -> node126282054174976:table [style=solid]
|
|
58
|
+
node126282059717312:ref2 -> node126282059346752:table [style=solid]
|
|
59
|
+
node126282054399184 [label=<
|
|
60
60
|
<TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="khaki" PORT="table">
|
|
61
61
|
<TR><TD BORDER="1" STYLE="ROUNDED"> 0: <module> </TD><TD BORDER="1" STYLE="ROUNDED"> 1: add_one </TD></TR>
|
|
62
62
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
|
|
63
63
|
</TABLE>
|
|
64
64
|
> xlabel=call_stack]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
subgraph { rank=same;
|
|
68
|
-
subgraph { rank=same;
|
|
65
|
+
node126282054399184:ref0 -> node126282059262656:table [style=solid]
|
|
66
|
+
node126282054399184:ref1 -> node126282059717312:table [style=solid]
|
|
67
|
+
subgraph { rank=same; node126282059262656 -> node126282059717312[weight=10, style=invis]; }
|
|
68
|
+
subgraph { rank=same; node126282060615232 -> node126282059347520 -> node126282058704000 -> node126282054174976 -> node126282059346752[weight=10, style=invis]; }
|
|
69
69
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node126062163823168 [label=<
|
|
4
4
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
5
5
|
<TR><TD BORDER="1" STYLE="ROUNDED"> left </TD><TD BORDER="1"> None </TD></TR>
|
|
6
6
|
<TR><TD BORDER="1" STYLE="ROUNDED"> key </TD><TD BORDER="1"> 5 </TD></TR>
|
|
@@ -8,7 +8,7 @@ digraph memory_graph {
|
|
|
8
8
|
<TR><TD BORDER="1" STYLE="ROUNDED"> right </TD><TD BORDER="1"> None </TD></TR>
|
|
9
9
|
</TABLE>
|
|
10
10
|
> xlabel="Node"]
|
|
11
|
-
|
|
11
|
+
node126062164002992 [label=<
|
|
12
12
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
13
13
|
<TR><TD BORDER="1" STYLE="ROUNDED"> left </TD><TD BORDER="1"> None </TD></TR>
|
|
14
14
|
<TR><TD BORDER="1" STYLE="ROUNDED"> key </TD><TD BORDER="1"> 15 </TD></TR>
|
|
@@ -16,34 +16,34 @@ digraph memory_graph {
|
|
|
16
16
|
<TR><TD BORDER="1" STYLE="ROUNDED"> right </TD><TD BORDER="1"> None </TD></TR>
|
|
17
17
|
</TABLE>
|
|
18
18
|
> xlabel="Node"]
|
|
19
|
-
|
|
19
|
+
node126062164003072 [label=<
|
|
20
20
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
21
21
|
<TR><TD BORDER="1" STYLE="ROUNDED"> left </TD><TD BORDER="1" STYLE="ROUNDED"> key </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> right </TD></TR>
|
|
22
22
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 20 </TD><TD BORDER="1"> twenty </TD><TD BORDER="1"> None </TD></TR>
|
|
23
23
|
</TABLE>
|
|
24
24
|
> xlabel="Node"]
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
node126062164003072:ref0 -> node126062164002992:table [style=solid]
|
|
26
|
+
node126062169976688 [label=<
|
|
27
27
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
28
28
|
<TR><TD BORDER="1" STYLE="ROUNDED"> left </TD><TD BORDER="1" STYLE="ROUNDED"> key </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> right </TD></TR>
|
|
29
29
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 10 </TD><TD BORDER="1"> ten </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
|
|
30
30
|
</TABLE>
|
|
31
31
|
> xlabel="Node"]
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
node126062169976688:ref0 -> node126062163823168:table [style=solid]
|
|
33
|
+
node126062169976688:ref1 -> node126062164003072:table [style=solid]
|
|
34
|
+
node126062165609504 [label=<
|
|
35
35
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
|
|
36
36
|
<TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
|
|
37
37
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
|
|
38
38
|
</TABLE>
|
|
39
39
|
> xlabel=AVLTree]
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
node126062165609504:ref0 -> node126062169976688:table [style=solid]
|
|
41
|
+
node126062168328064 [label=<
|
|
42
42
|
<TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
43
43
|
<TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
|
|
44
44
|
<TR><TD BORDER="1" PORT="ref0"> </TD></TR>
|
|
45
45
|
</TABLE>
|
|
46
46
|
> xlabel=dict]
|
|
47
|
-
|
|
48
|
-
subgraph { rank=same;
|
|
47
|
+
node126062168328064:ref0 -> node126062165609504:table [style=solid]
|
|
48
|
+
subgraph { rank=same; node126062163823168 -> node126062164003072[weight=10, style=invis]; }
|
|
49
49
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node126062169976688 [label=<
|
|
4
4
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
5
5
|
<TR><TD BORDER="1"> key:10 value:ten </TD></TR>
|
|
6
6
|
</TABLE>
|
|
7
7
|
> xlabel="Node"]
|
|
8
|
-
|
|
8
|
+
node126062165609504 [label=<
|
|
9
9
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
|
|
10
10
|
<TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
|
|
11
11
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
|
|
12
12
|
</TABLE>
|
|
13
13
|
> xlabel=AVLTree]
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
node126062165609504:ref0 -> node126062169976688:table [style=solid]
|
|
15
|
+
node126062168328064 [label=<
|
|
16
16
|
<TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
17
17
|
<TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
|
|
18
18
|
<TR><TD BORDER="1" PORT="ref0"> </TD></TR>
|
|
19
19
|
</TABLE>
|
|
20
20
|
> xlabel=dict]
|
|
21
|
-
|
|
21
|
+
node126062168328064:ref0 -> node126062165609504:table [style=solid]
|
|
22
22
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node126062163823168 [label=<
|
|
4
4
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
5
5
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> left: </TD></TR>
|
|
6
6
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD></TR>
|
|
@@ -12,7 +12,7 @@ digraph memory_graph {
|
|
|
12
12
|
<TR><TD BORDER="0"><font color="#505050">7</font></TD><TD BORDER="1"> None </TD></TR>
|
|
13
13
|
</TABLE>
|
|
14
14
|
> xlabel="Node"]
|
|
15
|
-
|
|
15
|
+
node126062164002992 [label=<
|
|
16
16
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
17
17
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> left: </TD></TR>
|
|
18
18
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD></TR>
|
|
@@ -24,34 +24,34 @@ digraph memory_graph {
|
|
|
24
24
|
<TR><TD BORDER="0"><font color="#505050">7</font></TD><TD BORDER="1"> None </TD></TR>
|
|
25
25
|
</TABLE>
|
|
26
26
|
> xlabel="Node"]
|
|
27
|
-
|
|
27
|
+
node126062164003072 [label=<
|
|
28
28
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
29
29
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="0"><font color="#505050">4</font></TD><TD BORDER="0"><font color="#505050">5</font></TD><TD BORDER="0"><font color="#505050">6</font></TD><TD BORDER="0"><font color="#505050">7</font></TD></TR>
|
|
30
30
|
<TR><TD BORDER="1"> left: </TD><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> key: </TD><TD BORDER="1"> 20 </TD><TD BORDER="1"> value: </TD><TD BORDER="1"> twenty </TD><TD BORDER="1"> right: </TD><TD BORDER="1"> None </TD></TR>
|
|
31
31
|
</TABLE>
|
|
32
32
|
> xlabel="Node"]
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
node126062164003072:ref0 -> node126062164002992:table [style=solid]
|
|
34
|
+
node126062169976688 [label=<
|
|
35
35
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
36
36
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="0"><font color="#505050">4</font></TD><TD BORDER="0"><font color="#505050">5</font></TD><TD BORDER="0"><font color="#505050">6</font></TD><TD BORDER="0"><font color="#505050">7</font></TD></TR>
|
|
37
37
|
<TR><TD BORDER="1"> left: </TD><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> key: </TD><TD BORDER="1"> 10 </TD><TD BORDER="1"> value: </TD><TD BORDER="1"> ten </TD><TD BORDER="1"> right: </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
|
|
38
38
|
</TABLE>
|
|
39
39
|
> xlabel="Node"]
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
node126062169976688:ref0 -> node126062163823168:table [style=solid]
|
|
41
|
+
node126062169976688:ref1 -> node126062164003072:table [style=solid]
|
|
42
|
+
node126062165609504 [label=<
|
|
43
43
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
|
|
44
44
|
<TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
|
|
45
45
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
|
|
46
46
|
</TABLE>
|
|
47
47
|
> xlabel=AVLTree]
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
node126062165609504:ref0 -> node126062169976688:table [style=solid]
|
|
49
|
+
node126062168328064 [label=<
|
|
50
50
|
<TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
51
51
|
<TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
|
|
52
52
|
<TR><TD BORDER="1" PORT="ref0"> </TD></TR>
|
|
53
53
|
</TABLE>
|
|
54
54
|
> xlabel=dict]
|
|
55
|
-
|
|
56
|
-
subgraph { rank=same;
|
|
55
|
+
node126062168328064:ref0 -> node126062165609504:table [style=solid]
|
|
56
|
+
subgraph { rank=same; node126062163823168 -> node126062164003072[weight=10, style=invis]; }
|
|
57
57
|
}
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node126062163823168 [label=<
|
|
4
4
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
5
5
|
<TR><TD BORDER="0"> </TD><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="0"><font color="#505050">1</font></TD></TR>
|
|
6
6
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 5 </TD><TD BORDER="1"> five </TD></TR>
|
|
7
7
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD><TD BORDER="1"> None </TD></TR>
|
|
8
8
|
</TABLE>
|
|
9
9
|
> xlabel="Node 2⨯2"]
|
|
10
|
-
|
|
10
|
+
node126062164002992 [label=<
|
|
11
11
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
12
12
|
<TR><TD BORDER="0"> </TD><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="0"><font color="#505050">1</font></TD></TR>
|
|
13
13
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 15 </TD><TD BORDER="1"> fifteen </TD></TR>
|
|
14
14
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD><TD BORDER="1"> None </TD></TR>
|
|
15
15
|
</TABLE>
|
|
16
16
|
> xlabel="Node 2⨯2"]
|
|
17
|
-
|
|
17
|
+
node126062164003072 [label=<
|
|
18
18
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
19
19
|
<TR><TD BORDER="0"> </TD><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="0"><font color="#505050">1</font></TD></TR>
|
|
20
20
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 20 </TD><TD BORDER="1"> twenty </TD></TR>
|
|
21
21
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> None </TD></TR>
|
|
22
22
|
</TABLE>
|
|
23
23
|
> xlabel="Node 2⨯2"]
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
node126062164003072:ref0 -> node126062164002992:table [style=solid]
|
|
25
|
+
node126062169976688 [label=<
|
|
26
26
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
|
|
27
27
|
<TR><TD BORDER="0"> </TD><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="0"><font color="#505050">1</font></TD></TR>
|
|
28
28
|
<TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 10 </TD><TD BORDER="1"> ten </TD></TR>
|
|
29
29
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
|
|
30
30
|
</TABLE>
|
|
31
31
|
> xlabel="Node 2⨯2"]
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
node126062169976688:ref0 -> node126062163823168:table [style=solid]
|
|
33
|
+
node126062169976688:ref1 -> node126062164003072:table [style=solid]
|
|
34
|
+
node126062165609504 [label=<
|
|
35
35
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
|
|
36
36
|
<TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
|
|
37
37
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
|
|
38
38
|
</TABLE>
|
|
39
39
|
> xlabel=AVLTree]
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
node126062165609504:ref0 -> node126062169976688:table [style=solid]
|
|
41
|
+
node126062168328064 [label=<
|
|
42
42
|
<TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
43
43
|
<TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
|
|
44
44
|
<TR><TD BORDER="1" PORT="ref0"> </TD></TR>
|
|
45
45
|
</TABLE>
|
|
46
46
|
> xlabel=dict]
|
|
47
|
-
|
|
48
|
-
subgraph { rank=same;
|
|
47
|
+
node126062168328064:ref0 -> node126062165609504:table [style=solid]
|
|
48
|
+
subgraph { rank=same; node126062163823168 -> node126062164003072[weight=10, style=invis]; }
|
|
49
49
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import memory_graph as mg
|
|
2
|
+
|
|
3
|
+
class View:
|
|
4
|
+
|
|
5
|
+
def __init__(self, lst, begin, end):
|
|
6
|
+
self.lst = lst
|
|
7
|
+
self.begin = begin
|
|
8
|
+
self.end = end
|
|
9
|
+
|
|
10
|
+
def __getitem__(self, index):
|
|
11
|
+
return self.lst[index]
|
|
12
|
+
|
|
13
|
+
def get_mid(self):
|
|
14
|
+
return (self.begin + self.end) // 2
|
|
15
|
+
|
|
16
|
+
def bin_search(view, value):
|
|
17
|
+
mid = view.get_mid()
|
|
18
|
+
mid_value = view[mid]
|
|
19
|
+
if value < mid_value:
|
|
20
|
+
return bin_search(View(view.lst, view.begin, mid), value)
|
|
21
|
+
elif value > mid_value:
|
|
22
|
+
return bin_search(View(view.lst, mid, view.end), value)
|
|
23
|
+
else:
|
|
24
|
+
return mid
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
n = 15
|
|
28
|
+
data = [i for i in range(n)]
|
|
29
|
+
value = n//3
|
|
30
|
+
index = bin_search(View(data, 0, len(data)), value)
|
|
31
|
+
print(f'{index=}')
|