Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adds LigandNetwork.reduce_graph #320

Merged
merged 13 commits into from
Jan 2, 2025
Merged

adds LigandNetwork.reduce_graph #320

merged 13 commits into from
Jan 2, 2025

Conversation

richardjgowers
Copy link
Contributor

move this from Konnektor into gufe, it's very useful

@richardjgowers richardjgowers requested a review from RiesBen May 7, 2024 14:51
@pep8speaks
Copy link

pep8speaks commented May 7, 2024

Hello @richardjgowers! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

Line 187:80: E501 line too long (102 > 79 characters)
Line 214:1: E305 expected 2 blank lines after class or function definition, found 0
Line 217:15: W291 trailing whitespace
Line 218:9: E113 unexpected indentation

Comment last updated at 2024-05-15 06:22:37 UTC

@richardjgowers richardjgowers force-pushed the LigandNetwork_delete_edges branch from f7e5072 to 1a33b8c Compare May 7, 2024 14:52
Copy link

codecov bot commented May 7, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 98.51%. Comparing base (703f151) to head (be15c6f).
Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #320   +/-   ##
=======================================
  Coverage   98.50%   98.51%           
=======================================
  Files          37       37           
  Lines        2147     2156    +9     
=======================================
+ Hits         2115     2124    +9     
  Misses         32       32           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

def remove_edges(self, edges: Union[LigandAtomMapping, list[LigandAtomMapping]]) -> LigandNetwork:
"""Create a new copy of this network with some edges removed

Note that this will not remove any nodes, potentially resulting in
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How big of deal is this? Is it worth adding the complexity of checking to make sure we don't allow that? I can't remember what the rules are, if we allow creating a network that is disconnected, then I don't think we need a check, but if we require a connected network, then we want to make sure we don't let users put things into a inconsistent state.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good suggestion, I think :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I was 50/50 on what is best here. Currently disconnected graphs are "allowed" in a data structure sense, but they're often undesirable. It wouldn't be impossible to find and remove orphan nodes, but then the method isn't strictly "remove edges". I think I'll chicken out and add a kwarg that allows either, default being remove orphans.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It wouldn't be impossible to find and remove orphan nodes

Ah yes, I was suggesting a more gentle "throw an error if removing this edge creates an orphan" or something so it can stay focused and do what it says on the tin, so I would be happy with kwargs that control things like, raising an error or not if it would create an orphan, and/or remove orphan(s) (this will be tricking if removing a edge creates 2 disconnect graphs, which one gets remove? the one with more nodes? -- maybe we can support the case where if it creates a single orphan, the default is to raise an error, but that can be suppressed, and additionally with another kwarg the orphan can be removed)

Co-authored-by: Benjamin Ries <[email protected]>
Copy link
Contributor

@RiesBen RiesBen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

last suggestion, after that beautiful :)

gufe/ligandnetwork.py Outdated Show resolved Hide resolved
@dotsdl dotsdl added this to the Release 1.2 milestone Oct 4, 2024
@dotsdl dotsdl self-assigned this Oct 15, 2024
@dotsdl dotsdl requested a review from atravitz December 10, 2024 16:15
atravitz and others added 4 commits December 10, 2024 17:21
To create the inverse method of `enlarge_graph`, created `reduce_graph`.
This new method gives a superset of the functionality proposed in
`remove_edges`.

Also made a bunch of consistency edits to docstrings while I was at it.
@dotsdl dotsdl changed the title adds LigandNetwork.remove_edges adds LigandNetwork.reduce_graph Dec 13, 2024
Not strictly necessary, but for consistency
@dotsdl
Copy link
Member

dotsdl commented Dec 13, 2024

@atravitz this is now ready for review! I added LigandNetwork.reduce_graph as the inverse of the existing enlarge_graph method, and this generalizes the functionality that would have been present in remove_edges.

Copy link
Contributor

@atravitz atravitz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My hesitation about naming here is that "reduce" in graph theory sort of implies that nodes are preserved (e.g. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.dag.transitive_reduction.html). Could this be named remove or remove_from (to mirror networkx's languag) to be more clear?

Also, is the reason for handling nodes and edges in the same function to avoid making copies of the graph unnecessarily?

gufe/ligandnetwork.py Outdated Show resolved Hide resolved
gufe/ligandnetwork.py Outdated Show resolved Hide resolved
@dotsdl
Copy link
Member

dotsdl commented Dec 17, 2024

Thanks @atravitz! I'm trying to maintain some symmetry to LigandNetwork.enlarge_graph, with reduce_graph effectively being the inverse. I'm open to other verbs here; would either shrink_graph or trim_graph work?

@atravitz
Copy link
Contributor

Thanks @atravitz! I'm trying to maintain some symmetry to LigandNetwork.enlarge_graph, with reduce_graph effectively being the inverse. I'm open to other verbs here; would either shrink_graph or trim_graph work?

"shrink" works, but I'm fine with keeping reduce as long as we're clear about the behavior!

@dotsdl
Copy link
Member

dotsdl commented Dec 19, 2024

@atravitz after talking with @ianmkenney, we like trim_graph quite a bit. Any opposition to this?

@atravitz
Copy link
Contributor

@atravitz after talking with @ianmkenney, we like trim_graph quite a bit. Any opposition to this?

that works for me!

@dotsdl
Copy link
Member

dotsdl commented Jan 2, 2025

pre-commit.ci autofix

@dotsdl dotsdl merged commit 21b1382 into main Jan 2, 2025
13 checks passed
@dotsdl dotsdl deleted the LigandNetwork_delete_edges branch January 2, 2025 18:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

6 participants