To keep track of how data flows between these primitives, values being tracked are wrapped in instances of the Tracer class. When a Python function is provided to grad or jit, it’s wrapped for tracing and returned. When the wrapped function is called, we abstract the concrete arguments ...