--- a +++ b/tests/edgepy/test_aveLogCPM.py @@ -0,0 +1,68 @@ +import unittest + +import numpy as np + +from inmoose.edgepy import DGEList, aveLogCPM +from inmoose.utils import rnbinom + + +class test_aveLogCPM(unittest.TestCase): + def setUp(self): + y = np.array(rnbinom(80, size=5, mu=20, seed=42)).reshape((20, 4)) + y = np.vstack(([0, 0, 0, 0], [0, 0, 2, 2], y)) + group = np.array([1, 1, 2, 2]) + self.d = DGEList(y, group=group) + + def test_aveLogCPM(self): + ref = np.array( + [ + 12.12019, + 12.70436, + 15.55656, + 15.07438, + 15.53215, + 15.56454, + 15.77740, + 15.83572, + 15.29030, + 15.58778, + 15.77746, + 15.38536, + 15.78073, + 15.76788, + 15.74191, + 16.12822, + 15.31202, + 15.85351, + 16.13554, + 16.30177, + 15.82458, + 15.52800, + ] + ) + self.assertTrue(np.allclose(self.d.aveLogCPM(), ref, atol=1e-5, rtol=0)) + + self.assertTrue( + np.allclose(self.d.aveLogCPM(dispersion=np.nan), ref, atol=1e-5, rtol=0) + ) + dispersion = [0.05 for i in range(22)] + dispersion[0] = np.nan + self.assertTrue( + np.allclose(self.d.aveLogCPM(dispersion=dispersion), ref, atol=1e-5, rtol=0) + ) + + self.d.samples.lib_size = None + self.assertTrue(np.allclose(self.d.aveLogCPM(), ref, atol=1e-5, rtol=0)) + + # Check special cases + self.assertEqual(aveLogCPM(np.full((0, 0), 42)), 0) + self.assertTrue( + np.allclose( + aveLogCPM(np.zeros(shape=(3, 2))), + [18.34661, 18.34661, 18.34661], + atol=1e-5, + rtol=0, + ) + ) + with self.assertRaisesRegex(ValueError, expected_regex="y should be a matrix"): + aveLogCPM(42)