Decoration Time vs Call Time

def count_calls(func):
    print(f"decorating {func.__name__}")
    calls = 0
    def wrapper(*args, **kwargs):
        nonlocal calls
        calls += 1
        print(f"{func.__name__} call #{calls}")
        return func(*args, **kwargs)
    return wrapper

@count_calls
def ping():
    return "pong"

@count_calls
def pong():
    return "ping"

print("--- module loaded, now calling ---")
ping()
ping()
pong()

What does running this module print, in order?

A
decorating ping
decorating pong
--- module loaded, now calling ---
ping call #1
ping call #1
pong call #1
B
decorating ping
decorating pong
--- module loaded, now calling ---
ping call #1
ping call #2
pong call #1
C
--- module loaded, now calling ---
decorating ping
ping call #1
decorating ping
ping call #2
decorating pong
pong call #1
D
decorating ping
decorating pong
--- module loaded, now calling ---
ping call #1
ping call #2
pong call #3