From 347766ff3fdbb5e1a20bd59e1130b376c210b92d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Mon, 14 Apr 2025 07:50:48 +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.9239-py3-none-any.whl | Bin 0 -> 10187 bytes
 dist/amr-2.1.1.9239.tar.gz           | Bin 0 -> 10031 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.9239-py3-none-any.whl
 create mode 100644 dist/amr-2.1.1.9239.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..76ee04fc7
--- /dev/null
+++ b/AMR.egg-info/PKG-INFO
@@ -0,0 +1,212 @@
+Metadata-Version: 2.4
+Name: AMR
+Version: 2.1.1.9239
+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.9239-py3-none-any.whl b/dist/amr-2.1.1.9239-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..a027bbab7b2916d6c87b6129644493bcc08da091
GIT binary patch
literal 10187
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

literal 0
HcmV?d00001

diff --git a/dist/amr-2.1.1.9239.tar.gz b/dist/amr-2.1.1.9239.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..15076d1717bb4a6d7ff0439eb988c54f9f093fb9
GIT binary patch
literal 10031
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
MpI3iEZ9_x-FT(2pVE_OC

literal 0
HcmV?d00001

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