Repository: laminlabs/bionty (language: python)

Issue:
Update readme and show coverage
For the new readme, shall we follow the style of lamindb?

The readme on lamindb is so minimal to avoid code duplications that are inevitable if using features like dropdowns that simply don't work in GitHub markdown.

I think the old readme was great as a standalone, but today I'd say everything should be centralized on docs.lamin.ai/bionty

<img width="904" alt="image" src="https://github.com/user-attachments/assets/22dcad97-64e9-4826-8690-70177d2dfec8">





Discussion / hints:
Are you suggesting to remove this?
Yes, I'm suggesting to have the readme consistent with lamindb's readme with just a few bullets that don't need to be maintained and to draw robot & user traffic to the docs page.

Fix patch:
diff --git a/README.md b/README.md
index dea562f..2209d40 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,14 @@
+[![Stars](https://img.shields.io/github/stars/laminlabs/bionty?logo=GitHub&color=yellow)](https://github.com/laminlabs/bionty)
+[![pypi](https://img.shields.io/pypi/v/bionty?color=blue&label=pypi%20package)](https://pypi.org/project/bionty)
+
 # bionty: Basic biological entities
 
-bionty is documented & tested within lamindb: github.com/laminlabs/lamindb.
+- Access >20 public ontologies such as Gene, Protein, CellMarker, ExperimentalFactor, CellType, CellLine, Tissue, …
+- Create records from entries in public ontologies using `.from_source()`.
+- Access full underlying public ontologies via `.public()` to search & bulk-create records.
+- Create in-house ontologies by extending public ontologies using hierarchical relationships among records (`.parents`).
+- Use `.synonyms` and `.abbr` to manage synonyms.
+- Safeguards against typos & duplications
+- Ontology versioning
 
-See [docs](https://lamin.ai/docs/bionty).
+Read [docs](https://docs.lamin.ai/bionty).
diff --git a/bionty/__init__.py b/bionty/__init__.py
index 34ba727..b893522 100644
--- a/bionty/__init__.py
+++ b/bionty/__init__.py
@@ -21,6 +21,14 @@
    - Versions of ontology sources are auto-tracked in :class:`Source`.
    - Records are indexed by universal ids, created by hashing `ontology_id` for portability across databases.
 
+`bionty.base` is the read-only interface for public ontology that underlies bionty and doesn't require a lamindb instance.
+
+Import it by running:
+
+>>> import bionty.base as bt_base
+
+See {mod}`bionty.base` for details.
+
 Installation
 ============
 
@@ -68,11 +76,9 @@
 
    Read the guides:
 
-   - `Access public ontologies <https://lamin.ai/docs/public-ontologies>`__
+   - :doc:`docs:public-ontologies`
    - :doc:`docs:bio-registries`
 
-   For more background on how public ontologies are accessed, see `bionty.base`.
-
 API
 ===
 
@@ -126,6 +132,7 @@
    :toctree: .
 
    base
+
 """
 
 __version__ = "0.48.2"
diff --git a/bionty/base/__init__.py b/bionty/base/__init__.py
index 17b427e..1b1abab 100644
--- a/bionty/base/__init__.py
+++ b/bionty/base/__init__.py
@@ -1,10 +1,34 @@
-"""Bionty base.
+"""Bionty base is a standalone version of Bionty without lamindb support.
 
-Import the package::
+Overview
+========
 
-   import bionty.base as bt
+`bionty.base` is the read-only interface for public ontology that underlies bionty and doesn't require a lamindb instance.
 
-Entities:
+Installation
+============
+
+>>> pip install bionty
+
+Quickstart
+----------
+
+Import the package:
+
+>>> import bionty.base as bt_base
+
+Access public ontologies:
+
+>>> genes = bt_base.Gene()
+
+Get a DataFrame of all available values:
+
+>>> genes.df()
+
+Entities
+========
+
+Bionty base provides access to several entities, most of which are also supported by Bionty.
 
 .. autosummary::
    :toctree: .
@@ -26,7 +50,12 @@
    BFXPipeline
    BioSample
 
-Base model of entity classes:
+Base model of entity classes
+----------------------------
+
+[Pronto Ontology objects](https://pronto.readthedocs.io/en/stable/api/pronto.Ontology.html) can be accessed via {entity}.to_pronto():
+
+   bt_base.Gene().to_pronto()
 
 .. autosummary::
    :toctree: .
@@ -34,7 +63,8 @@
    PublicOntology
    PublicOntologyField
 
-PublicOntology sources:
+PublicOntology sources
+----------------------
 
 .. autosummary::
    :toctree: .
@@ -44,12 +74,14 @@
    reset_sources
    settings
 
-External API:
+External API
+------------
 
 .. autosummary::
    :toctree: .
 
    Ontology
+
 """
 
 # dynamic classes
diff --git a/docs/developer/updating_source.md b/docs/developer/updating_source.md
deleted file mode 100644
index 877d3af..0000000
--- a/docs/developer/updating_source.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-orphan: true
----
-
-# Updating `source.yaml`
-
-Here we document the steps to required steps to take when updating the `source.yaml` file.
-
-## Steps
-
-1. Adapt the `sources.yaml` file as required.
-   Add a new top level entry if you've added a new PublicOntology entity or add a new source/version while confirming to the yaml structure.
-2. If you've added a new source or version, use PublicOntology's `diff` function to determine whether any terms were deleted.
-   Consult the rest of the team if so.
-   Ensure that your pull request contains a summary of the diff.
-3. Specify the new entity or the latest version in your local `.current_source.yaml`. Run the tests.
-   Upload the corresponding `.parquet` file to our S3.
-4. Get the corresponding md5 sum by running the `determine_md5s.py` script in the scripts folder.
-   Add it to the md5 field in the `source.yaml`.
-5. Merge your PR to main. Ensure that the parquet file got automatically uploaded to our S3.
-6. Make a new release based on our release process.
diff --git a/docs/guide.md b/docs/guide.md
index fe59bec..92d4581 100644
--- a/docs/guide.md
+++ b/docs/guide.md
@@ -4,17 +4,13 @@
 :maxdepth: 2
 
 
-./guide/ontology
-./guide/sources
-./guide/config
-./guide/extend
 ./guide/concepts
 ./guide/comparison
+./guide/config
+./guide/extend
 ```
 
 ```{toctree}
 :hidden:
 
-./guide/search
-./guide/validate
 ```
diff --git a/docs/guide/comparison.md b/docs/guide/comparison.md
index 3c05653..3c77733 100644
--- a/docs/guide/comparison.md
+++ b/docs/guide/comparison.md
@@ -19,8 +19,7 @@ Here, we will describe the similarities and differences between Bionty and other
 
 - Data models are structured frameworks used to represent and organize information systematically for efficient storage, retrieval, and analysis of data.
   In the context of the life sciences, data models provide a common language for describing biological entities and the intricate relationships between them.
-  By standardizing how data is structured and interconnected, these models enable researchers, databases, and applications to communicate and collaborate effectively,
-  leading to more comprehensive insights and discoveries in the field of biology.
+  By standardizing how data is structured and interconnected, these models enable researchers, databases, and applications to communicate and collaborate effectively, leading to more comprehensive insights and discoveries in the field of biology.
 
 - [BioLink](https://biolink.github.io/biolink-model/) is a standardized data model designed to facilitate the integration and querying of biological data from various sources in knowledge graphs.
   It provides a structured way to represent biological entities, their attributes, and the relationships between them, enhancing interoperability in bioinformatics.
diff --git a/docs/guide/concepts.md b/docs/guide/concepts.md
index 87a593f..ac9a3c8 100644
--- a/docs/guide/concepts.md
+++ b/docs/guide/concepts.md
@@ -16,4 +16,4 @@ The central class {class}`~bionty.base.PublicOntology` models 3 of the 4 above-m
 1. Every `PublicOntology` object comes with a table of terms in which each column corresponds to an alternative vocabulary for the entity.
 2. Every table is versioned & has a tracked reference source (typically, a public ontology).
 3. Most tables have a children column that allows mapping hierarchies.
-4. Adding user-defined records amounts to managing bioregistries, and we recommend using Bionty's SQL extension ([lnschema_bionty](https://lamin.ai/docs/lnschema-bionty)).
+4. Adding user-defined records amounts to managing bioregistries through Bionty's SQL models.
diff --git a/docs/guide/config.md b/docs/guide/config.md
index c83bb0a..8d741bd 100644
--- a/docs/guide/config.md
+++ b/docs/guide/config.md
@@ -2,16 +2,13 @@
 
 ## Public bionty sources
 
-Bionty maintains a [sources.yaml](https://raw.githubusercontent.com/laminlabs/bionty/main/bionty/sources/sources.yaml) listing public sources of each entity.
-
-These sources are curated ([biony-assets](https://lamin.ai/docs/bionty-assets)) and stored at s3://bionty-assets to provide fast and reliable access.
-
-Cached sources files are stored at your local `bionty/bionty/_dynamic/` directory.
+Bionty maintains a [sources.yaml](https://raw.githubusercontent.com/laminlabs/bionty/main/bionty/base/sources.yaml) listing public sources of each entity.
+These sources are curated ([biony-assets](https://github.com/laminlabs/bionty-assets)) and stored in a [bionty-assets instance](https://lamin.ai/laminlabs/bionty-assets/) to provide fast and reliable access.
+Cached sources files are stored at your local `bionty/base/_dynamic/` directory.
 
 ## Local bionty sources
 
-File `$home:/.lamin/bionty/sources_local.yaml` stores all locally available ontologies.
-
+File `$home:/.lamin/bionty/versions/sources_local.yaml` stores all locally available ontologies.
 The content of this file is identical to the public `sources.yaml` for a freshly-installed Bionty.
 
 **Users may edit this file in order to configure customized sources.**
@@ -28,16 +25,14 @@ entity: # Bionty entity class name, e.g. CellType
   source: # short name of the source, (CURIE prefix for ontologies) e.g. cl
     organism: # organism common name, (if none applied, use 'all') e.g. human
       version: # version of the source
-        url: "link to the source file"
-        md5: "md5 of the source file"
+        url: # "link to the source file"
+        md5: # "md5 of the source file"
 ```
 
 ## Setting default ontologies and versions
 
-For each entity, the **first source** and its **maximum version** in `sources_local.yaml` is used as default.
-
+For each entity, the **first source** and its **maximum version** defined in `sources_local.yaml` is used as default.
 To set your own default ontology and version, shift the order of entries.
-
 For example, in the following "doid" used when "organism" is specified as "human":
 
 (highlighted sources are considered the default)
@@ -77,8 +72,6 @@ Disease:
 
 We may change the default to "inhouse_diseases" when "organism" is specified as "human", by the following:
 
-Note: changing the order of versions won't have an effect, as most recent version is taken as default.
-
 ```{code-block} yaml
 ---
 emphasize-lines: 2,3,7-9,12-16
diff --git a/docs/guide/extend.md b/docs/guide/extend.md
index 4e2ab6a..42f0403 100644
--- a/docs/guide/extend.md
+++ b/docs/guide/extend.md
@@ -12,7 +12,7 @@ If you'd like to add new terms to an existing ontology: use [LaminDB](https://la
 
 ## New ontologies
 
-The easiest way to add new ontologies to existing entities is to adapt the `sources_local.yaml` file in the `$home/.lamin/bionty/sources` directory.
+The easiest way to add new ontologies to existing entities is to adapt the `sources_local.yaml` file in the `$home/.lamin/bionty/versions` directory.
 For example, to add a new disease ontology (termed "inhouse_diseases") with an associated version and URL, one adds the following lines to the `sources.local.yaml`.
 
 ```yaml
diff --git a/docs/guide/ontology.ipynb b/docs/guide/ontology.ipynb
deleted file mode 100644
index 27c23d5..0000000
--- a/docs/guide/ontology.ipynb
+++ /dev/null
@@ -1,376 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "053a464e-df2f-4386-b537-4f0a4fb46408",
-   "metadata": {},
-   "source": [
-    "# Get Pronto ontology objects\n",
-    "\n",
-    "When it comes to ontology defined vocabularies, such as cell type, tissue, disease, and phenotype, [Pronto Ontology object](https://pronto.readthedocs.io/en/stable/api/pronto.Ontology.html) can be accessed via `{entity}.to_pronto()`\n",
-    "\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2421723d-76a7-4cc6-9a8b-ec493e15a4d8",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import bionty.base as bt"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "1a61c7de",
-   "metadata": {},
-   "source": [
-    "## Basic fields: name, ontology_id, definition, synonyms, children\n",
-    "\n",
-    "These fields are parsed into the DataFrame(`df()`) and lookup object to be directly accessible"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "35110e99-617a-4918-a701-77f4e82bb7aa",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public = bt.Disease()\n",
-    "\n",
-    "public"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "112f815c",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public.df().head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c1081293",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup = public.lookup()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "372a639d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record = lookup.alzheimer_disease\n",
-    "\n",
-    "lookup_record"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3b2851fd",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record.definition"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "4cb4718b",
-   "metadata": {},
-   "source": [
-    "Synonyms are concatenated into a string with bars `|`:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c52264e2",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record.synonyms"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "58cd007f",
-   "metadata": {},
-   "source": [
-    "Parents with distance=1 can be directly accessed:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "57de831b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record.parents"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "66ba4cba",
-   "metadata": {},
-   "source": [
-    "## `.to_pronto()`: Pronto Ontology\n",
-    "\n",
-    "More hierarchical information can be accessed from the Pronto Ontology object:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3793a081",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pronto_object = public.to_pronto()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3bd888f2",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pronto_object"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d35e2d43",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "term = pronto_object.get_term(\"MONDO:0004975\")\n",
-    "\n",
-    "term"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "48cd3de5",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "list(term.subclasses(distance=2, with_self=False))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "be4cab83",
-   "metadata": {},
-   "source": [
-    "## Extra fields"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "879230a6",
-   "metadata": {},
-   "source": [
-    "`ExperimentalFactor` parses [Experimental Factor Ontology](https://www.ebi.ac.uk/efo/) to the following additional categories for describing biological experiments:\n",
-    "- molecule\n",
-    "- instrument\n",
-    "- measurement"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "51ed41d8",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public = bt.ExperimentalFactor()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "992c40bf",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public.df().head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "4891f65b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup = public.lookup()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "689b1622",
-   "metadata": {},
-   "source": [
-    "Look up a molecular readout:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "6edacdf2",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record = lookup.single_cell_rna_sequencing"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "21dbb0a0",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f05f4736",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record.molecule"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a751bcb3",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup_record.instrument"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "9e501882",
-   "metadata": {},
-   "source": [
-    "Lookup a phenotypic readout:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "769ca699",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lookup.tumor_size"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "76e2e2f9-19c0-46e2-97f6-4487428ed1c3",
-   "metadata": {},
-   "source": [
-    "## Comparing ontology versions"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "afa16569-5f98-41ec-981c-db1b81fbbe91",
-   "metadata": {},
-   "source": [
-    "Bionty provides {func}`bionty.base.PublicOntology.diff` to determine a diff between two ontology versions."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f2b7ba3c-6f25-49d2-9dc2-589fee0f0d53",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [],
-   "source": [
-    "disease_old = bt.Disease(source=\"mondo\", version=\"2023-04-04\")\n",
-    "disease_new = bt.Disease(source=\"mondo\", version=\"2023-02-06\")\n",
-    "\n",
-    "new_entries, modified_entries = disease_old.diff(disease_new)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "1f7cbe33-b7f3-4c76-b277-3b849ac2ed98",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [],
-   "source": [
-    "new_entries.head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "05dfa5e3-a50c-4488-bc86-929fd198c30d",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [],
-   "source": [
-    "modified_entries.head()"
-   ]
-  }
- ],
- "metadata": {
-  "citation-manager": {
-   "items": {}
-  },
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.9.16"
-  },
-  "vscode": {
-   "interpreter": {
-    "hash": "ae1fefc8646a06dd2e75004cd934adda7c5727b046986a772e3b44b0ffba9754"
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/docs/guide/search.ipynb b/docs/guide/search.ipynb
deleted file mode 100644
index 67e3f01..0000000
--- a/docs/guide/search.ipynb
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Search and lookup terms"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "This guide moved: {doc}`docs:public-ontologies`"
-   ]
-  }
- ],
- "metadata": {
-  "language_info": {
-   "name": "python"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/docs/guide/sources.ipynb b/docs/guide/sources.ipynb
deleted file mode 100644
index b968cec..0000000
--- a/docs/guide/sources.ipynb
+++ /dev/null
@@ -1,276 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Ontology sources configuration"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import bionty.base as bt"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Display sources\n",
-    "\n",
-    "The currently active and available ontologies can also be printed with:\n",
-    "\n",
-    "- `bionty.base.display_currently_used_sources`\n",
-    "- `bionty.base.display_available_sources`"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "bt.display_currently_used_sources()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "bt.display_available_sources()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Initialize a Bionty model"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "When initializing a PublicOntology class, default source is used:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public = bt.CellType()\n",
-    "\n",
-    "public"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "You may specify a different source or version:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public = bt.CellType(source=\"cl\", version=\"2022-08-16\")\n",
-    "\n",
-    "public"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "You may also specify a `organism` for multi-organism models:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public = bt.Gene()\n",
-    "\n",
-    "public"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "public = bt.Gene(organism=\"mouse\")\n",
-    "\n",
-    "public"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Public bionty sources\n",
-    "\n",
-    "Bionty maintains a [sources.yaml](https://raw.githubusercontent.com/laminlabs/bionty/main/bionty/sources/sources.yaml) listing public sources of each entity.\n",
-    "\n",
-    "These sources are curated ([biony-assets](https://lamin.ai/docs/bionty-assets)) and stored at s3://bionty-assets to provide fast and reliable access.\n",
-    "\n",
-    "Cached sources files are stored at your local `bionty/bionty/_dynamic/` directory."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Local bionty sources\n",
-    "\n",
-    "File `$home:/.lamin/bionty/sources.local.yaml` stores all locally available ontologies.\n",
-    "\n",
-    "The content of this file is identical to the public `sources.yaml` for a freshly-installed Bionty.\n",
-    "\n",
-    "**Users may edit this file in order to configure customized sources.**"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Format of the sources yaml file\n",
-    "\n",
-    "```yaml\n",
-    "entity: # Bionty entity class name, e.g. CellType\n",
-    "  source: # short name of the source, (CURIE prefix for ontologies) e.g. cl\n",
-    "    organism: # organism common name, (if none applied, use 'all') e.g. human\n",
-    "      version: # version of the source\n",
-    "        url: \"link to the source file\"\n",
-    "        md5: \"md5 of the source file\"\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Configure default ontologies and versions\n",
-    "\n",
-    "For each entity, the **first source** and its **maximum version** in `sources.local.yaml` is used as default.\n",
-    "\n",
-    "To set your own default ontology and version, shift the order of entries.\n",
-    "\n",
-    "For example, in the following \"doid\" used when \"organism\" is specified as \"human\":\n",
-    "\n",
-    "(highlighted sources are considered the default)\n",
-    "\n",
-    "```{code-block} yaml\n",
-    "---\n",
-    "emphasize-lines: 2-6,12-16\n",
-    "---\n",
-    "Disease:\n",
-    "  mondo:\n",
-    "    all:\n",
-    "      2023-02-06:\n",
-    "        source: http://purl.obolibrary.org/obo/mondo/releases/2023-02-06/mondo.owl\n",
-    "        md5: 2b7d479d4bd02a94eab47d1c9e64c5db\n",
-    "      2022-10-11:\n",
-    "        source: http://purl.obolibrary.org/obo/mondo/releases/2022-10-11/mondo.owl\n",
-    "        md5: 04b808d05c2c2e81430b20a0e87552bb\n",
-    "    name: Mondo Disease Ontology\n",
-    "    website: https://mondo.monarchinitiative.org/\n",
-    "  doid:\n",
-    "    human:\n",
-    "      2023-01-30:\n",
-    "        source: http://purl.obolibrary.org/obo/doid/releases/2023-01-30/doid.obo\n",
-    "        md5: 9f0c92ad2896dda82195e9226a06dc36\n",
-    "    name: Human Disease Ontology\n",
-    "    website: https://disease-ontology.org/\n",
-    "  inhouse_diseases:\n",
-    "    human:\n",
-    "      2000-01-01:\n",
-    "        source: http://download-my-diseases.com/releases/2000-01-01/mydiseases.owl\n",
-    "        md5: md5 if available or leave out this row\n",
-    "    name: My in-house Disease Ontology\n",
-    "    website: http://my-website.com\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "<br>\n",
-    "\n",
-    "We may change the default to \"inhouse_diseases\" when \"organism\" is specified as \"human\", by the following:\n",
-    "\n",
-    "Note: changing the order of versions won't have an effect, as most recent version is taken as default.\n",
-    "\n",
-    "```{code-block} yaml\n",
-    "---\n",
-    "emphasize-lines: 2,3,7-9,12-16\n",
-    "---\n",
-    "Disease:\n",
-    "  mondo:\n",
-    "    all:\n",
-    "      2022-10-11:\n",
-    "        source: http://purl.obolibrary.org/obo/mondo/releases/2022-10-11/mondo.owl\n",
-    "        md5: 04b808d05c2c2e81430b20a0e87552bb\n",
-    "      2023-02-06:\n",
-    "        source: http://purl.obolibrary.org/obo/mondo/releases/2023-02-06/mondo.owl\n",
-    "        md5: 2b7d479d4bd02a94eab47d1c9e64c5db\n",
-    "    name: Mondo Disease Ontology\n",
-    "    website: https://mondo.monarchinitiative.org/\n",
-    "  inhouse_diseases:\n",
-    "    human:\n",
-    "      2000-01-01:\n",
-    "        source: http://download-my-diseases.com/releases/2000-01-01/mydiseases.owl\n",
-    "        md5: md5 if available or leave out this row\n",
-    "    name: My in-house Disease Ontology\n",
-    "    website: http://my-website.com\n",
-    "  doid:\n",
-    "    human:\n",
-    "      2023-01-30:\n",
-    "        source: http://purl.obolibrary.org/obo/doid/releases/2023-01-30/doid.obo\n",
-    "        md5: 9f0c92ad2896dda82195e9226a06dc36\n",
-    "    name: Human Disease Ontology\n",
-    "    website: https://disease-ontology.org/\n",
-    "```\n"
-   ]
-  }
- ],
- "metadata": {
-  "citation-manager": {
-   "items": {}
-  },
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.9.16"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/guide/validate.ipynb b/docs/guide/validate.ipynb
deleted file mode 100644
index e637850..0000000
--- a/docs/guide/validate.ipynb
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Validate, inspect & standardize identifiers"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "This guide moved: {doc}`docs:public-ontologies`"
-   ]
-  }
- ],
- "metadata": {
-  "citation-manager": {
-   "items": {}
-  },
-  "interpreter": {
-   "hash": "ae1fefc8646a06dd2e75004cd934adda7c5727b046986a772e3b44b0ffba9754"
-  },
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.9.16"
-  },
-  "vscode": {
-   "interpreter": {
-    "hash": "2775e555cdc2d728c54aa22130c79afb1fa4da64f22f2fc6dcc2aa346c4e0672"
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/pyproject.toml b/pyproject.toml
index 3a53d4e..ce0d631 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -46,7 +46,11 @@ testpaths = [
 
 [tool.coverage.run]
 omit = [
-    "bionty/*",
+    "bionty/core/*",
+    "bionty/migrations/*",
+    "bionty/models.py",
+    "bionty/_bionty.py",
+    "bionty/ids.py",
 ]
 
 [tool.ruff]


Test patch:
diff --git a/tests/entities/test_bfxpipeline.py b/tests/entities/test_bfxpipeline.py
index 720f88c..5eb1015 100644
--- a/tests/entities/test_bfxpipeline.py
+++ b/tests/entities/test_bfxpipeline.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -11,7 +11,7 @@ def test_lamin_bfxpipeline_inspect_name():
         ]
     )
 
-    bfxp = bt.BFXPipeline(source="lamin")
+    bfxp = bt_base.BFXPipeline(source="lamin")
     inspected_df = bfxp.inspect(df.index, field=bfxp.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_biosample.py b/tests/entities/test_biosample.py
index 978cd68..a267023 100644
--- a/tests/entities/test_biosample.py
+++ b/tests/entities/test_biosample.py
@@ -1,7 +1,7 @@
-import bionty.base as bt
+import bionty.base as bt_base
 
 
 def test_ncbi_biosample():
-    bs = bt.BioSample(source="ncbi")
+    bs = bt_base.BioSample(source="ncbi")
     df = bs.df()
     assert "edta_inhibitor_tested" in df.abbr.tolist()
diff --git a/tests/entities/test_cellline.py b/tests/entities/test_cellline.py
index 1e603fe..d97b70b 100644
--- a/tests/entities/test_cellline.py
+++ b/tests/entities/test_cellline.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_clo_cellline_inspect_name():
         ]
     )
 
-    cl = bt.CellLine(source="clo")
+    cl = bt_base.CellLine(source="clo")
     inspected_df = cl.inspect(df.index, field=cl.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_cellmarker.py b/tests/entities/test_cellmarker.py
index b3a5822..5fd1ac0 100644
--- a/tests/entities/test_cellmarker.py
+++ b/tests/entities/test_cellmarker.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -7,7 +7,7 @@ def test_cellmarker_cellmarker_inspect_name_human():
         index=["CCR7", "CD69", "CD8", "CD45RA", "This protein does not exist"]
     )
 
-    cm = bt.CellMarker(source="cellmarker")
+    cm = bt_base.CellMarker(source="cellmarker")
     curated = cm.inspect(df.index, field=cm.name)
 
     assert curated["validated"] == ["CD69", "CD8", "CD45RA"]
@@ -19,7 +19,7 @@ def test_cellmarker_cellmarker_inspect_name_mouse():
         index=["Tcf4", "Cd36", "Cd34", "Lgr6", "This protein does not exist"]
     )
 
-    cm = bt.CellMarker(source="cellmarker", organism="mouse")
+    cm = bt_base.CellMarker(source="cellmarker", organism="mouse")
     inspected_df = cm.inspect(df.index, field=cm.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_celltype.py b/tests/entities/test_celltype.py
index 02c91fd..f5d2781 100644
--- a/tests/entities/test_celltype.py
+++ b/tests/entities/test_celltype.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,10 +13,10 @@ def test_cl_celltype_inspect_name():
         ]
     )
 
-    print(bt.settings.current_sources)
-    assert bt.settings.current_sources.exists()
+    print(bt_base.settings.current_sources)
+    assert bt_base.settings.current_sources.exists()
 
-    ct = bt.CellType(source="cl")
+    ct = bt_base.CellType(source="cl")
     inspected_df = ct.inspect(df.index, field=ct.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_developmentalstage.py b/tests/entities/test_developmentalstage.py
index 326e25a..76d6171 100644
--- a/tests/entities/test_developmentalstage.py
+++ b/tests/entities/test_developmentalstage.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_hsapdv_developmentalstage_inspect_name():
         ]
     )
 
-    ds = bt.DevelopmentalStage(source="hsapdv")
+    ds = bt_base.DevelopmentalStage(source="hsapdv")
     inspected_df = ds.inspect(df.index, field=ds.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_disease.py b/tests/entities/test_disease.py
index 5f647a7..2832a98 100644
--- a/tests/entities/test_disease.py
+++ b/tests/entities/test_disease.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_mondo_disease_inspect_name():
         ]
     )
 
-    ds = bt.Disease(source="mondo")
+    ds = bt_base.Disease(source="mondo")
     inspected_df = ds.inspect(df.index, field=ds.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -33,7 +33,7 @@ def test_doid_disease_inspect_ontology_id():
         ]
     )
 
-    ds = bt.Disease(source="doid")
+    ds = bt_base.Disease(source="doid")
     inspected_df = ds.inspect(df.index, field=ds.ontology_id, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -53,7 +53,7 @@ def test_icd_9_disease_inspect_name():
         ]
     )
 
-    ds = bt.Disease(source="icd", version="icd-9-2011")
+    ds = bt_base.Disease(source="icd", version="icd-9-2011")
     inspected_df = ds.inspect(df.index, field=ds.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -73,7 +73,7 @@ def test_icd_10_disease_inspect_name():
         ]
     )
 
-    ds = bt.Disease(source="icd", version="icd-10-2020")
+    ds = bt_base.Disease(source="icd", version="icd-10-2020")
     inspected_df = ds.inspect(df.index, field=ds.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -93,7 +93,7 @@ def test_icd_11_disease_inspect_name():
         ]
     )
 
-    ds = bt.Disease(source="icd", version="icd-11-2023")
+    ds = bt_base.Disease(source="icd", version="icd-11-2023")
     inspected_df = ds.inspect(df.index, field=ds.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_drug.py b/tests/entities/test_drug.py
index 1f30d51..2f4b8d4 100644
--- a/tests/entities/test_drug.py
+++ b/tests/entities/test_drug.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_dron_drug_inspect_name():
         ]
     )
 
-    dt = bt.Drug(source="dron")
+    dt = bt_base.Drug(source="dron")
     inspected_df = dt.inspect(df.index, field=dt.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_ethnicity.py b/tests/entities/test_ethnicity.py
index 7f57775..0d18dce 100644
--- a/tests/entities/test_ethnicity.py
+++ b/tests/entities/test_ethnicity.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_hancestro_ethnicity_inspect_name():
         ]
     )
 
-    et = bt.Ethnicity(source="hancestro")
+    et = bt_base.Ethnicity(source="hancestro")
     inspected_df = et.inspect(df.index, field=et.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_experimentalfactor.py b/tests/entities/test_experimentalfactor.py
index 9106e10..a6238e7 100644
--- a/tests/entities/test_experimentalfactor.py
+++ b/tests/entities/test_experimentalfactor.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 from bionty.base.entities._experimentalfactor import _parse_efo_term
 
@@ -14,7 +14,7 @@ def test_efo_experimental_factor_inspect_ontology_id():
         ]
     )
 
-    ro = bt.ExperimentalFactor(source="efo")
+    ro = bt_base.ExperimentalFactor(source="efo")
     inspected_df = ro.inspect(df.index, ro.ontology_id, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -24,7 +24,7 @@ def test_efo_experimental_factor_inspect_ontology_id():
 
 
 def test_parse_efo_term():
-    ro = bt.ExperimentalFactor(source="efo")
+    ro = bt_base.ExperimentalFactor(source="efo")
     ontology = ro.to_pronto()
     res = _parse_efo_term(term_id="EFO:0008913", ontology=ontology)
 
diff --git a/tests/entities/test_gene.py b/tests/entities/test_gene.py
index 9f602b5..95b5797 100644
--- a/tests/entities/test_gene.py
+++ b/tests/entities/test_gene.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 import pytest
 
@@ -17,7 +17,7 @@ def genes():
     }
     df = pd.DataFrame(data).set_index("ensembl_gene_id")
 
-    gn = bt.Gene(source="ensembl")
+    gn = bt_base.Gene(source="ensembl")
 
     return df, gn
 
@@ -34,7 +34,7 @@ def test_gene_ensembl_inspect_hgnc_id(genes):
 
 
 def test_species_backward_compat():
-    bt.Gene(species="human")
+    bt_base.Gene(species="human")
 
 
 def test_ensemblgene_download():
@@ -52,7 +52,7 @@ def test_ensemblgene_download():
 
 
 def test_ensemblgene_map_legacy_ids():
-    gn = bt.Gene(organism="human", version="release-110")
+    gn = bt_base.Gene(organism="human", version="release-110")
     legacy_genes = [
         "ENSG00000280710",
         "ENSG00000261490",
diff --git a/tests/entities/test_organism.py b/tests/entities/test_organism.py
index 33c8236..f2a18af 100644
--- a/tests/entities/test_organism.py
+++ b/tests/entities/test_organism.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_ensembl_organism_inspect_name():
         ]
     )
 
-    sp = bt.Organism(source="ensembl")
+    sp = bt_base.Organism(source="ensembl")
     inspected_df = sp.inspect(df.index, field=sp.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -24,10 +24,10 @@ def test_ensembl_organism_inspect_name():
 
 def test_ensembl_organism_organism():
     for sp in ["bacteria", "plants", "fungi", "metazoa"]:
-        df = bt.Organism(organism=sp).df()
+        df = bt_base.Organism(organism=sp).df()
         assert df.shape[0] > 10
 
 
 def test_ncbitaxon_organism():
-    df = bt.Organism(source="ncbitaxon").df()
+    df = bt_base.Organism(source="ncbitaxon").df()
     assert df.shape[0] > 10
diff --git a/tests/entities/test_pathway.py b/tests/entities/test_pathway.py
index c5880a8..3479569 100644
--- a/tests/entities/test_pathway.py
+++ b/tests/entities/test_pathway.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_pw_go_inspect_ontology_id():
         ]
     )
 
-    pw = bt.Pathway(source="go")
+    pw = bt_base.Pathway(source="go")
     inspected_df = pw.inspect(df.index, pw.ontology_id, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -33,7 +33,7 @@ def test_pw_pathway_inspect_name():
         ]
     )
 
