From c06c9b0425524c1d44c665b75b75ee99c3f922f9 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Sat, 12 Apr 2025 15:53:28 +0000
Subject: [PATCH] Python wrapper update

---
 AMR.egg-info/PKG-INFO                | 212 +++++++++
 AMR.egg-info/SOURCES.txt             |  10 +
 AMR.egg-info/dependency_links.txt    |   1 +
 AMR.egg-info/requires.txt            |   3 +
 AMR.egg-info/top_level.txt           |   1 +
 AMR/__init__.py                      | 213 +++++++++
 AMR/datasets.py                      |  77 ++++
 AMR/functions.py                     | 665 +++++++++++++++++++++++++++
 README.md                            | 184 ++++++++
 dist/amr-2.1.1.9236-py3-none-any.whl | Bin 0 -> 10188 bytes
 dist/amr-2.1.1.9236.tar.gz           | Bin 0 -> 10040 bytes
 setup.py                             |  27 ++
 12 files changed, 1393 insertions(+)
 create mode 100644 AMR.egg-info/PKG-INFO
 create mode 100644 AMR.egg-info/SOURCES.txt
 create mode 100644 AMR.egg-info/dependency_links.txt
 create mode 100644 AMR.egg-info/requires.txt
 create mode 100644 AMR.egg-info/top_level.txt
 create mode 100644 AMR/__init__.py
 create mode 100644 AMR/datasets.py
 create mode 100644 AMR/functions.py
 create mode 100755 README.md
 create mode 100644 dist/amr-2.1.1.9236-py3-none-any.whl
 create mode 100644 dist/amr-2.1.1.9236.tar.gz
 create mode 100644 setup.py

