class_docstr: A frame to get sampling settings and to calculate samples for a
  CellProfiler module.
  
  A few important data members and data structures are maintained:
  'self.__module': the module selected by the user.
  'self.__pipeline': the pipeline containing the module.
  'self.__parameters_list': a list of all unbounded parameters that will
      be displayed to the user. Eg,
          [(label_1, m_1), (label_2, m_2), ...], where
          parameter i maps to the tuple (label_i, m_i) with 'label_i' its
          text label and 'm_i' its 1-based index in 'self.__module'.
  'self.__parameters_to_widgets_list': a list of lists representing the
      mapping from parameters (see above), to 'groups of widgets'. Ie,
      some parameters will have more than two values and, hence, will
      have two groups of widgets. Eg,
          [[0, 1], [[2]], [3, 4], represents a mapping
          param 0 -> widget group 0 and 1, etc.
      In practice, each such mapping will correspond exactly to a
      check box and one or more rows of spin controls, depending on how
      many values a particular parameter takes.
  'self.__sample_list': a list of samples of the selected parameters. Eg,
      suppose that parameters p_1, p_2 and p_3 are selected, then a list
      of the form
          [[s_11, s_21, s_31], [s_12, s_22, s_32], ...]
      will be returned.
      NB: for those parameters displayed, but not selected by the user, this
      list will contain the value 'None'. Eg, suppose p2 is deselected, then
      the list will have the form:
          [[s_11, None, s_31], [s_12, None, s_32], ...].
docstr: Get and return the list of unbounded parameters.
  
  This method first identifies all unbounded parameters in 'module'.
  Next, it updates a list of mappings to tuples:
      a parameter's 0-based index -> (its label, its 1-based module index),
      eg, 0 -> (Crop, 2); 1 -> (Crop, 3); 2 -> (IdentifyPrimaryObjects, 4).
docstr_tok: ["Get","and","return","the","list","of","unbounded","parameters",".","This","method","first","identifies","all","unbounded","parameters","in","'module","'",".","Next",",","it","updates","a","list","of","mappings","to","tuples",":","a","parameter","'s","0-based","index","-",">","(","its","label",",","its","1-based","module","index",")",",","eg",",","0","-",">","(","Crop",",","2",")",";","1","-",">","(","Crop",",","3",")",";","2","-",">","(","IdentifyPrimaryObjects",",","4",")","."]
code: def get_parameters_list(self):
      """Get and return the list of unbounded parameters.
  
      This method first identifies all unbounded parameters in 'module'.
      Next, it updates a list of mappings to tuples:
          a parameter's 0-based index -> (its label, its 1-based module index),
          eg, 0 -> (Crop, 2); 1 -> (Crop, 3); 2 -> (IdentifyPrimaryObjects, 4).
      """
      parameters_list = []
      # Get unique keys of visible parameters
      visible_settings_keys = []
      for setting in self.__module.visible_settings():
          visible_settings_keys.append(setting.key())
      # Update dictionary of visible, unbounded parameters:
      #   0-based index in 'parameters_list' -> (label, 1-based module number)
      for i, setting in enumerate(self.__module.settings()):
          if (
              setting.key() in visible_settings_keys
              and self.get_parameter_type(setting)
              == PARAM_CLASS_UNBOUNDED
          ):
              parameters_list.append((setting.get_text(), i + 1))
      return parameters_list
  
imports: import os
  import traceback
  import numpy
  import skimage.io
  import wx
  import wx.lib.agw.floatspin
  from cellprofiler_core.image import ImageSetList
  from cellprofiler_core.measurement import Measurements
  from cellprofiler_core.object import ObjectSet
  from cellprofiler_core.pipeline import RunException
  from cellprofiler_core.setting import Binary, Divider, FigureSubscriber, Measurement, ValidationError
  from cellprofiler_core.setting.choice import Choice
  from cellprofiler_core.setting.do_something import DoSomething, RemoveSettingButton
  from cellprofiler_core.setting.range import FloatRange, IntegerRange, IntegerOrUnboundedRange
  from cellprofiler_core.setting.subscriber import ImageSubscriber
  from cellprofiler_core.setting.text import Float, Integer, Name, Text, ImageName
  import cellprofiler.gui._workspace_model
label_desc: Use image node_id 2 for calling the ParameterSampleFrame obj's underlying member method code with example usage: obj.get_parameters_list() and returns: parameters_list