docs: def _parse_formula(formula):
      """
      Parse formula into a dictionary
      formula_dict[variable_name] = [encoding, dropped_name]
      Parse interactions into a list
      inter_list = [[A,B], [A,C], [A,B,C]]
  
      formula = "A + beta + A*beta | Dev(A,drop=1), Poly(beta,degree=3)"
      """
      #TODO: DEAL WITH BSPLINE HAS MULTIPLE ARGUEMENTS (NOT JUST ONE)
  
      # break formula apart from encoding instructions
      formula,instr = formula.replace(' ','').split('|')
      # break formula apart at + sign
      formula_terms = formula.split('+') 
      # examine the instructions term, first split by ),
      instr = instr.split('),')
      # elements in the instr list will match the number of non interaction 
      #      elements in formula
      # go through each formula term, making a dictionary whose key is variable name
      formula_dict = {}
      encoding     = []
      other_arg    = []
      inter_list   = []
      for term in formula_terms:
          if "*" in term:
              # then this is an interaction term, make 'list of lists'
              term = term.split('*')
              inter_list.append(term)
          else:
              # then this is not an interaction term, make blank dictionary
              formula_dict[term] = [encoding, other_arg]
      # loop through instructions, parse each term
      for term in instr:
          # remove punctuation in term
          term = re.sub('[()]','',term)
          # check for each encoding type
          if "Dev" in term:
              # remove first three letters (Dev)
              term = term[3:]
              # split on comma
              var_name,arg = term.split(',')
              # split on equals sign in arg, take part after
              drop_name = arg.split('=')[1]
              # put var_name and drop_name into proper key in formula_dict
              formula_dict[var_name] = ["Dev",drop_name]
          elif "Dum" in term:
              # remove first three letters (Dum)
              term = term[3:]
              # split on comma
              var_name,arg = term.split(',')
              # split on equals sign in arg, take part after
              ref_name = arg.split('=')[1]
              # put var_name and drop_name into proper key in formula_dict
              formula_dict[var_name] = ["Dum",ref_name]
          elif "Poly" in term:
              # remove first four letters (Poly)
              term = term[4:]
              # split on comma
              var_name,arg = term.split(',')
              # split on equals sign in arg, take part after
              degree = arg.split('=')[1]
              # put var_name and drop_name into proper key in formula_dict
              formula_dict[var_name] = ["Poly",degree]
          else:
              raise Exception("Unknown Encoding")
      return formula_dict,inter_list