Skip to content

Commit

Permalink
implemented fix for ambiguous Method Call exception (jtablesaw#877)
Browse files Browse the repository at this point in the history
  • Loading branch information
lwhite1 authored Jan 26, 2021
1 parent 6396625 commit 95b4e9f
Show file tree
Hide file tree
Showing 16 changed files with 233 additions and 86 deletions.
27 changes: 20 additions & 7 deletions core/src/main/java/tech/tablesaw/api/DoubleColumn.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package tech.tablesaw.api;

import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.doubles.DoubleArrayList;
import it.unimi.dsi.fastutil.doubles.DoubleArrays;
import it.unimi.dsi.fastutil.doubles.DoubleComparators;
import it.unimi.dsi.fastutil.doubles.DoubleIterator;
import it.unimi.dsi.fastutil.doubles.DoubleListIterator;
import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet;
import it.unimi.dsi.fastutil.doubles.DoubleSet;
import it.unimi.dsi.fastutil.doubles.*;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.util.Collection;
Expand All @@ -23,6 +17,7 @@
import tech.tablesaw.columns.numbers.NumberColumnFormatter;
import tech.tablesaw.columns.numbers.NumberFillers;
import tech.tablesaw.columns.numbers.fillers.DoubleRangeIterable;
import tech.tablesaw.selection.BitmapBackedSelection;
import tech.tablesaw.selection.Selection;

public class DoubleColumn extends NumberColumn<DoubleColumn, Double>
Expand Down Expand Up @@ -153,6 +148,24 @@ public DoubleColumn where(Selection selection) {
return (DoubleColumn) super.where(selection);
}

public Selection isNotIn(final double... doubles) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(doubles));
return results;
}

public Selection isIn(final double... doubles) {
final Selection results = new BitmapBackedSelection();
final DoubleRBTreeSet doubleSet = new DoubleRBTreeSet(doubles);
for (int i = 0; i < size(); i++) {
if (doubleSet.contains(getDouble(i))) {
results.add(i);
}
}
return results;
}

@Override
public DoubleColumn subset(int[] rows) {
final DoubleColumn c = this.emptyCopy();
Expand Down
27 changes: 21 additions & 6 deletions core/src/main/java/tech/tablesaw/api/FloatColumn.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package tech.tablesaw.api;

import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.floats.FloatArrayList;
import it.unimi.dsi.fastutil.floats.FloatArrays;
import it.unimi.dsi.fastutil.floats.FloatComparators;
import it.unimi.dsi.fastutil.floats.FloatListIterator;
import it.unimi.dsi.fastutil.floats.FloatOpenHashSet;
import it.unimi.dsi.fastutil.floats.FloatSet;
import it.unimi.dsi.fastutil.floats.*;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.stream.Stream;
import tech.tablesaw.columns.AbstractColumnParser;
import tech.tablesaw.columns.Column;
import tech.tablesaw.columns.numbers.FloatColumnType;
import tech.tablesaw.columns.numbers.NumberColumnFormatter;
import tech.tablesaw.selection.BitmapBackedSelection;
import tech.tablesaw.selection.Selection;

public class FloatColumn extends NumberColumn<FloatColumn, Float> {

Expand Down Expand Up @@ -93,6 +90,24 @@ public FloatColumn subset(int[] rows) {
return c;
}

public Selection isNotIn(final float... numbers) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(numbers));
return results;
}

public Selection isIn(final float... numbers) {
final Selection results = new BitmapBackedSelection();
final FloatRBTreeSet doubleSet = new FloatRBTreeSet(numbers);
for (int i = 0; i < size(); i++) {
if (doubleSet.contains(getFloat(i))) {
results.add(i);
}
}
return results;
}

