From f2d4cfff865131fa79e599bd775c96c4fe92f5ee Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Thu, 27 Mar 2025 14:38:44 +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.9227-py3-none-any.whl | Bin 0 -> 10222 bytes
 dist/amr-2.1.1.9227.tar.gz           | Bin 0 -> 10055 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.9227-py3-none-any.whl
 create mode 100644 dist/amr-2.1.1.9227.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..9ee9e547b
--- /dev/null
+++ b/AMR.egg-info/PKG-INFO
@@ -0,0 +1,212 @@
+Metadata-Version: 2.4
+Name: AMR
+Version: 2.1.1.9227
+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..348bbc339
--- /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='https://msberends.r-universe.dev', 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='https://msberends.r-universe.dev', 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..fd4987d69
--- /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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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.9227-py3-none-any.whl b/dist/amr-2.1.1.9227-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..3b1fa4ba315cd19e998e852a55083755e0ae87d9
GIT binary patch
literal 10222
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

literal 0
HcmV?d00001

diff --git a/dist/amr-2.1.1.9227.tar.gz b/dist/amr-2.1.1.9227.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d6f5483bf8cff38b20997cf26423390943dbffaf
GIT binary patch
literal 10055
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

literal 0
HcmV?d00001

diff --git a/setup.py b/setup.py
new file mode 100644
index 000000000..2b01f4764
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,27 @@
+from setuptools import setup, find_packages
+
+setup(
+    name='AMR',
+    version='2.1.1.9227',
+    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',
+)