code: def st_equal(st1, st2) -> bool:
      if st1.shape != st2.shape:
          return False
      if st1 == st2:
          return True
      idx = Variable("idx", 0, prod(st1.shape) - 1)
      st1_idx, st1_valid = st1.expr_node(idx)
      st2_idx, st2_valid = st2.expr_node(idx)
      for i in range(idx.min, idx.max + 1):
          st1_off = sym_infer(st1_idx, {idx: i})
          st2_off = sym_infer(st2_idx, {idx: i})
          st1_v = sym_infer(st1_valid, {idx: i})
          st2_v = sym_infer(st2_valid, {idx: i})
          if st1_v != st2_v or (st1_off != st2_off and st1_v):
              print(
                  f"ST MISMATCH @ {i}, {st1_v=} != {st2_v=}, {st1_off=} != {st2_off=}"
              )
              print(st1)
              print(st2)
              return False
      return True
  
imports: import unittest
  from typing import List
  from tinygrad.helpers import prod
  from tinygrad.shape.view import View
  from tinygrad.shape.shapetracker import ShapeTracker
  from tinygrad.shape.symbolic import Variable, sym_infer
label_desc: Use image node_id 1 for calling a global function with example usage: st_equal(st1, st2) and returns: True, False, True, False