memory-graph 0.3.24__tar.gz → 0.3.26__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.24/memory_graph.egg-info → memory_graph-0.3.26}/PKG-INFO +30 -36
- {memory_graph-0.3.24 → memory_graph-0.3.26}/README.md +28 -34
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/add_one.gv +18 -18
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_dir.gv +5 -5
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_key_value.gv +12 -12
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_leaf.gv +5 -5
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_linear.gv +12 -12
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_table.gv +12 -12
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/bin_tree.gv +35 -35
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/copies.gv +20 -20
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/copy_method.gv +16 -16
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging01.gv +8 -8
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging01.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging02.gv +11 -11
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging02.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging03.gv +13 -13
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging03.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging04.gv +15 -15
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging04.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging05.gv +17 -17
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging05.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging06.gv +17 -17
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging06.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/extension_numpy.gv +8 -8
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/extension_pandas.gv +8 -8
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial0.gv +3 -3
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial0.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial1.gv +6 -6
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial1.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial2.gv +8 -8
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial2.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial3.gv +10 -10
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial3.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial4.gv +10 -10
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial4.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial5.gv +8 -8
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial5.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial6.gv +6 -6
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial6.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hash_set.gv +29 -29
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/highlight.gv +16 -16
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/immutable1.gv +4 -4
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/immutable2.gv +6 -6
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/introspect_depth.gv +56 -56
- memory_graph-0.3.26/images/linked_list.gv +55 -0
- memory_graph-0.3.26/images/linked_list.png +0 -0
- memory_graph-0.3.26/images/linked_list.py +35 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/many_types.gv +12 -12
- memory_graph-0.3.26/images/memory_graph.gv +70 -0
- memory_graph-0.3.26/images/memory_graph.pdf +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/mutable1.gv +4 -4
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/mutable2.gv +4 -4
- memory_graph-0.3.26/images/my_graph.gv +31 -0
- memory_graph-0.3.26/images/my_graph.pdf +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/not_node_types1.gv +6 -6
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/not_node_types2.gv +14 -14
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set0.gv +11 -11
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set0.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set1.gv +17 -17
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set1.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set10.gv +36 -36
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set10.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set11.gv +31 -31
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set11.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set12.gv +31 -31
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set12.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set13.gv +36 -36
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set13.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set14.gv +41 -41
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set14.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set15.gv +43 -43
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set15.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set16.gv +40 -40
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set16.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set17.gv +40 -40
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set17.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set18.gv +45 -45
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set18.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set19.gv +47 -47
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set19.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set2.gv +22 -22
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set2.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set20.gv +44 -44
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set20.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set21.gv +39 -39
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set21.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set22.gv +34 -34
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set22.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set23.gv +28 -28
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set23.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set3.gv +27 -27
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set3.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set4.gv +32 -32
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set4.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set5.gv +34 -34
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set5.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set6.gv +32 -32
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set6.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set7.gv +32 -32
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set7.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set8.gv +37 -37
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set8.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set9.gv +39 -39
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set9.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/rebinding1.gv +4 -4
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/rebinding2.gv +6 -6
- memory_graph-0.3.26/images/vscode_copying.gif +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/__init__.py +1 -1
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/memory_to_nodes.py +1 -1
- {memory_graph-0.3.24 → memory_graph-0.3.26/memory_graph.egg-info}/PKG-INFO +30 -36
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph.egg-info/SOURCES.txt +1 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/setup.py +2 -2
- memory_graph-0.3.24/images/linked_list.gv +0 -69
- memory_graph-0.3.24/images/linked_list.png +0 -0
- memory_graph-0.3.24/images/linked_list.py +0 -39
- memory_graph-0.3.24/images/memory_graph.gv +0 -178
- memory_graph-0.3.24/images/memory_graph.pdf +0 -0
- memory_graph-0.3.24/images/my_graph.gv +0 -35
- memory_graph-0.3.24/images/my_graph.pdf +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/LICENSE.txt +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/MANIFEST.in +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/.ipynb_checkpoints/jupyter_example-checkpoint.ipynb +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/add_one.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/add_one.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree.py~ +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_dir.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_fail.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_fail.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_key_value.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_leaf.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_linear.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/avltree_table.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/bin_tree.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/bin_tree.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/bin_tree2.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/bin_tree2.py~ +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/copies.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/copies.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/copy_method.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/copy_method.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/create_gif.sh +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/create_images.sh +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debug_vscode.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging.gif +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/debugging.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/depth.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/depth.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/extension_numpy.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/extension_numpy.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/extension_pandas.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/extension_pandas.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial.gif +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial01.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial02.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial03.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial04.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial05.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial06.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/factorial07.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hash_set.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hash_set.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hidden_edges.gv +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hidden_edges.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hidden_edges.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/hidden_edges.py~ +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/highlight.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/highlight.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/immutable.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/immutable1.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/immutable2.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/introspect_depth.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/introspect_depth.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/introspect_depth.py~ +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/ipython.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/jupyter_example.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/log.txt +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/many_types.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/many_types.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/memory_graph.gv.pdf +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/mutable.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/mutable1.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/mutable2.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/name_rebinding.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/not_node_types.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/not_node_types.py~ +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/not_node_types1.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/not_node_types2.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set.gif +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/power_set.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/pyodide.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/rebinding1.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/rebinding2.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/images/uva.png +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/install.txt +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/call_stack.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/config.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/config_default.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/config_helpers.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/extension_numpy.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/extension_pandas.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/html_table.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/list_view.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/node_base.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/node_key_value.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/node_leaf.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/node_linear.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/node_table.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/sequence.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/slicer.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/slices.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/slices_iterator.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/slices_table_iterator.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_max_graph_depth.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_memory_graph.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_memory_to_nodes.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_sequence.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_slicer.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_slices.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/test_slices_iterator.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph/utils.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph.egg-info/dependency_links.txt +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph.egg-info/requires.txt +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/memory_graph.egg-info/top_level.txt +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/setup.cfg +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/src/auto_memory_graph.py +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/src/jupyter_example.ipynb +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/src/pyodide.html +0 -0
- {memory_graph-0.3.24 → memory_graph-0.3.26}/uml/memory_graph.uxf +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: memory_graph
|
|
3
|
-
Version: 0.3.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.3.26
|
|
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
|
|
7
7
|
Author-email: bterwijn@gmail.com
|
|
@@ -24,6 +24,11 @@ pip install --upgrade memory_graph
|
|
|
24
24
|
```
|
|
25
25
|
Additionally [Graphviz](https://graphviz.org/download/) needs to be installed.
|
|
26
26
|
|
|
27
|
+
# Videos #
|
|
28
|
+
| [](https://www.youtube.com/watch?v=23_bHcr7hqo) | [](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
29
|
+
|:--:|:--:|
|
|
30
|
+
| [Quick Intro](https://www.youtube.com/watch?v=23_bHcr7hqo) | [Mutability](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
31
|
+
|
|
27
32
|
# Memory Graph #
|
|
28
33
|
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:
|
|
29
34
|
|
|
@@ -41,7 +46,7 @@ mg.show(data)
|
|
|
41
46
|
```
|
|
42
47
|

