code: def accept_decoder(self, Decoder, output_name):
      if not isinstance(self.source, str) and self.decoder is not None:
          raise ValueError(
              "Source can't be a node and also have a decoder"
          )
  
      if Decoder is not None:
          # The first element of the operations is a decoder
          if self.transforms and isinstance(
              self.transforms[0], Decoder
          ):
              self.decoder = self.transforms.pop(0)
  
          elif self.decoder is None:
              try:
                  self.decoder = Decoder()
              except Exception:
                  msg = f"Impossible to use default decoder for {output_name},"
                  msg += "make sure you specify one in your pipeline."
                  raise ValueError(msg)
  
      if self.default_pipeline:
          self.transforms.append(ToTensor())
  
      for i, op in enumerate(self.transforms):
          if isinstance(op, ch.nn.Module):
              self.transforms[i] = ModuleWrapper(op)
  
file_path: ffcv/ffcv/pipeline/pipeline_spec.py
imports: import torch
  from typing import List, Union
  from .operation import Operation
  from ..transforms.module import ModuleWrapper
  from ..transforms import ToTensor
label_desc: Use image node_id 4 for calling the PipelineSpec obj's underlying member method code with example usage: obj.accept_decoder(Decoder, output_name) without return types