code: def pure_depend_keys(self) -> Set[str]:
      if self._pure_depend_keys is not None:
          return self._pure_depend_keys
      pure_dep_keys = set()
      for n in self.chunk_graph:
          pure_dep_keys.update(
              inp.key
              for inp, pure_dep in zip(n.inputs, n.op.pure_depends)
              if pure_dep
          )
      self._pure_depend_keys = pure_dep_keys
      return pure_dep_keys
  
imports: from enum import Enum
  from typing import Iterable, List, Optional, Set, Tuple
  from ...core import ChunkGraph, DAG, ChunkData
  from ...resource import Resource
  from ...serialization.serializables.field_type import TupleType
  from ...serialization.serializables import Serializable, StringField, ReferenceField, Int32Field, Int64Field, Float64Field, BoolField, AnyField, DictField, ListField, TupleField, FieldTypes
  from ...typing import BandType, ChunkType
label_desc: Use image node_id 4 for calling the Subtask obj's underlying member method code with example usage: obj.pure_depend_keys() and returns: pure_dep_keys, self