code: def _update_port_locations(self, initial_coordinates):
          
          particles = list(self.particles())
          for port in self.all_ports():
              if port.anchor:
                  idx = particles.index(port.anchor)
                  shift = particles[idx].pos - initial_coordinates[idx]
                  port.translate(shift)
docs: Adjust port locations after particles have moved
  
          Compares the locations of Particles between 'self' and an array of
          reference coordinates.  Shifts Ports in accordance with how far anchors
          have been moved.  This conserves the location of Ports with respect to
          their anchor Particles, but does not conserve the orientation of Ports
          with respect to the molecule as a whole.
  
          Parameters
          ----------
          initial_coordinates : np.ndarray, shape=(n, 3), dtype=float
              Reference coordinates to use for comparing how far anchor Particles
              have shifted.