docs: def keyval_str2typ(var, val):
      """Convert a variable from a string to its correct type
  
      Parameters
      ----------
      var: str
          The variable name
      val: str
          The value of the variable represented as a string
  
      Returns
      -------
      varout: str
          Stripped lowercase `var`
      valout: any type
          The value converted from string to its presumed type
  
      Notes
      -----
      This method is heuristic and is only intended for usage in
      dclab.
  
      See Also
      --------
      keyval_typ2str: the opposite
      """
      if not (isinstance(val, str_types)):
          # already a type:
          return var.strip(), val
      var = var.strip().lower()
      val = val.strip()
      # Find values
      if len(var) != 0 and len(val) != 0:
          # check for float
          if val.startswith("[") and val.endswith("]"):
              if len(val.strip("[],")) == 0:
                  # empty list
                  values = []
              else:
                  values = val.strip("[],").split(",")
                  values = [float(v) for v in values]
              return var, values
          elif val.lower() in ["true", "y"]:
              return var, True
          elif val.lower() in ["false", "n"]:
              return var, False
          elif val[0] in ["'", '"'] and val[-1] in ["'", '"']:
              return var, val.strip("'").strip('"').strip()
          elif val in dfn.scalar_feature_names:
              return var, val
          else:
              try:
                  return var, float(val.replace(",", "."))
              except ValueError:
                  return var, val