code: def _construct_trainer(self, new_params=None, use_value_net=True):
      value_network = self.value_network if use_value_net else None
      params = new_params if new_params else self.params
  
      trainer = PPOTrainer(
          policy=self.policy, value_net=value_network, **params.asdict()
      )
      trainer.optimizers = mock.Mock(return_value=[0, 0])
      return trainer
  
imports: import unittest
  from collections import defaultdict
  from unittest import mock
  import torch
  from reagent.core.types import PolicyGradientInput
  from reagent.evaluation.evaluator import get_metrics_to_score
  from reagent.gym.policies.policy import Policy
  from reagent.gym.policies.samplers.discrete_sampler import SoftmaxActionSampler
  from reagent.models.dueling_q_network import DuelingQNetwork
  from reagent.models.fully_connected_network import FloatFeatureFullyConnected
  from reagent.training.parameters import PPOTrainerParameters
  from reagent.training.ppo_trainer import PPOTrainer
  from reagent.workflow.types import RewardOptions
label_desc: Use image node_id 2 for calling the TestPPO obj's underlying member method code with example usage: obj._construct_trainer(new_params, use_value_net) and returns: trainer