def __copy_kwargs__(self): kw = InternalCoordinate.__copy_kwargs__(self) # Give precidence to FunctionCoordinate over InternalCoordinate kw.update(FunctionCoordinate.__copy_kwargs__(self)) kw.update( b_vector_same_function = self.b_vector_same_function, b_vector_function = self.b_vector_function, b_vector_takes_coords = self.b_vector_takes_coords, b_tensor_same_function = self.b_tensor_same_function, b_tensor_function = self.b_tensor_function, b_tensor_takes_coords = self.b_tensor_takes_coords, value_takes_coords = self.value_takes_coords ) return kw
def copy_with_atoms(self, atoms, **kwargs): copykw = InternalCoordinate.__copy_kwargs__(self) # Give precidence to FunctionCoordinate over InternalCoordinate copykw.update(FunctionCoordinate.__copy_kwargs__(self)) copykw.update(self.__copy_kwargs__()) copykw['base_analog'] = self # allow manual override of any of the above copykw.update(kwargs) new_sc = [] for isc, sc in enumerate(self.subcoordinates): atmap = self._idxmap[isc] catoms = [atoms[a] for _, a in sorted(atmap.items())] new_sc.append(sc.copy_with_atoms(catoms)) copykw.update(subcoordinates=new_sc) return self.__class__(**copykw)