-    pw = bt.Pathway(source="pw")
+    pw = bt_base.Pathway(source="pw")
     inspected_df = pw.inspect(df.index, field=pw.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_phenotype.py b/tests/entities/test_phenotype.py
index 174b35b..f742e51 100644
--- a/tests/entities/test_phenotype.py
+++ b/tests/entities/test_phenotype.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_hp_phenotype_inspect_name():
         ]
     )
 
-    pt = bt.Phenotype(source="hp")
+    pt = bt_base.Phenotype(source="hp")
     inspected_df = pt.inspect(df.index, field=pt.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -33,7 +33,7 @@ def test_mp_phenotype_inspect_name():
         ]
     )
 
-    pt = bt.Phenotype(source="mp")
+    pt = bt_base.Phenotype(source="mp")
     inspected_df = pt.inspect(df.index, field=pt.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -53,7 +53,7 @@ def test_zp_phenotype_inspect_name():
         ]
     )
 
-    pt = bt.Phenotype(source="zp")
+    pt = bt_base.Phenotype(source="zp")
     inspected_df = pt.inspect(df.index, field=pt.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -73,7 +73,7 @@ def test_phe_phenotype_inspect_name():
         ]
     )
 
-    pt = bt.Phenotype(source="phe")
+    pt = bt_base.Phenotype(source="phe")
     inspected_df = pt.inspect(df.index, field=pt.name, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
@@ -93,7 +93,7 @@ def test_path_phenotype():
         ]
     )
 
