docstr: Convert a file name into an absolute path
  
  We do a few things here:
  * apply metadata from an image set to the file name if an
    image set is specified
  * change the relative path into an absolute one using the "." and "&"
    convention
  * Create any directories along the path
docstr_tok: ["Convert","a","file","name","into","an","absolute","path","We","do","a","few","things","here",":","*","apply","metadata","from","an","image","set","to","the","file","name","if","an","image","set","is","specified","*","change","the","relative","path","into","an","absolute","one","using","the","``",".","''","and","``","&","''","convention","*","Create","any","directories","along","the","path"]
code: def make_full_filename(
      self, file_name, workspace=None, image_set_number=None
  ):
      """Convert a file name into an absolute path
  
      We do a few things here:
      * apply metadata from an image set to the file name if an
        image set is specified
      * change the relative path into an absolute one using the "." and "&"
        convention
      * Create any directories along the path
      """
      if image_set_number is not None and workspace is not None:
          file_name = workspace.measurements.apply_metadata(
              file_name, image_set_number
          )
      measurements = (
          None if workspace is None else workspace.measurements
      )
      path_name = self.directory.get_absolute_path(
          measurements, image_set_number
      )
      if self.wants_prefix:
          file_name = self.prefix.value + file_name
      file_name = os.path.join(path_name, file_name)
      path, file = os.path.split(file_name)
      if not os.path.isdir(path):
          os.makedirs(path)
      return os.path.join(path, file)
  
imports: import base64
  import csv
  import logging
  import os
  import numpy
  from cellprofiler_core.constants.image import C_MD5_DIGEST, C_SCALING, C_HEIGHT, C_WIDTH
  from cellprofiler_core.constants.measurement import EXPERIMENT, IMAGE, AGG_MEAN, AGG_MEDIAN, AGG_STD_DEV, C_URL, C_PATH_NAME, C_FILE_NAME, NEIGHBORS, R_FIRST_IMAGE_NUMBER, R_SECOND_IMAGE_NUMBER, R_FIRST_OBJECT_NUMBER, R_SECOND_OBJECT_NUMBER
  from cellprofiler_core.constants.module import IO_FOLDER_CHOICE_HELP_TEXT, IO_WITH_METADATA_HELP_TEXT, USING_METADATA_HELP_REF, USING_METADATA_TAGS_REF
  from cellprofiler_core.constants.pipeline import EXIT_STATUS
  from cellprofiler_core.measurement import Measurements
  from cellprofiler_core.module import Module
  from cellprofiler_core.preferences import ABSOLUTE_FOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_INPUT_FOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_INPUT_SUBFOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_OUTPUT_FOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_OUTPUT_SUBFOLDER_NAME
  from cellprofiler_core.preferences import get_headless
  from cellprofiler_core.setting import Binary
  from cellprofiler_core.setting import Divider
  from cellprofiler_core.setting import Measurement
  from cellprofiler_core.setting import SettingsGroup
  from cellprofiler_core.setting import ValidationError
  from cellprofiler_core.setting.choice import CustomChoice, Choice
  from cellprofiler_core.setting.do_something import DoSomething, RemoveSettingButton
  from cellprofiler_core.setting.multichoice import MeasurementMultiChoice
  from cellprofiler_core.setting.subscriber import ImageSubscriber, LabelSubscriber
  from cellprofiler_core.setting.text import Directory, Text
  from cellprofiler_core.utilities.core.modules.load_data import is_file_name_feature, is_path_name_feature
  from cellprofiler_core.utilities.measurement import find_metadata_tokens, get_agg_measurement_name
  from cellprofiler.gui.help.content import MEASUREMENT_NAMING_HELP
label_desc: Use image node_id 18 for calling the ExportToSpreadsheet obj's underlying member method code with example usage: obj.make_full_filename(file_name, workspace, image_set_number) and returns: os