pronto


Namepronto JSON
Version 2.5.7 PyPI version JSON
download
home_pagehttps://github.com/althonos/pronto
SummaryPython frontend to ontologies.
upload_time2024-04-24 13:39:46
maintainerNone
docs_urlNone
authorMartin Larralde
requires_python>=3.7
licenseMIT
keywords bioinformatics ontology obo owl convert parse
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # `pronto` [![Stars](https://img.shields.io/github/stars/althonos/pronto.svg?style=social&maxAge=3600&label=Star)](https://github.com/althonos/pronto/stargazers)

*A Python frontend to ontologies.*

[![Actions](https://img.shields.io/github/actions/workflow/status/althonos/pronto/test.yml?branch=master&logo=github&style=flat-square&maxAge=300)](https://github.com/althonos/pronto/actions)
[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square&maxAge=2678400)](https://choosealicense.com/licenses/mit/)
[![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pronto/)
[![Docs](https://img.shields.io/readthedocs/pronto?style=flat-square&maxAge=3600)](http://pronto.readthedocs.io/en/stable/?badge=stable)
[![Coverage](https://img.shields.io/codecov/c/gh/althonos/pronto?style=flat-square&maxAge=3600)](https://codecov.io/gh/althonos/pronto/)
[![Sanity](https://img.shields.io/codacy/grade/157b5fd24e5648ea80580f28399e79a4.svg?style=flat-square&maxAge=3600)](https://codacy.com/app/althonos/pronto)
[![PyPI](https://img.shields.io/pypi/v/pronto.svg?style=flat-square&maxAge=3600)](https://pypi.python.org/pypi/pronto)
[![Bioconda](https://img.shields.io/conda/vn/bioconda/pronto?style=flat-square&maxAge=3600)](https://anaconda.org/bioconda/pronto)
[![Versions](https://img.shields.io/pypi/pyversions/pronto.svg?style=flat-square&maxAge=3600)](https://pypi.org/project/pronto/#files)
[![Wheel](https://img.shields.io/pypi/wheel/pronto?style=flat-square&maxAge=3600)](https://pypi.org/project/pronto/#files)
[![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pronto/blob/master/CHANGELOG.md)
[![GitHub issues](https://img.shields.io/github/issues/althonos/pronto.svg?style=flat-square&maxAge=600)](https://github.com/althonos/pronto/issues)
[![DOI](https://img.shields.io/badge/doi-10.5281%2Fzenodo.595572-purple?style=flat-square&maxAge=2678400)](https://doi.org/10.5281/zenodo.595572)
[![Downloads](https://img.shields.io/pypi/dm/pronto?style=flat-square&color=303f9f&maxAge=86400&label=downloads)](https://pepy.tech/project/pronto)

## 🚩 Table of Contents

- [Overview](#%EF%B8%8F-overview)
- [Supported Languages](#%EF%B8%8F-supported-languages)
- [Installing](#-installing)
- [Examples](#-examples)
- [API Reference](#-api-reference)
- [License](#-license)

## πŸ—ΊοΈ Overview

Pronto is a Python library to parse, browse, create, and export
ontologies, supporting several ontology languages and formats. It
implement the specifications of the
[Open Biomedical Ontologies 1.4](http://owlcollab.github.io/oboformat/doc/obo-syntax.html)
in the form of an safe high-level interface. *If you're only interested in
parsing OBO or OBO Graphs document, you may wish to consider
[`fastobo`](https://pypi.org/project/fastobo) instead.*


## 🏳️ Supported Languages

- [Open Biomedical Ontologies 1.4](http://owlcollab.github.io/oboformat/doc/GO.format.obo-1_4.html).
  *Because this format is fairly new, not all OBO ontologies can be parsed at the
  moment. See the [OBO Foundry roadmap](https://github.com/orgs/fastobo/projects/2)
  listing the compliant ontologies, and don't hesitate to contact their developers
  to push adoption forward.*
- [OBO Graphs](https://github.com/geneontology/obographs) in [JSON](http://json.org/)
  format. *The format is not yet stabilized to the results may change from file
  to file.*
- [Ontology Web Language 2](https://www.w3.org/TR/owl2-overview/)
  in [RDF/XML format](https://www.w3.org/TR/2012/REC-owl2-mapping-to-rdf-20121211/).
  *OWL2 ontologies are reverse translated to OBO using the mapping defined in the
  [OBO 1.4 Semantics](http://owlcollab.github.io/oboformat/doc/obo-syntax.html).*

## πŸ”§ Installing


Installing with `pip` is the easiest:
```console
# pip install pronto          # if you have the admin rights
$ pip install pronto --user   # install it in a user-site directory
```

There is also a `conda` recipe in the `bioconda` channel:
```console
$ conda install -c bioconda pronto
```

Finally, a development version can be installed from GitHub
using `setuptools`, provided you have the right dependencies
installed already:
```console
$ git clone https://github.com/althonos/pronto
$ cd pronto
# python setup.py install
```

## πŸ’‘ Examples

If you're only reading ontologies, you'll only use the `Ontology`
class, which is the main entry point.

```python
>>> from pronto import Ontology
```

It can be instantiated from a path to an ontology in one of the supported
formats, even if the file is compressed:
```python
>>> go = Ontology("tests/data/go.obo.gz")
```

Loading a file from a persistent URL is also supported, although you may also
want to use the `Ontology.from_obo_library` method if you're using persistent
URLs a lot:
```python
>>> cl = Ontology("http://purl.obolibrary.org/obo/cl.obo")
>>> stato = Ontology.from_obo_library("stato.owl")
```

### 🏷️ Get a term by accession

`Ontology` objects can be used as mappings to access any entity
they contain from their identifier in compact form:
```python
>>> cl['CL:0002116']
Term('CL:0002116', name='B220-low CD38-positive unswitched memory B cell')
```

Note that when loading an OWL ontology, URIs will be compacted to CURIEs
whenever possible:

```python
>>> aeo = Ontology.from_obo_library("aeo.owl")
>>> aeo["AEO:0000078"]
Term('AEO:0000078', name='lumen of tube')
```

### πŸ–ŠοΈ Create a new term from scratch

We can load an ontology, and edit it locally. Here, we add a new protein class
to the Protein Ontology.
```python
>>> pr = Ontology.from_obo_library("pr.obo")
>>> brh = ms.create_term("PR:XXXXXXXX")
>>> brh.name = "Bacteriorhodopsin"
>>> brh.superclasses().add(pr["PR:000001094"])  # is a rhodopsin-like G-protein
>>> brh.disjoint_from.add(pr["PR:000036194"])   # disjoint from eukaryotic proteins
```

### ✏️ Convert an OWL ontology to OBO format

The `Ontology.dump` method can be used to serialize an ontology to any of the
supported formats (currently OBO and OBO JSON):
```python
>>> edam = Ontology("http://edamontology.org/EDAM.owl")
>>> with open("edam.obo", "wb") as f:
...     edam.dump(f, format="obo")
```

### 🌿 Find ontology terms without subclasses

The `terms` method of `Ontology` instances can be used to
iterate over all the terms in the ontology (including the
ones that are imported). We can then use the `is_leaf`
method of `Term` objects to check is the term is a leaf in the
class inclusion graph.

```python
>>> ms = Ontology("ms.obo")
>>> for term in ms.terms():
...     if term.is_leaf():
...         print(term.id)
MS:0000000
MS:1000001
...
```

### 🀫 Silence warnings

`pronto` is explicit about the parts of the code that are doing 
non-standard assumptions, or missing capabilities to handle certain
constructs. It does so by raising warnings with the `warnings` module, 
which can get quite verbose. 

If you are fine with the inconsistencies, you can manually disable 
warning reports in your consumer code with the `filterwarnings` function:

```python
import warnings
import pronto
warnings.filterwarnings("ignore", category=pronto.warnings.ProntoWarning)
```

<!-- ### 🀝 Merging several ontologies -->

## πŸ“– API Reference

A complete API reference can be found in the
[online documentation](https://pronto.readthedocs.io/en/latest/api.html), or
directly from the command line using `pydoc`:
```console
$ pydoc pronto.Ontology
```

## πŸ“œ License

This library is provided under the open-source
[MIT license](https://choosealicense.com/licenses/mit/).
Please cite this library if you are using it in a scientific
context using the following DOI:
[**10.5281/zenodo.595572**](https://doi.org/10.5281/zenodo.595572)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/althonos/pronto",
    "name": "pronto",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "bioinformatics, ontology, OBO, OWL, convert, parse",
    "author": "Martin Larralde",
    "author_email": "martin.larralde@embl.de",
    "download_url": "https://files.pythonhosted.org/packages/54/ed/d94a2f5bcc312b441e339fd605ae2a995df76866a0f73d4a6f06950500bb/pronto-2.5.7.tar.gz",
    "platform": "any",
    "description": "# `pronto` [![Stars](https://img.shields.io/github/stars/althonos/pronto.svg?style=social&maxAge=3600&label=Star)](https://github.com/althonos/pronto/stargazers)\n\n*A Python frontend to ontologies.*\n\n[![Actions](https://img.shields.io/github/actions/workflow/status/althonos/pronto/test.yml?branch=master&logo=github&style=flat-square&maxAge=300)](https://github.com/althonos/pronto/actions)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square&maxAge=2678400)](https://choosealicense.com/licenses/mit/)\n[![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pronto/)\n[![Docs](https://img.shields.io/readthedocs/pronto?style=flat-square&maxAge=3600)](http://pronto.readthedocs.io/en/stable/?badge=stable)\n[![Coverage](https://img.shields.io/codecov/c/gh/althonos/pronto?style=flat-square&maxAge=3600)](https://codecov.io/gh/althonos/pronto/)\n[![Sanity](https://img.shields.io/codacy/grade/157b5fd24e5648ea80580f28399e79a4.svg?style=flat-square&maxAge=3600)](https://codacy.com/app/althonos/pronto)\n[![PyPI](https://img.shields.io/pypi/v/pronto.svg?style=flat-square&maxAge=3600)](https://pypi.python.org/pypi/pronto)\n[![Bioconda](https://img.shields.io/conda/vn/bioconda/pronto?style=flat-square&maxAge=3600)](https://anaconda.org/bioconda/pronto)\n[![Versions](https://img.shields.io/pypi/pyversions/pronto.svg?style=flat-square&maxAge=3600)](https://pypi.org/project/pronto/#files)\n[![Wheel](https://img.shields.io/pypi/wheel/pronto?style=flat-square&maxAge=3600)](https://pypi.org/project/pronto/#files)\n[![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pronto/blob/master/CHANGELOG.md)\n[![GitHub issues](https://img.shields.io/github/issues/althonos/pronto.svg?style=flat-square&maxAge=600)](https://github.com/althonos/pronto/issues)\n[![DOI](https://img.shields.io/badge/doi-10.5281%2Fzenodo.595572-purple?style=flat-square&maxAge=2678400)](https://doi.org/10.5281/zenodo.595572)\n[![Downloads](https://img.shields.io/pypi/dm/pronto?style=flat-square&color=303f9f&maxAge=86400&label=downloads)](https://pepy.tech/project/pronto)\n\n## \ud83d\udea9 Table of Contents\n\n- [Overview](#%EF%B8%8F-overview)\n- [Supported Languages](#%EF%B8%8F-supported-languages)\n- [Installing](#-installing)\n- [Examples](#-examples)\n- [API Reference](#-api-reference)\n- [License](#-license)\n\n## \ud83d\uddfa\ufe0f Overview\n\nPronto is a Python library to parse, browse, create, and export\nontologies, supporting several ontology languages and formats. It\nimplement the specifications of the\n[Open Biomedical Ontologies 1.4](http://owlcollab.github.io/oboformat/doc/obo-syntax.html)\nin the form of an safe high-level interface. *If you're only interested in\nparsing OBO or OBO Graphs document, you may wish to consider\n[`fastobo`](https://pypi.org/project/fastobo) instead.*\n\n\n## \ud83c\udff3\ufe0f Supported Languages\n\n- [Open Biomedical Ontologies 1.4](http://owlcollab.github.io/oboformat/doc/GO.format.obo-1_4.html).\n  *Because this format is fairly new, not all OBO ontologies can be parsed at the\n  moment. See the [OBO Foundry roadmap](https://github.com/orgs/fastobo/projects/2)\n  listing the compliant ontologies, and don't hesitate to contact their developers\n  to push adoption forward.*\n- [OBO Graphs](https://github.com/geneontology/obographs) in [JSON](http://json.org/)\n  format. *The format is not yet stabilized to the results may change from file\n  to file.*\n- [Ontology Web Language 2](https://www.w3.org/TR/owl2-overview/)\n  in [RDF/XML format](https://www.w3.org/TR/2012/REC-owl2-mapping-to-rdf-20121211/).\n  *OWL2 ontologies are reverse translated to OBO using the mapping defined in the\n  [OBO 1.4 Semantics](http://owlcollab.github.io/oboformat/doc/obo-syntax.html).*\n\n## \ud83d\udd27 Installing\n\n\nInstalling with `pip` is the easiest:\n```console\n# pip install pronto          # if you have the admin rights\n$ pip install pronto --user   # install it in a user-site directory\n```\n\nThere is also a `conda` recipe in the `bioconda` channel:\n```console\n$ conda install -c bioconda pronto\n```\n\nFinally, a development version can be installed from GitHub\nusing `setuptools`, provided you have the right dependencies\ninstalled already:\n```console\n$ git clone https://github.com/althonos/pronto\n$ cd pronto\n# python setup.py install\n```\n\n## \ud83d\udca1 Examples\n\nIf you're only reading ontologies, you'll only use the `Ontology`\nclass, which is the main entry point.\n\n```python\n>>> from pronto import Ontology\n```\n\nIt can be instantiated from a path to an ontology in one of the supported\nformats, even if the file is compressed:\n```python\n>>> go = Ontology(\"tests/data/go.obo.gz\")\n```\n\nLoading a file from a persistent URL is also supported, although you may also\nwant to use the `Ontology.from_obo_library` method if you're using persistent\nURLs a lot:\n```python\n>>> cl = Ontology(\"http://purl.obolibrary.org/obo/cl.obo\")\n>>> stato = Ontology.from_obo_library(\"stato.owl\")\n```\n\n### \ud83c\udff7\ufe0f Get a term by accession\n\n`Ontology` objects can be used as mappings to access any entity\nthey contain from their identifier in compact form:\n```python\n>>> cl['CL:0002116']\nTerm('CL:0002116', name='B220-low CD38-positive unswitched memory B cell')\n```\n\nNote that when loading an OWL ontology, URIs will be compacted to CURIEs\nwhenever possible:\n\n```python\n>>> aeo = Ontology.from_obo_library(\"aeo.owl\")\n>>> aeo[\"AEO:0000078\"]\nTerm('AEO:0000078', name='lumen of tube')\n```\n\n### \ud83d\udd8a\ufe0f Create a new term from scratch\n\nWe can load an ontology, and edit it locally. Here, we add a new protein class\nto the Protein Ontology.\n```python\n>>> pr = Ontology.from_obo_library(\"pr.obo\")\n>>> brh = ms.create_term(\"PR:XXXXXXXX\")\n>>> brh.name = \"Bacteriorhodopsin\"\n>>> brh.superclasses().add(pr[\"PR:000001094\"])  # is a rhodopsin-like G-protein\n>>> brh.disjoint_from.add(pr[\"PR:000036194\"])   # disjoint from eukaryotic proteins\n```\n\n### \u270f\ufe0f Convert an OWL ontology to OBO format\n\nThe `Ontology.dump` method can be used to serialize an ontology to any of the\nsupported formats (currently OBO and OBO JSON):\n```python\n>>> edam = Ontology(\"http://edamontology.org/EDAM.owl\")\n>>> with open(\"edam.obo\", \"wb\") as f:\n...     edam.dump(f, format=\"obo\")\n```\n\n### \ud83c\udf3f Find ontology terms without subclasses\n\nThe `terms` method of `Ontology` instances can be used to\niterate over all the terms in the ontology (including the\nones that are imported). We can then use the `is_leaf`\nmethod of `Term` objects to check is the term is a leaf in the\nclass inclusion graph.\n\n```python\n>>> ms = Ontology(\"ms.obo\")\n>>> for term in ms.terms():\n...     if term.is_leaf():\n...         print(term.id)\nMS:0000000\nMS:1000001\n...\n```\n\n### \ud83e\udd2b Silence warnings\n\n`pronto` is explicit about the parts of the code that are doing \nnon-standard assumptions, or missing capabilities to handle certain\nconstructs. It does so by raising warnings with the `warnings` module, \nwhich can get quite verbose. \n\nIf you are fine with the inconsistencies, you can manually disable \nwarning reports in your consumer code with the `filterwarnings` function:\n\n```python\nimport warnings\nimport pronto\nwarnings.filterwarnings(\"ignore\", category=pronto.warnings.ProntoWarning)\n```\n\n<!-- ### \ud83e\udd1d Merging several ontologies -->\n\n## \ud83d\udcd6 API Reference\n\nA complete API reference can be found in the\n[online documentation](https://pronto.readthedocs.io/en/latest/api.html), or\ndirectly from the command line using `pydoc`:\n```console\n$ pydoc pronto.Ontology\n```\n\n## \ud83d\udcdc License\n\nThis library is provided under the open-source\n[MIT license](https://choosealicense.com/licenses/mit/).\nPlease cite this library if you are using it in a scientific\ncontext using the following DOI:\n[**10.5281/zenodo.595572**](https://doi.org/10.5281/zenodo.595572)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python frontend to ontologies.",
    "version": "2.5.7",
    "project_urls": {
        "Bug Tracker": "https://github.com/althonos/pronto/issues",
        "CI": "https://github.com/althonos/pronto/actions",
        "Changelog": "https://pronto.readthedocs.io/en/latest/changes.html",
        "Coverage": "https://app.codecov.io/gh/althonos/pronto",
        "Documentation": "https://pronto.readthedocs.io/en/latest/",
        "Homepage": "https://github.com/althonos/pronto"
    },
    "split_keywords": [
        "bioinformatics",
        " ontology",
        " obo",
        " owl",
        " convert",
        " parse"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cce45324945706e587ced6c5a6a6a103841774b23f36f4464e01c380b89b51b2",
                "md5": "7d6a50fba809da0b85accac265d6805f",
                "sha256": "d7a053cb1735353ef1c708226e77d051a1a32906b5c77f89f9d99c6ca5b5c985"
            },
            "downloads": -1,
            "filename": "pronto-2.5.7-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7d6a50fba809da0b85accac265d6805f",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.7",
            "size": 61724,
            "upload_time": "2024-04-24T13:39:44",
            "upload_time_iso_8601": "2024-04-24T13:39:44.458262Z",
            "url": "https://files.pythonhosted.org/packages/cc/e4/5324945706e587ced6c5a6a6a103841774b23f36f4464e01c380b89b51b2/pronto-2.5.7-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "54edd94a2f5bcc312b441e339fd605ae2a995df76866a0f73d4a6f06950500bb",
                "md5": "5be3a9746e17d0f19761bab587794763",
                "sha256": "014a5b02064781d6edd7ca5b4f63b13342dd9b5322248f5a4740f48a98464629"
            },
            "downloads": -1,
            "filename": "pronto-2.5.7.tar.gz",
            "has_sig": false,
            "md5_digest": "5be3a9746e17d0f19761bab587794763",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 60737,
            "upload_time": "2024-04-24T13:39:46",
            "upload_time_iso_8601": "2024-04-24T13:39:46.299543Z",
            "url": "https://files.pythonhosted.org/packages/54/ed/d94a2f5bcc312b441e339fd605ae2a995df76866a0f73d4a6f06950500bb/pronto-2.5.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-24 13:39:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "althonos",
    "github_project": "pronto",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pronto"
}
        
Elapsed time: 0.25904s