-    pt = bt.Phenotype(source="pato")
+    pt = bt_base.Phenotype(source="pato")
     inspected_df = pt.inspect(df.index, field=pt.name, return_df=True)
     inspect = inspected_df["__validated__"].reset_index(drop=True)
     expected_series = pd.Series([True, True, True, True, False])
diff --git a/tests/entities/test_protein.py b/tests/entities/test_protein.py
index 7271bbe..dadde9d 100644
--- a/tests/entities/test_protein.py
+++ b/tests/entities/test_protein.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_uniprot_protein_inspect_uniprotkb_id():
         ]
     )
 
-    pr = bt.Protein(source="uniprot")
+    pr = bt_base.Protein(source="uniprot")
     inspected_df = pr.inspect(df.index, pr.uniprotkb_id, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/entities/test_tissue.py b/tests/entities/test_tissue.py
index 283cf86..dc53349 100644
--- a/tests/entities/test_tissue.py
+++ b/tests/entities/test_tissue.py
@@ -1,4 +1,4 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pandas as pd
 
 
@@ -13,7 +13,7 @@ def test_uberon_tissue_inspect_ontology_id():
         ]
     )
 
-    ts = bt.Tissue(source="uberon")
+    ts = bt_base.Tissue(source="uberon")
     inspected_df = ts.inspect(df.index, ts.ontology_id, return_df=True)
 
     inspect = inspected_df["__validated__"].reset_index(drop=True)
