diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 477fcc6251185f0ea048f3015c608c4f935c2c3b..6458ae9769f0a701550abcec6f9e4f0b960939f7 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -113,7 +113,7 @@ func-test-ubuntu: - py.test test/test_functional/test_corepers* -vx - py.test test/test_functional/test_align-parser.py -vx - py.test test/test_functional/test_align.py -vx - # - py.test test/test_functional/test_tree* -vx + - py.test test/test_functional/test_tree* -vx - py.test test/test_functional/test_annote-parser.py -vx - py.test test/test_functional/test_annote.py -xv - py.test test/test_functional/test_prepare* -vx diff --git a/PanACoTA/subcommands/tree.py b/PanACoTA/subcommands/tree.py index 716c233562798df1dc832e7ddbcf28dadd1f7571..b0d24abe17c96296a613a9bdf33340cb34e35cc5 100755 --- a/PanACoTA/subcommands/tree.py +++ b/PanACoTA/subcommands/tree.py @@ -167,26 +167,7 @@ def build_parser(parser): parser to configure in order to extract command-line arguments """ import argparse - import multiprocessing - - def thread_num(param): - try: - param = int(param) - except Exception: - msg = "argument --threads threads: invalid int value: {}".format(param) - raise argparse.ArgumentTypeError(msg) - nb_cpu = multiprocessing.cpu_count() - if param > nb_cpu: - msg = ("You have {} threads on your computer, you cannot ask for more: " - "invalid value: {}").format(nb_cpu, param) - raise argparse.ArgumentTypeError(msg) - elif param < 0: - msg = ("Please provide a positive number of threads (or 0 for all threads): " - "Invalid value: {}").format(param) - raise argparse.ArgumentTypeError(msg) - elif param == 0: - return nb_cpu - return param + from PanACoTA import utils_argparse # Create command-line parser for all options and arguments to give @@ -210,7 +191,7 @@ def build_parser(parser): "default, no bootstrap is calculated. For IQtree, it " "will use ultrafast bootstrap (>=1000).")) - optional.add_argument("--threads", dest="threads", default=1, type=thread_num, + optional.add_argument("--threads", dest="threads", default=1, type=utils_argparse.thread_num, help=("add this option if you want to parallelize on several threads. " "Indicate on how many threads you want to parallelize. " "By default, it uses 1 thread. Put 0 if you want to use " diff --git a/test/test_functional/test_tree-parser.py b/test/test_functional/test_tree-parser.py index f70f2d8b18a39c7459c2a7a8a93c03c930b9dd2c..f598701fabb01ac31dcae3d818923d05e17afe15 100755 --- a/test/test_functional/test_tree-parser.py +++ b/test/test_functional/test_tree-parser.py @@ -93,7 +93,7 @@ def test_parser_quicktree_parallel(capsys): parser = argparse.ArgumentParser(description="Tree", add_help=False) tree.build_parser(parser) with pytest.raises(SystemExit): - tree.parse(parser, "-a align -s quicktree --threads 5 -o outdir".split()) + tree.parse(parser, "-a align -s quicktree --threads 2 -o outdir".split()) _, err = capsys.readouterr() assert ("You cannot run quicktree with multiple threads. Choose another software, or remove " "the --threads option.") in err @@ -317,14 +317,16 @@ def test_parser_threads_ok(): """ parser = argparse.ArgumentParser(description="Tree", add_help=False) tree.build_parser(parser) - args = tree.parse(parser, "-a align -o outdir --threads 5".split()) + import multiprocessing + nb = multiprocessing.cpu_count() + args = tree.parse(parser, f"-a align -o outdir --threads {nb}".split()) assert args.alignment == "align" assert args.boot is None assert args.outdir == "outdir" assert args.soft == "iqtree" assert args.model == "GTR" assert args.write_boot is False - assert args.threads == 5 + assert args.threads == nb assert args.verbose == 0 assert args.quiet == False diff --git a/test/test_functional/test_tree.py b/test/test_functional/test_tree.py index 6215f493d7c6881ddfe3b90d994b0b3b56bd4004..72758e21825d2d06d3062bd3e2194fea2b0ae976 100755 --- a/test/test_functional/test_tree.py +++ b/test/test_functional/test_tree.py @@ -33,7 +33,8 @@ def setup_teardown_module(): - remove all log files - remove directory with generated results """ - os.mkdir(GENEPATH) + if not os.path.isdir(GENEPATH): + os.mkdir(GENEPATH) print("setup") yield @@ -50,9 +51,10 @@ def test_main_default(capsys): soft = "iqtree" model = "GTR" threads = 1 + verbose = 3 cmd = "cmd test_main_default" - tree.main(cmd, ALIGNMENT, outdir, soft, model, threads) + tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, verbose=verbose) # Check output files iq_log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.iqtree_tree.log") assert os.path.isfile(iq_log_file) @@ -73,6 +75,7 @@ def test_main_default(capsys): assert os.path.isfile(logs_base + ".err") # Check logs out, err = capsys.readouterr() + print(out) assert "Running IQtree..." in out assert ("IQtree command: iqtree -s test/data/align/exp_files/exp_pers4genomes.grp.aln " "-nt 1 -m GTR -st DNA -pre test/data/tree/generated_by_func_tests/" @@ -182,7 +185,7 @@ def test_main_fasttree(capsys): threads = 1 boot = 100 cmd = "cmd: test_main_fasttree" - tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=boot) + tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=boot, verbose=2) # Check output files # fastme logfile log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.fasttree.log") @@ -201,11 +204,12 @@ def test_main_fasttree(capsys): # log files logs_base = os.path.join(outdir, "PanACoTA-tree-fasttree.log") assert os.path.isfile(logs_base) - assert not os.path.isfile(logs_base + ".details") + assert os.path.isfile(logs_base + ".details") assert not os.path.isfile(logs_base + ".debug") assert os.path.isfile(logs_base + ".err") # Check logs out, err = capsys.readouterr() + print(out) assert "Running FasttreeMP..." in out assert ("Fasttree command: FastTreeMP -nt -gtr -noml -nocat -boot 100 " "-log test/data/tree/generated_by_func_tests/exp_pers4genomes.grp.aln.fasttree.log " @@ -224,7 +228,8 @@ def test_main_iqtree2_newdir(capsys): threads = 1 cmd = "cmd test_main_default" - tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=1000, write_boot=True) + tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=1000, write_boot=True, + verbose=2) # Check output files # Check iqtree logfile iq_log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.iqtree_tree.log") @@ -254,6 +259,7 @@ def test_main_iqtree2_newdir(capsys): logs_base = os.path.join(outdir, "PanACoTA-tree-iqtree2.log") assert os.path.isfile(logs_base) assert os.path.isfile(logs_base + ".err") + assert os.path.isfile(logs_base + ".details") # Check logs out, err = capsys.readouterr() assert "Running IQtree..." in out @@ -278,7 +284,7 @@ def test_main_from_parse(capsys): args.model = "HKY" args.write_boot = False args.threads = 1 - args.verbose = 1 + args.verbose = 2 args.quiet = False args.memory = False args.fast = False