From c1165431566bb7f79345145fb7eafe1d2731f968 Mon Sep 17 00:00:00 2001 From: Neil Shephard Date: Thu, 1 Jun 2023 14:51:21 +0100 Subject: [PATCH 1/5] Adds unit-tests for dnatracing methods Also removes unused functions from dnatracing --- tests/tracing/test_dnatracing_single_grain.py | 270 ++++++++++++++++++ topostats/tracing/dnatracing.py | 28 -- 2 files changed, 270 insertions(+), 28 deletions(-) create mode 100644 tests/tracing/test_dnatracing_single_grain.py diff --git a/tests/tracing/test_dnatracing_single_grain.py b/tests/tracing/test_dnatracing_single_grain.py new file mode 100644 index 0000000000..0ce6cd6fee --- /dev/null +++ b/tests/tracing/test_dnatracing_single_grain.py @@ -0,0 +1,270 @@ +"""Tests for tracing single molecules""" +from pathlib import Path + +import numpy as np +import pytest +from pytest_lazyfixture import lazy_fixture + +from topostats.tracing.dnatracing import dnaTrace + +# This is required because of the inheritance used throughout +# pylint: disable=redefined-outer-name +BASE_DIR = Path.cwd() +RESOURCES = BASE_DIR / "tests" / "resources" +PIXEL_SIZE = 0.4940029296875 + +LINEAR_IMAGE = np.load(RESOURCES / "dnatracing_image_linear.npy") +LINEAR_MASK = np.load(RESOURCES / "dnatracing_mask_linear.npy") +CIRCULAR_IMAGE = np.load(RESOURCES / "dnatracing_image_circular.npy") +CIRCULAR_MASK = np.load(RESOURCES / "dnatracing_mask_circular.npy") +MIN_SKELETON_SIZE = 10 + + +@pytest.fixture +def dnatrace_linear() -> dnaTrace: + """dnaTrace object instantiated with a single linear grain.""" + dnatrace = dnaTrace( + full_image_data=LINEAR_IMAGE, + grains=LINEAR_MASK, + filename="linear", + pixel_size=PIXEL_SIZE, + min_skeleton_size=MIN_SKELETON_SIZE, + ) + return dnatrace + + +@pytest.fixture +def dnatrace_circular() -> dnaTrace: + """dnaTrace object instantiated with a single linear grain.""" + dnatrace = dnaTrace( + full_image_data=CIRCULAR_IMAGE, + grains=CIRCULAR_MASK, + filename="circular", + pixel_size=PIXEL_SIZE, + min_skeleton_size=MIN_SKELETON_SIZE, + ) + return dnatrace + + +@pytest.mark.parametrize( + "dnatrace, grain_number, shape, total_image", + [ + (lazy_fixture("dnatrace_linear"), 3, (109, 100), 2443), + (lazy_fixture("dnatrace_circular"), 9, (132, 118), 2722), + ], +) +def test_get_numpy_arrays(dnatrace: dnaTrace, grain_number: int, shape: tuple, total_image: float) -> None: + """Test of the get_numpy_arrays method and implicitly _get_grain_array method.""" + dnatrace.get_numpy_arrays() + assert isinstance(dnatrace.grains[grain_number], np.ndarray) + assert dnatrace.grains[grain_number].shape == shape + assert np.sum(dnatrace.grains[grain_number]) == total_image + + +@pytest.mark.parametrize( + "dnatrace, gauss_image_sum", + [ + (lazy_fixture("dnatrace_linear"), 5.448087311118036e-06), + (lazy_fixture("dnatrace_circular"), 6.035458663629233e-06), + ], +) +def test_gaussian_filter(dnatrace: dnaTrace, gauss_image_sum: float) -> None: + """Test of the method.""" + dnatrace.gaussian_filter() + assert dnatrace.gauss_image.sum() == gauss_image_sum + + +@pytest.mark.parametrize( + "dnatrace, grain_number, length, start, end", + [ + (lazy_fixture("dnatrace_linear"), 3, 120, np.asarray([13, 32]), np.asarray([91, 72])), + (lazy_fixture("dnatrace_circular"), 9, 150, np.asarray([49, 49]), np.asarray([103, 44])), + ], +) +def test_get_disordered_trace(dnatrace: dnaTrace, grain_number: int, length: int, start: tuple, end: tuple) -> None: + """Test of get_disordered_trace the method.""" + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + assert isinstance(dnatrace.disordered_trace[grain_number], np.ndarray) + assert len(dnatrace.disordered_trace[grain_number]) == length + np.testing.assert_array_equal(dnatrace.disordered_trace[grain_number][0,], start) + np.testing.assert_array_equal(dnatrace.disordered_trace[grain_number][-1,], end) + + +@pytest.mark.parametrize( + "dna_num, min_skeleton_size, disordered_trace, expected_len", + [ + ([1], 4, [["a", "b", "c"]], 0), + ([2], 4, [[1, 2, 3, 4]], 1), + ([3], 4, [[1, 2, 3, 4, 5]], 1), + ([4], 4, [[0]], 0), + ([5, 6], 4, [[0], [1, 2, 3, 4, 5]], 1), + ([7, 8, 9], 4, [[0], [1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], 2), + ], +) +def test_purge_obvious_crap( + dnatrace_linear: dnaTrace, dna_num: int, min_skeleton_size: int, disordered_trace: list, expected_len: int +) -> None: + """Test of the purge_obvious_crap method.""" + dnatrace_linear.min_skeleton_size = min_skeleton_size + for x, i in enumerate(dna_num): + dnatrace_linear.disordered_trace[i] = disordered_trace[x] + dnatrace_linear.purge_obvious_crap() + assert len(dnatrace_linear.disordered_trace) == expected_len + + +# Currently two errors are not caught, need to improve this when refactoring, just in case. +@pytest.mark.parametrize( + "dna_num, min_skeleton_size, problem, exception", + [ + (1, 4, None, TypeError), + # (2, 4, {"a": 1, "b": 2}, TypeError), + (3, 4, 6, TypeError), + # (4, 4, "abcde", AttributeError), + ], +) +def test_purge_obvious_crap_exceptions( + dnatrace_linear: dnaTrace, dna_num: list, min_skeleton_size: int, problem, exception +) -> None: + """Test exceptions to purge_obvious_crap""" + dnatrace_linear.min_skeleton_size = min_skeleton_size + dnatrace_linear.disordered_trace[dna_num] = problem + with pytest.raises(exception): + dnatrace_linear.purge_obvious_crap() + + +# Currently linear molecule isn't detected as linear, although it was when selecting and extracting in a Notebook +@pytest.mark.parametrize( + "dnatrace, num_circular, num_linear", + [ + # (lazy_fixture("dnatrace_linear"), 0, 1), + (lazy_fixture("dnatrace_circular"), 1, 0), + ], +) +def test_linear_or_circular(dnatrace: dnaTrace, num_circular: int, num_linear: int) -> None: + """Test of the linear_or_circular method.""" + dnatrace.min_skeleton_size = MIN_SKELETON_SIZE + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + dnatrace.purge_obvious_crap() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + assert dnatrace.num_linear == num_linear + assert dnatrace.num_circular == num_circular + + +@pytest.mark.parametrize( + "dnatrace, grain_number, length, start, end", + [ + (lazy_fixture("dnatrace_linear"), 3, 118, np.asarray([13, 33]), np.asarray([73, 55])), + (lazy_fixture("dnatrace_circular"), 9, 151, np.asarray([49, 49]), np.asarray([49, 49])), + ], +) +def test_get_ordered_traces(dnatrace: dnaTrace, grain_number: int, length: int, start: np.array, end: np.array) -> None: + """Test of the get_ordered_traces method. + + Note the co-ordinates at the start and end differe from the fixtures for test_get_disordered_trace.""" + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + dnatrace.purge_obvious_crap() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_ordered_traces() + assert isinstance(dnatrace.ordered_traces[grain_number], np.ndarray) + assert len(dnatrace.ordered_traces[grain_number]) == length + np.testing.assert_array_equal(dnatrace.ordered_traces[grain_number][0,], start) + np.testing.assert_array_almost_equal(dnatrace.ordered_traces[grain_number][-1,], end) + + +@pytest.mark.parametrize( + "dnatrace, grain_number, length, start, end", + [ + (lazy_fixture("dnatrace_linear"), 3, 118, np.asarray([13, 34]), np.asarray([73, 49])), + (lazy_fixture("dnatrace_circular"), 9, 151, np.asarray([48, 48]), np.asarray([48, 48])), + ], +) +def test_get_fitted_traces(dnatrace: dnaTrace, grain_number: int, length: int, start: np.array, end: np.array) -> None: + """Test of the method.""" + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + dnatrace.purge_obvious_crap() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_ordered_traces() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_fitted_traces() + assert isinstance(dnatrace.fitted_traces[grain_number], np.ndarray) + assert len(dnatrace.fitted_traces[grain_number]) == length + np.testing.assert_array_equal(dnatrace.fitted_traces[grain_number][0,], start) + np.testing.assert_array_almost_equal(dnatrace.fitted_traces[grain_number][-1,], end) + + +@pytest.mark.parametrize( + "dnatrace, grain_number, length, start, end", + [ + (lazy_fixture("dnatrace_linear"), 3, 1652, np.asarray([19.64285714, 30.5]), np.asarray([19.64285714, 30.5])), + (lazy_fixture("dnatrace_circular"), 9, 2114, np.asarray([45.5, 54.64285714]), np.asarray([45.5, 54.64285714])), + ], +) +def test_get_splined_traces(dnatrace: dnaTrace, grain_number: int, length: int, start: np.array, end: np.array) -> None: + """Test of the method.""" + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + dnatrace.purge_obvious_crap() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_ordered_traces() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_fitted_traces() + dnatrace.get_splined_traces() + assert isinstance(dnatrace.splined_traces[grain_number], np.ndarray) + assert len(dnatrace.splined_traces[grain_number]) == length + print(dnatrace.splined_traces[grain_number]) + np.testing.assert_array_almost_equal(dnatrace.splined_traces[grain_number][0,], start) + np.testing.assert_array_almost_equal(dnatrace.splined_traces[grain_number][-1,], end) + + +@pytest.mark.parametrize( + "dnatrace, grain_number, contour_length", + [ + (lazy_fixture("dnatrace_linear"), 3, 8.654848972955206e-08), + (lazy_fixture("dnatrace_circular"), 9, 7.279700456226708e-08), + ], +) +def test_measure_contour_length(dnatrace: dnaTrace, grain_number: int, contour_length: float) -> None: + """Test of the method.""" + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + dnatrace.purge_obvious_crap() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_ordered_traces() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_fitted_traces() + dnatrace.get_splined_traces() + dnatrace.measure_contour_length() + assert dnatrace.contour_lengths[grain_number] == contour_length + + +# Currently need an actual linear grain to test this. +@pytest.mark.parametrize( + "dnatrace, grain_number, end_to_end_distance", + [ + (lazy_fixture("dnatrace_linear"), 3, 0), + (lazy_fixture("dnatrace_circular"), 9, 0), + ], +) +def test_measure_end_to_end_distance(dnatrace: dnaTrace, grain_number: int, end_to_end_distance: float) -> None: + """Test of the method.""" + dnatrace.get_numpy_arrays() + dnatrace.gaussian_filter() + dnatrace.get_disordered_trace() + dnatrace.purge_obvious_crap() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_ordered_traces() + dnatrace.linear_or_circular(dnatrace.disordered_trace) + dnatrace.get_fitted_traces() + dnatrace.get_splined_traces() + dnatrace.measure_end_to_end_distance() + assert dnatrace.end_to_end_distance[grain_number] == end_to_end_distance diff --git a/topostats/tracing/dnatracing.py b/topostats/tracing/dnatracing.py index 93a043a832..7dcb1a4ce2 100644 --- a/topostats/tracing/dnatracing.py +++ b/topostats/tracing/dnatracing.py @@ -792,34 +792,6 @@ def measure_contour_length(self): del hypotenuse_array break - def writeContourLengths(self, filename, channel_name): - if not self.contour_lengths: - self.measure_contour_length() - - with open(f"{filename}_{channel_name}_contours.txt", "w") as writing_file: - writing_file.write("#units: nm\n") - for dna_num in sorted(self.contour_lengths.keys()): - writing_file.write("%f \n" % self.contour_lengths[dna_num]) - - # FIXME : This method doesn't appear to be used here nor within pygwytracing, can it be removed? - def writeCoordinates(self, dna_num): - # FIXME: Replace with Path() - if not os.path.exists(os.path.join(os.path.dirname(self.filename), "Coordinates")): - os.mkdir(os.path.join(os.path.dirname(self.filename), "Coordinates")) - directory = os.path.join(os.path.dirname(self.filename), "Coordinates") - savename = os.path.join(directory, os.path.basename(self.filename)[:-4]) - for i, (x, y) in enumerate(self.splined_traces[dna_num]): - try: - coordinates_array = np.append(coordinates_array, np.array([[x, y]]), axis=0) - except NameError: - coordinates_array = np.array([[x, y]]) - - coordinates = pd.DataFrame(coordinates_array) - coordinates.to_csv(f"{savename}_{dna_num}.csv") - - plt.plot(coordinates_array[:, 0], coordinates_array[:, 1], "ko") - plt.savefig(f"{savename}_{dna_num}_coordinates.png") - def measure_end_to_end_distance(self): """Calculate the Euclidean distance between the start and end of linear molecules. The hypotenuse is calculated between the start ([0,0], [0,1]) and end ([-1,0], [-1,1]) of linear From 5c6c24399d5fbc9337af09c4348ac19b002aadf0 Mon Sep 17 00:00:00 2001 From: Neil Shephard Date: Thu, 1 Jun 2023 15:13:00 +0100 Subject: [PATCH 2/5] Adding pytest-lazy-fixture dependency --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index a2fdf02a4f..d97a154a66 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ tests = [ "py", "pytest", "pytest-cov", + "pytest-lazy-fixture", "pytest-mpl", "pytest-regtest", "filetype", From 3fa331c09a0c2549f5d45b9627accb7f4ded936e Mon Sep 17 00:00:00 2001 From: Neil Shephard Date: Thu, 1 Jun 2023 15:16:47 +0100 Subject: [PATCH 3/5] Adding required NumPy arrays for tests --- tests/resources/dnatracing_image_circular.npy | Bin 0 -> 124736 bytes tests/resources/dnatracing_image_linear.npy | Bin 0 -> 87328 bytes tests/resources/dnatracing_mask_circular.npy | Bin 0 -> 124736 bytes tests/resources/dnatracing_mask_linear.npy | Bin 0 -> 87328 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/resources/dnatracing_image_circular.npy create mode 100644 tests/resources/dnatracing_image_linear.npy create mode 100644 tests/resources/dnatracing_mask_circular.npy create mode 100644 tests/resources/dnatracing_mask_linear.npy diff --git a/tests/resources/dnatracing_image_circular.npy b/tests/resources/dnatracing_image_circular.npy new file mode 100644 index 0000000000000000000000000000000000000000..2127793c2dab3a3c4c9977cee6d92d3a45952518 GIT binary patch literal 124736 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 literal 0 HcmV?d00001 diff --git a/tests/resources/dnatracing_image_linear.npy b/tests/resources/dnatracing_image_linear.npy new file mode 100644 index 0000000000000000000000000000000000000000..1ecd19969a186c29aea9699baf981d126d264574 GIT binary patch literal 87328 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 literal 0 HcmV?d00001 diff --git a/tests/resources/dnatracing_mask_circular.npy b/tests/resources/dnatracing_mask_circular.npy new file mode 100644 index 0000000000000000000000000000000000000000..04b2f18bdadad8907e7d7b84eb02f2851c6848e0 GIT binary patch literal 124736 zcmeI)v5q7)5XSK(R@@?x5QlcrB`2PO7v@$c2V;%L?dqy> zmHU55Yr5OzuYO(L@c#SZr|*CK`LnzCcOTAgpI&}_K7VsMfBVOq^Zn`k+q>s~o*)1E z<=yk!r`P-6J^uOf^zr`7?~i{!ef<5!!`ENkpB^6Ge0hKR_ayrF`5pfdKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0+Vy+HYo#d_EDjnV)Di3NJ+v-Lc2 z%S1;Yyg=*R?Y$qqaRMTcP+;%599^G~h{yrd*2TSKp+GH2<$yqR_g=M5CMU3 z0#@fut8O?j0wFL#K2O^?9?Z z9|n*h2p9@jogeGEh9s0mAgqA(x$>$X7MNfNC<=I;C#!uFDJX?NSOKf^<6So_Fu@Qo z5b!=l@Ng8i6nZ*5}B&ei%rCAmAWieV(lA zI}ou20@DSo&yiRC>5v3Kz(K(4JX!7IK*SaZOc$^^KVEgG0}>#mfcAV^BWUNHUC-K! z`nd#V&tq%Ts;7 zq}#0mQRkIhmw!*Teox-ZCBU3t&UsdkTvJC{sX*5GB=_at8R_?DT@C@}{c_&3c;uKa zQfdignM-nB|9he}2h@ovz}#P-`|K_;r;Sunf$Z~0{>#5J(m7yVYysx{a?Z1R#GW?N z?G?yApGVEV_q($`hd{RZ)>6&ZcQ3D&3w2@&^uB-8=h~XBKFdC>=TYvLoLr9~5M}OK zIih}rR$i<7Q60!-D_}KGT6Jx^*RQVC_trZ49Z)f{z}C6&elN1wwQSx#Wxs1#xOW_Z zG6&YzRYa|w>iVm=(T7Z+o`+e#W$EXy!fXCFIAQ|pxm(rL+O4j?sv~{f7O3aI`uFWL z`JY<*mHPRm=s+S+zQ5O1k}={MFR$J{5pBq%FVLHVz0dU%$E>*5X>@%|1yXqnjLyyI z``-O{?KkQmec!7e_K7VZou94iVs}5DZfoCG?~NyB#YzIq)!5gx^6J$cOUc`-3-sni z`g|2PY5&r7tGLmJu7Gr&wyx7nJHOi2zNPQY?~nu;1f=uTTbH5tEg5@#YCqqSiFb}8 zpgmu8z11Y^{;Ynl=0-m@0$TG|($)3K{Vdlyzt!(79^{-WU^Rbr-ML-Lcdz@f{w+_+ z$|DMB&0|(Ot^TETvbvFbu7Gsj>UDFw7~j3l@BMo`F)LOUVE(RuU2m6qzw4>Ei@?->&MOK?=di4cYEtsex<+*&S1tjo`HiAr)t|I(6c=*j5|GYY zZ(THnUS6-~(Ok%rOTcy?7O^b@SOTlfu~$E>eU3Ffbn7M1nm4QatM*lUdG*OY#}ugN&FZ(8u2ue4U9Y~_ z2Z2|C)*M>hw^Fyt+pBBU4|NgPBG8*p>GLgnYrG@PH@Z$ED>V?hd+WS<=;hFQ?$r`Ze@@>>+QGqxg-;75U>{5JJ+M@ zrTvWVv-f>zPSzn{DX@30x2~7=u(iI`d(zyjL%>qNYToO*qdnB?t$&Z^<9!5X2w0zk zUj0_jy>(j8Tl;e#fk*;c^S(-*NZ*Dm2o!-;&X-jm#fd8d5e2N~K3m<0--b*G)B@Sg zl~&%`f!_#Z5YU?ctaUPcBQhdT1hSqpt=z?dD*_n=wB|m0oebZKj0m&@vY)?J{#L)- zMYtFOYufIX*qrT5?1TqSgd0y?B@mr7?fl+~M=XSI|-bdgF0_7Z+Ud!)U*OG%P z0toa4TIaN^Y&{>nU+Qs10D=7i<^0u^%Kg39x-P#FKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ a0R#|0009ILKmY**5I_I{1Q0+#U*LcJCx#LL literal 0 HcmV?d00001 diff --git a/tests/resources/dnatracing_mask_linear.npy b/tests/resources/dnatracing_mask_linear.npy new file mode 100644 index 0000000000000000000000000000000000000000..0ac5955833389f1d71b7fd9df39c5daa1813ac32 GIT binary patch literal 87328 zcmeIx&59H;5Ww*jJoyxJ8-+dW-c&q$Q@nWaB#S$uAg;`c7x5{4VRw*%A#`=pola7z z{O6KMIv-WPRQ|qw|K{C?M;E^?e(!G&_n(gYm%II|ug~|FyZz_8#M70m%Bf^Rlg?}{189@0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I|r!fyYY5GOo4CGKLXwB|!bVx=xbG6i9s!+PrW)GaQy9 zU|K-xJq%LDV{N#OJ_0=oNS%kVYvbWO`UrRy(B6TJODhIpU&d(>@E{=dy>;ush8)Hb z*t-66_Zvr^Of3uK)^TjT<=lx40TGDRv6b%;bVK<#=ieV!Fp;^r1y|t1bEdp}_-s(OzpE(o0ArK0r)|HoeVgB?Hm=o|)_o;czS?~=35lF2k zZ}TL7S_Gy9yw&^Ke5Py|LqG)9)>ZDh*5^z75(g~;CjqI8+O6oj`M}<9)oIFeiBs@ctgc{5;$lIn)yf>&JV) zo-8MM5RmsExk%r8EBVqQutdQ7yU_AmV#HhoL_n)2uj7(8Edn_L-rh%!1#1z|1iZbI z)O<7##t}FdNUf({=bh)ue+0G?==D8lac||qJ_yVSX!U1xd@dKhA&@IzweHu(mFvNJ z1m*O zT0hn;k!@{(R&||vZfy_FLtsuIwQjA?o6C`J2&@&bUiYc-t<9fx2uum2)?IJ&rgCKr zfwcm?)qgDBwGOO9;3N>Muin3N%LvpE=>469@z*fpjPV4*I`h&W?-V)zC zcOG-_TNz_#7Q1)8r@fERY3!=+>!t{ZK?R4r}2)$!E4nCDAit9o3kqMaY^ zr_HN99>zuAhd}K*3eVFNWuEpu9GCg6+AtpaJ_TCUmz=Aq%6F@+7B}O43RtbP-s0-> z_KA9_KyP(vCElgZ%H#Jw@cJp3s|ks zR&j0Z%YHruTGeN(bA8?-S(O%ORj;+rE$ztuJ_V#sB|GW&-by~S2-Fm?`fh3(a25ig zK Date: Thu, 1 Jun 2023 16:28:54 +0100 Subject: [PATCH 4/5] Make tests approximate --- tests/tracing/test_dnatracing_single_grain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tracing/test_dnatracing_single_grain.py b/tests/tracing/test_dnatracing_single_grain.py index 0ce6cd6fee..d3bbe465d5 100644 --- a/tests/tracing/test_dnatracing_single_grain.py +++ b/tests/tracing/test_dnatracing_single_grain.py @@ -244,7 +244,7 @@ def test_measure_contour_length(dnatrace: dnaTrace, grain_number: int, contour_l dnatrace.get_fitted_traces() dnatrace.get_splined_traces() dnatrace.measure_contour_length() - assert dnatrace.contour_lengths[grain_number] == contour_length + assert dnatrace.contour_lengths[grain_number] == pytest.approx(contour_length) # Currently need an actual linear grain to test this. @@ -267,4 +267,4 @@ def test_measure_end_to_end_distance(dnatrace: dnaTrace, grain_number: int, end_ dnatrace.get_fitted_traces() dnatrace.get_splined_traces() dnatrace.measure_end_to_end_distance() - assert dnatrace.end_to_end_distance[grain_number] == end_to_end_distance + assert dnatrace.end_to_end_distance[grain_number] == pytest.approx(end_to_end_distance) From f1ce13b997f94d74dee3e0088b488d3b900573d1 Mon Sep 17 00:00:00 2001 From: Neil Shephard Date: Fri, 2 Jun 2023 12:40:09 +0100 Subject: [PATCH 5/5] More unit-tests for dnatracing methods thanks @SylviaWhittle --- tests/tracing/test_dnatracing_methods.py | 249 +++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 tests/tracing/test_dnatracing_methods.py diff --git a/tests/tracing/test_dnatracing_methods.py b/tests/tracing/test_dnatracing_methods.py new file mode 100644 index 0000000000..d7265c0842 --- /dev/null +++ b/tests/tracing/test_dnatracing_methods.py @@ -0,0 +1,249 @@ +"""Additional tests of dnaTracing methods""" +from pathlib import Path + +import numpy as np +import pytest + +from topostats.tracing.dnatracing import dnaTrace + +# This is required because of the inheritance used throughout +# pylint: disable=redefined-outer-name +BASE_DIR = Path.cwd() +RESOURCES = BASE_DIR / "tests" / "resources" +PIXEL_SIZE = 0.4940029296875 + +LINEAR_IMAGE = np.load(RESOURCES / "dnatracing_image_linear.npy") +LINEAR_MASK = np.load(RESOURCES / "dnatracing_mask_linear.npy") +CIRCULAR_IMAGE = np.load(RESOURCES / "dnatracing_image_circular.npy") +CIRCULAR_MASK = np.load(RESOURCES / "dnatracing_mask_circular.npy") +MIN_SKELETON_SIZE = 10 + + +@pytest.fixture +def dnatrace() -> dnaTrace: + """Instantiated object of class dnaTrace for use in tests.""" + _dnatrace = dnaTrace( + full_image_data=np.asarray([[1]]), + grains=None, + filename="test.spm", + pixel_size=PIXEL_SIZE, + min_skeleton_size=MIN_SKELETON_SIZE, + ) + return _dnatrace + + +GRAINS = {} +GRAINS["vertical"] = np.asarray( + [ + [0, 0, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 0, 0], + ] +) +GRAINS["horizontal"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["diagonal1"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 1, 1, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 0, 0], + [0, 0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 1, 1, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["diagonal2"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0], + [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["diagonal3"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 0, 0], + [0, 0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 1, 1, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["circle"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["blob"] = np.asarray( + [ + [0, 0, 0, 0, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0], + [0, 0, 0, 0, 0], + ] +) +GRAINS["cross"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + [0, 1, 1, 1, 1, 1, 0], + [0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["single_L"] = np.asarray( + [ + [0, 0, 0, 0], + [0, 0, 1, 0], + [0, 0, 1, 0], + [0, 0, 1, 0], + [0, 1, 1, 0], + [0, 0, 0, 0], + ] +) +GRAINS["double_L"] = np.asarray( + [ + [0, 0, 0, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 1, 1, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 1, 1, 0, 0], + [0, 0, 0, 0, 0], + ] +) + +GRAINS["diagonal_end_single_L"] = np.asarray( + [ + [0, 0, 0, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 1, 1, 0, 0], + [0, 0, 0, 0, 0], + ] +) +GRAINS["diagonal_end_straight"] = np.asarray( + [ + [0, 0, 0, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 0, 0], + ] +) +GRAINS["figure8"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 1, 0, 0, 0, 0], + [0, 1, 0, 0, 1, 0, 0, 0, 0], + [0, 1, 1, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["three_ends"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) +GRAINS["six_ends"] = np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + ] +) + + +@pytest.mark.parametrize( + "grain, num_linear, num_circular", + [ + (GRAINS["vertical"], 1, 0), + (GRAINS["horizontal"], 1, 0), + (GRAINS["diagonal1"], 0, 1), # This is wrong, this IS a linear molecule + (GRAINS["diagonal2"], 1, 0), + (GRAINS["diagonal3"], 1, 0), + (GRAINS["circle"], 0, 1), + (GRAINS["blob"], 0, 1), + (GRAINS["cross"], 1, 0), + (GRAINS["single_L"], 1, 0), + (GRAINS["double_L"], 0, 1), # This is wrong, this IS a linear molecule + (GRAINS["diagonal_end_single_L"], 1, 0), + (GRAINS["diagonal_end_straight"], 1, 0), + (GRAINS["figure8"], 0, 1), + (GRAINS["three_ends"], 1, 0), + (GRAINS["six_ends"], 1, 0), + ], +) +def test_linear_or_circular(dnatrace, grain: np.ndarray, num_linear: int, num_circular: int) -> None: + """Test the linear_or_circular method with a range of different structures.""" + linear_coordinates = {1: np.argwhere(grain == 1)} + dnatrace.linear_or_circular(linear_coordinates) + assert dnatrace.num_linear == num_linear + assert dnatrace.num_circular == num_circular