diff --git a/tests/test_bionty.py b/tests/test_bionty.py
index 8eca301..c45781f 100644
--- a/tests/test_bionty.py
+++ b/tests/test_bionty.py
@@ -1,11 +1,11 @@
-import bionty.base as bt
+import bionty.base as bt_base
 import pytest
 from bionty.base._settings import settings
 
 
 def test_unavailable_sources():
     with pytest.raises(ValueError):
-        bt.CellType(source="random")
+        bt_base.CellType(source="random")
 
 
 def test_reset_sources(monkeypatch):
@@ -16,16 +16,16 @@ def test_reset_sources(monkeypatch):
     shutil.copyfile(
         settings.current_sources.as_posix(), settings.lamindb_sources.as_posix()
     )
-    bt.reset_sources()
+    bt_base.reset_sources()
 
     settings.current_sources.unlink()
     settings.local_sources.unlink()
-    bt.reset_sources()
+    bt_base.reset_sources()
 
 
 def test_diff_successful():
-    disease_bt_1 = bt.Disease(source="mondo", version="2023-04-04")
-    disease_bt_2 = bt.Disease(source="mondo", version="2023-02-06")
+    disease_bt_1 = bt_base.Disease(source="mondo", version="2023-04-04")
+    disease_bt_2 = bt_base.Disease(source="mondo", version="2023-02-06")
 
     new_entries, modified_entries = disease_bt_1.diff(disease_bt_2)
     assert len(new_entries) == 819
