-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
263 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,4 +7,4 @@ cd build | |
cmake .. | ||
make | ||
|
||
ctest | ||
ctest -V |
Submodule finalfusion-cxx
updated
3 files
+1 −1 | CMakeLists.txt | |
+1 −1 | src/Embeddings.cc | |
+2 −2 | tests/embedding_lookup.cc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,14 @@ | ||
import os | ||
import platform | ||
|
||
import pytest | ||
import tensorflow as tf | ||
|
||
tf.enable_eager_execution() | ||
|
||
|
||
@pytest.fixture | ||
def ff_lib(tests_root): | ||
def ff_lib(): | ||
if platform.system() == "Darwin": | ||
LIB_SUFFIX = ".dylib" | ||
else: | ||
LIB_SUFFIX = ".so" | ||
|
||
yield tf.load_op_library("./finalfusion-tf/libfinalfusion_tf" + LIB_SUFFIX) | ||
|
||
|
||
@pytest.fixture | ||
def tests_root(): | ||
yield os.path.dirname(__file__) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
import numpy as np | ||
import pytest | ||
import tensorflow as tf | ||
|
||
tf.enable_eager_execution() | ||
|
||
|
||
def test_init_and_close(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", mmap=False) | ||
ff_lib.close_ff_embeddings(embeddings) | ||
|
||
|
||
def test_init_and_close_mmap(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", mmap=True) | ||
ff_lib.close_ff_embeddings(embeddings) | ||
|
||
|
||
def test_eager_lookup(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", mmap=False) | ||
|
||
ber = ff_lib.ff_lookup(embeddings, "Berlin", mask_empty_string=False, mask_failed_lookup=False) | ||
ber_list = ff_lib.ff_lookup(embeddings, ["Berlin"], mask_empty_string=False, mask_failed_lookup=False) | ||
ber_tensor = ff_lib.ff_lookup(embeddings, [["Berlin"]], mask_empty_string=False, mask_failed_lookup=False) | ||
|
||
assert ber.shape == (100,) | ||
assert ber_list.shape == (1, 100) | ||
assert ber_tensor.shape == (1, 1, 100) | ||
|
||
ff_lib.close_ff_embeddings(embeddings) | ||
|
||
|
||
def test_eager_lookup_masked(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", False) | ||
tuebingen_masked = ff_lib.ff_lookup(embeddings, "Tübingen", mask_empty_string=False, mask_failed_lookup=True, | ||
embedding_len=100) | ||
empty_masked = ff_lib.ff_lookup(embeddings, "", mask_empty_string=True, mask_failed_lookup=False, embedding_len=100) | ||
empty_masked_through_fail = ff_lib.ff_lookup(embeddings, "", mask_empty_string=False, mask_failed_lookup=True, | ||
embedding_len=100) | ||
assert np.allclose(tuebingen_masked, 0.) | ||
assert np.allclose(empty_masked, 0.) | ||
assert np.allclose(empty_masked_through_fail, 0.) | ||
ff_lib.close_ff_embeddings(embeddings) | ||
|
||
|
||
def test_eager_errors(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
with pytest.raises(tf.errors.UnknownError): | ||
ff_lib.initialize_ff_embeddings(embeddings, "foo.fifu", False) | ||
|
||
ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", False) | ||
|
||
with pytest.raises(tf.errors.AlreadyExistsError): | ||
ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", False) | ||
|
||
with pytest.raises(tf.errors.InvalidArgumentError): | ||
ff_lib.ff_lookup(embeddings, "Tübingen", mask_empty_string=False, mask_failed_lookup=False, embedding_len=100) | ||
|
||
# shape mismatch, 10 vs. actual 100 | ||
with pytest.raises(tf.errors.InvalidArgumentError): | ||
ff_lib.ff_lookup(embeddings, "Berlin", mask_empty_string=False, mask_failed_lookup=False, embedding_len=10) | ||
|
||
with pytest.raises(tf.errors.InvalidArgumentError): | ||
ff_lib.ff_lookup(embeddings, "", mask_empty_string=False, mask_failed_lookup=False, embedding_len=100) | ||
|
||
ff_lib.close_ff_embeddings(embeddings) | ||
with pytest.raises(tf.errors.NotFoundError): | ||
ff_lib.close_ff_embeddings(embeddings) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
import numpy as np | ||
import pytest | ||
import tensorflow as tf | ||
|
||
|
||
def test_graph_lookup(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
init = ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", False) | ||
|
||
ber = ff_lib.ff_lookup(embeddings, "Berlin", mask_empty_string=False, mask_failed_lookup=False, embedding_len=100) | ||
assert ber.shape == (100,) | ||
|
||
ber_list = ff_lib.ff_lookup(embeddings, ["Berlin"], mask_empty_string=False, mask_failed_lookup=False, | ||
embedding_len=100) | ||
assert ber_list.shape == (1, 100) | ||
|
||
ber_tensor = ff_lib.ff_lookup(embeddings, [["Berlin"]], mask_empty_string=False, mask_failed_lookup=False, | ||
embedding_len=100) | ||
assert ber_tensor.shape == (1, 1, 100) | ||
|
||
ber_no_shape = ff_lib.ff_lookup(embeddings, "Berlin", mask_empty_string=False, mask_failed_lookup=False) | ||
assert ber_no_shape.shape.rank == 1 | ||
assert ber_no_shape.shape[0].value is None | ||
|
||
ber_list_no_shape = ff_lib.ff_lookup(embeddings, ["Berlin"], mask_empty_string=False, mask_failed_lookup=False) | ||
assert ber_list_no_shape.shape.rank == 2 | ||
assert ber_list_no_shape.shape[0].value == tf.Dimension(1) | ||
assert ber_list_no_shape.shape[1].value is None | ||
|
||
with tf.Session() as sess: | ||
sess.run([init]) | ||
res = sess.run([ber, ber_list, ber_tensor]) | ||
assert res[0].shape == (100,) | ||
assert res[1].shape == (1, 100) | ||
assert res[2].shape == (1, 1, 100) | ||
sess.run([ff_lib.close_ff_embeddings(embeddings)]) | ||
|
||
|
||
def test_graph_lookup_masked(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
init = ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", True) | ||
tuebingen_masked = ff_lib.ff_lookup(embeddings, "Tübingen", mask_empty_string=False, mask_failed_lookup=True, | ||
embedding_len=100) | ||
empty_masked = ff_lib.ff_lookup(embeddings, "", mask_empty_string=True, mask_failed_lookup=False, embedding_len=100) | ||
empty_masked_through_fail = ff_lib.ff_lookup(embeddings, "", mask_empty_string=False, mask_failed_lookup=True, | ||
embedding_len=100) | ||
with tf.Session() as sess: | ||
sess.run([init]) | ||
res = sess.run([tuebingen_masked, empty_masked, empty_masked_through_fail]) | ||
assert np.allclose(res, 0.) | ||
|
||
|
||
def test_graph_errors(ff_lib): | ||
embeddings = ff_lib.ff_embeddings() | ||
tuebingen_unmasked = ff_lib.ff_lookup(embeddings, "Tübingen", mask_empty_string=False, mask_failed_lookup=False, | ||
embedding_len=100) | ||
ber_bad_shape = ff_lib.ff_lookup(embeddings, "Berlin", mask_empty_string=False, mask_failed_lookup=False, | ||
embedding_len=10) | ||
assert ber_bad_shape.shape == (10,) | ||
empty_unmasked = ff_lib.ff_lookup(embeddings, "", mask_empty_string=False, mask_failed_lookup=False, | ||
embedding_len=100) | ||
|
||
with tf.Session() as sess: | ||
with pytest.raises(tf.errors.UnknownError): | ||
sess.run([ff_lib.initialize_ff_embeddings(embeddings, "foo.fifu", False)]) | ||
|
||
sess.run([ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", False)]) | ||
|
||
with pytest.raises(tf.errors.AlreadyExistsError): | ||
sess.run([ff_lib.initialize_ff_embeddings(embeddings, "tests/data/test.fifu", False)]) | ||
with pytest.raises(tf.errors.InvalidArgumentError): | ||
sess.run([tuebingen_unmasked]) | ||
with pytest.raises(tf.errors.InvalidArgumentError): | ||
sess.run([empty_unmasked]) | ||
with pytest.raises(tf.errors.InvalidArgumentError): | ||
sess.run([ber_bad_shape]) | ||
sess.run([ff_lib.close_ff_embeddings(embeddings)]) | ||
with pytest.raises(tf.errors.NotFoundError): | ||
sess.run([ff_lib.close_ff_embeddings(embeddings)]) |
This file was deleted.
Oops, something went wrong.