Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR provides a much tighter integration between
ModelAnnotation
andBooleanNetwork
. In the long-term, we want to have some annotations that are "officially supported" by AEON, and this should get us there. Annotations are still "fully general" in the sense that you can put any data into annotations, but now some of that data gets special type-safe access methods.This is currently a work in progress; the exact data that is "officially supported" can still change.
How does it work:
RegulatoryGraph
(and by extensionBooleanNetwork
) now also has an optionalModelAnnotationRoot
. Whenever a model is loaded from or saved into.aeon
, this annotation object is deserialized or serialized with the rest of the network. So it is virtually a part of the network now.ModelAnnotation
and provide type-safe access to "commonly recognized" data. So, for examplemodel.annotation().variable('x').gene_names()
gives a list of genes that is associated with a variable. However, you can also obtain the same data usingmodel.annotation()['variable']['x']['gene_name'].lines()
..pyi
module.BooleanNetwork
(remove regulation, change variable name, etc.) should correctly update affected annotations. But in some cases (e.g. variable inlining), it is not very clear what the result should be. So in that case, we usually have a "best effort" solution that merges as much of the available data as possible.