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

tickets/DM-29345 Add method to get QuantumNodes by TaskDef #175

Merged
merged 1 commit into from Mar 23, 2021

Conversation

natelust
Copy link
Contributor

Add a method to the QuantumGraph object that returns all the
QuantumNodes associated with a TaskDef.

Add a method to the QuantumGraph object that returns all the
QuantumNodes associated with a TaskDef.
Copy link
Member

@kfindeisen kfindeisen left a comment

Choose a reason for hiding this comment

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

Looks good!

@@ -103,6 +103,7 @@ def _buildGraphs(self,

nodeNumberGenerator = count()
self._nodeIdMap: Dict[NodeId, QuantumNode] = {}
self._taskToQuantumNode: DefaultDict[TaskDef, Set[QuantumNode]] = defaultdict(set)
Copy link
Member

Choose a reason for hiding this comment

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

I wonder if this is redundant with self._quanta, given that you can get the quantum of a QuantumNode.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

So I thought about that for my first pass at implementing this. However, that would involve either having a mapping of quantum to NodeId (which is easy enough) or QuantumNode. This would involve a pass of looking up all the quanta, loop over them, and then mapping those to QuantumNodes, and then returning this (with a second hop for NodeId for course) I figured that in large graphs it would be worth the memory trade off vs executing a loop and extra mapping lookups in terms of run time.

There are a few different ways to store all this data internally, but I tried to opt for fast lookups vs efficient packing, as the structures themselves are not duplicated, just extra pointers to the structs.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

of course, this could be done the other way, of looking up all the QuantumNodes, extracting the Quantum from then and returning that, but I already had to have the data structure contained in memory of TaskDef to Set[Quantum] to construct the graph, so it seems wasteful to not just use that (again unless we want to free up a dict of pointers)

Copy link
Member

Choose a reason for hiding this comment

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

Yes, clearly there's several ways of doing it. I wasn't actually thinking about memory usage, but about complexity -- redundant data structures are harder to keep in a self-consistent state, especially in the presence of exceptions.

@natelust natelust merged commit f0b6219 into master Mar 23, 2021
@natelust natelust deleted the tickets/DM-29345 branch March 23, 2021 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants