class_docstr: for some special op that masks will not change when execute
  1. for getitem op, it's no need to calc masks. do in fast path to run the algorithm faster.
  2. for (softmax, log_softmax) ops, the default process will get a wrong mask. actually we should just copy the mask from input to
      output.
class_docstr_tok: ["for","some","special","op","that","masks","will","not","change","when","execute","1.","for","getitem","op",",","it","'s","no","need","to","calc","masks",".","do","in","fast","path","to","run","the","algorithm","faster",".","2.","for","(","softmax",",","log_softmax",")","ops",",","the","default","process","will","get","a","wrong","mask",".","actually","we","should","just","copy","the","mask","from","input","to","output","."]
code: def indirect_update_process(
      self, model_speedup: "ModelSpeedup", node: Node
  ):
      node_info = model_speedup.node_infos[node]
      node_info.output_masks = tree_map_zip(
          model_speedup.indirect_calc_mask,
          node_info.output_grad,
          node_info.output_masks,
      )
  
      _, indirect_fn = self.detect_helper(model_speedup, node)
      indirect_fn(model_speedup, node)
  
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 9 for calling the NoChangeMaskUpdater obj's underlying member method code with example usage: obj.indirect_update_process(model_speedup, node) without return types