code: def augassign_handle(self, tokens):
          
          internal_assert(len(tokens) == 3, "invalid assignment tokens", tokens)
          name, op, item = tokens
          out = ""
          if op == "|>=":
              out += name + " = (" + item + ")(" + name + ")"
          elif op == "|*>=":
              out += name + " = (" + item + ")(*" + name + ")"
          elif op == "<|=":
              out += name + " = " + name + "((" + item + "))"
          elif op == "<*|=":
              out += name + " = " + name + "(*(" + item + "))"
          elif op == "..=" or op == "<..=":
              out += name + " = _coconut_forward_compose((" + item + "), " + name + ")"
          elif op == "..>=":
              out += name + " = _coconut_forward_compose(" + name + ", (" + item + "))"
          elif op == "<*..=":
              out += name + " = _coconut_forward_star_compose((" + item + "), " + name + ")"
          elif op == "..*>=":
              out += name + " = _coconut_forward_star_compose(" + name + ", (" + item + "))"
          elif op == "??=":
              out += name + " = " + item + " if " + name + " is None else " + name
          elif op == "::=":
              ichain_var = lazy_chain_var + "_" + str(self.ichain_count)
              self.ichain_count += 1
              # this is necessary to prevent a segfault caused by self-reference
              out += (
                  ichain_var + " = " + name + "\n"
                  + name + " = _coconut.itertools.chain.from_iterable(" + lazy_list_handle([ichain_var, "(" + item + ")"]) + ")"
              )
          else:
              out += name + " " + op + " " + item
          return out
docs: Process assignments.