code: function periodCompare() {
    var args = mlutil.asArray.apply(null, arguments);
    var argLen = args.length;
  
    var compareAxis1    = null;
    var compareOperator = null;
    var compareAxis2    = null;
    var temporalOptions = null;
    var arg = null;
    for (var i=0; i < argLen; i++) {
      arg = args[i];
      if (typeof arg === 'string' || arg instanceof String) {
        if (compareAxis1 === null) {
          compareAxis1 = arg;
          continue;
        }
        if (compareOperator === null) {
          compareOperator = arg;
          continue;
        }
        if (compareAxis2 === null) {
          compareAxis2 = arg;
          continue;
        }
      }
      if (temporalOptions === null && arg instanceof TemporalOptionsDef) {
        temporalOptions = arg['temporal-option'];
        continue;
      }
      throw new Error('unknown period compare argument: '+mlutil.identify(arg, true));
    }
  
    return new PeriodCompareDef(new PeriodCompareQueryDef(
        compareAxis1, compareOperator, compareAxis2, temporalOptions
    ));
  }
docs: Builds a query matching temporal documents based on the relationship
  between the valid period and the system period.  For instance, this
  query can find cases where what was believed to be true (the valid time)
  was recorded (the system time) only afterward (the valid axis is before
  the system axis).
  @method
  @since 1.0
  @memberof queryBuilder#
  @param {string} axis1 - the configured name of the valid or system axis
  @param {string} operator - the name of an Allen interval operator or
  ISO SQL 2011 period operator
  @param {string} axis2 - the configured name of the valid or system axis, which
  must be different from axis1
  @param {queryBuilder.TemporalOptionsParam} [temporalOptions] - a list
  of options returned by {@link queryBuilder#temporalOptions} to modify
  the temporal query
  @returns {queryBuilder.Query} a composable query