torch.tx.ExtractVariables
export type ExtractVariables<AST> =
// Variable reference
AST extends { var: infer Name extends string }
? Name
: // Binary operators
AST extends { op: string; left: infer L; right: infer R }
? ExtractVariables<L> | ExtractVariables<R>
: // Ternary operator
AST extends { op: '?:'; cond: infer C; then: infer T; else: infer E }
? ExtractVariables<C> | ExtractVariables<T> | ExtractVariables<E>
: // Unary operators
AST extends { op: string; arg: infer A }
? ExtractVariables<A>
: // Function calls with args array
AST extends { fn: string; args: infer Args extends readonly unknown[] }
? ExtractVariablesFromArgs<Args>
: // Function calls with single arg (legacy)
AST extends { fn: string; arg: infer Arg }
? ExtractVariables<Arg>
: // Literals have no variables
never;ASTExtract all variable names from a parsed AST. Returns a union of all identifier names used in the expression.