protected RandomCutForest()

in Java/core/src/main/java/com/amazon/randomcutforest/RandomCutForest.java [327:375]


    protected RandomCutForest(Builder<?> builder, boolean notUsed) {
        checkArgument(builder.numberOfTrees > 0, "numberOfTrees must be greater than 0");
        checkArgument(builder.sampleSize > 0, "sampleSize must be greater than 0");
        builder.outputAfter.ifPresent(n -> {
            checkArgument(n > 0, "outputAfter must be greater than 0");
            checkArgument(n <= builder.sampleSize, "outputAfter must be smaller or equal to sampleSize");
        });
        checkArgument(builder.dimensions > 0, "dimensions must be greater than 0");
        builder.timeDecay.ifPresent(timeDecay -> {
            checkArgument(timeDecay >= 0, "timeDecay must be greater than or equal to 0");
        });
        builder.threadPoolSize.ifPresent(n -> checkArgument((n > 0) || ((n == 0) && !builder.parallelExecutionEnabled),
                "threadPoolSize must be greater/equal than 0. To disable thread pool, set parallel execution to 'false'."));
        checkArgument(builder.internalShinglingEnabled || builder.shingleSize == 1
                || builder.dimensions % builder.shingleSize == 0, "wrong shingle size");
        // checkArgument(!builder.internalShinglingEnabled || builder.shingleSize > 1,
        // " need shingle size > 1 for internal shingling");
        if (builder.internalRotationEnabled) {
            checkArgument(builder.internalShinglingEnabled, " enable internal shingling");
        }
        builder.initialPointStoreSize.ifPresent(n -> {
            checkArgument(n > 0, "initial point store must be greater than 0");
            checkArgument(n > builder.sampleSize * builder.numberOfTrees || builder.dynamicResizingEnabled,
                    " enable dynamic resizing ");
        });
        checkArgument(builder.boundingBoxCacheFraction >= 0 && builder.boundingBoxCacheFraction <= 1,
                "incorrect cache fraction range");
        numberOfTrees = builder.numberOfTrees;
        sampleSize = builder.sampleSize;
        outputAfter = builder.outputAfter.orElse((int) (sampleSize * DEFAULT_OUTPUT_AFTER_FRACTION));
        internalShinglingEnabled = builder.internalShinglingEnabled;
        shingleSize = builder.shingleSize;
        dimensions = builder.dimensions;
        timeDecay = builder.timeDecay.orElse(1.0 / (DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY * sampleSize));
        storeSequenceIndexesEnabled = builder.storeSequenceIndexesEnabled;
        centerOfMassEnabled = builder.centerOfMassEnabled;
        parallelExecutionEnabled = builder.parallelExecutionEnabled;
        boundingBoxCacheFraction = builder.boundingBoxCacheFraction;
        builder.directLocationMapEnabled = builder.directLocationMapEnabled || shingleSize == 1;
        inputDimensions = (internalShinglingEnabled) ? dimensions / shingleSize : dimensions;
        pointStoreCapacity = max(sampleSize * numberOfTrees + 1, 2 * sampleSize);
        initialPointStoreSize = builder.initialPointStoreSize.orElse(2 * sampleSize);

        if (parallelExecutionEnabled) {
            threadPoolSize = builder.threadPoolSize.orElse(Runtime.getRuntime().availableProcessors() - 1);
        } else {
            threadPoolSize = 0;
        }
    }