package hex;
import org.junit.BeforeClass;
import org.junit.Test;
import water.DKV;
import water.TestUtil;
import water.fvec.Frame;
import water.util.Log;
import water.util.MathUtils;
import water.util.PrettyPrint;
public class DCTTest extends TestUtil {
@BeforeClass() public static void setup() {
stall_till_cloudsize(5);
}
@Test
public void DCT_1D() {
Frame frame = null;
Frame frameDCT = null;
Frame frameRec = null;
try {
CreateFrame cf = new CreateFrame();
cf.rows = 100;
int height = 257;
int width = 1;
int depth = 1;
cf.cols = height*width*depth;
cf.categorical_fraction = 0.0;
cf.integer_fraction = 0;
cf.binary_fraction = 0;
cf.missing_fraction = 0;
cf.factors = 0;
cf.seed = 1234;
frame = cf.execImpl().get();
long now = System.currentTimeMillis();
frameDCT = MathUtils.DCT.transform1D(frame, height, false);
Log.info("Computed 1D DCT of " + cf.rows + " rows of size " + cf.cols + " in" + PrettyPrint.msecs(System.currentTimeMillis() - now, true));
now = System.currentTimeMillis();
frameRec = MathUtils.DCT.transform1D(frameDCT, height, true);
Log.info("Computed inverse 1D DCT of " + cf.rows + " rows of size " + cf.cols + " in" + PrettyPrint.msecs(System.currentTimeMillis() - now, true));
for (int i=0; i<frame.vecs().length; ++i)
TestUtil.assertVecEquals(frame.vecs()[i], frameRec.vecs()[i], 1e-5);
Log.info("Identity test passed: DCT^-1(DCT(frame)) == frame");
} finally {
if (frame!=null) frame.delete();
if (frameDCT!=null) frameDCT.delete();
if (frameRec!=null) frameRec.delete();
}
}
@Test
public void DCT_2D() {
Frame frame = null;
Frame frameDCT = null;
Frame frameRec = null;
try {
CreateFrame cf = new CreateFrame();
cf.rows = 100;
int height = 35;
int width = 17;
int depth = 1;
cf.cols = height*width*depth;
cf.categorical_fraction = 0.0;
cf.integer_fraction = 0;
cf.binary_fraction = 0;
cf.missing_fraction = 0;
cf.factors = 0;
cf.seed = 1234;
frame = cf.execImpl().get();
long now = System.currentTimeMillis();
frameDCT = MathUtils.DCT.transform2D(frame, height, width, false);
Log.info("Computed 2D DCT of " + cf.rows + " rows of size " + cf.cols + " in" + PrettyPrint.msecs(System.currentTimeMillis() - now, true));
now = System.currentTimeMillis();
frameRec = MathUtils.DCT.transform2D(frameDCT, height, width, true);
Log.info("Computed inverse 2D DCT of " + cf.rows + " rows of size " + cf.cols + " in" + PrettyPrint.msecs(System.currentTimeMillis() - now, true));
for (int i=0; i<frame.vecs().length; ++i)
TestUtil.assertVecEquals(frame.vecs()[i], frameRec.vecs()[i], 1e-5);
Log.info("Identity test passed: DCT^-1(DCT(frame)) == frame");
} finally {
if (frame!=null) frame.delete();
if (frameDCT!=null) frameDCT.delete();
if (frameRec!=null) frameRec.delete();
}
}
@Test
public void DCT_3D() {
Frame frame = null;
Frame frameDCT = null;
Frame frameRec = null;
try {
CreateFrame cf = new CreateFrame();
cf.rows = 100;
int height = 17;
int width = 7;
int depth = 9;
cf.cols = height*width*depth;
cf.categorical_fraction = 0.0;
cf.integer_fraction = 0;
cf.binary_fraction = 0;
cf.missing_fraction = 0;
cf.factors = 0;
cf.seed = 1234;
frame = cf.execImpl().get();
long now = System.currentTimeMillis();
frameDCT = MathUtils.DCT.transform3D(frame, height, width, depth, false);
Log.info("Computed 3D DCT of " + cf.rows + " rows of size " + cf.cols + " in" + PrettyPrint.msecs(System.currentTimeMillis() - now, true));
now = System.currentTimeMillis();
frameRec = MathUtils.DCT.transform3D(frameDCT, height, width, depth, true);
Log.info("Computed inverse 3D DCT of " + cf.rows + " rows of size " + cf.cols + " in" + PrettyPrint.msecs(System.currentTimeMillis() - now, true));
for (int i=0; i<frame.vecs().length; ++i)
TestUtil.assertVecEquals(frame.vecs()[i], frameRec.vecs()[i], 1e-5);
Log.info("Identity test passed: DCT^-1(DCT(frame)) == frame");
} finally {
if (frame!=null) frame.delete();
if (frameDCT!=null) frameDCT.delete();
if (frameRec!=null) frameRec.delete();
}
}
}