code: def get_lazyop_info(ast: LazyOp) -> FlopCounter:
      @functools.lru_cache(
          None
      )  # NOTE: this cache needs to be recreated for new ASTs
      def run_ast(ast):
          return InterpretedFlopCounter[ast.op](
              *(
                  [run_ast(x) for x in ast.src]
                  + ([ast.arg] if ast.arg is not None else [])
              )
          )
  
      return run_ast(ast)
  
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, Union, Type, Tuple, Any, List, Dict, Callable, ClassVar
  import functools
  from enum import Enum, auto
  from tinygrad.helpers import prod, dedup
  from tinygrad.dtype import dtypes, DType
  from tinygrad.shape.symbolic import Variable
  from dataclasses import dataclass
label_desc: Use image node_id 1 for calling a global function with example usage: get_lazyop_info(ast) and returns: run_ast, InterpretedFlopCounter