# -*- coding: utf-8 -*-
"""Constants for PyBEL.
This module maintains the strings used throughout the PyBEL codebase to promote consistency.
"""
from .config import connection
[docs]def get_cache_connection() -> str:
"""Get the preferred RFC-1738 database connection string.
1. Check the environment variable ``PYBEL_CONNECTION``
2. Check the ``PYBEL_CONNECTION`` key in the config file ``~/.config/pybel/config.json``. Optionally, this config
file might be in a different place if the environment variable ``PYBEL_CONFIG_DIRECTORY`` has been set.
3. Return a default connection string using a SQLite database in the ``~/.pybel``. Optionally, this directory
might be in a different place if the environment variable ``PYBEL_RESOURCE_DIRECTORY`` has been set.
"""
return connection
PYBEL_CONTEXT_TAG = 'pybel_context'
PYBEL_AUTOEVIDENCE = 'Automatically added by PyBEL'
#: The default namespace given to entities in the BEL language
BEL_DEFAULT_NAMESPACE = 'bel'
CITATION_TYPE_BOOK = 'Book'
CITATION_TYPE_PUBMED = 'PubMed'
CITATION_TYPE_PMC = 'PubMed Central'
CITATION_TYPE_JOURNAL = 'Journal'
CITATION_TYPE_ONLINE = 'Online Resource'
CITATION_TYPE_URL = 'URL'
CITATION_TYPE_DOI = 'DOI'
CITATION_TYPE_OTHER = 'Other'
#: The valid citation types
#: .. seealso:: https://wiki.openbel.org/display/BELNA/Citation
CITATION_TYPES = {
CITATION_TYPE_BOOK: None,
CITATION_TYPE_PUBMED: 'pmid',
CITATION_TYPE_PMC: 'pmc',
CITATION_TYPE_JOURNAL: None,
CITATION_TYPE_ONLINE: None,
CITATION_TYPE_URL: None,
CITATION_TYPE_DOI: 'doi',
CITATION_TYPE_OTHER: None,
}
NAMESPACE_DOMAIN_BIOPROCESS = 'BiologicalProcess'
NAMESPACE_DOMAIN_CHEMICAL = 'Chemical'
NAMESPACE_DOMAIN_GENE = 'Gene and Gene Products'
NAMESPACE_DOMAIN_OTHER = 'Other'
#: The valid namespace types
#: .. seealso:: https://wiki.openbel.org/display/BELNA/Custom+Namespaces
NAMESPACE_DOMAIN_TYPES = {
NAMESPACE_DOMAIN_BIOPROCESS,
NAMESPACE_DOMAIN_CHEMICAL,
NAMESPACE_DOMAIN_GENE,
NAMESPACE_DOMAIN_OTHER,
}
#: Represents the key for the citation type in a citation dictionary
CITATION_DB = 'db'
#: Represents the key for the citation reference in a citation dictionary
CITATION_IDENTIFIER = 'db_id'
#: Represents the key for the optional PyBEL citation title entry in a citation dictionary
CITATION_DB_NAME = 'db_name'
#: Represents the key for the citation date in a citation dictionary
CITATION_DATE = 'date'
#: Represents the key for the citation authors in a citation dictionary
CITATION_AUTHORS = 'authors'
#: Represents the key for the citation comment in a citation dictionary
CITATION_JOURNAL = 'db_name'
#: Represents the key for the optional PyBEL citation volume entry in a citation dictionary
CITATION_VOLUME = 'volume'
#: Represents the key for the optional PyBEL citation issue entry in a citation dictionary
CITATION_ISSUE = 'issue'
#: Represents the key for the optional PyBEL citation pages entry in a citation dictionary
CITATION_PAGES = 'pages'
#: Represents the key for the optional PyBEL citation first author entry in a citation dictionary
CITATION_FIRST_AUTHOR = 'first'
#: Represents the key for the optional PyBEL citation last author entry in a citation dictionary
CITATION_LAST_AUTHOR = 'last'
# Used during BEL parsing
MODIFIER = 'modifier'
EFFECT = 'effect'
TARGET = 'target'
FROM_LOC = 'fromLoc'
TO_LOC = 'toLoc'
LOCATION = 'location'
ACTIVITY = 'Activity'
DEGRADATION = 'Degradation'
TRANSLOCATION = 'Translocation'
CELL_SECRETION = 'CellSecretion'
CELL_SURFACE_EXPRESSION = 'CellSurfaceExpression'
INTRACELLULAR = 'intracellular'
EXTRACELLULAR = 'extracellular space'
CELL_SURFACE = 'cell surface'
# Internal node data format keys
#: The node data key specifying the node's function (e.g. :data:`GENE`, :data:`MIRNA`, :data:`BIOPROCESS`, etc.)
FUNCTION = 'function'
#: The key specifying a concept
CONCEPT = 'concept'
#: The key specifying an identifier dictionary's namespace. Used for nodes, activities, and transformations.
NAMESPACE = 'namespace'
#: The key specifying an identifier dictionary's name. Used for nodes, activities, and transformations.
NAME = 'name'
#: The key specifying an identifier dictionary
IDENTIFIER = 'identifier'
#: The key specifying an optional label for the node
LABEL = 'label'
#: The key specifying an optional description for the node
DESCRIPTION = 'description'
#: The key specifying xrefs
XREFS = 'xref'
#: They key representing the nodes that are a member of a composite or complex
MEMBERS = 'members'
#: The key representing the nodes appearing in the reactant side of a biochemical reaction
REACTANTS = 'reactants'
#: The key representing the nodes appearing in the product side of a biochemical reaction
PRODUCTS = 'products'
#: The node data key specifying a fusion dictionary, containing :data:`PARTNER_3P`, :data:`PARTNER_5P`,
# :data:`RANGE_3P`, and :data:`RANGE_5P`
FUSION = 'fusion'
#: The key specifying the identifier dictionary of the fusion's 3-Prime partner
PARTNER_3P = 'partner_3p'
#: The key specifying the identifier dictionary of the fusion's 5-Prime partner
PARTNER_5P = 'partner_5p'
#: The key specifying the range dictionary of the fusion's 3-Prime partner
RANGE_3P = 'range_3p'
#: The key specifying the range dictionary of the fusion's 5-Prime partner
RANGE_5P = 'range_5p'
FUSION_REFERENCE = 'reference'
FUSION_START = 'left'
FUSION_STOP = 'right'
FUSION_MISSING = 'missing'
#: The key specifying the node has a list of associated variants
VARIANTS = 'variants'
#: The key representing what kind of variation is being represented
KIND = 'kind'
#: The value for :data:`KIND` for an HGVS variant
HGVS = 'hgvs'
#: The value for :data:`KIND` for a protein modification
PMOD = 'pmod'
#: The value for :data:`KIND` for a gene modification
GMOD = 'gmod'
#: The value for :data:`KIND` for a fragment
FRAGMENT = 'frag'
#: The allowed values for :data:`KIND`
PYBEL_VARIANT_KINDS = {
HGVS,
PMOD,
GMOD,
FRAGMENT,
}
#: The group of all BEL-provided keys for node data dictionaries, used for hashing.
PYBEL_NODE_DATA_KEYS = {
FUNCTION,
NAMESPACE,
NAME,
IDENTIFIER,
VARIANTS,
FUSION,
MEMBERS,
REACTANTS,
PRODUCTS,
}
#: Used as a namespace when none is given when lenient parsing mode is turned on. Not recommended!
DIRTY = 'dirty'
#: Represents the BEL abundance, abundance()
ABUNDANCE = 'Abundance'
#: Represents the BEL abundance, geneAbundance()
#: .. seealso:: http://openbel.org/language/version_2.0/bel_specification_version_2.0.html#Xabundancea
GENE = 'Gene'
#: Represents the BEL abundance, rnaAbundance()
RNA = 'RNA'
#: Represents the BEL abundance, microRNAAbundance()
MIRNA = 'miRNA'
#: Represents the BEL abundance, proteinAbundance()
PROTEIN = 'Protein'
#: Represents the BEL function, biologicalProcess()
BIOPROCESS = 'BiologicalProcess'
#: Represents the BEL function, pathology()
PATHOLOGY = 'Pathology'
#: Represents the BEL function, populationAbundance()
POPULATION = 'Population'
#: Represents the BEL abundance, compositeAbundance()
COMPOSITE = 'Composite'
#: Represents the BEL abundance, complexAbundance()
COMPLEX = 'Complex'
#: Represents the BEL transformation, reaction()
REACTION = 'Reaction'
#: A set of all of the valid PyBEL node functions
PYBEL_NODE_FUNCTIONS = {
ABUNDANCE,
GENE,
RNA,
MIRNA,
PROTEIN,
BIOPROCESS,
PATHOLOGY,
COMPOSITE,
COMPLEX,
REACTION,
POPULATION,
}
#: The mapping from PyBEL node functions to BEL strings
rev_abundance_labels = {
ABUNDANCE: 'a',
GENE: 'g',
MIRNA: 'm',
PROTEIN: 'p',
RNA: 'r',
BIOPROCESS: 'bp',
PATHOLOGY: 'path',
COMPLEX: 'complex',
COMPOSITE: 'composite',
POPULATION: 'pop',
}
# Internal edge data keys
#: The key for an internal edge data dictionary for the relation string
RELATION = 'relation'
#: The key for an internal edge data dictionary for the citation dictionary
CITATION = 'citation'
#: The key for an internal edge data dictionary for the evidence string
EVIDENCE = 'evidence'
#: The key for an internal edge data dictionary for the annotations dictionary
ANNOTATIONS = 'annotations'
#: The key for an internal edge data dictionary for the subject modifier dictionary
SUBJECT = 'subject'
#: The key for an internal edge data dictionary for the object modifier dictionary
OBJECT = 'object'
#: The key or an internal edge data dictionary for the line number
LINE = 'line'
#: The key representing the hash of the other
HASH = 'hash'
#: The group of all BEL-provided keys for edge data dictionaries, used for hashing.
PYBEL_EDGE_DATA_KEYS = {
RELATION,
CITATION,
EVIDENCE,
ANNOTATIONS,
SUBJECT,
OBJECT,
}
#: The group of all PyBEL-specific keys for edge data dictionaries, not used for hashing.
PYBEL_EDGE_METADATA_KEYS = {
LINE,
HASH,
}
#: The group of all PyBEL annotated keys for edge data dictionaries
PYBEL_EDGE_ALL_KEYS = PYBEL_EDGE_DATA_KEYS | PYBEL_EDGE_METADATA_KEYS
#: A BEL relationship
HAS_REACTANT = 'hasReactant'
#: A BEL relationship
HAS_PRODUCT = 'hasProduct'
#: A BEL relationship
HAS_VARIANT = 'hasVariant'
#: A BEL relationship
#: :data:`GENE` to :data:`RNA` is called transcription
TRANSCRIBED_TO = 'transcribedTo'
#: A BEL relationship
#: :data:`RNA` to :data:`PROTEIN` is called translation
TRANSLATED_TO = 'translatedTo'
#: A BEL relationship
INCREASES = 'increases'
#: A BEL relationship
DIRECTLY_INCREASES = 'directlyIncreases'
#: A BEL relationship
DECREASES = 'decreases'
#: A BEL relationship
DIRECTLY_DECREASES = 'directlyDecreases'
#: A BEL relationship
CAUSES_NO_CHANGE = 'causesNoChange'
#: A BEL relationship
REGULATES = 'regulates'
#: A BEL relationship
BINDS = 'binds'
#: A BEL relationship
CORRELATION = 'correlation'
#: A BEL relationship
NO_CORRELATION = 'noCorrelation'
#: A BEL relationship
NEGATIVE_CORRELATION = 'negativeCorrelation'
#: A BEL relationship
POSITIVE_CORRELATION = 'positiveCorrelation'
#: A BEL relationship
ASSOCIATION = 'association'
#: A BEL relationship
ORTHOLOGOUS = 'orthologous'
#: A BEL relationship
ANALOGOUS_TO = 'analogousTo'
#: A BEL relationship
IS_A = 'isA'
#: A BEL relationship
RATE_LIMITING_STEP_OF = 'rateLimitingStepOf'
#: A BEL relationship
SUBPROCESS_OF = 'subProcessOf'
#: A BEL relationship
BIOMARKER_FOR = 'biomarkerFor'
#: A BEL relationship
PROGONSTIC_BIOMARKER_FOR = 'prognosticBiomarkerFor'
#: A BEL relationship, added by PyBEL
EQUIVALENT_TO = 'equivalentTo'
#: A BEL relationship, added by PyBEL
PART_OF = 'partOf'
#: A set of all causal relationships that have an increasing effect
CAUSAL_INCREASE_RELATIONS = {INCREASES, DIRECTLY_INCREASES}
#: A set of all causal relationships that have a decreasing effect
CAUSAL_DECREASE_RELATIONS = {DECREASES, DIRECTLY_DECREASES}
#: A set of direct causal relations
DIRECT_CAUSAL_RELATIONS = {DIRECTLY_DECREASES, DIRECTLY_INCREASES}
#: A set of direct causal relations
INDIRECT_CAUSAL_RELATIONS = {DECREASES, INCREASES, REGULATES}
#: A set of causal relationships that are polar
CAUSAL_POLAR_RELATIONS = CAUSAL_INCREASE_RELATIONS | CAUSAL_DECREASE_RELATIONS
#: A set of all causal relationships
CAUSAL_RELATIONS = CAUSAL_INCREASE_RELATIONS | CAUSAL_DECREASE_RELATIONS | {REGULATES}
APOLAR_CORRELATIVE_RELATIONS = {
CORRELATION,
NO_CORRELATION,
}
POLAR_CORRELATIVE_RELATIONS = {
POSITIVE_CORRELATION,
NEGATIVE_CORRELATION,
}
#: A set of all correlative relationships
CORRELATIVE_RELATIONS = APOLAR_CORRELATIVE_RELATIONS | POLAR_CORRELATIVE_RELATIONS
#: A set of polar relations
POLAR_RELATIONS = CAUSAL_POLAR_RELATIONS | POLAR_CORRELATIVE_RELATIONS
#: A set of all relationships that are inherently directionless, and are therefore added to the graph twice
TWO_WAY_RELATIONS = CORRELATIVE_RELATIONS | {
ASSOCIATION,
ORTHOLOGOUS,
ANALOGOUS_TO,
EQUIVALENT_TO,
BINDS,
}
#: A list of relationship types that don't require annotations or evidence
UNQUALIFIED_EDGES = {
HAS_REACTANT,
HAS_PRODUCT,
HAS_VARIANT,
TRANSCRIBED_TO,
TRANSLATED_TO,
IS_A,
EQUIVALENT_TO,
PART_OF,
ORTHOLOGOUS,
}
# BEL Keywords
BEL_KEYWORD_SET = 'SET'
BEL_KEYWORD_DOCUMENT = 'DOCUMENT'
BEL_KEYWORD_DEFINE = 'DEFINE'
BEL_KEYWORD_NAMESPACE = 'NAMESPACE'
BEL_KEYWORD_ANNOTATION = 'ANNOTATION'
BEL_KEYWORD_AS = 'AS'
BEL_KEYWORD_URL = 'URL'
BEL_KEYWORD_LIST = 'LIST'
BEL_KEYWORD_OWL = 'OWL'
BEL_KEYWORD_PATTERN = 'PATTERN'
BEL_KEYWORD_UNSET = 'UNSET'
BEL_KEYWORD_STATEMENT_GROUP = 'STATEMENT_GROUP'
BEL_KEYWORD_CITATION = 'Citation'
BEL_KEYWORD_EVIDENCE = 'Evidence'
BEL_KEYWORD_SUPPORT = 'SupportingText'
BEL_KEYWORD_ALL = 'ALL'
BEL_KEYWORD_METADATA_NAME = 'Name'
BEL_KEYWORD_METADATA_VERSION = 'Version'
BEL_KEYWORD_METADATA_DESCRIPTION = 'Description'
BEL_KEYWORD_METADATA_AUTHORS = 'Authors'
BEL_KEYWORD_METADATA_CONTACT = 'ContactInfo'
BEL_KEYWORD_METADATA_LICENSES = 'Licenses'
BEL_KEYWORD_METADATA_COPYRIGHT = 'Copyright'
BEL_KEYWORD_METADATA_DISCLAIMER = 'Disclaimer'
BEL_KEYWORD_METADATA_PROJECT = 'Project'
# Internal metadata representation. See BELGraph documentation, since these are shielded from the user by properties.
#: The key for the document metadata dictionary. Can be accessed by :code:`graph.graph[GRAPH_METADATA]`, or by using
#: the property built in to the :class:`pybel.BELGraph`, :func:`pybel.BELGraph.document`
GRAPH_METADATA = 'document_metadata'
GRAPH_NAMESPACE_URL = 'namespace_url'
GRAPH_NAMESPACE_PATTERN = 'namespace_pattern'
GRAPH_ANNOTATION_URL = 'annotation_url'
GRAPH_ANNOTATION_PATTERN = 'annotation_pattern'
GRAPH_ANNOTATION_LIST = 'annotation_list'
GRAPH_WARNINGS = 'warnings'
GRAPH_PYBEL_VERSION = 'pybel_version'
GRAPH_PATH = 'path'
#: The key for the document name. Can be accessed by :code:`graph.document[METADATA_NAME]` or by using the property
#: built into the :class:`pybel.BELGraph` class, :func:`pybel.BELGraph.name`
METADATA_NAME = 'name'
#: The key for the document version. Can be accessed by :code:`graph.document[METADATA_VERSION]`
METADATA_VERSION = 'version'
#: The key for the document description. Can be accessed by :code:`graph.document[METADATA_DESCRIPTION]`
METADATA_DESCRIPTION = 'description'
#: The key for the document authors. Can be accessed by :code:`graph.document[METADATA_NAME]`
METADATA_AUTHORS = 'authors'
#: The key for the document contact email. Can be accessed by :code:`graph.document[METADATA_CONTACT]`
METADATA_CONTACT = 'contact'
#: The key for the document licenses. Can be accessed by :code:`graph.document[METADATA_LICENSES]`
METADATA_LICENSES = 'licenses'
#: The key for the document copyright information. Can be accessed by :code:`graph.document[METADATA_COPYRIGHT]`
METADATA_COPYRIGHT = 'copyright'
#: The key for the document disclaimer. Can be accessed by :code:`graph.document[METADATA_DISCLAIMER]`
METADATA_DISCLAIMER = 'disclaimer'
#: The key for the document project. Can be accessed by :code:`graph.document[METADATA_PROJECT]`
METADATA_PROJECT = 'project'
#: Provides a mapping from BEL language keywords to internal PyBEL strings
DOCUMENT_KEYS = {
BEL_KEYWORD_METADATA_AUTHORS: METADATA_AUTHORS,
BEL_KEYWORD_METADATA_CONTACT: METADATA_CONTACT,
BEL_KEYWORD_METADATA_COPYRIGHT: METADATA_COPYRIGHT,
BEL_KEYWORD_METADATA_DESCRIPTION: METADATA_DESCRIPTION,
BEL_KEYWORD_METADATA_DISCLAIMER: METADATA_DISCLAIMER,
BEL_KEYWORD_METADATA_LICENSES: METADATA_LICENSES,
BEL_KEYWORD_METADATA_NAME: METADATA_NAME,
BEL_KEYWORD_METADATA_VERSION: METADATA_VERSION,
BEL_KEYWORD_METADATA_PROJECT: METADATA_PROJECT,
}
#: The keys to use when inserting a graph to the cache
METADATA_INSERT_KEYS = {
METADATA_NAME,
METADATA_VERSION,
METADATA_DESCRIPTION,
METADATA_AUTHORS,
METADATA_CONTACT,
METADATA_LICENSES,
METADATA_COPYRIGHT,
METADATA_DISCLAIMER,
}
#: Provides a mapping from internal PyBEL strings to BEL language keywords. Is the inverse of :data:`DOCUMENT_KEYS`
INVERSE_DOCUMENT_KEYS = {v: k for k, v in DOCUMENT_KEYS.items()}
#: A set representing the required metadata during BEL document parsing
REQUIRED_METADATA = {
METADATA_NAME,
METADATA_VERSION,
METADATA_DESCRIPTION,
METADATA_AUTHORS,
METADATA_CONTACT,
}
# Modifier parser constants
#: The key for the starting position of a fragment range
FRAGMENT_START = 'start'
#: The key for the stopping position of a fragment range
FRAGMENT_STOP = 'stop'
#: The key signifying that there is neither a start nor stop position defined
FRAGMENT_MISSING = 'missing'
#: The key for any additional descriptive data about a fragment
FRAGMENT_DESCRIPTION = 'description'
#: The order for serializing gene modification data
GMOD_ORDER = [KIND, IDENTIFIER]
#: The key for the reference nucleotide in a gene substitution.
#: Only used during parsing since this is converted to HGVS.
GSUB_REFERENCE = 'reference'
#: The key for the position of a gene substitution.
#: Only used during parsing since this is converted to HGVS
GSUB_POSITION = 'position'
#: The key for the effect of a gene substitution.
#: Only used during parsing since this is converted to HGVS
GSUB_VARIANT = 'variant'
#: The key for the protein modification code.
PMOD_CODE = 'code'
#: The key for the protein modification position.
PMOD_POSITION = 'pos'
#: The order for serializing information about a protein modification
PMOD_ORDER = [KIND, IDENTIFIER, PMOD_CODE, PMOD_POSITION]
#: The key for the reference amino acid in a protein substitution.
#: Only used during parsing since this is concerted to HGVS
PSUB_REFERENCE = 'reference'
#: The key for the position of a protein substitution. Only used during parsing since this is converted to HGVS.
PSUB_POSITION = 'position'
#: The key for the variant of a protein substitution.Only used during parsing since this is converted to HGVS.
PSUB_VARIANT = 'variant'
#: The key for the position at which a protein is truncated
TRUNCATION_POSITION = 'position'
#: The mapping from BEL namespace codes to PyBEL internal abundance constants
#: ..seealso:: https://wiki.openbel.org/display/BELNA/Assignment+of+Encoding+%28Allowed+Functions%29+for+BEL+Namespaces
belns_encodings = {
'G': {GENE},
'R': {RNA, MIRNA},
'P': {PROTEIN},
'M': {MIRNA},
'A': {ABUNDANCE, RNA, MIRNA, PROTEIN, GENE, COMPLEX},
'B': {PATHOLOGY, BIOPROCESS},
'O': {PATHOLOGY},
'C': {COMPLEX},
}
BELNS_ENCODING_STR = ''.join(sorted(belns_encodings))
PYBEL_REMOTE_HOST = 'PYBEL_REMOTE_HOST'
PYBEL_REMOTE_USER = 'PYBEL_REMOTE_USER'
PYBEL_REMOTE_PASSWORD = 'PYBEL_REMOTE_PASSWORD' # noqa: S105
#: The default location of PyBEL Web
DEFAULT_SERVICE_URL = 'https://bel-commons.scai.fraunhofer.de'
PYBEL_PUBMED = '29048466'
SET_CITATION_FMT = 'SET Citation = {{"{}", "{}"}}'