code: public static ImmutableMatrix copy(Matrix source) {
  		if (source instanceof ImmutableMatrix) return (ImmutableMatrix)source;
  		if (source.getColumnCount() == 1) return copy((Vector)source);
  		if (source.getRowCount() == 2 && source.getColumnCount() == 2) return new ImmutableMatrix2((Matrix2)source);
  		if (source.getRowCount() == 3 && source.getColumnCount() == 3) return new ImmutableMatrix3((Matrix3)source);
  		return new ImmutableMatrix(source);
  	}
docs: Returns an immutable matrix with the same values as the argument.
  
  @param source the matrix containing the data for the new immutable matrix
  @return an immutable matrix containing the same elements as {@code source}
  @throws NullPointerException if {@code source} is {@code null}