@@ -34,19 +34,19 @@ def test_diff_successful():
 
 def test_diff_value_errors():
     # Two different PublicOntology object types
-    disease_bt = bt.Disease()
-    phenotype_bt = bt.Phenotype()
+    disease_bt = bt_base.Disease()
+    phenotype_bt = bt_base.Phenotype()
     with pytest.raises(ValueError):
         disease_bt.diff(phenotype_bt)
 
     # Different sources
-    disease_bt_1 = bt.Disease(source="mondo")
-    disease_bt_2 = bt.Disease(source="doid")
+    disease_bt_1 = bt_base.Disease(source="mondo")
+    disease_bt_2 = bt_base.Disease(source="doid")
     with pytest.raises(ValueError):
         disease_bt_1.diff(disease_bt_2)
 
     # Same version
-    disease_bt_3 = bt.Disease(source="mondo", version="2023-04-04")
-    disease_bt_4 = bt.Disease(source="mondo", version="2023-04-04")
+    disease_bt_3 = bt_base.Disease(source="mondo", version="2023-04-04")
+    disease_bt_4 = bt_base.Disease(source="mondo", version="2023-04-04")
     with pytest.raises(ValueError):
         disease_bt_3.diff(disease_bt_4)
diff --git a/tests/test_lamindb.py b/tests/test_lamindb.py
index 213155b..711db1c 100644
--- a/tests/test_lamindb.py
+++ b/tests/test_lamindb.py
@@ -1,6 +1,6 @@
 from pathlib import Path
 
