memory-graph 0.3.27__tar.gz → 0.3.29__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.
Files changed (233) hide show
  1. {memory_graph-0.3.27/memory_graph.egg-info → memory_graph-0.3.29}/PKG-INFO +22 -4
  2. {memory_graph-0.3.27 → memory_graph-0.3.29}/README.md +21 -3
  3. memory_graph-0.3.29/images/add_one.gv +69 -0
  4. memory_graph-0.3.29/images/avltree_dir.gv +55 -0
  5. memory_graph-0.3.29/images/avltree_key_value.gv +49 -0
  6. memory_graph-0.3.29/images/avltree_leaf.gv +22 -0
  7. memory_graph-0.3.29/images/avltree_linear.gv +57 -0
  8. memory_graph-0.3.29/images/avltree_table.gv +49 -0
  9. memory_graph-0.3.29/images/bin_tree.gv +110 -0
  10. memory_graph-0.3.29/images/copies.gv +63 -0
  11. memory_graph-0.3.29/images/copy_method.gv +53 -0
  12. memory_graph-0.3.29/images/debugging01.gv +29 -0
  13. memory_graph-0.3.29/images/debugging01.png +0 -0
  14. memory_graph-0.3.29/images/debugging02.gv +38 -0
  15. memory_graph-0.3.29/images/debugging02.png +0 -0
  16. memory_graph-0.3.29/images/debugging03.gv +47 -0
  17. memory_graph-0.3.29/images/debugging03.png +0 -0
  18. memory_graph-0.3.29/images/debugging04.gv +57 -0
  19. memory_graph-0.3.29/images/debugging04.png +0 -0
  20. memory_graph-0.3.29/images/debugging05.gv +68 -0
  21. memory_graph-0.3.29/images/debugging05.png +0 -0
  22. memory_graph-0.3.29/images/debugging06.gv +68 -0
  23. memory_graph-0.3.29/images/debugging06.png +0 -0
  24. memory_graph-0.3.29/images/extension_numpy.gv +52 -0
  25. memory_graph-0.3.29/images/extension_pandas.gv +49 -0
  26. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/factorial.py +3 -3
  27. memory_graph-0.3.29/images/factorial0.gv +15 -0
  28. memory_graph-0.3.29/images/factorial0.png +0 -0
  29. memory_graph-0.3.29/images/factorial1.gv +22 -0
  30. memory_graph-0.3.29/images/factorial1.png +0 -0
  31. memory_graph-0.3.29/images/factorial2.gv +28 -0
  32. memory_graph-0.3.29/images/factorial2.png +0 -0
  33. memory_graph-0.3.29/images/factorial3.gv +34 -0
  34. memory_graph-0.3.29/images/factorial3.png +0 -0
  35. memory_graph-0.3.29/images/factorial4.gv +35 -0
  36. memory_graph-0.3.29/images/factorial4.png +0 -0
  37. memory_graph-0.3.29/images/factorial5.gv +29 -0
  38. memory_graph-0.3.29/images/factorial5.png +0 -0
  39. memory_graph-0.3.29/images/factorial6.gv +23 -0
  40. memory_graph-0.3.29/images/factorial6.png +0 -0
  41. memory_graph-0.3.29/images/hash_set.gv +96 -0
  42. memory_graph-0.3.29/images/highlight.gv +92 -0
  43. memory_graph-0.3.29/images/immutable1.gv +18 -0
  44. memory_graph-0.3.29/images/immutable2.gv +27 -0
  45. memory_graph-0.3.29/images/introspect_depth.gv +178 -0
  46. memory_graph-0.3.29/images/linked_list.gv +57 -0
  47. memory_graph-0.3.29/images/many_types.gv +46 -0
  48. memory_graph-0.3.29/images/mutable1.gv +18 -0
  49. memory_graph-0.3.29/images/mutable2.gv +19 -0
  50. memory_graph-0.3.29/images/not_node_types1.gv +26 -0
  51. memory_graph-0.3.29/images/not_node_types2.gv +46 -0
  52. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/power_set.py +4 -4
  53. memory_graph-0.3.29/images/power_set0.gv +38 -0
  54. memory_graph-0.3.29/images/power_set0.png +0 -0
  55. memory_graph-0.3.29/images/power_set1.gv +53 -0
  56. memory_graph-0.3.29/images/power_set1.png +0 -0
  57. memory_graph-0.3.29/images/power_set10.gv +103 -0
  58. memory_graph-0.3.29/images/power_set10.png +0 -0
  59. memory_graph-0.3.29/images/power_set11.gv +93 -0
  60. memory_graph-0.3.29/images/power_set11.png +0 -0
  61. memory_graph-0.3.29/images/power_set12.gv +93 -0
  62. memory_graph-0.3.29/images/power_set12.png +0 -0
  63. memory_graph-0.3.29/images/power_set13.gv +103 -0
  64. memory_graph-0.3.29/images/power_set13.png +0 -0
  65. memory_graph-0.3.29/images/power_set14.gv +114 -0
  66. memory_graph-0.3.29/images/power_set14.png +0 -0
  67. memory_graph-0.3.29/images/power_set15.gv +120 -0
  68. memory_graph-0.3.29/images/power_set15.png +0 -0
  69. memory_graph-0.3.29/images/power_set16.gv +116 -0
  70. memory_graph-0.3.29/images/power_set16.png +0 -0
  71. memory_graph-0.3.29/images/power_set17.gv +116 -0
  72. memory_graph-0.3.29/images/power_set17.png +0 -0
  73. memory_graph-0.3.29/images/power_set18.gv +126 -0
  74. memory_graph-0.3.29/images/power_set18.png +0 -0
  75. memory_graph-0.3.29/images/power_set19.gv +132 -0
  76. memory_graph-0.3.29/images/power_set19.png +0 -0
  77. memory_graph-0.3.29/images/power_set2.gv +63 -0
  78. memory_graph-0.3.29/images/power_set2.png +0 -0
  79. memory_graph-0.3.29/images/power_set20.gv +128 -0
  80. memory_graph-0.3.29/images/power_set20.png +0 -0
  81. memory_graph-0.3.29/images/power_set21.gv +118 -0
  82. memory_graph-0.3.29/images/power_set21.png +0 -0
  83. memory_graph-0.3.29/images/power_set22.gv +108 -0
  84. memory_graph-0.3.29/images/power_set22.png +0 -0
  85. memory_graph-0.3.29/images/power_set23.gv +93 -0
  86. memory_graph-0.3.29/images/power_set23.png +0 -0
  87. memory_graph-0.3.29/images/power_set3.gv +74 -0
  88. memory_graph-0.3.29/images/power_set3.png +0 -0
  89. memory_graph-0.3.29/images/power_set4.gv +85 -0
  90. memory_graph-0.3.29/images/power_set4.png +0 -0
  91. memory_graph-0.3.29/images/power_set5.gv +93 -0
  92. memory_graph-0.3.29/images/power_set5.png +0 -0
  93. memory_graph-0.3.29/images/power_set6.gv +91 -0
  94. memory_graph-0.3.29/images/power_set6.png +0 -0
  95. memory_graph-0.3.29/images/power_set7.gv +90 -0
  96. memory_graph-0.3.29/images/power_set7.png +0 -0
  97. memory_graph-0.3.29/images/power_set8.gv +101 -0
  98. memory_graph-0.3.29/images/power_set8.png +0 -0
  99. memory_graph-0.3.29/images/power_set9.gv +107 -0
  100. memory_graph-0.3.29/images/power_set9.png +0 -0
  101. memory_graph-0.3.29/images/rebinding1.gv +18 -0
  102. memory_graph-0.3.29/images/rebinding2.gv +26 -0
  103. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/__init__.py +8 -8
  104. {memory_graph-0.3.27 → memory_graph-0.3.29/memory_graph.egg-info}/PKG-INFO +22 -4
  105. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph.egg-info/SOURCES.txt +70 -7
  106. {memory_graph-0.3.27 → memory_graph-0.3.29}/setup.py +1 -1
  107. memory_graph-0.3.27/images/debugging01.png +0 -0
  108. memory_graph-0.3.27/images/debugging02.png +0 -0
  109. memory_graph-0.3.27/images/debugging03.png +0 -0
  110. memory_graph-0.3.27/images/debugging04.png +0 -0
  111. memory_graph-0.3.27/images/debugging05.png +0 -0
  112. memory_graph-0.3.27/images/debugging06.png +0 -0
  113. memory_graph-0.3.27/images/factorial01.png +0 -0
  114. memory_graph-0.3.27/images/factorial02.png +0 -0
  115. memory_graph-0.3.27/images/factorial03.png +0 -0
  116. memory_graph-0.3.27/images/factorial04.png +0 -0
  117. memory_graph-0.3.27/images/factorial05.png +0 -0
  118. memory_graph-0.3.27/images/factorial06.png +0 -0
  119. memory_graph-0.3.27/images/factorial07.png +0 -0
  120. memory_graph-0.3.27/images/power_set1.png +0 -0
  121. memory_graph-0.3.27/images/power_set10.png +0 -0
  122. memory_graph-0.3.27/images/power_set11.png +0 -0
  123. memory_graph-0.3.27/images/power_set12.png +0 -0
  124. memory_graph-0.3.27/images/power_set13.png +0 -0
  125. memory_graph-0.3.27/images/power_set14.png +0 -0
  126. memory_graph-0.3.27/images/power_set15.png +0 -0
  127. memory_graph-0.3.27/images/power_set16.png +0 -0
  128. memory_graph-0.3.27/images/power_set17.png +0 -0
  129. memory_graph-0.3.27/images/power_set18.png +0 -0
  130. memory_graph-0.3.27/images/power_set19.png +0 -0
  131. memory_graph-0.3.27/images/power_set2.png +0 -0
  132. memory_graph-0.3.27/images/power_set20.png +0 -0
  133. memory_graph-0.3.27/images/power_set21.png +0 -0
  134. memory_graph-0.3.27/images/power_set22.png +0 -0
  135. memory_graph-0.3.27/images/power_set3.png +0 -0
  136. memory_graph-0.3.27/images/power_set4.png +0 -0
  137. memory_graph-0.3.27/images/power_set5.png +0 -0
  138. memory_graph-0.3.27/images/power_set6.png +0 -0
  139. memory_graph-0.3.27/images/power_set7.png +0 -0
  140. memory_graph-0.3.27/images/power_set8.png +0 -0
  141. memory_graph-0.3.27/images/power_set9.png +0 -0
  142. {memory_graph-0.3.27 → memory_graph-0.3.29}/LICENSE.txt +0 -0
  143. {memory_graph-0.3.27 → memory_graph-0.3.29}/MANIFEST.in +0 -0
  144. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/add_one.png +0 -0
  145. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/add_one.py +0 -0
  146. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree.py +0 -0
  147. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree_dir.png +0 -0
  148. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree_fail.png +0 -0
  149. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree_key_value.png +0 -0
  150. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree_leaf.png +0 -0
  151. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree_linear.png +0 -0
  152. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/avltree_table.png +0 -0
  153. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/bin_tree.png +0 -0
  154. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/bin_tree.py +0 -0
  155. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/cmp.sh +0 -0
  156. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/cmp.sh~ +0 -0
  157. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/copies.png +0 -0
  158. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/copies.py +0 -0
  159. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/copy_method.png +0 -0
  160. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/copy_method.py +0 -0
  161. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/create_gif.sh +0 -0
  162. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/create_images.sh +0 -0
  163. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/debug_vscode.png +0 -0
  164. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/debugging.gif +0 -0
  165. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/debugging.py +0 -0
  166. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/extension_numpy.png +0 -0
  167. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/extension_numpy.py +0 -0
  168. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/extension_pandas.png +0 -0
  169. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/extension_pandas.py +0 -0
  170. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/factorial.gif +0 -0
  171. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/hash_set.png +0 -0
  172. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/hash_set.py +0 -0
  173. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/hidden_edges.png +0 -0
  174. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/highlight.png +0 -0
  175. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/highlight.py +0 -0
  176. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/immutable.py +0 -0
  177. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/immutable1.png +0 -0
  178. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/immutable2.png +0 -0
  179. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/introspect_depth.png +0 -0
  180. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/introspect_depth.py +0 -0
  181. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/ipython.png +0 -0
  182. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/jupyter_example.png +0 -0
  183. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/linked_list.png +0 -0
  184. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/linked_list.py +0 -0
  185. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/many_types.png +0 -0
  186. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/many_types.py +0 -0
  187. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/mutable.py +0 -0
  188. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/mutable1.png +0 -0
  189. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/mutable2.png +0 -0
  190. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/name_rebinding.py +0 -0
  191. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/name_rebinding.py~ +0 -0
  192. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/not_node_types.py +0 -0
  193. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/not_node_types1.png +0 -0
  194. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/not_node_types2.png +0 -0
  195. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/power_set.gif +0 -0
  196. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/pyodide.png +0 -0
  197. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/rebinding1.png +0 -0
  198. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/rebinding2.png +0 -0
  199. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/uva.png +0 -0
  200. {memory_graph-0.3.27 → memory_graph-0.3.29}/images/vscode_copying.gif +0 -0
  201. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/call_stack.py +0 -0
  202. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/config.py +0 -0
  203. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/config_default.py +0 -0
  204. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/config_helpers.py +0 -0
  205. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/extension_numpy.py +0 -0
  206. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/extension_pandas.py +0 -0
  207. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/html_table.py +0 -0
  208. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/list_view.py +0 -0
  209. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/memory_to_nodes.py +0 -0
  210. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/node_base.py +0 -0
  211. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/node_key_value.py +0 -0
  212. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/node_leaf.py +0 -0
  213. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/node_linear.py +0 -0
  214. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/node_table.py +0 -0
  215. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/sequence.py +0 -0
  216. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/slicer.py +0 -0
  217. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/slices.py +0 -0
  218. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/slices_iterator.py +0 -0
  219. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/slices_table_iterator.py +0 -0
  220. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/t.py +0 -0
  221. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test.py +0 -0
  222. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_max_graph_depth.py +0 -0
  223. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_memory_graph.py +0 -0
  224. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_memory_to_nodes.py +0 -0
  225. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_sequence.py +0 -0
  226. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_slicer.py +0 -0
  227. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_slices.py +0 -0
  228. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/test_slices_iterator.py +0 -0
  229. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph/utils.py +0 -0
  230. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph.egg-info/dependency_links.txt +0 -0
  231. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph.egg-info/requires.txt +0 -0
  232. {memory_graph-0.3.27 → memory_graph-0.3.29}/memory_graph.egg-info/top_level.txt +0 -0
  233. {memory_graph-0.3.27 → memory_graph-0.3.29}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: memory_graph
