@Override
  public void partition() {
    if (program == null) throw new IllegalStateException("No conic program has been set.");

    program.verifyCheckedOut();

    if (!supportsConeTypes(program.getConeTypes()))
      throw new IllegalStateException("Unsupported cone type.");

    doPartition();
    // reorderPartitions();
  }
 @Override
 public void setConicProgram(ConicProgram p) {
   program = p;
   if (!supportsConeTypes(p.getConeTypes()))
     throw new IllegalArgumentException("Unsupported cone type.");
 }