code: def atomicInteractions(
      self,
      interactions: list[str],
      field_model: Mapping[str, FieldVariable],
  ) -> list[str]:
      atomic_interactions = []
  
      for field in interactions:
          try:
              field_model[field]
          except KeyError:
              raise KeyError(
                  "The interaction variable %s is "
                  "not a named variable in the variable "
                  "definition" % field
              )
  
          if hasattr(field_model[field], "interaction_fields"):
              sub_interactions = field_model[field].interaction_fields  # type: ignore[attr-defined]
              atoms = self.atomicInteractions(
                  sub_interactions, field_model
              )
              atomic_interactions.extend(atoms)
          else:
              atomic_interactions.append(field)
  
      return atomic_interactions
  
file_path: dedupe/dedupe/variables/interaction.py
imports: from __future__ import annotations
  import itertools
  from typing import Mapping
  from dedupe._typing import VariableDefinition
  from dedupe.variables.base import FieldType
  from dedupe.variables.base import Variable
label_desc: Use image node_id 4 for calling the InteractionType obj's underlying member method code with example usage: obj.atomicInteractions(interactions, field_model) and returns: atomic_interactions