* @throws IOException if a communication error occurs
   * @throws CycApiException if the api request results in a cyc server error
   * @throws IllegalArgumentException if the cycObject is not the correct type of thing for
   * making into an ELMt
   */
  public ELMt makeELMt(Object object)
          throws IOException, CycApiException {
    if (object instanceof ELMt) {
      return (ELMt) object;
    } else if (object instanceof CycList) {
      return canonicalizeHLMT((CycList) object);
    } else if (object instanceof CycNaut) {
      return canonicalizeHLMT((CycNaut) object);
    } else if (object instanceof CycConstant) {
      return ELMtConstant.makeELMtConstant((CycConstant) object);
    } else if (object instanceof CycNart) {
      return ELMtNart.makeELMtNart((CycNart) object);
    } else if (object instanceof String) {
      String elmtString = object.toString().trim();
      if (elmtString.startsWith("(")) {
        @SuppressWarnings("unchecked")
        CycList<Object> elmtCycList = makeCycList(elmtString);
        return makeELMt(elmtCycList);
      } else {
        return makeELMt(getKnownConstantByName(elmtString));
      }
    } else {
      throw new IllegalArgumentException("Can't make an ELMt from " + object
              + " class: " + object.getClass().getSimpleName());
    }
  }