Skip to content

Commit

Permalink
Fix complex (#526)
Browse files Browse the repository at this point in the history
Related Issues: #524

The existing implementation was overwriting the existing host
vertex if the guest was the same building block as the vertex.
Fix this by appending to the list of vertices that a given building
block is attached to.
  • Loading branch information
lukasturcani committed Mar 3, 2024
1 parent 92d0a8d commit 5558bfb
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 34 deletions.
4 changes: 2 additions & 2 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ check:
trap error=1 ERR

echo
(set -x; ruff . )
(set -x; ruff check . )

echo
( set -x; ruff format --check . )
Expand All @@ -38,7 +38,7 @@ check:
# Auto-fix code issues.
fix:
ruff format .
ruff --fix .
ruff check --fix .

# Start a MongoDB instance in docker.
mongo:
Expand Down
8 changes: 4 additions & 4 deletions src/stk/_internal/constructed_molecule.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,10 +366,10 @@ def get_atom_info(atom: Atom) -> AtomInfo:

canonical_building_block = building_blocks[old_building_block]

(
canonical_building_block_atom,
) = canonical_building_block.get_atoms(
atom_ids=canonical_building_block_atom_id,
(canonical_building_block_atom,) = (
canonical_building_block.get_atoms(
atom_ids=canonical_building_block_atom_id,
)
)

return AtomInfo(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ def _with_placement_results(
edge_id,
functional_groups,
) in summary.get_edge_functional_groups():
self._edge_functional_groups[
edge_id
] = self._edge_functional_groups.get(edge_id, [])
self._edge_functional_groups[edge_id] = (
self._edge_functional_groups.get(edge_id, [])
)
self._edge_functional_groups[edge_id].extend(functional_groups)
return self

Expand Down
6 changes: 3 additions & 3 deletions src/stk/_internal/topology_graphs/cage/cage.py
Original file line number Diff line number Diff line change
Expand Up @@ -1378,9 +1378,9 @@ def _get_building_block_vertices(
for vertex in cls._vertex_prototypes:
vertex_degree = cls._vertex_degrees[vertex.get_id()]
building_block = building_blocks_by_degree[vertex_degree]
building_block_vertices[
building_block
] = building_block_vertices.get(building_block, [])
building_block_vertices[building_block] = (
building_block_vertices.get(building_block, [])
)
building_block_vertices[building_block].append(vertex)
return typing.cast(
dict[BuildingBlock, abc.Sequence[_CageVertex]],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,9 @@ def _update_neighbor_positions(
(functional_group,) = building_block.get_functional_groups(
fg_id
)
self._neighbor_positions[
neighbor_id
] = self._neighbor_positions.get(neighbor_id, [])
self._neighbor_positions[neighbor_id] = (
self._neighbor_positions.get(neighbor_id, [])
)
self._neighbor_positions[neighbor_id].append(
building_block.get_centroid(
atom_ids=functional_group.get_placer_ids(),
Expand Down
6 changes: 3 additions & 3 deletions src/stk/_internal/topology_graphs/cof/cof.py
Original file line number Diff line number Diff line change
Expand Up @@ -780,9 +780,9 @@ def _get_building_block_vertices(
for vertex in vertices:
vertex_degree = vertex_degrees[vertex.get_id()]
building_block = building_blocks_by_degree[vertex_degree]
building_block_vertices[
building_block
] = building_block_vertices.get(building_block, [])
building_block_vertices[building_block] = (
building_block_vertices.get(building_block, [])
)
building_block_vertices[building_block].append(vertex)
return building_block_vertices

Expand Down
39 changes: 23 additions & 16 deletions src/stk/_internal/topology_graphs/host_guest/complex.py
Original file line number Diff line number Diff line change
Expand Up @@ -499,22 +499,29 @@ def _get_vertices_from_guests(
if isinstance(guests, Guest):
guests = (guests,)

building_block_vertices: dict[BuildingBlock, abc.Sequence[Vertex]]
building_block_vertices = {host: (HostVertex(0, (0.0, 0.0, 0.0)),)}
guest_vertices = {
guest.get_building_block(): (
GuestVertex(
id=i + 1,
position=guest.get_displacement(),
start=guest.get_start_vector(),
target=guest.get_end_vector(),
),
)
for i, guest in enumerate(guests)
}
building_block_vertices.update(guest_vertices)

return building_block_vertices
building_block_vertices: dict[BuildingBlock, list[Vertex]]
building_block_vertices = {host: [HostVertex(0, (0.0, 0.0, 0.0))]}
for id_, guest in enumerate(guests, 1):
building_block = guest.get_building_block()
if building_block in building_block_vertices:
building_block_vertices[building_block].append(
GuestVertex(
id=id_,
position=guest.get_displacement(),
start=guest.get_start_vector(),
target=guest.get_end_vector(),
),
)
else:
building_block_vertices[building_block] = [
GuestVertex(
id=id_,
position=guest.get_displacement(),
start=guest.get_start_vector(),
target=guest.get_end_vector(),
),
]
return building_block_vertices # type: ignore

def clone(self) -> Complex:
return self._clone()
Expand Down

0 comments on commit 5558bfb

Please sign in to comment.