def _remove_dummies(self, to_remove=None, inplace=False):
        """Works INPLACE"""
        zmat = self if inplace else self.copy()
        if to_remove is None:
            to_remove = zmat._has_removable_dummies()
        if not to_remove:
            if inplace:
                return None
            else:
                return zmat
        has_dummies = zmat._metadata['has_dummies']

        c_table = zmat.loc[to_remove, ['b', 'a', 'd']]
        c_table['d'] = [has_dummies[k]['actual_d'] for k in to_remove]
        zmat.unsafe_loc[to_remove, 'd'] = c_table['d'].astype('i8')

        zmat_values = zmat.get_cartesian()._calculate_zmat_values(c_table)
        zmat.unsafe_loc[to_remove, ['bond', 'angle', 'dihedral']] = zmat_values
        zmat._frame.drop([has_dummies[k]['dummy_d'] for k in to_remove],
                         inplace=True)
        warnings.warn('The dummy atoms {} were removed'.format(to_remove),
                      UserWarning)
        for k in to_remove:
            zmat._metadata['has_dummies'].pop(k)
        if not inplace:
            return zmat
Works INPLACE