code: def push_stack(stack, substack, op_id):
    
    if substack is not None and not isinstance(substack, Stack):
      raise ValueError(
          'Substack should be type tangent.Stack or None, instead found %s' %
          type(substack))
    if __debug__:
      stack.append((substack, op_id))
    else:
      stack.append(substack)
docs: Proxy of push, where we know we're pushing a stack onto a stack.
  
    Used when differentiating call trees,where sub-functions get their own stack.
    See push() for more.
  
    Args:
      stack: The stack object, which must support appending values.
      substack: The stack to append.
      op_id: A unique variable that is also passed into the corresponding pop.
          Allows optimization passes to track pairs of pushes and pops.
  
    Raises:
      ValueError: If a non-stack value for `substack` is passed.