class_docstr: Trains a model using a graph schema.
class_docstr_tok: ["Trains","a","model","using","a","graph","schema","."]
code: def _create_fingerprint_schema(
      self, train_schema: GraphSchema
  ) -> GraphSchema:
      fingerprint_schema = copy.deepcopy(train_schema)
      for node_name, schema_node in fingerprint_schema.nodes.items():
          # We make every node a target so that `graph_runner.run(...)` returns
          # the output for each node. We need the output of each node
          # to decide which nodes we can prune.
          schema_node.is_target = True
  
          # We do not replace the input nodes as we need an up-to-date fingerprint of
          # any input data to the graph. This means we can prune according to what
          # has actually changed.
          if not schema_node.is_input:
              FingerprintComponent.replace_schema_node(
                  schema_node, self._cache
              )
      return fingerprint_schema
  
file_path: rasa/rasa/engine/training/graph_trainer.py
imports: import copy
  import logging
  from pathlib import Path
  from typing import Any, Dict, Text, Type, Union
  from rasa.engine.caching import TrainingCache
  from rasa.engine.graph import ExecutionContext, GraphSchema, GraphModelConfiguration
  from rasa.engine.constants import PLACEHOLDER_IMPORTER
  from rasa.engine.runner.interface import GraphRunner
  from rasa.engine.storage.storage import ModelStorage, ModelMetadata
  from rasa.engine.training.components import PrecomputedValueProvider, FingerprintComponent, FingerprintStatus
  from rasa.engine.training.hooks import TrainingHook, LoggingHook
  from rasa.shared.importers.importer import TrainingDataImporter
label_desc: Use image node_id 4 for calling the GraphTrainer obj's underlying member method code with example usage: obj._create_fingerprint_schema(train_schema) and returns: fingerprint_schema