code: def _remove_dummies(self, to_remove=None, inplace=False):
          
          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
docs: Works INPLACE