-import bionty.base as bt
+import bionty.base as bt_base
 from bionty.base._settings import settings
 from bionty.base.dev._handle_sources import LAMINDB_INSTANCE_LOADED
 
@@ -18,7 +18,7 @@ def test_loaded_lamindb():
 
     assert LAMINDB_INSTANCE_LOADED()
 
-    ct = bt.CellType(version="2022-08-16")
+    ct = bt_base.CellType(version="2022-08-16")
     assert ct.source == "cl"
 
     lnenv.unlink()
diff --git a/tests/test_ontology.py b/tests/test_ontology.py
index 8fcf6b3..b9d6500 100644
--- a/tests/test_ontology.py
+++ b/tests/test_ontology.py
@@ -1,10 +1,10 @@
-import bionty.base as bt
+import bionty.base as bt_base
 from bionty.base.dev._io import s3_bionty_assets
 
 
 def test_ontology():
     localpath = s3_bionty_assets("ontology_all__pw__7.79__Pathway")
-    onto = bt.Ontology(localpath)
+    onto = bt_base.Ontology(localpath)
     assert onto.get_term("PW:0000014").name == "neurodegenerative pathway"
     df = onto.to_df(source="pw", include_id_prefixes={"pw": ["PW"]})
     assert df.shape == (2647, 4)