|
|
43
48
|
|
|
44
|
-
Instead of showing the graph on screen you can also render it to an output file
|
|
49
|
+
Instead of showing the graph on screen you can also render it to an output file (see [Graphviz Output Formats](https://graphviz.org/docs/outputs/)) using for example:
|
|
45
50
|
|
|
46
51
|
```python
|
|
47
52
|
mg.render(data, "my_graph.pdf")
|
|
@@ -93,13 +98,6 @@ identical?: True
|
|
|
93
98
|
```
|
|
94
99
|
A better way to understand what data is shared is to draw a graph of the data using the [memory_graph](https://pypi.org/project/memory-graph/) package.
|
|
95
100
|
|
|
96
|
-
# Videos #
|
|
97
|
-
|
|
98
|
-
| [](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
99
|
-
|:--:|
|
|
100
|
-
| [Mutability](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
101
|
-
|
|
102
|
-
|
|
103
101
|
# Chapters #
|
|
104
102
|
|
|
105
103
|
[Python Data Model](#python-data-model)
|
|
@@ -364,7 +362,7 @@ The ```mg.stack()``` doesn't work well in *watch* context in most debuggers beca
|
|
|
364
362
|
| **Visual Studio Code** | `mg.stack_vscode()` |
|
|
365
363
|
| **Pycharm** | `mg.stack_pycharm()` |
|
|
366
364
|
|
|
367
|
-

|
|
368
366
|
|
|
369
367
|
## Other Debuggers ##
|
|
370
368
|
For other debuggers, invoke this function within the *watch* context. Then, in the "call_stack.txt" file, identify the slice of functions you wish to include in the call stack.
|
|
@@ -418,35 +416,31 @@ import memory_graph as mg
|
|
|
418
416
|
import random
|
|
419
417
|
random.seed(0) # use same random numbers each run
|
|
420
418
|
|
|
421
|
-
class
|
|
419
|
+
class Linked_List:
|
|
422
420
|
|
|
423
|
-
def __init__(self, value):
|
|
424
|
-
self.prev =
|
|
421
|
+
def __init__(self, value=None, prev=None, next=None):
|
|
422
|
+
self.prev = prev
|
|
425
423
|
self.value = value
|
|
426
|
-
self.next =
|
|
427
|
-
|
|
428
|
-
class LinkedList:
|
|
429
|
-
|
|
430
|
-
def __init__(self):
|
|
431
|
-
self.head = None
|
|
432
|
-
self.tail = None
|
|
424
|
+
self.next = next
|
|
433
425
|
|
|
434
426
|
def add_front(self, value):
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
427
|
+
if self.value == None:
|
|
428
|
+
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
|
|
439
433
|
else:
|
|
440
|
-
new_node
|
|
441
|
-
self.
|
|
442
|
-
self.
|
|
443
|
-
mg.block(mg.show, locals()) # <--- draw locals
|
|
434
|
+
new_node = Linked_List(value, self.next)
|
|
435
|
+
self.next.next = new_node
|
|
436
|
+
self.next = new_node
|
|
444
437
|
|
|
445
|
-
linked_list =
|
|
438
|
+
linked_list = Linked_List()
|
|
446
439
|
n = 100
|
|
447
440
|
for i in range(n):
|
|
448
|
-
|
|
449
|
-
linked_list.add_front(
|
|
441
|
+
value = random.randrange(n)
|
|
442
|
+
linked_list.add_front(value)
|
|
443
|
+
mg.show(locals())
|
|
450
444
|
```
|
|
451
445
|

|
|
452
446
|
|
|
@@ -581,7 +575,7 @@ mg.render(locals(), 'not_node_types2.png')
|
|
|
581
575
|
|:-----------------------------------------------------------:|:-------------------------------------------------------------:|
|
|
582
576
|
| not_node_types1.png — simplified | not_node_types2.png — technically correct |
|
|
583
577
|
|
|
584
|
-
Additionally, the simplification hides away the [reuse of small int values](https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong) in the current CPython implementation, an optimization that might otherwise confuse beginner Python programmers. For instance, after executing `a[1]+=1; b[1]+=1` the `201` value is, maybe surprisingly, still shared between `a` and `b`, whereas executing `a[2]+=1; b[2]+=1` does not result in sharing the `301` value.
|
|
578
|
+
Additionally, the simplification hides away the [reuse of small int values \[-5, 256\]](https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong) in the current CPython implementation, an optimization that might otherwise confuse beginner Python programmers. For instance, after executing `a[1]+=1; b[1]+=1` the `201` value is, maybe surprisingly, still shared between `a` and `b`, whereas executing `a[2]+=1; b[2]+=1` does not result in sharing the `301` value.
|
|
585
579
|
|
|
586
580
|
## Temporary Configuration ##
|
|
587
581
|
In addition to the global configuration, a temporary configuration can be set for a single `show()` or `render()` call to change the colors, orientation, and slicer. This example highlights a particular list element in red, gives it a horizontal orientation, and overwrites the default slicer for lists:
|
|
@@ -777,9 +771,9 @@ mg.show(locals())
|
|
|
777
771
|
|
|
778
772
|
|
|
779
773
|
# Introspection Depth #
|
|
780
|
-
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. Alternatively the `id()` of a data elements can be used to
|
|
774
|
+
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`.
|
|
781
775
|
|
|
782
|
-
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
|
|
776
|
+
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`.
|
|
783
777
|
|
|
784
778
|
```python
|
|
785
779
|
import memory_graph as mg
|
|
@@ -830,7 +824,7 @@ mg.show(locals())
|
|
|
830
824
|
|
|
831
825
|
## Hidden Edges ##
|
|
832
826
|
|
|
833
|
-
As the value of `x` is shown in the graph, we would want to show all the references to it, but the Slicer hides references by slicing the list to keep the graph small. The `max_missing_edges` variable determines how many hidden references to `x` we show. If there are more references then we show, then theses hidden references are shown with dashed lines to indicate some references are left out.
|
|
827
|
+
As the value of `x` is shown in the graph, we would want to show all the references to it, but the default list Slicer hides references by slicing the list to keep the graph small. The `max_missing_edges` variable then determines how many additional hidden references to `x` we show. If there are more references then we show, then theses hidden references are shown with dashed lines to indicate some references are left out.
|
|
834
828
|
|
|
835
829
|
```python
|
|
836
830
|
import memory_graph as mg
|
|
@@ -5,6 +5,11 @@ pip install --upgrade memory_graph
|
|
|
5
5
|
```
|
|
6
6
|
Additionally [Graphviz](https://graphviz.org/download/) needs to be installed.
|
|
7
7
|
|
|
8
|
+
# Videos #
|
|
9
|
+
| [](https://www.youtube.com/watch?v=23_bHcr7hqo) | [](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
10
|
+
|:--:|:--:|
|
|
11
|
+
| [Quick Intro](https://www.youtube.com/watch?v=23_bHcr7hqo) | [Mutability](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
12
|
+
|
|
8
13
|
# Memory Graph #
|
|
9
14
|
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:
|
|
10
15
|
|
|
@@ -22,7 +27,7 @@ mg.show(data)
|
|
|
22
27
|
```
|
|
23
28
|

|
|
24
29
|
|
|
25
|
-
Instead of showing the graph on screen you can also render it to an output file
|
|
30
|
+
Instead of showing the graph on screen you can also render it to an output file (see [Graphviz Output Formats](https://graphviz.org/docs/outputs/)) using for example:
|
|
26
31
|
|
|
27
32
|
```python
|
|
28
33
|
mg.render(data, "my_graph.pdf")
|
|
@@ -74,13 +79,6 @@ identical?: True
|
|
|
74
79
|
```
|
|
75
80
|
A better way to understand what data is shared is to draw a graph of the data using the [memory_graph](https://pypi.org/project/memory-graph/) package.
|
|
76
81
|
|
|
77
|
-
# Videos #
|
|
78
|
-
|
|
79
|
-
| [](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
80
|
-
|:--:|
|
|
81
|
-
| [Mutability](https://www.youtube.com/watch?v=pvIJgHCaXhU) |
|
|
82
|
-
|
|
83
|
-
|
|
84
82
|
# Chapters #
|
|
85
83
|
|
|
86
84
|
[Python Data Model](#python-data-model)
|
|
@@ -345,7 +343,7 @@ The ```mg.stack()``` doesn't work well in *watch* context in most debuggers beca
|
|
|
345
343
|
| **Visual Studio Code** | `mg.stack_vscode()` |
|
|
346
344
|
| **Pycharm** | `mg.stack_pycharm()` |
|
|
347
345
|
|
|
348
|
-

|
|
349
347
|
|
|
350
348
|
## Other Debuggers ##
|
|
351
349
|
For other debuggers, invoke this function within the *watch* context. Then, in the "call_stack.txt" file, identify the slice of functions you wish to include in the call stack.
|
|
@@ -399,35 +397,31 @@ import memory_graph as mg
|
|
|
399
397
|
import random
|
|
400
398
|
random.seed(0) # use same random numbers each run
|
|
401
399
|
|
|
402
|
-
class
|
|
400
|
+
class Linked_List:
|
|
403
401
|
|
|
404
|
-
def __init__(self, value):
|
|
405
|
-
self.prev =
|
|
402
|
+
def __init__(self, value=None, prev=None, next=None):
|
|
403
|
+
self.prev = prev
|
|
406
404
|
self.value = value
|
|
407
|
-
self.next =
|
|
408
|
-
|
|
409
|
-
class LinkedList:
|
|
410
|
-
|
|
411
|
-
def __init__(self):
|
|
412
|
-
self.head = None
|
|
413
|
-
self.tail = None
|
|
405
|
+
self.next = next
|
|
414
406
|
|
|
415
407
|
def add_front(self, value):
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
408
|
+
if self.value == None:
|
|
409
|
+
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
|
|
420
414
|
else:
|
|
421
|
-
new_node
|
|
422
|
-
self.
|
|
423
|
-
self.
|
|
424
|
-
mg.block(mg.show, locals()) # <--- draw locals
|
|
415
|
+
new_node = Linked_List(value, self.next)
|
|
416
|
+
self.next.next = new_node
|
|
417
|
+
self.next = new_node
|
|
425
418
|
|
|
426
|
-
linked_list =
|
|
419
|
+
linked_list = Linked_List()
|
|
427
420
|
n = 100
|
|
428
421
|
for i in range(n):
|
|
429
|
-
|
|
430
|
-
linked_list.add_front(
|
|
422
|
+
value = random.randrange(n)
|
|
423
|
+
linked_list.add_front(value)
|
|
424
|
+
mg.show(locals())
|
|
431
425
|
```
|
|
432
426
|

|
|
433
427
|
|
|
@@ -562,7 +556,7 @@ mg.render(locals(), 'not_node_types2.png')
|
|
|
562
556
|
|:-----------------------------------------------------------:|:-------------------------------------------------------------:|
|
|
563
557
|
| not_node_types1.png — simplified | not_node_types2.png — technically correct |
|
|
564
558
|
|
|
565
|
-
Additionally, the simplification hides away the [reuse of small int values](https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong) in the current CPython implementation, an optimization that might otherwise confuse beginner Python programmers. For instance, after executing `a[1]+=1; b[1]+=1` the `201` value is, maybe surprisingly, still shared between `a` and `b`, whereas executing `a[2]+=1; b[2]+=1` does not result in sharing the `301` value.
|
|
559
|
+
Additionally, the simplification hides away the [reuse of small int values \[-5, 256\]](https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong) in the current CPython implementation, an optimization that might otherwise confuse beginner Python programmers. For instance, after executing `a[1]+=1; b[1]+=1` the `201` value is, maybe surprisingly, still shared between `a` and `b`, whereas executing `a[2]+=1; b[2]+=1` does not result in sharing the `301` value.
|
|
566
560
|
|
|
567
561
|
## Temporary Configuration ##
|
|
568
562
|
In addition to the global configuration, a temporary configuration can be set for a single `show()` or `render()` call to change the colors, orientation, and slicer. This example highlights a particular list element in red, gives it a horizontal orientation, and overwrites the default slicer for lists:
|
|
@@ -758,9 +752,9 @@ mg.show(locals())
|
|
|
758
752
|
|
|
759
753
|
|
|
760
754
|
# Introspection Depth #
|
|
761
|
-
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. Alternatively the `id()` of a data elements can be used to
|
|
755
|
+
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`.
|
|
762
756
|
|
|
763
|
-
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
|
|
757
|
+
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`.
|
|
764
758
|
|
|
765
759
|
```python
|
|
766
760
|
import memory_graph as mg
|
|
@@ -811,7 +805,7 @@ mg.show(locals())
|
|
|
811
805
|
|
|
812
806
|
## Hidden Edges ##
|
|
813
807
|
|
|
814
|
-
As the value of `x` is shown in the graph, we would want to show all the references to it, but the Slicer hides references by slicing the list to keep the graph small. The `max_missing_edges` variable determines how many hidden references to `x` we show. If there are more references then we show, then theses hidden references are shown with dashed lines to indicate some references are left out.
|
|
808
|
+
As the value of `x` is shown in the graph, we would want to show all the references to it, but the default list Slicer hides references by slicing the list to keep the graph small. The `max_missing_edges` variable then determines how many additional hidden references to `x` we show. If there are more references then we show, then theses hidden references are shown with dashed lines to indicate some references are left out.
|
|
815
809
|
|
|
816
810
|
```python
|
|
817
811
|
import memory_graph as mg
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node124722886398528 [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
|
+
node124722875623872 [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
|
+
node124722886396736 [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
|
+
node124722875625472 [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
|
+
node124722875625472:ref0 -> node124722886398528:table [style=solid]
|
|
32
|
+
node124722875625472:ref1 -> node124722875623872:table [style=solid]
|
|
33
|
+
node124722875625472:ref2 -> node124722886396736:table [style=solid]
|
|
34
|
+
node124722875522544 [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
|
+
node124722875514240 [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
|
+
node124722875508928 [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
|
+
node124722875508928:ref0 -> node124722886398528:table [style=solid]
|
|
57
|
+
node124722875508928:ref1 -> node124722875522544:table [style=solid]
|
|
58
|
+
node124722875508928:ref2 -> node124722875514240:table [style=solid]
|
|
59
|
+
node124722873168144 [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
|
+
node124722873168144:ref0 -> node124722875625472:table [style=solid]
|
|
66
|
+
node124722873168144:ref1 -> node124722875508928:table [style=solid]
|
|
67
|
+
subgraph { rank=same; node124722875625472 -> node124722875508928[weight=10, style=invis]; }
|
|
68
|
+
subgraph { rank=same; node124722886398528 -> node124722875623872 -> node124722886396736 -> node124722875522544 -> node124722875514240[weight=10, style=invis]; }
|
|
69
69
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node124372962549232 [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
|
+
node124372962727920 [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
|
+
node124372962727920:ref0 -> node124372962549232:table [style=solid]
|
|
48
|
+
node124372964581056 [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
|
+
node124372964581056:ref0 -> node124372962727920:table [style=solid]
|
|
55
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node124372960185536 [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
|
+
node124372960183776 [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
|
+
node124372960183936 [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
|
+
node124372960183936:ref0 -> node124372960183776:table [style=solid]
|
|
26
|
+
node124372962549232 [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
|
+
node124372962549232:ref0 -> node124372960185536:table [style=solid]
|
|
33
|
+
node124372962549232:ref1 -> node124372960183936:table [style=solid]
|
|
34
|
+
node124372962727920 [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
|
+
node124372962727920:ref0 -> node124372962549232:table [style=solid]
|
|
41
|
+
node124372964581056 [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
|
+
node124372964581056:ref0 -> node124372962727920:table [style=solid]
|
|
48
|
+
subgraph { rank=same; node124372960185536 -> node124372960183936[weight=10, style=invis]; }
|
|
49
49
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node124372962549232 [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
|
+
node124372962727920 [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
|
+
node124372962727920:ref0 -> node124372962549232:table [style=solid]
|
|
15
|
+
node124372964581056 [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
|
+
node124372964581056:ref0 -> node124372962727920:table [style=solid]
|
|
22
22
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node124372960185536 [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
|
+
node124372960183776 [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
|
+
node124372960183936 [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
|
+
node124372960183936:ref0 -> node124372960183776:table [style=solid]
|
|
34
|
+
node124372962549232 [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
|
+
node124372962549232:ref0 -> node124372960185536:table [style=solid]
|
|
41
|
+
node124372962549232:ref1 -> node124372960183936:table [style=solid]
|
|
42
|
+
node124372962727920 [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
|
+
node124372962727920:ref0 -> node124372962549232:table [style=solid]
|
|
49
|
+
node124372964581056 [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
|
+
node124372964581056:ref0 -> node124372962727920:table [style=solid]
|
|
56
|
+
subgraph { rank=same; node124372960185536 -> node124372960183936[weight=10, style=invis]; }
|
|
57
57
|
}
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
digraph memory_graph {
|
|
2
2
|
node [shape=plaintext]
|
|
3
|
-
|
|
3
|
+
node124372960185536 [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
|
+
node124372960183776 [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
|
+
node124372960183936 [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
|
+
node124372960183936:ref0 -> node124372960183776:table [style=solid]
|
|
25
|
+
node124372962549232 [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
|
+
node124372962549232:ref0 -> node124372960185536:table [style=solid]
|
|
33
|
+
node124372962549232:ref1 -> node124372960183936:table [style=solid]
|
|
34
|
+
node124372962727920 [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
|
+
node124372962727920:ref0 -> node124372962549232:table [style=solid]
|
|
41
|
+
node124372964581056 [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
|
+
node124372964581056:ref0 -> node124372962727920:table [style=solid]
|
|
48
|
+
subgraph { rank=same; node124372960185536 -> node124372960183936[weight=10, style=invis]; }
|
|
49
49
|
}
|