Skip to main content

Integrated Network and Dynamical Reasoning Assembler

Project description

Build Status Documentation Status

INDRA

INDRA (Integrated Network and Dynamical Reasoning Assembler) is an automated model assembly system, originally developed for molecular systems biology and currently being generalized to other domains. INDRA draws on natural language processing systems and structured databases to collect mechanistic and causal assertions, represents them in a standardized form (INDRA Statements), and assembles them into various modeling formalisms including causal graphs and dynamical models.

At the core of INDRA are its knowledge-level assembly procedures, allowing sources to be assembled into coherent models, a process that involves correcting systematic input errors, finding and resolving redundancies, inferring missing information, filtering to a relevant scope and assessing the reliability of causal information.

The detailed INDRA documentation is available at http://indra.readthedocs.io.

Contents

INDRA Modules

Knowledge sources

INDRA is currently integrated with the following natural language processing systems and structured databases. These input modules (available in indra.sources) all produce INDRA Statements.

General purpose causal relation reading systems:

Reader Module Reference
Eidos indra.sources.eidos https://github.com/clulab/eidos
TRIPS/CWMS indra.sources.cwms http://trips.ihmc.us/parser/cgi/cwmsreader
Hume indra.sources.hume https://github.com/BBN-E/Hume
Sofia indra.sources.sofia https://sofia.worldmodelers.com/ui/

Biology-oriented reading systems:

Reader Module Reference
TRIPS/DRUM indra.sources.trips http://trips.ihmc.us/parser/cgi/drum
REACH indra.sources.reach https://github.com/clulab/reach
Sparser indra.sources.sparser https://github.com/ddmcdonald/sparser
TEES indra.sources.tees https://github.com/jbjorne/TEES
MedScan indra.sources.medscan https://doi.org/10.1093/bioinformatics/btg207
RLIMS-P indra.sources.rlimsp https://research.bioinformatics.udel.edu/rlimsp
ISI/AMR indra.sources.isi https://github.com/sgarg87/big_mech_isi_gg
Geneways indra.sources.geneways https://www.ncbi.nlm.nih.gov/pubmed/15016385

Biological pathway databases:

Database / Exchange format Module Reference
PathwayCommons / BioPax indra.sources.biopax http://pathwaycommons.org/
http://www.biopax.org/
Large Corpus / BEL indra.sources.bel https://github.com/pybel/pybel
https://github.com/OpenBEL
Signor indra.sources.signor https://signor.uniroma2.it/
BioGRID indra.sources.biogrid https://thebiogrid.org/
Target Affinity Spectrum indra.sources.tas https://doi.org/10.1101/358978
LINCS small molecules indra.sources.lincs_drug http://lincs.hms.harvard.edu/db/sm/
HPRD indra.sources.hprd http://www.hprd.org
TRRUST indra.sources.trrust https://www.grnpedia.org/trrust/
Phospho.ELM indra.sources.phosphoelm http://phospho.elm.eu.org/
VirHostNet indra.sources.virhostnet http://virhostnet.prabi.fr/

Custom knowledge bases:

Database / Exchange format Module Reference
NDEx / CX indra.sources.ndex_cx http://ndexbio.org
INDRA DB / INDRA Statements indra.sources.indra_db_rest https://github.com/indralab/indra_db
Hypothes.is indra.sources.hypothesis https://hypothes.is

Output model assemblers

INDRA also provides several model output assemblers that take INDRA Statements as input. The most sophisticated model assembler is the PySB Assembler, which implements a policy-guided automated assembly procedure of a rule-based executable model (that can then be further compiled into other formats such as SBML, Kappa, BNGL and SBGN to connect to a vast ecosystem of downstream tools). Several other model assembly modules target various network formats for visualization, and graph/structural analysis (PyBEL, CyJS, Graphviz, SBGN, CX, SIF, etc.) and curation (HTML, TSV, IndexCards). Finally, the English Assembler produces English language descriptions of a set of INDRA Statements.

