From 7accf6ff132d2971cc93ab5d680a3bf691662e4c Mon Sep 17 00:00:00 2001 From: Matthijs Berends Date: Mon, 27 Jan 2025 10:46:43 +0100 Subject: [PATCH] (v2.1.1.9127) unit tests --- DESCRIPTION | 4 +- NAMESPACE | 1 - NEWS.md | 4 +- PythonPackage/AMR/AMR.egg-info/PKG-INFO | 85 ++++++++-------- PythonPackage/AMR/AMR/datasets.py | 6 ++ PythonPackage/AMR/README.md | 83 ++++++++------- .../AMR/dist/AMR-2.1.1.9126-py3-none-any.whl | Bin 10139 -> 0 bytes .../AMR/dist/AMR-2.1.1.9127-py3-none-any.whl | Bin 0 -> 10179 bytes PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz | Bin 9980 -> 0 bytes PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz | Bin 0 -> 10020 bytes PythonPackage/AMR/setup.py | 2 +- R/antibiogram.R | 49 ++++----- data-raw/_generate_python_wrapper.sh | 6 ++ ....txt => gpt_training_text_v2.1.1.9127.txt} | 96 ++++++++---------- inst/tinytest/test-_deprecated.R | 3 +- inst/tinytest/test-ab_selectors.R | 3 +- inst/tinytest/test-antibiogram.R | 8 +- man/antibiogram.Rd | 10 +- vignettes/AMR_for_Python.Rmd | 83 ++++++++------- 19 files changed, 217 insertions(+), 226 deletions(-) delete mode 100644 PythonPackage/AMR/dist/AMR-2.1.1.9126-py3-none-any.whl create mode 100644 PythonPackage/AMR/dist/AMR-2.1.1.9127-py3-none-any.whl delete mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz create mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz rename data-raw/{gpt_training_text_v2.1.1.9126.txt => gpt_training_text_v2.1.1.9127.txt} (99%) diff --git a/DESCRIPTION b/DESCRIPTION index 1b14fb83e..b49b83390 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR -Version: 2.1.1.9126 -Date: 2025-01-26 +Version: 2.1.1.9127 +Date: 2025-01-27 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) data analysis and to work with microbial and antimicrobial properties by diff --git a/NAMESPACE b/NAMESPACE index d9ca17aa2..78f103355 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -221,7 +221,6 @@ export(g.test) export(geom_sir) export(get_AMR_locale) export(get_episode) -export(get_long_numeric_format) export(get_mo_source) export(ggplot_pca) export(ggplot_sir) diff --git a/NEWS.md b/NEWS.md index 5483caddd..9f354c607 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 2.1.1.9126 +# AMR 2.1.1.9127 *(this beta version will eventually become v3.0. We're happy to reach a new major milestone soon, which will be all about the new One Health support! Install this beta using [the instructions here](https://msberends.github.io/AMR/#latest-development-version).)* @@ -16,7 +16,7 @@ This package now supports not only tools for AMR data analysis in clinical setti * The `antibiotics` data set contains all veterinary antibiotics, such as pradofloxacin and enrofloxacin. All WHOCC codes for veterinary use have been added as well. * `ab_atc()` now supports ATC codes of veterinary antibiotics (that all start with "Q") * `ab_url()` now supports retrieving the WHOCC url of their ATCvet pages -* Support for WISCA antibiograms** +* **Support for WISCA antibiograms** * The `antibiogram()` function now supports creating true Weighted-Incidence Syndromic Combination Antibiograms (WISCA), a powerful Bayesian method for estimating regimen coverage probabilities using pathogen incidence and antimicrobial susceptibility data. WISCA offers improved precision for syndrome-specific treatment, even in datasets with sparse data. A dedicated `wisca()` function is also available for easy usage. * **Major update to fungal taxonomy and tools for mycologists** * MycoBank has now been integrated as the primary taxonomic source for fungi. The `microorganisms` data set has been enriched with new columns (`mycobank`, `mycobank_parent`, and `mycobank_renamed_to`) that provide detailed information for fungal species. diff --git a/PythonPackage/AMR/AMR.egg-info/PKG-INFO b/PythonPackage/AMR/AMR.egg-info/PKG-INFO index b8389d8fe..bbf2afcfc 100644 --- a/PythonPackage/AMR/AMR.egg-info/PKG-INFO +++ b/PythonPackage/AMR/AMR.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.2 Name: AMR -Version: 2.1.1.9126 +Version: 2.1.1.9127 Summary: A Python wrapper for the AMR R package Home-page: https://github.com/msberends/AMR Author: Matthijs Berends @@ -123,48 +123,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -215,6 +173,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. diff --git a/PythonPackage/AMR/AMR/datasets.py b/PythonPackage/AMR/AMR/datasets.py index 6d1dccd68..efc5d87d8 100644 --- a/PythonPackage/AMR/AMR/datasets.py +++ b/PythonPackage/AMR/AMR/datasets.py @@ -19,6 +19,9 @@ r_lib_path = os.path.join(venv_path, "R_libs") os.makedirs(r_lib_path, exist_ok=True) # Set the R library path in .libPaths base = importr('base') +# Turn off warnings +base.options(warn = -1) + base._libPaths(r_lib_path) r_amr_lib_path = base._libPaths()[0] @@ -46,6 +49,9 @@ if r_amr_version != python_amr_version: except Exception as e: print(f"{BLUE}AMR:{RESET} Could not update: {e}{RESET}", flush=True) +# Restore warnings to default +base.options(warn = 0) + print(f"{BLUE}AMR:{RESET} Setting up R environment and AMR datasets...", flush=True) # Activate the automatic conversion between R and pandas DataFrames diff --git a/PythonPackage/AMR/README.md b/PythonPackage/AMR/README.md index c28f09998..de26a764e 100755 --- a/PythonPackage/AMR/README.md +++ b/PythonPackage/AMR/README.md @@ -95,48 +95,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -187,6 +145,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9126-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9126-py3-none-any.whl deleted file mode 100644 index 90ab360cc0e2805e472b43d02ac00d558398b30c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10139 zcmaKS18`=|*6tf?;$&jmwrx(5iIX?BZQHhO+qNgRCz?#`{PX?i-a6-eb?>*kx_0ed z^*r6ZcRj1uTD=ryz`)S}001;Vu#Q_3J9T-K76Jfp!UF&h|GX8FQ)bZ9Gq*8!($k~2 zb5GWgaoJ=?+I&Uh7Sb&ug&Jdyw8{e8_18x%Wg!HB5waaDmI_MGkIioFTG3AG0Q^7H z`b%+7O7+CGtn)Q<+~k>7C_2`;+?lltT9YSI7Zrdkow$ZMR=dnHggDfQxHLR4d%RFC z%b7%p-9=;hJt7J+cFBfMtJaJ&8wG1{?hb4w5DT;=3(eGN`lbu={e>aEc9g8P%$PiwSq=4oAZ6 zqbnvpqr+?M!dvzDEjW`n9ZT2#I-+nc{5euj=92Kup@1*yX1^P$)XEg*W@1>w{ymGQ z8A`DA$ppdvh64jGR{D%Xowy0&;S}L4`#Lu9YwA}%FWb5riC`0RSAkSL-5pUf&h{T_9@f5v7 zxV?1H&9OrAA#^$@#TCY18o;@NyOfxy@Yk(c%EW7l=B6EZ>DDGdBEP?OTL+v|rSilb z{@i3#lHWvox9-tNrhAc}@oJz%HI7wg*=)H-giwVEoZecOO%+gMnN^u(+AD?DWd7|| z1{1}Jbl~O!FzqK~{7snhovEk3pv6)K=tBOjAKMAVe#78`5KDulC3&ApoyFj2?5LpX z$CP?>dLgY^l^xV6ws~AjH|MMd%M7x1KQKeb~YGt3PRS(Bf|T%yF1&eFhQlK$bhKRid>Fq_1m zhsXXKWNB=NLM0Tu2FmTZ;`T=M=*TiRwN}FId42Dwa$<4?AyZd1v?dg{yy2&+@uH=G zgqlh+-fCkMR?2u3mTwy;B5n(7a=Dzg@Fm9@o?6QO`jZ;95!A;b(`WI9=W%UEw_%HJ zl;E7lP>%<1_=Ar8+`g5+3+b^|xXLlUw2@k~lFxO%8*ZAT9IIa0oBPc^I* zN{e9s7L9QwJc{bQW1Lh(;mU@5L`Dr3YZQ5@$KZhmFvXI(v_#|5{1UD!y`5&*Z$t%P zJb6W7gQ`)2Ld>Cv-=efNoCO)>OP0#nOmvlSp@O!lywhUxz=y1{_`g)Gw{Pde(B&a^ z$0vtwA-D^+w2bN6wl$W|e_Mt%-`RkasV)t_Xy(FRlted97kvS()IkcVf`H|pbC@qJ z2sZJB`%=JYgN(1v16=<82i3Bz_BJb}!fuj6lc;$OiZ z^T04Q(l!GT^o^3|c!{*)cMd-EQ1F5tdhQ^V20oG1jIg3FhQQ56F9rFZ++7>tx*-!v zRinpoOL{go=5u|0gNtk#4EA#_v)jVcLf&r(6#vVxCWDvX41xgw2(bS)tVTd5prf&q z;~&G?thQsj!H(o}qStSMm;m?=lh8etMzB6Y2WzFX+a%^s%V_o!tv+5drbrtnV-n()T$?W*%vjM4VTZ)15=*0i;DHN!`^j+n<+VFb_ zx9<(8tEI%nlMqJuRtXfl$o*xbx; z0rJA@Kdwx}5zYiK}<>WhH#(#3G1A+UC5%ue+9$^nF|Y z3@!_3Jge|ai2IxunbK+z<|_+sr@3)sZ9d$`Hx@3$`Q-DuV<%e2k;45W@PX5>df3OM z*{{CN$%EEf`d0$-I9(WfWUyU{&gsvNnmly+(yn#37!pzmrApWGH_XehmYi*--hA0D zH4O0ji@XU4lb__xUeWdM*#j0dG_=yv->5pIYx_O`NY;T(3WMkdJu6k9A}`-5fOKky z@xVc9)qw;Yje_~OdJs$J)pLBB=4eQG{Qb2thnH8&)FG!AX!=RpUz--=Nz|=MDTX%9 zk~$Ctap4xKAkrw(?x;zu;; zu1!Sw%n{iKdl_^oxldoIXW^)~68!+gyANLlecBnz}-FNu?{T z`{gOhJ1qTj#$&(lOxHc6Vq3q2<*MTu?K|iX+@PnfQZvA@T@#FA(MAUpJ>^^{B~K

