TechnionNLI-master/parser/modified-fig/src/main/java/fig/basic/Fmt.java
package fig.basic;

import java.text.*;

/**
 * Formatting class.  I'm really lazy.
 * D() is a family of default functions for formatting various types of objects.
 */
public class Fmt {
  public static String D(double x) {
    if(Math.abs(x - (int)x) < 1e-40) // An integer (probably)
      return ""+(int)x;
    if(Math.abs(x) < 1e-3) // Scientific notation (close to 0)
      return String.format("%.2e", x);
    return String.format("%.3f", x);
  }
  public static String D(boolean[] x) { return StrUtils.join(x); }
  public static String D(int[] x) { return StrUtils.join(x); }
  public static String D(double[] x) { return D(x, " "); }
  public static String D(double[] xs, String delim) {
    StringBuilder sb = new StringBuilder();
    for(double x : xs) {
      if(sb.length() > 0) sb.append(delim);
      sb.append(Fmt.D(x));
    }
    return sb.toString();
  }
  // Print out only first N
  public static String D(double[] x, int firstN) {
    if(firstN >= x.length) return D(x);
    return D(ListUtils.subArray(x, 0, firstN)) + " ...("+(x.length-firstN) + " more)";
  }
  public static String D(double[][] x) { return D(x, " "); }
  public static String D(double[][] xs, String delim) {
    StringBuilder sb = new StringBuilder();
    for(double[] x : xs) {
      if(sb.length() > 0) sb.append(delim);
      sb.append(Fmt.D(x));
    }
    return sb.toString();
  }
  public static <T> String D(T[] x) { return D(x, " "); }
  public static <T> String D(T[] xs, String delim) {
    StringBuilder sb = new StringBuilder();
    for(T x : xs) {
      if(sb.length() > 0) sb.append(delim);
      sb.append(x.toString());
    }
    return sb.toString();
  }

  public static String D(TDoubleMap map) { return D(map, 20); }
  public static String D(TDoubleMap map, int numTop) {
    return MapUtils.topNToString(map, numTop);
  }

  public static String D(Object o) {
    if(o instanceof double[]) return Fmt.D((double[])o);
    if(o instanceof double[][]) return Fmt.D((double[][])o);
    if(o instanceof double[][][]) return Fmt.D((double[][][])o);
    throw Exceptions.unknownCase;
  }

  public static String bytesToString(long b) {
    double gb = (double)b / (1024*1024*1024);
    if(gb >= 1) return gb >= 10 ? (int)gb+"G" : NumUtils.round(gb, 1)+"G";
    double mb = (double)b / (1024*1024);
    if(mb >= 1) return mb >= 10 ? (int)mb+"M" : NumUtils.round(mb, 1)+"M";
    double kb = (double)b / (1024);
    if(kb >= 1) return kb >= 10 ? (int)kb+"K" : NumUtils.round(kb, 1)+"K";
    return b+"";
  }
  public static String formatEasyDateTime(long t) {
    return new SimpleDateFormat("MM/dd HH:mm").format(t);
  }
}
