From e6ff3d595c40d26f72bfe49f76245ca9b2a5c644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Thu, 17 Oct 2024 10:30:49 +0200 Subject: [PATCH 1/8] fix wrongly typed file --- config/{amplicon_cov.smk => amplicon_cov.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename config/{amplicon_cov.smk => amplicon_cov.yaml} (100%) diff --git a/config/amplicon_cov.smk b/config/amplicon_cov.yaml similarity index 100% rename from config/amplicon_cov.smk rename to config/amplicon_cov.yaml From 97e0ebd53b4da03efba55330976e016627a69ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Thu, 17 Oct 2024 10:35:28 +0200 Subject: [PATCH 2/8] update the references accordingly --- workflow/rules/amplicon_cov.smk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/rules/amplicon_cov.smk b/workflow/rules/amplicon_cov.smk index 58a6f3d..7c37387 100644 --- a/workflow/rules/amplicon_cov.smk +++ b/workflow/rules/amplicon_cov.smk @@ -7,7 +7,7 @@ """ -configfile: "config/amplicon_cov.smk" +configfile: "config/amplicon_cov.yaml" rule relative_amplicon_coverage_per_batch: From d7281e604e05b03b8302bed0b08d680333b39446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Thu, 17 Oct 2024 10:37:27 +0200 Subject: [PATCH 3/8] adding integration unittest data - subset of test_output_sars-cov-2 artifact from V-Pipe/rubicon snake-depoly action --- .../integration/subset_vpipe_smkdploy/README.md | 13 +++++++++++++ .../20200729/alignments/coverage.tsv.gz | Bin 0 -> 80938 bytes .../20200729/alignments/coverage.tsv.gz | Bin 0 -> 81646 bytes .../test_ouput_sars-cov-2/samples/samples.tsv | 2 ++ 4 files changed, 15 insertions(+) create mode 100644 workflow/.tests/integration/subset_vpipe_smkdploy/README.md create mode 100644 workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz create mode 100644 workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MT007544_1_1/20200729/alignments/coverage.tsv.gz create mode 100644 workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/samples/samples.tsv diff --git a/workflow/.tests/integration/subset_vpipe_smkdploy/README.md b/workflow/.tests/integration/subset_vpipe_smkdploy/README.md new file mode 100644 index 0000000..439f0a0 --- /dev/null +++ b/workflow/.tests/integration/subset_vpipe_smkdploy/README.md @@ -0,0 +1,13 @@ +This firectory contains test data from the V-Pipe snakedeploy builds run on the rubicon branch: + +https://github.com/cbg-ethz/V-pipe/actions/runs/11176196539 + +The data are the artefacts of these github actions repesenting intemediate results of V-Pipe processing. + +This folder currently contains: +- test_output_sars-cov-2 + - results/*/*/aligments/coverage.tsv.gz + - samples/samples.tsv + + + diff --git a/workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz b/workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz new file mode 100644 index 0000000000000000000000000000000000000000..88c723fd7f972e4bbf59be3727f1af01f252b0f1 GIT binary patch literal 80938 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�a+JXFgWy|#lV#3%(0J}q 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
  • fvMEC}=*ZKa+hj3zV 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

    dWab0en(UfN$q*g{9iw`>+{c56EY_t~ra1Mkh8Y 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 Date: Thu, 17 Oct 2024 10:55:08 +0200 Subject: [PATCH 4/8] addding primer scheme for unittest --- .../primer_schemes/articV3primers.bed | 219 ++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 workflow/.tests/integration/primer_schemes/articV3primers.bed diff --git a/workflow/.tests/integration/primer_schemes/articV3primers.bed b/workflow/.tests/integration/primer_schemes/articV3primers.bed new file mode 100644 index 0000000..5048097 --- /dev/null +++ b/workflow/.tests/integration/primer_schemes/articV3primers.bed @@ -0,0 +1,219 @@ +MN908947.3 30 54 nCoV-2019_1_LEFT nCoV-2019_1 + +MN908947.3 385 410 nCoV-2019_1_RIGHT nCoV-2019_1 - +MN908947.3 320 342 nCoV-2019_2_LEFT nCoV-2019_2 + +MN908947.3 704 726 nCoV-2019_2_RIGHT nCoV-2019_2 - +MN908947.3 642 664 nCoV-2019_3_LEFT nCoV-2019_1 + +MN908947.3 1004 1028 nCoV-2019_3_RIGHT nCoV-2019_1 - +MN908947.3 943 965 nCoV-2019_4_LEFT nCoV-2019_2 + +MN908947.3 1312 1337 nCoV-2019_4_RIGHT nCoV-2019_2 - +MN908947.3 1242 1264 nCoV-2019_5_LEFT nCoV-2019_1 + +MN908947.3 1623 1651 nCoV-2019_5_RIGHT nCoV-2019_1 - +MN908947.3 1573 1595 nCoV-2019_6_LEFT nCoV-2019_2 + +MN908947.3 1942 1964 nCoV-2019_6_RIGHT nCoV-2019_2 - +MN908947.3 1875 1897 nCoV-2019_7_LEFT nCoV-2019_1 + +MN908947.3 1868 1890 nCoV-2019_7_LEFT_alt0 nCoV-2019_1 + +MN908947.3 2247 2269 nCoV-2019_7_RIGHT nCoV-2019_1 - +MN908947.3 2242 2264 nCoV-2019_7_RIGHT_alt5 nCoV-2019_1 - +MN908947.3 2181 2205 nCoV-2019_8_LEFT nCoV-2019_2 + +MN908947.3 2568 2592 nCoV-2019_8_RIGHT nCoV-2019_2 - +MN908947.3 2505 2529 nCoV-2019_9_LEFT nCoV-2019_1 + +MN908947.3 2504 2528 nCoV-2019_9_LEFT_alt4 nCoV-2019_1 + +MN908947.3 2882 2904 nCoV-2019_9_RIGHT nCoV-2019_1 - +MN908947.3 2880 2902 nCoV-2019_9_RIGHT_alt2 nCoV-2019_1 - +MN908947.3 2826 2850 nCoV-2019_10_LEFT nCoV-2019_2 + +MN908947.3 3183 3210 nCoV-2019_10_RIGHT nCoV-2019_2 - +MN908947.3 3144 3166 nCoV-2019_11_LEFT nCoV-2019_1 + +MN908947.3 3507 3531 nCoV-2019_11_RIGHT nCoV-2019_1 - +MN908947.3 3460 3482 nCoV-2019_12_LEFT nCoV-2019_2 + +MN908947.3 3826 3853 nCoV-2019_12_RIGHT nCoV-2019_2 - +MN908947.3 3771 3795 nCoV-2019_13_LEFT nCoV-2019_1 + +MN908947.3 4142 4164 nCoV-2019_13_RIGHT nCoV-2019_1 - +MN908947.3 4054 4077 nCoV-2019_14_LEFT nCoV-2019_2 + +MN908947.3 4044 4068 nCoV-2019_14_LEFT_alt4 nCoV-2019_2 + +MN908947.3 4428 4450 nCoV-2019_14_RIGHT nCoV-2019_2 - +MN908947.3 4402 4424 nCoV-2019_14_RIGHT_alt2 nCoV-2019_2 - +MN908947.3 4294 4321 nCoV-2019_15_LEFT nCoV-2019_1 + +MN908947.3 4296 4322 nCoV-2019_15_LEFT_alt1 nCoV-2019_1 + +MN908947.3 4674 4696 nCoV-2019_15_RIGHT nCoV-2019_1 - +MN908947.3 4666 4689 nCoV-2019_15_RIGHT_alt3 nCoV-2019_1 - +MN908947.3 4636 4658 nCoV-2019_16_LEFT nCoV-2019_2 + +MN908947.3 4995 5017 nCoV-2019_16_RIGHT nCoV-2019_2 - +MN908947.3 4939 4966 nCoV-2019_17_LEFT nCoV-2019_1 + +MN908947.3 5296 5321 nCoV-2019_17_RIGHT nCoV-2019_1 - +MN908947.3 5230 5259 nCoV-2019_18_LEFT nCoV-2019_2 + +MN908947.3 5257 5287 nCoV-2019_18_LEFT_alt2 nCoV-2019_2 + +MN908947.3 5620 5644 nCoV-2019_18_RIGHT nCoV-2019_2 - +MN908947.3 5620 5643 nCoV-2019_18_RIGHT_alt1 nCoV-2019_2 - +MN908947.3 5563 5586 nCoV-2019_19_LEFT nCoV-2019_1 + +MN908947.3 5932 5957 nCoV-2019_19_RIGHT nCoV-2019_1 - +MN908947.3 5867 5894 nCoV-2019_20_LEFT nCoV-2019_2 + +MN908947.3 6247 6272 nCoV-2019_20_RIGHT nCoV-2019_2 - +MN908947.3 6167 6196 nCoV-2019_21_LEFT nCoV-2019_1 + +MN908947.3 6168 6197 nCoV-2019_21_LEFT_alt2 nCoV-2019_1 + +MN908947.3 6528 6550 nCoV-2019_21_RIGHT nCoV-2019_1 - +MN908947.3 6526 6548 nCoV-2019_21_RIGHT_alt0 nCoV-2019_1 - +MN908947.3 6466 6495 nCoV-2019_22_LEFT nCoV-2019_2 + +MN908947.3 6846 6873 nCoV-2019_22_RIGHT nCoV-2019_2 - +MN908947.3 6718 6745 nCoV-2019_23_LEFT nCoV-2019_1 + +MN908947.3 7092 7117 nCoV-2019_23_RIGHT nCoV-2019_1 - +MN908947.3 7035 7058 nCoV-2019_24_LEFT nCoV-2019_2 + +MN908947.3 7389 7415 nCoV-2019_24_RIGHT nCoV-2019_2 - +MN908947.3 7305 7332 nCoV-2019_25_LEFT nCoV-2019_1 + +MN908947.3 7671 7694 nCoV-2019_25_RIGHT nCoV-2019_1 - +MN908947.3 7626 7651 nCoV-2019_26_LEFT nCoV-2019_2 + +MN908947.3 7997 8019 nCoV-2019_26_RIGHT nCoV-2019_2 - +MN908947.3 7943 7968 nCoV-2019_27_LEFT nCoV-2019_1 + +MN908947.3 8319 8341 nCoV-2019_27_RIGHT nCoV-2019_1 - +MN908947.3 8249 8275 nCoV-2019_28_LEFT nCoV-2019_2 + +MN908947.3 8635 8661 nCoV-2019_28_RIGHT nCoV-2019_2 - +MN908947.3 8595 8619 nCoV-2019_29_LEFT nCoV-2019_1 + +MN908947.3 8954 8983 nCoV-2019_29_RIGHT nCoV-2019_1 - +MN908947.3 8888 8913 nCoV-2019_30_LEFT nCoV-2019_2 + +MN908947.3 9245 9271 nCoV-2019_30_RIGHT nCoV-2019_2 - +MN908947.3 9204 9226 nCoV-2019_31_LEFT nCoV-2019_1 + +MN908947.3 9557 9585 nCoV-2019_31_RIGHT nCoV-2019_1 - +MN908947.3 9477 9502 nCoV-2019_32_LEFT nCoV-2019_2 + +MN908947.3 9834 9858 nCoV-2019_32_RIGHT nCoV-2019_2 - +MN908947.3 9784 9806 nCoV-2019_33_LEFT nCoV-2019_1 + +MN908947.3 10146 10171 nCoV-2019_33_RIGHT nCoV-2019_1 - +MN908947.3 10076 10099 nCoV-2019_34_LEFT nCoV-2019_2 + +MN908947.3 10437 10459 nCoV-2019_34_RIGHT nCoV-2019_2 - +MN908947.3 10362 10384 nCoV-2019_35_LEFT nCoV-2019_1 + +MN908947.3 10737 10763 nCoV-2019_35_RIGHT nCoV-2019_1 - +MN908947.3 10666 10688 nCoV-2019_36_LEFT nCoV-2019_2 + +MN908947.3 11048 11074 nCoV-2019_36_RIGHT nCoV-2019_2 - +MN908947.3 10999 11022 nCoV-2019_37_LEFT nCoV-2019_1 + +MN908947.3 11372 11394 nCoV-2019_37_RIGHT nCoV-2019_1 - +MN908947.3 11306 11331 nCoV-2019_38_LEFT nCoV-2019_2 + +MN908947.3 11668 11693 nCoV-2019_38_RIGHT nCoV-2019_2 - +MN908947.3 11555 11584 nCoV-2019_39_LEFT nCoV-2019_1 + +MN908947.3 11927 11949 nCoV-2019_39_RIGHT nCoV-2019_1 - +MN908947.3 11863 11889 nCoV-2019_40_LEFT nCoV-2019_2 + +MN908947.3 12234 12256 nCoV-2019_40_RIGHT nCoV-2019_2 - +MN908947.3 12110 12133 nCoV-2019_41_LEFT nCoV-2019_1 + +MN908947.3 12465 12490 nCoV-2019_41_RIGHT nCoV-2019_1 - +MN908947.3 12417 12439 nCoV-2019_42_LEFT nCoV-2019_2 + +MN908947.3 12779 12802 nCoV-2019_42_RIGHT nCoV-2019_2 - +MN908947.3 12710 12732 nCoV-2019_43_LEFT nCoV-2019_1 + +MN908947.3 13074 13096 nCoV-2019_43_RIGHT nCoV-2019_1 - +MN908947.3 13005 13027 nCoV-2019_44_LEFT nCoV-2019_2 + +MN908947.3 13007 13029 nCoV-2019_44_LEFT_alt3 nCoV-2019_2 + +MN908947.3 13378 13400 nCoV-2019_44_RIGHT nCoV-2019_2 - +MN908947.3 13363 13385 nCoV-2019_44_RIGHT_alt0 nCoV-2019_2 - +MN908947.3 13319 13344 nCoV-2019_45_LEFT nCoV-2019_1 + +MN908947.3 13307 13336 nCoV-2019_45_LEFT_alt2 nCoV-2019_1 + +MN908947.3 13669 13699 nCoV-2019_45_RIGHT nCoV-2019_1 - +MN908947.3 13660 13689 nCoV-2019_45_RIGHT_alt7 nCoV-2019_1 - +MN908947.3 13599 13621 nCoV-2019_46_LEFT nCoV-2019_2 + +MN908947.3 13602 13625 nCoV-2019_46_LEFT_alt1 nCoV-2019_2 + +MN908947.3 13962 13984 nCoV-2019_46_RIGHT nCoV-2019_2 - +MN908947.3 13961 13984 nCoV-2019_46_RIGHT_alt2 nCoV-2019_2 - +MN908947.3 13918 13946 nCoV-2019_47_LEFT nCoV-2019_1 + +MN908947.3 14271 14299 nCoV-2019_47_RIGHT nCoV-2019_1 - +MN908947.3 14207 14232 nCoV-2019_48_LEFT nCoV-2019_2 + +MN908947.3 14579 14601 nCoV-2019_48_RIGHT nCoV-2019_2 - +MN908947.3 14545 14570 nCoV-2019_49_LEFT nCoV-2019_1 + +MN908947.3 14898 14926 nCoV-2019_49_RIGHT nCoV-2019_1 - +MN908947.3 14865 14895 nCoV-2019_50_LEFT nCoV-2019_2 + +MN908947.3 15224 15246 nCoV-2019_50_RIGHT nCoV-2019_2 - +MN908947.3 15171 15193 nCoV-2019_51_LEFT nCoV-2019_1 + +MN908947.3 15538 15560 nCoV-2019_51_RIGHT nCoV-2019_1 - +MN908947.3 15481 15503 nCoV-2019_52_LEFT nCoV-2019_2 + +MN908947.3 15861 15886 nCoV-2019_52_RIGHT nCoV-2019_2 - +MN908947.3 15827 15851 nCoV-2019_53_LEFT nCoV-2019_1 + +MN908947.3 16186 16209 nCoV-2019_53_RIGHT nCoV-2019_1 - +MN908947.3 16118 16144 nCoV-2019_54_LEFT nCoV-2019_2 + +MN908947.3 16485 16510 nCoV-2019_54_RIGHT nCoV-2019_2 - +MN908947.3 16416 16444 nCoV-2019_55_LEFT nCoV-2019_1 + +MN908947.3 16804 16833 nCoV-2019_55_RIGHT nCoV-2019_1 - +MN908947.3 16748 16770 nCoV-2019_56_LEFT nCoV-2019_2 + +MN908947.3 17130 17152 nCoV-2019_56_RIGHT nCoV-2019_2 - +MN908947.3 17065 17087 nCoV-2019_57_LEFT nCoV-2019_1 + +MN908947.3 17430 17452 nCoV-2019_57_RIGHT nCoV-2019_1 - +MN908947.3 17381 17406 nCoV-2019_58_LEFT nCoV-2019_2 + +MN908947.3 17738 17761 nCoV-2019_58_RIGHT nCoV-2019_2 - +MN908947.3 17674 17697 nCoV-2019_59_LEFT nCoV-2019_1 + +MN908947.3 18036 18062 nCoV-2019_59_RIGHT nCoV-2019_1 - +MN908947.3 17966 17993 nCoV-2019_60_LEFT nCoV-2019_2 + +MN908947.3 18324 18348 nCoV-2019_60_RIGHT nCoV-2019_2 - +MN908947.3 18253 18275 nCoV-2019_61_LEFT nCoV-2019_1 + +MN908947.3 18650 18672 nCoV-2019_61_RIGHT nCoV-2019_1 - +MN908947.3 18596 18618 nCoV-2019_62_LEFT nCoV-2019_2 + +MN908947.3 18957 18979 nCoV-2019_62_RIGHT nCoV-2019_2 - +MN908947.3 18896 18918 nCoV-2019_63_LEFT nCoV-2019_1 + +MN908947.3 19275 19297 nCoV-2019_63_RIGHT nCoV-2019_1 - +MN908947.3 19204 19232 nCoV-2019_64_LEFT nCoV-2019_2 + +MN908947.3 19591 19616 nCoV-2019_64_RIGHT nCoV-2019_2 - +MN908947.3 19548 19570 nCoV-2019_65_LEFT nCoV-2019_1 + +MN908947.3 19911 19939 nCoV-2019_65_RIGHT nCoV-2019_1 - +MN908947.3 19844 19866 nCoV-2019_66_LEFT nCoV-2019_2 + +MN908947.3 20231 20255 nCoV-2019_66_RIGHT nCoV-2019_2 - +MN908947.3 20172 20200 nCoV-2019_67_LEFT nCoV-2019_1 + +MN908947.3 20542 20572 nCoV-2019_67_RIGHT nCoV-2019_1 - +MN908947.3 20472 20496 nCoV-2019_68_LEFT nCoV-2019_2 + +MN908947.3 20867 20890 nCoV-2019_68_RIGHT nCoV-2019_2 - +MN908947.3 20786 20813 nCoV-2019_69_LEFT nCoV-2019_1 + +MN908947.3 21146 21169 nCoV-2019_69_RIGHT nCoV-2019_1 - +MN908947.3 21075 21104 nCoV-2019_70_LEFT nCoV-2019_2 + +MN908947.3 21427 21455 nCoV-2019_70_RIGHT nCoV-2019_2 - +MN908947.3 21357 21386 nCoV-2019_71_LEFT nCoV-2019_1 + +MN908947.3 21716 21743 nCoV-2019_71_RIGHT nCoV-2019_1 - +MN908947.3 21658 21682 nCoV-2019_72_LEFT nCoV-2019_2 + +MN908947.3 22013 22038 nCoV-2019_72_RIGHT nCoV-2019_2 - +MN908947.3 21961 21990 nCoV-2019_73_LEFT nCoV-2019_1 + +MN908947.3 22324 22346 nCoV-2019_73_RIGHT nCoV-2019_1 - +MN908947.3 22262 22290 nCoV-2019_74_LEFT nCoV-2019_2 + +MN908947.3 22626 22650 nCoV-2019_74_RIGHT nCoV-2019_2 - +MN908947.3 22516 22542 nCoV-2019_75_LEFT nCoV-2019_1 + +MN908947.3 22877 22903 nCoV-2019_75_RIGHT nCoV-2019_1 - +MN908947.3 22797 22819 nCoV-2019_76_LEFT nCoV-2019_2 + +MN908947.3 22798 22821 nCoV-2019_76_LEFT_alt3 nCoV-2019_2 + +MN908947.3 23192 23214 nCoV-2019_76_RIGHT nCoV-2019_2 - +MN908947.3 23189 23212 nCoV-2019_76_RIGHT_alt0 nCoV-2019_2 - +MN908947.3 23122 23144 nCoV-2019_77_LEFT nCoV-2019_1 + +MN908947.3 23500 23522 nCoV-2019_77_RIGHT nCoV-2019_1 - +MN908947.3 23443 23466 nCoV-2019_78_LEFT nCoV-2019_2 + +MN908947.3 23822 23847 nCoV-2019_78_RIGHT nCoV-2019_2 - +MN908947.3 23789 23812 nCoV-2019_79_LEFT nCoV-2019_1 + +MN908947.3 24145 24169 nCoV-2019_79_RIGHT nCoV-2019_1 - +MN908947.3 24078 24100 nCoV-2019_80_LEFT nCoV-2019_2 + +MN908947.3 24443 24467 nCoV-2019_80_RIGHT nCoV-2019_2 - +MN908947.3 24391 24416 nCoV-2019_81_LEFT nCoV-2019_1 + +MN908947.3 24765 24789 nCoV-2019_81_RIGHT nCoV-2019_1 - +MN908947.3 24696 24721 nCoV-2019_82_LEFT nCoV-2019_2 + +MN908947.3 25052 25076 nCoV-2019_82_RIGHT nCoV-2019_2 - +MN908947.3 24978 25003 nCoV-2019_83_LEFT nCoV-2019_1 + +MN908947.3 25347 25369 nCoV-2019_83_RIGHT nCoV-2019_1 - +MN908947.3 25279 25301 nCoV-2019_84_LEFT nCoV-2019_2 + +MN908947.3 25646 25673 nCoV-2019_84_RIGHT nCoV-2019_2 - +MN908947.3 25601 25623 nCoV-2019_85_LEFT nCoV-2019_1 + +MN908947.3 25969 25994 nCoV-2019_85_RIGHT nCoV-2019_1 - +MN908947.3 25902 25924 nCoV-2019_86_LEFT nCoV-2019_2 + +MN908947.3 26290 26315 nCoV-2019_86_RIGHT nCoV-2019_2 - +MN908947.3 26197 26219 nCoV-2019_87_LEFT nCoV-2019_1 + +MN908947.3 26566 26590 nCoV-2019_87_RIGHT nCoV-2019_1 - +MN908947.3 26520 26542 nCoV-2019_88_LEFT nCoV-2019_2 + +MN908947.3 26890 26913 nCoV-2019_88_RIGHT nCoV-2019_2 - +MN908947.3 26835 26857 nCoV-2019_89_LEFT nCoV-2019_1 + +MN908947.3 26838 26860 nCoV-2019_89_LEFT_alt2 nCoV-2019_1 + +MN908947.3 27202 27227 nCoV-2019_89_RIGHT nCoV-2019_1 - +MN908947.3 27190 27215 nCoV-2019_89_RIGHT_alt4 nCoV-2019_1 - +MN908947.3 27141 27164 nCoV-2019_90_LEFT nCoV-2019_2 + +MN908947.3 27511 27533 nCoV-2019_90_RIGHT nCoV-2019_2 - +MN908947.3 27446 27471 nCoV-2019_91_LEFT nCoV-2019_1 + +MN908947.3 27825 27854 nCoV-2019_91_RIGHT nCoV-2019_1 - +MN908947.3 27784 27808 nCoV-2019_92_LEFT nCoV-2019_2 + +MN908947.3 28145 28172 nCoV-2019_92_RIGHT nCoV-2019_2 - +MN908947.3 28081 28104 nCoV-2019_93_LEFT nCoV-2019_1 + +MN908947.3 28442 28464 nCoV-2019_93_RIGHT nCoV-2019_1 - +MN908947.3 28394 28416 nCoV-2019_94_LEFT nCoV-2019_2 + +MN908947.3 28756 28779 nCoV-2019_94_RIGHT nCoV-2019_2 - +MN908947.3 28677 28699 nCoV-2019_95_LEFT nCoV-2019_1 + +MN908947.3 29041 29063 nCoV-2019_95_RIGHT nCoV-2019_1 - +MN908947.3 28985 29007 nCoV-2019_96_LEFT nCoV-2019_2 + +MN908947.3 29356 29378 nCoV-2019_96_RIGHT nCoV-2019_2 - +MN908947.3 29288 29316 nCoV-2019_97_LEFT nCoV-2019_1 + +MN908947.3 29665 29693 nCoV-2019_97_RIGHT nCoV-2019_1 - +MN908947.3 29486 29510 nCoV-2019_98_LEFT nCoV-2019_2 + +MN908947.3 29836 29866 nCoV-2019_98_RIGHT nCoV-2019_2 - + From d9aedb9fbb92d17da615738483c54c319d5b8ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Thu, 24 Oct 2024 10:57:17 +0200 Subject: [PATCH 5/8] WIP --- config/amplicon_cov.yaml | 9 +- .../unit/amplicon_cov/amplicon_cov.yaml | 15 +++ .../data}/primer_schemes/articV3primers.bed | 0 .../data/subset_vpipe_smkdeploy}/README.md | 0 .../20200729/alignments/coverage.tsv.gz | Bin .../20200729/alignments/coverage.tsv.gz | Bin .../samples/samples.tsv | 0 .../samples/samples20200729.tsv | 2 + .../expected/20200729/amplicons_coverages.csv | 3 + .../20200729/amplicons_coverages_norm.csv | 3 + .../expected/20200729/cov_heatmap.pdf | Bin 0 -> 22197 bytes workflow/.tests/unit/test_amplicon_cov.py | 93 ++++++++++++++++++ 12 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 workflow/.tests/unit/amplicon_cov/amplicon_cov.yaml rename workflow/.tests/{integration => unit/amplicon_cov/data}/primer_schemes/articV3primers.bed (100%) rename workflow/.tests/{integration/subset_vpipe_smkdploy => unit/amplicon_cov/data/subset_vpipe_smkdeploy}/README.md (100%) rename workflow/.tests/{integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2 => unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2}/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz (100%) rename workflow/.tests/{integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2 => unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2}/results/pos_MT007544_1_1/20200729/alignments/coverage.tsv.gz (100%) rename workflow/.tests/{integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2 => unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2}/samples/samples.tsv (100%) create mode 100644 workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/samples20200729.tsv create mode 100644 workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages.csv create mode 100644 workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages_norm.csv create mode 100644 workflow/.tests/unit/amplicon_cov/expected/20200729/cov_heatmap.pdf diff --git a/config/amplicon_cov.yaml b/config/amplicon_cov.yaml index 1cb5efa..ff3ac71 100644 --- a/config/amplicon_cov.yaml +++ b/config/amplicon_cov.yaml @@ -1,14 +1,15 @@ #### Parameters # The name of the batch to process -batch: "20240705_AAFH52MM5" +batch: "20200729" ###### Inputs # where to find the list of samples i.e. samples.tsv -sample_list_dir: "../../data/amplicon_cov_data/cluster/project/pangolin/work-amplicon-coverage/test_data/" +sample_list_dir: "workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/" + # where to find the samples from the list -sample_dir: "../../data/amplicon_cov_data/cluster/project/pangolin/work-amplicon-coverage/test_data/samples" +sample_dir: "workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/results" # bed file with the primers -primers_fp: "../../data/amplicon_cov_data/resources/amplicon_cov/articV3primers.bed" +primers_fp: "workflow/.tests/unit/amplicon_cov/data/primer_schemes/articV3primers.bed" ##### Outputs output_dir: "results/" diff --git a/workflow/.tests/unit/amplicon_cov/amplicon_cov.yaml b/workflow/.tests/unit/amplicon_cov/amplicon_cov.yaml new file mode 100644 index 0000000..ffba60a --- /dev/null +++ b/workflow/.tests/unit/amplicon_cov/amplicon_cov.yaml @@ -0,0 +1,15 @@ +#### Parameters +# The name of the batch to process +batch: "20200729" + +###### Inputs +# where to find the list of samples i.e. samples.tsv +sample_list_dir: "data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/" + +# where to find the samples from the list +sample_dir: "data/subset_vpipe_smkdeploy/test_output_sars-cov-2/results" +# bed file with the primers +primers_fp: "data/primer_schemes/articV3primers.bed" + +##### Outputs +output_dir: "" diff --git a/workflow/.tests/integration/primer_schemes/articV3primers.bed b/workflow/.tests/unit/amplicon_cov/data/primer_schemes/articV3primers.bed similarity index 100% rename from workflow/.tests/integration/primer_schemes/articV3primers.bed rename to workflow/.tests/unit/amplicon_cov/data/primer_schemes/articV3primers.bed diff --git a/workflow/.tests/integration/subset_vpipe_smkdploy/README.md b/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/README.md similarity index 100% rename from workflow/.tests/integration/subset_vpipe_smkdploy/README.md rename to workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/README.md diff --git a/workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz b/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz similarity index 100% rename from workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz rename to workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/results/pos_MN908947_3_1/20200729/alignments/coverage.tsv.gz diff --git a/workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MT007544_1_1/20200729/alignments/coverage.tsv.gz b/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/results/pos_MT007544_1_1/20200729/alignments/coverage.tsv.gz similarity index 100% rename from workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/results/pos_MT007544_1_1/20200729/alignments/coverage.tsv.gz rename to workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/results/pos_MT007544_1_1/20200729/alignments/coverage.tsv.gz diff --git a/workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/samples/samples.tsv b/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/samples.tsv similarity index 100% rename from workflow/.tests/integration/subset_vpipe_smkdploy/test_ouput_sars-cov-2/samples/samples.tsv rename to workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/samples.tsv diff --git a/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/samples20200729.tsv b/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/samples20200729.tsv new file mode 100644 index 0000000..43dd050 --- /dev/null +++ b/workflow/.tests/unit/amplicon_cov/data/subset_vpipe_smkdeploy/test_output_sars-cov-2/samples/samples20200729.tsv @@ -0,0 +1,2 @@ +pos_MN908947_3_1 20200729 250 v3 +pos_MT007544_1_1 20200729 250 v3 diff --git a/workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages.csv b/workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages.csv new file mode 100644 index 0000000..0db51af --- /dev/null +++ b/workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages.csv @@ -0,0 +1,3 @@ +sample,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97 +pos_MN908947_3_1,264.0,10.0,256.0,255.0,255.0,253.0,255.0,256.0,255.0,1.0,256.0,13.0,253.0,484.5,65.0,81.0,0.0,22.0,253.0,254.0,255.0,476.0,15.0,126.0,256.0,255.0,254.0,95.0,255.0,255.0,65.5,255.0,0.0,256.0,256.0,255.0,256.0,327.0,255.0,410.0,161.0,253.0,255.0,256.0,257.0,255.0,255.0,255.0,218.0,0.0,254.0,256.0,255.0,38.0,254.0,253.0,255.0,92.0,255.0,256.0,256.0,256.0,197.0,255.0,254.5,22.0,181.0,256.0,252.0,256.0,254.0,255.0,256.0,220.0,252.0,37.0,256.0,263.0,253.0,256.0,256.0,0.0,18.0,255.0,255.0,254.0,251.0,255.0,256.0,253.0,255.0,254.0,251.0,255.0,73.0,255.0,431.5,74.0 +pos_MT007544_1_1,256.0,10.0,254.0,254.0,254.0,255.0,257.0,255.0,256.0,10.0,255.0,33.0,253.0,506.0,59.0,0.0,0.0,38.0,253.0,251.0,256.0,494.5,39.0,149.0,255.0,256.0,255.0,184.0,256.0,255.0,258.0,253.0,0.0,255.0,255.0,256.0,256.0,315.0,256.0,404.5,163.0,256.0,256.0,256.0,256.0,256.0,255.0,256.0,255.0,0.0,256.0,256.0,256.0,95.0,254.0,254.0,256.0,107.0,256.0,253.0,255.0,255.0,253.0,255.0,253.0,0.0,255.0,255.0,255.0,254.0,253.0,255.0,256.0,300.5,254.0,47.0,258.0,256.0,255.0,255.0,256.0,0.0,0.0,256.0,255.0,255.0,256.0,255.0,256.0,256.0,256.0,256.0,255.0,254.0,73.0,255.5,490.0,9.0 diff --git a/workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages_norm.csv b/workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages_norm.csv new file mode 100644 index 0000000..8af132a --- /dev/null +++ b/workflow/.tests/unit/amplicon_cov/expected/20200729/amplicons_coverages_norm.csv @@ -0,0 +1,3 @@ +sample,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97 +pos_MN908947_3_1,0.012546932180029466,0.00047526258257687374,0.012166722113967967,0.01211919585571028,0.01211919585571028,0.012024143339194906,0.01211919585571028,0.012166722113967967,0.01211919585571028,4.752625825768737e-05,0.012166722113967967,0.0006178413573499358,0.012024143339194906,0.02302647212584953,0.003089206786749679,0.0038496269188726773,0.0,0.0010455776816691222,0.012024143339194906,0.012071669597452593,0.01211919585571028,0.02262249893065919,0.0007128938738653106,0.005988308540468609,0.012166722113967967,0.01211919585571028,0.012071669597452593,0.004514994534480301,0.01211919585571028,0.01211919585571028,0.003112969915878523,0.01211919585571028,0.0,0.012166722113967967,0.012166722113967967,0.01211919585571028,0.012166722113967967,0.015541086450263772,0.01211919585571028,0.01948576588565182,0.007651727579487667,0.012024143339194906,0.01211919585571028,0.012166722113967967,0.012214248372225655,0.01211919585571028,0.01211919585571028,0.01211919585571028,0.010360724300175848,0.0,0.012071669597452593,0.012166722113967967,0.01211919585571028,0.0018059978137921202,0.012071669597452593,0.012024143339194906,0.01211919585571028,0.004372415759707238,0.01211919585571028,0.012166722113967967,0.012166722113967967,0.012166722113967967,0.009362672876764412,0.01211919585571028,0.012095432726581437,0.0010455776816691222,0.008602252744641414,0.012166722113967967,0.011976617080937217,0.012166722113967967,0.012071669597452593,0.01211919585571028,0.012166722113967967,0.010455776816691222,0.011976617080937217,0.0017584715555344329,0.012166722113967967,0.012499405921771779,0.012024143339194906,0.012166722113967967,0.012166722113967967,0.0,0.0008554726486383727,0.01211919585571028,0.01211919585571028,0.012071669597452593,0.01192909082267953,0.01211919585571028,0.012166722113967967,0.012024143339194906,0.01211919585571028,0.012071669597452593,0.01192909082267953,0.01211919585571028,0.0034694168528111784,0.01211919585571028,0.0205075804381921,0.0035169431110688657 +pos_MT007544_1_1,0.011828851307642546,0.000462064504204787,0.011736438406801589,0.011736438406801589,0.011736438406801589,0.011782644857222068,0.011875057758063025,0.011782644857222068,0.011828851307642546,0.000462064504204787,0.011782644857222068,0.001524812863875797,0.01169023195638111,0.02338046391276222,0.002726180574808243,0.0,0.0,0.0017558451159781906,0.01169023195638111,0.011597819055540153,0.011828851307642546,0.022849089732926715,0.0018020515663986693,0.006884761112651326,0.011782644857222068,0.011828851307642546,0.011782644857222068,0.00850198687736808,0.011828851307642546,0.011782644857222068,0.011921264208483504,0.01169023195638111,0.0,0.011782644857222068,0.011782644857222068,0.011828851307642546,0.011828851307642546,0.01455503188245079,0.011828851307642546,0.018690509195083634,0.007531651418538028,0.011828851307642546,0.011828851307642546,0.011828851307642546,0.011828851307642546,0.011828851307642546,0.011782644857222068,0.011828851307642546,0.011782644857222068,0.0,0.011828851307642546,0.011828851307642546,0.011828851307642546,0.004389612789945476,0.011736438406801589,0.011736438406801589,0.011828851307642546,0.004944090194991221,0.011828851307642546,0.01169023195638111,0.011782644857222068,0.011782644857222068,0.01169023195638111,0.011782644857222068,0.01169023195638111,0.0,0.011782644857222068,0.011782644857222068,0.011782644857222068,0.011736438406801589,0.01169023195638111,0.011782644857222068,0.011828851307642546,0.01388503835135385,0.011736438406801589,0.002171703169762499,0.011921264208483504,0.011828851307642546,0.011782644857222068,0.011782644857222068,0.011828851307642546,0.0,0.0,0.011828851307642546,0.011782644857222068,0.011782644857222068,0.011828851307642546,0.011782644857222068,0.011828851307642546,0.011828851307642546,0.011828851307642546,0.011828851307642546,0.011782644857222068,0.011736438406801589,0.003373070880694945,0.011805748082432307,0.02264116070603456,0.0004158580537843083 diff --git a/workflow/.tests/unit/amplicon_cov/expected/20200729/cov_heatmap.pdf b/workflow/.tests/unit/amplicon_cov/expected/20200729/cov_heatmap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d2d4e025be00cfa4cca627d5d0ec009975d0e320 GIT binary patch literal 22197 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 x3;3-Ah{?2_oUjT7hd5nzv;rU}pk+MDkR+^ literal 0 HcmV?d00001 diff --git a/workflow/.tests/unit/test_amplicon_cov.py b/workflow/.tests/unit/test_amplicon_cov.py index 5056400..e81e9d4 100644 --- a/workflow/.tests/unit/test_amplicon_cov.py +++ b/workflow/.tests/unit/test_amplicon_cov.py @@ -1 +1,94 @@ """Tests for the `amplicon_cov` rules.""" + + +import os +import subprocess as sp +from tempfile import TemporaryDirectory +import shutil +from pathlib import Path + +from common import OutputCheckerV2 + + +def print_directory_contents(path): + """Prints the contents of the directory at the given path.""" + try: + with os.scandir(path) as entries: + for entry in entries: + print(entry.name) + except FileNotFoundError: + print(f"Directory not found: {path}") + + +def test_get_coverage_for_batch(): + """ + Test the get_coverage_for_batch rule. + using test data from sars-cov-2. + + This version of the test automatically finds the necessary files. + """ + with TemporaryDirectory() as tmpdir: + workdir = Path(tmpdir) / "workdir" + workdir.mkdir(exist_ok=True) + + # Create necessary subdirectories + (workdir / "config").mkdir(exist_ok=True) + (workdir / "data").mkdir(exist_ok=True) + (workdir / "results").mkdir(exist_ok=True) + + # Define paths + mock_data_path = Path("workflow/.tests/unit/amplicon_cov/data") + expected_path = Path("workflow/.tests/unit/amplicon_cov/expected") + config_path = Path("workflow/.tests/unit/amplicon_cov/amplicon_cov.yaml") + + # Copy config to the temporary workdir + wrk_config_path = workdir / "config" / config_path.name + shutil.copy(config_path, wrk_config_path) + + # Copy mock data to the temporary workdir + wrk_mock_data_path = Path(workdir, "data") + shutil.copytree(mock_data_path, wrk_mock_data_path, dirs_exist_ok=True) + + # Print the contents of the workdir + + # Print the contents of the current directory + print_directory_contents(workdir) + print_directory_contents(wrk_mock_data_path) + + # Run the test job + + sp.check_output( + [ + "snakemake", + "--snakefile", + "workflow/rules/amplicon_cov.smk", + "--configfile", + str(wrk_config_path), + "--config", + "--directory", + str(workdir), + "--cores", + "1", + "20200729/cov_heatmap.pdf", + ] + ) + + # Check the output + # assert (workdir / "results/").exists() + + # show me the full tree of files in the workdir + for root, dirs, files in os.walk(workdir): + print(root) + for file in files: + print(f" {file}") + + # Compare output with expected result using the OutputChecker + checker = OutputCheckerV2( + workdir / "data", + expected_path, + workdir, + configdir=workdir / "config", + tolerance=1e-4, + ) + + checker.check() From 8fe59efdd356dd438e100f269aede4ea8ae144e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Thu, 24 Oct 2024 17:19:36 +0200 Subject: [PATCH 6/8] adding unit tests --- workflow/.tests/unit/common.py | 25 +++++++++++++++++------ workflow/.tests/unit/test_amplicon_cov.py | 4 ++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/workflow/.tests/unit/common.py b/workflow/.tests/unit/common.py index 8933a72..242e92c 100644 --- a/workflow/.tests/unit/common.py +++ b/workflow/.tests/unit/common.py @@ -2,14 +2,16 @@ Common code for unit testing of rules generated with Snakemake 8.18.2. """ -from pathlib import Path import os -import pandas as pd +import sys + +from pathlib import Path +from typing import List import csv import math -import sys +import pandas as pd def compare_csv_files( @@ -47,7 +49,13 @@ class OutputCheckerV2: """ def __init__( - self, data_path, expected_path, workdir, configdir=None, tolerance=1e-4 + self, + data_path, + expected_path, + workdir, + configdir=None, + tolerance=1e-4, + ignore_files: List[str] = ["ignore"], ): """ Initialize the output checker. @@ -56,6 +64,7 @@ def __init__( self.expected_path = expected_path self.workdir = workdir self.tolerance = tolerance + self.ignore_files = ignore_files if configdir is None: self.configdir = workdir / "config" @@ -89,16 +98,20 @@ def check(self): f = (Path(path) / f).relative_to(self.workdir) if str(f).startswith(".snakemake"): continue + if self.ignore_files: + if any(str(f).endswith(prefix) for prefix in self.ignore_files): + print(f"Ignoring file by type: {str(f)}") + continue if f in expected_files: self.compare_files(self.workdir / f, self.expected_path / f) elif f in input_files: # ignore input files - print("Ignoring input file: ", file=sys.stderr) + print(f"Ignoring input file: {str(f)}") print(f, file=sys.stderr) pass elif f in config_files: # ignore config files - print("Ignoring config file: ", file=sys.stderr) + print(f"Ignoring config file: {str(f)}") print(f, file=sys.stderr) pass else: diff --git a/workflow/.tests/unit/test_amplicon_cov.py b/workflow/.tests/unit/test_amplicon_cov.py index e81e9d4..a814673 100644 --- a/workflow/.tests/unit/test_amplicon_cov.py +++ b/workflow/.tests/unit/test_amplicon_cov.py @@ -35,11 +35,13 @@ def test_get_coverage_for_batch(): (workdir / "config").mkdir(exist_ok=True) (workdir / "data").mkdir(exist_ok=True) (workdir / "results").mkdir(exist_ok=True) + (workdir / "scripts").mkdir(exist_ok=True) # for the script # Define paths mock_data_path = Path("workflow/.tests/unit/amplicon_cov/data") expected_path = Path("workflow/.tests/unit/amplicon_cov/expected") config_path = Path("workflow/.tests/unit/amplicon_cov/amplicon_cov.yaml") + script_path = Path("scripts/amplicon_covs.py") # Copy config to the temporary workdir wrk_config_path = workdir / "config" / config_path.name @@ -48,6 +50,7 @@ def test_get_coverage_for_batch(): # Copy mock data to the temporary workdir wrk_mock_data_path = Path(workdir, "data") shutil.copytree(mock_data_path, wrk_mock_data_path, dirs_exist_ok=True) + shutil.copy(script_path, workdir / "scripts" / script_path.name) # Print the contents of the workdir @@ -89,6 +92,7 @@ def test_get_coverage_for_batch(): workdir, configdir=workdir / "config", tolerance=1e-4, + ignore_files=["pdf", "py", "log"], ) checker.check() From 9185d5b07140e771e09e4678f2a49f840056b5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Thu, 24 Oct 2024 17:21:14 +0200 Subject: [PATCH 7/8] formating --- workflow/.tests/unit/test_amplicon_cov.py | 1 - 1 file changed, 1 deletion(-) diff --git a/workflow/.tests/unit/test_amplicon_cov.py b/workflow/.tests/unit/test_amplicon_cov.py index a814673..add285c 100644 --- a/workflow/.tests/unit/test_amplicon_cov.py +++ b/workflow/.tests/unit/test_amplicon_cov.py @@ -1,6 +1,5 @@ """Tests for the `amplicon_cov` rules.""" - import os import subprocess as sp from tempfile import TemporaryDirectory From 3760a09704cc705c5ff35ceff873da8a4dea9696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordon=20J=2E=20K=C3=B6hn?= Date: Fri, 25 Oct 2024 09:30:01 +0200 Subject: [PATCH 8/8] cleanup --- pyproject.toml | 3 +- workflow/.tests/unit/common.py | 27 +---- workflow/.tests/unit/test_amplicon_cov.py | 4 +- workflow/.tests/unit/test_smk_testing.py | 138 ---------------------- workflow/rules/smk_testing.smk | 36 ------ 5 files changed, 5 insertions(+), 203 deletions(-) delete mode 100644 workflow/.tests/unit/test_smk_testing.py delete mode 100644 workflow/rules/smk_testing.smk diff --git a/pyproject.toml b/pyproject.toml index fefee27..f1d0208 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,8 @@ matplotlib = "^3.9.2" seaborn = "^0.13.2" pandas-stubs = "^2.2.2.240807" click = "^8.1.7" -snakemake = "^8.20.4" +# Pinned as later snakemake version fail to unit test generation +snakemake = "8.18.1" [tool.poetry.group.dev.dependencies] pytest = "^7.2.1" diff --git a/workflow/.tests/unit/common.py b/workflow/.tests/unit/common.py index 242e92c..ee31f20 100644 --- a/workflow/.tests/unit/common.py +++ b/workflow/.tests/unit/common.py @@ -11,33 +11,8 @@ import csv import math -import pandas as pd - -def compare_csv_files( - file1_path: str, file2_path: str, tolerance: float = 1e-4 -) -> bool: - """ - Compare two CSV files with a given tolerance. - """ - df1 = pd.read_csv(file1_path, skiprows=[1]) - df2 = pd.read_csv(file2_path, skiprows=[1]) - - if df1.shape != df2.shape: - raise ValueError("DataFrames have different shapes") - - # check that the data frames contrain the same data types - assert df1.dtypes.equals(df2.dtypes) - - # check that the data frames contain the same data - pd.testing.assert_frame_equal( - df1, df2, check_exact=False, rtol=tolerance, atol=tolerance - ) - - return True - - -class OutputCheckerV2: +class OutputChecker: """ Check the output of a Snakemake rule given only the directories of the input data, expected output, and the working directory and diff --git a/workflow/.tests/unit/test_amplicon_cov.py b/workflow/.tests/unit/test_amplicon_cov.py index add285c..42f99d7 100644 --- a/workflow/.tests/unit/test_amplicon_cov.py +++ b/workflow/.tests/unit/test_amplicon_cov.py @@ -6,7 +6,7 @@ import shutil from pathlib import Path -from common import OutputCheckerV2 +from common import OutputChecker def print_directory_contents(path): @@ -85,7 +85,7 @@ def test_get_coverage_for_batch(): print(f" {file}") # Compare output with expected result using the OutputChecker - checker = OutputCheckerV2( + checker = OutputChecker( workdir / "data", expected_path, workdir, diff --git a/workflow/.tests/unit/test_smk_testing.py b/workflow/.tests/unit/test_smk_testing.py deleted file mode 100644 index 1134de7..0000000 --- a/workflow/.tests/unit/test_smk_testing.py +++ /dev/null @@ -1,138 +0,0 @@ -""" -This script tests the make_price_data rule. -""" - -import os -import sys -import subprocess as sp -from tempfile import TemporaryDirectory -import shutil -from pathlib import Path - -from common import compare_csv_files, OutputCheckerV2 - -sys.path.insert(0, os.path.dirname(__file__)) - - -def test_make_price_data(): - """ - Test the make_price_data rule. - """ - with TemporaryDirectory() as tmpdir: - workdir = Path(tmpdir) / "workdir" - workdir.mkdir(exist_ok=True) - - # Create necessary subdirectories - (workdir / "config").mkdir(exist_ok=True) - (workdir / "data").mkdir(exist_ok=True) - (workdir / "results").mkdir(exist_ok=True) - - # Define paths - mock_data_path = Path( - "workflow/.tests/unit/smk_testing/data/AMZN_2012-06-21_34200000_57600000_message_1.csv" - ) - expected_path = Path("workflow/.tests/unit/smk_testing/expected") - config_path = Path("config/smk_testing_config.yaml") - - # Copy config to the temporary workdir - shutil.copy(config_path, workdir / "config" / "smk_testing_config.yaml") - - # Copy mock data to the temporary workdir - shutil.copy(mock_data_path, workdir / "data" / mock_data_path.name) - - # Run the test job - - sp.check_output( - [ - "snakemake", - "--snakefile", - "workflow/rules/smk_testing.smk", - "--configfile", - str(workdir / "config" / "smk_testing_config.yaml"), - "--config", - f"orderbook={workdir}/data/AMZN_2012-06-21_34200000_57600000_message_1.csv", - f"statistics={workdir}/results/statistics.csv", - "--directory", - str(workdir), - "--cores", - "1", - "--forceall", - ] - ) - - # Check the output - assert (workdir / "results" / "statistics.csv").exists() - - # Compare output with expected result - files_match = compare_csv_files( - str(workdir / "results" / "statistics.csv"), - str(expected_path / "statistics.csv"), - ) - - assert files_match, "Files are different within the specified tolerance" - - -def test_make_price_data_auto_files(): - """ - Test the make_price_data rule. - - This version of the test automatically finds the necessary files. - """ - with TemporaryDirectory() as tmpdir: - workdir = Path(tmpdir) / "workdir" - workdir.mkdir(exist_ok=True) - - # Create necessary subdirectories - (workdir / "config").mkdir(exist_ok=True) - (workdir / "data").mkdir(exist_ok=True) - (workdir / "results").mkdir(exist_ok=True) - - # Define paths - mock_data_path = Path("workflow/.tests/unit/smk_testing/data") - expected_path = Path("workflow/.tests/unit/smk_testing/expected") - config_path = Path("config/smk_testing_config.yaml") - - # Copy config to the temporary workdir - shutil.copy(config_path, workdir / "config" / "smk_testing_config.yaml") - - # Copy mock data to the temporary workdir - shutil.copytree(mock_data_path, workdir / "data", dirs_exist_ok=True) - - # Run the test job - sp.check_output( - [ - "snakemake", - "--snakefile", - "workflow/rules/smk_testing.smk", - "--configfile", - str(workdir / "config" / "smk_testing_config.yaml"), - "--config", - f"orderbook={workdir}/data/AMZN_2012-06-21_34200000_57600000_message_1.csv", - f"statistics={workdir}/statistics.csv", - "--directory", - str(workdir), - "--cores", - "1", - "--forceall", - ] - ) - - # Check the output - assert (workdir / "statistics.csv").exists() - - # show me the full tree of files in the workdir - for root, dirs, files in os.walk(workdir): - print(root) - for file in files: - print(f" {file}") - - # Compare output with expected result using the OutputChecker - checker = OutputCheckerV2( - workdir / "data", - expected_path, - workdir, - configdir=workdir / "config", - tolerance=1e-4, - ) - - checker.check() diff --git a/workflow/rules/smk_testing.smk b/workflow/rules/smk_testing.smk deleted file mode 100644 index 5c93c06..0000000 --- a/workflow/rules/smk_testing.smk +++ /dev/null @@ -1,36 +0,0 @@ -import pandas as pd -import logging -from datetime import datetime, timedelta - - -# Use the specific config file for this test -configfile: "config/smk_testing_config.yaml" - - -rule make_price_data: - input: - orderbook=config["orderbook"], - output: - statistics=config["statistics"], - params: - interval=config["interval"], - run: - # Read the data - data = pd.read_csv(input.orderbook) - # assign the columns - data.columns = ["Time", "Type", "Order ID", "Size", "Price", "Direction"] - # get start time and end time of the data - start_time = data["Time"].min() - end_time = data["Time"].max() - # choose bounds for the intervals in seconds based on the config - interval_seconds = params.interval * 60 # convert minutes to seconds - bounds = range(int(start_time), int(end_time) + 1, interval_seconds) - statistics = data.groupby(pd.cut(data["Time"], bins=bounds)).agg( - ["mean", "std", "min", "max"] - ) - # filter for just one column price mean and add 30 for error checking - statistics = statistics["Price"]["mean"] + 30 - # current tollerance threshold is somewher around 250 - - # save the statistics - statistics.to_csv(output.statistics, index=False)