docs: public float distance(DataPoint point) {
          switch (functionName) {
              case "euclidean":
                  float ret = Nd4j.getExecutioner().execAndReturn(new EuclideanDistance(this.point, point.point))
                                  .getFinalResult().floatValue();
                  return invert ? -ret : ret;
  
              case "cosinesimilarity":
                  float ret2 = Nd4j.getExecutioner().execAndReturn(new CosineSimilarity(this.point, point.point))
                                  .getFinalResult().floatValue();
                  return invert ? -ret2 : ret2;
  
              case "manhattan":
                  float ret3 = Nd4j.getExecutioner().execAndReturn(new ManhattanDistance(this.point, point.point))
                                  .getFinalResult().floatValue();
                  return invert ? -ret3 : ret3;
              case "dot":
                  float dotRet = (float) Nd4j.getBlasWrapper().dot(this.point, point.point);
                  return invert ? -dotRet : dotRet;
              default:
                  float ret4 = Nd4j.getExecutioner().execAndReturn(new EuclideanDistance(this.point, point.point))
                                  .getFinalResult().floatValue();
                  return invert ? -ret4 : ret4;
  
          }
      }