code: def from_config(cls, cp, variable_params):
          
          if not cp.has_section('sampling_params'):
              raise ValueError("no sampling_params section found in config file")
          # get sampling transformations
          sampling_params, replace_parameters = \
              read_sampling_params_from_config(cp)
          sampling_transforms = transforms.read_transforms_from_config(
              cp, 'sampling_transforms')
          logging.info("Sampling in {} in place of {}".format(
              ', '.join(sampling_params), ', '.join(replace_parameters)))
          return cls(variable_params, sampling_params,
                     replace_parameters, sampling_transforms)
docs: Gets sampling transforms specified in a config file.
  
          Sampling parameters and the parameters they replace are read from the
          ``sampling_params`` section, if it exists. Sampling transforms are
          read from the ``sampling_transforms`` section(s), using
          ``transforms.read_transforms_from_config``.
  
          An ``AssertionError`` is raised if no ``sampling_params`` section
          exists in the config file.
  
          Parameters
          ----------
          cp : WorkflowConfigParser
              Config file parser to read.
          variable_params : list
              List of parameter names of the original variable params.
  
          Returns
          -------
          SamplingTransforms
              A sampling transforms class.