/**
   * {@inheritDoc}
   *
   * <p>All {@code variables} must be of type {@link Discrete}. The domain of the returned variable
   * will be a {@link JointDiscreteDomain} with the subdomains in the same order as {@code
   * variables}.
   */
  @Internal
  @Override
  public Variable createJointNoFactors(Variable... variables) {
    final boolean thisIsFirst = (variables[0] == this);
    final int dimensions = thisIsFirst ? variables.length : variables.length + 1;
    final DiscreteDomain[] domains = new DiscreteDomain[dimensions];
    final IDatum[] subdomainPriors = new IDatum[dimensions];
    domains[0] = getDomain();
    subdomainPriors[0] = getPrior();

    for (int i = thisIsFirst ? 1 : 0; i < dimensions; ++i) {
      final Discrete var = variables[i].asDiscreteVariable();
      domains[i] = var.getDomain();
      subdomainPriors[i] = var.getPrior();
    }

    final JointDiscreteDomain<?> jointDomain = DiscreteDomain.joint(domains);
    final Discrete jointVar = new Discrete(jointDomain);
    jointVar.setPrior(joinPriors(jointDomain, subdomainPriors));
    return jointVar;
  }
 @Deprecated
 @Override
 public void setFixedValueObject(@Nullable Object value) {
   setPrior(value != null ? Value.createWithIndex(getDomain(), (Integer) value) : null);
 }
 /** @deprecated use {@link #setPrior} instead. */
 @Deprecated
 public void setFixedValue(Object fixedValue) {
   setPrior(Value.create(getDomain(), fixedValue));
 }
 /** @deprecated use {@link #setPriorIndex(int)} instead. */
 @Deprecated
 public void setFixedValueIndex(int fixedValueIndex) {
   setPrior(Value.createWithIndex(getDomain(), fixedValueIndex));
 }
 /** @deprecated use {@link #setPrior(double...)} instead */
 @Deprecated
 public void setInput(@Nullable double... value) {
   setPrior(value);
 }