diff --git a/AMR.egg-info/PKG-INFO b/AMR.egg-info/PKG-INFO
new file mode 100644
index 000000000..63497dfac
--- /dev/null
+++ b/AMR.egg-info/PKG-INFO
@@ -0,0 +1,212 @@
+Metadata-Version: 2.4
+Name: AMR
+Version: 2.1.1.9236
+Summary: A Python wrapper for the AMR R package
+Home-page: https://github.com/msberends/AMR
+Author: Matthijs Berends
+Author-email: m.s.berends@umcg.nl
+License: GPL 2
+Project-URL: Bug Tracker, https://github.com/msberends/AMR/issues
+Classifier: Programming Language :: Python :: 3
+Classifier: Operating System :: OS Independent
+Requires-Python: >=3.6
+Description-Content-Type: text/markdown
+Requires-Dist: rpy2
+Requires-Dist: numpy
+Requires-Dist: pandas
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: description
+Dynamic: description-content-type
+Dynamic: home-page
+Dynamic: license
+Dynamic: project-url
+Dynamic: requires-dist
+Dynamic: requires-python
+Dynamic: summary
+
+
+The `AMR` package for R is a powerful tool for antimicrobial resistance (AMR) analysis. It provides extensive features for handling microbial and antimicrobial data. However, for those who work primarily in Python, we now have a more intuitive option available: the [`AMR` Python package](https://pypi.org/project/AMR/).
+
+This Python package is a wrapper around the `AMR` R package. It uses the `rpy2` package internally. Despite the need to have R installed, Python users can now easily work with AMR data directly through Python code.
+
+# Prerequisites
+
+This package was only tested with a [virtual environment (venv)](https://docs.python.org/3/library/venv.html). You can set up such an environment by running:
+
+```python
+# linux and macOS:
+python -m venv /path/to/new/virtual/environment
+
+# Windows:
+python -m venv C:\path\to\new\virtual\environment
+```
+
+Then you can [activate the environment](https://docs.python.org/3/library/venv.html#how-venvs-work), after which the venv is ready to work with.
+
+# Install AMR
+
+1. Since the Python package is available on the official [Python Package Index](https://pypi.org/project/AMR/), you can just run:
+
+    ```bash
+    pip install AMR
+    ```
+
+2. Make sure you have R installed. There is **no need to install the `AMR` R package**, as it will be installed automatically.
+
+    For Linux:
+
+    ```bash
+    # Ubuntu / Debian
+    sudo apt install r-base
+    # Fedora:
+    sudo dnf install R
+    # CentOS/RHEL
+    sudo yum install R
+    ```
+    
+    For macOS (using [Homebrew](https://brew.sh)):
+    
+    ```bash
+    brew install r
+    ```
+    
+    For Windows, visit the [CRAN download page](https://cran.r-project.org) to download and install R.
+
+# Examples of Usage
+
+## Cleaning Taxonomy
+
+Here’s an example that demonstrates how to clean microorganism and drug names using the `AMR` Python package:
+
+```python
+import pandas as pd
+import AMR
+
+# Sample data
+data = {
+    "MOs": ['E. coli', 'ESCCOL', 'esco', 'Esche coli'],
+    "Drug": ['Cipro', 'CIP', 'J01MA02', 'Ciproxin']
+}
+df = pd.DataFrame(data)
+
+# Use AMR functions to clean microorganism and drug names
+df['MO_clean'] = AMR.mo_name(df['MOs'])
+df['Drug_clean'] = AMR.ab_name(df['Drug'])
+
+# Display the results
+print(df)
+```
+
+| MOs         | Drug      | MO_clean           | Drug_clean    |
+|-------------|-----------|--------------------|---------------|
+| E. coli     | Cipro     | Escherichia coli   | Ciprofloxacin |
+| ESCCOL      | CIP       | Escherichia coli   | Ciprofloxacin |
+| esco        | J01MA02   | Escherichia coli   | Ciprofloxacin |
+| Esche coli  | Ciproxin  | Escherichia coli   | Ciprofloxacin |
+
+### Explanation
+
+* **mo_name:** This function standardises microorganism names. Here, different variations of *Escherichia coli* (such as "E. coli", "ESCCOL", "esco", and "Esche coli") are all converted into the correct, standardised form, "Escherichia coli".
+
+* **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".
+
+## Calculating AMR
+
+```python
+import AMR
+import pandas as pd
+
+df = AMR.example_isolates
+result = AMR.resistance(df["AMX"])
+print(result)
+```
+
+```
+[0.59555556]
+```
+
+## Generating Antibiograms
+
+One of the core functions of the `AMR` package is generating an antibiogram, a table that summarises the antimicrobial susceptibility of bacterial isolates. Here’s how you can generate an antibiogram from Python:
+
+```python
+result2a = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]])
+print(result2a)
+```
+
+| Pathogen        | Amoxicillin     | Ciprofloxacin   | Piperacillin/tazobactam  |
+|-----------------|-----------------|-----------------|--------------------------|
+| CoNS            | 7% (10/142)     | 73% (183/252)   | 30% (10/33)              |
+| E. coli         | 50% (196/392)   | 88% (399/456)   | 94% (393/416)            |
+| K. pneumoniae   | 0% (0/58)       | 96% (53/55)     | 89% (47/53)              |
+| P. aeruginosa   | 0% (0/30)       | 100% (30/30)    | None                     |
+| P. mirabilis    | None            | 94% (34/36)     | None                     |
+| S. aureus       | 6% (8/131)      | 90% (171/191)   | None                     |
+| S. epidermidis  | 1% (1/91)       | 64% (87/136)    | None                     |
+| S. hominis      | None            | 80% (56/70)     | None                     |
+| S. pneumoniae   | 100% (112/112)  | None            | 100% (112/112)           |
+
+
+```python
+result2b = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]], mo_transform = "gramstain")
+print(result2b)
+```
+
+| Pathogen       | Amoxicillin     | Ciprofloxacin    | Piperacillin/tazobactam  |
+|----------------|-----------------|------------------|--------------------------|
+| Gram-negative  | 36% (226/631)   | 91% (621/684)    | 88% (565/641)            |
+| Gram-positive  | 43% (305/703)   | 77% (560/724)    | 86% (296/345)            |
+
+
+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`, `antimicrobials`, `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.antimicrobials
+```
+
+| 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.
+
+By just running `import AMR`, users can seamlessly integrate the robust features of the R `AMR` package into Python workflows.
+
+Whether you're cleaning data or analysing resistance patterns, the `AMR` Python package makes it easy to work with AMR data in Python.
diff --git a/AMR.egg-info/SOURCES.txt b/AMR.egg-info/SOURCES.txt
new file mode 100644
index 000000000..f37c14848
--- /dev/null
+++ b/AMR.egg-info/SOURCES.txt
@@ -0,0 +1,10 @@
+README.md
+setup.py
+AMR/__init__.py
+AMR/datasets.py
+AMR/functions.py
+AMR.egg-info/PKG-INFO
+AMR.egg-info/SOURCES.txt
+AMR.egg-info/dependency_links.txt
+AMR.egg-info/requires.txt
+AMR.egg-info/top_level.txt
\ No newline at end of file
diff --git a/AMR.egg-info/dependency_links.txt b/AMR.egg-info/dependency_links.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/AMR.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/AMR.egg-info/requires.txt b/AMR.egg-info/requires.txt
new file mode 100644
index 000000000..fb2bcf682
--- /dev/null
+++ b/AMR.egg-info/requires.txt
@@ -0,0 +1,3 @@
+rpy2
+numpy
+pandas
diff --git a/AMR.egg-info/top_level.txt b/AMR.egg-info/top_level.txt
new file mode 100644
index 000000000..18f3926f7
--- /dev/null
+++ b/AMR.egg-info/top_level.txt
@@ -0,0 +1 @@
+AMR
diff --git a/AMR/__init__.py b/AMR/__init__.py
new file mode 100644
index 000000000..0dd6e1f18
--- /dev/null
+++ b/AMR/__init__.py
@@ -0,0 +1,213 @@
+from .datasets import example_isolates
+from .datasets import microorganisms
+from .datasets import antimicrobials
+from .datasets import clinical_breakpoints
+from .functions import ab_class
+from .functions import ab_selector
+from .functions import ab_from_text
+from .functions import ab_name
+from .functions import ab_cid
+from .functions import ab_synonyms
+from .functions import ab_tradenames
+from .functions import ab_group
+from .functions import ab_atc
+from .functions import ab_atc_group1
+from .functions import ab_atc_group2
+from .functions import ab_loinc
+from .functions import ab_ddd
+from .functions import ab_ddd_units
+from .functions import ab_info
+from .functions import ab_url
+from .functions import ab_property
+from .functions import add_custom_antimicrobials
+from .functions import clear_custom_antimicrobials
+from .functions import add_custom_microorganisms
+from .functions import clear_custom_microorganisms
+from .functions import age
+from .functions import age_groups
+from .functions import antibiogram
+from .functions import wisca
+from .functions import retrieve_wisca_parameters
+from .functions import aminoglycosides
+from .functions import aminopenicillins
+from .functions import antifungals
+from .functions import antimycobacterials
+from .functions import betalactams
+from .functions import betalactams_with_inhibitor
+from .functions import carbapenems
+from .functions import cephalosporins
+from .functions import cephalosporins_1st
+from .functions import cephalosporins_2nd
+from .functions import cephalosporins_3rd
+from .functions import cephalosporins_4th
+from .functions import cephalosporins_5th
+from .functions import fluoroquinolones
+from .functions import glycopeptides
+from .functions import isoxazolylpenicillins
+from .functions import lincosamides
+from .functions import lipoglycopeptides
+from .functions import macrolides
+from .functions import monobactams
+from .functions import nitrofurans
+from .functions import oxazolidinones
+from .functions import penicillins
+from .functions import phenicols
+from .functions import polymyxins
+from .functions import quinolones
+from .functions import rifamycins
+from .functions import streptogramins
+from .functions import sulfonamides
+from .functions import tetracyclines
+from .functions import trimethoprims
+from .functions import ureidopenicillins
+from .functions import amr_class
+from .functions import amr_selector
+from .functions import administrable_per_os
+from .functions import administrable_iv
+from .functions import not_intrinsic_resistant
+from .functions import as_ab
+from .functions import is_ab
+from .functions import ab_reset_session
+from .functions import as_av
+from .functions import is_av
+from .functions import as_disk
+from .functions import is_disk
+from .functions import as_mic
+from .functions import is_mic
+from .functions import rescale_mic
+from .functions import mic_p50
+from .functions import mic_p90
+from .functions import as_mo
+from .functions import is_mo
+from .functions import mo_uncertainties
+from .functions import mo_renamed
+from .functions import mo_failures
+from .functions import mo_reset_session
+from .functions import mo_cleaning_regex
+from .functions import as_sir
+from .functions import is_sir
+from .functions import is_sir_eligible
+from .functions import sir_interpretation_history
+from .functions import atc_online_property
+from .functions import atc_online_groups
+from .functions import atc_online_ddd
+from .functions import atc_online_ddd_units
+from .functions import av_from_text
+from .functions import av_name
+from .functions import av_cid
+from .functions import av_synonyms
+from .functions import av_tradenames
+from .functions import av_group
+from .functions import av_atc
+from .functions import av_loinc
+from .functions import av_ddd
+from .functions import av_ddd_units
+from .functions import av_info
+from .functions import av_url
+from .functions import av_property
+from .functions import availability
+from .functions import bug_drug_combinations
+from .functions import count_resistant
+from .functions import count_susceptible
+from .functions import count_S
+from .functions import count_SI
+from .functions import count_I
+from .functions import count_IR
+from .functions import count_R
+from .functions import count_all
+from .functions import n_sir
+from .functions import count_df
+from .functions import custom_eucast_rules
+from .functions import eucast_rules
+from .functions import eucast_dosage
+from .functions import export_ncbi_biosample
+from .functions import first_isolate
+from .functions import filter_first_isolate
+from .functions import g_test
+from .functions import is_new_episode
+from .functions import ggplot_pca
+from .functions import ggplot_sir
+from .functions import geom_sir
+from .functions import guess_ab_col
+from .functions import italicise_taxonomy
+from .functions import italicize_taxonomy
+from .functions import inner_join_microorganisms
+from .functions import left_join_microorganisms
+from .functions import right_join_microorganisms
+from .functions import full_join_microorganisms
+from .functions import semi_join_microorganisms
+from .functions import anti_join_microorganisms
+from .functions import key_antimicrobials
+from .functions import all_antimicrobials
+from .functions import kurtosis
+from .functions import like
+from .functions import mdro
+from .functions import custom_mdro_guideline
+from .functions import brmo
+from .functions import mrgn
+from .functions import mdr_tb
+from .functions import mdr_cmi2012
+from .functions import eucast_exceptional_phenotypes
+from .functions import mean_amr_distance
+from .functions import amr_distance_from_row
+from .functions import mo_matching_score
+from .functions import mo_name
+from .functions import mo_fullname
+from .functions import mo_shortname
+from .functions import mo_subspecies
+from .functions import mo_species
+from .functions import mo_genus
+from .functions import mo_family
+from .functions import mo_order
+from .functions import mo_class
+from .functions import mo_phylum
+from .functions import mo_kingdom
+from .functions import mo_domain
+from .functions import mo_type
+from .functions import mo_status
+from .functions import mo_pathogenicity
+from .functions import mo_gramstain
+from .functions import mo_is_gram_negative
+from .functions import mo_is_gram_positive
+from .functions import mo_is_yeast
+from .functions import mo_is_intrinsic_resistant
+from .functions import mo_oxygen_tolerance
+from .functions import mo_is_anaerobic
+from .functions import mo_snomed
+from .functions import mo_ref
+from .functions import mo_authors
+from .functions import mo_year
+from .functions import mo_lpsn
+from .functions import mo_mycobank
+from .functions import mo_gbif
+from .functions import mo_rank
+from .functions import mo_taxonomy
+from .functions import mo_synonyms
+from .functions import mo_current
+from .functions import mo_group_members
+from .functions import mo_info
+from .functions import mo_url
+from .functions import mo_property
+from .functions import pca
+from .functions import theme_sir
+from .functions import labels_sir_count
+from .functions import resistance
+from .functions import susceptibility
+from .functions import sir_confidence_interval
+from .functions import proportion_R
+from .functions import proportion_IR
+from .functions import proportion_I
+from .functions import proportion_SI
+from .functions import proportion_S
+from .functions import proportion_df
+from .functions import sir_df
+from .functions import random_mic
+from .functions import random_disk
+from .functions import random_sir
+from .functions import resistance_predict
+from .functions import sir_predict
+from .functions import ggplot_sir_predict
+from .functions import skewness
+from .functions import top_n_microorganisms
+from .functions import reset_AMR_locale
+from .functions import translate_AMR
diff --git a/AMR/datasets.py b/AMR/datasets.py
new file mode 100644
index 000000000..8b1dbb67d
--- /dev/null
+++ b/AMR/datasets.py
@@ -0,0 +1,77 @@
+import os
+import sys
+import pandas as pd
+import importlib.metadata as metadata
+
+# Get the path to the virtual environment
+venv_path = sys.prefix
+r_lib_path = os.path.join(venv_path, "R_libs")
+os.makedirs(r_lib_path, exist_ok=True)
+
+# Set environment variable before importing rpy2
+os.environ['R_LIBS_SITE'] = r_lib_path
+
+from rpy2 import robjects
+from rpy2.robjects import pandas2ri
+from rpy2.robjects.packages import importr, isinstalled
+
+# Import base and utils
+base = importr('base')
+utils = importr('utils')
+
+base.options(warn=-1)
+
+# Ensure library paths explicitly
+base._libPaths(r_lib_path)
+
+# Check if the AMR package is installed in R
+if not isinstalled('AMR', lib_loc=r_lib_path):
+    print(f"AMR: Installing latest AMR R package to {r_lib_path}...", flush=True)
+    utils.install_packages('AMR', repos='beta.amr-for-r.org', quiet=True)
+
+# # Retrieve Python AMR version
+# try:
+#     python_amr_version = metadata.version('AMR')
+# except metadata.PackageNotFoundError:
+#     python_amr_version = ''
+# 
+# # Retrieve R AMR version
+# r_amr_version = robjects.r(f'as.character(packageVersion("AMR", lib.loc = "{r_lib_path}"))')
+# r_amr_version = str(r_amr_version[0])
+# 
+# # Compare R and Python package versions
+# if r_amr_version != python_amr_version:
+#     try:
+#         print(f"AMR: Updating AMR package in {r_lib_path}...", flush=True)
+#         utils.install_packages('AMR', repos='beta.amr-for-r.org', quiet=True)
+#     except Exception as e:
+#         print(f"AMR: Could not update: {e}", flush=True)
+
+print(f"AMR: Setting up R environment and AMR datasets...", flush=True)
+
+# Activate the automatic conversion between R and pandas DataFrames
+pandas2ri.activate()
+
+# example_isolates
+example_isolates = pandas2ri.rpy2py(robjects.r('''
+df <- AMR::example_isolates
+df[] <- lapply(df, function(x) {
+    if (inherits(x, c("Date", "POSIXt", "factor"))) {
+        as.character(x)
+    } else {
+        x
+    }
+})
+df <- df[, !sapply(df, is.list)]
+df
+'''))
+example_isolates['date'] = pd.to_datetime(example_isolates['date'])
+
+# microorganisms
+microorganisms = pandas2ri.rpy2py(robjects.r('AMR::microorganisms[, !sapply(AMR::microorganisms, is.list)]'))
+antimicrobials = pandas2ri.rpy2py(robjects.r('AMR::antimicrobials[, !sapply(AMR::antimicrobials, is.list)]'))
+clinical_breakpoints = pandas2ri.rpy2py(robjects.r('AMR::clinical_breakpoints[, !sapply(AMR::clinical_breakpoints, is.list)]'))
+
+base.options(warn = 0)
+
+print(f"AMR: Done.", flush=True)
diff --git a/AMR/functions.py b/AMR/functions.py
new file mode 100644
index 000000000..e0146c94a
--- /dev/null
+++ b/AMR/functions.py
@@ -0,0 +1,665 @@
+import rpy2.robjects as robjects
+from rpy2.robjects.packages import importr
+from rpy2.robjects.vectors import StrVector, FactorVector, IntVector, FloatVector, DataFrame
+from rpy2.robjects import pandas2ri
+import pandas as pd
+import numpy as np
+
+# Activate automatic conversion between R data frames and pandas data frames
+pandas2ri.activate()
+
+# Import the AMR R package
+amr_r = importr('AMR')
+
+def convert_to_python(r_output):
+    # Check if it's a StrVector (R character vector)
+    if isinstance(r_output, StrVector):
+        return list(r_output)  # Convert to a Python list of strings
+    
+    # Check if it's a FactorVector (R factor)
+    elif isinstance(r_output, FactorVector):
+        return list(r_output)  # Convert to a list of integers (factor levels)
+    
+    # Check if it's an IntVector or FloatVector (numeric R vectors)
+    elif isinstance(r_output, (IntVector, FloatVector)):
+        return list(r_output)  # Convert to a Python list of integers or floats
+    
+    # Check if it's a pandas-compatible R data frame
+    elif isinstance(r_output, pd.DataFrame):
+        return r_output  # Return as pandas DataFrame (already converted by pandas2ri)
+    elif isinstance(r_output, DataFrame):
+        return pandas2ri.rpy2py(r_output) # Return as pandas DataFrame
+
+    # Check if the input is a NumPy array and has a string data type
+    if isinstance(r_output, np.ndarray) and np.issubdtype(r_output.dtype, np.str_):
+        return r_output.tolist()  # Convert to a regular Python list
+    
+    # Fall-back
+    return r_output
+def ab_class(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_class(*args, **kwargs))
+def ab_selector(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_selector(*args, **kwargs))
+def ab_from_text(text, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_from_text(text, *args, **kwargs))
+def ab_name(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_name(x, *args, **kwargs))
+def ab_cid(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_cid(x, *args, **kwargs))
+def ab_synonyms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_synonyms(x, *args, **kwargs))
+def ab_tradenames(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_tradenames(x, *args, **kwargs))
+def ab_group(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_group(x, *args, **kwargs))
+def ab_atc(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_atc(x, *args, **kwargs))
+def ab_atc_group1(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_atc_group1(x, *args, **kwargs))
+def ab_atc_group2(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_atc_group2(x, *args, **kwargs))
+def ab_loinc(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_loinc(x, *args, **kwargs))
+def ab_ddd(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_ddd(x, *args, **kwargs))
+def ab_ddd_units(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_ddd_units(x, *args, **kwargs))
+def ab_info(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_info(x, *args, **kwargs))
+def ab_url(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_url(x, *args, **kwargs))
+def ab_property(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_property(x, *args, **kwargs))
+def add_custom_antimicrobials(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.add_custom_antimicrobials(x))
+def clear_custom_antimicrobials(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.clear_custom_antimicrobials(*args, **kwargs))
+def add_custom_microorganisms(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.add_custom_microorganisms(x))
+def clear_custom_microorganisms(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.clear_custom_microorganisms(*args, **kwargs))
+def age(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.age(x, *args, **kwargs))
+def age_groups(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.age_groups(x, *args, **kwargs))
+def antibiogram(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.antibiogram(x, *args, **kwargs))
+def wisca(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.wisca(x, *args, **kwargs))
+def retrieve_wisca_parameters(wisca_model, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.retrieve_wisca_parameters(wisca_model, *args, **kwargs))
+def aminoglycosides(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.aminoglycosides(only_sir_columns = False, *args, **kwargs))
+def aminopenicillins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.aminopenicillins(only_sir_columns = False, *args, **kwargs))
+def antifungals(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.antifungals(only_sir_columns = False, *args, **kwargs))
+def antimycobacterials(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.antimycobacterials(only_sir_columns = False, *args, **kwargs))
+def betalactams(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.betalactams(only_sir_columns = False, *args, **kwargs))
+def betalactams_with_inhibitor(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.betalactams_with_inhibitor(only_sir_columns = False, *args, **kwargs))
+def carbapenems(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.carbapenems(only_sir_columns = False, *args, **kwargs))
+def cephalosporins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.cephalosporins(only_sir_columns = False, *args, **kwargs))
+def cephalosporins_1st(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.cephalosporins_1st(only_sir_columns = False, *args, **kwargs))
+def cephalosporins_2nd(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.cephalosporins_2nd(only_sir_columns = False, *args, **kwargs))
+def cephalosporins_3rd(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.cephalosporins_3rd(only_sir_columns = False, *args, **kwargs))
+def cephalosporins_4th(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.cephalosporins_4th(only_sir_columns = False, *args, **kwargs))
+def cephalosporins_5th(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.cephalosporins_5th(only_sir_columns = False, *args, **kwargs))
+def fluoroquinolones(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.fluoroquinolones(only_sir_columns = False, *args, **kwargs))
+def glycopeptides(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.glycopeptides(only_sir_columns = False, *args, **kwargs))
+def isoxazolylpenicillins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.isoxazolylpenicillins(only_sir_columns = False, *args, **kwargs))
+def lincosamides(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.lincosamides(only_sir_columns = False, *args, **kwargs))
+def lipoglycopeptides(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.lipoglycopeptides(only_sir_columns = False, *args, **kwargs))
+def macrolides(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.macrolides(only_sir_columns = False, *args, **kwargs))
+def monobactams(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.monobactams(only_sir_columns = False, *args, **kwargs))
+def nitrofurans(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.nitrofurans(only_sir_columns = False, *args, **kwargs))
+def oxazolidinones(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.oxazolidinones(only_sir_columns = False, *args, **kwargs))
+def penicillins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.penicillins(only_sir_columns = False, *args, **kwargs))
+def phenicols(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.phenicols(only_sir_columns = False, *args, **kwargs))
+def polymyxins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.polymyxins(only_sir_columns = False, *args, **kwargs))
+def quinolones(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.quinolones(only_sir_columns = False, *args, **kwargs))
+def rifamycins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.rifamycins(only_sir_columns = False, *args, **kwargs))
+def streptogramins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.streptogramins(only_sir_columns = False, *args, **kwargs))
+def sulfonamides(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.sulfonamides(only_sir_columns = False, *args, **kwargs))
+def tetracyclines(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.tetracyclines(only_sir_columns = False, *args, **kwargs))
+def trimethoprims(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.trimethoprims(only_sir_columns = False, *args, **kwargs))
+def ureidopenicillins(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ureidopenicillins(only_sir_columns = False, *args, **kwargs))
+def amr_class(amr_class, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.amr_class(amr_class, *args, **kwargs))
+def amr_selector(filter, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.amr_selector(filter, *args, **kwargs))
+def administrable_per_os(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.administrable_per_os(only_sir_columns = False, *args, **kwargs))
+def administrable_iv(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.administrable_iv(only_sir_columns = False, *args, **kwargs))
+def not_intrinsic_resistant(only_sir_columns = False, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.not_intrinsic_resistant(only_sir_columns = False, *args, **kwargs))
+def as_ab(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.as_ab(x, *args, **kwargs))
+def is_ab(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_ab(x))
+def ab_reset_session(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ab_reset_session(*args, **kwargs))
+def as_av(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.as_av(x, *args, **kwargs))
+def is_av(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_av(x))
+def as_disk(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.as_disk(x, *args, **kwargs))
+def is_disk(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_disk(x))
+def as_mic(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.as_mic(x, *args, **kwargs))
+def is_mic(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_mic(x))
+def rescale_mic(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.rescale_mic(x, *args, **kwargs))
+def mic_p50(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mic_p50(x, *args, **kwargs))
+def mic_p90(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mic_p90(x, *args, **kwargs))
+def as_mo(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.as_mo(x, *args, **kwargs))
+def is_mo(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_mo(x))
+def mo_uncertainties(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_uncertainties(*args, **kwargs))
+def mo_renamed(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_renamed(*args, **kwargs))
+def mo_failures(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_failures(*args, **kwargs))
+def mo_reset_session(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_reset_session(*args, **kwargs))
+def mo_cleaning_regex(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_cleaning_regex(*args, **kwargs))
+def as_sir(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.as_sir(x, *args, **kwargs))
+def is_sir(x):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_sir(x))
+def is_sir_eligible(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_sir_eligible(x, *args, **kwargs))
+def sir_interpretation_history(clean):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.sir_interpretation_history(clean))
+def atc_online_property(atc_code, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.atc_online_property(atc_code, *args, **kwargs))
+def atc_online_groups(atc_code, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.atc_online_groups(atc_code, *args, **kwargs))
+def atc_online_ddd(atc_code, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.atc_online_ddd(atc_code, *args, **kwargs))
+def atc_online_ddd_units(atc_code, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.atc_online_ddd_units(atc_code, *args, **kwargs))
+def av_from_text(text, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_from_text(text, *args, **kwargs))
+def av_name(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_name(x, *args, **kwargs))
+def av_cid(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_cid(x, *args, **kwargs))
+def av_synonyms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_synonyms(x, *args, **kwargs))
+def av_tradenames(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_tradenames(x, *args, **kwargs))
+def av_group(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_group(x, *args, **kwargs))
+def av_atc(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_atc(x, *args, **kwargs))
+def av_loinc(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_loinc(x, *args, **kwargs))
+def av_ddd(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_ddd(x, *args, **kwargs))
+def av_ddd_units(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_ddd_units(x, *args, **kwargs))
+def av_info(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_info(x, *args, **kwargs))
+def av_url(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_url(x, *args, **kwargs))
+def av_property(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.av_property(x, *args, **kwargs))
+def availability(tbl, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.availability(tbl, *args, **kwargs))
+def bug_drug_combinations(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.bug_drug_combinations(x, *args, **kwargs))
+def count_resistant(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_resistant(*args, **kwargs))
+def count_susceptible(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_susceptible(*args, **kwargs))
+def count_S(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_S(*args, **kwargs))
+def count_SI(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_SI(*args, **kwargs))
+def count_I(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_I(*args, **kwargs))
+def count_IR(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_IR(*args, **kwargs))
+def count_R(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_R(*args, **kwargs))
+def count_all(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_all(*args, **kwargs))
+def n_sir(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.n_sir(*args, **kwargs))
+def count_df(data, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.count_df(data, *args, **kwargs))
+def custom_eucast_rules(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.custom_eucast_rules(*args, **kwargs))
+def eucast_rules(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.eucast_rules(x, *args, **kwargs))
+def eucast_dosage(ab, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.eucast_dosage(ab, *args, **kwargs))
+def export_ncbi_biosample(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.export_ncbi_biosample(x, *args, **kwargs))
+def first_isolate(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.first_isolate(x = None, *args, **kwargs))
+def filter_first_isolate(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.filter_first_isolate(x = None, *args, **kwargs))
+def g_test(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.g_test(x, *args, **kwargs))
+def is_new_episode(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.is_new_episode(x, *args, **kwargs))
+def ggplot_pca(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ggplot_pca(x, *args, **kwargs))
+def ggplot_sir(data, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ggplot_sir(data, *args, **kwargs))
+def geom_sir(position = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.geom_sir(position = None, *args, **kwargs))
+def guess_ab_col(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.guess_ab_col(x = None, *args, **kwargs))
+def italicise_taxonomy(string, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.italicise_taxonomy(string, *args, **kwargs))
+def italicize_taxonomy(string, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.italicize_taxonomy(string, *args, **kwargs))
+def inner_join_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.inner_join_microorganisms(x, *args, **kwargs))
+def left_join_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.left_join_microorganisms(x, *args, **kwargs))
+def right_join_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.right_join_microorganisms(x, *args, **kwargs))
+def full_join_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.full_join_microorganisms(x, *args, **kwargs))
+def semi_join_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.semi_join_microorganisms(x, *args, **kwargs))
+def anti_join_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.anti_join_microorganisms(x, *args, **kwargs))
+def key_antimicrobials(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.key_antimicrobials(x = None, *args, **kwargs))
+def all_antimicrobials(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.all_antimicrobials(x = None, *args, **kwargs))
+def kurtosis(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.kurtosis(x, *args, **kwargs))
+def like(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.like(x, *args, **kwargs))
+def mdro(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mdro(x = None, *args, **kwargs))
+def custom_mdro_guideline(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.custom_mdro_guideline(*args, **kwargs))
+def brmo(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.brmo(x = None, *args, **kwargs))
+def mrgn(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mrgn(x = None, *args, **kwargs))
+def mdr_tb(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mdr_tb(x = None, *args, **kwargs))
+def mdr_cmi2012(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mdr_cmi2012(x = None, *args, **kwargs))
+def eucast_exceptional_phenotypes(x = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.eucast_exceptional_phenotypes(x = None, *args, **kwargs))
+def mean_amr_distance(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mean_amr_distance(x, *args, **kwargs))
+def amr_distance_from_row(amr_distance, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.amr_distance_from_row(amr_distance, *args, **kwargs))
+def mo_matching_score(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_matching_score(x, *args, **kwargs))
+def mo_name(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_name(x, *args, **kwargs))
+def mo_fullname(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_fullname(x, *args, **kwargs))
+def mo_shortname(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_shortname(x, *args, **kwargs))
+def mo_subspecies(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_subspecies(x, *args, **kwargs))
+def mo_species(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_species(x, *args, **kwargs))
+def mo_genus(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_genus(x, *args, **kwargs))
+def mo_family(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_family(x, *args, **kwargs))
+def mo_order(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_order(x, *args, **kwargs))
+def mo_class(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_class(x, *args, **kwargs))
+def mo_phylum(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_phylum(x, *args, **kwargs))
+def mo_kingdom(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_kingdom(x, *args, **kwargs))
+def mo_domain(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_domain(x, *args, **kwargs))
+def mo_type(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_type(x, *args, **kwargs))
+def mo_status(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_status(x, *args, **kwargs))
+def mo_pathogenicity(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_pathogenicity(x, *args, **kwargs))
+def mo_gramstain(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_gramstain(x, *args, **kwargs))
+def mo_is_gram_negative(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_is_gram_negative(x, *args, **kwargs))
+def mo_is_gram_positive(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_is_gram_positive(x, *args, **kwargs))
+def mo_is_yeast(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_is_yeast(x, *args, **kwargs))
+def mo_is_intrinsic_resistant(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_is_intrinsic_resistant(x, *args, **kwargs))
+def mo_oxygen_tolerance(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_oxygen_tolerance(x, *args, **kwargs))
+def mo_is_anaerobic(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_is_anaerobic(x, *args, **kwargs))
+def mo_snomed(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_snomed(x, *args, **kwargs))
+def mo_ref(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_ref(x, *args, **kwargs))
+def mo_authors(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_authors(x, *args, **kwargs))
+def mo_year(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_year(x, *args, **kwargs))
+def mo_lpsn(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_lpsn(x, *args, **kwargs))
+def mo_mycobank(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_mycobank(x, *args, **kwargs))
+def mo_gbif(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_gbif(x, *args, **kwargs))
+def mo_rank(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_rank(x, *args, **kwargs))
+def mo_taxonomy(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_taxonomy(x, *args, **kwargs))
+def mo_synonyms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_synonyms(x, *args, **kwargs))
+def mo_current(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_current(x, *args, **kwargs))
+def mo_group_members(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_group_members(x, *args, **kwargs))
+def mo_info(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_info(x, *args, **kwargs))
+def mo_url(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_url(x, *args, **kwargs))
+def mo_property(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.mo_property(x, *args, **kwargs))
+def pca(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.pca(x, *args, **kwargs))
+def theme_sir(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.theme_sir(*args, **kwargs))
+def labels_sir_count(position = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.labels_sir_count(position = None, *args, **kwargs))
+def resistance(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.resistance(*args, **kwargs))
+def susceptibility(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.susceptibility(*args, **kwargs))
+def sir_confidence_interval(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.sir_confidence_interval(*args, **kwargs))
+def proportion_R(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.proportion_R(*args, **kwargs))
+def proportion_IR(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.proportion_IR(*args, **kwargs))
+def proportion_I(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.proportion_I(*args, **kwargs))
+def proportion_SI(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.proportion_SI(*args, **kwargs))
+def proportion_S(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.proportion_S(*args, **kwargs))
+def proportion_df(data, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.proportion_df(data, *args, **kwargs))
+def sir_df(data, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.sir_df(data, *args, **kwargs))
+def random_mic(size = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.random_mic(size = None, *args, **kwargs))
+def random_disk(size = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.random_disk(size = None, *args, **kwargs))
+def random_sir(size = None, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.random_sir(size = None, *args, **kwargs))
+def resistance_predict(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.resistance_predict(x, *args, **kwargs))
+def sir_predict(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.sir_predict(x, *args, **kwargs))
+def ggplot_sir_predict(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.ggplot_sir_predict(x, *args, **kwargs))
+def skewness(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.skewness(x, *args, **kwargs))
+def top_n_microorganisms(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.top_n_microorganisms(x, *args, **kwargs))
+def reset_AMR_locale(*args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.reset_AMR_locale(*args, **kwargs))
+def translate_AMR(x, *args, **kwargs):
+    """See our website of the R package for the manual: https://amr-for-r.org/index.html"""
+    return convert_to_python(amr_r.translate_AMR(x, *args, **kwargs))
diff --git a/README.md b/README.md
new file mode 100755
index 000000000..43aa015bd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,184 @@
+
+The `AMR` package for R is a powerful tool for antimicrobial resistance (AMR) analysis. It provides extensive features for handling microbial and antimicrobial data. However, for those who work primarily in Python, we now have a more intuitive option available: the [`AMR` Python package](https://pypi.org/project/AMR/).
+
+This Python package is a wrapper around the `AMR` R package. It uses the `rpy2` package internally. Despite the need to have R installed, Python users can now easily work with AMR data directly through Python code.
+
+# Prerequisites
+
+This package was only tested with a [virtual environment (venv)](https://docs.python.org/3/library/venv.html). You can set up such an environment by running:
+
+```python
+# linux and macOS:
+python -m venv /path/to/new/virtual/environment
+
+# Windows:
+python -m venv C:\path\to\new\virtual\environment
+```
+
+Then you can [activate the environment](https://docs.python.org/3/library/venv.html#how-venvs-work), after which the venv is ready to work with.
+
+# Install AMR
+
+1. Since the Python package is available on the official [Python Package Index](https://pypi.org/project/AMR/), you can just run:
+
+    ```bash
+    pip install AMR
+    ```
+
+2. Make sure you have R installed. There is **no need to install the `AMR` R package**, as it will be installed automatically.
+
+    For Linux:
+
+    ```bash
+    # Ubuntu / Debian
+    sudo apt install r-base
+    # Fedora:
+    sudo dnf install R
+    # CentOS/RHEL
+    sudo yum install R
+    ```
+    
+    For macOS (using [Homebrew](https://brew.sh)):
+    
+    ```bash
+    brew install r
+    ```
+    
+    For Windows, visit the [CRAN download page](https://cran.r-project.org) to download and install R.
+
+# Examples of Usage
+
+## Cleaning Taxonomy
+
+Here’s an example that demonstrates how to clean microorganism and drug names using the `AMR` Python package:
+
+```python
+import pandas as pd
+import AMR
+
+# Sample data
+data = {
+    "MOs": ['E. coli', 'ESCCOL', 'esco', 'Esche coli'],
+    "Drug": ['Cipro', 'CIP', 'J01MA02', 'Ciproxin']
+}
+df = pd.DataFrame(data)
+
+# Use AMR functions to clean microorganism and drug names
+df['MO_clean'] = AMR.mo_name(df['MOs'])
+df['Drug_clean'] = AMR.ab_name(df['Drug'])
+
+# Display the results
+print(df)
+```
+
+| MOs         | Drug      | MO_clean           | Drug_clean    |
+|-------------|-----------|--------------------|---------------|
+| E. coli     | Cipro     | Escherichia coli   | Ciprofloxacin |
+| ESCCOL      | CIP       | Escherichia coli   | Ciprofloxacin |
+| esco        | J01MA02   | Escherichia coli   | Ciprofloxacin |
+| Esche coli  | Ciproxin  | Escherichia coli   | Ciprofloxacin |
+
+### Explanation
+
+* **mo_name:** This function standardises microorganism names. Here, different variations of *Escherichia coli* (such as "E. coli", "ESCCOL", "esco", and "Esche coli") are all converted into the correct, standardised form, "Escherichia coli".
+
+* **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".
+
+## Calculating AMR
+
+```python
+import AMR
+import pandas as pd
+
+df = AMR.example_isolates
+result = AMR.resistance(df["AMX"])
+print(result)
+```
+
+```
+[0.59555556]
+```
+
+## Generating Antibiograms
+
+One of the core functions of the `AMR` package is generating an antibiogram, a table that summarises the antimicrobial susceptibility of bacterial isolates. Here’s how you can generate an antibiogram from Python:
+
+```python
+result2a = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]])
+print(result2a)
+```
+
+| Pathogen        | Amoxicillin     | Ciprofloxacin   | Piperacillin/tazobactam  |
+|-----------------|-----------------|-----------------|--------------------------|
+| CoNS            | 7% (10/142)     | 73% (183/252)   | 30% (10/33)              |
+| E. coli         | 50% (196/392)   | 88% (399/456)   | 94% (393/416)            |
+| K. pneumoniae   | 0% (0/58)       | 96% (53/55)     | 89% (47/53)              |
+| P. aeruginosa   | 0% (0/30)       | 100% (30/30)    | None                     |
+| P. mirabilis    | None            | 94% (34/36)     | None                     |
+| S. aureus       | 6% (8/131)      | 90% (171/191)   | None                     |
+| S. epidermidis  | 1% (1/91)       | 64% (87/136)    | None                     |
+| S. hominis      | None            | 80% (56/70)     | None                     |
+| S. pneumoniae   | 100% (112/112)  | None            | 100% (112/112)           |
+
+
+```python
+result2b = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]], mo_transform = "gramstain")
+print(result2b)
+```
+
+| Pathogen       | Amoxicillin     | Ciprofloxacin    | Piperacillin/tazobactam  |
+|----------------|-----------------|------------------|--------------------------|
+| Gram-negative  | 36% (226/631)   | 91% (621/684)    | 88% (565/641)            |
+| Gram-positive  | 43% (305/703)   | 77% (560/724)    | 86% (296/345)            |
+
+
+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`, `antimicrobials`, `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.antimicrobials
+```
+
+| 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.
+
+By just running `import AMR`, users can seamlessly integrate the robust features of the R `AMR` package into Python workflows.
+
+Whether you're cleaning data or analysing resistance patterns, the `AMR` Python package makes it easy to work with AMR data in Python.
diff --git a/dist/amr-2.1.1.9236-py3-none-any.whl b/dist/amr-2.1.1.9236-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..ee10dc7a89ffac445db90e7130452ac656190dac
GIT binary patch
literal 10188
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

literal 0
HcmV?d00001

diff --git a/dist/amr-2.1.1.9236.tar.gz b/dist/amr-2.1.1.9236.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..9e2384b75acf3339a05c42f171ed9e5ae9b55f7d
GIT binary patch
literal 10040
zcmch6RZtyF&?WBf?gWP$+%<S`cb5crxww094esvlZXrl;*Whj!x!ldS^*`+EKJ3<1
zPj#KsH7`9=-KU2#772+f?$rhcV&>q=#>xKq-xA>D;$?R?bA`I}e{rSdOZI}yln+ca
zQa4HM`?ug#$A5b^J16yOmuwQ@a`c)r#g|LdT3M8c_7vI&#{2jBC(nE-WKRw+I&@^?
zM+d1kCc?jSLep`oReb6GbM^ihvh6=zF&V;;Pw$bU`PjZej&^6)vvd9g>}5E-nxrk^
zkF$kZ5_{p)2$cLe;kv5l#7Tz15W2lvvPGHT8yavBtql2y794cx-wF*>ehqawZjOgc
z+J*%JQ`CMyuHwf_Kktw#e>za}+9VHUKY2v#oyX<${dG$@QpchZRA#g3#}5Azn7OWS
z0@*A3xV8gB7+)c4ykN{gUj|<o(A@*%o-ZSJmh<Df62ee`)A9jPe+Ufhse~ZvL&Rb}
zuItYs^4--ukc=8gxyE#B(P_(Nz33K*5;GG2wV&^F5H$NJcK9r_g}oZMHBJUGsrbl8
z%#&LG6mL6Gl&G6<4UcW+wRr2m+bTI*hK)+PF-bO!B+Q|!x`L9+Omh|zATg9BeaTES
z93g6>3KT>o>b(`2j#ppsxgbe8>huY2t~C3jnoh}?L!3k?CkL=0Y3!DhJW!9ERMjm*
z8=iXHOrs4Yh6kLQ({mO{?~eA-<;z3}^Dz~+qpF!mT1pj9eCJfs$P<c}sGZ<%-RxwT
zOn@~=K1a-(4YAddhk-&Px|lmN03MFPM$Fhc_sgPq*prjo33>v<*fZ%^zKxwl2FGU|
zvB8{aCT;2$N>p>g62KD}G%=NDzv7{oW208FxU;Sptg;NFvZYK;`XMk6G)dsf-44%$
z*Pu6)7W5JGKxNjnTC*1Ms;b!#;+P6_MX>v#!=&00gd%XE`~=7sb3wA#jgiFYYSJsq
zdI9T6P1o5%>KGwLOp)`C38}^3r#i`j!O!(X+3Qc6XTJx!V`tyxmMu)JyNdgLo~E`7
zH^eF2#ZN4gVH~EPJ*(CV0bd=M!jJE+7*2HykYSxD5L-yxhw`mLI_QShgMko|Z#`$h
zyP-t6OSvUcuQI4L0^w#1Otf(@iL5IkoK>rNz`CAFnmNfu-NG3vYLtQM=sFR~4{e-L
z=;mL!ct3C#iO9uO?L0CEI^kUlxEg9r+p>N499x!~nrMBn8B3AI^Q^wY5)5$_z_7%k
zm%D3=l+k4YMkP;KVc3VUI4yZtt$0}JRkF3cX??WQ(N%`wn0<7UQR9LyCoSm`c^+kr
zzCFq7ApA}-yRY&<&QwAm;>FWnOFkvDrQoJlLLU98&+G2vLoL+ud9LtiU;he*LbpK(
zd8ZIxj;MYnmvcj37l6Qwk1!WxtGgTOBKg_Q7u{k2wTexm!Bd1VO}2MFGi8}bTcGe4
z2D{qQ>hLtVVQT57w4Q=ds#R}n)8?qO-f{<{Vr6VojSFkKdN8{ePRU}Ut^#?il|QB4
zP(=~fbX(Oo>s#~h2sdKGZr173-QQY|jz=9e>!)y=02t`px^%R3)IC*`q8Z04Rwh&T
zc1@K=YcO?RW$9FM?x)^In#~&}q_Do(>v$ai=Q2$dwSi_A7?7_<7S>9GD=04t3Z+W+
z@Tvv6)|H={B>I)Sij0DWDm?MU%eyW-r~DX4YuGLJHcYiaO92H1i7mfEf;X*RK7akJ
zVff{iIcFQ@7!|EKQHj<Uk+-$Es_@+bQNi#i=L3b=MmBK6`u;@pA-J`pZw2;#we4Dp
zl5@NZQ$%p&xv<}?+9*Q^3gno|=Yr)^Fk6*dpEI?6k{PVS)t6-16*Xux(AlbvjEKX<
zqT7K3^~d(pG!I$z&gG-sB0~2;Hc1aDFh(?su+}e{4dH1CuNNgn1r{O2hk{AToD*)l
zcEr`ql($c2nvJ_BNFK?m44x!q&dE-0$gZQJINGLg7OnG}fl8yPBbkDd$#|0v4h#oC
zkBY~eew*^}ZG}b1lMarL%I!~znmD`e3l7W$fRia0%z_`HGDvOg?8KKm3FH3&NVW*B
zgqt)K)e916wiHTyEr2<b*NM|sF-4vfAv3mL>&Cwkju*~>ZwgLLRWh1V%^~KL7)GP@
zXo2C)I9wpgrcUI+n-E_nbP!ABQEGZW-Ja0*ww}a7xGO*Zq=%;#Zx>9<j4@ypUjoK@
zkEtB~Nt_a+XuVSmYvizVP*Bl$O>eF0K124Y*>!-!)N_B_RYR)@O0D>aOUUHRh7P~e
zEfd*=cQ@cRS=;qT&9KQs7Kc}Xz)rL+Vs>?IlxIO@+q)XhQs-R%%wfDDdbs_le4<>o
zn3ML2)vuN~IfV8Iy7o>x)NZqO_UgP^n%Vp-``>qu1;<Y8gG%E(O=m~iXAvivRJGe;
zMbCk!U=v^$#IEK!(0}c%f1y|4M+>A{h%DnNa1TWJ_zK$#IsdHw+9Y6KGB(WI{V+IC
zNF5yL&()jp-dL-*VTL_g7xHrIQGAR465%qOS<sAJhR|=UFM+3#10bvuUXf@HL>B9i
zRruYoz)QsAc3y}5weaSl53zl(Dt=mL<|3HZ)j3*oPof$c52F{_jS(s5rC2s>EBJ`#
z(eZa5runj@p-xb>s+iuwz)(iD<=9{20XUo8l9U0H$3{~L@W+ko>(<MPj%ix}<m?7^
zV2b5C-4m8*lHS+t3mxl{Yg#~g?lukm;1jGJDmuV^a}Iu5hxH|YH%gZp)PvpX;4BiH
z@77oaZ;>YMLzloRWPg)yb1F3>_3pp={pQ!ce*i2e2-e|8y<+%`0ZE6=xCnc_jw4a1
zZqT0~1eWce)a;H2l6IE$$%txLgqa#xqJgiYJY0@ZJjXMb`r$}zL8!@%&^m`r&|m5Z
z@z?AqhHxWgb@{S$ZNi&WNa2z(uL2i;QbMgU38+vEryu0t(;Ax?(>@ID+~a)Mwr?QH
zb`aC|5ahxt9^Toa!u@GMSEqu$@4dOeYKLuAvyhAwz*sjGmfG$&kCpb}dy6rQQBprN
zhY#qRo@X5l9wn?Y2`=mr3>W)}nm0@M@<p^oRWNmZUmK<n{s-N8q`;sw%v~*EFT&1(
zA3mHh72E3#mg_VY$I2YM-4DxNPTSv@-&T3+z76nc^MpqQ;4wBbVR*;37LM*th8F$8
z)MxuW<a<l)KDyBRyoFhdcZfQB`z?s55r}G57SDVlRS@=}!T!u)V*pa2*GPoOsJsp$
z4w{QGd+4^8y&Z=8XDg?sGU&f)b=k&!PuHRe+#7A1j8uygZqT?Bdb2>cDSm*fkox`o
zA~Y!07dt%u-Nt$VVHj#(z&lW}A`;VyL^cmLgez*V^BXNxPJ3Ku(c_5b9nO>=`Az#|
z7KXisns!P?PvfIE7{NW~T~9Ojqe}0jEOKsoM&M=E!gBw?y_nza;{*2Z`r`AY)}NoS
zPD5D^+pQDVhNR*d-}SF}P-__Nx5=@KeW2!uC-!#tx0YVSXnL|WHZNd}g#1x7zQt|Q
zcO794+0RW0%p19O-^wbA!>h_3a+qOEqHOSfHLb-IpMy%*uSFN=5gUp4d!OXgM(Y$K
zHlOOGt>*et*9kt#_h>qzVG~n_>Z5NTK)zEAFlf<mIFenqV>zx{YID$dQTA{II`{r{
z;I?~o`dzCE^zx_bdoXMh9cqEpg9E|f3}pzzM_^mqTO|Qh$wy$l81W;+`A#4@!s}c8
z_yc6xky-aU4oBOR)Rs)wA!!lUR5c?gX-9yjzVk8lL(r?3b@<8liI$7V>#mIcoWSt{
z#L{#0O8?e6=6Qrl=H}Q)aJf2ksUY<v43yP<k|jM!g_AZBcDW(>l!J;jkN2x{BpmvA
zB9>MxA?(=Trl$4;OZ<qFenv5QEsrkAkA=r3-0PBrmF1Q(P!lhK$y5z30!9C`&sNVi
z97)$7?#Hpj7;m?SgMkbrA8LF+>}9+h?zzC=_yu#=X!#X7r*ve!1mRpuNtUL9y|e#i
z1AXxMUy<a2{%}$G?76go&wz>2L>JxhFK)nVN3dR{jURNCKst*<P)R-o>50}oxTy5X
zXc)$uXiar9EO#Nv@*A|%-mby@i(JaODN9auO9ofUFYT9`THIo|fin60N!5soMs{Yh
zn)KM8x{OWjjc(8iv`8m0KR)ahnTwhknhu0qEv0@vZm2S(&+SVOII*A|WJRl3yE}ZO
zXh@y@`Hmc#KmImhy@Rw$)AmjEf_8NK=3ftXi^i>Lp;&47SdzcQo4;TRUH9uxIbXXs
z{Qwymnc-)d9)7BJdjkCeq24d1FY1$If;8JM6{H$(sfMyilzE<lrArA3N7)y3{^SC@
zsd{0}mG2!@_Bu3nr2~IBoKi=Ok=aA@9Uh$aAwiN7>}LS$U%LTfhFoe%(aiS5-ou<)
zqsGu|l(6RGX;mOA5a*}6StU&?sRV#Un3Iu4TBL$Au^$O>RY-l1b{IPi1>>(^xV=xb
z{zt^8io|=A-j!2Q^c`q@-<X9MG{spYRYVgsGK0Sd5tDZG>u6zAHCXK)3~1v6;akvr
zyLj}q-Z}k3qN^%6W`yAR6N40Y70u@=j?Xp`FJ#VBO-PxS1xa_?T7Hwnuh(k8YPbBB
zR1<TgzTayilB+V$7{Fycl*nE@lt|z(3qg!h#|fZsg7dbDs<w6=zWr*=GO-Nn63ecG
z@n`A55J=yr-()d9YJ^)a5zmDWJP0i$)aCdBwJx+x86l#>LzA~|d<&*p6_`E(Ilqm)
zgw8X-FpjirF#M)O0EQm50s?@{!I5s%tSiC_d!q8YW)1MurTpQ*(MPEyCkrxI`74h5
z=P&(QQ2r~M7SNlRU~Oo$5PyOJ@SGF=0HAC8f3UbGeW+qYBvX;63(-ahLj%LFjG^@_
z++$4myoO$$FE{@{8)CT;RkVN}l}#}$uc-%p?ql%&``#|@(>>AB+sJdMDr&@i;s$W^
zHq?}Xl~6M38h08qG`GPJBf3w;P>jfD2$ZL68fd*fRkVDKKa2^*wmM^ebB*7RDUl24
z$!`PYHw@k5;ygv~Ar>kVu~UK?RKAK4b(;1#M~oUbf&rVze@dkUo}$kqVF>LBe-N*+
zv{51nn*k4YQ~k}svq35*B(Vpk*=uRZ^^soUSzM|9<;f#CI;n;Fsi(_LGtHh)XVTaC
z!~IG~%dUa&&Kws*V%q_n3&t-~f!Xl$m^UTxJkQBm)QTC-K5Zz9jmU}icJ8M?>FC9T
zQfYq)jj69CG^TpRl`@lCWO>CM#&K%V>xZ+Ye3L8)(}Yj`T9;r|!Mu!Oo2BW~ha;(!
zSVC&lEOniVXOAx0c$H5!T}}s!V-J7BfD$T}6m%?0!Yo81@)Go*N&Lf@muv;o*Pa>F
zRE1zR7R4W}E>G~^ZTus}nfAp5xsD20ivCAGjF|QaS0?SS1i`$FaZpP`OG8_HT9bZO
zM^fjLT+BdIvsoJ66$a7hdB_y5eNIm((~WrnM&Ze64&piQZQfp%LLFcW^$H<&pQ{gS
z+CXrD03^~k74uG^-5Se85@_JNSlY+`%Kl81yy&_jr>+=IE6;XLBhR)JPuE%#P1mX^
z{Ex`^M;!elykh?W0?CU_yvd8|TXO2t+5d>N0|GX?f3_5F&{7j^(4r~gIPY5CA*~qx
z4?N%hKM3J}M8-ej`x>{vMJw@)J^f2XD5Gd!0-*+15QI37tJyI7XGEd-^hKPepJpV(
zE5Y_u_4Ae?`Tz~-+RG5HMjAHp2n~x)6{j<Oq<<ajl^c_@mCMRNpC-X`DPBiY$5BJ2
zLp6#YDR*OZ9EVVK`)7NWnxd8&A6(eQY7kF5S-vSvw8pr3Xapd9v@PcPz!N&FL4!tZ
z{-F|9*L?UvGHy`T=8Tgjm{GTLcvz>b?sIb)7ivG(6TbhC7A|${(*cyAK$i!T`-GoK
z?RnLfx}oI3W%hfH*QXRNUK~9%s>66c>b05(wWX%FC;qo`*<I3n3b#l9GLM3~^Hfw>
zZ~Lww(1U|&OUL*fevt+*4v=Y@H1P~&>}uOkL>u5$5z?9&-ce1)cUxUE={dr*DE{Tv
z@8&;cbKIHN{Qc87ePsov=eWN4RlCSP+sYa~z%1|gP4C9O(wBa^3e^q^GrPBS0(E1q
zKHT4pK7QPIakLD<#5n-}!*m-_;{=ws8@wnRd{(!5&8|gFai1JlzaO9>dXzr^3-K=z
z!9IaRJ%sx6Aud?Kdu7&<slke{d0Q2y9$L`2Z#^>u8lALDyDV(lG?(t!2A_ugfm7@{
z%L8~E4zRMPo|S_Pf;tV(X;+4>errfsGF+qMQDkPnqxN*cj`j6|e2)Od^Sz6N{){KX
z?<${RG9x2jm_@`y@j7hfWww|IEcN$$Ea>}9H{q=)z;vYwZ48Lp4$a;=^QMf?@VWkm
zM{^S$V;mWh!>D);{YI+RXiVKYh9PW_L#!U@G~&d)=}e^hUMlr0RHlKS@!kZlzZ&rT
z)eK?*HeX!WJx$F9H+A(8m<RFu=sa10r56QtUot-L!hb^59R2syZs0$UiE7{l{8uLe
zdz&m|wceLbI1wC8&v-?w1QG|Pb%XrAcUHNo#<N>MvH5E4>6lHIH$=&tDMKxt+);ns
zOM=JbCT0@CUJUtld=MmPR&o=R2=i;TK~kCDV=Y8xS$*xc5%o8ES@IU*85jMqp5^z^
ziXwxe?>G2as{|uzM(Lhka&n@*SX3!hGiP8tGD1Cv_3U}h)FbMDpoMQJ#C*<|Gs3i>
zs1!`nE@Jt@lU*It2cwUWJ0?!aXg4aiYsDIrps|czGn5|O4p!9zmZBK+DNoP7dN`#T
z6{hV@&x~c2UYyhprQ1=2mr^dui*CG?S0OSEW~dl5N77afX4FfMN(?NvzS7;GZ08fc
zX+#Qem0h`OqjK`yXrlk78cdHw(c<Qp;%V_y`f{|3#seDBGl~fyrUBEzow;RZn>1@n
z;Q}{K;?@fJZ>SL1N<YS_o+E$4A1QmWR1hV0qZs&Jr6J8Fj=-ti_^~kc36n730ouPt
zkg|BMPSb1M{CPAAM#+WOpF#CLQHDQ2l$&<|IM?wa9(Oks@FG5<8CK2=F0r##%t(m9
zo{f30!duokE*(k5DF0er<Z;nywc?gK=PRp|Z(^ClF?h#I@7=AY_!j-Sh4(q6UccZx
zf|eifpQK!pGV%<{szyljsT^$opzmAgxj@ipnMUvS$SM-5w%iS)y?FW43qo<xDae8`
zoqu@AnXbIt>y%e`{oxvR8r`*s{@D;ExoQpIfn*TR@Rq!u>v>#H_;6()qeS4BC)g!l
z^}2D1f$+k!eeLnqyN&DmOav2UCWun-%3xxBrV@p#haq&X6fwMKIY;`l<!xBaY0gP_
z{&YvIkolq=crz;>2)GK8v}+#SCo&Ot7d-;y$H{=&`G_Au*W2EPB=^00mYftG<6ECk
zLbjb(DaELZ|IHpH;;5yoPQT7}ycnX~DXu`kw`Cucw*L)0`}->)-TIGqV9Zy@zS9m_
ze!oBXN+S+(>#SP{c?+GlZ7PGv77rdGpNjqkK_nj`qy%b)+rl47@ZJ;$OsDOU@$HLd
z<#2*h#m+*Pbn(@zF18IYFs_4O8dp-)9UF<i&VwnPq|2aXx79{WoleBIhN5%tWnSU(
zgD@@vzzSO9Jx|{KWmNegdVG=H`AVW+u4PP|#a~raVS#e;wo!|~cyfz*&&x5d^ubLm
z=9j<wLJLlYaNG62q7ni--mg;q$T=pSp+`RnSHaIW4gsvq4&VcdtY+8{ybHKD+pcu4
zLi}X6q~ku0PQNijb&#Z<>;&`MhArw;1I#hhd%9_kckNzPG2M#C=-+hggEjnqrn)G6
zoZHV)@EJGFA+dhwecYnX#s@us-qJAr_FVMH6W`-cx4K>qIBEfc^uhgS^*e4B<0iE`
z50!Qc4Y#gG>f@Zs@=eh0U@w}J_qwFp^c^m@5(6g+QW(*IlN1fZ@-6CqD+Z;Eog3+c
zQ3+_NM9vV(4yVps{!<^B%!fZR#kV34lO_dLflO@ZhBz#Asi18()W3~NG_%b<GEDBO
zX5Z4d3*!hZHGuHX>xaUUC5ot-pXT@nLR-U{h~sY(wT+i~qBh0?5($yKma7J^S3m8*
zB+`4%SrYkB)3&crbUucVR*b<IvjU}Ab=<pXU8keYw<PgZndlP;0Tc1&A4c%E-lQcA
z(W|S0;waa+pQ9XEN^T3YFpvX}4E)r-a6?gI)bc7|S!x9^Cm9PqeA^uz&`FgSB!w7$
zbwRq@&01Bv_uQ?omB@RlQYtup>qrQ-WVcYw%(y{7KaxaU<>mUJj-_gfg%jFk2p1Q@
zNXlMiK(uTKTc{b0Y&0B2#nFWj7JL5SBP@prdPR}pJrF_4NR%A3jk!vX7;(EbLkL~{
z8dG)%UO*`#T95B^KI+79cU>?Xs@G;$$OH^|F3@*=K_uVEhM%JplABn`(Ra90;rRPC
z49)UTDubs0rd{*KUfS6;MAUuV_Wf>}qbMg3zIZJD+S|#s;`ZvSCFwBHBGMGUB-F&y
zgQotVX(J(MlPNWB6SCzhkrPHb+s6+k&i@d&3y3HWBv64E`jHgeBpoHEneL156r8Kg
zhrzD{<&UcEuAhhk!^c<iYH1~p=j2UUb*ac$vuMMtQ3k&0nQ=_6=eD2tEa-v$)sWW7
zv~UYT%FTt~KYP%ZzvO#fHaVTY_7RQ{h7f5z8*Rx6Oj+Kt5D~08&RKVqAPr^D-(;J-
zrRRIvCa4|qk$`!B0r}8;q2nxBZF`^Fktc+92l7QddhJt7N*##(Rq{jLCC#O&C<`(h
zd$=_p^I)4(2ggld9(Ydjt{W^Ipg-_m%m_k5sL6?{3pxw~_~Mj)sESRg!j0d+;i~jl
zml4kW`MKbJOng*I<qPe9xTSS`x1qCh6jr^eNBf0(ZwHO>`niNSvchzyIQKK^s>8M%
zsG8ikeI)x9K`JwUc-uIVh+5V%nwdteh=V=9pPnCegMug8M7>Z(e9P0BwF}-eiGWv4
zCjNlOBKCPj$4j^j7=^kjX1eLyfy{{=shDy-`sq~Wz`*tm@&bX7yP_uv!+G1nrPLir
zB$>L1GXeY>Bm+1(n0iHbJr0m%!~Ufmr}HScOjuZ9ea!VHybnOpAoXJH`vbGNenKk*
zG0id5Zky{4*rX2mYvk>$uua+bJ#@LXc9_-`baplx>$S6opNUG*k4q91dK}2FkOxGT
zdkN)WP5gw@%iljB2C3fw-uG-AdjZaWyJCuQf7oWaRV?yta1_3-K+C*}Q?Y${mdeyE
zy<g=4bt-p9BgOayg8mx0E<EocGE#_?aF;126H^4(x^!i{UsT}G=N_eI#+L*kuzubt
zV`29N;F$}dkOGFgv9a24MqiV}C+U<ZkwtTj%Y%^gXeXQk?frz=%YNXmr12F((U5%A
z9FS(K^Ra_3_`#N)j1<y&xupghhi44s^cRo1#W=!q9HznRkTu4$pD?7x!0Khrz>^&c
zfhIx4w&sw(LFRzT)_DG-TqPgJk-a20rXb690qR17$ml3wv>SKT8xZzmfH7-!ekW=I
zC$8(T;4>LmWko`SerALYX)@S0K9siO&~=mr59@u@7?^nP3njz+6}Q5CM3FT@0kO+(
zgbAi4Iw8hciCZw2R!t6iP(o-=@8PgqMa4|i!}K@W#S%82&Sb#a5dK9mbsiTbfYJn|
zON|}6co9lz*|-H7&xyd2unX%0o1EH8*kQTW9<@xvo=jffQXiW$nmJ=##-72Ebmcqg
zE9SMMMtJnuUNu9svGS}R66qv}pfg;gr2q#bum5En+BVGcgdxlvbO71*+9*!JF1w99
zWH)_}=&ZDP*&OYy+2nv9e$373g&wulgI8j>N++kXZI?F2V?@u+KrpAr=8FMcB!kqn
zzYk`Rw)IpJoM#8)BZ(m0sT0#}<;@!M3zU9JuE?)lQU+vZWyUJFsnQgPDtXv_AfeoY
zgNM73rns+}b|CI9H)cvB{@JIisMv2*E1ze{Pvj9Y719kBfqEGuLWBgq&&X;FMg2Y#
zoKQP+T^p^J>|P4Kpz!CXnABA8p_p9r%H=}@Slibos67u|5RBdboP^eeJa0NjQ`%Cu
zo&qED^WAcj_-7PMo=B)rXiCa&XKv-IpJ*?+5;m)(?aQ(6200-1*g>2|#)Cs$^L8%Z
z<tb(X;^Er)0xpu$j{Mw#+`SU6^@zJ7CB{&n8Q0!Kf*3OQdm5lo58s4iz~NiTL>pa<
zdreTj0kI>4${Lv`!U0}s%LI!!G69gx8lEa+R<Kv1J`I1eROr;hm!WrAS(<Z)Q*T%I
z(>@&U?aOa@4jaEX#(brMY!^Ge)RjDoPHj0k{DWDnBiqd^cP}fy+R>D;lgC$bP<?A}
zvPZULl7Y<I#YZtXD)2Qbhuc{>^cb_Lg9_0u+f=(0*;5Vfc@a(s{f$KF1|8t~a}0Jb
zl&o97U+gLlvB)IXRE78%n0wn?ctYq$^<%8~xA*D>QCrUhHwmITCZeBkd;uX^G7SUn
zhhIC_sg3lVubKgxterG3$+4q3QB-Flho%<O+geQ6F9bKZa_W|d9{#V$16=4SS$ZJx
zbcwk(1|3$ELYu9>v1WnaxbqHNHO)L2Z%4_6zXe5(D}UnZqnv=<5zZPbEVImI9HCL<
zvid7YnPf86-4GBgbab=tJsu<)RQG__qu~4RziZ}3RG+cG#sJ=1Oiugy4j(Cog#;BK
z9+HZlV4slpRW}>C6IVSX)ze~}CBBv0m9|ouQXXd_$|NRJ*E`xorX0^(<dKPQeWX5!
z(#T19u;*27AkILYv|noN0+dYAn|5-*uB<qtI}`wZe8`zTcG@mu<+gZ67`aT3RMlM&
zqbm)bt`Eo8P&c#kXjAHZ+}PURRS-9{M@+)#n#J6I**LCe|FP5eS_VfGOWs7CGK;jo
zzm<meMdDLF=7@~jA(i?;>*Gsy@s=Z@o1$2Cgsn^q*tIruMpDrWNB;d`md|NhnPa=x
z2f9<NmJGAZ#obysk|eH)jjAFzU9>}!UjCu0!>!;sZdL{y;Iw*vy-fzSzrVpvC;?hY
zCy(T`O7nBz_?D2eXSqoF;~LrA_jZ4LniDC1ETZ*cF0q3z3h4C<Zsh2E#c7%fMliql
zr5odrE65w2D&X~)&&Tb(P2c<Xl&P7A8=lPg`KpobxmNHkz;}6rcx0VSC(rVaK*H}E
zfniS6Qv2LP)2bn7D6LhAf~Q69nFmf!wgzZX96P3~q3{ldPpv<?f7w%Bi_PN)__5BK
z&+Z7zrq~M$%a6kKCsYoL&}?vO-%z4`oqnIlfKB#h9fGiXrc*?9vRJC84jR0A)|z?O
za%?*zS}a~ZB|ilN5n{D@LA1XLRF%F%_ZQ9y^Y%es27xVhUrOFRY#Se1BkF4&&tN)*
zvV?Qo-;8Q_Yk3|9t)`j5Bdq~mqg!+HfQ%crjV}<>1ouK4{l;OZe%J$mk5CV_#m(1^
zQ0O(IA*YXsS65DAG2Er1akH(GI(Vi!IdKaPd)qa@kxTIdx-szbaap-MudA{sK))(8
z^o~**rs8qjO|zzVd-Bkdn~47MwHQB0$B8~ZdpKPI6ma=^AXMYAK>9qE6&CmaGadBp
zif`6h8d=KUZO&L#FEU0gtS{1b#mvi~dkD;i^D(~Cqn(KmsaFeWur}WHeaglXqplar
z?LTx}=TgO!qTb6dXfD}4v8j4|oZjb}EP*b@F|=%6{6RmB^jwR-lh<=&2wNu8M+Wio
zqcwR%sQ%tO;D?cyKQlCEj2+q^$x@Skw=`b6K?KqlYc`W{eTi+e&xg5M0SLR_TrGgn
z->2WD$)eI6++mt?X}EoE-NU*Gw8xXY&~B3BvD^T?heE1%y$l_xzZdu-i|ld#%3$_@
zhTaAaJ*a48pKMe^t~b(k2~A#38tzt(=WIdAT>cx097i@l9fkUdwwf#4R7o><5m|K6
z_m%34c>ci37sb8;j6UaWQR?CZTjJCS8aXdqaV3ynTl=TCRT~FAQWMvb?gjO>f{%U^
zuI*bLV?U&X_M|?;BMM$Z{tP>0UObY$tJIr{rbz6_ZNP^o`9@O<KJ`vWGMjqK(uQvJ
zbKp66#~0GR4e51&JTG-qvYYgDeV6r`xB1tfUSjz6wt{yKB)m$V1I1*z{2t$ra&#QV
z?Za4Oz-|4K<K0}jAube3<)=<R$DPB4!MRzA`(uA)VdJanG=IyrOOaMH@w@WveUk3#
z_2NPlOKe+9UJLAs4Cs`fh4_A~-1p}}+Gije?)S%;kUbrrk87{Ul)^j+CGBZp-Ep7@
z<ow0tzd)0GNNnE9@dKnA{E-d$aSeHRhY&>v^8WN=U=>AMwvhav)09nK-yxODI_F@>
z-s}4g>Eq+SIAk%~KgHs+5W$aQLP5wmDBt&E_86jqe|Jf74`~BA!BRjpW+C}vrywW6
zkDLTZ*+KvR5BIwN3H(+c{qb==y#>h)hkaW-2;?Nux`bRk14pm>fgKQF$w9xc@`8cI
z<FalqkG50%(*GkD%(qEWeIRxYnic$LRyJAq*g3>9wdnKi0nK{94|}tH+&A#e-R4u$
z_u9mc;;FoW=Aur_1!LJZ=xo9ufcXJ_+N}s}_<#A_ft*|iy1#P%4Geso9PhXM82>}D
z+y^1{e4`bCh{^0L3id4B;^wRNysBK0C3PNUYwXQN#v}A^91116=p9^Oy@Q4=W$!oz
z81^p!*I#KE{NHOdb(_-;V=lM<a7RJb-ekI7J))+ii?BX&C~Z`Gk}kOLyhfH!4nZN!
z!;i3Z7_n;_0bPS@d+8Q*a7KGXu%>S1ZtNo|ZO0*}n%<lDSsTK?`f7yiTW=5IG@;H9
zHC$|m@GzD5g;;Z6sJ=(R1{r%rNi%~j>%n+=$g=^n(mMQD2REr?SKf3Hj1QR5A_A>@
z7m1V|)OUBGGzt!#!!N|6>9t~_#hYi7v5h^1<af>7L1m@KoVo4`@(lkM+vyG~n4=?)
LyAWy@8tQ)mwKx8$

literal 0
HcmV?d00001

diff --git a/setup.py b/setup.py
new file mode 100644
index 000000000..7894b53f1
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,27 @@
+from setuptools import setup, find_packages
+
+setup(
+    name='AMR',
+    version='2.1.1.9236',
+    packages=find_packages(),
+    install_requires=[
+        'rpy2',
+        'numpy',
+        'pandas',
+    ],
+    author='Matthijs Berends',
+    author_email='m.s.berends@umcg.nl',
+    description='A Python wrapper for the AMR R package',
+    long_description=open('README.md').read(),
+    long_description_content_type='text/markdown',
+    url='https://github.com/msberends/AMR',
+    project_urls={
+        'Bug Tracker': 'https://github.com/msberends/AMR/issues',
+    },
+    license='GPL 2',
+    classifiers=[
+        'Programming Language :: Python :: 3',
+        'Operating System :: OS Independent',
+    ],
+    python_requires='>=3.6',
+)