跳转到主要内容

翻译者知识图谱验证 - TRAPI,Biolink模型和单跳导航

项目描述

图验证测试

Pyversions Publish Python Package License: MIT Run tests

此存储库提供了在新的2023测试基础设施中实现翻译者知识图谱验证测试运行器的实现。当前包目前包含两个这样的测试运行器

  • StandardsValidationTest:翻译器reasoner-validator包的包装器,它确保知识图谱数据访问符合TRAPI规范,图语义内容符合Biolink模型规范。
  • OneHopTest: 是从遗留的 SRI_Testing 测试框架 中提取的 "One Hop" 知识图谱导航单元测试代码的简化版本,该代码验证在翻译家知识图谱上进行的单跳 TRAPI 查询是否符合基本预期,即输出中恢复输入测试边数据,使用多种不同的模板化 TRAPI 查询。与 SR_Testing 不同,OneHopTest 模块直接从新的 NCATS Translator Tests 仓库获取测试数据。

从编程角度看,每种测试的命令行或程序参数是相同的,但底层测试用例(源自源测试资产)是相同的。

用法

可以直接从命令行或通过 Python 脚本以编程方式运行 StandardsValidationTestOneHopTest 测试执行器。

安装

可以从 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 版本)

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

graph_validation_tests-0.0.11.tar.gz (491.5 kB 查看哈希值)

上传时间 源代码

构建分发

graph_validation_tests-0.0.11-py3-none-any.whl (40.0 kB 查看哈希值)

上传时间 Python 3

支持