INDRA also supports extension by outside model assembly tools which take INDRA Statements as input and produce models. One such example is Delphi (https://github.com/ml4ai/delphi), which is a Dynamic Bayesian Network model assembler. Similarly, outside tools that support INDRA Statements can implement custom visualization methods, such as CauseMos, developed by Uncharted Software (https://uncharted.software/).

Assemblers aimed at model-driven discovery and analysis:

Modeling formalism / Exchange format Purpose Module Reference
PySB (-> SBML, SBGN, BNGL, Kappa, etc.) Detailed, mechanistic modeling, simulation, analysis indra.assemblers.pysb http://pysb.org
PyBEL Causal analysis, visualization indra.assemblers.pybel https://github.com/pybel/pybel
https://bel-commons.scai.fraunhofer.de/
IndraNet Causal analysis, signed and unsigned indra.assemblers.indranet
SIF Network analysis, logic modeling, visualization indra.assemblers.sif SIF format
Figaro Bayesian network inference indra.assemblers.figaro https://github.com/p2t2/figaro/
KAMI Knowledge aggregation of protein sites/states and Kappa modeling indra.assemblers.kami https://github.com/Kappa-Dev/KAMI

Assemblers primarily aimed at visualization:

Network / Exchange format Purpose Module Reference
Causal Analysis Graph General causal graph visualization indra.assemblers.cag
CX Network browsing, versioning on NDEx indra.assemblers.cx http://ndexbio.org
Cytoscape JS Interactive Cytoscape JS network to embed in websites indra.assemblers.cyjs http://js.cytoscape.org/
Graphviz Static PDF/PNG visualization with powerful automated layout using Graphviz indra.assemblers.graph https://www.graphviz.org/
SBGN Visualization with Systems Biology Graphical Notation indra.assemblers.sbgn http://sbgn.org

Assemblers primarily aimed at expert curation and browsing:

Output format Purpose Module Reference
English language Human-readable descriptions, reports, dialogue indra.assemblers.english
HTML Web-based browsing, linking out to provenance, curation indra.assemblers.html Curation tutorial
TSV (Tab/Comma Separated Values) Spreadsheet-based browsing and curation indra.assemblers.tsv
Index Cards Custom JSON format for curating biological mechanisms indra.assemblers.index_card

Internal knowledge assembly

A key feature of INDRA is providing internal knowledge-assembly modules that operate on INDRA Statements and perform the following tasks:

The internal assembly steps of INDRA including the ones listed above, and also a large collection of filters (filter by source, belief, the presence of grounding information, semantic filters by entity role, etc.) are exposed in the indra.tools.assemble_corpus submodule. This submodule contains functions that take Statements as input and produce processed Statements as output. They can be composed to form an assembly pipeline connecting knowledge collected from sources with an output model.

This diagram illustrates the assembly pipeline process.

assembly

The choice of assembly functions can vary depending on the domain (i.e, biology or world modeling), the modeling goal (i.e., the type of model that will be assembled and how that model will be used), desired features, and confidence (e.g., filter to human genes only or apply a belief cutoff), and any other user preferences.

An example of a typical assembly pipeline for biology statements is as follows. Some of the below steps can be removed, rearranged, and other steps added to change the assembly pipeline.

from indra.tools import assemble_corpus as ac
stmts = <the collection of all raw statements to use>
stmts = ac.filter_no_hypothesis(stmts)  # Filter out hypothetical statements
stmts = ac.map_grounding(stmts)         # Map grounding
stmts = ac.filter_grounded_only(stmts)  # Filter out ungrounded agents
stmts = ac.filter_human_only(stmts)     # Filter out non-human genes
stmts = ac.map_sequence(stmts)          # Map sequence
stmts = ac.run_preassembly(stmts,       # Run preassembly
                           return_toplevel=False)
stmts = ac.filter_belief(stmts, 0.8)    # Apply belief cutoff of 0.8

An example of an assembly pipeline for statements in the world modeling domain is as follows (note how biology-specific functions are not used, and a custom belief_scorer and hierarchies are passed to run_preassembly here, while the biology pipeline used default values):

from indra.tools import assemble_corpus as ac
from indra.belief.wm_scorer import get_eidos_scorer
from indra.preassembler.hierarchy_manager import get_wm_hierarchies
stmts = <the collection of all raw statements to use>
stmts = ac.filter_grounded_only(stmts)  # Filter out ungrounded agents
hierarchies = get_wm_hierarchies()
belief_scorer = get_eidos_scorer()
stmts = ac.run_preassembly(stmts,       # Run preassembly
                           return_toplevel=False,
                           belief_scorer=belief_scorer,
                           hierarchies=hierarchies,
                           normalize_equivalences=True,     # Optional: rewrite equivalent groundings to one standard
                           normalize_opposites=True,        # Optional: rewrite opposite groundings to one standard
                           normalize_ns='WM')               # Use 'WM' namespace to normalize equivalences and opposites 
stmts = ac.filter_belief(stmts, 0.8)    # Apply belief cutoff of e.g., 0.8

Assembled statements returned after running the assembly pipeline can be passed into any of the output model assemblers.

Other modules

INDRA also contains modules to access literature content (e.g., PubMed, Elsevier), available in indra.literature, and access ontological information and convert between identifiers (e.g., UniProt, HGNC), available in indra.databases. A full list of further INDRA modules is available in the documentation.

Citation

Gyori B.M., Bachman J.A., Subramanian K., Muhlich J.L., Galescu L., Sorger P.K. From word models to executable models of signaling networks using automated assembly (2017), Molecular Systems Biology, 13, 954.

Installation

For detailed installation instructions, see the documentation.

INDRA currently supports Python 3.5+. The last release of INDRA compatible with Python 2.7 was 1.10.

The preferred way to install INDRA is by pointing pip to the source repository as

$ pip install git+https://github.com/sorgerlab/indra.git

Releases of INDRA are also available on PyPI, you can install the latest release as

$ pip install indra

However, releases will usually be behind the latest code available in this repository.

INDRA depends on a few standard Python packages. These packages are installed by pip during setup. For certain modules and use cases, other "extra" dependencies may be needed, which are described in detail in the documentation.

INDRA REST API

A REST API for INDRA is available at http://api.indra.bio:8000 with documentation at http://www.indra.bio/rest_api/docs. Note that the REST API is ideal for prototyping and for building light-weight web apps, but should not be used for large reading and assembly workflows.

INDRA Docker

INDRA is available as a Docker image on Dockerhub and can be pulled as

docker pull labsyspharm/indra

You can run the INDRA REST API using the container as

docker run -id -p 8080:8080 --entrypoint python labsyspharm/indra /sw/indra/rest_api/api.py

To build the image locally, there are currently two Dockerfiles for INDRA and its dependencies. They are available in the following repositories:

Using INDRA

In this example INDRA assembles a PySB model from the natural language description of a mechanism via the TRIPS reading web service.

from indra.sources import trips
from indra.assemblers.pysb import PysbAssembler
pa = PysbAssembler()
# Process a natural language description of a mechanism
trips_processor = trips.process_text('MEK2 phosphorylates ERK1 at Thr-202 and Tyr-204')
# Collect extracted mechanisms in PysbAssembler
pa.add_statements(trips_processor.statements)
# Assemble the model
model = pa.make_model(policies='two_step')

INDRA also provides an interface for the REACH natural language processor. In this example, a full paper from PubMed Central is processed. The paper's PMC ID is PMC3717945. The example assumest that a REACH server is running locally (see documentation at indra.sources.reach). Note that REACH takes about 8 minutes to read this full-text paper.

from indra.sources import reach
reach_processor = reach.process_pmc('PMC3717945', url=reach.local_nxml_url)

At this point, reach_processor.statements contains a list of INDRA statements extracted from the PMC paper.

Next we look at an example of reading the 10 most recent PubMed abstracts on BRAF and collecting the results in INDRA statements.

from indra.sources import reach
from indra.literature import pubmed_client
# Search for 10 most recent abstracts in PubMed on 'BRAF'
pmids = pubmed_client.get_ids('BRAF', retmax=10)
all_statements = []
for pmid in pmids:
    abs = pubmed_client.get_abstract(pmid)
    if abs is not None:
        reach_processor = reach.process_text(abs, url=reach.local_text_url)
        if reach_processor is not None:
            all_statements += reach_processor.statements

At this point, the all_statements list contains all the statements extracted from the 10 abstracts.

The next example shows querying the BEL large corpus network for a neighborhood of a given list of proteins using their HGNC gene names. This example performs the query via PyBEL.

from indra.sources import bel
# Process the neighborhood of BRAF and MAP2K1
bel_processor = bel.process_pybel_neighborhood(['BRAF', 'MAP2K1'])

At this point, bel_processor.statements contains a list of INDRA statements extracted from the neighborhood query.

Next, we look at an example of querying the Pathway Commons database for paths between two lists of proteins. Note: see installation notes above for installing pyjnius, which is required for using the BioPAX API of INDRA.

from indra.sources import biopax
# Process the neighborhood of BRAF and MAP2K1
biopax_processor = biopax.process_pc_pathsfromto(['BRAF', 'RAF1'], ['MAP2K1', 'MAP2K2'])

At this point, biopax_processor.statements contains a list of INDRA Statements extracted from the paths-from-to query.

Funding

The development of INDRA has been funded from the following sources:

Program Grant number
DARPA Big Mechanism W911NF-14-1-0397
DARPA World Modelers W911NF-18-1-0014
DARPA Communicating with Computers W911NF-15-1-0544
DARPA Automated Scientific Discovery Framework W911NF-18-1-0124
DARPA Automating Scientific Knowledge Extraction HR00111990009
DARPA Panacea HR00111920022

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

indra-1.17.0.tar.gz (62.7 MB view details)

Uploaded Source

Built Distribution

indra-1.17.0-py3-none-any.whl (59.9 MB view details)

Uploaded Python 3

File details

Details for the file indra-1.17.0.tar.gz.

File metadata

  • Download URL: indra-1.17.0.tar.gz
  • Upload date:
  • Size: 62.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.7.7

File hashes

Hashes for indra-1.17.0.tar.gz
Algorithm Hash digest
SHA256 c690b5b2c0fa14c090565e525f3fd93c2591451561db97585675759c295e547a
MD5 8166e68ae236531afc122141cd253c60
BLAKE2b-256 727db8683f17a613aa915af3a52f88c1e6619988d3f26b22693c8c1783b75076

See more details on using hashes here.

File details

Details for the file indra-1.17.0-py3-none-any.whl.

File metadata

  • Download URL: indra-1.17.0-py3-none-any.whl
  • Upload date:
  • Size: 59.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.7.7

File hashes

Hashes for indra-1.17.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9d883aaabd8c698990305070ae64fb8de79119601b01c8222b736ef94d620217
MD5 e4f32de3b38a9f2feb237ce6696f48ac
BLAKE2b-256 4860acb9333580d4b9be64e74c68639ba8c2715712c077871172dd9ac85bdc47

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page