public static double distance()

in runtime/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/function/DefaultOverloadSelector.java [105:146]


  public static double distance(@Nonnull Signature want, @Nonnull Data[] gotArgs) {
    double sum = 0;
    List<Class<? extends Data>> args = want.getArgs();
    int i;
    for (i = 0; i < args.size(); i++) {
      if (i == args.size() - 1 && want.isVariadic()) {
        boolean doNotUnpackArray = Array.class.isAssignableFrom(want.getLastArgType());
        Data[] remainingGotArgs = normalizeVariadic(gotArgs, i, doNotUnpackArray);
        if (!doNotUnpackArray
            && gotArgs.length == i + 1
            && gotArgs[i] != null
            && gotArgs[i].isArray()) {
          sum += 0.1;
        }
        int finalI = i;
        sum +=
            stream(remainingGotArgs)
                .mapToDouble(gotArg -> gotArg != null ? distance(args.get(finalI), gotArg) : 0)
                .max()
                .orElse(0);
        i = gotArgs.length;
        break;
      }

      // Not enough args given.
      if (i >= gotArgs.length) {
        return Double.POSITIVE_INFINITY;
      }
      if (gotArgs[i] == null) {
        continue;
      }

      sum += distance(args.get(i), gotArgs[i]);
    }

    // Too many args given.
    if (i < gotArgs.length) {
      return Double.POSITIVE_INFINITY;
    }

    return sum;
  }