d|I~lCV(a^QatGWx8B(o8!6o20D${?008O#I8r9g zHik~-wl;qWek)rhc7qee@7Fs`&=k=X;ei!%XDWc}iwiPgDBc(DK3xdu0%Q4aMIl9- z)o(9!(yU~o%Y#=ks!&4Q){6^|=mZ5u^`sS=IH_qJ?@esnuaPG+TQJ&(L^lAm)&cY3HWcH%OI^*#o1UoF&!8LZyg z<}=Cz))d4yv%7Zb&i0=&EGjzg8OmR-u2K&lH^adkd4bW3=#In+4%G;o>iMb(_K!pD z()bCW54jh-04oLbQMp*%p2*IfhPwIb?w#RQpHZ9H#GTJqzy>U^(=b^|?&b)yWm?Pa zmCmbZw-d0ZT)Nod>{-oD{v)~)$My4>-d~`X^mF_6jS0C^w5=7uHpIHdOZuFH)wfIj zlf-w&dkmvRSYuRW=HTlNA^|+kqwg2jXr*wpW%$>thmArq`9b;5i`@?8@NKeXtbFMW zYa>uc?VTK_QAmFJQs~j#4(uCAilhTF73+qdt{IX(y9?X1yA}Cj(7@nYJxlRzSGXCBA&CP0_NLru+H_-I=^vW)n|S^m=q?s*_j)$K-{`BX8wPxtQ#M?BU5bI{Kb?YF79T z!S{E`0ppN+?VqSb#gSD?QWp8ptSx_rP(}lfVM2{F3~y2zK*mfoRVs{AU^r5(EfRtHunYIa|XS}w93HbzJO_62Y ztVI<~rQCQ@9r`vl&tR9Lp+IuJvLW1R{)qJ5Nlq#ZiH`t?urFga1U&QHFmt}lAoT_N zZBh43VjY(VJ@YuG1vu>e_m%xm#q+9tyrq4z*6g?#oI8uiE(x}LC#nr?EhW3odFhsN zbR;CYOzE}5$leD_E{7d0GI61@c9ixwWy%SqwrK;*Z?4hQ?^(en;5I0jhcsqF8jtU# zgm{6Od@qVdn@lhSrs(sSo8)%nx%?oIS#ZDho-QSn&+6N@C}i)_$1%S!W?6K$$q|m- zddwEJG_xDUB609&!wS93cdQ_V(D2cR>?cy|ic!|wwqZu>Or1jyJL6-B{8ni7MbB@W zIWVC7xR(~T&z2yF$hK;l_vK*ZN!3*18};xPBM7;At2%Bj^vrRu6ea+0QUs!^aLSOJ z`xf>q^)A=u!FP!kB8m<>6q0R0Zw~EL((FZTvxO*S3+<54O`e-R435H!D>g{@XX3pe z#r2LnBurY~Z~Ll$>#lQx^Fdl^s9rbiNcMsAt(Es)ehhfdLFQ3w=33M24e$NlI@5QU z_c{?<^)Zd$4UOv>a%7D_LiVG@w^A6|4;ekQ`p0#m1;9q-6l@NY9`$p@u^(g^1x1fvq7BGYoRV6TB8 z3bS~JCjqLX5$uWM=JA&p=cmAKL2g!@I~t}E%uw;d-_2NfnX<);;zx=x{fB~fORa$n z4dP^r)m^l4ld?+U(RipR@-}tfCrFRW_-S3skCrL)glt%5v6J7{!O2u$j$}TfHqAlU z5nAo={d~K!{i48Z9{I_S$5_Q>+tG>@76N#8Y0L)ERVj~df23izjNv-vI3b>-tv6-X zJOdLnjo|qPj;OK-;D$qwyg!9yDTw> zW&pelc_uU6m$$@oYSapzqhWrODiefB4X47*(@5(f6PYqYqK(zfosp~B?!50Afp{|B zqqPn(Zp7Eoe*Ihr>i&NH0exT~fsP~fpdf+nAmn5|!7_1s2(?!OyaxW0eh1i;E;zZR zxcBj1{;a2W<~?qSEO1bx;`<-lj_@`NF3RAKNtQ78qGfZ-6fA~V5XD%lg!dP@KjJHR zQO(KUP$sb7T^%da2dPbggeU_RKM8<0Szb~fbFhyqAeQm50sOIQ(hIlLH+9-P&YRqa z)=t>WJ~%Z`-zF^U=<8hDj8_#|jOm(XEbm~zPJ|SU-bBIQWewxmDD63&UWJ<>6+ZwU1RcovaOCD4Ikwc{8Zfp9;U&el`DvW}yB>2~)0+fG#daJM_VLu>l$4k)sf$4W%1^dj-ab9^au!2roCA6cI85 zYJMSAJ{bm0SC1g=PR9R!a6rMWJK0B}7j%7cRRUF=ChHALe@SpJV`O1pDO{#AqjJWf z5_YX^v|6DAO{qM}Fm6oDCF?+JrJR zx!-PIUc~s%=CRt%9uqQ4dq%iq)Nb=sK zr6iUaV5sNAAIc>Sze}JIqHBc060!8E#=c6h%`u6kiVyTqGy|n)$y0*dHWl7;O+SvJ z{@?}c9YZ^^vvZnK;>?qEM99wRmzbbWCx3z9v$P8}>;Wb_lXB0{TA-n{(4A>}}$_oybpUm^V# z_4;eCj$ubvhzGYI`C)u{4o=Q7W}*D@+EZ3g9A;V2T||F|6%5;0-;31ljQh_vYGe&F z6;nbPdcLwX=#2hw*aKHIIK+ku{_=`;#Ap#;7Ed*?7j^F@LgSIlwXjzwNm4lv`qS>R znyF3z^mYboZXT=B=B#NS{USvWf^Hw-o9tV=)}QY>HGb;YDl3Ap;%Rnhqd|D-e9h37 zp<@o=S;P52_H!|A&qqAP-h7Zm3>$Ngvbw$lpWkF#U|T6*)h2{_bIW&XXMqAuxT-;r zyNEOd{zA0>-I`HnWCu(nyWW7#0rQu>=u*j~UKDro*dKEPdo@IVn|H#jqMf2@N5Pi? z#h04D-%uq?1TlrZ37jj@XPv|{fsjT2nDL6Yt$OOGlJ#3A&V_bC^dvTEoAN3+J?R|! zf)VeV(=h<^l|eM-eSe&L7s!|oY!-ZRq(&fCJNFaO;k%(2p5Ni(2*r{=aLz{2V(@xBtaZ&f^ny<)pq#`vwKQQ%W?D15 z!`p)QD;==Q#nJsFMWIt=HLz~I%=)buwc7u)xDnK5uNPRkaXPB!sBCG7YHFV`1+4`y`k4I7NUOtF7{eiG!ze6>1ac{{-|QhY(^JM?6i0E2r|bdy*k5-q{Iu0gL=6K zQpL#(jp?eZ-?n+9ZAQ|C4Gl#g@#m=%asJJ z(9Fp!kMb`j2&;XU=y~mNja+;8Svn|-_PW6GG|}gB)4|DSzbXfK5?u_9Va?kFscFv0 zAK8*6=78F=K7{Kr$sxf4@&u?NY~m1!9DSa=`bZ!?Ex>WjQ>5O72D#oYc=eKeARmoLVNVqh9#6av$R9aqp5|>Nmd){WDCq;1mzy8Y><30&_YPKR3iW31?b4HFdzoh z-;lN=c0&k}e5&I>z)`1p@ilm$YsLkabzR41TH@l&(__)Eu%gnrNVBFRpVherrU!-- zT(VLoYe?HOo^0ou>d3*e6qlT+`5g9AKZlCgS`^EZKT}n3Qi|rs>R~{Yc=tSPat*OC zDmDr-VtM2@#PU0l$5iZiku_TrCy}1Q(YF0ntE+t!Y>nJn}L^reL*U>~`l z7tp#de@o9Bh5mtxRs4tp?mNscuRKIz*;g5MJ0|RWMl)jAm_%G|7&2yx3#UisrDE_h z?-cHyPJ%~Fm!-!>zk`>Z6c)*f06EZpYvuR8U#dmIXf>|a@1O6ppTrglrpA=v5)wbqqHozK4dMP}~K52x^2q{7HCx zYEB+^`xm+F=LfOD{JegLcz@PvboQ9D(t?KHnlyW@ysbP?=x2S{;?VbvdXT+{BkUyI zlE`k(Uu10{6YZT6C44r1z4NkSYV8f+4QtECmPqNqTiVcbrNbZZ3>l{&BZo(&E)qIN zhw=i-9-F$KrSym zH{PoecefuxNXIb3FY!GpF4BUW9}5e+*-~A?!6-TO-e8UwxZeN3B5U0wR>Y@7;pKQ>lGttFhwDC+kD0$@h{gZR%&d_{s;E1x2a! zwbd!(YbpF@D-UNw^EjdgAG=(0Cki>B7qMQgyh3-!N{O0eFn5y=!4!~yAiS*}6;xqr zt*V{tkyMw0su8b0Iqft<;%;jj7Y=dXC3BnUv5j2tRNb7I{M8Vq;}sA zZ*N8$+IUO&j5z320UtVeKUj;SBAZ5M%!G_e@@tf&)I_^`MKXRN+CU9B_AZO__ZBl> zhb%CQShe-!s>9G0L-<3vocM6#vN=#ADU^{hYz#Tl{F4xA9mAF6xcL>oICKi-eDRI% zh}jg$=SDDUb?=Mgx0O?UK+6W^%`O7=FdCG`@0vrrwu+XcP+%=Hzj#! zyL=7f1e8M%83U$4>hJafXRtiRLFTOf37*;wW>a$mYsZdmj# zp{RvLx(-vqAkP}dSv)Kuj$0s?n<4Wb!~k9AEbm`;sD_^QuNRF~!_rD~x`q*`Dq!zW zhm%MT4(S z$hP<1fN0rbQ#zOq7B_c}RN;k&lwFN;sa&-9_qTw-jQ-Wf_kE^l(uz;8#8xgeL@wG| zvtCvI954Z`^@&tf@KX;v4}eg|`&C^X^7a{Tk=w5S-Pfm3RVwd1Wr@~nmH6I(ACl(% zBh#DYmF%1crk1+(+K37uXRe;pCNz!+`ZDtcJ$;lRX($B}y1z!hsTbr(hb{AW0rQI~2nc?Z4 zaIJwZn$Ke+h*dvbxW$&b`vyvVOO3cN?;agn{DN;nFt}5|5ysXU0XaW{V`9q$7MhQ0 zJUh#HdQ~a@ED5{nYx2G^I*7JFcWKqS1w7QCZfWZCeWI+%X);S`ih+RT-mly9QpbI6 zvwN-g;$Q(Pt8B%CkLmzsEh8GJ&LXTdHn*M#%DuX&+ARZ*;aWf2y6f3my6;PUR|)5{ z4h0F45SHR^c+T%{AMo~g7bHqfj&Q!>bx1(`51@AJPSs33bZ$L$z4a}P{Tt`WchML8 znzc0?MBa<|i{Na&Z4W0T@i{qDgEcI)AIbNZX^D7uhlNLY;Mwrjcv&A^_s$#wU=v8U zj)X5esU;gY52q`i89Sj}2DV})&q*l~!)%5i?99N2 z1wNUf$cIZj7F^`H^`#tGcNTenZ5G;5Z`BK~Otl<(c2R-79@tx#t=2ey*5V2$87lai zE#7Ggqy(M*Qog9M1%7O4bsxn*GS_%I=u^lt1#|HWYyk@aXG>Qg@Jr{{1#>5@_bulH zUsny>aJ258CO&>;th&tTZJ+i7tOt-YXY6iWqQ?)UxU0PR4br3F$vRJI(-s;HqBZjr zQZ2av=afFv1Yvn*(fLxlADQ!TY@N~ay>T}h3E$(GlB7 ze@|gmt9APOc4nqm9aP0_)~!?Q^sZadsu+rBVRLU5d75St!`pfmUtq!hzhttSUN@=vvvSMn!?Gmz%qt}i(Trt&_pT51n!;DvNI|!jFZ1t z%$YV1d}0$@7^%CbpCt|{i! zBKH>z?hR*D5<-kMM2U1zuq_j7?SO+m0;-9W(R}jBTV%-iwD^ zaYQi8!8Z4OmbTZ?QFTOHH;L%l*IFR@k>%S8h&i3oxz#VsF!@bS zpv78LMCm$DO&}x?8u$*cJ+1G4)HGd}CF!NC3t+Gez?^oX7i5#>-$yQTkE{rH>~QYv z?#>ch0_lT1W>h;P&%K>nEz_@7SxPxErJwbQdQb}_c1cXD%b zyo28d1^hSD1NdvY9>|{(AW#5+;GdY3#Y7a8MV+UF94Z(AfI0736k5fE(}GB7b>yEu4Z8-AAR#SJcM(YXW@U(nCwsCD^r>69qX~=tS)MHpxyvE0b|X{tvX-%_ z^032C-0I(ulV5%pAJ__pu0DB3^o$poW%kaS_$sS-(Dz7&Yq$fyy;pZu&ZqF)D5bW+ z9|V)A3+#45Kn5Xw=AwC*ysMjWXV}k6iLr{ko^Bx5ON!b!yYQK;hT}Pv#bG@SWJ3+` z)GR(HxJ^}MJY^UkkSp%bKxI@Ixb^zzZM3+0W}DPU=!WtNR&0p=m_*m3aoPr_D&^fw zeb~#oCVP~VNDmBl5lFraUVe7fojoM9<#LJtltS&$xi#Vm=Eqe<>t)JGGG{w7%X%4D z|ixs`vTfBjk9pP~Ob)ADz^zsvC7bf_f% zK=;3*{5#j*rSosD%75beFCqP%^Y0@1zno3}_y5HCFG(rNK>Q_T0Mws$_eY8GWPd&V E4-Oi=_y7O^ diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9127-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9127-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c15c6ef5b39fd15bc3726ccde728bab96dca3181 GIT binary patch literal 10179 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 literal 0 HcmV?d00001 diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz deleted file mode 100644 index 9a3ee31d6a03e0b378f6e9c439a8b8d147c71d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9980 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 F`(Mf2u+snl diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..95c0b8d3df3ace33abd4ab710f46cd89bcff02ed GIT binary patch literal 10020 zcmchdMNk}06y|Yv2u^Sa5Zom&xJ$5L!6CT22L>42-JJ;TI=H(hKycT=0u0P-{=0kF z<6d^F>vg~S`d8nf53lQ0H*FjS#(Vv&FGz3;XAe$3F5Z7bl$TGK%ge$8;Ud`HbG^OM zPV(&2wcj63Wj5oL)0#rf0<~Rh4^7gnf*jAw{Ynu6Ol5LUDy~LBRfDawhrn0G z--U`(RPO31!uxyY@??tk9zj{At&y2Qq(>g0fYS~^;>@B6T)Vo3)(yJ506L9 zt5T9L4!3YWfmrz4;n1$v3{kKE99m{^l_C@{_T-9gb*eLpgSCy|#P{?t0xr7)FTfq2 z!J&L&Z`ohruP1QUx;i}Y#LJdC96vzua|Iks^|~cxv} zoio&=rvanJK^;$_0@S3(@IUj%cFS-o+|DvZqrdb=aNqB6)?PJ3OfD|Y8C+niXf$u$rS8TlYp_<9~#aJ7Y?}x4XYFaKVX#_-M zTd{btSjMb%UPgU-nJD=f@H%6Mq|gkuKkfPlnMz#`j<+Mb(R(o>_c5PQJSLGMNF-gM z%%1oNDy&7*)V>a!IKt+Ya(9GNWyPe~sK2FEh;=n=_QK21UlU>owatXWttg4Gi$OiO zppeM{3eW{kHaq|v3}`I#K;x-8_7%*z&y(+rDasy| zZ;*1<6)MNGlzB#ijZ8+C6i}jO2~Yu40$j>@3cK{Iguec=8>a*0JzX;0C_}hekv;8c0v~6ri_|gHh?S|NkCE5gVab3<5}dpSK%VJ_;j!!( z;fx7Bj1);;(&kWKr4I#2UaUB>-4sSYx5;VotJ^JTli<(?#4v@kS%oNpoLgT13&6Tp zny2PNT$Ddqn6FwWVCcr^ukS-uh?d9bZ{R_;hImPt@zwmc_UHXTUMqHQIO0k^0zAh$ zv6JWhu~ZHb2-AXeETx<9TE5=}6>%fEucX5#n?Dl0@=im>w=W2Dr^46Up@9wg8 z86!~o7RJ~~_h`)3u7AeL;s->BdX19v(;&r%)zOfM1y4nz4G+lhCZj&9Z(;dhVU?|s zp%t9Y85ac1#TssmEH(9Q2M+fqg(b&Nr6XqKy6Ee=q+G#PCn zV@?irK|B%Zo7j>*aH6m_@*=uKx@tOcszPT;vAIB^)ylg-N+R6ix)%0oaE`|Zxng#p zR4hs{Xp5W*r_joXyvHtn^e~a$EY4^(qJM5h-7XGI;~ti zJTtRL{c*3k6dPLL-F6?0WQDBvkuAFS^zX9_7B>pUps@IG2mRIGJ@{qb@#XjcHR?+udX(6@8-*#mU!Fou08heUY;)TK#O7TJIAvL%GEzb?*(&c{63zUH-5>1QTF+pN z$K3s0&1bV-pS%70H^94g2L0|o%J~QpOy+wW?BwIebFQSR>^k#@^klghp^O8-j$r5?mq8+ zHd>C%Rk%sySE>z*4p@c_gu%xpnU zvlcamV;aGSrn((?R?Hhkfe*rjwdOu{#o&YEf)qVji7zrAA0If-F4}{>vDjH~O8Cw> z3hz<{ELh`J327yr@rdI6>}%cfm7?P=nyGd#Yrq^O^GabsK^QSsMW^NkJ0K+QMfpqH z3GT!kN@~YklHWCMI75GyNXN+7qWT;8qY}gke*onVu2^3&&cw~m{rRQH^-|Q5e^EC`k)!S@j>=n399C72oll`DCnoCYu)VxmgkZ)|sqV#{)ih)byH>5NK& zsD+~4l6=&}(8r`06lCYQuCF{08=BG>qLX>lctSv)jCW+b*b;an5Ou)JqTxKD9xva8 zLN`y=W^X)I=w8$;y&XSy(AGWkv``*sO^;9mhUF)A|GHAH9G=L_D7n?XNQC>sP`@5g z_4m=-ceno!GYe$=u$$)i$*mb-0utg}K5Z^OsldK^y|0Kn zJxP7(DwnIN>`tFRee#WRaVqI9gI}v$taE}26~?dwDuc_5hNs^!d{lbZJ6!qgd;hr2 z0%pulx3ZO!0iEICh~IltNfP8w`Rqs9VT`HIqK-J|CWQb5Vf6S87KV?%YrPWABUz zvkO*V$BHy{Xhqwp^J2u0O_y-P6EnUONslYYE&pms!St<3q{%6iy9HLZ5~};{^jWhr z;I)D@to%%>M_NCt1|F}V=U*q%l-P-jkhpX&pVPIWF3M;q(X?_;;W3#R8&8EavlbW zLmr03VyxzxhhNX zh;B6pNWiV}SWXKvTn|utVFLyw(Qa+*W&mtmU9WPrrxSuMG82)}Iu{E--Urssj!5Ak zK_Pbr%L4l|RdpTGnNs)Yj*Uh0MCB{7rn%PQdkM=khh&av4f@0jAaEZ#7_0LUWUHd| z%qE8oM<>XrtioAOf4^}B!q!-3slu2{$BD>Ut|~qPj zHi7bKK0CTiS8VERL)_BQ&V{_;O?GFz0p@SZp~{S;4^@rr{OS4e~o`C-NGRp1;ftqd=3&YD&+Y5M66AJ?p_AZ0MKr0EHKiLh$p=_8+gIpJO&` zKUwiF75gY59Bh=1vvJTxM(Wr1WHulC-KCIFAgcasjw@5@ypE4^(4m4O>f9&S*+E}cG2$aR3fr^I8koQ@^fVUH!L;sd!HH|RzYiu^IYEIhO zcmy<+fS<0&va|4RD=i%Ol5zga`=I}I97K^~gI>pqei<367Ql7k|G^$ii^vO^#N0en zhWFTm47H$wt>DJ)%)^~Jwv)dAGlIfGZY`aOtB8O6W=}78`^tt@W-0A1aECUnH)u)z z!#G$Nmlr#822%acRW;lk0E?A8W1{PA&FTQH)R5v_KVj~nRK$NzBd+p+RaU6O2qvs!Ygl3Y0dP7Ns2!&#C(GC>Ij5F5=+B~JOk1g)3W4j0`C_djx_kB1#mz)VZ7v4U0hoSC3? zYq47+rp25r=Ea;<`ka|=rhg$c?sd5SPh5TXkLdbG1pG&^{2#wPiXm1Q2i&!=4SdU{|o1Z=Bc)S1nU$7M6|5N%}Fo6l+SvYHEmv3IQX$> z=eN~i@?(02L(%6N999>PSc8dgDV?1Q&4(Asfm5(&C<7Qj#lhG`OZJNo) z@0{CZUA<2cmu+!Pqq68Y6l_loU8(~!G|As7dc}}?$+2JAr|+^Wm6~@Fj(H-^Kbq`L zoPjPymIsW1q z$VY>IzIDarx#B_oDR1ucHL0P{G1E`_imu{sYPl@ z^+f;JuUC}BCy-WdEUbqg7^g)-E1TVGoaCXeb2G{7U>X%<9IrP7ub-_(*Lnc6Oo4Oay(j(Npb9H2F0!QO znixlSGoqnm?cL+GRV@oYdw9;QpvX`SCfRv=>&o^C< z7F9vAIdupf!W%GBqh|Yecf8*Y>y)ixvc9F9Ds$#BW#s;Ism*$0O@1_Ptfl?*8pxb| zIQ}c$v>9*6ImY*}`VS{y2Vg~de^!6oLNoG|!h~1y_;#jx_))oGTCI7{va#hf?^s5{ z^JIx-xvK163Bn*k>^4I#QVzFM!8snK1lImnVGK;QkguvSCY@e$X=~3mmdp=~!tD>+ z6Af_>0|_&8R=y8|9&O4}Tme~6R_~Y)!9CX9&TOUZD=FD(kG%!m$K+6ddo0URd z#?i~Cd|v!yP0t<1Oa`_&X&gme73AYiJymZzj8%BvjArY>A~;U6^yiw?f54OjcvCH< z7%6l(2oz)Gig!-$5|%H=s&f9O(J(L1beaJx);5dwU1Nx`^!#PP)Qj(#c?EbZScaW> zB=)ZIb;YcPTi;;^qf^e``@?oss)$l{I}|1+JLhgZs4P!qR7KfVy-N-P{&()JgxG}J znX^!fEUzsQ`3XQx?0d*x_NHFSo`$;E`J*XAGVOydKh~tXDFfl_X6{FW*qiTXScs&8 zIfVM~^J-3lnRMk3)$ILVf^QVntAFEJ@ahZSt(0VJiL%P-03o$itLIHS&L1`O&~Uwv zmD)@sMrw9>>!?@v-`nk?WP4*u|By7WX>X-UYFrRKr-tpNZoJCHD8DM2Re0@b-?gpN z;50e@yz++jz!)zs=aJJf;v?}lrJf~K;c`u~wu`raAlr|3?W?qS;;cRWwW8Z-5S^K)sc*-i-szv0W4);gqBRIs41pXlw?gQoU46%pdCn@m274b#kIui5J2hkryZ!IP^!6r-t?DnR z2zFT#H*+q*yZ%d>5mbJB*#4AK9YPnDClkvs<@}h>V=964n!2ynHJbfDd=1j z;6G}Gf=OazNl^%KDK#O)B0?4<*I!rMZhNQmzdgi?EMi!7G&KPc-2@H7L$S~4=w-~f z!;^nwKpu<&G3WEqU$t1BOy;E+&=8NMH%4+E{@zL-RYT&@qGtU%BO|J6iII-`yCTuO zcI?BV`<|#4d%PP*iyG)87K2>p&1yUu){TGa2MqBl&-t~wVaVNmG3x&6eeXMU{BuRg ze)4n*XE7lIJqkc8l{`Ub8zW+^r!V1U7|Dvped8(eh)JJaZZ7LhjrK)2+(3gWAtE9| zVN3?wuRXdn#*&ghxNb+GgbdM`uK9uZPho*Ycg^gtr4kFJy=_UalJU7DyBpQ$5}Yq0 z*KEZPzU@!6@YlGnc>LTsDN5t^l3=*Mam*|IQr66G!h~TG=Yb~>0=;NU>Ls1yxp@#gB-gjzy}7z& zt*hmJaR0^9IDo*OyQaD?C?zb{Hm6*Cy8_3T*bJ|AiAiErsM55$s!!c&C=q0(P=F9b9Qv!1{xU`~unu`!pM89Vn5O($@tmpjL?1bTZ4TjZC86liS zlAk-a>3VJ$A0vq|=UzOMTt*SXC6(evg+x8DD#*OgpxL-G5ECpHw~x>{72UkHYlG4I zs%T3F_m-7QI@+&RyT5>G`Oz_0e>X8e*g8H{4*9q2SYd20ET?%+JdYYE=HFY6?TY&( zOrB+UqP6X&5-@@D9_Hll<8q;xcyq~HL}NLzPO zLIy~%;RuDryD>*gUcnxj(z!ECk=;Z9O=-^V9?9;}7Dg-B|RNUp}gq2PW5%uh6pD6o|h-fX~LB3rjyK- zQ6n5@i`OxW5PYCPF{s%cq;025%4TSy&wcr5h=W**2ajjf1TbHt%#td0{)s90l`x{o z^8mjJg^`u7AYKg7A_Xa7=&ztnzYUK=teG-D1Vq0$c{tl=6#h-9Dz|^})8#xgW)YZN z+>6h{u#nG5aNUn=3qv}{QKpII(Q>ERi&$*xKRWJs;59`HeHB_0U;HD?EoS$|z|+jp z)I=)y`QeS}*U;^o+&%<}$5(tP#B&xw2ez$)wjozs#mxU*_KZGK=nYh2G1M+H;THxd>bOrp@Rs8BMEH>_>&sCtzgTpBSdTi5#GK3!-{LPl6s>&Se15$La%O& zIQCsiP?BbUvMT&+K*bI~jLago{gZSxs5!`Xid-3h(l_LB1ws@`5blc>?I%#+9`>0; z(-Pw&8g9P=O0(;q1SeSZi&%2B(>}3{cv(W#lwH?jZz91$7tCf>tzq2N0ZpD zHk!D*BV{2}UQ1@zjiVsPYvo1Y6VU2|n&1$2?W7ic0t)_ow?IpQhlici+c$N|(${1a zKHO#A_(7CB#MPEVf%LH|=yH<#1d>LxuM(Xs&+i_3?U{$j1*2C_Us}7FO_>RKg1`O`64^j=dS&te~68u8qx;oTbiizl+AOF6! z1NxnghFL!E!Tj!ovmA%g^lrU0GvRQ?cQW0y3 zJZ}QH-zfj=uqK}w1w_+7Ey|}NLIi8N4A)(Bn#!Y#I$dj9m~BE|XpMfXemKX4UX9Ix(!a%FR3uv3M}+cj|qY zOr39vXr?{wPzo^^(<7|nHV5aG#V_{nFup5949>snhwhU&M2$w5sT-L32*~u;@{Zyv z)s9OGJ2tKkcS;*Q#kiU;2)&svpAHJaa;c|~p!f6>5mBj67xKq72p@fmYLBdRFmB;G z=UAogaryQyUSL(vgTA^peyP@$Ez2&Z_3mwSRZsjigN=Y=bWRU_LYDD|^o)s+U?{#~T&^T1ynU}go;Fn#um*ps6O{TZ@WBK_g zHfJ$uJEL9H9F<2I9b(v+0En{*^fkMr#I^48A`ilN=k$sOY{gEZ-#czYOolpcJ%|l6 zEp>Dx-nG@8UMOi=reagtH{#{^_If3W zH2+9+w2S$9LM$<31n?&)HG3I|vRvzIl=l5@?vo9u5^-XNJe@;(c8a_$wf94s|np3Uma!1LT&y&+h>p`X{d*4*N)P4dXo=Wvw>kT-)sRhc65XK(SN z2mfFS%fE)WuAR9`QHKp3XpVoD8_473z_OlThkZBWqplj<`*?M1r^s|SSp_!XWZX#^ zGxsFx0TraI8S+>$)fP&HHpK%qS%~j~KM_7*DM_F+g}m00{c?Nh$nJa?D3*q}?c0vt zj^#8i*YZfSPqXIymzwP9wVpa%g%AMEQ>@Ik9a@=tx7p{ZhZPA3 zk+rzdp91Bf%?XCk=B|v%*T-h3fx_;P@R_ywYk?iY7cn}aq{#QS@3*D0Gp1gK$dGpT zc^GbHR8{c(Hr_~#-)`gjH}SD|uU6Ih+wq?I1VXj}1=53&s3{nN7+z_Qy>*z6bfmrP z;wVR>eZ-MZflWbY9A&0!XZOt7z5ziV8yCI}>*cF`5$2p1ci4ZQPjk_W%PdBASTkc% z`cZa}R;^Q}e{6*tlYCu-xtcb}&asQy+t&Pzm>fHAANj?a@phCnRE__O*hdy|q7DB+2j`qfHZ@8k#>G%9X>^YaZ}erU2(LQq3x0-b<_YD6 z>q$S-DGiCMbaB6+#BLpB{aEIuFp!uWj3GCb^1|D^?N3U~v5SpgrU!GNLBln3Wx1kg zlz;I`8(f%dz&(4W^q_C^DYU?yhbG0{eHIBVcrtEH$NTCgB#Fq}N=~sqmY&vUmfT?# zB)JJp36X7TEKaBsPQ|suG@OHjZPT$~0|~hV-c;j`dT&iVqda@LN^ldR+9T-KxYK#2 zS%lNUpGF(x3SHJJlesj#92%qbFW~x6@G{J`1s=EvyEQy3a>f?r_&2jC$T2NfX!?37Ca9Tnc1nb^#9t-4tq6i4{ITN(fWGNhW67I2=*J zElOA2YrUyd-uyfCUiil?c=b*2TBs{z_y{}%`-?WXd`lbknj!|@k;XDR+9^w<1)*57 z0&bY6fTERL;V;GW+bx{E^c1UNGkF9X!h5(Aw~zUtTU!>jU5%T^CvB@5pP*0Yu$43> z*wGc$c&Y*MYO);Ti?GxTof)C4IEkQTl~+(uzrW`_LX0h}bw*QI#MMPaL8k8@kr#ol zP3%ZU!oCBqU87_4bCOt%?X%72rcFry8VimA>gsR_<_kx~?cqWWerfa=`qCs`gHk)K zYtQOV&i0GdNaw~^@@f8>j)N5P()n4W`^TlITNWud*^NoOSOdyQ&Y9V% + long_numeric <- out %pm>% pm_summarise(percentage = percentage, lower = lower, upper = upper, numerator = numerator, total = total) } else { - out_numeric <- out %pm>% + long_numeric <- out %pm>% pm_summarise(percentage = numerator / total, numerator = numerator, total = total) @@ -727,7 +728,7 @@ antibiogram.default <- function(x, out } out$ab <- ab_naming_function(out$ab, t = ab_transform, l = language, s = sep) - out_numeric$ab <- ab_naming_function(out_numeric$ab, t = ab_transform, l = language, s = sep) + long_numeric$ab <- ab_naming_function(long_numeric$ab, t = ab_transform, l = language, s = sep) # transform long to wide long_to_wide <- function(object) { @@ -801,14 +802,14 @@ antibiogram.default <- function(x, out <- as_original_data_class(new_df, class(x), extra_class = "antibiogram") rownames(out) <- NULL - rownames(out_numeric) <- NULL + rownames(long_numeric) <- NULL structure(out, has_syndromic_group = has_syndromic_group, combine_SI = combine_SI, wisca = wisca, conf_interval = conf_interval, - out_numeric = as_original_data_class(out_numeric, class(out)) + long_numeric = as_original_data_class(long_numeric, class(out)) ) } @@ -868,7 +869,7 @@ antibiogram.grouped_df <- function(x, conf_interval = conf_interval, interval_side = interval_side, info = i == 1 && info == TRUE) - new_out_numeric <- attributes(new_out)$out_numeric + new_long_numeric <- attributes(new_out)$long_numeric if (i == 1) progress$tick() @@ -878,7 +879,7 @@ antibiogram.grouped_df <- function(x, # remove first column 'Pathogen' (in whatever language) new_out <- new_out[, -1, drop = FALSE] - new_out_numeric <- new_out_numeric[, -1, drop = FALSE] + new_long_numeric <- new_long_numeric[, -1, drop = FALSE] # add group names to data set for (col in rev(seq_len(NCOL(groups) - 1))) { @@ -886,17 +887,17 @@ antibiogram.grouped_df <- function(x, col_value <- groups[i, col, drop = TRUE] new_out[, col_name] <- col_value new_out <- new_out[, c(col_name, setdiff(names(new_out), col_name))] # set place to 1st col - new_out_numeric[, col_name] <- col_value - new_out_numeric <- new_out_numeric[, c(col_name, setdiff(names(new_out_numeric), col_name))] # set place to 1st col + new_long_numeric[, col_name] <- col_value + new_long_numeric <- new_long_numeric[, c(col_name, setdiff(names(new_long_numeric), col_name))] # set place to 1st col } if (i == 1) { # the first go out <- new_out - out_numeric <- new_out_numeric + long_numeric <- new_long_numeric } else { out <- rbind_AMR(out, new_out) - out_numeric <- rbind_AMR(out_numeric, new_out_numeric) + long_numeric <- rbind_AMR(long_numeric, new_long_numeric) } } @@ -907,7 +908,7 @@ antibiogram.grouped_df <- function(x, combine_SI = isTRUE(combine_SI), wisca = isTRUE(wisca), conf_interval = conf_interval, - out_numeric = as_original_data_class(out_numeric, class(x))) + long_numeric = as_original_data_class(long_numeric, class(x))) } #' @export @@ -947,14 +948,6 @@ wisca <- function(x, info = info) } -#' @export -#' @param antibiogram the outcome of [antibiogram()] or [wisca()] -#' @rdname antibiogram -get_long_numeric_format <- function(antibiogram) { - stop_ifnot(inherits(antibiogram, "antibiogram"), "This function only works for the output of `antibiogram()` and `wisca()`.", call = FALSE) - attributes(antibiogram)$out_numeric -} - calculate_priors <- function(data, combine_SI = TRUE) { # Ensure data has required columns stopifnot(all(c("mo", "total_rows", "total", "S") %in% colnames(data))) @@ -1009,9 +1002,10 @@ tbl_format_footer.antibiogram <- function(x, ...) { #' @export #' @rdname antibiogram plot.antibiogram <- function(x, ...) { - df <- attributes(x)$out_numeric + df <- attributes(x)$long_numeric if (!"mo" %in% colnames(df)) { - stop_("Plotting antibiograms using plot() is only possible if they were not created using dplyr groups. Consider using `get_long_numeric_format()` to retrieve raw antibiogram values.") + stop_("Plotting antibiograms using `plot()` is only possible if they were not created using dplyr groups. See `?antibiogram` for how to retrieve numeric values in a long format for advanced plotting.", + call = FALSE) } if ("syndromic_group" %in% colnames(df)) { # barplot in base R does not support facets - paste columns together @@ -1063,9 +1057,10 @@ barplot.antibiogram <- function(height, ...) { #' @rdname antibiogram # will be exported using s3_register() in R/zzz.R autoplot.antibiogram <- function(object, ...) { - df <- attributes(object)$out_numeric + df <- attributes(object)$long_numeric if (!"mo" %in% colnames(df)) { - stop_("Plotting antibiograms using plot() is only possible if they were not created using dplyr groups. Consider using `get_long_numeric_format()` to retrieve raw antibiogram values.") + stop_("Plotting antibiograms using `autoplot()` is only possible if they were not created using dplyr groups. See `?antibiogram` for how to retrieve numeric values in a long format for advanced plotting.", + call = FALSE) } out <- ggplot2::ggplot(df, mapping = ggplot2::aes( @@ -1107,7 +1102,7 @@ knit_print.antibiogram <- function(x, italicise = TRUE, na = getOption("knitr.ka meet_criteria(italicise, allow_class = "logical", has_length = 1) meet_criteria(na, allow_class = "character", has_length = 1, allow_NA = TRUE) - if (isTRUE(italicise) && "mo" %in% colnames(attributes(x)$out_numeric)) { + if (isTRUE(italicise) && "mo" %in% colnames(attributes(x)$long_numeric)) { # make all microorganism names italic, according to nomenclature names_col <- ifelse(isTRUE(attributes(x)$has_syndromic_group), 2, 1) x[[names_col]] <- italicise_taxonomy(x[[names_col]], type = "markdown") diff --git a/data-raw/_generate_python_wrapper.sh b/data-raw/_generate_python_wrapper.sh index 841d57b6e..b9b629f8d 100644 --- a/data-raw/_generate_python_wrapper.sh +++ b/data-raw/_generate_python_wrapper.sh @@ -63,6 +63,9 @@ r_lib_path = os.path.join(venv_path, "R_libs") os.makedirs(r_lib_path, exist_ok=True) # Set the R library path in .libPaths base = importr('base') +# Turn off warnings +base.options(warn = -1) + base._libPaths(r_lib_path) r_amr_lib_path = base._libPaths()[0] @@ -90,6 +93,9 @@ if r_amr_version != python_amr_version: except Exception as e: print(f"{BLUE}AMR:{RESET} Could not update: {e}{RESET}", flush=True) +# Restore warnings to default +base.options(warn = 0) + print(f"{BLUE}AMR:{RESET} Setting up R environment and AMR datasets...", flush=True) # Activate the automatic conversion between R and pandas DataFrames diff --git a/data-raw/gpt_training_text_v2.1.1.9126.txt b/data-raw/gpt_training_text_v2.1.1.9127.txt similarity index 99% rename from data-raw/gpt_training_text_v2.1.1.9126.txt rename to data-raw/gpt_training_text_v2.1.1.9127.txt index f16964c22..e030aade0 100644 --- a/data-raw/gpt_training_text_v2.1.1.9126.txt +++ b/data-raw/gpt_training_text_v2.1.1.9127.txt @@ -1,5 +1,5 @@ This files contains all context you must know about the AMR package for R. -First and foremost, you are trained on version 2.1.1.9126. Remember this whenever someone asks which AMR package version you’re at. +First and foremost, you are trained on version 2.1.1.9127. Remember this whenever someone asks which AMR package version you’re at. -------------------------------- THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'NAMESPACE': @@ -228,7 +228,6 @@ export(g.test) export(geom_sir) export(get_AMR_locale) export(get_episode) -export(get_long_numeric_format) export(get_mo_source) export(ggplot_pca) export(ggplot_sir) @@ -1609,7 +1608,6 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/antibiogram.Rd': \name{antibiogram} \alias{antibiogram} \alias{wisca} -\alias{get_long_numeric_format} \alias{plot.antibiogram} \alias{autoplot.antibiogram} \alias{knit_print.antibiogram} @@ -1641,8 +1639,6 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname", combine_SI = TRUE, sep = " + ", simulations = 1000, info = interactive()) -get_long_numeric_format(antibiogram) - \method{plot}{antibiogram}(x, ...) \method{autoplot}{antibiogram}(object, ...) @@ -1689,8 +1685,6 @@ get_long_numeric_format(antibiogram) \item{info}{a \link{logical} to indicate info should be printed - the default is \code{TRUE} only in interactive mode} -\item{antibiogram}{the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}} - \item{...}{when used in \link[knitr:kable]{R Markdown or Quarto}: arguments passed on to \code{\link[knitr:kable]{knitr::kable()}} (otherwise, has no use)} \item{object}{an \code{\link[=antibiogram]{antibiogram()}} object} @@ -1711,7 +1705,7 @@ This function returns a table with values between 0 and 100 for \emph{susceptibi For estimating antimicrobial coverage, especially when creating a WISCA, the outcome might become more reliable by only including the top \emph{n} species encountered in the data. You can filter on this top \emph{n} using \code{\link[=top_n_microorganisms]{top_n_microorganisms()}}. For example, use \code{top_n_microorganisms(your_data, n = 10)} as a pre-processing step to only include the top 10 species in the data. -Using \code{\link[=get_long_numeric_format]{get_long_numeric_format()}}, the antibiogram is converted to a long format containing numeric values. This is ideal for e.g. advanced plotting. +The numeric values of an antibiogram are stored in a long format as the \link{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. \subsection{Formatting Type}{ The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the susceptibility percentage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator: @@ -1985,7 +1979,8 @@ if (requireNamespace("knitr")) { ab1 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), - mo_transform = "gramstain" + mo_transform = "gramstain", + wisca = TRUE ) ab2 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), @@ -8596,48 +8591,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -8688,6 +8641,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. diff --git a/inst/tinytest/test-_deprecated.R b/inst/tinytest/test-_deprecated.R index a9e1139c9..95bfcd045 100644 --- a/inst/tinytest/test-_deprecated.R +++ b/inst/tinytest/test-_deprecated.R @@ -27,4 +27,5 @@ # how to conduct AMR data analysis: https://msberends.github.io/AMR/ # # ==================================================================== # - +expect_warning(example_isolates[, ab_class("mycobact")]) +expect_warning(example_isolates[, ab_selector(name %like% "trim")]) diff --git a/inst/tinytest/test-ab_selectors.R b/inst/tinytest/test-ab_selectors.R index e41f138d3..ac1a45837 100644 --- a/inst/tinytest/test-ab_selectors.R +++ b/inst/tinytest/test-ab_selectors.R @@ -28,7 +28,8 @@ # ==================================================================== # # antibiotic class selectors -expect_equal(ncol(example_isolates[, ab_class("antimyco"), drop = FALSE]), 1, tolerance = 0.5) +expect_equal(ncol(example_isolates[, amr_class("antimyco"), drop = FALSE]), 1, tolerance = 0.5) +expect_equal(ncol(example_isolates[, amr_selector(name %like% "trim"), drop = FALSE]), 2, tolerance = 0.5) expect_equal(ncol(example_isolates[, aminoglycosides(), drop = FALSE]), 4, tolerance = 0.5) expect_equal(ncol(example_isolates[, aminopenicillins(), drop = FALSE]), 2, tolerance = 0.5) expect_equal(ncol(example_isolates[, betalactams(), drop = FALSE]), 16, tolerance = 0.5) diff --git a/inst/tinytest/test-antibiogram.R b/inst/tinytest/test-antibiogram.R index 6614a902e..8725436c1 100644 --- a/inst/tinytest/test-antibiogram.R +++ b/inst/tinytest/test-antibiogram.R @@ -128,9 +128,7 @@ expect_silent(plot(ab5)) expect_silent(plot(ab6)) expect_silent(plot(ab7)) expect_silent(plot(ab8)) -if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0", also_load = TRUE)) { - expect_silent(plot(ab9)) -} +expect_error(plot(ab9)) if (AMR:::pkg_is_available("ggplot2")) { expect_inherits(ggplot2::autoplot(ab1), "gg") @@ -141,7 +139,5 @@ if (AMR:::pkg_is_available("ggplot2")) { expect_inherits(ggplot2::autoplot(ab6), "gg") expect_inherits(ggplot2::autoplot(ab7), "gg") expect_inherits(ggplot2::autoplot(ab8), "gg") - if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0", also_load = TRUE)) { - expect_inherits(ggplot2::autoplot(ab9), "gg") - } + expect_error(ggplot2::autoplot(ab9)) } diff --git a/man/antibiogram.Rd b/man/antibiogram.Rd index bc63ccfd2..c3023111a 100644 --- a/man/antibiogram.Rd +++ b/man/antibiogram.Rd @@ -3,7 +3,6 @@ \name{antibiogram} \alias{antibiogram} \alias{wisca} -\alias{get_long_numeric_format} \alias{plot.antibiogram} \alias{autoplot.antibiogram} \alias{knit_print.antibiogram} @@ -35,8 +34,6 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname", combine_SI = TRUE, sep = " + ", simulations = 1000, info = interactive()) -get_long_numeric_format(antibiogram) - \method{plot}{antibiogram}(x, ...) \method{autoplot}{antibiogram}(object, ...) @@ -83,8 +80,6 @@ get_long_numeric_format(antibiogram) \item{info}{a \link{logical} to indicate info should be printed - the default is \code{TRUE} only in interactive mode} -\item{antibiogram}{the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}} - \item{...}{when used in \link[knitr:kable]{R Markdown or Quarto}: arguments passed on to \code{\link[knitr:kable]{knitr::kable()}} (otherwise, has no use)} \item{object}{an \code{\link[=antibiogram]{antibiogram()}} object} @@ -105,7 +100,7 @@ This function returns a table with values between 0 and 100 for \emph{susceptibi For estimating antimicrobial coverage, especially when creating a WISCA, the outcome might become more reliable by only including the top \emph{n} species encountered in the data. You can filter on this top \emph{n} using \code{\link[=top_n_microorganisms]{top_n_microorganisms()}}. For example, use \code{top_n_microorganisms(your_data, n = 10)} as a pre-processing step to only include the top 10 species in the data. -Using \code{\link[=get_long_numeric_format]{get_long_numeric_format()}}, the antibiogram is converted to a long format containing numeric values. This is ideal for e.g. advanced plotting. +The numeric values of an antibiogram are stored in a long format as the \link{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. \subsection{Formatting Type}{ The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the susceptibility percentage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator: @@ -379,7 +374,8 @@ if (requireNamespace("knitr")) { ab1 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), - mo_transform = "gramstain" + mo_transform = "gramstain", + wisca = TRUE ) ab2 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), diff --git a/vignettes/AMR_for_Python.Rmd b/vignettes/AMR_for_Python.Rmd index c28f09998..de26a764e 100755 --- a/vignettes/AMR_for_Python.Rmd +++ b/vignettes/AMR_for_Python.Rmd @@ -95,48 +95,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -187,6 +145,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance.