@Test public void testInverseIdentity() { double tol = 0.00001; Map<Key, Value> input = new TreeMap<>(TestUtil.COMPARE_KEY_TO_COLQ); input.put(new Key("1", "", "1"), new Value("1".getBytes())); // input.put(new Key("1", "", "2"), new Value("1".getBytes())); // input.put(new Key("2", "", "1"), new Value("1".getBytes())); input.put(new Key("2", "", "2"), new Value("1".getBytes())); RealMatrix matrix = MemMatrixUtil.buildMatrix(input.entrySet().iterator(), 2); Assert.assertEquals(2, matrix.getRowDimension()); Assert.assertEquals(2, matrix.getColumnDimension()); Assert.assertEquals(1, matrix.getEntry(0, 0), tol); Assert.assertEquals(0, matrix.getEntry(0, 1), tol); Assert.assertEquals(0, matrix.getEntry(1, 0), tol); Assert.assertEquals(1, matrix.getEntry(1, 1), tol); matrix = MemMatrixUtil.doInverse(matrix, -1); Assert.assertEquals(2, matrix.getRowDimension()); Assert.assertEquals(2, matrix.getColumnDimension()); Assert.assertEquals(1, matrix.getEntry(0, 0), tol); Assert.assertEquals(0, matrix.getEntry(0, 1), tol); Assert.assertEquals(0, matrix.getEntry(1, 0), tol); Assert.assertEquals(1, matrix.getEntry(1, 1), tol); SortedMap<Key, Value> back = MemMatrixUtil.matrixToMap(new TreeMap<Key, Value>(TestUtil.COMPARE_KEY_TO_COLQ), matrix); TestUtil.assertEqualDoubleMap(input, back); // Assert.assertEquals(1, Double.parseDouble(new String(back.get(new Key("1", "", // "1")).get())), tol); // Assert.assertEquals(1, Double.parseDouble(new String(back.get(new Key("2", "", // "2")).get())), tol); }
@Test public void testInverse2x2() { double tol = 0.001; Map<Key, Value> input = new TreeMap<>(TestUtil.COMPARE_KEY_TO_COLQ); input.put(new Key("1", "", "1"), new Value("4".getBytes())); input.put(new Key("1", "", "2"), new Value("3".getBytes())); input.put(new Key("2", "", "1"), new Value("1".getBytes())); input.put(new Key("2", "", "2"), new Value("1".getBytes())); Map<Key, Value> expect = new TreeMap<>(TestUtil.COMPARE_KEY_TO_COLQ); expect.put(new Key("1", "", "1"), new Value("1 ".getBytes())); expect.put(new Key("1", "", "2"), new Value("-3".getBytes())); expect.put(new Key("2", "", "1"), new Value("-1".getBytes())); expect.put(new Key("2", "", "2"), new Value("4 ".getBytes())); RealMatrix matrix = MemMatrixUtil.buildMatrix(input.entrySet().iterator(), 2); Assert.assertEquals(2, matrix.getRowDimension()); Assert.assertEquals(2, matrix.getColumnDimension()); Assert.assertEquals(4, matrix.getEntry(0, 0), tol); Assert.assertEquals(3, matrix.getEntry(0, 1), tol); Assert.assertEquals(1, matrix.getEntry(1, 0), tol); Assert.assertEquals(1, matrix.getEntry(1, 1), tol); matrix = MemMatrixUtil.doInverse(matrix, -1); Assert.assertEquals(2, matrix.getRowDimension()); Assert.assertEquals(2, matrix.getColumnDimension()); Assert.assertEquals(1, matrix.getEntry(0, 0), tol); Assert.assertEquals(-3, matrix.getEntry(0, 1), tol); Assert.assertEquals(-1, matrix.getEntry(1, 0), tol); Assert.assertEquals(4, matrix.getEntry(1, 1), tol); SortedMap<Key, Value> back = MemMatrixUtil.matrixToMap(new TreeMap<Key, Value>(TestUtil.COMPARE_KEY_TO_COLQ), matrix); TestUtil.assertEqualDoubleMap(expect, back); }
@Override public void seek(Range range, Collection<ByteSequence> columnFamilies, boolean inclusive) throws IOException { if (!range.isInfiniteStartKey() || !range.isInfiniteStopKey()) log.warn("Range is not infinite: " + range); source.seek(range, columnFamilies, inclusive); IteratorAdapter ia = new IteratorAdapter(source); SortedMap<Key, Value> map = MemMatrixUtil.matrixToMap( new TreeMap<Key, Value>(), MemMatrixUtil.doInverse(MemMatrixUtil.buildMatrix(ia, matrixSize), numIterations)); // DebugUtil.printMapFull(map.entrySet().iterator()); mapIterator = new MapIterator(map); mapIterator.init(null, null, null); mapIterator.seek(range, columnFamilies, inclusive); }