code: public static <R, C, V> ImmutableTable<R, C, V> copyOf(
        Table<? extends R, ? extends C, ? extends V> table) {
      if (table instanceof ImmutableTable) {
        @SuppressWarnings("unchecked")
        ImmutableTable<R, C, V> parameterizedTable = (ImmutableTable<R, C, V>) table;
        return parameterizedTable;
      } else {
        return copyOf(table.cellSet());
      }
    }
docs: Returns an immutable copy of the provided table.
  
  <p>The {@link Table#cellSet()} iteration order of the provided table determines the iteration
  ordering of all views in the returned table. Note that some views of the original table and the
  copied table may have different iteration orders. For more control over the ordering, create a
  {@link Builder} and call {@link Builder#orderRowsBy}, {@link Builder#orderColumnsBy}, and
  {@link Builder#putAll}
  
  <p>Despite the method name, this method attempts to avoid actually copying the data when it is
  safe to do so. The exact circumstances under which a copy will or will not be performed are
  undocumented and subject to change.