docs: public T solve( T B )
      {
          convertType.specify(this,B);
  
          // Look to see if there is a special function for handling this case
          if( this.mat.getType() != B.getType() ) {
              Method m = findAlternative("solve",mat,B.mat,convertType.commonType.getClassType());
              if( m != null ) {
                  T ret = wrapMatrix(convertType.commonType.create(1,1));
                  invoke(m,this.mat,B.mat,ret.mat); // TODO handle boolean return from solve
                  return ret;
              }
          }
  
          T A = convertType.convert(this);
          B = convertType.convert(B);
  
          T x = A.createMatrix(mat.getNumCols(),B.getMatrix().getNumCols(), A.getType());
  
          if( !A.ops.solve(A.mat,x.mat,B.mat))
              throw new SingularMatrixException();
          if( A.ops.hasUncountable(x.mat))
              throw new SingularMatrixException("Solution contains uncountable numbers");
  
          return x;
      }