From 4ba96f28b30a50fb7bdeb99724144cc67233241e Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Thu, 18 Dec 2025 14:26:55 -0500 Subject: [PATCH 1/9] wip: add conceptset --- src/ga4gh/core/models.py | 43 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/ga4gh/core/models.py b/src/ga4gh/core/models.py index 55b40a02..0cb4ce0a 100644 --- a/src/ga4gh/core/models.py +++ b/src/ga4gh/core/models.py @@ -3,8 +3,8 @@ from __future__ import annotations from abc import ABC -from enum import Enum -from typing import Annotated, Any +from enum import StrEnum +from typing import Annotated, Any, Literal from pydantic import ( BaseModel, @@ -25,7 +25,7 @@ class BaseModelForbidExtra(BaseModel): model_config = ConfigDict(extra="forbid") -class Relation(str, Enum): +class Relation(StrEnum): """A mapping relation between concepts as defined by the Simple Knowledge Organization System (SKOS). """ @@ -37,6 +37,20 @@ class Relation(str, Enum): RELATED_MATCH = "relatedMatch" +class MembershipOperator(StrEnum): + """The logical relationship between concepts in the set, in the context of some + knowledge reported about them. The value 'AND' indicates that the concepts are + dependent and occur together in this context - i.e. the reported assertion is not + necessarily true for each concept on its own - only in combination with the + other(s). The value 'OR' indicates that each concept applies independently in this + context - i.e. the reported assertion is necessarily true for each concept on its + own, independent of the presence of the other(s). + """ + + AND = "AND" + OR = "OR" + + ######################################### # Primitive data types ######################################### @@ -175,6 +189,29 @@ class ConceptMapping(Element, BaseModelForbidExtra): ) +class ConceptSet(Element, BaseModelForbidExtra): + """A set of concepts that may be considered as dependent (occurring together), or + independent (existing separately) in the context of some knowledge reported about + them, as indicated by a set membership operator. e.g. a set of independent molecular + consequences that both result from the presence of a particular genetic variant + (membership operator = OR). + """ + + type: Literal["ConceptSet"] = Field( + default="ConceptSet", + description='MUST be "ConceptSet"', + ) + concepts: list[MappableConcept] | list[ConceptSet] = Field( + ..., + description="A list of concepts that are dependent (occurring together), or independent (existing separately), depending on the", + min_length=2, + ) + membershipOperator: MembershipOperator = Field( # noqa: N815 + ..., + description="The logical relationship between concepts in the set, in the context of some knowledge reported about them. The value 'AND' indicates that the concepts are dependent and occur together in this context - i.e. the reported assertion is not necessarily true for each concept on its own - only in combination with the other(s). The value 'OR' indicates that each concept applies independently in this context - i.e. the reported assertion is necessarily true for each concept on its own, independent of the presence of the other(s).", + ) + + class Extension(Element, BaseModelForbidExtra): """The Extension class provides entities with a means to include additional attributes that are outside of the specified standard but needed by a given content From 30fd25d66f65bfc613191792534d9d4c1dd0a679 Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Wed, 7 Jan 2026 13:47:05 -0500 Subject: [PATCH 2/9] wip: add intron changes --- .gitmodules | 2 +- src/ga4gh/vrs/models.py | 122 +++++++++++++++++++++++++++++++++++++++- submodules/vrs | 2 +- 3 files changed, 122 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6ee1c44a..9d7f5bb6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "submodules/vrs"] path = submodules/vrs url = https://github.com/ga4gh/vrs.git - branch = 2.0 + branch = v2 diff --git a/src/ga4gh/vrs/models.py b/src/ga4gh/vrs/models.py index 8fffd053..1279d373 100644 --- a/src/ga4gh/vrs/models.py +++ b/src/ga4gh/vrs/models.py @@ -161,7 +161,10 @@ class VrsType(str, Enum): LIT_SEQ_EXPR = "LiteralSequenceExpression" SEQ_REF = "SequenceReference" SEQ_LOC = "SequenceLocation" + SEQ_OFFSET_LOCATION = "SequenceOffsetLocation" + RELATIVE_SEQ_LOC = "RelativeSequenceLocation" ALLELE = "Allele" + RELATIVE_ALLELE = "RelativeAllele" CIS_PHASED_BLOCK = "CisPhasedBlock" ADJACENCY = "Adjacency" TERMINUS = "Terminus" @@ -229,6 +232,21 @@ class Syntax(str, Enum): SPDI = "spdi" +class AnchorOrientation(str, Enum): + """Indicates which side of a discontinuous anchor on the sequenceReference is used + as the reference point for interpreting offsetStart/offsetEnd. The anchor is an + inter-residue coordinate on the sequenceReference. When that anchor corresponds to a + boundary whose realization on a base sequence yields two distinct locations (e.g., + an exon junction), this property disambiguates which anchor side on the + sequenceReference is intended. `left` denotes the side immediately preceding the + anchor in sequenceReference coordinate order; `right` denotes the side immediately + following the anchor in sequenceReference coordinate order. + """ + + LEFT = "left" + RIGHT = "right" + + def _recurse_ga4gh_serialize(obj): if isinstance(obj, Ga4ghIdentifiableObject): return obj.get_or_create_digest() @@ -656,6 +674,70 @@ class ga4gh(Ga4ghIdentifiableObject.ga4gh): # noqa: N801 inherent = ["end", "sequenceReference", "start", "type"] +class SequenceOffsetLocation(_ValueObject, BaseModelForbidExtra): + """A location defined by an offset relative to an anchor on a mapped sequence + reference. + """ + + type: Literal["SequenceOffsetLocation"] = Field( + default=VrsType.SEQ_OFFSET_LOCATION.value, + description=f'MUST be "{VrsType.SEQ_OFFSET_LOCATION.value}"', + ) + sequenceReference: SequenceReference | iriReference | None = Field( + default=None, + description="A sequence reference that has been mapped from which a relative location is defined.", + ) + anchor: int | None = Field( + default=None, + description="The position on the sequence reference from which the relative location offset is calculated.", + ) + anchorOrientation: AnchorOrientation | None = Field( + default=None, + description="Indicates which side of a discontinuous anchor on the sequenceReference is used as the reference point for interpreting offsetStart/offsetEnd. The anchor is an inter-residue coordinate on the sequenceReference. When that anchor corresponds to a boundary whose realization on a base sequence yields two distinct locations (e.g., an exon junction), this property disambiguates which anchor side on the sequenceReference is intended. `left` denotes the side immediately preceding the anchor in sequenceReference coordinate order; `right` denotes the side immediately following the anchor in sequenceReference coordinate order.", + ) + offsetStart: int | Range | None = Field( + default=None, + description="The start offset, in inter-residue coordinates, from the anchor realization selected by anchorOrientation on the sequenceReference.", + ) + offsetEnd: int | Range | None = Field( + default=None, + description="The end offset, in inter-residue coordinates, from the anchor realization selected by anchorOrientation on the sequenceReference.", + ) + + class ga4gh(_ValueObject.ga4gh): + inherent = [ + "sequenceReference", + "anchor", + "anchorOrientation", + "offsetStart", + "offsetEnd", + "type", + ] + + +class RelativeSequenceLocation(Ga4ghIdentifiableObject, BaseModelForbidExtra): + """A location on a base sequence and its position relative to a boundary offset on a + mapped sequence gap. Typically used to describe intronic locations that exist with + respect to a mapped RNA transcript sequence. + """ + + type: Literal["RelativeSequenceLocation"] = Field( + default=VrsType.RELATIVE_SEQ_LOC.value, + description=f'MUST be "{VrsType.RELATIVE_SEQ_LOC.value}"', + ) + baseSequenceLocation: SequenceLocation | iriReference | None = Field( + default=None, description="An absolute location on a sequence." + ) + mappedSequenceLocation: SequenceOffsetLocation | iriReference | None = Field( + default=None, + description="A location relative to an offset on a mapped sequence.", + ) + + class ga4gh(Ga4ghIdentifiableObject.ga4gh): + prefix = "RSL" + inherent = ["baseSequenceLocation", "mappedSequenceLocation", "type"] + + ######################################### # base variation ######################################### @@ -716,6 +798,35 @@ class ga4gh(Ga4ghIdentifiableObject.ga4gh): # noqa: N801 inherent = ["location", "state", "type"] +class RelativeAllele(_VariationBase, BaseModelForbidExtra): + """An Allele defined on a mapped location relative to a base location. Often used to describe intronic variants.""" + + type: Literal["RelativeAllele"] = Field( + default=VrsType.RELATIVE_ALLELE.value, + description=f'MUST be "{VrsType.RELATIVE_ALLELE.value}"', + ) + relativeState: ( + LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression | None + ) = Field( + default=None, + description='The state of the RelativeAllele as expressed on the mapped sequence. This will differ from the base state when mapping to a reverse complement sequence, commonly observed when representing the state on transcripts mapped to the "negative strand" of a chromosome.', + ) + baseState: ( + LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression | None + ) = Field( + default=None, + description="The state of the RelativeAllele as expressed on the base sequence.", + ) + relativeLocation: RelativeSequenceLocation | iriReference | None = Field( + default=None, + description="The relative location at which the baseState and relativeState are expressed.", + ) + + class ga4gh(Ga4ghIdentifiableObject.ga4gh): + prefix = "RA" + inherent = ["relativeState", "baseState", "relativeLocation", "type"] + + class CisPhasedBlock(_VariationBase, BaseModelForbidExtra): """An ordered set of co-occurring `Variation` on the same molecule.""" @@ -921,7 +1032,14 @@ class ga4gh(Ga4ghIdentifiableObject.ga4gh): class MolecularVariation(RootModel): """A `variation` on a contiguous molecule.""" - root: Allele | CisPhasedBlock | Adjacency | Terminus | DerivativeMolecule = Field( + root: ( + Allele + | RelativeAllele + | CisPhasedBlock + | Adjacency + | Terminus + | DerivativeMolecule + ) = Field( ..., json_schema_extra={"description": "A `variation` on a contiguous molecule."}, discriminator="type", @@ -943,7 +1061,7 @@ class SequenceExpression(RootModel): class Location(RootModel): """A contiguous segment of a biological sequence.""" - root: SequenceLocation = Field( + root: SequenceLocation | RelativeSequenceLocation = Field( ..., json_schema_extra={ "description": "A contiguous segment of a biological sequence." diff --git a/submodules/vrs b/submodules/vrs index d2e87dd8..69235abc 160000 --- a/submodules/vrs +++ b/submodules/vrs @@ -1 +1 @@ -Subproject commit d2e87dd878a9a344c1910105c5acf5bdf8087af4 +Subproject commit 69235abc91a7305ce138344865023a3329fac121 From 438c1e175036183e15754fe31b1dae2263d312de Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Wed, 7 Jan 2026 13:48:16 -0500 Subject: [PATCH 3/9] revert str enum --- src/ga4gh/core/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ga4gh/core/models.py b/src/ga4gh/core/models.py index 0cb4ce0a..91418cf3 100644 --- a/src/ga4gh/core/models.py +++ b/src/ga4gh/core/models.py @@ -3,7 +3,7 @@ from __future__ import annotations from abc import ABC -from enum import StrEnum +from enum import Enum from typing import Annotated, Any, Literal from pydantic import ( @@ -25,7 +25,7 @@ class BaseModelForbidExtra(BaseModel): model_config = ConfigDict(extra="forbid") -class Relation(StrEnum): +class Relation(str, Enum): """A mapping relation between concepts as defined by the Simple Knowledge Organization System (SKOS). """ @@ -37,7 +37,7 @@ class Relation(StrEnum): RELATED_MATCH = "relatedMatch" -class MembershipOperator(StrEnum): +class MembershipOperator(str, Enum): """The logical relationship between concepts in the set, in the context of some knowledge reported about them. The value 'AND' indicates that the concepts are dependent and occur together in this context - i.e. the reported assertion is not From 494cabfadab4594dc2209d1abde5f4976505c46f Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Wed, 7 Jan 2026 13:56:31 -0500 Subject: [PATCH 4/9] add period --- src/ga4gh/core/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ga4gh/core/models.py b/src/ga4gh/core/models.py index 91418cf3..db924a2c 100644 --- a/src/ga4gh/core/models.py +++ b/src/ga4gh/core/models.py @@ -199,7 +199,7 @@ class ConceptSet(Element, BaseModelForbidExtra): type: Literal["ConceptSet"] = Field( default="ConceptSet", - description='MUST be "ConceptSet"', + description='MUST be "ConceptSet".', ) concepts: list[MappableConcept] | list[ConceptSet] = Field( ..., From 2fdf5a020ec695086b8e5277c6b0ec25224aea6f Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Thu, 8 Jan 2026 08:08:49 -0500 Subject: [PATCH 5/9] fix tests + add required fields --- .gitmodules | 2 +- src/ga4gh/core/models.py | 2 +- src/ga4gh/vrs/models.py | 32 ++++++++++++++++---------------- tests/test_vrs.py | 2 ++ 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/.gitmodules b/.gitmodules index 9d7f5bb6..e8cff9e9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "submodules/vrs"] path = submodules/vrs url = https://github.com/ga4gh/vrs.git - branch = v2 + branch = v2-add-intronic-positions-tests diff --git a/src/ga4gh/core/models.py b/src/ga4gh/core/models.py index db924a2c..1009d13f 100644 --- a/src/ga4gh/core/models.py +++ b/src/ga4gh/core/models.py @@ -203,7 +203,7 @@ class ConceptSet(Element, BaseModelForbidExtra): ) concepts: list[MappableConcept] | list[ConceptSet] = Field( ..., - description="A list of concepts that are dependent (occurring together), or independent (existing separately), depending on the", + description="A list of concepts that are dependent (occurring together), or independent (existing separately), depending on the membership operator.", min_length=2, ) membershipOperator: MembershipOperator = Field( # noqa: N815 diff --git a/src/ga4gh/vrs/models.py b/src/ga4gh/vrs/models.py index 1279d373..258d27af 100644 --- a/src/ga4gh/vrs/models.py +++ b/src/ga4gh/vrs/models.py @@ -683,16 +683,16 @@ class SequenceOffsetLocation(_ValueObject, BaseModelForbidExtra): default=VrsType.SEQ_OFFSET_LOCATION.value, description=f'MUST be "{VrsType.SEQ_OFFSET_LOCATION.value}"', ) - sequenceReference: SequenceReference | iriReference | None = Field( - default=None, + sequenceReference: SequenceReference | iriReference = Field( + ..., description="A sequence reference that has been mapped from which a relative location is defined.", ) - anchor: int | None = Field( - default=None, + anchor: int = Field( + ..., description="The position on the sequence reference from which the relative location offset is calculated.", ) - anchorOrientation: AnchorOrientation | None = Field( - default=None, + anchorOrientation: AnchorOrientation = Field( + ..., description="Indicates which side of a discontinuous anchor on the sequenceReference is used as the reference point for interpreting offsetStart/offsetEnd. The anchor is an inter-residue coordinate on the sequenceReference. When that anchor corresponds to a boundary whose realization on a base sequence yields two distinct locations (e.g., an exon junction), this property disambiguates which anchor side on the sequenceReference is intended. `left` denotes the side immediately preceding the anchor in sequenceReference coordinate order; `right` denotes the side immediately following the anchor in sequenceReference coordinate order.", ) offsetStart: int | Range | None = Field( @@ -725,11 +725,11 @@ class RelativeSequenceLocation(Ga4ghIdentifiableObject, BaseModelForbidExtra): default=VrsType.RELATIVE_SEQ_LOC.value, description=f'MUST be "{VrsType.RELATIVE_SEQ_LOC.value}"', ) - baseSequenceLocation: SequenceLocation | iriReference | None = Field( - default=None, description="An absolute location on a sequence." + baseSequenceLocation: SequenceLocation | iriReference = Field( + ..., description="An absolute location on a sequence." ) - mappedSequenceLocation: SequenceOffsetLocation | iriReference | None = Field( - default=None, + mappedSequenceLocation: SequenceOffsetLocation | iriReference = Field( + ..., description="A location relative to an offset on a mapped sequence.", ) @@ -806,19 +806,19 @@ class RelativeAllele(_VariationBase, BaseModelForbidExtra): description=f'MUST be "{VrsType.RELATIVE_ALLELE.value}"', ) relativeState: ( - LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression | None + LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression ) = Field( - default=None, + ..., description='The state of the RelativeAllele as expressed on the mapped sequence. This will differ from the base state when mapping to a reverse complement sequence, commonly observed when representing the state on transcripts mapped to the "negative strand" of a chromosome.', ) baseState: ( - LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression | None + LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression ) = Field( - default=None, + ..., description="The state of the RelativeAllele as expressed on the base sequence.", ) - relativeLocation: RelativeSequenceLocation | iriReference | None = Field( - default=None, + relativeLocation: RelativeSequenceLocation | iriReference = Field( + ..., description="The relative location at which the baseState and relativeState are expressed.", ) diff --git a/tests/test_vrs.py b/tests/test_vrs.py index 975854ab..47e372e0 100644 --- a/tests/test_vrs.py +++ b/tests/test_vrs.py @@ -284,6 +284,8 @@ def test_enref2(): def test_class_refatt_map(): class_refatt_map_expected = { "Allele": ["location"], + "RelativeAllele": ["relativeLocation"], + "RelativeSequenceLocation": ["baseSequenceLocation"], "CisPhasedBlock": ["members"], "CopyNumberCount": ["location"], "CopyNumberChange": ["location"], From 95c2a15dff0cf8421db1b33117ec1eb840b23309 Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Mon, 2 Feb 2026 07:32:14 -0500 Subject: [PATCH 6/9] update submodules --- src/ga4gh/vrs/models.py | 6 +++--- submodules/vrs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ga4gh/vrs/models.py b/src/ga4gh/vrs/models.py index 258d27af..185feda7 100644 --- a/src/ga4gh/vrs/models.py +++ b/src/ga4gh/vrs/models.py @@ -805,7 +805,7 @@ class RelativeAllele(_VariationBase, BaseModelForbidExtra): default=VrsType.RELATIVE_ALLELE.value, description=f'MUST be "{VrsType.RELATIVE_ALLELE.value}"', ) - relativeState: ( + mappedState: ( LiteralSequenceExpression | ReferenceLengthExpression | LengthExpression ) = Field( ..., @@ -819,12 +819,12 @@ class RelativeAllele(_VariationBase, BaseModelForbidExtra): ) relativeLocation: RelativeSequenceLocation | iriReference = Field( ..., - description="The relative location at which the baseState and relativeState are expressed.", + description="The relative location at which the baseState and mappedState are expressed.", ) class ga4gh(Ga4ghIdentifiableObject.ga4gh): prefix = "RA" - inherent = ["relativeState", "baseState", "relativeLocation", "type"] + inherent = ["mappedState", "baseState", "relativeLocation", "type"] class CisPhasedBlock(_VariationBase, BaseModelForbidExtra): diff --git a/submodules/vrs b/submodules/vrs index 69235abc..2b03903f 160000 --- a/submodules/vrs +++ b/submodules/vrs @@ -1 +1 @@ -Subproject commit 69235abc91a7305ce138344865023a3329fac121 +Subproject commit 2b03903f8ce125722942fa841f6ca18134d1df96 From a470841cbfee340a26d88c5fa305840f3b820154 Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Thu, 12 Feb 2026 18:24:13 -0500 Subject: [PATCH 7/9] update submodules --- .gitmodules | 2 +- submodules/vrs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index e8cff9e9..a7b8c08e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "submodules/vrs"] path = submodules/vrs url = https://github.com/ga4gh/vrs.git - branch = v2-add-intronic-positions-tests + branch = 2.1.0-snapshot.2026-02 diff --git a/submodules/vrs b/submodules/vrs index 2b03903f..06726d38 160000 --- a/submodules/vrs +++ b/submodules/vrs @@ -1 +1 @@ -Subproject commit 2b03903f8ce125722942fa841f6ca18134d1df96 +Subproject commit 06726d383d177ee62604fb71aaf1655eb9fdf943 From 27d3c21fccf96e239ba1b584ead51247b0484ecc Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Thu, 12 Feb 2026 19:16:51 -0500 Subject: [PATCH 8/9] update submodule to 2.1.0-snapshot.2026-02.2 --- src/ga4gh/vrs/models.py | 4 ++-- submodules/vrs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ga4gh/vrs/models.py b/src/ga4gh/vrs/models.py index 185feda7..c78a37a4 100644 --- a/src/ga4gh/vrs/models.py +++ b/src/ga4gh/vrs/models.py @@ -521,7 +521,7 @@ class ReferenceLengthExpression(_ValueObject, BaseModelForbidExtra): ) sequence: sequenceString | None = Field( default=None, - description="the literal Sequence encoded by the Reference Length Expression.", + description="the literal sequence encoded by the Reference Length Expression.", ) repeatSubunitLength: int = Field( ..., description="The number of residues in the repeat subunit." @@ -689,7 +689,7 @@ class SequenceOffsetLocation(_ValueObject, BaseModelForbidExtra): ) anchor: int = Field( ..., - description="The position on the sequence reference from which the relative location offset is calculated.", + description="The inter-residue position on the sequence reference from which the relative location offset is calculated.", ) anchorOrientation: AnchorOrientation = Field( ..., diff --git a/submodules/vrs b/submodules/vrs index 06726d38..83791ac4 160000 --- a/submodules/vrs +++ b/submodules/vrs @@ -1 +1 @@ -Subproject commit 06726d383d177ee62604fb71aaf1655eb9fdf943 +Subproject commit 83791ac4294a59ce48400eb66c34af86a12a3704 From daa1c876a377f77fc759763084306cc911188c1a Mon Sep 17 00:00:00 2001 From: Kori Kuzma Date: Fri, 13 Feb 2026 07:24:02 -0500 Subject: [PATCH 9/9] use enum values --- src/ga4gh/core/models.py | 2 ++ src/ga4gh/vrs/models.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/ga4gh/core/models.py b/src/ga4gh/core/models.py index 1009d13f..307bddcf 100644 --- a/src/ga4gh/core/models.py +++ b/src/ga4gh/core/models.py @@ -197,6 +197,8 @@ class ConceptSet(Element, BaseModelForbidExtra): (membership operator = OR). """ + model_config = ConfigDict(use_enum_values=True) + type: Literal["ConceptSet"] = Field( default="ConceptSet", description='MUST be "ConceptSet".', diff --git a/src/ga4gh/vrs/models.py b/src/ga4gh/vrs/models.py index c78a37a4..11434869 100644 --- a/src/ga4gh/vrs/models.py +++ b/src/ga4gh/vrs/models.py @@ -679,6 +679,8 @@ class SequenceOffsetLocation(_ValueObject, BaseModelForbidExtra): reference. """ + model_config = ConfigDict(use_enum_values=True) + type: Literal["SequenceOffsetLocation"] = Field( default=VrsType.SEQ_OFFSET_LOCATION.value, description=f'MUST be "{VrsType.SEQ_OFFSET_LOCATION.value}"',