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.
- {invocation_tree-0.0.5/invocation_tree.egg-info → invocation_tree-0.0.8}/PKG-INFO +18 -17
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/README.md +17 -16
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial1.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial2.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial3.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial4.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial5.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial6.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial7.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations1.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations10.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations11.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations12.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations13.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations2.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations3.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations4.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations5.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations6.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations7.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations8.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations9.png +0 -0
- invocation_tree-0.0.8/images/students.gif +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students.py +6 -5
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students1.png +0 -0
- invocation_tree-0.0.8/images/students10.png +0 -0
- invocation_tree-0.0.8/images/students11.png +0 -0
- invocation_tree-0.0.8/images/students12.png +0 -0
- invocation_tree-0.0.8/images/students13.png +0 -0
- invocation_tree-0.0.8/images/students14.png +0 -0
- invocation_tree-0.0.8/images/students15.png +0 -0
- invocation_tree-0.0.8/images/students2.png +0 -0
- invocation_tree-0.0.8/images/students3.png +0 -0
- invocation_tree-0.0.8/images/students4.png +0 -0
- invocation_tree-0.0.8/images/students5.png +0 -0
- invocation_tree-0.0.8/images/students6.png +0 -0
- invocation_tree-0.0.8/images/students7.png +0 -0
- invocation_tree-0.0.8/images/students8.png +0 -0
- invocation_tree-0.0.8/images/students9.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree/__init__.py +3 -3
- {invocation_tree-0.0.5 → invocation_tree-0.0.8/invocation_tree.egg-info}/PKG-INFO +18 -17
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/SOURCES.txt +0 -3
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/setup.py +1 -1
- invocation_tree-0.0.5/images/factorial0.png +0 -0
- invocation_tree-0.0.5/images/permutations0.png +0 -0
- invocation_tree-0.0.5/images/students.gif +0 -0
- invocation_tree-0.0.5/images/students0.png +0 -0
- invocation_tree-0.0.5/images/students10.png +0 -0
- invocation_tree-0.0.5/images/students11.png +0 -0
- invocation_tree-0.0.5/images/students12.png +0 -0
- invocation_tree-0.0.5/images/students13.png +0 -0
- invocation_tree-0.0.5/images/students14.png +0 -0
- invocation_tree-0.0.5/images/students15.png +0 -0
- invocation_tree-0.0.5/images/students2.png +0 -0
- invocation_tree-0.0.5/images/students3.png +0 -0
- invocation_tree-0.0.5/images/students4.png +0 -0
- invocation_tree-0.0.5/images/students5.png +0 -0
- invocation_tree-0.0.5/images/students6.png +0 -0
- invocation_tree-0.0.5/images/students7.png +0 -0
- invocation_tree-0.0.5/images/students8.png +0 -0
- invocation_tree-0.0.5/images/students9.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/LICENSE.txt +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/MANIFEST.in +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/create_gif.sh +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/create_images.sh +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/create_images.sh~ +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial.gif +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial.py +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial.py~ +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial8.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/factorial9.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/invocation_tree.pdf +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/invocation_tree0.pdf +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations.gif +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations.py +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations.py~ +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/permutations22.png~ +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/student.gif +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students.py~ +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students16.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students17.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students18.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students19.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students20.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students21.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students22.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students23.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students24.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students25.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students26.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students27.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students28.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students29.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/students30.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/test.py +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree0.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree1.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree10.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree11.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree12.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree13.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree14.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree15.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree16.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree17.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree2.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree3.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree4.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree5.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree6.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree7.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree8.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/tree9.gv +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/images/vscode.png +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/install.txt +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/dependency_links.txt +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/requires.txt +0 -0
- {invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/top_level.txt +0 -0
- {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.
|
|
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
|
|
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
|
|
45
|
+
return half_up_round(average, 1)
|
|
46
46
|
|
|
47
|
-
def
|
|
48
|
-
|
|
49
|
-
return
|
|
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.
|
|
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)**,
|
|
171
|
-
- **invo_tree.
|
|
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)**,
|
|
174
|
-
- **invo_tree.
|
|
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
|
-
##
|
|
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
|
-
|
|
184
|
+
# Inspiration #
|
|
184
185
|
Inspired by [rcviz](https://github.com/carlsborg/rcviz).
|
|
185
186
|
|
|
186
|
-
|
|
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
|
|
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
|
|
26
|
+
return half_up_round(average, 1)
|
|
27
27
|
|
|
28
|
-
def
|
|
29
|
-
|
|
30
|
-
return
|
|
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 <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:
|
|
55
54
|
|
|
56
55
|
```python
|
|
57
|
-
tree = invo_tree.
|
|
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)**,
|
|
152
|
-
- **invo_tree.
|
|
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 <filename> manually)
|
|
154
|
-
- **invo_tree.gif(filename)**,
|
|
155
|
-
- **invo_tree.
|
|
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
|
-
##
|
|
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
|
-
|
|
165
|
+
# Inspiration #
|
|
165
166
|
Inspired by [rcviz](https://github.com/carlsborg/rcviz).
|
|
166
167
|
|
|
167
|
-
|
|
168
|
+
# Supported by #
|
|
168
169
|
<img src="https://raw.githubusercontent.com/bterwijn/memory_graph/main/images/uva.png" alt="University of Amsterdam" width="600">
|
|
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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import invocation_tree as invo_tree
|
|
2
|
-
import
|
|
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
|
|
15
|
+
return half_up_round(average, 1)
|
|
16
16
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
return
|
|
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
|
|
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
|
|
@@ -7,7 +7,7 @@ import html
|
|
|
7
7
|
import sys
|
|
8
8
|
import difflib
|
|
9
9
|
|
|
10
|
-
__version__ = "0.0.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
45
|
+
return half_up_round(average, 1)
|
|
46
46
|
|
|
47
|
-
def
|
|
48
|
-
|
|
49
|
-
return
|
|
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.
|
|
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)**,
|
|
171
|
-
- **invo_tree.
|
|
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)**,
|
|
174
|
-
- **invo_tree.
|
|
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
|
-
##
|
|
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
|
-
|
|
184
|
+
# Inspiration #
|
|
184
185
|
Inspired by [rcviz](https://github.com/carlsborg/rcviz).
|
|
185
186
|
|
|
186
|
-
|
|
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.
|
|
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
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invocation_tree-0.0.5 → invocation_tree-0.0.8}/invocation_tree.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|