Todo:
- clean up and generate (abstract) code for geometric optimization
  -- especially, pay attention to get sign correct for negative equality
