[med-svn] [Git][med-team/augur][upstream] New upstream version 18.0.0

Andreas Tille (@tille) gitlab at salsa.debian.org
Tue Oct 11 20:23:52 BST 2022



Andreas Tille pushed to branch upstream at Debian Med / augur


Commits:
80d6fd48 by Andreas Tille at 2022-10-11T20:45:37+02:00
New upstream version 18.0.0
- - - - -


26 changed files:

- CHANGES.md
- README.md
- augur/__init__.py
- augur/__version__.py
- augur/argparse_.py
- augur/export_v1.py
- augur/export_v2.py
- augur/filter.py
- augur/refine.py
- augur/tree.py
- docs/api/augur.import.rst
- − docs/api/augur.import_beast.rst
- docs/api/augur.rst
- − docs/api/augur.util_support.metadata_file.rst
- docs/api/augur.util_support.rst
- − docs/api/augur.util_support.shell_command_runner.rst
- docs/contribute/DEV_DOCS.md
- docs/index.rst
- docs/installation/installation.md
- docs/usage/cli/cli.rst
- + docs/usage/cli/measurements.rst
- setup.py
- tests/builds/add_to_alignment/Snakefile
- tests/builds/runner.sh
- tests/functional/export_v2.t
- tests/functional/tree.t


Changes:

=====================================
CHANGES.md
=====================================
@@ -3,11 +3,35 @@
 ## __NEXT__
 
 
