[med-svn] [Git][med-team/augur][master] 4 commits: routine-update: New upstream version

Andreas Tille (@tille) gitlab at salsa.debian.org
Mon Aug 22 13:57:18 BST 2022



Andreas Tille pushed to branch master at Debian Med / augur


Commits:
318eefc5 by Andreas Tille at 2022-08-22T14:52:20+02:00
routine-update: New upstream version

- - - - -
90e77bba by Andreas Tille at 2022-08-22T14:52:21+02:00
New upstream version 17.1.0
- - - - -
92d44212 by Andreas Tille at 2022-08-22T14:53:11+02:00
Update upstream source from tag 'upstream/17.1.0'

Update to upstream version '17.1.0'
with Debian dir efab5ef0fd5e4f9b923579eaba433e229832128d
- - - - -
7d96ddfe by Andreas Tille at 2022-08-22T14:54:59+02:00
routine-update: Ready to upload to unstable

- - - - -


12 changed files:

- CHANGES.md
- augur/__version__.py
- augur/dates.py
- augur/export_v1.py
- augur/refine.py
- augur/tree.py
- debian/changelog
- setup.py
- tests/builds/tb_drm/data/drm.vcf.gz
- tests/functional/translate/data/tb/aa_muts.json
- tests/functional/translate/data/zika/nt_muts.json
- tests/test_dates.py


Changes:

=====================================
CHANGES.md
=====================================
@@ -3,6 +3,25 @@
 ## __NEXT__
 
 
