docs: @Override
    public Decimal convert(Decimal value, String sourceUnit, String destUnit) throws UcumException  {
  		assert value != null : paramError("convert", "value", "must not be null");
  		assert checkStringParam(sourceUnit) : paramError("convert", "sourceUnit", "must not be null or empty");
  		assert checkStringParam(destUnit) : paramError("convert", "destUnit", "must not be null or empty");
  
  		if (sourceUnit.equals(destUnit))
  			return value;
  			
  		Canonical src = new Converter(model, handlers).convert(new ExpressionParser(model).parse(sourceUnit));
  		Canonical dst = new Converter(model, handlers).convert(new ExpressionParser(model).parse(destUnit));
  		String s = new ExpressionComposer().compose(src, false);
  		String d = new ExpressionComposer().compose(dst, false);
  		if (!s.equals(d))
  			throw new UcumException("Unable to convert between units "+sourceUnit+" and "+destUnit+" as they do not have matching canonical forms ("+s+" and "+d+" respectively)");
  		Decimal canValue = value.multiply(src.getValue());
  //		System.out.println(value.toPlainString()+sourceUnit+" =("+src.getValue().toPlainString()+")= "+
  //				canValue.toPlainString()+s+" =("+dst.getValue().toPlainString()+")= "+
  //				canValue.divide(dst.getValue())+destUnit);
  		return canValue.divide(dst.getValue());
  	}