+## 18.0.0 (21 September 2022)
+
+### Major Changes
+
+* export: The `--node-data` option may now be given multiple times to provide additional `.json` files.  Previously, subsequent occurrences of the option overrode prior occurrences.  This is a **breaking change**, although we expect few usages to be impacted.  Each occurrence of the option may still specify multiple files at a time. [#1010][] (@tsibley)
+
+### Bug Fixes
+
+
+* refine: 17.1.0 updated TreeTime to version 0.9.2 and introduced the `refine` flag `--use-fft`. This makes previously costly marginal date inference cheaper. This update adjusts when `refine` runs marginal date inference during its iterative optimization. Without the `use-fft` flag, it will now behave as it did before 17.1.0 (marginal inference only during final iterations). With the `--use-fft` flag, marginal date inference will be used at every step during the iteration if refine is run with `--date-inference marginal` [#1034][]. (@rneher)
+* tree: When using IQtree as tre builder, `--nthreads` now sets the maximum number of threads (IQtree argument `-ntmax`). The actual number of threads to use can be specified by the user through the tree-builder-arg `-nt` which defaults to `-nt AUTO`, causing IQtree to automatically chose the best number of threads to use [#1042][] (@corneliusroemer)
+* Make cvxopt as a required dependency, since it is required for titer models to work [#1035][]. (@victorlin)
+* filter: Fix compatibility with Pandas 1.5.0 which could cause an unexpected `AttributeError` with an invalid `--query` given to `augur filter`. [#1050][] (@tsibley)
+* refine: Add `--verbosity` argument that is passed down to TreeTime to facilitate monitoring and debugging. [#1033][] (@anna-parker)
+* Improve handling of errors from TreeTime. [#1033][] (@anna-parker)
+
+[#1010]: https://github.com/nextstrain/augur/pull/1010
+[#1033]: https://github.com/nextstrain/augur/pull/1033
+[#1034]: https://github.com/nextstrain/augur/pull/1034
+[#1035]: https://github.com/nextstrain/augur/pull/1035
+[#1042]: https://github.com/nextstrain/augur/pull/1042
+[#1050]: https://github.com/nextstrain/augur/pull/1050
+
+
 ## 17.1.0 (19 August 2022)
 
 ### Features
 
-* refine: Upgrade TreeTime from 0.8.6 to >= 0.9.2 which enables a speedup of timetree inference in marginal mode due to the use of Fast Fourier Transforms [#1018][]. (@rneher and @anna-parker)
+* refine: Upgrade TreeTime from 0.8.6 to >= 0.9.2 which enables a speedup of timetree inference in marginal mode due to the use of Fast Fourier Transforms [#1018][]. (@rneher and @anna-parker). Use the `refine` flag `--use-fft` to use this feature.
 
 ### Bug Fixes
 


=====================================
README.md
=====================================
@@ -29,11 +29,10 @@ Try out an analysis of real virus data by [completing the Zika tutorial](https:/
 
 ## Documentation
 
-* [Overview of how Augur fits together with other Nextstrain tools](https://nextstrain.org/docs/getting-started/introduction#open-source-tools-for-the-community)
-* [Overview of Augur usage](https://nextstrain.org/docs/bioinformatics/introduction-to-augur)
+* [Overview of how Augur fits together with other Nextstrain tools](https://docs.nextstrain.org/en/latest/learn/parts.html)
+* [Overview of Augur usage](https://docs.nextstrain.org/projects/augur/en/stable/usage/usage.html)
 * [Technical documentation for Augur](https://docs.nextstrain.org/projects/augur/en/stable/installation/installation.html)
 * [Contributor guide](https://github.com/nextstrain/.github/blob/master/CONTRIBUTING.md)
-* [Project board with available issues](https://github.com/orgs/nextstrain/projects/6)
 * [Developer docs for Augur](./docs/contribute/DEV_DOCS.md)
 * [Changelog](./CHANGES.md)
 


=====================================
augur/__init__.py
=====================================
@@ -9,6 +9,7 @@ import importlib
 import traceback
 from textwrap import dedent
 from types import SimpleNamespace
+from treetime import TreeTimeError, TreeTimeUnknownError
 
 from .errors import AugurError
 from .io import print_err
@@ -72,6 +73,20 @@ def run(argv):
     except FileNotFoundError as e:
         print_err(f"ERROR: {e.strerror}: '{e.filename}'")
         sys.exit(2)
+    except TreeTimeUnknownError as e:
+        print_err(dedent("""\
+            ERROR from TreeTime: An error occurred in TreeTime (see above). This may be due to an issue with TreeTime or Augur.
+            Please report you are calling TreeTime via Augur. 
+            """))
+        sys.exit(2)
+    except TreeTimeError as e:
+        print_err(f"ERROR: {e}")
+        print_err("\n")
+        print_err(dedent("""\
+            ERROR from TreeTime: This error is most likely due to a problem with your input data.
+            Please check your input data and try again. If you continue to have problems, please open a new issue including
+            the original command and the error above:  <https://github.com/nextstrain/augur/issues/new/choose>
+            """))
     except Exception:
         traceback.print_exc(file=sys.stderr)
         print_err("\n")


=====================================
augur/__version__.py
=====================================
@@ -1,4 +1,4 @@
-__version__ = '17.1.0'
+__version__ = '18.0.0'
 
 
 def is_augur_version_compatible(version):


=====================================
augur/argparse_.py
=====================================
@@ -57,3 +57,22 @@ class HideAsFalseAction(Action):
     """
     def __call__(self, parser, namespace, values, option_string=None):
         setattr(namespace, self.dest, option_string[2:6] != 'hide')
+
+
+# XXX TODO: Drop this when we drop support for 3.7 and use builtin "extend"
+# action.
+class ExtendAction(Action):
+    """
+    Loosely backported version of builtin "extend" action
+    (argparse._ExtendAction) in CPython v3.10.5-172-gf118661a18.  Some of the
+    ceremony we don't need has been ditched.
+
+    >>> import argparse
+    >>> p = argparse.ArgumentParser()
+    >>> a = p.add_argument("-x", action=ExtendAction, nargs="+")
+    >>> p.parse_args(["-x", "a", "b", "-x", "c", "-x", "d"]).x
+    ['a', 'b', 'c', 'd']
+    """
+    def __call__(self, parser, namespace, values, option_string=None):
+        current = getattr(namespace, self.dest, None) or []
+        setattr(namespace, self.dest, [*current, *values])


=====================================
augur/export_v1.py
=====================================
@@ -9,6 +9,7 @@ import numpy as np
 from Bio import Phylo
 from argparse import SUPPRESS
 from collections import defaultdict
+from .argparse_ import ExtendAction
 from .io import read_metadata
 from .utils import read_node_data, write_json, read_config, read_lat_longs, read_colors
 
@@ -311,7 +312,7 @@ def add_core_args(parser):
     core = parser.add_argument_group("REQUIRED")
     core.add_argument('--tree','-t', required=True, help="tree to perform trait reconstruction on")
     core.add_argument('--metadata', required=True, metavar="FILE", help="sequence metadata, as CSV or TSV")
-    core.add_argument('--node-data', required=True, nargs='+', help="JSON files with meta data for each node")
+    core.add_argument('--node-data', required=True, nargs='+', action=ExtendAction, help="JSON files with meta data for each node")
     core.add_argument('--output-tree', help="JSON file name that is passed on to auspice (e.g., zika_tree.json).")
     core.add_argument('--output-meta', help="JSON file name that is passed on to auspice (e.g., zika_meta.json).")
     core.add_argument('--auspice-config', help="file with auspice configuration")


=====================================
augur/export_v2.py
=====================================
@@ -10,6 +10,7 @@ import numbers
 import re
 from Bio import Phylo
 
+from .argparse_ import ExtendAction
 from .io import read_metadata
 from .utils import read_node_data, write_json, read_config, read_lat_longs, read_colors
 from .validate import export_v2 as validate_v2, auspice_config_v2 as validate_auspice_config_v2, ValidateError
@@ -826,7 +827,7 @@ def register_parser(parent_subparsers):
         title="REQUIRED"
     )
     required.add_argument('--tree','-t', metavar="newick", required=True, help="Phylogenetic tree, usually output from `augur refine`")
-    required.add_argument('--node-data', metavar="JSON", required=True, nargs='+', help="JSON files containing metadata for nodes in the tree")
+    required.add_argument('--node-data', metavar="JSON", required=True, nargs='+', action=ExtendAction, help="JSON files containing metadata for nodes in the tree")
     required.add_argument('--output', metavar="JSON", required=True, help="Ouput file (typically for visualisation in auspice)")
 
     config = parser.add_argument_group(


=====================================
augur/filter.py
=====================================
@@ -863,7 +863,12 @@ def apply_filters(metadata, exclude_by, include_by):
             )
         except Exception as e:
             if filter_function.__name__ == 'filter_by_query':
-                if isinstance(e, pd.core.computation.ops.UndefinedVariableError):
+                try:
+                    # pandas ≥1.5.0 only
+                    UndefinedVariableError = pd.errors.UndefinedVariableError
+                except AttributeError:
+                    UndefinedVariableError = pd.core.computation.ops.UndefinedVariableError
+                if isinstance(e, UndefinedVariableError):
                     raise AugurError(f"Query contains a column that does not exist in metadata.") from e
                 raise AugurError(f"Error when applying query. Ensure the syntax is valid per <https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-query>.") from e
             else:


=====================================
augur/refine.py
=====================================
@@ -8,7 +8,7 @@ from .dates import get_numerical_dates
 from .io import read_metadata
 from .utils import read_tree, write_json, InvalidTreeError
 from .errors import AugurError
-from treetime.vcf_utils import read_vcf, write_vcf
+from treetime.vcf_utils import read_vcf
 from treetime.seq_utils import profile_maps
 
 def refine(tree=None, aln=None, ref=None, dates=None, branch_length_inference='auto',
@@ -55,9 +55,9 @@ def refine(tree=None, aln=None, ref=None, dates=None, branch_length_inference='a
     if confidence and use_marginal:
         # estimate confidence intervals via marginal ML and assign
         # marginal ML times to nodes
-        marginal = 'assign'
+        marginal = 'always' if use_fft else 'assign'
     else:
-        marginal = confidence
+        marginal = 'only-final' if confidence else False
 
     # uncertainty of the the clock rate is relevant if confidence intervals are estimated
     if confidence and clock_std:
@@ -70,7 +70,7 @@ def refine(tree=None, aln=None, ref=None, dates=None, branch_length_inference='a
     tt.run(infer_gtr=infer_gtr, root=reroot, Tc=Tc, time_marginal=marginal,
            branch_length_mode=branch_length_inference, resolve_polytomies=resolve_polytomies,
            max_iter=max_iter, fixed_pi=fixed_pi, fixed_clock_rate=clock_rate,
-           vary_rate=vary_rate, use_covariation=covariance, **kwarks)
+           vary_rate=vary_rate, use_covariation=covariance, raise_uncaught_exceptions=True, **kwarks)
 
     if confidence:
         for n in tt.tree.find_clades():
@@ -130,6 +130,7 @@ def register_parser(parent_subparsers):
     parser.add_argument('--divergence-units', type=str, choices=['mutations', 'mutations-per-site'],
                         default='mutations-per-site', help='Units in which sequence divergences is exported.')
     parser.add_argument('--seed', type=int, help='seed for random number generation')
+    parser.add_argument('--verbosity', type=int, default=1, help='treetime verbosity, between 0 and 6 (higher values more output)')
     parser.set_defaults(covariance=True)
     return parser
 
@@ -217,18 +218,17 @@ def run(args):
             time_inference_mode = 'always' if args.date_inference=='marginal' else 'only-final'
         else:
             time_inference_mode = 'always' if args.date_inference=='marginal' else 'never'
-        try:
-            tt = refine(tree=T, aln=aln, ref=ref, dates=dates, confidence=args.date_confidence,
-                        reroot=args.root, # or 'best', # We now have a default in param spec - this just adds confusion.
-                        Tc=0.01 if args.coalescent is None else args.coalescent, #use 0.01 as default coalescent time scale
-                        use_marginal = time_inference_mode, use_fft=args.use_fft,
-                        branch_length_inference = args.branch_length_inference or 'auto',
-                        precision = 'auto' if args.precision is None else args.precision,
-                        clock_rate=args.clock_rate, clock_std=args.clock_std_dev,
-                        clock_filter_iqd=args.clock_filter_iqd,
-                        covariance=args.covariance, resolve_polytomies=(not args.keep_polytomies))
-        except BaseException as err:
-            raise AugurError(f"Was unable to refine time trees:\n\n{err}")
+
+        tt = refine(tree=T, aln=aln, ref=ref, dates=dates, confidence=args.date_confidence,
+                    reroot=args.root, # or 'best', # We now have a default in param spec - this just adds confusion.
+                    Tc=0.01 if args.coalescent is None else args.coalescent, #use 0.01 as default coalescent time scale
+                    use_marginal = time_inference_mode, use_fft=args.use_fft,
+                    branch_length_inference = args.branch_length_inference or 'auto',
+                    precision = 'auto' if args.precision is None else args.precision,
+                    clock_rate=args.clock_rate, clock_std=args.clock_std_dev,
+                    clock_filter_iqd=args.clock_filter_iqd,
+                    covariance=args.covariance, resolve_polytomies=(not args.keep_polytomies),
+                    verbosity=args.verbosity)
 
         node_data['clock'] = {'rate': tt.date2dist.clock_rate,
                               'intercept': tt.date2dist.intercept,
@@ -264,7 +264,7 @@ def run(args):
                 except ValueError as err:
                     raise ValueError(f"HINT: This error may be because your specified root with name '{args.root}' was not found in your alignment file") from err
 
-        tt = TreeAnc(tree=T, aln=aln, ref=ref, gtr='JC69', verbose=1)
+        tt = TreeAnc(tree=T, aln=aln, ref=ref, gtr='JC69', verbose=args.verbosity)
 
     node_data['nodes'] = collect_node_data(T, attributes)
     if args.divergence_units=='mutations-per-site': #default


=====================================
augur/tree.py
=====================================
@@ -32,7 +32,10 @@ DEFAULT_ARGS = {
     # with -fast, although there's probably no particular reason we have to.
     # Refer to the handling of -fast in utils/tools.cpp:
     #   https://github.com/Cibiv/IQ-TREE/blob/44753aba/utils/tools.cpp#L2926-L2936
-    "iqtree": "-ninit 2 -n 2 -me 0.05",
+    # Increasing threads (nt) can cause IQtree to run longer, hence use AUTO by default
+    # Auto makes IQtree chose the optimal number of threads
+    # Redo prevents IQtree errors when a run was aborted and restarted
+    "iqtree": "-ninit 2 -n 2 -me 0.05 -nt AUTO -redo",
 }
 
 class ConflictingArgumentsException(Exception):
@@ -60,12 +63,12 @@ def check_conflicting_args(tree_builder_args, defaults):
         When any user-provided arguments match those in the defaults.
 
 
-    >>> defaults = ("-nt", "-m", "-s")
+    >>> defaults = ("-ntmax", "-m", "-s")
     >>> check_conflicting_args("-czb -n 2", defaults)
-    >>> check_conflicting_args("-czb -nt 2", defaults)
+    >>> check_conflicting_args("-czb -ntmax 2", defaults)
     Traceback (most recent call last):
         ...
-    augur.tree.ConflictingArgumentsException: The following tree builder arguments conflict with hardcoded defaults. Remove these arguments and try again: -nt
+    augur.tree.ConflictingArgumentsException: The following tree builder arguments conflict with hardcoded defaults. Remove these arguments and try again: -ntmax
 
     """
     # Parse tree builder argument string into a list of shell arguments. This
@@ -235,26 +238,13 @@ def build_iqtree(aln_file, out_file, substitution_model="GTR", clean_up=True, nt
             ofile.write(tmp_line)
 
     # Check tree builder arguments for conflicts with hardcoded defaults..
-    check_conflicting_args(tree_builder_args, ("-nt", "-s", "-m"))
-
-    # Use IQ-TREE's auto-scaling of threads when the user has requested more
-    # threads than there are sequences. This approach avoids an error from
-    # IQ-TREE when num_seq < nthreads (as when users request `-nthreads auto` on
-    # a machine with many cores and fewer input sequences) and also avoids
-    # requesting as many threads as there are sequences when there may be fewer
-    # available threads on the current machine.
-    if num_seqs < nthreads:
-        nthreads = "AUTO"
-        print(
-            "WARNING: more threads requested than there are sequences; falling back to IQ-TREE's `-nt AUTO` mode.",
-            file=sys.stderr
-        )
+    check_conflicting_args(tree_builder_args, ("-ntmax", "-s", "-m"))
 
     if substitution_model.lower() != "auto":
-        call = [iqtree, "-nt", str(nthreads), "-s", shquote(tmp_aln_file),
+        call = [iqtree, "-ntmax", str(nthreads), "-s", shquote(tmp_aln_file),
                 "-m", substitution_model, tree_builder_args, ">", log_file]
     else:
-        call = [iqtree, "-nt", str(nthreads), "-s", shquote(tmp_aln_file), tree_builder_args, ">", shquote(log_file)]
+        call = [iqtree, "-ntmax", str(nthreads), "-s", shquote(tmp_aln_file), tree_builder_args, ">", shquote(log_file)]
 
     cmd = " ".join(call)
 
@@ -407,7 +397,7 @@ def register_parser(parent_subparsers):
     parser.add_argument('--substitution-model', default="GTR",
                                 help='substitution model to use. Specify \'auto\' to run ModelTest. Currently, only available for IQTREE.')
     parser.add_argument('--nthreads', type=nthreads_value, default=1,
-                                help="number of threads to use; specifying the value 'auto' will cause the number of available CPU cores on your system, if determinable, to be used")
+                                help="maximum number of threads to use; specifying the value 'auto' will cause the number of available CPU cores on your system, if determinable, to be used")
     parser.add_argument('--vcf-reference', type=str, help='fasta file of the sequence the VCF was mapped to')
     parser.add_argument('--exclude-sites', type=str, help='file name of one-based sites to exclude for raw tree building (BED format in .bed files, second column in tab-delimited files, or one position per line)')
     parser.add_argument('--tree-builder-args', type=str, help=f"""arguments to pass to the tree builder either augmenting or overriding the default arguments (except for input alignment path, number of threads, and substitution model).


=====================================
docs/api/augur.import.rst
=====================================
@@ -1,7 +1,7 @@
 augur.import module
 ===================
 
-.. automodule:: augur.import
+.. automodule:: augur.import_
    :members:
    :undoc-members:
    :show-inheritance:


=====================================
docs/api/augur.import_beast.rst deleted
=====================================
@@ -1,7 +0,0 @@
-augur.import\_beast module
-==========================
-
-.. automodule:: augur.import_beast
-   :members:
-   :undoc-members:
-   :show-inheritance:


=====================================
docs/api/augur.rst
=====================================
@@ -30,7 +30,6 @@ Submodules
    augur.frequencies
    augur.frequency_estimators
    augur.import
-   augur.import_beast
    augur.index
    augur.io
    augur.lbi


=====================================
docs/api/augur.util_support.metadata_file.rst deleted
=====================================
@@ -1,7 +0,0 @@
-augur.util\_support.metadata\_file module
-=========================================
-
-.. automodule:: augur.util_support.metadata_file
-   :members:
-   :undoc-members:
-   :show-inheritance:


=====================================
docs/api/augur.util_support.rst
=====================================
@@ -14,8 +14,6 @@ Submodules
    augur.util_support.color_parser
    augur.util_support.color_parser_line
    augur.util_support.date_disambiguator
-   augur.util_support.metadata_file
    augur.util_support.node_data
    augur.util_support.node_data_file
    augur.util_support.node_data_reader
-   augur.util_support.shell_command_runner


=====================================
docs/api/augur.util_support.shell_command_runner.rst deleted
=====================================
@@ -1,7 +0,0 @@
-augur.util\_support.shell\_command\_runner module
-=================================================
-
-.. automodule:: augur.util_support.shell_command_runner
-   :members:
-   :undoc-members:
-   :show-inheritance:


=====================================
docs/contribute/DEV_DOCS.md
=====================================
@@ -190,6 +190,8 @@ Versions for this project, Augur, from 3.0.0 onwards aim to follow the
 
 ##### 4. Update on Bioconda
 
+First, check if the dependency list in [setup.py](https://github.com/nextstrain/augur/blob/HEAD/setup.py) had any changes since the previous version.
+
 For versions without dependency changes:
 
 1. Wait for an auto-bump PR in [bioconda-recipes][].


=====================================
docs/index.rst
=====================================
@@ -9,8 +9,8 @@ Augur: A bioinformatics toolkit for phylogenetic analysis
    The documentation you are viewing is Augur's reference guide, which means it is information-oriented and targeted at users who just need info about how Augur works.
 
    * If you have a question about how to achieve a specific goal with Augur, check out our :doc:`Augur-focused How-to Guides section <docs.nextstrain.org:guides/bioinformatics/index>` in the main Nextstrain documentation.
-   * If you want to learn the basics of how to use Augur from scratch, check out our :doc:`Zika tutorial <docs.nextstrain.org:tutorials/zika>` in the main Nextstrain documentation.
-   * If you want to understand how Augur fits together with Auspice to visualize results, check out our :doc:`Data Formats section <docs.nextstrain.org:reference/formats/data-formats>` in the main Nextstrain documentation.
+   * If you want to learn the basics of how to use Augur from scratch, check out :doc:`docs.nextstrain.org:tutorials/creating-a-workflow` in the main Nextstrain documentation.
+   * If you want to understand how Augur fits together with Auspice to visualize results, check out our :doc:`Data Formats section <docs.nextstrain.org:reference/data-formats>` in the main Nextstrain documentation.
 
 
 


=====================================
docs/installation/installation.md
=====================================
@@ -80,12 +80,6 @@ python3 -m pip install .
 ```
 
 This install depends on a fairly minimal set of external Python libraries.
-There are some functions in augur that require a larger set of dependencies.
-These can be installed via:
-
-```bash
-python3 -m pip install '.[full]'
-```
 
 If you wish to also install the development dependencies, and install augur in an "editable" mode whereby changes to the source code are reflected in your version of `augur` then run:
 


=====================================
docs/usage/cli/cli.rst
=====================================
@@ -30,3 +30,4 @@ We're in the process of adding examples and more extensive documentation for eac
 	validate
 	version
 	import
+	measurements


=====================================
docs/usage/cli/measurements.rst
=====================================
@@ -0,0 +1,9 @@
+==================
+augur measurements
+==================
+
+.. argparse::
+    :module: augur
+    :func: make_parser
+    :prog: augur
+    :path: measurements


=====================================
setup.py
=====================================
@@ -53,20 +53,16 @@ setuptools.setup(
     install_requires = [
         "bcbio-gff >=0.6.0, ==0.6.*",
         "biopython >=1.67, !=1.77, !=1.78",
+        "cvxopt >=1.1.9, ==1.*",
         "isodate ==0.6.*",
         "jsonschema >=3.0.0, ==3.*",
         "networkx >= 2.5, ==2.*",
         "packaging >=19.2",
         "pandas >=1.0.0, ==1.*",
-        "phylo-treetime >=0.9.2, ==0.9.*",
+        "phylo-treetime >=0.9.3, ==0.9.*",
         "xopen >=1.0.1, ==1.*"
     ],
     extras_require = {
-        'full': [
-            "cvxopt >=1.1.9, ==1.*",
-            "matplotlib >=2.0, ==2.*",
-            "seaborn >=0.9.0, ==0.9.*"
-        ],
         'dev': [
             "cram >=0.7",
             "deepdiff >=4.3.2",


=====================================
tests/builds/add_to_alignment/Snakefile
=====================================
@@ -134,7 +134,7 @@ rule export:
         auspice = rules.all.input.auspice
     shell:
         """
-        snakemake --cores 1 check
+        snakemake --cores all check
         augur export v2 \
             --tree {input.tree} \
             --metadata {input.metadata} \


=====================================
tests/builds/runner.sh
=====================================
@@ -1,4 +1,3 @@
-
 function errorFound {
   echo -e "\nTest Script Failed at Line $1"
   exit 2
@@ -11,20 +10,18 @@ echo -e "Running all tests\n-----------------\n\n"
 cd $(dirname "$BASH_SOURCE")
 
 if [ -d ./auspice ]; then
-    rm -rf auspice
+  rm -rf auspice
 fi
 mkdir auspice
 
-
 for snakefile in ./*/Snakefile; do
-    echo -e "\nRunning ${snakefile} (quietly)\n"
-    pushd $(dirname "${snakefile}") >/dev/null
-    snakemake --cores 1 clean --quiet 1>/dev/null
-    snakemake --cores 1 --quiet 1>/dev/null
-    cp auspice/*.json ../auspice
-    popd >/dev/null
+  echo -e "\nRunning ${snakefile} (quietly)\n"
+  pushd $(dirname "${snakefile}") >/dev/null
+  snakemake --cores all clean --quiet 1>/dev/null
+  snakemake --cores all --quiet 1>/dev/null
+  cp auspice/*.json ../auspice
+  popd >/dev/null
 done
 
 echo -e "\nAll tests passed. You can view the results by running"
 echo -e "auspice view --datasetDir $(pwd)/auspice"
-


=====================================
tests/functional/export_v2.t
=====================================
@@ -33,6 +33,19 @@ Export with auspice config JSON which defines scale & legend settings
   {}
 
 
+...same but with repeated --node-data options instead of a single multi-valued option
+  $ ${AUGUR} export v2 \
+  >   --tree export_v2/tree.nwk \
+  >   --node-data export_v2/div_node-data.json \
+  >   --node-data export_v2/location_node-data.json \
+  >   --auspice-config export_v2/auspice_config1.json \
+  >   --output "$TMP/dataset1.json" &>/dev/null
+
+  $ python3 "$TESTDIR/../../scripts/diff_jsons.py"  export_v2/dataset1.json "$TMP/dataset1.json" \
+  >   --exclude-paths "root['meta']['updated']"
+  {}
+
+
 Export with auspice config JSON with an extensions block
   $ ${AUGUR} export v2 \
   >   --tree export_v2/tree.nwk \


=====================================
tests/functional/tree.t
=====================================
@@ -18,7 +18,6 @@ Try building a tree with IQ-TREE with more threads (4) than there are input sequ
   >  --method iqtree \
   >  --output "$TMP/tree_raw.nwk" \
   >  --nthreads 4 > /dev/null
-  WARNING: more threads requested than there are sequences; falling back to IQ-TREE's `-nt AUTO` mode.
 
 Try building a tree with IQ-TREE using its ModelTest functionality, by supplying a substitution model of "auto".
 



View it on GitLab: https://salsa.debian.org/med-team/augur/-/commit/80d6fd480db7d928a109cf503f5b4ace18235b2e

-- 
View it on GitLab: https://salsa.debian.org/med-team/augur/-/commit/80d6fd480db7d928a109cf503f5b4ace18235b2e
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20221011/d3692ce3/attachment-0001.htm>


More information about the debian-med-commit mailing list