## title: A toy to visualize recursive function calls
       ## date: "2024-06-29"
       
       Recently, I did a little project in Python to visualise
       function calls, especially recursive functions.
 (HTM) Python
       
       It takes the form of a Python decorator applied to the
       desired functions. The data structure used is fairly basic,
       a tree with nodes that have a parent and an indefinite
       number of children. Each node represents a function call,
       and the nodes also include the arguments passed to the
       function when it is called and, optionally, a return value.
 (HTM) Python
       
       To generate a visual and have an overview of all the
       function calls, I used Graphviz to manage a graph and save
       it as a file (DOT, SVG, PNG, etc.).
 (HTM) Graphviz
       
       The decorator also supports memoization, which can also be
       represented on the final visual.
       
       ## How is it used?
       
       These are two clear examples of how the decorator is used.
       
       from callviz.core import callviz, set_output_dir
       
       set_output_dir("out")
       
       @callviz(
         _format="png",
         memoization=True,
         open_file=True,
         show_node_result=True,
       )
       def fib(n: int):
           if n < 2:
               return n
       
           return fib(n - 2) + fib(n - 1)
       
       @callviz(_format="png", show_link_value=False)
       def rev(arr, new):
           if arr == []:
               return new
       
           return rev(arr[1:], [arr[0]] + new)
       
       fib(5)
       rev(list(range(6, 0, -1)), [])
       
       /callviz_fib.png
       /callviz_rev.png
 (IMG) /callviz_fib.png
 (IMG) /callviz_rev.png
       
       ## Links
       
       https://github.com/theobori/callviz
 (HTM) https://github.com/theobori/callviz