code: def _collect_variables(names, expressions=None):
      
      # Map registered variable labels to expressions.
      if not expressions:
          expressions = []
      offset = len(names) - len(expressions)
      labels_map = dict(tz.concatv(
          tz.compatibility.zip(names[:offset], names[:offset]),
          tz.compatibility.zip(names[offset:], expressions)))
  
      all_variables = tz.merge(_INJECTABLES, _TABLES)
      variables = {}
      for label, expression in labels_map.items():
          # In the future, more registered variable expressions could be
          # supported. Currently supports names of registered variables
          # and references to table columns.
          if '.' in expression:
              # Registered variable expression refers to column.
              table_name, column_name = expression.split('.')
              table = get_table(table_name)
              variables[label] = table.get_column(column_name)
          else:
              thing = all_variables[expression]
              if isinstance(thing, (_InjectableFuncWrapper, TableFuncWrapper)):
                  # Registered variable object is function.
                  variables[label] = thing()
              else:
                  variables[label] = thing
  
      return variables
docs: Map labels and expressions to registered variables.
  
      Handles argument matching.
  
      Example:
  
          _collect_variables(names=['zones', 'zone_id'],
                             expressions=['parcels.zone_id'])
  
      Would return a dict representing:
  
          {'parcels': <DataFrameWrapper for zones>,
           'zone_id': <pandas.Series for parcels.zone_id>}
  
      Parameters
      ----------
      names : list of str
          List of registered variable names and/or labels.
          If mixing names and labels, labels must come at the end.
      expressions : list of str, optional
          List of registered variable expressions for labels defined
          at end of `names`. Length must match the number of labels.
  
      Returns
      -------
      variables : dict
          Keys match `names`. Values correspond to registered variables,
          which may be wrappers or evaluated functions if appropriate.