code: def testTrainIgnoresExtraFields(self):
      agent = MyAgent()
      extra = tf.ones(shape=[3, 4], dtype=tf.float32)
      experience = tf.nest.map_structure(
          lambda x: x[tf.newaxis, ...],
          trajectory.from_episode(
              observation={
                  "obs": tf.constant([1.0]),
                  "ignored": tf.constant([2.0]),
              },
              action=(),
              policy_info=(),
              reward=tf.constant([1.0]),
          ),
      )
      loss_info = agent.train(experience, extra=extra)
      reduced_experience = experience._replace(
          observation=copy.copy(experience.observation)
      )
      del reduced_experience.observation["ignored"]
      tf.nest.map_structure(
          self.assertAllEqual,
          (reduced_experience, extra),
          loss_info.extra,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import copy
  import numpy
  import tensorflow
  from tf_agents.agents import data_converter
  from tf_agents.agents import test_util
  from tf_agents.agents import tf_agent
  from tf_agents.policies import random_tf_policy
  from tf_agents.specs import array_spec
  from tf_agents.specs import tensor_spec
  from tf_agents.trajectories import time_step
  from tf_agents.trajectories import trajectory
  from tf_agents.utils import test_utils
label_desc: Use image node_id 3 for calling the TFAgentTest obj's underlying member method code with example usage: obj.testTrainIgnoresExtraFields() without return types