docstr: Make sure settings are compatible. In particular, we make sure that no measurements are duplicated
docstr_tok: ["Make","sure","settings","are","compatible",".","In","particular",",","we","make","sure","that","no","measurements","are","duplicated"]
code: def validate_module(self, pipeline):
      """Make sure settings are compatible. In particular, we make sure that no measurements are duplicated"""
      if len(self.images_list.value) == 0:
          raise ValidationError("No images selected", self.images_list)
  
      if self.wants_objects.value:
          if len(self.objects_list.value) == 0:
              raise ValidationError(
                  "No object sets selected", self.objects_list
              )
  
      measurements, sources = self.get_measurement_columns(
          pipeline, return_sources=True
      )
      d = {}
      for m, s in zip(measurements, sources):
          if m in d:
              raise ValidationError(
                  "Measurement %s made twice." % (m[1]), s[0]
              )
          d[m] = True
  
imports: import logging
  import cellprofiler_core.workspace
  import numpy
  import scipy.ndimage
  import skimage.morphology
  from cellprofiler_core.constants.measurement import COLTYPE_FLOAT
  from cellprofiler_core.module import Module
  from cellprofiler_core.setting import Divider, Binary, ValidationError
  from cellprofiler_core.setting.subscriber import ImageListSubscriber, LabelListSubscriber
  from cellprofiler_core.setting.text import Float, Integer
  from centrosome.cpmorphology import fixup_scipy_ndimage_result
  from cellprofiler.gui.help.content import image_resource
label_desc: Use image node_id 2 for calling the MeasureGranularity obj's underlying member method code with example usage: obj.validate_module(pipeline) without return types