docs: public void incrementDependencySufficientStatistics(SufficientStatistics gradient,
        SufficientStatistics parameters, List<String> posTags,
        Collection<DependencyStructure> dependencies, double count) {
  
      int[] puncCounts = CcgParser.computeDistanceCounts(posTags, puncTagSet);
      int[] verbCounts = CcgParser.computeDistanceCounts(posTags, verbTagSet);
  
      SufficientStatistics dependencyGradient = gradient.coerceToList().getStatisticByName(DEPENDENCY_PARAMETERS);
      SufficientStatistics wordDistanceGradient = gradient.coerceToList().getStatisticByName(WORD_DISTANCE_PARAMETERS);
      SufficientStatistics puncDistanceGradient = gradient.coerceToList().getStatisticByName(PUNC_DISTANCE_PARAMETERS);
      SufficientStatistics verbDistanceGradient = gradient.coerceToList().getStatisticByName(VERB_DISTANCE_PARAMETERS);
      
      SufficientStatistics dependencyParameters = parameters.coerceToList().getStatisticByName(DEPENDENCY_PARAMETERS);
      SufficientStatistics wordDistanceParameters = parameters.coerceToList().getStatisticByName(WORD_DISTANCE_PARAMETERS);
      SufficientStatistics puncDistanceParameters = parameters.coerceToList().getStatisticByName(PUNC_DISTANCE_PARAMETERS);
      SufficientStatistics verbDistanceParameters = parameters.coerceToList().getStatisticByName(VERB_DISTANCE_PARAMETERS);
      
      for (DependencyStructure dependency : dependencies) {
        int headWordIndex = dependency.getHeadWordIndex();
        int objectWordIndex = dependency.getObjectWordIndex();
  
        Assignment predicateAssignment = Assignment.unionAll(
            dependencyHeadVar.outcomeArrayToAssignment(dependency.getHead()),
            dependencySyntaxVar.outcomeArrayToAssignment(dependency.getHeadSyntacticCategory()),
            dependencyArgNumVar.outcomeArrayToAssignment(dependency.getArgIndex()),
            dependencyHeadPosVar.outcomeArrayToAssignment(posTags.get(headWordIndex)),
            dependencyArgPosVar.outcomeArrayToAssignment(posTags.get(objectWordIndex)));
        Assignment assignment = predicateAssignment.union(
            dependencyArgVar.outcomeArrayToAssignment(dependency.getObject()));
  
        dependencyFamily.incrementSufficientStatisticsFromAssignment(dependencyGradient,
            dependencyParameters, assignment, count);
  
        // Update distance parameters.
        int wordDistance = CcgParser.computeWordDistance(headWordIndex, objectWordIndex);
        int puncDistance = CcgParser.computeArrayDistance(puncCounts, headWordIndex, objectWordIndex);
        int verbDistance = CcgParser.computeArrayDistance(verbCounts, headWordIndex, objectWordIndex);
  
        Assignment wordDistanceAssignment = predicateAssignment.union(
            wordDistanceVar.outcomeArrayToAssignment(wordDistance));
        wordDistanceFamily.incrementSufficientStatisticsFromAssignment(wordDistanceGradient,
            wordDistanceParameters, wordDistanceAssignment, count);
  
        Assignment puncDistanceAssignment = predicateAssignment.union(
            puncDistanceVar.outcomeArrayToAssignment(puncDistance));
        puncDistanceFamily.incrementSufficientStatisticsFromAssignment(puncDistanceGradient,
            puncDistanceParameters, puncDistanceAssignment, count);
  
        Assignment verbDistanceAssignment = predicateAssignment.union(
            verbDistanceVar.outcomeArrayToAssignment(verbDistance));
        verbDistanceFamily.incrementSufficientStatisticsFromAssignment(verbDistanceGradient,
            verbDistanceParameters, verbDistanceAssignment, count);
      }
    }