code: def _margins(vars, margins=True):
      
      if margins is False:
          return []
  
      def fn(_vars):
          "The margin variables for a given row or column"
          # The first item is and empty list for no margins
          dim_margins = [[]]
          # for each wanted variable, couple it with
          # all variables to the right
          for i, u in enumerate(_vars):
              if margins is True or u in margins:
                  lst = [u] + [v for v in _vars[i+1:]]
                  dim_margins.append(lst)
          return dim_margins
  
      # Margin variables for rows and columns
      row_margins = fn(vars[0])
      col_margins = fn(vars[1])
  
      # Cross the two
      lst = list(itertools.product(col_margins, row_margins))
  
      # Clean up -- merge the row and column variables
      pretty = []
      for c, r in lst:
          pretty.append(r + c)
      return pretty
docs: Figure out margining variables.
  
      Given the variables that form the rows and
      columns, and a set of desired margins, works
      out which ones are possible. Variables that
      can't be margined over are dropped silently.
  
      Parameters
      ----------
      vars : list
          variable names for rows and columns
      margins : bool | list
          If true, margins over all vars, otherwise
          only those listed
  
      Return
      ------
      out : list
          All the margins to create.