-
Notifications
You must be signed in to change notification settings - Fork 11
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
Add skeleton utilities #76
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -183,7 +183,7 @@ def __len__(self) -> int: | |||||||||||||||||
"""Return the number of nodes in the skeleton.""" | ||||||||||||||||||
return len(self.nodes) | ||||||||||||||||||
|
||||||||||||||||||
def index(self, node: Union[Node, str]) -> int: | ||||||||||||||||||
def index(self, node: Node | str) -> int: | ||||||||||||||||||
"""Return the index of a node specified as a `Node` or string name.""" | ||||||||||||||||||
if type(node) == str: | ||||||||||||||||||
return self.index(self._node_name_map[node]) | ||||||||||||||||||
|
@@ -192,11 +192,93 @@ def index(self, node: Union[Node, str]) -> int: | |||||||||||||||||
else: | ||||||||||||||||||
raise IndexError(f"Invalid indexing argument for skeleton: {node}") | ||||||||||||||||||
|
||||||||||||||||||
def __getitem__(self, idx: Union[int, str]) -> Node: | ||||||||||||||||||
def __getitem__(self, idx: int | str) -> Node: | ||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Replace type comparison with - if type(idx) == int:
+ if isinstance(idx, int):
- elif type(idx) == str:
+ elif isinstance(idx, str): Committable suggestion
Suggested change
|
||||||||||||||||||
"""Return a `Node` when indexing by name or integer.""" | ||||||||||||||||||
if type(idx) == int: | ||||||||||||||||||
return self.nodes[idx] | ||||||||||||||||||
elif type(idx) == str: | ||||||||||||||||||
return self._node_name_map[idx] | ||||||||||||||||||
else: | ||||||||||||||||||
raise IndexError(f"Invalid indexing argument for skeleton: {idx}") | ||||||||||||||||||
|
||||||||||||||||||
def add_node(self, node: Node | str): | ||||||||||||||||||
"""Add a `Node` to the skeleton. | ||||||||||||||||||
|
||||||||||||||||||
Args: | ||||||||||||||||||
node: A `Node` object or a string name to create a new node. | ||||||||||||||||||
""" | ||||||||||||||||||
if type(node) == str: | ||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Replace type comparison with - if type(node) == str:
+ if isinstance(node, str): Committable suggestion
Suggested change
|
||||||||||||||||||
node = Node(node) | ||||||||||||||||||
if node not in self.nodes: | ||||||||||||||||||
self.nodes.append(node) | ||||||||||||||||||
self._update_node_map(None, self.nodes) | ||||||||||||||||||
|
||||||||||||||||||
def add_edge(self, src: Edge | Node | str = None, dst: Node | str = None): | ||||||||||||||||||
"""Add an `Edge` to the skeleton. | ||||||||||||||||||
|
||||||||||||||||||
Args: | ||||||||||||||||||
src: The source `Node` or name of the source node. | ||||||||||||||||||
dst: The destination `Node` or name of the destination node. | ||||||||||||||||||
""" | ||||||||||||||||||
if type(src) == Edge: | ||||||||||||||||||
edge = src | ||||||||||||||||||
if edge not in self.edges: | ||||||||||||||||||
self.edges.append(edge) | ||||||||||||||||||
if edge.source not in self.nodes: | ||||||||||||||||||
self.add_node(edge.source) | ||||||||||||||||||
if edge.destination not in self.nodes: | ||||||||||||||||||
self.add_node(edge.destination) | ||||||||||||||||||
Comment on lines
+227
to
+230
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Undefined variable - if edge.source not in self.nodes:
+ if src.source not in self.nodes:
- if edge.destination not in self.nodes:
+ if src.destination not in self.nodes: Committable suggestion
Suggested change
|
||||||||||||||||||
return | ||||||||||||||||||
|
||||||||||||||||||
if type(src) == str or type(src) == Node: | ||||||||||||||||||
try: | ||||||||||||||||||
src = self.index(src) | ||||||||||||||||||
except KeyError: | ||||||||||||||||||
self.add_node(src) | ||||||||||||||||||
src = self.index(src) | ||||||||||||||||||
|
||||||||||||||||||
if type(dst) == str or type(dst) == Node: | ||||||||||||||||||
try: | ||||||||||||||||||
dst = self.index(dst) | ||||||||||||||||||
except KeyError: | ||||||||||||||||||
self.add_node(dst) | ||||||||||||||||||
dst = self.index(dst) | ||||||||||||||||||
|
||||||||||||||||||
edge = Edge(self.nodes[src], self.nodes[dst]) | ||||||||||||||||||
if edge not in self.edges: | ||||||||||||||||||
self.edges.append(edge) | ||||||||||||||||||
|
||||||||||||||||||
def add_symmetry( | ||||||||||||||||||
self, node1: Symmetry | Node | str = None, node2: Node | str = None | ||||||||||||||||||
): | ||||||||||||||||||
"""Add a symmetry relationship to the skeleton. | ||||||||||||||||||
|
||||||||||||||||||
Args: | ||||||||||||||||||
node1: The first `Node` or name of the first node. | ||||||||||||||||||
node2: The second `Node` or name of the second node. | ||||||||||||||||||
""" | ||||||||||||||||||
if type(node1) == Symmetry: | ||||||||||||||||||
if node1 not in self.symmetries: | ||||||||||||||||||
self.symmetries.append(node1) | ||||||||||||||||||
for node in node1.nodes: | ||||||||||||||||||
if node not in self.nodes: | ||||||||||||||||||
self.add_node(node) | ||||||||||||||||||
return | ||||||||||||||||||
|
||||||||||||||||||
if type(node1) == str or type(node1) == Node: | ||||||||||||||||||
try: | ||||||||||||||||||
node1 = self.index(node1) | ||||||||||||||||||
except KeyError: | ||||||||||||||||||
self.add_node(node1) | ||||||||||||||||||
node1 = self.index(node1) | ||||||||||||||||||
|
||||||||||||||||||
if type(node2) == str or type(node2) == Node: | ||||||||||||||||||
try: | ||||||||||||||||||
node2 = self.index(node2) | ||||||||||||||||||
except KeyError: | ||||||||||||||||||
self.add_node(node2) | ||||||||||||||||||
node2 = self.index(node2) | ||||||||||||||||||
|
||||||||||||||||||
symmetry = Symmetry({self.nodes[node1], self.nodes[node2]}) | ||||||||||||||||||
if symmetry not in self.symmetries: | ||||||||||||||||||
self.symmetries.append(symmetry) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace type comparison with
isinstance()
for better practice and readability in theindex
method.Committable suggestion