+## 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)
+
+### Bug Fixes
+
+* refine, export v1: Use pandas.DataFrame.at instead of .loc for single values [#979][]. (@victorlin)
+* refine: Gracefully handle all exceptions from TreeTime [#1023][]. (@anna-parker)
+* refine: Document branch length units `treetime` expects [#1024][]. (@anna-parker)
+* dates: Raise an error when metadata to `get_numerical_dates()` is not a pandas DataFrame [#1026][]. (@victorlin)
+
+[#979]: https://github.com/nextstrain/augur/pull/979
+[#1018]: https://github.com/nextstrain/augur/pull/1018
+[#1023]: https://github.com/nextstrain/augur/pull/1023
+[#1024]: https://github.com/nextstrain/augur/pull/1024
+[#1026]: https://github.com/nextstrain/augur/pull/1026
+
 ## 17.0.0 (9 August 2022)
 
 ### Major Changes


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


=====================================
augur/dates.py
=====================================
@@ -5,6 +5,7 @@ import isodate
 import pandas as pd
 import re
 import treetime.utils
+from .errors import AugurError
 
 from augur.util_support.date_disambiguator import DateDisambiguator
 
@@ -122,7 +123,7 @@ def get_numerical_date_from_value(value, fmt=None, min_max_year=None):
 
 def get_numerical_dates(metadata:pd.DataFrame, name_col = None, date_col='date', fmt=None, min_max_year=None):
     if not isinstance(metadata, pd.DataFrame):
-        return {}
+        raise AugurError("Metadata should be a pandas.DataFrame.")
     if fmt:
         strains = metadata.index.values
         dates = metadata[date_col].apply(


=====================================
augur/export_v1.py
=====================================
@@ -269,8 +269,8 @@ def add_tsv_metadata_to_nodes(nodes, meta_tsv, meta_json, extra_fields=['authors
             continue
         for field in fields:
             # Allow fields to have value of 0! - but prevent from having value of "" (breaks auspice v1)
-            if field not in node and field in meta_tsv.columns and (meta_tsv.loc[strain, field] or meta_tsv.loc[strain, field]==0):
-                node[field] = meta_tsv.loc[strain, field]
+            if field not in node and field in meta_tsv.columns and (meta_tsv.at[strain, field] or meta_tsv.at[strain, field]==0):
+                node[field] = meta_tsv.at[strain, field]
 
 
 def get_root_sequence(root_node, ref=None, translations=None):


=====================================
augur/refine.py
=====================================
@@ -2,17 +2,18 @@
 Refine an initial tree using sequence metadata.
 """
 import numpy as np
-import os, shutil, time, sys
+import sys
 from Bio import Phylo
 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.seq_utils import profile_maps
 
 def refine(tree=None, aln=None, ref=None, dates=None, branch_length_inference='auto',
              confidence=False, resolve_polytomies=True, max_iter=2, precision='auto',
-             infer_gtr=True, Tc=0.01, reroot=None, use_marginal=False, fixed_pi=None,
+             infer_gtr=True, Tc=0.01, reroot=None, use_marginal='always', fixed_pi=None, use_fft=True,
              clock_rate=None, clock_std=None, clock_filter_iqd=None, verbosity=1, covariance=True, **kwarks):
     from treetime import TreeTime
 
@@ -35,7 +36,7 @@ def refine(tree=None, aln=None, ref=None, dates=None, branch_length_inference='a
             branch_length_inference = 'joint'
 
     #send ref, if is None, does no harm
-    tt = TreeTime(tree=tree, aln=aln, ref=ref, dates=dates,
+    tt = TreeTime(tree=tree, aln=aln, ref=ref, dates=dates, use_fft=use_fft,
                   verbose=verbosity, gtr='JC69', precision=precision)
 
     # conditionally run clock-filter and remove bad tips
@@ -99,7 +100,8 @@ def register_parser(parent_subparsers):
     parser.add_argument('--metadata', type=str, metavar="FILE", help="sequence metadata, as CSV or TSV")
     parser.add_argument('--output-tree', type=str, help='file name to write tree to')
     parser.add_argument('--output-node-data', type=str, help='file name to write branch lengths as node data')
-    parser.add_argument('--timetree', action="store_true", help="produce timetree using treetime")
+    parser.add_argument('--use-fft', action="store_true", help="produce timetree using FFT for convolutions")
+    parser.add_argument('--timetree', action="store_true", help="produce timetree using treetime, requires tree where branch length is in units of average number of nucleotide or protein substitutions per site (and branch lengths do not exceed 4)")
     parser.add_argument('--coalescent', help="coalescent time scale in units of inverse clock rate (float), optimize as scalar ('opt'), or skyline ('skyline')")
     parser.add_argument('--gen-per-year', default=50, type=float, help="number of generations per year, relevant for skyline output('skyline')")
     parser.add_argument('--clock-rate', type=float, help="fixed clock rate")
@@ -209,17 +211,24 @@ def run(args):
         # save input state string for later export
         for n in T.get_terminals():
             if n.name in metadata.index and 'date' in metadata.columns:
-                n.raw_date = metadata.loc[n.name, 'date']
-
-        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 = args.date_inference == 'marginal',
-                    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))
+                n.raw_date = metadata.at[n.name, 'date']
+
+        if args.date_confidence:
+            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}")
 
         node_data['clock'] = {'rate': tt.date2dist.clock_rate,
                               'intercept': tt.date2dist.intercept,


=====================================
augur/tree.py
=====================================
@@ -330,6 +330,10 @@ def write_out_informative_fasta(compress_seq, alignment, stripFile=None):
 
     #Rotate and convert to SeqRecord
     sites = np.asarray(sites)
+    if len(sites.shape)!=2:
+        print("ERROR: NO VALID SITES REMAIN AFTER IGNORING UNCALLED SITES")
+        raise Exception
+
     align = np.rot90(sites)
     seqNamesCorr = list(reversed(seqNames))
     toFasta = [ SeqRecord(id=seqNamesCorr[i], seq=Seq("".join(align[i])), description='') for i in range(len(sequences.keys()))]


=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+augur (17.1.0-1) unstable; urgency=medium
+
+  * New upstream version
+
+ -- Andreas Tille <tille at debian.org>  Mon, 22 Aug 2022 14:53:20 +0200
+
 augur (17.0.0-1) unstable; urgency=medium
 
   * New upstream version


=====================================
setup.py
=====================================
@@ -58,7 +58,7 @@ setuptools.setup(
         "networkx >= 2.5, ==2.*",
         "packaging >=19.2",
         "pandas >=1.0.0, ==1.*",
-        "phylo-treetime ==0.8.*",
+        "phylo-treetime >=0.9.2, ==0.9.*",
         "xopen >=1.0.1, ==1.*"
     ],
     extras_require = {


=====================================
tests/builds/tb_drm/data/drm.vcf.gz
=====================================
Binary files a/tests/builds/tb_drm/data/drm.vcf.gz and b/tests/builds/tb_drm/data/drm.vcf.gz differ


=====================================
tests/functional/translate/data/tb/aa_muts.json
=====================================
@@ -1319,7 +1319,7 @@
   },
   "generated_by": {
     "program": "augur",
-    "version": "10.0.2"
+    "version": "17.0.0"
   },
   "nodes": {
     "G22574": {
@@ -1360,7 +1360,7 @@
         "Rv1129c": [],
         "Rv2752c": [],
         "Rv3087": [
-          "S227A"
+          "X227A"
         ],
         "cobS": [],
         "cycA": [],
@@ -1631,8 +1631,11 @@
         "Rv1129c": [
           "S480P"
         ],
-        "Rv2752c": [],
+        "Rv2752c": [
+          "V533X"
+        ],
         "Rv3087": [
+          "S227X",
           "V447L"
         ],
         "cobS": [
@@ -1661,7 +1664,9 @@
         "esxM": [
           "K59*"
         ],
-        "esxU": [],
+        "esxU": [
+          "W62X"
+        ],
         "fadE5": [
           "V522F"
         ],
@@ -1758,7 +1763,7 @@
         "Rv0909": [],
         "Rv1129c": [],
         "Rv2752c": [
-          "V533M"
+          "X533M"
         ],
         "Rv3087": [],
         "cobS": [],
@@ -1770,7 +1775,7 @@
         "esxD": [],
         "esxM": [],
         "esxU": [
-          "W62S"
+          "X62S"
         ],
         "fadE5": [],
         "hsdS": [],
@@ -1811,4 +1816,4 @@
     "rpoC": "VLDVNFFDELRIGLATAEDIRQWSYGEVKKPETINYRTLKPEKDGLFCEKIFGPTRDWECYCGKYKRVRFKGIICERCGVEVTRAKVRRERMGHIELAAPVTHIWYFKGVPSRLGYLLDLAPKDLEKIIYFAAYVITSVDEEMRHNELSTLEAEMAVERKAVEDQRDGELEARAQKLEADLAELEAEGAKADARRKVRDGGEREMRQIRDRAQRELDRLEDIWSTFTKLAPKQLIVDENLYRELVDRYGEYFTGAMGAESIQKLIENFDIDAEAESLRDVIRNGKGQKKLRALKRLKVVAAFQQSGNSPMGMVLDAVPVIPPELRPMVQLDGGRFATSDLNDLYRRVINRNNRLKRLIDLGAPEIIVNNEKRMLQESVDALFDNGRRGRPVTGPGNRPLKSLSDLLKGKQGRFRQNLLGKRVDYSGRSVIVVGPQLKLHQCGLPKLMALELFKPFVMKRLVDLNHAQNIKSAKRMVERQRPQVWDVLEEVIAEHPVLLNRAPTLHRLGIQAFEPMLVEGKAIQLHPLVCEAFNADFDGDQMAVHLPLSAEAQAEARILMLSSNNILSPASGRPLAMPRLDMVTGLYYLTTEVPGDTGEYQPASGDHPETGVYSSPAEAIMAADRGVLSVRAKIKVRLTQLRPPVEIEAELFGHSGWQPGDAWMAETTLGRVMFNELLPLGYPFVNKQMHKKVQAAIINDLAERYPMIVVAQTVDKLKDAGFYWATRSGVTVSMADVLVPPRKKEILDHYEERADKVEKQFQRGALNHDERNEALVEIWKEATDEVGQALREHYPDDNPIITIVDSGATGNFTQTRTLAGMKGLVTNPKGEFIPRPVKSSFREGLTVLEYFINTHGARKGLADTALRTADSGYLTRRLVDVSQDVIVREHDCQTERGIVVELAERAPDGTLIRDPYIETSAYARTLGTDAVDEAGNVIVERGQDLGDPEIDALLAAGITQVKVRSVLTCATSTGVCATCYGRSMATGKLVDIGEAVGIVAAQSIGEPGTQLTMRTFHQGGVGEDITGGLPRVQELFEARVPRGKAPIADVTGRVRLEDGERFYKITIVPDDGGEEVVYDKISKRQRLRVFKHEDGSERVLSDGDHVEVGQQLMEGSADPHEVLRVQGPREVQIHLVREVQEVYRAQGVSIHDKHIEVIVRQMLRRVTIIDSGSTEFLPGSLIDRAEFEAENRRVVAEGGEPAAGRPVLMGITKASLATDSWLSAASFQETTRVLTDAAINCRSDKLNGLKENVIIGKLIPAGTGINRYRNIAVQPTEEARAAAYTIPSYEDQYYSPDFGAATGAAVPLDDYGYSDYR*",
     "ubiA": "MSEDVVTQPPANLVAGVVKAIRPRQWVKNVLVLAAPLAALGGGVRYDYVEVLSKVSMAFVVFSLAASAVYLVNDVRDVEADREHPTKRFRPIAAGVVPEWLAYTVAVVLGVTSLAGAWMLTPNLALVMVVYLAMQLAYCFGLKHQAVVDICVVSSAYLIRAIAGGVATKIPLSKWFLLIMAFGSLFMVAGKRYAELHLAERTGAAIRKSLESYTSTYLRFVWTLSATAVVLCYGLWAFERDGYSGSWFAVSMIPFTIAILRYAVDVDGGLAGEPEDIALRDRVLQLLALAWIATVGAAVAFG*"
   }
-}
+}
\ No newline at end of file


=====================================
tests/functional/translate/data/zika/nt_muts.json
=====================================
@@ -6,10 +6,6 @@
       "strand": "+"
     }
   },
-  "generated_by": {
-    "program": "augur",
-    "version": "16.0.3"
-  },
   "mask": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
   "nodes": {
     "BRA/2016/FC_6706": {


=====================================
tests/test_dates.py
=====================================
@@ -1,6 +1,8 @@
 import datetime
+import pytest
 from freezegun import freeze_time
 from augur import dates
+from augur.errors import AugurError
 
 
 class TestDates:
@@ -57,3 +59,14 @@ class TestDates:
         # Test incomplete date strings without ambiguous dates for the requested fields.
         assert not dates.is_date_ambiguous("2019", "year")
         assert not dates.is_date_ambiguous("2019-10", "month")
+
+    def test_get_numerical_dates_dict_error(self):
+        """Using get_numerical_dates with metadata represented as a dict should raise an error."""
+        metadata = {
+            "example": {
+                "strain": "example",
+                "date": "2000-03-29"
+            }
+        }
+        with pytest.raises(AugurError):
+            dates.get_numerical_dates(metadata)



View it on GitLab: https://salsa.debian.org/med-team/augur/-/compare/e3b1abbf21aa345647da47c97999a8ca3f176fc4...7d96ddfecb45cc30ba697dd07f1940c1769cc8d2

-- 
View it on GitLab: https://salsa.debian.org/med-team/augur/-/compare/e3b1abbf21aa345647da47c97999a8ca3f176fc4...7d96ddfecb45cc30ba697dd07f1940c1769cc8d2
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/20220822/440b8f67/attachment-0001.htm>


More information about the debian-med-commit mailing list