3
- Version: 0.3.27
3
+ Version: 0.3.29
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
- [Introspection Depth](#introspection-depth)
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
 
@@ -770,7 +772,7 @@ mg.show(locals())
770
772
  ![extension_numpy.png](https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/avltree_table.png)
771
773
 
772
774
 
773
- # Introspection Depth #
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
  ![pyodide.png](https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/pyodide.png)
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
+ &nbsp;&nbsp;&nbsp; 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
- [Introspection Depth](#introspection-depth)
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
 
@@ -751,7 +753,7 @@ mg.show(locals())
751
753
  ![extension_numpy.png](https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/avltree_table.png)
752
754
 
753
755
 
754
- # Introspection Depth #
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
  ![pyodide.png](https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/pyodide.png)
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
+ &nbsp;&nbsp;&nbsp; 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.
@@ -0,0 +1,69 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node136650744844864 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="lightcoral" PORT="table">
5
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
6
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
7
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
8
+ <TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 1 </TD></TR>
9
+ </TABLE>
10
+ > xlabel=list]
11
+ node136650743234112 [label=<
12
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="orange" PORT="table">
13
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
14
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
15
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
16
+ </TABLE>
17
+ > xlabel=tuple]
18
+ node136650744843072 [label=<
19
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="lightcoral" PORT="table">
20
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
21
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
22
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
23
+ </TABLE>
24
+ > xlabel=list]
25
+ node136650743230144 [label=<
26
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
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
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD><TD BORDER="1" PORT="ref2"> </TD></TR>
29
+ </TABLE>
30
+ > xlabel=dict]
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
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="orange" PORT="table">
36
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
37
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
38
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
39
+ <TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 1 </TD></TR>
40
+ </TABLE>
41
+ > xlabel=tuple]
42
+ node136650743119168 [label=<
43
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="lightcoral" PORT="table">
44
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 4 </TD></TR>
45
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> 3 </TD></TR>
46
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> 2 </TD></TR>
47
+ <TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 1 </TD></TR>
48
+ </TABLE>
49
+ > xlabel=list]
50
+ node136650743113856 [label=<
51
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
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
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD><TD BORDER="1" PORT="ref2"> </TD></TR>
54
+ </TABLE>
55
+ > xlabel=dict]
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
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="khaki" PORT="table">
61
+ <TR><TD BORDER="1" STYLE="ROUNDED"> 0: &lt;module&gt; </TD><TD BORDER="1" STYLE="ROUNDED"> 1: add_one </TD></TR>
62
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
63
+ </TABLE>
64
+ > xlabel=call_stack]
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
+ }
@@ -0,0 +1,55 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node130351336425488 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
5
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> __class__ </TD></TR>
6
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> __delattr__ </TD></TR>
7
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> __dir__ </TD></TR>
8
+ <TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> __doc__ </TD></TR>
9
+ <TR><TD BORDER="0"><font color="#505050">4</font></TD><TD BORDER="1"> __eq__ </TD></TR>
10
+ <TR><TD BORDER="0"><font color="#505050">5</font></TD><TD BORDER="1"> __format__ </TD></TR>
11
+ <TR><TD BORDER="0"><font color="#505050">6</font></TD><TD BORDER="1"> __ge__ </TD></TR>
12
+ <TR><TD BORDER="0"><font color="#505050">7</font></TD><TD BORDER="1"> __getattribute__ </TD></TR>
13
+ <TR><TD BORDER="0"><font color="#505050">8</font></TD><TD BORDER="1"> __getitem__ </TD></TR>
14
+ <TR><TD BORDER="0"><font color="#505050">9</font></TD><TD BORDER="1"> __getstate__ </TD></TR>
15
+ <TR><TD BORDER="0"><font color="#505050">10</font></TD><TD BORDER="1"> __gt__ </TD></TR>
16
+ <TR><TD BORDER="0"><font color="#505050">11</font></TD><TD BORDER="1"> __hash__ </TD></TR>
17
+ <TR><TD BORDER="0"><font color="#505050">12</font></TD><TD BORDER="1"> __init__ </TD></TR>
18
+ <TR><TD BORDER="0"><font color="#505050">13</font></TD><TD BORDER="1"> __init_subclass__ </TD></TR>
19
+ <TR><TD BORDER="0"><font color="#505050">14</font></TD><TD BORDER="1"> __le__ </TD></TR>
20
+ <TR><TD BORDER="0"><font color="#505050">15</font></TD><TD BORDER="1"> __lt__ </TD></TR>
21
+ <TR><TD BORDER="0"><font color="#505050">16</font></TD><TD BORDER="1"> __module__ </TD></TR>
22
+ <TR><TD BORDER="0"><font color="#505050">17</font></TD><TD BORDER="1"> __ne__ </TD></TR>
23
+ <TR><TD BORDER="0"><font color="#505050">18</font></TD><TD BORDER="1"> __new__ </TD></TR>
24
+ <TR><TD BORDER="0"><font color="#505050">19</font></TD><TD BORDER="1"> __reduce__ </TD></TR>
25
+ <TR><TD BORDER="0"><font color="#505050">20</font></TD><TD BORDER="1"> __reduce_ex__ </TD></TR>
26
+ <TR><TD BORDER="0"><font color="#505050">21</font></TD><TD BORDER="1"> __repr__ </TD></TR>
27
+ <TR><TD BORDER="0"><font color="#505050">22</font></TD><TD BORDER="1"> __setattr__ </TD></TR>
28
+ <TR><TD BORDER="0"><font color="#505050">23</font></TD><TD BORDER="1"> __setitem__ </TD></TR>
29
+ <TR><TD BORDER="0"><font color="#505050">24</font></TD><TD BORDER="1"> __sizeof__ </TD></TR>
30
+ <TR><TD BORDER="0"><font color="#505050">25</font></TD><TD BORDER="1"> __slots__ </TD></TR>
31
+ <TR><TD BORDER="0"><font color="#505050">26</font></TD><TD BORDER="1"> __str__ </TD></TR>
32
+ <TR><TD BORDER="0"><font color="#505050">27</font></TD><TD BORDER="1"> __subclasshook__ </TD></TR>
33
+ <TR><TD BORDER="0"><font color="#505050">28</font></TD><TD BORDER="1"> balance </TD></TR>
34
+ <TR><TD BORDER="0"><font color="#505050">29</font></TD><TD BORDER="1"> free </TD></TR>
35
+ <TR><TD BORDER="0"><font color="#505050">30</font></TD><TD BORDER="1"> key </TD></TR>
36
+ <TR><TD BORDER="0"><font color="#505050">31</font></TD><TD BORDER="1"> left </TD></TR>
37
+ <TR><TD BORDER="0"><font color="#505050">32</font></TD><TD BORDER="1"> right </TD></TR>
38
+ <TR><TD BORDER="0"><font color="#505050">33</font></TD><TD BORDER="1"> value </TD></TR>
39
+ </TABLE>
40
+ > xlabel="Node"]
41
+ node130351334904784 [label=<
42
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
43
+ <TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
44
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
45
+ </TABLE>
46
+ > xlabel=AVLTree]
47
+ node130351334904784:ref0 -> node130351336425488:table [style=solid]
48
+ node130351336759104 [label=<
49
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
50
+ <TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
51
+ <TR><TD BORDER="1" PORT="ref0"> </TD></TR>
52
+ </TABLE>
53
+ > xlabel=dict]
54
+ node130351336759104:ref0 -> node130351334904784:table [style=solid]
55
+ }
@@ -0,0 +1,49 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node130351332363056 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
5
+ <TR><TD BORDER="1" STYLE="ROUNDED"> left </TD><TD BORDER="1"> None </TD></TR>
6
+ <TR><TD BORDER="1" STYLE="ROUNDED"> key </TD><TD BORDER="1"> 5 </TD></TR>
7
+ <TR><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1"> five </TD></TR>
8
+ <TR><TD BORDER="1" STYLE="ROUNDED"> right </TD><TD BORDER="1"> None </TD></TR>
9
+ </TABLE>
10
+ > xlabel="Node"]
11
+ node130351332361296 [label=<
12
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
13
+ <TR><TD BORDER="1" STYLE="ROUNDED"> left </TD><TD BORDER="1"> None </TD></TR>
14
+ <TR><TD BORDER="1" STYLE="ROUNDED"> key </TD><TD BORDER="1"> 15 </TD></TR>
15
+ <TR><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1"> fifteen </TD></TR>
16
+ <TR><TD BORDER="1" STYLE="ROUNDED"> right </TD><TD BORDER="1"> None </TD></TR>
17
+ </TABLE>
18
+ > xlabel="Node"]
19
+ node130351332361456 [label=<
20
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 20 </TD><TD BORDER="1"> twenty </TD><TD BORDER="1"> None </TD></TR>
23
+ </TABLE>
24
+ > xlabel="Node"]
25
+ node130351332361456:ref0 -> node130351332361296:table [style=solid]
26
+ node130351336425488 [label=<
27
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <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
+ </TABLE>
31
+ > xlabel="Node"]
32
+ node130351336425488:ref0 -> node130351332363056:table [style=solid]
33
+ node130351336425488:ref1 -> node130351332361456:table [style=solid]
34
+ node130351334904784 [label=<
35
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
36
+ <TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
37
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
38
+ </TABLE>
39
+ > xlabel=AVLTree]
40
+ node130351334904784:ref0 -> node130351336425488:table [style=solid]
41
+ node130351336759104 [label=<
42
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
43
+ <TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
44
+ <TR><TD BORDER="1" PORT="ref0"> </TD></TR>
45
+ </TABLE>
46
+ > xlabel=dict]
47
+ node130351336759104:ref0 -> node130351334904784:table [style=solid]
48
+ subgraph { rank=same; node130351332363056 -> node130351332361456[weight=10, style=invis]; }
49
+ }
@@ -0,0 +1,22 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node130351336425488 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
5
+ <TR><TD BORDER="1"> key:10 value:ten </TD></TR>
6
+ </TABLE>
7
+ > xlabel="Node"]
8
+ node130351334904784 [label=<
9
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
10
+ <TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
11
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
12
+ </TABLE>
13
+ > xlabel=AVLTree]
14
+ node130351334904784:ref0 -> node130351336425488:table [style=solid]
15
+ node130351336759104 [label=<
16
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
17
+ <TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
18
+ <TR><TD BORDER="1" PORT="ref0"> </TD></TR>
19
+ </TABLE>
20
+ > xlabel=dict]
21
+ node130351336759104:ref0 -> node130351334904784:table [style=solid]
22
+ }
@@ -0,0 +1,57 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node130351332363056 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
5
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> left: </TD></TR>
6
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD></TR>
7
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> key: </TD></TR>
8
+ <TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 5 </TD></TR>
9
+ <TR><TD BORDER="0"><font color="#505050">4</font></TD><TD BORDER="1"> value: </TD></TR>
10
+ <TR><TD BORDER="0"><font color="#505050">5</font></TD><TD BORDER="1"> five </TD></TR>
11
+ <TR><TD BORDER="0"><font color="#505050">6</font></TD><TD BORDER="1"> right: </TD></TR>
12
+ <TR><TD BORDER="0"><font color="#505050">7</font></TD><TD BORDER="1"> None </TD></TR>
13
+ </TABLE>
14
+ > xlabel="Node"]
15
+ node130351332361296 [label=<
16
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
17
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> left: </TD></TR>
18
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD></TR>
19
+ <TR><TD BORDER="0"><font color="#505050">2</font></TD><TD BORDER="1"> key: </TD></TR>
20
+ <TR><TD BORDER="0"><font color="#505050">3</font></TD><TD BORDER="1"> 15 </TD></TR>
21
+ <TR><TD BORDER="0"><font color="#505050">4</font></TD><TD BORDER="1"> value: </TD></TR>
22
+ <TR><TD BORDER="0"><font color="#505050">5</font></TD><TD BORDER="1"> fifteen </TD></TR>
23
+ <TR><TD BORDER="0"><font color="#505050">6</font></TD><TD BORDER="1"> right: </TD></TR>
24
+ <TR><TD BORDER="0"><font color="#505050">7</font></TD><TD BORDER="1"> None </TD></TR>
25
+ </TABLE>
26
+ > xlabel="Node"]
27
+ node130351332361456 [label=<
28
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <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
+ </TABLE>
32
+ > xlabel="Node"]
33
+ node130351332361456:ref0 -> node130351332361296:table [style=solid]
34
+ node130351336425488 [label=<
35
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <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
+ </TABLE>
39
+ > xlabel="Node"]
40
+ node130351336425488:ref0 -> node130351332363056:table [style=solid]
41
+ node130351336425488:ref1 -> node130351332361456:table [style=solid]
42
+ node130351334904784 [label=<
43
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
44
+ <TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
45
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
46
+ </TABLE>
47
+ > xlabel=AVLTree]
48
+ node130351334904784:ref0 -> node130351336425488:table [style=solid]
49
+ node130351336759104 [label=<
50
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
51
+ <TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
52
+ <TR><TD BORDER="1" PORT="ref0"> </TD></TR>
53
+ </TABLE>
54
+ > xlabel=dict]
55
+ node130351336759104:ref0 -> node130351334904784:table [style=solid]
56
+ subgraph { rank=same; node130351332363056 -> node130351332361456[weight=10, style=invis]; }
57
+ }
@@ -0,0 +1,49 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node130351332363056 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 5 </TD><TD BORDER="1"> five </TD></TR>
7
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD><TD BORDER="1"> None </TD></TR>
8
+ </TABLE>
9
+ > xlabel="Node 2⨯2"]
10
+ node130351332361296 [label=<
11
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 15 </TD><TD BORDER="1"> fifteen </TD></TR>
14
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1"> None </TD><TD BORDER="1"> None </TD></TR>
15
+ </TABLE>
16
+ > xlabel="Node 2⨯2"]
17
+ node130351332361456 [label=<
18
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 20 </TD><TD BORDER="1"> twenty </TD></TR>
21
+ <TR><TD BORDER="0"><font color="#505050">1</font></TD><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> None </TD></TR>
22
+ </TABLE>
23
+ > xlabel="Node 2⨯2"]
24
+ node130351332361456:ref0 -> node130351332361296:table [style=solid]
25
+ node130351336425488 [label=<
26
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="sandybrown" PORT="table">
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
+ <TR><TD BORDER="0"><font color="#505050">0</font></TD><TD BORDER="1"> 10 </TD><TD BORDER="1"> ten </TD></TR>
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
+ </TABLE>
31
+ > xlabel="Node 2⨯2"]
32
+ node130351336425488:ref0 -> node130351332363056:table [style=solid]
33
+ node130351336425488:ref1 -> node130351332361456:table [style=solid]
34
+ node130351334904784 [label=<
35
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
36
+ <TR><TD BORDER="1" STYLE="ROUNDED"> _root </TD><TD BORDER="1" STYLE="ROUNDED"> _count </TD></TR>
37
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 4 </TD></TR>
38
+ </TABLE>
39
+ > xlabel=AVLTree]
40
+ node130351334904784:ref0 -> node130351336425488:table [style=solid]
41
+ node130351336759104 [label=<
42
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
43
+ <TR><TD BORDER="1" STYLE="ROUNDED"> tree </TD></TR>
44
+ <TR><TD BORDER="1" PORT="ref0"> </TD></TR>
45
+ </TABLE>
46
+ > xlabel=dict]
47
+ node130351336759104:ref0 -> node130351334904784:table [style=solid]
48
+ subgraph { rank=same; node130351332363056 -> node130351332361456[weight=10, style=invis]; }
49
+ }
@@ -0,0 +1,110 @@
1
+ digraph memory_graph {
2
+ node [shape=plaintext]
3
+ node93171184 [label=<
4
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0" CELLPADDING="0" BGCOLOR="seagreen3" PORT="table">
5
+ <TR><TD BORDER="0"> </TD></TR>
6
+ </TABLE>
7
+ > xlabel=type]
8
+ node134777007704784 [label=<
9
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
10
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1"> None </TD></TR>
11
+ <TR><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1"> 33 </TD></TR>
12
+ <TR><TD BORDER="1" STYLE="ROUNDED"> larger </TD><TD BORDER="1"> None </TD></TR>
13
+ </TABLE>
14
+ > xlabel=BinTree]
15
+ node134777007704736 [label=<
16
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
17
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> larger </TD></TR>
18
+ <TR><TD BORDER="1"> None </TD><TD BORDER="1"> 5 </TD><TD BORDER="1" PORT="ref0"> </TD></TR>
19
+ </TABLE>
20
+ > xlabel=BinTree]
21
+ node134777007704736:ref0 -> node134777007704784:table [style=solid]
22
+ node134777007704928 [label=<
23
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
24
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1"> None </TD></TR>
25
+ <TR><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1"> 51 </TD></TR>
26
+ <TR><TD BORDER="1" STYLE="ROUNDED"> larger </TD><TD BORDER="1"> None </TD></TR>
27
+ </TABLE>
28
+ > xlabel=BinTree]
29
+ node134777007704880 [label=<
30
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
31
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1"> None </TD></TR>
32
+ <TR><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1"> 62 </TD></TR>
33
+ <TR><TD BORDER="1" STYLE="ROUNDED"> larger </TD><TD BORDER="1"> None </TD></TR>
34
+ </TABLE>
35
+ > xlabel=BinTree]
36
+ node134777007704832 [label=<
37
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
38
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> larger </TD></TR>
39
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 65 </TD><TD BORDER="1"> None </TD></TR>
40
+ </TABLE>
41
+ > xlabel=BinTree]
42
+ node134777007704832:ref0 -> node134777007704880:table [style=solid]
43
+ node134777007704688 [label=<
44
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
45
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> larger </TD></TR>
46
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 53 </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
47
+ </TABLE>
48
+ > xlabel=BinTree]
49
+ node134777007704688:ref0 -> node134777007704928:table [style=solid]
50
+ node134777007704688:ref1 -> node134777007704832:table [style=solid]
51
+ node134777010341168 [label=<
52
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
53
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> larger </TD></TR>
54
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 97 </TD><TD BORDER="1"> None </TD></TR>
55
+ </TABLE>
56
+ > xlabel=BinTree]
57
+ node134777010341168:ref0 -> node134777007704688:table [style=solid]
58
+ node134777010341120 [label=<
59
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="seagreen1" PORT="table">
60
+ <TR><TD BORDER="1" STYLE="ROUNDED"> smaller </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD><TD BORDER="1" STYLE="ROUNDED"> larger </TD></TR>
61
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 49 </TD><TD BORDER="1" PORT="ref1"> </TD></TR>
62
+ </TABLE>
63
+ > xlabel=BinTree]
64
+ node134777010341120:ref0 -> node134777007704736:table [style=solid]
65
+ node134777010341120:ref1 -> node134777010341168:table [style=solid]
66
+ node134777011133376 [label=<
67
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
68
+ <TR><TD BORDER="1" STYLE="ROUNDED"> BinTree </TD><TD BORDER="1" STYLE="ROUNDED"> tree </TD><TD BORDER="1" STYLE="ROUNDED"> n </TD><TD BORDER="1" STYLE="ROUNDED"> i </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD></TR>
69
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD><TD BORDER="1"> 100 </TD><TD BORDER="1"> 7 </TD><TD BORDER="1"> 51 </TD></TR>
70
+ </TABLE>
71
+ > xlabel=dict]
72
+ node134777011133376:ref0 -> node93171184:table [style=solid]
73
+ node134777011133376:ref1 -> node134777010341120:table [style=solid]
74
+ node134777007681536 [label=<
75
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
76
+ <TR><TD BORDER="1" STYLE="ROUNDED"> self </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD></TR>
77
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 51 </TD></TR>
78
+ </TABLE>
79
+ > xlabel=dict]
80
+ node134777007681536:ref0 -> node134777010341120:table [style=solid]
81
+ node134777007753280 [label=<
82
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
83
+ <TR><TD BORDER="1" STYLE="ROUNDED"> self </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD></TR>
84
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 51 </TD></TR>
85
+ </TABLE>
86
+ > xlabel=dict]
87
+ node134777007753280:ref0 -> node134777010341168:table [style=solid]
88
+ node134777007753472 [label=<
89
+ <TABLE BORDER="1" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="#60a5ff" PORT="table">
90
+ <TR><TD BORDER="1" STYLE="ROUNDED"> self </TD><TD BORDER="1" STYLE="ROUNDED"> value </TD></TR>
91
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1"> 51 </TD></TR>
92
+ </TABLE>
93
+ > xlabel=dict]
94
+ node134777007753472:ref0 -> node134777007704688:table [style=solid]
95
+ node134777007617792 [label=<
96
+ <TABLE BORDER="3" CELLBORDER="1" CELLSPACING="5" CELLPADDING="0" BGCOLOR="khaki" PORT="table">
97
+ <TR><TD BORDER="1" STYLE="ROUNDED"> 0: &lt;module&gt; </TD><TD BORDER="1" STYLE="ROUNDED"> 1: BinTree.add </TD><TD BORDER="1" STYLE="ROUNDED"> 2: BinTree.add </TD><TD BORDER="1" STYLE="ROUNDED"> 3: BinTree.add </TD></TR>
98
+ <TR><TD BORDER="1" PORT="ref0"> </TD><TD BORDER="1" PORT="ref1"> </TD><TD BORDER="1" PORT="ref2"> </TD><TD BORDER="1" PORT="ref3"> </TD></TR>
99
+ </TABLE>
100
+ > xlabel=call_stack]
101
+ node134777007617792:ref0 -> node134777011133376:table [style=solid]
102
+ node134777007617792:ref1 -> node134777007681536:table [style=solid]
103
+ node134777007617792:ref2 -> node134777007753280:table [style=solid]
104
+ node134777007617792:ref3 -> node134777007753472:table [style=solid]
105
+ subgraph { rank=same; node134777011133376 -> node134777007681536 -> node134777007753280 -> node134777007753472[weight=10, style=invis]; }
106
+ subgraph { rank=same; node93171184 -> node134777010341120[weight=10, style=invis]; }
107
+ subgraph { rank=same; node134777007704736 -> node134777010341168[weight=10, style=invis]; }
108
+ subgraph { rank=same; node134777007704784 -> node134777007704688[weight=10, style=invis]; }
109
+ subgraph { rank=same; node134777007704928 -> node134777007704832[weight=10, style=invis]; }
110
+ }