Add a function to recursively add IDs to a VRS object and every contained identifiable object
维护者通常 2 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- python
调研方向
首先阅读 ga4gh_identify()、vrs_enref() 和 vrs_deref() 入口点,并将它们的行为与 issue 中的示例进行比较。确定 recursive_identify 当前如何对它们进行补偿,然后将完成定义为:递归地向 VRS 对象及其中包含的可识别对象添加缺失的 ID,同时不更改正确的 ID。
由索引模型根据 Issue 内容生成。
描述
In AnyVar, we want to receive VRS objects, but they need IDs to be stored. We'd like some kind of function that will ensure IDs get added to received objects if they aren't there already. This needs to recurse down through any contained objects.
I had assumed this existed somewhere in VRS-Python, but I haven't found a working solution yet. Granted, this is a very simple problem, and I could just write something that manually checks if an object is an allele or a different type of object and handles each case, but I felt like there should be a better option, especially since we already have some functions that get close:
ga4gh_identify() returns the correct ID, but doesn't completely update the contained object
It'll add the outermost .id property if you set in_place="always", but not a contained object's ID
In [1]: from ga4gh.vrs import models, normalize; from ga4gh.core import ga4gh_identify; from ga4gh.vrs.enderef import vrs_deref, vrs_enref
In [2]: input_data = {"location": {"end": 87894077, "start": 87894076, "sequenceReference": { "refgetAccession": "SQ.ss8r_wB0-b9r44TQTMmVTI92884QvBiB", "type": "SequenceReference"},},"state": {"sequence": "T"}}
In [3]: allele1 = models.Allele(**input_data)
In [4]: ga4gh_identify(allele1, in_place="always")
Out[8]: 'ga4gh:VA.K7akyz9PHB0wg8wBNVlWAAdvMbJUJJfU'
In [5]: allele1.id
Out[5]: 'ga4gh:VA.K7akyz9PHB0wg8wBNVlWAAdvMbJUJJfU'
In [6]: allele1.location.id is None
Out[6]: True
vrs_enref()/vrs_deref() will update IDs in place, but they'll be wrong
This one seems bad. I mean, maybe I don't understand how these methods are supposed to work, but this is troubling. Regardless, this is not a solution for my problem.
In [7]: storage = {}
In [8]: enreffed = vrs_enref(models.Allele(**input_data), storage)
In [9]: dereffed = vrs_deref(enreffed, storage)
In [10]: dereffed.id
Out[11]: 'ga4gh:VA.UBp6cO0u3i286SZhHhfUo1uFft259YyC'
In [12]: dereffed.location.id
Out[12]: 'ga4gh:SL.01EH5o6V6VEyNUq68gpeTwKE7xOo-WAy'
Note -- that location ID is correct, as far as I can tell. I don't understand why the allele ID is wrong.
vrs_enref() -> vrs_deref() -> clear allele ID and digest -> ga4gh_identify() works, but this is way more complicated than it should be
This is what I put into AnyVar as a temporary measure
def recursive_identify(vrs_object: Type_VrsObject) -> Type_VrsObject:
"""Add GA4GH IDs to an object and all GA4GH-identifiable objects contained within.
:param vrs_object: AnyVar-supported variation object
:return: same object, with any missing ID fields filled in
"""
storage = {}
enreffed = vrs_enref(vrs_object, storage)
dereffed = vrs_deref(enreffed, storage)
dereffed.id = None # type: ignore[reportAttributeAccessIssue]
dereffed.digest = None # type: ignore[reportAttributeAccessIssue]
ga4gh_identify(dereffed, in_place="always")
return dereffed # type: ignore[reportReturnType]
I cannot imagine this is the best possible solution to this problem, or that I'm the only person who's ever needed something like this before. I think it'd be nice to either update behavior of the existing functions or add something new that does this efficiently.
- 主要语言
- Python
- 星标
- 64
- 派生
- 45
- 平均合并
- 4 天 4 小时
- 30 天内合并 PR
- 8
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
ga4gh/vrs-python 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
ga4gh/vrs-python#540 · 8 条评论 ·
维护者通常 2 天内回复
-
难度 4/5 3-5 天 新手友好度 45/100
ga4gh/vrs-python#673 ·
维护者通常 2 天内回复
-
Merge `vrs/2.1` into `v3`可能已有人在做 @korikuzma 于 2 天前认领。 未关闭v3
ga4gh/vrs-python#672 · 已指派 1 人 ·
维护者通常 2 天内回复
-
难度 4/5 3-5 天 新手友好度 42/100
ga4gh/vrs-python#669 ·
维护者通常 2 天内回复
-
test(ci): dont make live network requests可能已有人在做 @theferrit32 于 16 天前认领。 未关闭
难度 3/5 1-2 天 新手友好度 45/100
ga4gh/vrs-python#659 · 1 条评论 · 1 个 reaction · 已指派 1 人 ·
维护者通常 2 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 66/100
-
[Bug]: Queen's own Ollama model loses num_ctx when a running session switches to it可能已有人在做 @anasamin26 今天认领。 未关闭bug enhancement
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
llm translation
难度 2/5 1-3 小时 新手友好度 78/100
BerriAI/litellm#47884 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
bug 🐛
难度 2/5 1-3 小时 新手友好度 72/100
netalertx/NetAlertX#1856 · 1 个 reaction ·
维护者通常 1 天内回复