docs: @Nonnull
      public static Proctor construct(@Nonnull final TestMatrixArtifact matrix, ProctorLoadResult loadResult, FunctionMapper functionMapper) {
          final ExpressionFactory expressionFactory = RuleEvaluator.EXPRESSION_FACTORY;
  
          final Map<String, TestChooser<?>> testChoosers = Maps.newLinkedHashMap();
          final Map<String, String> versions = Maps.newLinkedHashMap();
  
          for (final Entry<String, ConsumableTestDefinition> entry : matrix.getTests().entrySet()) {
              final String testName = entry.getKey();
              final ConsumableTestDefinition testDefinition = entry.getValue();
              final TestType testType = testDefinition.getTestType();
              final TestChooser<?> testChooser;
              if (TestType.RANDOM.equals(testType)) {
                  testChooser = new RandomTestChooser(expressionFactory, functionMapper, testName, testDefinition);
              } else {
                  testChooser = new StandardTestChooser(expressionFactory, functionMapper, testName, testDefinition);
              }
              testChoosers.put(testName, testChooser);
              versions.put(testName, testDefinition.getVersion());
          }
  
          return new Proctor(matrix, loadResult, testChoosers);
      }