memory-graph 0.3.26__tar.gz → 0.3.28__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.26/memory_graph.egg-info → memory_graph-0.3.28}/PKG-INFO +36 -18
- {memory_graph-0.3.26 → memory_graph-0.3.28}/README.md +35 -17
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/add_one.gv +18 -18
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_dir.gv +5 -5
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_key_value.gv +12 -12
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_leaf.gv +5 -5
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_linear.gv +12 -12
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_table.gv +12 -12
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/bin_tree.gv +35 -35
- memory_graph-0.3.28/images/cmp.sh +3 -0
- memory_graph-0.3.28/images/cmp.sh~ +1 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/copies.gv +20 -20
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/copy_method.gv +16 -16
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging01.gv +8 -8
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging01.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging02.gv +11 -11
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging02.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging03.gv +13 -13
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging03.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging04.gv +15 -15
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging04.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging05.gv +17 -17
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging05.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging06.gv +17 -17
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging06.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/extension_numpy.gv +8 -8
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/extension_pandas.gv +8 -8
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial.py +3 -3
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial0.gv +3 -3
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial0.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial1.gv +6 -6
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial1.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial2.gv +8 -8
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial2.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial3.gv +10 -10
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial3.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial4.gv +10 -10
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial4.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial5.gv +8 -8
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial5.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial6.gv +6 -6
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial6.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/hash_set.gv +29 -29
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/highlight.gv +16 -16
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/immutable1.gv +4 -4
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/immutable2.gv +6 -6
- memory_graph-0.3.26/images/depth.gv → memory_graph-0.3.28/images/introspect_depth.gv +56 -56
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/linked_list.gv +24 -22
- memory_graph-0.3.28/images/linked_list.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/linked_list.py +12 -12
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/many_types.gv +12 -12
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/mutable1.gv +4 -4
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/mutable2.gv +4 -4
- memory_graph-0.3.28/images/name_rebinding.py~ +7 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/not_node_types1.gv +6 -6
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/not_node_types2.gv +14 -14
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set.py +4 -4
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set0.gv +11 -11
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set0.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set1.gv +17 -17
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set1.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set10.gv +36 -36
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set10.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set11.gv +31 -31
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set11.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set12.gv +31 -31
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set12.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set13.gv +36 -36
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set13.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set14.gv +41 -41
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set14.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set15.gv +43 -43
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set15.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set16.gv +40 -40
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set16.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set17.gv +40 -40
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set17.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set18.gv +45 -45
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set18.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set19.gv +47 -47
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set19.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set2.gv +22 -22
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set2.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set20.gv +44 -44
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set20.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set21.gv +39 -39
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set21.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set22.gv +34 -34
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set22.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set23.gv +28 -28
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set23.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set3.gv +27 -27
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set3.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set4.gv +32 -32
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set4.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set5.gv +34 -34
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set5.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set6.gv +32 -32
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set6.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set7.gv +32 -32
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set7.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set8.gv +37 -37
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set8.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set9.gv +39 -39
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set9.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/rebinding1.gv +4 -4
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/rebinding2.gv +6 -6
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/__init__.py +17 -15
- memory_graph-0.3.28/memory_graph/t.py +6 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28/memory_graph.egg-info}/PKG-INFO +36 -18
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph.egg-info/SOURCES.txt +5 -31
- {memory_graph-0.3.26 → memory_graph-0.3.28}/setup.py +1 -1
- memory_graph-0.3.26/images/.ipynb_checkpoints/jupyter_example-checkpoint.ipynb +0 -85
- memory_graph-0.3.26/images/avltree.py~ +0 -41
- memory_graph-0.3.26/images/avltree_fail.gv +0 -22
- memory_graph-0.3.26/images/bin_tree2.py +0 -31
- memory_graph-0.3.26/images/bin_tree2.py~ +0 -31
- memory_graph-0.3.26/images/depth.png +0 -0
- memory_graph-0.3.26/images/factorial01.gv +0 -15
- memory_graph-0.3.26/images/factorial02.gv +0 -22
- memory_graph-0.3.26/images/factorial03.gv +0 -28
- memory_graph-0.3.26/images/factorial04.gv +0 -34
- memory_graph-0.3.26/images/factorial05.gv +0 -35
- memory_graph-0.3.26/images/factorial06.gv +0 -29
- memory_graph-0.3.26/images/factorial07.gv +0 -23
- memory_graph-0.3.26/images/hidden_edges.gv +0 -37
- memory_graph-0.3.26/images/hidden_edges.py +0 -8
- memory_graph-0.3.26/images/hidden_edges.py~ +0 -9
- memory_graph-0.3.26/images/introspect_depth.gv +0 -178
- memory_graph-0.3.26/images/introspect_depth.py~ +0 -26
- memory_graph-0.3.26/images/linked_list.png +0 -0
- memory_graph-0.3.26/images/log.txt +0 -186
- memory_graph-0.3.26/images/memory_graph.gv +0 -70
- memory_graph-0.3.26/images/memory_graph.gv.pdf +0 -0
- memory_graph-0.3.26/images/memory_graph.pdf +0 -0
- memory_graph-0.3.26/images/my_graph.gv +0 -31
- memory_graph-0.3.26/images/my_graph.pdf +0 -0
- memory_graph-0.3.26/images/not_node_types.py~ +0 -9
- memory_graph-0.3.26/install.txt +0 -31
- memory_graph-0.3.26/src/auto_memory_graph.py +0 -21
- memory_graph-0.3.26/src/jupyter_example.ipynb +0 -85
- memory_graph-0.3.26/src/pyodide.html +0 -182
- memory_graph-0.3.26/uml/memory_graph.uxf +0 -322
- {memory_graph-0.3.26 → memory_graph-0.3.28}/LICENSE.txt +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/MANIFEST.in +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/add_one.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/add_one.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_dir.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_fail.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_key_value.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_leaf.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_linear.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/avltree_table.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/bin_tree.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/bin_tree.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/copies.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/copies.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/copy_method.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/copy_method.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/create_gif.sh +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/create_images.sh +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debug_vscode.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging.gif +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/debugging.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/extension_numpy.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/extension_numpy.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/extension_pandas.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/extension_pandas.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/factorial.gif +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/hash_set.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/hash_set.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/hidden_edges.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/highlight.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/highlight.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/immutable.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/immutable1.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/immutable2.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/introspect_depth.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/introspect_depth.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/ipython.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/jupyter_example.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/many_types.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/many_types.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/mutable.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/mutable1.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/mutable2.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/name_rebinding.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/not_node_types.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/not_node_types1.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/not_node_types2.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/power_set.gif +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/pyodide.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/rebinding1.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/rebinding2.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/uva.png +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/images/vscode_copying.gif +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/call_stack.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/config.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/config_default.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/config_helpers.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/extension_numpy.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/extension_pandas.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/html_table.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/list_view.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/memory_to_nodes.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/node_base.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/node_key_value.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/node_leaf.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/node_linear.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/node_table.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/sequence.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/slicer.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/slices.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/slices_iterator.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/slices_table_iterator.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_max_graph_depth.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_memory_graph.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_memory_to_nodes.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_sequence.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_slicer.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_slices.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/test_slices_iterator.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph/utils.py +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph.egg-info/dependency_links.txt +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph.egg-info/requires.txt +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/memory_graph.egg-info/top_level.txt +0 -0
- {memory_graph-0.3.26 → memory_graph-0.3.28}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: memory_graph
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.28
|
|
4
4
|
Summary: Teaching tool and debugging aid in context of references, mutable data types, and shallow and deep copy.
|
|
5
5
|
Home-page: https://github.com/bterwijn/memory_graph
|
|
6
6
|
Author: Bas Terwijn
|
|
@@ -114,7 +114,7 @@ A better way to understand what data is shared is to draw a graph of the data us
|
|
|
114
114
|
|
|
115
115
|
[Introspection](#introspection)
|
|
116
116
|
|
|
117
|
-
[
|
|
117
|
+
[Graph Depth](#graph-depth)
|
|
118
118
|
|
|
119
119
|
[Jupyter Notebook](#jupyter-notebook)
|
|
120
120
|
|
|
@@ -122,6 +122,8 @@ A better way to understand what data is shared is to draw a graph of the data us
|
|
|
122
122
|
|
|
123
123
|
[In the Browser](#in-the-browser)
|
|
124
124
|
|
|
125
|
+
[Animated GIF](#animated-gif)
|
|
126
|
+
|
|
125
127
|
[Troubleshooting](#troubleshooting)
|
|
126
128
|
|
|
127
129
|
|
|
@@ -410,37 +412,37 @@ and pressing <Enter> a number of times, results in:
|
|
|
410
412
|
# Data Structure Examples #
|
|
411
413
|
Module memory_graph can be very useful in a course about data structures, some examples:
|
|
412
414
|
|
|
413
|
-
## Doubly Linked List ##
|
|
415
|
+
## Circular Doubly Linked List ##
|
|
414
416
|
```python
|
|
415
417
|
import memory_graph as mg
|
|
416
418
|
import random
|
|
417
419
|
random.seed(0) # use same random numbers each run
|
|
418
420
|
|
|
419
421
|
class Linked_List:
|
|
422
|
+
""" Circular doubly linked list """
|
|
420
423
|
|
|
421
|
-
def __init__(self, value=None,
|
|
422
|
-
|
|
424
|
+
def __init__(self, value=None,
|
|
425
|
+
prev=None, next=None):
|
|
426
|
+
self.prev = prev if prev else self
|
|
423
427
|
self.value = value
|
|
424
|
-
self.next = next
|
|
428
|
+
self.next = next if next else self
|
|
425
429
|
|
|
426
|
-
def
|
|
430
|
+
def add_back(self, value):
|
|
427
431
|
if self.value == None:
|
|
428
432
|
self.value = value
|
|
429
|
-
elif self.next is None:
|
|
430
|
-
new_node = Linked_List(value)
|
|
431
|
-
self.prev = new_node
|
|
432
|
-
self.next = new_node
|
|
433
433
|
else:
|
|
434
|
-
new_node = Linked_List(value,
|
|
435
|
-
|
|
436
|
-
|
|
434
|
+
new_node = Linked_List(value,
|
|
435
|
+
prev=self.prev,
|
|
436
|
+
next=self)
|
|
437
|
+
self.prev.next = new_node
|
|
438
|
+
self.prev = new_node
|
|
437
439
|
|
|
438
440
|
linked_list = Linked_List()
|
|
439
441
|
n = 100
|
|
440
442
|
for i in range(n):
|
|
441
443
|
value = random.randrange(n)
|
|
442
|
-
linked_list.
|
|
443
|
-
|
|
444
|
+
linked_list.add_back(value)
|
|
445
|
+
mg.block(mg.show, locals()) # <--- draw locals
|
|
444
446
|
```
|
|
445
447
|

|
|
446
448
|
|
|
@@ -770,7 +772,7 @@ mg.show(locals())
|
|
|
770
772
|

|
|
771
773
|
|
|
772
774
|
|
|
773
|
-
#
|
|
775
|
+
# Graph Depth #
|
|
774
776
|
To limit the size of the graph the maximum depth of the graph is set by `mg.config.max_graph_depth`. Additionally for each type a depth can be set to further limit the graph, as is done for type `B` in the example below. Scissors indicate where the graph is cut short. Alternatively the `id()` of a data elements can be used to limit the graph for that specific element, as is done for the value referenced by variable `c`.
|
|
775
777
|
|
|
776
778
|
The value of variable `x` is shown as it is at depth 1 from the root of the graph, but as it can also be reached via `b2`, that path need to be shown as well to avoid confusion, so this overwrites the depth limit set for type `B`.
|
|
@@ -865,8 +867,24 @@ Then after starting 'ipython' call function `mg_switch()` to turn on/off the aut
|
|
|
865
867
|
We can also run memory_graph in the browser: <a href="https://bterwijn.github.io/memory_graph/src/pyodide.html" target="_blank">Pyodide Example</a>
|
|
866
868
|

|
|
867
869
|
|
|
868
|
-
# Troubleshooting #
|
|
869
870
|
|
|
871
|
+
# Animated GIF #
|
|
872
|
+
To make an animated GIF use for example `mg.show` or `mg.render` like this:
|
|
873
|
+
|
|
874
|
+
* mg.show(locals(), 'animated.png', numbered=True)
|
|
875
|
+
* mg.render(locals(), 'animated.png', numbered=True)
|
|
876
|
+
|
|
877
|
+
in your source or better as a *watch* in a debugger so that stepping through the code generates images:
|
|
878
|
+
|
|
879
|
+
animated0.png, animated1.png, animated2.png, ...
|
|
880
|
+
|
|
881
|
+
Then use these images to make an animated GIF, for example using this Bash script [create_gif.sh](https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/create_gif.sh):
|
|
882
|
+
|
|
883
|
+
```bash
|
|
884
|
+
$ bash create_gif.sh animated
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
# Troubleshooting #
|
|
870
888
|
- Adobe Acrobat Reader [doesn't refresh a PDF file](https://community.adobe.com/t5/acrobat-reader-discussions/reload-refresh-pdfs/td-p/9632292) when it changes on disk and blocks updates which results in an `Could not open 'somefile.pdf' for writing : Permission denied` error. One solution is to install a PDF reader that does refresh ([SumatraPDF](https://www.sumatrapdfreader.org/), [Okular](https://okular.kde.org/), ...) and set it as the default PDF reader. Another solution is to `render()` the graph to a different output format and to open it manually.
|
|
871
889
|
|
|
872
890
|
- When graph edges overlap it can be hard to distinguish them. Using an interactive graphviz viewer, such as [xdot](https://github.com/jrfonseca/xdot.py), on a '*.gv' DOT output file will help.
|
|
@@ -95,7 +95,7 @@ A better way to understand what data is shared is to draw a graph of the data us
|
|
|
95
95
|
|
|
96
96
|
[Introspection](#introspection)
|
|
97
97
|
|
|
98
|
-
[
|
|
98
|
+
[Graph Depth](#graph-depth)
|
|
99
99
|
|
|
100
100
|
[Jupyter Notebook](#jupyter-notebook)
|
|
101
101
|
|
|
@@ -103,6 +103,8 @@ A better way to understand what data is shared is to draw a graph of the data us
|
|
|
103
103
|
|
|
104
104
|
[In the Browser](#in-the-browser)
|
|
105
105
|
|
|
106
|
+
[Animated GIF](#animated-gif)
|
|
107
|
+
|
|
106
108
|
[Troubleshooting](#troubleshooting)
|
|
107
109
|
|
|
108
110
|
|
|
@@ -391,37 +393,37 @@ and pressing <Enter> a number of times, results in:
|
|
|
391
393
|
# Data Structure Examples #
|
|
392
394
|
Module memory_graph can be very useful in a course about data structures, some examples:
|
|
393
395
|
|
|
394
|
-
## Doubly Linked List ##
|
|
396
|
+
## Circular Doubly Linked List ##
|
|
395
397
|
```python
|
|
396
398
|
import memory_graph as mg
|
|
397
399
|
import random
|
|
398
400
|
random.seed(0) # use same random numbers each run
|
|
399
401
|
|
|
400
402
|
class Linked_List:
|
|
403
|
+
""" Circular doubly linked list """
|
|
401
404
|
|
|
402
|
-
def __init__(self, value=None,
|
|
403
|
-
|
|
405
|
+
def __init__(self, value=None,
|
|
406
|
+
prev=None, next=None):
|
|
407
|
+
self.prev = prev if prev else self
|
|
404
408
|
self.value = value
|
|
405
|
-
self.next = next
|
|
409
|
+
self.next = next if next else self
|
|
406
410
|
|
|
407
|
-
def
|
|
411
|
+
def add_back(self, value):
|
|
408
412
|
if self.value == None:
|
|
409
413
|
self.value = value
|
|
410
|
-
elif self.next is None:
|
|
411
|
-
new_node = Linked_List(value)
|
|
412
|
-
self.prev = new_node
|
|
413
|
-
self.next = new_node
|
|
414
414
|
else:
|
|
415
|
-
new_node = Linked_List(value,
|
|
416
|
-
|
|
417
|
-
|
|
415
|
+
new_node = Linked_List(value,
|
|
416
|
+
prev=self.prev,
|
|
417
|
+
next=self)
|
|
418
|
+
self.prev.next = new_node
|
|
419
|
+
self.prev = new_node
|
|
418
420
|
|
|
419
421
|
linked_list = Linked_List()
|
|
420
422
|
n = 100
|
|
421
423
|
for i in range(n):
|
|
422
424
|
value = random.randrange(n)
|
|
423
|
-
linked_list.
|
|
424
|
-
|
|
425
|
+
linked_list.add_back(value)
|
|
426
|
+
mg.block(mg.show, locals()) # <--- draw locals
|
|
425
427
|
```
|
|
426
428
|

|
|
427
429
|
|
|
@@ -751,7 +753,7 @@ mg.show(locals())
|
|
|
751
753
|

|
|
752
754
|
|
|
753
755
|
|
|
754
|
-
#
|
|
756
|
+
# Graph Depth #
|
|
755
757
|
To limit the size of the graph the maximum depth of the graph is set by `mg.config.max_graph_depth`. Additionally for each type a depth can be set to further limit the graph, as is done for type `B` in the example below. Scissors indicate where the graph is cut short. Alternatively the `id()` of a data elements can be used to limit the graph for that specific element, as is done for the value referenced by variable `c`.
|
|
756
758
|
|
|
757
759
|
The value of variable `x` is shown as it is at depth 1 from the root of the graph, but as it can also be reached via `b2`, that path need to be shown as well to avoid confusion, so this overwrites the depth limit set for type `B`.
|
|
@@ -846,8 +848,24 @@ Then after starting 'ipython' call function `mg_switch()` to turn on/off the aut
|
|
|
846
848
|
We can also run memory_graph in the browser: <a href="https://bterwijn.github.io/memory_graph/src/pyodide.html" target="_blank">Pyodide Example</a>
|
|
847
849
|

|
|
848
850
|
|
|
849
|
-
# Troubleshooting #
|
|
850
851
|
|
|
852
|
+
# Animated GIF #
|
|
853
|
+
To make an animated GIF use for example `mg.show` or `mg.render` like this:
|
|
854
|
+
|
|
855
|
+
* mg.show(locals(), 'animated.png', numbered=True)
|
|
856
|
+
* mg.render(locals(), 'animated.png', numbered=True)
|
|
857
|
+
|
|
858
|
+
in your source or better as a *watch* in a debugger so that stepping through the code generates images:
|
|
859
|
+
|
|
860
|
+
animated0.png, animated1.png, animated2.png, ...
|
|
861
|
+
|
|
862
|
+
Then use these images to make an animated GIF, for example using this Bash script [create_gif.sh](https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/create_gif.sh):
|
|
863
|
+
|
|
864
|
+
```bash
|
|
865
|
+
$ bash create_gif.sh animated
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
# Troubleshooting #
|
|
851
869
|
- Adobe Acrobat Reader [doesn't refresh a PDF file](https://community.adobe.com/t5/acrobat-reader-discussions/reload-refresh-pdfs/td-p/9632292) when it changes on disk and blocks updates which results in an `Could not open 'somefile.pdf' for writing : Permission denied` error. One solution is to install a PDF reader that does refresh ([SumatraPDF](https://www.sumatrapdfreader.org/), [Okular](https://okular.kde.org/), ...) and set it as the default PDF reader. Another solution is to `render()` the graph to a different output format and to open it manually.
|
|
852
870
|
|
|
853
871
|
- When graph edges overlap it can be hard to distinguish them. Using an interactive graphviz viewer, such as [xdot](https://github.com/jrfonseca/xdot.py), on a '*.gv' DOT output file will help.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node136650744844864 [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
|
+
node136650743234112 [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
|
+
node136650744843072 [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
|
+
node136650743230144 [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
|
+
node136650743230144:ref0 -> node136650744844864:table [style=solid]
|
|
32
|
+
node136650743230144:ref1 -> node136650743234112:table [style=solid]
|
|
33
|
+
node136650743230144:ref2 -> node136650744843072:table [style=solid]
|
|
34
|
+
node136650744825872 [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
|
+
node136650743119168 [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
|
+
node136650743113856 [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
|
+
node136650743113856:ref0 -> node136650744844864:table [style=solid]
|
|
57
|
+
node136650743113856:ref1 -> node136650744825872:table [style=solid]
|
|
58
|
+
node136650743113856:ref2 -> node136650743119168:table [style=solid]
|
|
59
|
+
node136650740772896 [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
|
+
node136650740772896:ref0 -> node136650743230144:table [style=solid]
|
|
66
|
+
node136650740772896:ref1 -> node136650743113856:table [style=solid]
|
|
67
|
+
subgraph { rank=same; node136650743230144 -> node136650743113856[weight=10, style=invis]; }
|
|
68
|
+
subgraph { rank=same; node136650744844864 -> node136650743234112 -> node136650744843072 -> node136650744825872 -> node136650743119168[weight=10, style=invis]; }
|
|
69
69
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node130351336425488 [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"> __class__ </TD></TR>
|
|
6
6
|
<TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> __delattr__ </TD></TR>
|
|
@@ -38,18 +38,18 @@ digraph memory_graph {
|
|
|
38
38
|
<TR><TD BORDER="0"><font color="#505050">33</font></TD><TD BORDER="1"> value </TD></TR>
|
|
39
39
|
</TABLE>
|
|
40
40
|
> xlabel="Node"]
|
|
41
|
-
|
|
41
|
+
node130351334904784 [label=<
|
|
42
42
|
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
|
|
43
43
|
<TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
|
|
44
44
|
<TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
|
|
45
45
|
</TABLE>
|
|
46
46
|
> xlabel=AVLTree]
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
node130351334904784:ref0 -> node130351336425488:table [style=solid]
|
|
48
|
+
node130351336759104 [label=<
|
|
49
49
|
<TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
|
|
50
50
|
<TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
|
|
51
51
|
<TR><TD BORDER="1" PORT="ref0"> </TD></TR>
|
|
52
52
|
</TABLE>
|
|
53
53
|
> xlabel=dict]
|
|
54
|
-
|
|
54
|
+
node130351336759104:ref0 -> node130351334904784:table [style=solid]
|
|
55
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node130351332363056 [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
|
+
node130351332361296 [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
|
+
node130351332361456 [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
|
+
node130351332361456:ref0 -> node130351332361296:table [style=solid]
|
|
26
|
+
node130351336425488 [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
|
+
node130351336425488:ref0 -> node130351332363056:table [style=solid]
|
|
33
|
+
node130351336425488:ref1 -> node130351332361456:table [style=solid]
|
|
34
|
+
node130351334904784 [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
|
+
node130351334904784:ref0 -> node130351336425488:table [style=solid]
|
|
41
|
+
node130351336759104 [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
|
+
node130351336759104:ref0 -> node130351334904784:table [style=solid]
|
|
48
|
+
subgraph { rank=same; node130351332363056 -> node130351332361456[weight=10, style=invis]; }
|
|
49
49
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node130351336425488 [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
|
+
node130351334904784 [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
|
+
node130351334904784:ref0 -> node130351336425488:table [style=solid]
|
|
15
|
+
node130351336759104 [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
|
+
node130351336759104:ref0 -> node130351334904784:table [style=solid]
|
|
22
22
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node130351332363056 [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
|
+
node130351332361296 [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
|
+
node130351332361456 [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
|
+
node130351332361456:ref0 -> node130351332361296:table [style=solid]
|
|
34
|
+
node130351336425488 [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
|
+
node130351336425488:ref0 -> node130351332363056:table [style=solid]
|
|
41
|
+
node130351336425488:ref1 -> node130351332361456:table [style=solid]
|
|
42
|
+
node130351334904784 [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
|
+
node130351334904784:ref0 -> node130351336425488:table [style=solid]
|
|
49
|
+
node130351336759104 [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
|
+
node130351336759104:ref0 -> node130351334904784:table [style=solid]
|
|
56
|
+
subgraph { rank=same; node130351332363056 -> node130351332361456[weight=10, style=invis]; }
|
|
57
57
|
}
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node130351332363056 [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
|
+
node130351332361296 [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
|
+
node130351332361456 [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
|
+
node130351332361456:ref0 -> node130351332361296:table [style=solid]
|
|
25
|
+
node130351336425488 [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
|
+
node130351336425488:ref0 -> node130351332363056:table [style=solid]
|
|
33
|
+
node130351336425488:ref1 -> node130351332361456:table [style=solid]
|
|
34
|
+
node130351334904784 [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
|
+
node130351334904784:ref0 -> node130351336425488:table [style=solid]
|
|
41
|
+
node130351336759104 [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
|
+
node130351336759104:ref0 -> node130351334904784:table [style=solid]
|
|
48
|
+
subgraph { rank=same; node130351332363056 -> node130351332361456[weight=10, style=invis]; }
|
|
49
49
|
}
|