cdm/src/main/java/ucar/nc2/ft2/coverage/CoordAxisHelper.java
private Optional<CoverageCoordAxisBuilder> subsetValues(double minValue, double maxValue, int stride) {
    if (axis.getSpacing() == CoverageCoordAxis.Spacing.discontiguousInterval)
      return subsetValuesDiscontinuous(minValue, maxValue, stride);

    double lower = axis.isAscending() ? Math.min(minValue, maxValue) : Math.max(minValue, maxValue);
    double upper = axis.isAscending() ? Math.max(minValue, maxValue) : Math.min(minValue, maxValue);

    int minIndex = findCoordElement(lower, false);
    int maxIndex = findCoordElement(upper, false);

    if (minIndex >= axis.getNcoords())
      return Optional.empty(String.format("no points in subset: lower %f > end %f", lower, axis.getEndValue()));
    if (maxIndex < 0)
      return Optional.empty(String.format("no points in subset: upper %f < start %f", upper, axis.getStartValue()));

    if (minIndex < 0)
      minIndex = 0;
    if (maxIndex >= axis.getNcoords())
      maxIndex = axis.getNcoords() - 1;

    int count = maxIndex - minIndex + 1;
    if (count <= 0)
      throw new IllegalArgumentException("no points in subset");

    try {
      return Optional.of(subsetByIndex(new Range(minIndex, maxIndex, stride)));
    } catch (InvalidRangeException e) {
      return Optional.empty(e.getMessage());
    }
  }
private Optional<CoverageCoordAxisBuilder> subsetValues(double minValue, double maxValue, int stride) {
    if (axis.getSpacing() == CoverageCoordAxis.Spacing.discontiguousInterval)
      return subsetValuesDiscontinuous(minValue, maxValue, stride);

    double lower = axis.isAscending() ? Math.min(minValue, maxValue) : Math.max(minValue, maxValue);
    double upper = axis.isAscending() ? Math.max(minValue, maxValue) : Math.min(minValue, maxValue);

    int minIndex = findCoordElement(lower, false);
    int maxIndex = findCoordElement(upper, false);

    if (minIndex >= axis.getNcoords())
      return Optional.empty(String.format("no points in subset: lower %f > end %f", lower, axis.getEndValue()));
    if (maxIndex < 0)
      return Optional.empty(String.format("no points in subset: upper %f < start %f", upper, axis.getStartValue()));

    if (minIndex < 0)
      minIndex = 0;
    if (maxIndex >= axis.getNcoords())
      maxIndex = axis.getNcoords() - 1;

    int count = maxIndex - minIndex + 1;
    if (count <= 0)
      throw new IllegalArgumentException("no points in subset");

    try {
      return Optional.of(subsetByIndex(new Range(minIndex, maxIndex, stride)));
    } catch (InvalidRangeException e) {
      return Optional.empty(e.getMessage());
    }
  }
private Optional < CoverageCoordAxisBuilder > subsetValues ( double minValue , double maxValue , int stride ) { if ( axis . getSpacing ( ) == CoverageCoordAxis . Spacing . discontiguousInterval ) return subsetValuesDiscontinuous ( minValue , maxValue , stride ) ; double lower = axis . isAscending ( ) ? Math . min ( minValue , maxValue ) : Math . max ( minValue , maxValue ) ; double upper = axis . isAscending ( ) ? Math . max ( minValue , maxValue ) : Math . min ( minValue , maxValue ) ; int minIndex = findCoordElement ( lower , false ) ; int maxIndex = findCoordElement ( upper , false ) ; if ( minIndex >= axis . getNcoords ( ) ) return Optional . empty ( String . format ( "no points in subset: lower %f > end %f" , lower , axis . getEndValue ( ) ) ) ; if ( maxIndex < 0 ) return Optional . empty ( String . format ( "no points in subset: upper %f < start %f" , upper , axis . getStartValue ( ) ) ) ; if ( minIndex < 0 ) minIndex = 0 ; if ( maxIndex >= axis . getNcoords ( ) ) maxIndex = axis . getNcoords ( ) - 1 ; int count = maxIndex - minIndex + 1 ; if ( count <= 0 ) throw new IllegalArgumentException ( "no points in subset" ) ; try { return Optional . of ( subsetByIndex ( new Range ( minIndex , maxIndex , stride ) ) ) ; } catch ( InvalidRangeException e ) { return Optional . empty ( e . getMessage ( ) ) ; } }
look must handle discon interval different
look must handle discon interval different