docstr: preprocesses before indirect update sparsity
  default action:
      remove all units but maintain struct of node_info.output_origin and store to node_info.output_grad
      for submodules, do tensor_requires_grad to module.named_parameters
docstr_tok: ["preprocesses","before","indirect","update","sparsity","default","action",":","remove","all","units","but","maintain","struct","of","node_info.output_origin","and","store","to","node_info.output_grad","for","submodules",",","do","tensor_requires_grad","to","module.named_parameters"]
code: def indirect_update_preprocess(
      self, model_speedup: "ModelSpeedup", node: Node
  ):
      """
      preprocesses before indirect update sparsity
      default action:
          remove all units but maintain struct of node_info.output_origin and store to node_info.output_grad
          for submodules, do tensor_requires_grad to module.named_parameters
      """
      raise RuntimeError(
          "indirect_update_preprocess method should be overrided!"
      )
  
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, Tuple
  import operator
  import torch
  from torch.nn import functional
  from torch.fx.node import Node
  from torch.utils._pytree import tree_flatten, tree_unflatten
  from .utils import randomize_tensor_inplace, randomize_if_tensor, tree_map_zip, torch_float_dtype, poss_deepcopy
label_desc: Use image node_id 5 for calling the MaskUpdater obj's underlying member method code with example usage: obj.indirect_update_preprocess(model_speedup, node) without return types