app/oryx-app-serving/src/main/java/com/cloudera/oryx/app/serving/als/EstimateForAnonymous.java
static float[] buildTemporaryUserVector(ALSServingModel model,
                                          List<Pair<String,Double>> parsedPathSegments,
                                          float[] Xu) throws OryxServingException {
    boolean implicit = model.isImplicit();
    Solver solver = model.getYTYSolver();
    check(solver != null, Response.Status.SERVICE_UNAVAILABLE, "No solver available for model yet");
    for (Pair<String,Double> itemValue : parsedPathSegments) {
      float[] Yi = model.getItemVector(itemValue.getFirst());
      // Given value is taken to be the fictitious current value of Qui = Xu * Yi^T
      float[] newXu = ALSUtils.computeUpdatedXu(solver, itemValue.getSecond(), Xu, Yi, implicit);
      if (newXu != null) {
        Xu = newXu;
      }
    }
    return Xu;
  }
static float[] buildTemporaryUserVector(ALSServingModel model,
                                          List<Pair<String,Double>> parsedPathSegments,
                                          float[] Xu) throws OryxServingException {
    boolean implicit = model.isImplicit();
    Solver solver = model.getYTYSolver();
    check(solver != null, Response.Status.SERVICE_UNAVAILABLE, "No solver available for model yet");
    for (Pair<String,Double> itemValue : parsedPathSegments) {
      float[] Yi = model.getItemVector(itemValue.getFirst());
      // Given value is taken to be the fictitious current value of Qui = Xu * Yi^T
      float[] newXu = ALSUtils.computeUpdatedXu(solver, itemValue.getSecond(), Xu, Yi, implicit);
      if (newXu != null) {
        Xu = newXu;
      }
    }
    return Xu;
  }
Builds a temporary user feature vector given an (optional) existing user vector and a context
of items.

@param model current ALS model
@param parsedPathSegments request path segments containing item-value pairs
@param Xu existing feature vector for the user (may be {@code null})
@return user feature vector