code: def features_and_columns_match(
      measurements, module, object_name="Image", pipeline=None
  ):
      assert object_name in measurements.get_object_names()
      features = measurements.get_feature_names(object_name)
      columns = list(
          filter(
              (lambda x: x[0] == object_name),
              module.get_measurement_columns(pipeline),
          )
      )
      assert len(features) == len(columns)
      for column in columns:
          assert (
              column[1] in features
          ), "features_and_columns_match, %s not in %s" % (
              column[1],
              features,
          )
          assert (
              column[2] == COLTYPE_FLOAT
          ), "features_and_columns_match, %s type not %s" % (
              column[2],
              COLTYPE_FLOAT,
          )
  
imports: import io
  import centrosome.threshold
  import numpy
  import cellprofiler_core.image
  import cellprofiler_core.measurement
  from cellprofiler_core.constants.measurement import COLTYPE_FLOAT, EXPERIMENT
  from cellprofiler_core.constants.module._identify import O_FOREGROUND, O_THREE_CLASS, O_WEIGHTED_VARIANCE, O_TWO_CLASS, O_ENTROPY, O_BACKGROUND
  import cellprofiler.modules.measureimagequality
  import cellprofiler_core.modules.namesandtypes
  import cellprofiler.modules.smooth
  import cellprofiler_core.object
  import cellprofiler_core.pipeline
  import cellprofiler_core.workspace
  import tests.frontend.modules
label_desc: Use image node_id 3 for calling a global function with example usage: features_and_columns_match(measurements, module, object_name, pipeline) without return types