class_docstr: Trainer using distinct optimizers for the encoder, decoder and discriminator.
  
  Args:
      model (BaseAE): The model to train
  
      train_dataset (BaseDataset): The training dataset of type
          :class:`~pythae.data.dataset.BaseDataset`
  
      training_args (CoupledOptimizerAdversarialTrainerConfig): The training arguments summarizing
          the main parameters used for training. If None, a basic training instance of
          :class:`AdversarialTrainerConfig` is used. Default: None.
  
      encoder_optimizer (~torch.optim.Optimizer): An instance of `torch.optim.Optimizer`
          used for training the encoder. If None, a :class:`~torch.optim.Adam` optimizer is
          used. Default: None.
  
      decoder_optimizer (~torch.optim.Optimizer): An instance of `torch.optim.Optimizer`
          used for training the decoder. If None, a :class:`~torch.optim.Adam` optimizer is
          used. Default: None.
  
      discriminator_optimizer (~torch.optim.Optimizer): An instance of `torch.optim.Optimizer`
          used for training the discriminator. If None, a :class:`~torch.optim.Adam` optimizer is
          used. Default: None.
code: def _schedulers_step(
      self,
      encoder_metrics=None,
      decoder_metrics=None,
      discriminator_metrics=None,
  ):
      if self.encoder_scheduler is None:
          pass
  
      elif isinstance(
          self.encoder_scheduler, lr_scheduler.ReduceLROnPlateau
      ):
          self.encoder_scheduler.step(encoder_metrics)
  
      else:
          self.encoder_scheduler.step()
  
      if self.decoder_scheduler is None:
          pass
  
      elif isinstance(
          self.decoder_scheduler, lr_scheduler.ReduceLROnPlateau
      ):
          self.decoder_scheduler.step(decoder_metrics)
  
      else:
          self.decoder_scheduler.step()
  
      if self.discriminator_scheduler is None:
          pass
  
      elif isinstance(
          self.discriminator_scheduler, lr_scheduler.ReduceLROnPlateau
      ):
          self.discriminator_scheduler.step(discriminator_metrics)
  
      else:
          self.discriminator_scheduler.step()
  
imports: import datetime
  import dis
  import logging
  import os
  from copy import deepcopy
  from typing import List, Optional
  import torch
  import torch.distributed
  import torch.optim
  import torch.optim.lr_scheduler
  from ...data.datasets import BaseDataset
  from ...models import BaseAE
  from ..base_trainer import BaseTrainer
  from ..trainer_utils import set_seed
  from ..training_callbacks import TrainingCallback
  from .coupled_optimizer_adversarial_trainer_config import CoupledOptimizerAdversarialTrainerConfig
label_desc: Use image node_id 9 for calling the CoupledOptimizerAdversarialTrainer obj's underlying member method code with example usage: obj._schedulers_step(encoder_metrics, decoder_metrics, discriminator_metrics) without return types