翻译者知识图谱验证 - TRAPI,Biolink模型和单跳导航
项目描述
图验证测试
此存储库提供了在新的2023测试基础设施中实现翻译者知识图谱验证测试运行器的实现。当前包目前包含两个这样的测试运行器
- StandardsValidationTest:是翻译器reasoner-validator包的包装器,它确保知识图谱数据访问符合TRAPI规范,图语义内容符合Biolink模型规范。
- OneHopTest: 是从遗留的 SRI_Testing 测试框架 中提取的 "One Hop" 知识图谱导航单元测试代码的简化版本,该代码验证在翻译家知识图谱上进行的单跳 TRAPI 查询是否符合基本预期,即输出中恢复输入测试边数据,使用多种不同的模板化 TRAPI 查询。与 SR_Testing 不同,OneHopTest 模块直接从新的 NCATS Translator Tests 仓库获取测试数据。
从编程角度看,每种测试的命令行或程序参数是相同的,但底层测试用例(源自源测试资产)是相同的。
用法
可以直接从命令行或通过 Python 脚本以编程方式运行 StandardsValidationTest 和 OneHopTest 测试执行器。
安装
可以从 PyPI 安装 graph-validation-tests 模块,并将其作为翻译家全局自动化测试的一部分使用。
注意:需要 3.9 <= Python 版本 <= 3.12
从 Pypi
在您的目标工作目录内
- 创建一个 Python 虚拟环境:
python -m venv venv
- 激活您的环境:
. ./venv/bin/activate
- 安装依赖项:
pip install graph-validation-tests
从 GitHub
您还可以从 GitHub 检出项目。如果您这样做,安装过程将略有不同,因为该项目本身使用 Poetry 进行依赖项管理 - 以下说明假定您已在系统上 安装了 Poetry。
- 检出代码:
git checkout https://github.com/TranslatorSRI/graph-validation-tests.git
- 创建一个 Poetry shell:
poetry shell
- 安装依赖项:
poetry install
命令行界面
在命令行终端中输入
$ standards_validation_test --help
或
$ one_hop_test --help
应提供以下用法说明(其中是 'standards_validation_test' 或 'one_hop_test')
usage: <tool name> [-h] [--components COMPONENTS] [--environment {dev,ci,test,prod}] --subject_id SUBJECT_ID --predicate_id PREDICATE_ID
--object_id OBJECT_ID [--trapi_version TRAPI_VERSION] [--biolink_version BIOLINK_VERSION]
[--log_level {ERROR,WARNING,INFO,DEBUG}]
Translator TRAPI and Biolink Model Validation of Knowledge Graphs
options:
-h, --help show this help message and exit
--components COMPONENTS
Names Translator components to be tested taken from the Translator Testing Model 'ComponentEnum'
(may be a comma separated string of such names; default: run the test against the 'ars')
--environment {dev,ci,test,prod}
Translator execution environment of the Translator Component targeted for testing.
--subject_id SUBJECT_ID
Statement object concept CURIE
--predicate_id PREDICATE_ID
Statement Biolink Predicate identifier
--object_id OBJECT_ID
Statement object concept CURIE
--trapi_version TRAPI_VERSION
TRAPI version expected for knowledge graph access (default: use current default release)
--biolink_version BIOLINK_VERSION
Biolink Model version expected for knowledge graph access (default: use current default release)
程序级执行
标准验证测试
运行 TRAPI 和 Biolink Model 验证测试,验证知识图谱 TRAPI 组件的查询输出
from typing import Dict
import asyncio
from translator_testing_model.datamodel.pydanticmodel import ComponentEnum
from standards_validation_test import run_standards_validation_tests
test_data = {
# One test edge (asset)
"subject_id": "DRUGBANK:DB01592",
"subject_category": "biolink:SmallMolecule",
"predicate_id": "biolink:has_side_effect",
"object_id": "MONDO:0011426",
"object_category": "biolink:Disease",
"components": [
ComponentEnum("arax"),
ComponentEnum("molepro")
]
# "environment": environment, # Optional[TestEnvEnum] = None; default: 'TestEnvEnum.ci' if not given
# "trapi_version": trapi_version, # Optional[str] = None; latest community release if not given
# "biolink_version": biolink_version, # Optional[str] = None; current Biolink Toolkit default if not given
# "runner_settings": asset.test_runner_settings, # Optional[List[str]] = None
}
results: Dict = asyncio.run(run_standards_validation_tests(**test_data))
print(results)
OneHopTest
运行 "One Hop" 知识图谱导航测试,验证知识图谱 TRAPI 组件的查询输出
from typing import Dict
import asyncio
from translator_testing_model.datamodel.pydanticmodel import ComponentEnum
from one_hop_test import run_one_hop_tests
test_data = {
# One test edge (asset)
"subject_id": "DRUGBANK:DB01592",
"subject_category": "biolink:SmallMolecule",
"predicate_id": "biolink:has_side_effect",
"object_id": "MONDO:0011426",
"object_category": "biolink:Disease",
"components": [
ComponentEnum("arax"),
ComponentEnum("molepro")
]
#
# "environment": environment, # Optional[TestEnvEnum] = None; default: 'TestEnvEnum.ci' if not given
# "trapi_version": trapi_version, # Optional[str] = None; latest community release if not given
# "biolink_version": biolink_version, # Optional[str] = None; current Biolink Toolkit default if not given
# "runner_settings": asset.test_runner_settings, # Optional[List[str]] = None
}
results: Dict = asyncio.run(run_one_hop_tests(**test_data))
print(results)
上述包装方法将运行从指定的测试资产(即 subject_id 等)派生的所有相关 TestCases,而不需要任何特殊测试参数。如果需要更精细的测试,可以直接运行底层 TRAPI 查询的子集,例如这样(这里我们忽略了 'by_subject'、'inverse_by_new_subject' 和 'by_object' 这三个 TestCases,并将 'strict_validation' 参数设置为 True 以进行 Biolink Model 验证,这是由后台运行的 reasoner-validator 代码理解的)
from typing import Dict
import asyncio
from standards_validation_test import StandardsValidationTest
from translator_testing_model.datamodel.pydanticmodel import TestEnvEnum, ComponentEnum
from graph_validation_test.utils.unit_test_templates import (
# by_subject,
# inverse_by_new_subject,
# by_object,
raise_subject_entity,
raise_object_entity,
raise_object_by_subject,
raise_predicate_by_subject
)
test_data = {
# One test edge (asset)
"subject_id": "DRUGBANK:DB01592",
"subject_category": "biolink:SmallMolecule",
"predicate_id": "biolink:has_side_effect",
"object_id": "MONDO:0011426",
"object_category": "biolink:Disease",
"components": [
ComponentEnum("arax"),
ComponentEnum("molepro")
],
"environment": TestEnvEnum.test,
"trapi_version": "1.5.0-beta",
"biolink_version": "4.1.6",
"runner_settings": "Inferred"
}
trapi_generators = [
# by_subject,
# inverse_by_new_subject,
# by_object,
raise_subject_entity,
raise_object_entity,
raise_object_by_subject,
raise_predicate_by_subject
]
# A test runner specific parameter passed through
kwargs = {
"strict_validation": True
}
results: Dict = asyncio.run(StandardsValidationTest.run_tests(
**test_data, trapi_generators=trapi_generators, **kwargs)
)
请注意,trapi_generation 变量 - 定义在 graph_validation_test.utils.unit_test_templates 模块中 - 都是简单的 Python 函数,返回发送到目标组件的 TRAPI JSON 消息。原则上,如果您理解这些函数的作用,可以编写自己的方法来执行其他类型的 TRAPI 查询,然后可以针对指定的 TRAPI 和 Biolink Model 版本验证其输出。
示例输出
这是测试运行当前 JSON 输出的一个示例(此示例来自 OneHopTest 运行)。
{
"pks": {
"molepro": "molepro"
},
"results": {
"TestAsset_1-by_subject": {
"molepro": {
"status": "FAILED",
"messages": {
"error": {
"error.trapi.response.knowledge_graph.missing_expected_edge": {
"global": {
"TestAsset_1|(CHEBI:58579#biolink:SmallMolecule)-[biolink:is_active_metabolite_of]->(UniProtKB:Q9NQ88#biolink:Protein)": null
}
}
}
}
}
},
"TestAsset_1-inverse_by_new_subject": {
"molepro": {
"status": "FAILED",
"messages": {
"critical": {
"critical.trapi.request.invalid": {
"global": {
"predicate 'biolink:is_active_metabolite_of'": [
{
"context": "inverse_by_new_subject",
"reason": "is an unknown or has no inverse?"
}
]
}
}
}
}
}
},
# etc...
}
发布
提供了一个完整的更改日志 CHANGELOG.md,记录了每个发布的内容,但我们在这里总结了关键发布限制。
v0.0.* 发布
- 此初始代码发布仅支持测试 Translator SmartAPI 注册 的组件,这些组件是翻译家自主中继代理(ARA)和知识提供者(KP)的 TRAPI 实现,但 不 直接测试翻译家自主中继系统(ARS)或翻译家用户界面(UI)
- 标准验证测试目前调用 reasoner-validator 的第 4.0.0 版本,该版本目前仅限于 TRAPI 1.4.2 版本的验证(尚未涵盖最近的 TRAPI 1.5.0 版本)
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
哈希值 for graph_validation_tests-0.0.11-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a65157fce85ad745e27ad811f559909b4a65214b20b59d5769911a12af4ca468 |
|
MD5 | fe52afc21b64c4292e86724a7e1b1aee |
|
BLAKE2b-256 | 4f67a5d4bd0e7a2b8631767ace05e9e11f28390f6900ad7f675b3fac432fd420 |