@Override
public int size() {
return data.size();
Expand Down
28 changes: 21 additions & 7 deletions core/src/main/java/tech/tablesaw/api/IntColumn.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package tech.tablesaw.api;

import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntArrays;
import it.unimi.dsi.fastutil.ints.IntComparators;
import it.unimi.dsi.fastutil.ints.IntIterator;
import it.unimi.dsi.fastutil.ints.IntListIterator;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import it.unimi.dsi.fastutil.ints.*;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.stream.IntStream;
Expand All @@ -16,6 +10,8 @@
import tech.tablesaw.columns.numbers.DoubleColumnType;
import tech.tablesaw.columns.numbers.IntColumnType;
import tech.tablesaw.columns.numbers.NumberColumnFormatter;
import tech.tablesaw.selection.BitmapBackedSelection;
import tech.tablesaw.selection.Selection;

public class IntColumn extends NumberColumn<IntColumn, Integer>
implements CategoricalColumn<Integer> {
Expand Down Expand Up @@ -432,6 +428,24 @@ public FloatColumn asFloatColumn() {
return result;
}

public Selection isIn(final int... numbers) {
final Selection results = new BitmapBackedSelection();
final IntRBTreeSet intSet = new IntRBTreeSet(numbers);
for (int i = 0; i < size(); i++) {
if (intSet.contains(getInt(i))) {
results.add(i);
}
}
return results;
}

public Selection isNotIn(final int... numbers) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(numbers));
return results;
}

