invocation-tree 0.0.5__tar.gz → 0.0.8__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 (119) hide show
  1. {invocation_tree-0.0.5/invocation_tree.egg-info → invocation_tree-0.0.8}/PKG-INFO +18 -17
  2. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/README.md +17 -16
  3. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial1.png +0 -0
  4. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial2.png +0 -0
  5. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial3.png +0 -0
  6. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial4.png +0 -0
  7. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial5.png +0 -0
  8. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial6.png +0 -0
  9. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial7.png +0 -0
  10. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations1.png +0 -0
  11. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations10.png +0 -0
  12. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations11.png +0 -0
  13. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations12.png +0 -0
  14. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations13.png +0 -0
  15. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations2.png +0 -0
  16. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations3.png +0 -0
  17. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations4.png +0 -0
  18. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations5.png +0 -0
  19. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations6.png +0 -0
  20. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations7.png +0 -0
  21. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations8.png +0 -0
  22. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations9.png +0 -0
  23. invocation_tree-0.0.8/images/students.gif +0 -0
  24. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students.py +6 -5
  25. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students1.png +0 -0
  26. invocation_tree-0.0.8/images/students10.png +0 -0
  27. invocation_tree-0.0.8/images/students11.png +0 -0
  28. invocation_tree-0.0.8/images/students12.png +0 -0
  29. invocation_tree-0.0.8/images/students13.png +0 -0
  30. invocation_tree-0.0.8/images/students14.png +0 -0
  31. invocation_tree-0.0.8/images/students15.png +0 -0
  32. invocation_tree-0.0.8/images/students2.png +0 -0
  33. invocation_tree-0.0.8/images/students3.png +0 -0
  34. invocation_tree-0.0.8/images/students4.png +0 -0
  35. invocation_tree-0.0.8/images/students5.png +0 -0
  36. invocation_tree-0.0.8/images/students6.png +0 -0
  37. invocation_tree-0.0.8/images/students7.png +0 -0
  38. invocation_tree-0.0.8/images/students8.png +0 -0
  39. invocation_tree-0.0.8/images/students9.png +0 -0
  40. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree/__init__.py +3 -3
  41. {invocation_tree-0.0.5 → invocation_tree-0.0.8/invocation_tree.egg-info}/PKG-INFO +18 -17
  42. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/SOURCES.txt +0 -3
  43. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/setup.py +1 -1
  44. invocation_tree-0.0.5/images/factorial0.png +0 -0
  45. invocation_tree-0.0.5/images/permutations0.png +0 -0
  46. invocation_tree-0.0.5/images/students.gif +0 -0
  47. invocation_tree-0.0.5/images/students0.png +0 -0
  48. invocation_tree-0.0.5/images/students10.png +0 -0
  49. invocation_tree-0.0.5/images/students11.png +0 -0
  50. invocation_tree-0.0.5/images/students12.png +0 -0
  51. invocation_tree-0.0.5/images/students13.png +0 -0
  52. invocation_tree-0.0.5/images/students14.png +0 -0
  53. invocation_tree-0.0.5/images/students15.png +0 -0
  54. invocation_tree-0.0.5/images/students2.png +0 -0
  55. invocation_tree-0.0.5/images/students3.png +0 -0
  56. invocation_tree-0.0.5/images/students4.png +0 -0
  57. invocation_tree-0.0.5/images/students5.png +0 -0
  58. invocation_tree-0.0.5/images/students6.png +0 -0
  59. invocation_tree-0.0.5/images/students7.png +0 -0
  60. invocation_tree-0.0.5/images/students8.png +0 -0
  61. invocation_tree-0.0.5/images/students9.png +0 -0
  62. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/LICENSE.txt +0 -0
  63. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/MANIFEST.in +0 -0
  64. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/create_gif.sh +0 -0
  65. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/create_images.sh +0 -0
  66. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/create_images.sh~ +0 -0
  67. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial.gif +0 -0
  68. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial.py +0 -0
  69. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial.py~ +0 -0
  70. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial8.gv +0 -0
  71. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial9.gv +0 -0
  72. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/invocation_tree.pdf +0 -0
  73. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/invocation_tree0.pdf +0 -0
  74. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations.gif +0 -0
  75. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations.py +0 -0
  76. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations.py~ +0 -0
  77. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations22.png~ +0 -0
  78. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/student.gif +0 -0
  79. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students.py~ +0 -0
  80. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students16.gv +0 -0
  81. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students17.gv +0 -0
  82. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students18.gv +0 -0
  83. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students19.gv +0 -0
  84. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students20.gv +0 -0
  85. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students21.gv +0 -0
  86. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students22.gv +0 -0
  87. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students23.gv +0 -0
  88. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students24.gv +0 -0
  89. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students25.gv +0 -0
  90. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students26.gv +0 -0
  91. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students27.gv +0 -0
  92. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students28.gv +0 -0
  93. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students29.gv +0 -0
  94. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students30.gv +0 -0
  95. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/test.py +0 -0
  96. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree0.gv +0 -0
  97. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree1.gv +0 -0
  98. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree10.gv +0 -0
  99. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree11.gv +0 -0
  100. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree12.gv +0 -0
  101. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree13.gv +0 -0
  102. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree14.gv +0 -0
  103. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree15.gv +0 -0
  104. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree16.gv +0 -0
  105. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree17.gv +0 -0
  106. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree2.gv +0 -0
  107. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree3.gv +0 -0
  108. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree4.gv +0 -0
  109. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree5.gv +0 -0
  110. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree6.gv +0 -0
  111. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree7.gv +0 -0
  112. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree8.gv +0 -0
  113. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree9.gv +0 -0
  114. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/vscode.png +0 -0
  115. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/install.txt +0 -0
  116. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/dependency_links.txt +0 -0
  117. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/requires.txt +0 -0
  118. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/top_level.txt +0 -0
  119. {invocation_tree-0.0.5 → invocation_tree-0.0.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: invocation_tree
3
- Version: 0.0.5
3
+ Version: 0.0.8
4
4
  Summary: Generate an invocation tree of functions calls.
5
5
  Home-page: https://github.com/bterwijn/invocation_tree
6
6
  Author: Bas Terwijn
@@ -29,7 +29,7 @@ The [invocation_tree](https://pypi.org/project/invocation-tree/) package is desi
29
29
 
30
30
  ```python
31
31
  import invocation_tree as invo_tree
32
- import math
32
+ from decimal import Decimal, ROUND_HALF_UP
33
33
 
34
34
  def main():
35
35
  students = {'Ann':[7.5, 8.0],
@@ -42,11 +42,12 @@ def main():
42
42
 
43
43
  def compute_average(grades):
44
44
  average = sum(grades)/len(grades)
45
- return my_round(average, 1)
45
+ return half_up_round(average, 1)
46
46
 
47
- def my_round(value, digits=0):
48
- shift = 10 ** digits
49
- return math.floor(value * shift + 0.5) / shift
47
+ def half_up_round(value, digits=0):
48
+ """ High-precision half-up rounding of 'value' to a specified number of 'digits'. """
49
+ return float(Decimal(str(value)).quantize(Decimal(f"1e-{digits}"),
50
+ rounding=ROUND_HALF_UP))
50
51
 
51
52
  def passing_students(averages):
52
53
  return [student
@@ -67,13 +68,11 @@ Each node in the tree represents a function call, and the node's color indicates
67
68
 
68
69
  For every function, the package displays its **local variables** and **return value**. Changes to these values over time are highlighted using bold text and gray shading to make them easy to track.
69
70
 
70
- The [invocation_tree](https://pypi.org/project/invocation-tree/) package visualizes function calls at **different moments in time**. If you want a more detailed visualization of your data at the current time, check out the [memory_graph](https://pypi.org/project/memory-graph/) package.
71
-
72
71
  ## Blocking ##
73
72
  The program blocks execution at every function call and return statement, printing the current location in the source code. Press the <Enter> key to continue execution. To block at every line of the program (like in a debugger tool) and only where a change of value occured, use instead:
74
73
 
75
74
  ```python
76
- tree = invo_tree.blocking_each_line()
75
+ tree = invo_tree.blocking_each_change()
77
76
  ```
78
77
 
79
78
  # Debugger #
@@ -167,21 +166,23 @@ tree = invo_tree.Invocation_Tree()
167
166
 
168
167
  For convenience we provide these functions to set common configurations:
169
168
 
170
- - **invo_tree.blocking(filename)**, for blocking on function call and return
171
- - **invo_tree.blocking_each_line(filename)**, for blocking on each line of the program
169
+ - **invo_tree.blocking(filename)**, blocks on function call and return
170
+ - **invo_tree.blocking_each_change(filename)**, blocks on each change of value
172
171
  - **invo_tree.debugger(filename)**, for use in debugger tool (open <filename> manually)
173
- - **invo_tree.gif(filename)**, for generating many output files on function call and return for gif creation
174
- - **invo_tree.gif_each_line(filename)**, for generating many output files on each line for gif creation
172
+ - **invo_tree.gif(filename)**, generates many output files on function call and return for gif creation
173
+ - **invo_tree.gif_each_change(filename)**, generates many output files on each change of value for gif creation
175
174
 
176
175
  # Troubleshooting #
177
-
178
176
  - Adobe Acrobat Reader [doesn't refresh a PDF file](https://superuser.com/questions/337011/windows-pdf-viewer-that-auto-refreshes-pdf-when-compiling-with-pdflatex) 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 ([Evince](https://www.fosshub.com/Evince.html), [Okular](https://okular.kde.org/), [SumatraPDF](https://www.sumatrapdfreader.org/), ...) and set it as the default PDF reader. Another solution is to save the tree to a different [Graphviz Output Format](https://graphviz.org/docs/outputs/).
179
177
 
180
- ## Author ##
178
+ ## Memory_Graph Package ##
179
+ The [invocation_tree](https://pypi.org/project/invocation-tree/) package visualizes function calls at different moments in time. If instead you want a detailed visualization of your data at the current time, check out the [memory_graph](https://pypi.org/project/memory-graph/) package.
180
+
181
+ # Author #
181
182
  Bas Terwijn
182
183
 
183
- ## Inspiration ##
184
+ # Inspiration #
184
185
  Inspired by [rcviz](https://github.com/carlsborg/rcviz).
185
186
 
186
- ## Supported by ##
187
+ # Supported by #
187
188
  <img src="https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/uva.png" alt="University of Amsterdam" width="600">
@@ -10,7 +10,7 @@ The [invocation_tree](https://pypi.org/project/invocation-tree/) package is desi
10
10
 
11
11
  ```python
12
12
  import invocation_tree as invo_tree
13
- import math
13
+ from decimal import Decimal, ROUND_HALF_UP
14
14
 
15
15
  def main():
16
16
  students = {'Ann':[7.5, 8.0],
@@ -23,11 +23,12 @@ def main():
23
23
 
24
24
  def compute_average(grades):
25
25
  average = sum(grades)/len(grades)
26
- return my_round(average, 1)
26
+ return half_up_round(average, 1)
27
27
 
28
- def my_round(value, digits=0):
29
- shift = 10 ** digits
30
- return math.floor(value * shift + 0.5) / shift
28
+ def half_up_round(value, digits=0):
29
+ """ High-precision half-up rounding of 'value' to a specified number of 'digits'. """
30
+ return float(Decimal(str(value)).quantize(Decimal(f"1e-{digits}"),
31
+ rounding=ROUND_HALF_UP))
31
32
 
32
33
  def passing_students(averages):
33
34
  return [student
@@ -48,13 +49,11 @@ Each node in the tree represents a function call, and the node's color indicates
48
49
 
49
50
  For every function, the package displays its **local variables** and **return value**. Changes to these values over time are highlighted using bold text and gray shading to make them easy to track.
50
51
 
51
- The [invocation_tree](https://pypi.org/project/invocation-tree/) package visualizes function calls at **different moments in time**. If you want a more detailed visualization of your data at the current time, check out the [memory_graph](https://pypi.org/project/memory-graph/) package.
52
-
53
52
  ## Blocking ##
54
53
  The program blocks execution at every function call and return statement, printing the current location in the source code. Press the &lt;Enter&gt; key to continue execution. To block at every line of the program (like in a debugger tool) and only where a change of value occured, use instead:
55
54
 
56
55
  ```python
57
- tree = invo_tree.blocking_each_line()
56
+ tree = invo_tree.blocking_each_change()
58
57
  ```
59
58
 
60
59
  # Debugger #
@@ -148,21 +147,23 @@ tree = invo_tree.Invocation_Tree()
148
147
 
149
148
  For convenience we provide these functions to set common configurations:
150
149
 
151
- - **invo_tree.blocking(filename)**, for blocking on function call and return
152
- - **invo_tree.blocking_each_line(filename)**, for blocking on each line of the program
150
+ - **invo_tree.blocking(filename)**, blocks on function call and return
151
+ - **invo_tree.blocking_each_change(filename)**, blocks on each change of value
153
152
  - **invo_tree.debugger(filename)**, for use in debugger tool (open &lt;filename&gt; manually)
154
- - **invo_tree.gif(filename)**, for generating many output files on function call and return for gif creation
155
- - **invo_tree.gif_each_line(filename)**, for generating many output files on each line for gif creation
153
+ - **invo_tree.gif(filename)**, generates many output files on function call and return for gif creation
154
+ - **invo_tree.gif_each_change(filename)**, generates many output files on each change of value for gif creation
156
155
 
157
156
  # Troubleshooting #
158
-
159
157
  - Adobe Acrobat Reader [doesn't refresh a PDF file](https://superuser.com/questions/337011/windows-pdf-viewer-that-auto-refreshes-pdf-when-compiling-with-pdflatex) 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 ([Evince](https://www.fosshub.com/Evince.html), [Okular](https://okular.kde.org/), [SumatraPDF](https://www.sumatrapdfreader.org/), ...) and set it as the default PDF reader. Another solution is to save the tree to a different [Graphviz Output Format](https://graphviz.org/docs/outputs/).
160
158
 
161
- ## Author ##
159
+ ## Memory_Graph Package ##
160
+ The [invocation_tree](https://pypi.org/project/invocation-tree/) package visualizes function calls at different moments in time. If instead you want a detailed visualization of your data at the current time, check out the [memory_graph](https://pypi.org/project/memory-graph/) package.
161
+
162
+ # Author #
162
163
  Bas Terwijn
163
164
 
164
- ## Inspiration ##
165
+ # Inspiration #
165
166
  Inspired by [rcviz](https://github.com/carlsborg/rcviz).
166
167
 
167
- ## Supported by ##
168
+ # Supported by #
168
169
  <img src="https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/uva.png" alt="University of Amsterdam" width="600">
@@ -1,5 +1,5 @@
1
1
  import invocation_tree as invo_tree
2
- import math
2
+ from decimal import Decimal, ROUND_HALF_UP
3
3
 
4
4
  def main():
5
5
  students = {'Ann':[7.5, 8.0],
@@ -12,11 +12,12 @@ def main():
12
12
 
13
13
  def compute_average(grades):
14
14
  average = sum(grades)/len(grades)
15
- return my_round(average, 1)
15
+ return half_up_round(average, 1)
16
16
 
17
- def my_round(value, digits=0):
18
- shift = 10 ** digits
19
- return math.floor(value * shift + 0.5) / shift
17
+ def half_up_round(value, digits=0):
18
+ """ High-precision half-up rounding of 'value' to a specified number of 'digits'. """
19
+ return float(Decimal(str(value)).quantize(Decimal(f"1e-{digits}"),
20
+ rounding=ROUND_HALF_UP))
20
21
 
21
22
  def passing_students(avg):
22
23
  return [student
@@ -7,7 +7,7 @@ import html
7
7
  import sys
8
8
  import difflib
9
9
 
10
- __version__ = "0.0.5"
10
+ __version__ = "0.0.8"
11
11
  __author__ = 'Bas Terwijn'
12
12
 
13
13
  def highlight_diff(str1, str2):
@@ -264,7 +264,7 @@ class Invocation_Tree:
264
264
  def blocking(filename='tree.pdf'):
265
265
  return Invocation_Tree(filename=filename)
266
266
 
267
- def blocking_each_line(filename='tree.pdf'):
267
+ def blocking_each_change(filename='tree.pdf'):
268
268
  return Invocation_Tree(filename=filename, each_line=True)
269
269
 
270
270
  def debugger(filename='tree.pdf'):
@@ -273,5 +273,5 @@ def debugger(filename='tree.pdf'):
273
273
  def gif(filename='tree.png'):
274
274
  return Invocation_Tree(filename=filename, show=False, block=False, gifcount=0)
275
275
 
276
- def gif_each_line(filename='tree.png'):
276
+ def gif_each_change(filename='tree.png'):
277
277
  return Invocation_Tree(filename=filename, show=False, block=False, gifcount=0, each_line=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: invocation_tree
3
- Version: 0.0.5
3
+ Version: 0.0.8
4
4
  Summary: Generate an invocation tree of functions calls.
5
5
  Home-page: https://github.com/bterwijn/invocation_tree
6
6
  Author: Bas Terwijn
@@ -29,7 +29,7 @@ The [invocation_tree](https://pypi.org/project/invocation-tree/) package is desi
29
29
 
30
30
  ```python
31
31
  import invocation_tree as invo_tree
32
- import math
32
+ from decimal import Decimal, ROUND_HALF_UP
33
33
 
34
34
  def main():
35
35
  students = {'Ann':[7.5, 8.0],
@@ -42,11 +42,12 @@ def main():
42
42
 
43
43
  def compute_average(grades):
44
44
  average = sum(grades)/len(grades)
45
- return my_round(average, 1)
45
+ return half_up_round(average, 1)
46
46
 
47
- def my_round(value, digits=0):
48
- shift = 10 ** digits
49
- return math.floor(value * shift + 0.5) / shift
47
+ def half_up_round(value, digits=0):
48
+ """ High-precision half-up rounding of 'value' to a specified number of 'digits'. """
49
+ return float(Decimal(str(value)).quantize(Decimal(f"1e-{digits}"),
50
+ rounding=ROUND_HALF_UP))
50
51
 
51
52
  def passing_students(averages):
52
53
  return [student
@@ -67,13 +68,11 @@ Each node in the tree represents a function call, and the node's color indicates
67
68
 
68
69
  For every function, the package displays its **local variables** and **return value**. Changes to these values over time are highlighted using bold text and gray shading to make them easy to track.
69
70
 
70
- The [invocation_tree](https://pypi.org/project/invocation-tree/) package visualizes function calls at **different moments in time**. If you want a more detailed visualization of your data at the current time, check out the [memory_graph](https://pypi.org/project/memory-graph/) package.
71
-
72
71
  ## Blocking ##
73
72
  The program blocks execution at every function call and return statement, printing the current location in the source code. Press the &lt;Enter&gt; key to continue execution. To block at every line of the program (like in a debugger tool) and only where a change of value occured, use instead:
74
73
 
75
74
  ```python
76
- tree = invo_tree.blocking_each_line()
75
+ tree = invo_tree.blocking_each_change()
77
76
  ```
78
77
 
79
78
  # Debugger #
@@ -167,21 +166,23 @@ tree = invo_tree.Invocation_Tree()
167
166
 
168
167
  For convenience we provide these functions to set common configurations:
169
168
 
170
- - **invo_tree.blocking(filename)**, for blocking on function call and return
171
- - **invo_tree.blocking_each_line(filename)**, for blocking on each line of the program
169
+ - **invo_tree.blocking(filename)**, blocks on function call and return
170
+ - **invo_tree.blocking_each_change(filename)**, blocks on each change of value
172
171
  - **invo_tree.debugger(filename)**, for use in debugger tool (open &lt;filename&gt; manually)
173
- - **invo_tree.gif(filename)**, for generating many output files on function call and return for gif creation
174
- - **invo_tree.gif_each_line(filename)**, for generating many output files on each line for gif creation
172
+ - **invo_tree.gif(filename)**, generates many output files on function call and return for gif creation
173
+ - **invo_tree.gif_each_change(filename)**, generates many output files on each change of value for gif creation
175
174
 
176
175
  # Troubleshooting #
177
-
178
176
  - Adobe Acrobat Reader [doesn't refresh a PDF file](https://superuser.com/questions/337011/windows-pdf-viewer-that-auto-refreshes-pdf-when-compiling-with-pdflatex) 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 ([Evince](https://www.fosshub.com/Evince.html), [Okular](https://okular.kde.org/), [SumatraPDF](https://www.sumatrapdfreader.org/), ...) and set it as the default PDF reader. Another solution is to save the tree to a different [Graphviz Output Format](https://graphviz.org/docs/outputs/).
179
177
 
180
- ## Author ##
178
+ ## Memory_Graph Package ##
179
+ The [invocation_tree](https://pypi.org/project/invocation-tree/) package visualizes function calls at different moments in time. If instead you want a detailed visualization of your data at the current time, check out the [memory_graph](https://pypi.org/project/memory-graph/) package.
180
+
181
+ # Author #
181
182
  Bas Terwijn
182
183
 
183
- ## Inspiration ##
184
+ # Inspiration #
184
185
  Inspired by [rcviz](https://github.com/carlsborg/rcviz).
185
186
 
186
- ## Supported by ##
187
+ # Supported by #
187
188
  <img src="https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/uva.png" alt="University of Amsterdam" width="600">
@@ -9,7 +9,6 @@ images/create_images.sh~
9
9
  images/factorial.gif
10
10
  images/factorial.py
11
11
  images/factorial.py~
12
- images/factorial0.png
13
12
  images/factorial1.png
14
13
  images/factorial2.png
15
14
  images/factorial3.png
@@ -24,7 +23,6 @@ images/invocation_tree0.pdf
24
23
  images/permutations.gif
25
24
  images/permutations.py
26
25
  images/permutations.py~
27
- images/permutations0.png
28
26
  images/permutations1.png
29
27
  images/permutations10.png
30
28
  images/permutations11.png
@@ -43,7 +41,6 @@ images/student.gif
43
41
  images/students.gif
44
42
  images/students.py
45
43
  images/students.py~
46
- images/students0.png
47
44
  images/students1.png
48
45
  images/students10.png
49
46
  images/students11.png
@@ -11,7 +11,7 @@ long_description_from_readme = (this_directory / "README.md").read_text()
11
11
 
12
12
  setup(
13
13
  name = 'invocation_tree',
14
- version = '0.0.5',
14
+ version = '0.0.8',
15
15
  description = 'Generate an invocation tree of functions calls.',
16
16
  long_description = long_description_from_readme,
17
17
  long_description_content_type = 'text/markdown',
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file