/**
* Returns a new DoubleColumn containing a value for each value in this column, truncating if
* necessary.
Expand Down
28 changes: 21 additions & 7 deletions core/src/main/java/tech/tablesaw/api/LongColumn.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package tech.tablesaw.api;

import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.longs.LongArrays;
import it.unimi.dsi.fastutil.longs.LongComparators;
import it.unimi.dsi.fastutil.longs.LongIterator;
import it.unimi.dsi.fastutil.longs.LongListIterator;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
import it.unimi.dsi.fastutil.longs.*;
import java.nio.ByteBuffer;
import java.time.Instant;
import java.time.ZoneOffset;
Expand All @@ -18,6 +12,8 @@
import tech.tablesaw.columns.numbers.DoubleColumnType;
import tech.tablesaw.columns.numbers.LongColumnType;
import tech.tablesaw.columns.numbers.NumberColumnFormatter;
import tech.tablesaw.selection.BitmapBackedSelection;
import tech.tablesaw.selection.Selection;

public class LongColumn extends NumberColumn<LongColumn, Long> implements CategoricalColumn<Long> {

Expand Down Expand Up @@ -114,6 +110,24 @@ public LongColumn subset(final int[] rows) {
return c;
}

public Selection isIn(final long... numbers) {
final Selection results = new BitmapBackedSelection();
final LongRBTreeSet intSet = new LongRBTreeSet(numbers);
for (int i = 0; i < size(); i++) {
if (intSet.contains(getLong(i))) {
results.add(i);
}
}
return results;
}

public Selection isNotIn(final long... numbers) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(numbers));
return results;
}

@Override
public LongColumn unique() {
final LongSet values = new LongOpenHashSet();
Expand Down
23 changes: 4 additions & 19 deletions core/src/main/java/tech/tablesaw/api/NumericColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
import static tech.tablesaw.columns.numbers.NumberPredicates.isNotMissing;

import it.unimi.dsi.fastutil.doubles.DoubleComparator;
import it.unimi.dsi.fastutil.doubles.DoubleRBTreeSet;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
import java.util.function.BiPredicate;
import java.util.function.DoubleBinaryOperator;
Expand Down Expand Up @@ -67,38 +66,24 @@ default Selection eval(final BiPredicate<Number, Number> predicate, final Number
}

@Override
default Selection isIn(final Number... numbers) {
return isIn(Arrays.stream(numbers).mapToDouble(Number::doubleValue).toArray());
}

@Override
default Selection isIn(final double... doubles) {
default Selection isIn(Collection<Number> numbers) {
final Selection results = new BitmapBackedSelection();
final DoubleRBTreeSet doubleSet = new DoubleRBTreeSet(doubles);
for (int i = 0; i < size(); i++) {
if (doubleSet.contains(getDouble(i))) {
if (numbers.contains(getDouble(i))) {
results.add(i);
}
}
return results;
}

@Override
default Selection isNotIn(final Number... numbers) {
default Selection isNotIn(Collection<Number> numbers) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(numbers));
return results;
}

@Override
default Selection isNotIn(final double... doubles) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(doubles));
return results;
}

@Override
default Selection isMissing() {
return eval(isMissing);
Expand Down
21 changes: 21 additions & 0 deletions core/src/main/java/tech/tablesaw/api/ShortColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.google.common.base.Preconditions;
import com.google.common.primitives.Shorts;
import it.unimi.dsi.fastutil.ints.IntRBTreeSet;
import it.unimi.dsi.fastutil.shorts.ShortArrayList;
import it.unimi.dsi.fastutil.shorts.ShortArrays;
import it.unimi.dsi.fastutil.shorts.ShortComparators;
Expand All @@ -17,6 +18,8 @@
import tech.tablesaw.columns.numbers.DoubleColumnType;
import tech.tablesaw.columns.numbers.NumberColumnFormatter;
import tech.tablesaw.columns.numbers.ShortColumnType;
import tech.tablesaw.selection.BitmapBackedSelection;
import tech.tablesaw.selection.Selection;

public class ShortColumn extends NumberColumn<ShortColumn, Short>
implements CategoricalColumn<Short> {
Expand Down Expand Up @@ -88,6 +91,24 @@ public ShortColumn subset(final int[] rows) {
return c;
}

public Selection isIn(final int... numbers) {
final Selection results = new BitmapBackedSelection();
final IntRBTreeSet intSet = new IntRBTreeSet(numbers);
for (int i = 0; i < size(); i++) {
if (intSet.contains(getInt(i))) {
results.add(i);
}
}
return results;
}

public Selection isNotIn(final int... numbers) {
final Selection results = new BitmapBackedSelection();
results.addRange(0, size());
results.andNot(isIn(numbers));
return results;
}

@Override
public int size() {
return data.size();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static tech.tablesaw.columns.numbers.NumberPredicates.isPositive;
import static tech.tablesaw.columns.numbers.NumberPredicates.isZero;

import java.util.Collection;
import java.util.function.BiPredicate;
import java.util.function.DoublePredicate;
import tech.tablesaw.api.NumericColumn;
Expand Down Expand Up @@ -64,13 +65,9 @@ default Selection isLessThanOrEqualTo(double f) {
return eval(NumberPredicates.isLessThanOrEqualTo(f));
}

Selection isIn(Number... numbers);
Selection isIn(Collection<Number> numbers);

Selection isIn(double... doubles);

Selection isNotIn(Number... doubles);

Selection isNotIn(double... doubles);
Selection isNotIn(Collection<Number> numbers);

default Selection isZero() {
return eval(isZero);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tech.tablesaw.filtering;

import com.google.common.annotations.Beta;
import java.util.Collection;
import java.util.function.Function;
import tech.tablesaw.api.NumericColumn;
import tech.tablesaw.api.Table;
Expand Down Expand Up @@ -50,25 +51,15 @@ public Function<Table, Selection> isLessThanOrEqualTo(double f) {
}

@Override
public Function<Table, Selection> isIn(Number... numbers) {
public Function<Table, Selection> isIn(Collection<Number> numbers) {
return table -> table.numberColumn(name()).isIn(numbers);
}

@Override
public Function<Table, Selection> isIn(double... doubles) {
return table -> table.numberColumn(name()).isIn(doubles);
}

@Override
public Function<Table, Selection> isNotIn(Number... numbers) {
public Function<Table, Selection> isNotIn(Collection<Number> numbers) {
return table -> table.numberColumn(name()).isNotIn(numbers);
}

@Override
public Function<Table, Selection> isNotIn(double... doubles) {
return table -> table.numberColumn(name()).isNotIn(doubles);
}

@Override
public Function<Table, Selection> isZero() {
return table -> table.numberColumn(name()).isZero();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tech.tablesaw.filtering;

import com.google.common.annotations.Beta;
import java.util.Collection;
import tech.tablesaw.api.NumericColumn;

@Beta
Expand All @@ -20,13 +21,9 @@ public interface NumberFilterSpec<T> extends FilterSpec<T> {

T isLessThanOrEqualTo(double f);

T isIn(Number... numbers);
T isIn(Collection<Number> numbers);

T isIn(double... doubles);

T isNotIn(Number... numbers);

T isNotIn(double... doubles);
T isNotIn(Collection<Number> numbers);

T isZero();

Expand Down
Loading

0 comments on commit 95b4e9f

Please sign in to comment.